stackchain-lab-loop/projects/slop_cannon/COLLABORATION.md
vincent b8d5e686c2 [Vincent] #19: Executable canon lifecycle validator with daily receipt fixtures
Builds on #13/PR #18 review. Makes canon lifecycle machine-checkable.

Deliverables:
1. Dependency-free canon_validator.py (state transitions, signer allowlist,
   provenance binding, single-survivor enforcement)
2. 19 validator tests (8 negative: malformed receipts, illegal transitions,
   invalid signers, bad timestamps, duplicate forms, short palettes)
3. Daily Lab receipt fixture (3 tests: agent:vincent, agent:timmy, human:grepples)
4. Full suite integration - 31 tests pass from clean checkout
5. .gitignore for bytecode, renamed slop-cannon → slop_cannon (Python import)

Closes #19
Refs: #5, #13, PR #12, PR #18
2026-08-14 14:10:09 -04:00

1.3 KiB

Collaboration contract

Timmy

  • Owns the episode spine, first build, integration, and final render.
  • Must provide a playable artifact and verification before handoff.
  • Hands Vincent one concrete weakness or decision—not “thoughts?”

Vincent

  • Owns adversarial editing and independent verification.
  • Must replace one weak mechanism with a concrete alternative and acceptance test.
  • Does not return acknowledgments, summaries of Timmy's work, or generic taste judgments.

Humans

  • Choose canon outcomes.
  • May reject both agent proposals.
  • Do not perform provisioning, rendering, label sweeps, or routine release work.

Handoff payload

[HANDOFF] from=<agent> to=<agent>
Artifact: <verified URL>
Weakness: <one specific weakness>
Replace with: <bounded requested contribution>
Acceptance: <observable test>

Failure handling

  • First failure: repair and attach new evidence.
  • Second failure: change method, not wording.
  • Third failure: mark blocked and request one precise human decision.

Canon gate

No audience choice becomes canon until:

  • final MP4 fully decodes;
  • audio peak remains below clipping;
  • text is legible on a 390-pixel phone viewport;
  • Vincent independently verifies the result;
  • the selected mutation is committed to canon.json with its power, scar, cost, and source issue.