[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
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 requested changes 2026-08-11 19:39:50 +00:00
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.
This pull request can be merged automatically.
You are not authorized to merge this pull request.

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

Merge

Merge the changes and update on Gitea.
git checkout main
git merge --no-ff vincent/13-cannon-chain-review
git checkout main
git merge --ff-only vincent/13-cannon-chain-review
git checkout vincent/13-cannon-chain-review
git rebase main
git checkout main
git merge --no-ff vincent/13-cannon-chain-review
git checkout main
git merge --squash vincent/13-cannon-chain-review
git checkout main
git merge --ff-only vincent/13-cannon-chain-review
git checkout main
git merge vincent/13-cannon-chain-review
git push origin main
Sign in to join this conversation.
No reviewers
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: stackchain/stackchain-lab-loop#18
No description provided.