Add Craftsman (Rishub C R) as non-voting committee contributor - #31
Open
michaeloboyle wants to merge 1 commit into
Open
Add Craftsman (Rishub C R) as non-voting committee contributor#31michaeloboyle wants to merge 1 commit into
michaeloboyle wants to merge 1 commit into
Conversation
Adds a 'contributors' array to committee-config.json, separate from the voting 'members' roster. Craftsman (CraftsMan-Labs) is recorded as a committee contributor without vote/quorum weight. Non-voting is enforced structurally, not by label: - Quorum is Math.floor(members.length / 2) + 1 in the vote workflows, which read members.length and ignore role. Keeping contributors OUT of members[] leaves the quorum denominator (6 -> majority 4) unchanged. - Vote casting is gated by GitHub org/collaborator permission; CraftsMan-Labs is not an agenticsorg member/collaborator, so no counted vote is possible. - New test/committee-config.test.js asserts the invariant (no login in both arrays; members.length==6; quorum==4). Mutation-checked: moving Craftsman into members[] fails the test. Dashboard surfaces contributors (build-dashboard.mjs); committee_size stays members-only. dashboard.json is CI-regenerated by pages.yml, not hand-edited. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Adds a non-voting committee contributor entry to the governance configuration and ensures downstream dashboard generation and tests reflect the separation between voting members and non-voting contributors.
Changes:
- Extends
data/committee-config.jsonwith a new top-levelcontributors[]array (keepingmembers[]unchanged for quorum). - Updates
scripts/build-dashboard.mjsto include contributors in the generateddashboard.json. - Adds
test/committee-config.test.jsto enforce invariants around quorum denominator and contributor placement.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
data/committee-config.json |
Adds contributors[] entry for CraftsMan-Labs while keeping voting members[] intact. |
scripts/build-dashboard.mjs |
Surfaces config.contributors in the dashboard output without affecting committee_size. |
test/committee-config.test.js |
Adds tests asserting non-voting contributor placement and quorum-related invariants. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| import assert from 'node:assert/strict'; | ||
| import { readFileSync } from 'node:fs'; | ||
|
|
||
| const cfg = JSON.parse(readFileSync(new URL('../data/committee-config.json', import.meta.url))); |
Comment on lines
+7
to
+13
| test('committee-config: members drive quorum, contributors do not', () => { | ||
| // Quorum is Math.floor(members.length / 2) + 1 in the vote workflows. | ||
| // Contributors MUST NOT be in members[], or they would change the quorum denominator. | ||
| assert.equal(cfg.members.length, 6, 'voting roster size (quorum denominator) unchanged'); | ||
| const quorum = Math.floor(cfg.members.length / 2) + 1; | ||
| assert.equal(quorum, 4, 'simple-majority quorum is 4'); | ||
| }); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds Craftsman (Rishub C R,
@CraftsMan-Labs) to the committee as a non-voting contributor, per the Chair's direction (2026-07-13). He has been an active OSS-meeting participant (took the Jul 1 calendar action item).How non-voting is enforced (structurally, not by label)
The vote workflows compute quorum as
Math.floor(config.members.length / 2) + 1and never read therolefield. So a "contributor" role insidemembers[]would still inflate the quorum denominator. This PR instead adds a separatecontributorsarray:members[]unchanged → quorum denominator stays 6 → simple-majority quorum stays 4.@CraftsMan-Labsis not anagenticsorgmember/collaborator, so no counted vote is possible.test/committee-config.test.jsasserts the invariant: no login in both arrays,members.length == 6,quorum == 4, contributor role iscontributor.Verification
members[]makes the new test fail (2 fail) — the guard genuinely enforces non-voting.build-dashboard.mjsnow surfacescontributorsindashboard.json;committee_sizestays members-only.docs/data/dashboard.jsonis intentionally NOT hand-edited —pages.ymlregenerates it on deploy.Note for the Chair
rcrawhere butransonrobelsewhere — worth reconciling for correct @-mentions (not touched in this PR).🤖 Generated with Claude Code