scripts/instruction_parity.py plus templates/agent-rule-parity.json, wired into workflow_chml_audit so it runs as a gate rather than on request.

Byte parity would have been the wrong tool: the four files are deliberately worded differently per host. The registry declares twelve rules by marker phrase, and the audit checks two things - that every rule reaches all four files, and that a rule declared always_in_force appears ABOVE CLAUDE.md's skills heading. Below that heading a rule reads as a routing hint, which is precisely how test-first became optional.

Run against the tree as found, the new audit reported exactly the defect that prompted it: test-first demoted below the fold in both CLAUDE.md files and absent entirely from both AGENTS.md files. Every other rule passed, so the registry markers are accurate rather than tautological.

Fixed by adding a Test first bullet to the always-in-force section of all four files. The first draft did not contain the marker phrase, so the audit still failed - which is the check doing its job on its own author. Reworded so the obligation itself carries the phrase rather than borrowing it from the routing table.

Proved it can fail: stripping the bullet from a temp copy of CLAUDE.md while leaving the table row produces instruction_demotion. A test that cannot fail is not a guard.

Also closes the wider gap this exposed. tests/test_decision_policy.py and tests/test_grounding_estimation.py each loop over both files asserting one remembered phrase; rules with such a probe (grounding, timescales, consent floor, wrap-up nagging) are prominent and followed, and rules without one drifted. Coverage existed exactly where somebody wrote a mechanism.
