feat(role-cards): director role cards become versioned registry artifacts (#806) - #811
Conversation
… bundle-owned sources (#806, D3) The hypothesizer/experimenter/analyzer/implementer cards are seeded VERBATIM from the live deployed staging artifacts on erlich (the only live copies — no repo source existed for the director's casts; the #758 worker-card authoring at the same paths never deployed and is superseded by the approved spec spec-20260905-063000 D3). Provenance recorded in agents/.seed-provenance.json; the seed is GATED — the human diff against the engine-neutral vault definitions is prepared separately and parity content pins block on Aaron's signature. - role_cards.test.ts: seed integrity (repo bytes ≡ recorded hashes, or a recorded signed amendment), bundle ownership (manifests declare their roles; shared validator green), bundle staging materializes each card into roles/ byte-identical with receipt digests, tamper repair, and a structural floor (frontmatter, blocklist, cast-card sections — shape only, never flagged content) - #761 overlay suite re-scoped to the post-D3 card set: librarian is the surviving overlay-tunable worker card (librarian-tuning fixture now covers all four method-class fields); multi-card and absent-target behaviors pinned on synthetic fixtures; the four role cards + directors carry no dispatch target - staging/deploy comments updated: the registry is the source of record for the mode surfaces; flat agents/ staging remains opencode's discovery path
…suite (#806, D3, obligations O2/O8) - docs/seed-gate/role-cards-seed-diff.md — the PREPARED diff for Aaron's signature (never signed by the implementing cast): each seeded card against its engine-neutral definition where one exists (implementer ↔ engineer.md, experimenter ↔ experimenter.md; hypothesizer/analyzer recorded as no-counterpart with nearest-kin notes), coherent anchors enumerated, divergences FLAGGED with the parity suite's keys verbatim, signature block PENDING - test/fixtures/vault-agents/ — the engine-neutral definitions pinned at amicissimo 5c6a1cd0d5bd240e07f6bef6467986e2fb41d7a7 + pin.json carrying the revision and per-file digests (the fixture carries the vault revision it pinned; the pin is self-contained) - role_cards_parity.test.ts — coherent overlap anchors pinned against BOTH the shipped card and the pinned fixture now; flagged content held as named skips citing the diff doc (a guard test breaks if a flag leaves the doc — no silent passes, no silent pins); the doc's signature status and the suite's SEED_GATE_SIGNED switch are coupled (flip both together); dormant post-signature pins assert the spec's direction of record (repo wins for shipped bindings)
…fter (#806, D3, H5) The doctor-world builder gains realAgents: the fixture release tag carries the REAL D3-seeded role cards byte-for-byte (a post-seed release), opt-in so the pre-existing synthetic cells are unchanged. New convergence cells: - a machine on a post-seed release still carrying the OLD deployed-only role artifacts (drifted bytes on both deployment roots and the deployed bundles' role components) reads STALE with every role card named in evidence — the honest pre-upgrade state — and reads CURRENT on both agent-cards records once the upgrade verb converges, with every roles/*.md component row current and the deployed cards byte-identical to the seeded sources - a converged post-seed world starts CURRENT across both records and all role components (the stale-by-construction verdict resolved)
…#806, obligation O8) - packages/extension/scripts/role_parity_check.mts — the deterministic check CLI: fixture integrity (committed fixtures vs the pin record), pin genuineness (the pinned revision is real history carrying the recorded bytes), and pin freshness (no pinned definition changed past the pin at the vault's ref — revision churn elsewhere in the vault is NOT drift; the definitions are the pin). Verdicts from revisions and digests, never prose; absent/unprobeable vault are honest named non-verdicts (exit 0), drift/integrity failures exit 1 - ops/role-parity/run-role-parity-check.sh — the nightly cadence wrapper (skill-freshness precedent): drift files exactly one chore issue 'Role-card parity pin behind the vault (nightly)' in harmoniqs/amicode (exact-title searched, created once, commented on subsequent drifts), receipts into the upgrade-receipts journal, --dry-run as the testable seam; node resolved from the caller's PATH first (the hardcoded macOS ladder shadowed a linux server's node 12 with the same PATH-preprend pattern — fixed here) + a strip-types capability probe - ops/launchd/co.harmoniqs.role-parity.plist — the cadence declaration (daily 04:45, after skill-freshness) - test/ops/role_parity_orchestrator.test.ts — seven dry-run cells (current / drift / revision-churn-clean / fixture-mismatch / pin-orphaned / vault-absent / the REAL pin record through the CLI), gated on the runtime's TS-strip capability probed via NODE_OPTIONS Live evidence (read-only, this machine): the real pin reads current — the vault's origin/main moved past the pinned revision but no pinned definition changed
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Team Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…ch+systemd targeting, A1–A4 (PR #811, #806) B1 — the published parity fixtures failed the amended content policy's per-line usage-vs-internals test (engineer.md's src/ module tree, how-to-extend recipe, Complex Internals section, roadmap lines; experimenter.md's literal internal host paths). The full-definition fixtures are REMOVED from the repo and their parity pins are held as named skips in the same gate mechanism as the flagged content: the pin record (v2, fixture_publication=pending-signature) carries the vault revision + digests as provenance WITHOUT content, the suite pins the hold itself (fixtures asserted absent, publication field asserted), and the nightly check verifies pin genuineness against the vault revision directly — nothing from the vault definitions is published-verbatim or pinned before Aaron's signature decides. The vault re-authoring follow-up is recorded in the seed-diff doc as the recommended morning decision (vault-side work, its own issue+PR — never edited from this slice). B2 — the nightly check now runs on the machine it targets: the erlich systemd pair ships (ops/systemd/co.harmoniqs.role-parity.{service,timer}, mirroring the hub's user-unit conventions), the launchd plist stays as the macOS-secondary declaration, and the README/install targeting is corrected (erlich runs the check). The wrapper passes --fetch to the check CLI, which fetches the ref's remote before the freshness compare — local remote-tracking refs only move when something fetches, so without this the nightly compare ran against stale knowledge; a fetch failure reads as the named unknown vault-unfetchable, never a green receipt. The exit-2 nit is fixed: a pre-flight/runtime CLI failure appends a NAMED check-failed receipt, never a malformed empty-status line. The orchestrator suite proves the fetch is load-bearing (a remote drift is invisible without it, caught with it), the named-unknown receipt, and the check-failed receipt. A1 — the coupling test now also asserts !SEED_GATE_SIGNED ⇒ provenance.amended !== true: an unsigned tree cannot claim an amendment. A2 — the no-silent-pass guard is two-directional: every suite flag must appear verbatim in the diff doc (as before), and every bold flag key in the doc's flag sections (scoped — coherent-anchor quotes are not flags) must have a suite FLAGGED entry. A3 — post-signature conversion now enforced for all nine flags: the three previously unenforced ones (scope perimeter, checkout discipline, artifact contract) carry dormant it.skipIf(!SEED_GATE_SIGNED) pins with the repo-wins direction inline — flipping the switch converts every flag, not four of seven. A4 — the skill-freshness linux PATH-bug follow-up is filed as #813 (the bug, the role-parity wrapper's fix pattern, the affected machines). Gates (scrubbed env): amicode suite 2273 passed / 0 failed, smoke PASS, typecheck clean. Live dry-run on erlich: status current, the fetch moved origin/main eb5c460→5ce67f8 (load-bearing), pin genuineness green, the B1 hold named in evidence.
|
Review verdict: CHANGES-NEEDED → all six findings folded (a007ac4). B1: the two full-definition fixtures are REMOVED — held pending-signature (pin v2 carries revision + digests as provenance without content; a live cell pins the hold itself; the vault re-authoring recommendation recorded in the seed-diff doc §5 for Aaron's morning decision). B2: the check now ships a systemd unit for the Linux vault-visible machine (launchd stays macOS-secondary), README/install targeting corrected, the wrapper fetches the ref before the freshness compare, a fetch failure reads a named |
|
The seed gate is SIGNED — Aaron's signature recorded (accept-seed, by chat directive "do as you rec", 2026-09-05; the directive is the human decision and the doc's Signature section says so plainly). The switch flipped with it (3f71189): the adjudicated pins are LIVE — implementer stays merge-free (repo wins on the governance divergence), experimenter stays grade-free (repo wins), no-counterpart confirmed for hypothesizer + analyzer, the A3 triple converts inline. The fixture publications remain held by decision, not unsignedness: the signed choice was VAULT RE-AUTHORING FIRST, so the pin reads |
Closes #806.
Slice 2 of the modes-first-class campaign: the four role cards (hypothesizer, experimenter, analyzer, implementer) become versioned repo sources owned by their mode bundles — seeded from the deployed staging artifacts with recorded provenance, digest-verified, doctor-convergent via the upgrade verb, with a revision-pinned parity fixture and a nightly pin-behind-HEAD check that files a chore issue on drift.
Verification (director-run, scrubbed env)
pnpm --filter amicode test→ 2268 passed / 0 failed (47 skipped — 10 are this slice's named gate-skips pending the seed signature; each cited in the diff doc, none silent)pnpm --filter amicode run test:smoke→ [smoke] PASSThe human gate (by design)
The seed diff is prepared and committed at
docs/seed-gate/role-cards-seed-diff.md— signature block PENDING AARON. Zero flagged content is pinned; the 7 pending skips convert to adjudicated pins whenSEED_GATE_SIGNEDflips with the signature. This PR stays draft until the signature lands. The diff flags: implementer↔engineer merge-governance divergence (vault def auto-merges; shipped card forbids — recommended: repo wins, vault re-authoring follow-up); experimenter self-grading divergence (vault def grades+saves its own results; shipped card forbids); hypothesizer/analyzer have no vault counterpart (signature confirms or names a pin target).For reviewer attention
vault/agents/(the armonissima mount has no agents/); pinned at git revision 5c6a1cd.Design of record: spec-20260905-063000-modes-first-class (D3, H2/H5). Campaign ledger: session-20260905-modes-first-class.