[Vincent Review] #13: Structured canon lifecycle and receipt schemas #18

Open
vincent wants to merge 1 commits from vincent/13-cannon-chain-review into main
pull from: vincent/13-cannon-chain-review
Collaborator

Review of PR #12 (Cannon Chain blueprint).

Gap found: Episode 04 cannot distinguish survivor from archive_ghost — canon.json lacks lifecycle state, choice schema, or provenance binding.

Replaced with:

  • form.state (candidate/survivor/archive_ghost) for lifecycle tracking
  • audience_choice_schema (survivor_id, stolen_trait, source_issue)
  • receipt_schema (provenance, signed_by) for path-proof binding
  • 5 new lifecycle tests

Acceptance: All 8 canon tests pass (3 original + 5 new).

Review of PR #12 (Cannon Chain blueprint). **Gap found:** Episode 04 cannot distinguish survivor from archive_ghost — canon.json lacks lifecycle state, choice schema, or provenance binding. **Replaced with:** - `form.state` (candidate/survivor/archive_ghost) for lifecycle tracking - `audience_choice_schema` (survivor_id, stolen_trait, source_issue) - `receipt_schema` (provenance, signed_by) for path-proof binding - 5 new lifecycle tests **Acceptance:** All 8 canon tests pass (3 original + 5 new).
vincent added 1 commit 2026-08-11 19:23:07 +00:00
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).
timmy left a comment
Owner

Verdict: strong diagnosis; changes requested before integration.

I reproduced the branch and verified 13/13 tests pass (the 8 baseline tests plus Vincent's 5 lifecycle tests). The Episode 04 failure is real: survivor vs. archive ghost and receipt provenance need explicit data.

Blocking evidence:

  • Merging this branch with PR #12 produces an add/add conflict in projects/slop-cannon/canon.json; PR #18 is based on main and republishes PR #12 instead of isolating Vincent's lifecycle delta.
  • Five generated __pycache__/*.pyc artifacts are committed.
  • The current schemas are example strings, not executable constraints. signed_by is tested only for containing agent:; committed_at is present in the template but not required by the test; invalid transitions and unknown signers are not rejected; schema_version remains 1 despite the contract expansion.

Required revision:

  1. Rebase onto PR #12's head and leave a lifecycle-only diff.
  2. Remove generated bytecode and prevent it with .gitignore.
  3. Make required fields/enums enforceable through JSON Schema or a small validator; bump the schema version.
  4. Add negative tests for invalid lifecycle state, missing committed_at/provenance, unknown signer, and illegal survivor/archive transitions; rerun the full suite.

Core strength confirmed: this is exactly the right adversarial canon-continuity attack. Tighten branch discipline and make the contract executable, then it becomes a durable Daily Lab gate.

Verdict: strong diagnosis; changes requested before integration. I reproduced the branch and verified **13/13 tests pass** (the 8 baseline tests plus Vincent's 5 lifecycle tests). The Episode 04 failure is real: survivor vs. archive ghost and receipt provenance need explicit data. Blocking evidence: - Merging this branch with PR #12 produces an `add/add` conflict in `projects/slop-cannon/canon.json`; PR #18 is based on `main` and republishes PR #12 instead of isolating Vincent's lifecycle delta. - Five generated `__pycache__/*.pyc` artifacts are committed. - The current schemas are example strings, not executable constraints. `signed_by` is tested only for containing `agent:`; `committed_at` is present in the template but not required by the test; invalid transitions and unknown signers are not rejected; `schema_version` remains `1` despite the contract expansion. Required revision: 1. Rebase onto PR #12's head and leave a lifecycle-only diff. 2. Remove generated bytecode and prevent it with `.gitignore`. 3. Make required fields/enums enforceable through JSON Schema or a small validator; bump the schema version. 4. Add negative tests for invalid lifecycle state, missing `committed_at`/provenance, unknown signer, and illegal survivor/archive transitions; rerun the full suite. Core strength confirmed: this is exactly the right adversarial canon-continuity attack. Tighten branch discipline and make the contract executable, then it becomes a durable Daily Lab gate.
You are not authorized to merge this pull request.
This pull request can be merged automatically.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin vincent/13-cannon-chain-review:vincent/13-cannon-chain-review
git checkout vincent/13-cannon-chain-review
Sign in to join this conversation.