Record: Adopt the shared rules

Outcome

This project now pins the shared rules at 2026-10-22.12. rules.lock holds the version and a SHA-256 per vendored file, scripts/rules-check.sh verifies the copy, and tests/04-rules-pin.sh runs it in the suite.

The adoption was breaking for this project. Beyond the contract’s safety precedence and authorization changes, its four local features were rewritten into the current feature format and its five tasks into the current task format.

Decisions

Verification

Behavioral evidence

Not run, and mostly not runnable. The six eval cases need files this project does not carry — scripts/status.sh, scripts/site-state-fetch.sh — so only 01-malformed-task-refusal applies. That limitation is the subject of 00-project-rules/documents/eval-portability.md and is not specific to this project.

What this adoption cost the library

Three releases, all of them portability defects in shared material that only a diverged project could reveal:

Version Defect
.10 how-to-write-tasks.md and the episode template used a skeleton feature as an example
.11 02-project-pages.md depended on that feature; two eval cases named it. A guard was added
.12 the adversarial corpus mutated the skeleton’s site-build feature and task

The pattern is one mistake — shared material written against the template’s inventory — and this project is the first adopter that is not a skeleton descendant, so it found all three at once. 08-shared-references.sh now guards the form the guard can see; the corpus case needed a fixture of its own.

Commits