Skip to content

Implement 0361: voice as the complement to exit — the Rule Change Proposal process - #579

Merged
crs48 merged 10 commits into
mainfrom
claude/0361-voice-as-the-complement-to-exit-ostrom-collectiv
Jul 19, 2026
Merged

Implement 0361: voice as the complement to exit — the Rule Change Proposal process#579
crs48 merged 10 commits into
mainfrom
claude/0361-voice-as-the-complement-to-exit-ostrom-collectiv

Conversation

@crs48

@crs48 crs48 commented Jul 19, 2026

Copy link
Copy Markdown
Owner

Implements exploration 0361 — all 6 implementation and 5 validation items.

The core change

GOVERNANCE.md legitimated BDFL by pointing at exit: "you can fork the code or re-implement the protocol." That is the posture Hirschman warns degrades quality — when leaving is the only move, the quality-sensitive members go first and quietly, and you lose the customer and the signal. Exploration 0358 flagged it and deferred it here.

Ostrom's design principle 3 supplies the missing half, and the important detail is what it does not require: not a vote, not consensus — a path. That is what makes this implementable at current size.

So BDFL now rests on three things rather than one:

  1. The right to leave. MIT code, open protocol.
  2. The right to be heard, on the record. Anyone affected by an operational rule can propose changing it and gets a public written answer with reasoning.
  3. This document commits to growing past BDFL on the triggers below.

What landed

The processdocs/RULE_CHANGES.md. Defines an operational rule (binds non-maintainers · changed by maintainer commit · enumerated), lists the six in-scope rules from the exploration's inventory, and states what is out of scope with reasons (protocol → XPP, conduct, trademark, security embargoes). Anyone affected may propose — explicitly including self-hosters and plugin authors who have never contributed code.

The commitment — every RCP gets a public accept / decline / defer / redirect with reasoning within 30 days. Set generously on purpose: a missed window is worse than no promise, so "deferred, here's why" counts as a response.

The intake.github/ISSUE_TEMPLATE/rule-change.yml, modelled on the XPP template: which rule, what change, who is affected, what breaks if we do nothing.

The recorddocs/decisions/rule-changes.md, append-only, seeded with four real decisions back-filled from the exploration record and clearly marked retroactive:

Decision Outcome
RCP-0001 "No context capture" added to Charter §6 Accepted
RCP-0002 "No marketplace self-preferencing" added to §6 Accepted
RCP-0003 Relicense the core under GPL/AGPL (0345) Declined
RCP-0004 Charge for admission to the xNet Index (0365→0366) Declined / withdrawn

Two declines and a reversal, because a log of only the accepted proposals is marketing. RCP-0004 is specifically a lane we proposed and then refused — under the append-only rule both stay visible.

The receipt — a governance-rule-change-path claim in the claims ledger asserts all three surfaces exist and that the log still matches **Declined**, so the honesty cannot be edited out. Verified it bites: deleting the log fails that claim and only that claim.

Cross-links — Charter §6 and the ECONOMICS Moat Register now each name themselves as in-scope and point at the path. §6's covenant is answerable rather than merely stated; a covenant only the covenantor may amend, silently, is a preference.

Scope discipline

Not a vote, not a veto, not a foundation. The BDFL still decides — what is removed is the ability to change a rule that binds other people without saying why, in public, on the record. Options C (advisory council) and D (foundation now) were declined as premature: both need a constituency that does not exist yet, and 0241 stages D on triggers we have not hit.

Verification

  • Claims ledger green (9 tests); negative test — removing the decision log fails governance-rule-change-path and nothing else
  • pnpm typecheck — 97/97
  • pnpm lint — 0 errors
  • check-humane-patterns — 2266 files OK
  • All relative links in the five touched docs resolve; issue-template YAML parses and validates
  • README → GOVERNANCE → RULE_CHANGES is two clicks

No changeset: the only packages/* change is a test file.

🤖 Generated with Claude Code


Note: an earlier revision of this branch also carried fixes for four unrelated CI failures on main (the @xnetjs/social browser-bundle break, a vitest alias gap, a missing /post/ route prefix, and seven unformatted files). #578 landed equivalent fixes independently while this was open, so those commits were dropped and main merged in. The diff here is now purely the 0361 governance work.

xNet Test added 8 commits July 18, 2026 22:29
Signed-off-by: xNet Test <test@xnet.dev>
Signed-off-by: xNet Test <test@xnet.dev>
Signed-off-by: xNet Test <test@xnet.dev>
…0361)

Signed-off-by: xNet Test <test@xnet.dev>
…ICS (0361)

Signed-off-by: xNet Test <test@xnet.dev>
Signed-off-by: xNet Test <test@xnet.dev>
Signed-off-by: xNet Test <test@xnet.dev>
@crs48
crs48 temporarily deployed to pr-579 July 19, 2026 05:36 — with GitHub Actions Inactive
@crs48
crs48 temporarily deployed to pr-579 July 19, 2026 06:36 — with GitHub Actions Inactive
@github-actions

Copy link
Copy Markdown
Contributor

🖼️ UI changes in this PR

Screens

✏️ Data _(SSIM 0.772)_
before after diff
before after diff
✏️ Discover _(SSIM 0.849)_
before after diff
before after diff
✏️ Home _(SSIM 0.868)_
before after diff
before after diff

Auto-captured by CI · run. Informational — not a blocking check.

github-actions Bot added a commit that referenced this pull request Jul 19, 2026
github-actions Bot added a commit that referenced this pull request Jul 19, 2026
@github-actions

github-actions Bot commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

Preview removed for PR #579.

github-actions Bot added a commit that referenced this pull request Jul 19, 2026
@crs48
crs48 force-pushed the claude/0361-voice-as-the-complement-to-exit-ostrom-collectiv branch from b018217 to 830e3ee Compare July 19, 2026 06:47
@crs48
crs48 temporarily deployed to pr-579 July 19, 2026 06:47 — with GitHub Actions Inactive
github-actions Bot added a commit that referenced this pull request Jul 19, 2026
@crs48
crs48 temporarily deployed to pr-579 July 19, 2026 07:10 — with GitHub Actions Inactive
@crs48
crs48 merged commit d86c906 into main Jul 19, 2026
20 checks passed
@crs48
crs48 deleted the claude/0361-voice-as-the-complement-to-exit-ostrom-collectiv branch July 19, 2026 07:19
github-actions Bot added a commit that referenced this pull request Jul 19, 2026
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.

1 participant