Gap: Episode 04 cannot distinguish survivor from archive_ghost — canon.json lacks lifecycle state, choice schema, or provenance binding. Replace: - Add form.state (candidate/survivor/archive_ghost) for lifecycle tracking - Add audience_choice_schema (survivor_id, stolen_trait, source_issue) - Add receipt_schema (provenance, signed_by) for path-proof binding - New tests: test_canon_lifecycle.py (5 tests) Acceptance: All 8 canon tests pass (3 original + 5 lifecycle).
46 lines
1.3 KiB
Markdown
46 lines
1.3 KiB
Markdown
# 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
|
|
|
|
```text
|
|
[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.
|