- Status: draft
- Author: Codex
- Created: 2026-07-29
- Design refs:
design/05 §3, §5(guild participation, Commons front door and governance),design/10 §1(Open Source participation) - Depends on: Commons Compact (server foundation), Client Shell & Sim Loop (implemented), account/session bootstrap, WebSocket Transport, faction/incorporation model, guild model
- Parent / amends:
archive/commons-compact.md - Supersedes / superseded by: —
- Planning:
planning/commons-onboarding-and-governance/(once implementing)
Complete the player-facing half of the Mutual Aid Compact after its server foundation: expose the incorporation choice every run, bind Open Source auto-membership, render the cohort and current-standing surfaces, connect guild participation, and implement the monthly direction-only tithe vote. This split prevents the server RFC from improvising incorporation, faction, guild, or client contracts that do not yet exist.
- Every run's incorporation contract renders a plain
sign/declineCompact line item. Declining leaves a persistent non-signatory affordance; signing sends the authoritativesign_compactintent. - Once the faction/incorporation RFC defines Open Source identity, its incorporation path signs the same Compact automatically at the catalog-declared faction tithe. It does not create a private pool.
- The cohort panel consumes server snapshots/events and shows named neighbors, current Health/Capacity, labeled NPC fallback, co-op entry points, and current standing. It never materializes a permanent moral badge from historical standing. Its formula view renders every Commons formula and the exact Enclosure source-weight table from the shipped generated artifact.
- The monthly cohort ballot chooses direction within the server-owned tithe band; it does not accept
implementation proposals or arbitrary numeric values. The authoritative election window, eligibility,
tie-break, result event, and effective-boundary schemas remain a
DESIGN-GAPuntil account, faction, guild, and transport identities are specified. - Guild participation contributes to the same Commons and supplies the guild Health term. Guildless members continue using the already-shipped cohort substitution. Small-guild mercy changes access or progress, never the population-normalized Health formula.
- None. This RFC is a boundary split from the implemented server foundation, not a mechanics change.
- Browser tests prove the Compact line item appears on every incorporation path; decline remains visible, sign uses the server intent, and Open Source uses the same pool with its catalog tithe.
- The cohort panel accurately renders current server snapshots, named neighbors, NPC labels, and ambient collapse/recovery/recruitment events without inventing client state; its formula view matches the generated artifact exactly.
- A closed, versioned ballot contract proves one eligible vote per Founder, deterministic resolution, bounded results, an auditable result event, and application at the declared accrual boundary.
- Guild, cohort, and guildless fallback fixtures produce the server-published Health inputs; small-guild mercy cannot change the population-invariance calculation.
- Leaving remains available from every member surface and visibly explains Solidarity reset before the authoritative intent is sent.
DESIGN-GAP: ballot identity/eligibility and tie policy await account/session and guild ownership.DESIGN-GAP: exact cohort-panel interaction design awaits the Client Shell RFC's implementation.- The faction/incorporation RFC owns how Open Source identity is selected and persisted; this RFC only binds that result to the existing Compact intent.
Status ruling (2026-08-03): UNBLOCKED — every owner contract now exists. Original 2026-07-29 ruling preserved below for the record; the six blockers are answered in the new contracts section. Blocker #1 is
one-third answered (account-and-session-bootstrap.md now owns identity; transport's contracts are
answered T1–T6). The remaining owners — faction/incorporation model and guild model — are not
drafted, and blockers #2–#5 all hang off them. This RFC stays out of the implementable queue until
those two RFCs exist; nothing here may be improvised around their absence (the reason this split
exists at all).
- Missing owner contracts:
account/session(drafted 2026-07-29), faction/incorporation, and guild models are not drafted. This RFC cannot define membership-gated UI or governance identity until those boundaries exist. - Incorporation contract: define its state, every Phase-0 path, sign/decline intent timing, persistence across a run, Open Source binding, and catalog tithe values. “Every path” has no closed set to test today.
- Ballot protocol: replace the acknowledged
DESIGN-GAPwith exact election-window, proposal, eligibility snapshot, vote, tie-break, result, audit-event, and effective-accrual-boundary schemas. Define “monthly” in server time and behavior across restarts/epoch changes. - Snapshot/event surface: enumerate the transport payloads and revisions consumed by the cohort panel, including recovery ordering for collapse/recovery/recruitment news and current standing.
- Guild contribution boundary: define guild ownership/membership history, the Health input snapshot, tithe band, leave/join concurrency, and small-guild mercy's permitted non-formula effects.
- Generated formula UI: identify the exact generated artifact fields exposed to the client and add a source-fingerprint/parity test; “renders every formula” must not create a second hand-written formula authority.
- Owner contracts (blocker #1): closed. Account/session (implemented), faction/incorporation (implemented — F2's compact binding + F2a's tithe-raise), guild model (implemented — G3's Health term, GD3-1's evaluation-based activity), transport (implemented — wire v2, event relay). This RFC now binds to real seams only.
- Incorporation contract (blocker #2): the Compact line item renders on the incorporation
sheet for every faction;
sign/declineat any time from Tier 0 (signing = the existingsign_compactintent; the incorporation-time render is UI convenience, not a separate path); Open Source auto-sign and the existing-member tithe-raise are the implemented F2/F2a paths — fixtures consume them, nothing new. Decline persists as a visible affordance (client state, re-render each run). - Ballot protocol (blocker #3), executable: monthly in server time = the FIRST accrual
boundary on or after 00:00 UTC on the 1st opens a 72-hour window (window identity =
(cohort_id, year, month), restart-safe because it derives from the calendar, not a timer). Ballot =cast_tithe_ballot {window_id, direction}intent,direction ∈ {lower, hold, raise}(direction-only — the design's law), one per Founder per window (idempotency by window in the intent record), eligibility = compact member at cast time. Resolution at window close: plurality; tie →hold; result eventtithe_ballot_resolved {window_id, tally, direction, new_tithe_ppm}with the band-clamped step (ballot_step_ppmcatalog literal, 10_000) applying at the next accrual boundary after the event. Epoch changes mid-window: the window completes under its opening epoch's band (windows are short; the pin rule is the run rule). - Snapshot/event surface (blocker #4): the cohort panel consumes exactly:
cohortscope snapshots (existing schema),compact_sampled/compact_left/collapse/recovery/recruitment events (existing kinds), and the generated formula artifact — enumerated, closed, nothing new; recovery ordering is the wire-v2 cursor contract (no special case). - Guild contribution boundary (blocker #5): implemented (G3 + GD3-1 + the membership-period clearing rules); this RFC renders it, never recomputes.
- Formula UI (blocker #6): the panel renders the SHIPPED generated artifact verbatim with its source fingerprint displayed; a parity test asserts the rendered bytes equal the artifact (no second authority — the blocker's own demand, now testable).
Client scope: the cohort panel, incorporation sheet, and ballot card join the Game-UI RFC's second screen set (same U2 wire-only contract).
- 2026-07-29: split from Commons Compact during implementation review so missing client/governance dependencies remain explicit rather than improvised or falsely marked shipped.
- 2026-07-29: updated implemented dependencies; Codex acceptance review confirmed six blocking contracts, including the RFC's existing ballot gap.
- 2026-08-03: UNBLOCKED — all six blockers answered against the implemented owner contracts; calendar-derived ballot windows, direction-only voting, band-clamped steps.
- 2026-07-29: ruled blocked-on-owner (faction/incorporation + guild RFCs); account/session and transport dependencies now answered.