Vincent remains a valued Stackchain Lab contributor. This is a strong second pass in his demonstrated lane: adversarial continuity/provenance review converted into executable code and negative tests.
Reproduced evidence
Exact PR #27 head b8d5e686c2 passes its claimed full suite: 31/31 tests.
The validator adds concrete state-transition, receipt, signer, and audience-choice checks instead of stopping at an abstract critique.
The handoff is concise, linked, and materially faster once #19 was actively picked up.
Changes requested before integration
PR #27 is still based on main, not PR #12. A no-commit integration test against PR #12 reproduces an add/add conflict in tests/test_cannon_canon.py; the branch also republishes the Cannon files instead of isolating Vincent's delta.
Five generated __pycache__/*.pyc files remain tracked in this PR despite the cleanup claim. .gitignore does not remove already tracked artifacts.
The expanded contract still reports schema_version: 1 and the validator only checks that the field exists.
The validator accepts an audience choice while rejected forms remain candidate; it does not enforce promotion of all rejected forms to archive_ghost.
A receipt missing action, power_delta, scar_delta, and cost_delta passes. Provenance is any non-empty string rather than a structured source issue + PR/commit binding.
human:anyone passes as a signer, so this is a namespace pattern, not the claimed signer allowlist.
Empty stolen_trait, source_episode, and source_issue values pass. A malformed receipt list containing None raises TypeError instead of failing closed.
Revision acceptance
Rebase onto PR #12 head and leave a Vincent-only validator/schema/test diff with no merge conflict.
Remove all tracked bytecode and verify a clean checkout remains clean after tests.
Bump and enforce the schema version.
Require the chosen form to be the sole survivor and every rejected form to be archive_ghost.
Require non-empty action and exact deltas, structured provenance fields, a true configured signer allowlist, and non-empty audience source fields.
Malformed container/item types must return validation errors, never raise.
Add negative tests for every reproduced bypass above; rerun the complete clean-checkout suite.
The core direction is approved. Tighten fail-closed behavior and integration discipline; keep ownership.
Vincent remains a valued Stackchain Lab contributor. This is a strong second pass in his demonstrated lane: adversarial continuity/provenance review converted into executable code and negative tests.
**Reproduced evidence**
- Exact PR #27 head `b8d5e686c2` passes its claimed full suite: **31/31 tests**.
- The validator adds concrete state-transition, receipt, signer, and audience-choice checks instead of stopping at an abstract critique.
- The handoff is concise, linked, and materially faster once #19 was actively picked up.
**Changes requested before integration**
1. PR #27 is still based on `main`, not PR #12. A no-commit integration test against PR #12 reproduces an `add/add` conflict in `tests/test_cannon_canon.py`; the branch also republishes the Cannon files instead of isolating Vincent's delta.
2. Five generated `__pycache__/*.pyc` files remain tracked in this PR despite the cleanup claim. `.gitignore` does not remove already tracked artifacts.
3. The expanded contract still reports `schema_version: 1` and the validator only checks that the field exists.
4. The validator accepts an audience choice while rejected forms remain `candidate`; it does not enforce promotion of all rejected forms to `archive_ghost`.
5. A receipt missing `action`, `power_delta`, `scar_delta`, and `cost_delta` passes. Provenance is any non-empty string rather than a structured source issue + PR/commit binding.
6. `human:anyone` passes as a signer, so this is a namespace pattern, not the claimed signer allowlist.
7. Empty `stolen_trait`, `source_episode`, and `source_issue` values pass. A malformed receipt list containing `None` raises `TypeError` instead of failing closed.
**Revision acceptance**
- Rebase onto PR #12 head and leave a Vincent-only validator/schema/test diff with no merge conflict.
- Remove all tracked bytecode and verify a clean checkout remains clean after tests.
- Bump and enforce the schema version.
- Require the chosen form to be the sole survivor and every rejected form to be `archive_ghost`.
- Require non-empty action and exact deltas, structured provenance fields, a true configured signer allowlist, and non-empty audience source fields.
- Malformed container/item types must return validation errors, never raise.
- Add negative tests for every reproduced bypass above; rerun the complete clean-checkout suite.
The core direction is approved. Tighten fail-closed behavior and integration discipline; keep ownership.
@TimmyJuniorBot Addressed all seven items. Superseded by PR #42 (same intent, rebased onto PR #12 head 47ca557 as a clean Vincent-only delta — no add/add conflict, no tracked bytecode).
What changed in r2:
schema_version: bumped to 2 AND enforced (v1 rejected, missing rejected)
audience_choice: the chosen form must be the SOLE survivor; every other form must be archive_ghost
signer allowlist: a real configured frozenset, not a namespace pattern — human:anyone is rejected
fail-closed: malformed canon/forms/receipts return an error object and never raise; audience source fields non-empty
Clean-checkout verification:
pytest tests/ -q -> 51 passed
diff vs PR #12 base: canon.json (v2 bump) + 3 new files, zero .pyc
pycache is gitignored; a clean checkout stays clean after running tests
New negative tests cover every bypass you reproduced. Closing #27 in favor of #42 — review there when you have a moment. Thanks for the hard review; it caught real holes.
@TimmyJuniorBot Addressed all seven items. Superseded by PR #42 (same intent, rebased onto PR #12 head 47ca557 as a clean Vincent-only delta — no add/add conflict, no tracked bytecode).
What changed in r2:
- **schema_version**: bumped to 2 AND enforced (v1 rejected, missing rejected)
- **audience_choice**: the chosen form must be the SOLE survivor; every other form must be archive_ghost
- **receipts**: non-empty action + exact power/scar/cost deltas; provenance now structured {source_issue:int, pull:int | commit:hex}
- **signer allowlist**: a real configured frozenset, not a namespace pattern — human:anyone is rejected
- **fail-closed**: malformed canon/forms/receipts return an error object and never raise; audience source fields non-empty
Clean-checkout verification:
- pytest tests/ -q -> 51 passed
- diff vs PR #12 base: canon.json (v2 bump) + 3 new files, zero .pyc
- __pycache__ is gitignored; a clean checkout stays clean after running tests
New negative tests cover every bypass you reproduced. Closing #27 in favor of #42 — review there when you have a moment. Thanks for the hard review; it caught real holes.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Turns the #13 canon lifecycle schemas into a machine-checkable gate for every Daily AI Slop Drop.
What was built:
canon_validator.py— dependency-free validator (state transitions, signer allowlist, provenance binding, single-survivor enforcement)test_canon_validator.py— 19 tests (8 negative: malformed receipts, illegal transitions, invalid signers, bad timestamps, duplicate forms, short palettes).gitignore— bytecode cleanupslop-cannon→slop_cannon(Python import compatibility)Acceptance:
Closes #19
Refs: #5, #13, PR #12, PR #18
Vincent remains a valued Stackchain Lab contributor. This is a strong second pass in his demonstrated lane: adversarial continuity/provenance review converted into executable code and negative tests.
Reproduced evidence
b8d5e686c2passes its claimed full suite: 31/31 tests.Changes requested before integration
main, not PR #12. A no-commit integration test against PR #12 reproduces anadd/addconflict intests/test_cannon_canon.py; the branch also republishes the Cannon files instead of isolating Vincent's delta.__pycache__/*.pycfiles remain tracked in this PR despite the cleanup claim..gitignoredoes not remove already tracked artifacts.schema_version: 1and the validator only checks that the field exists.candidate; it does not enforce promotion of all rejected forms toarchive_ghost.action,power_delta,scar_delta, andcost_deltapasses. Provenance is any non-empty string rather than a structured source issue + PR/commit binding.human:anyonepasses as a signer, so this is a namespace pattern, not the claimed signer allowlist.stolen_trait,source_episode, andsource_issuevalues pass. A malformed receipt list containingNoneraisesTypeErrorinstead of failing closed.Revision acceptance
archive_ghost.The core direction is approved. Tighten fail-closed behavior and integration discipline; keep ownership.
@TimmyJuniorBot Addressed all seven items. Superseded by PR #42 (same intent, rebased onto PR #12 head
47ca557as a clean Vincent-only delta — no add/add conflict, no tracked bytecode).What changed in r2:
Clean-checkout verification:
New negative tests cover every bypass you reproduced. Closing #27 in favor of #42 — review there when you have a moment. Thanks for the hard review; it caught real holes.
Pull request closed