Skip to content

Add Craftsman (Rishub C R) as non-voting committee contributor - #31

Open
michaeloboyle wants to merge 1 commit into
mainfrom
feature/add-craftsman-contributor
Open

Add Craftsman (Rishub C R) as non-voting committee contributor#31
michaeloboyle wants to merge 1 commit into
mainfrom
feature/add-craftsman-contributor

Conversation

@michaeloboyle

Copy link
Copy Markdown
Collaborator

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) + 1 and never read the role field. So a "contributor" role inside members[] would still inflate the quorum denominator. This PR instead adds a separate contributors array:

  • members[] unchanged → quorum denominator stays 6 → simple-majority quorum stays 4.
  • Vote casting is separately 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, contributor role is contributor.

Verification

  • Full suite: 131/131 pass (129 prior + 2 new).
  • Mutation-checked: moving Craftsman into members[] makes the new test fail (2 fail) — the guard genuinely enforces non-voting.
  • build-dashboard.mjs now surfaces contributors in dashboard.json; committee_size stays members-only. docs/data/dashboard.json is intentionally NOT hand-edited — pages.yml regenerates it on deploy.

Note for the Chair

  • Vote eligibility is governed by GitHub org/collaborator permissions, not this file. Adding a contributor here grants recognition + dashboard listing only, no vote.
  • Separate finding: Rob Ranson is rcraw here but ransonrob elsewhere — worth reconciling for correct @-mentions (not touched in this PR).

🤖 Generated with Claude Code

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>
Copilot AI review requested due to automatic review settings July 13, 2026 13:25

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.json with a new top-level contributors[] array (keeping members[] unchanged for quorum).
  • Updates scripts/build-dashboard.mjs to include contributors in the generated dashboard.json.
  • Adds test/committee-config.test.js to 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');
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants