feat(t27b): the ratchet decides in steward.t27 - #6218
Conversation
tri t27b ratchet's per-entry if-chain moves into specs/tri/t27b/steward.t27 (entry_code, unlisted, over_cap, ratchet_is_red, is_pass; 31 tests). gen/c/tri/t27b/steward.c regenerated (same bytes as the t27c lab's master build); t27b_rules.py binds it; ratchet() only words the findings. Old and new ratchet agree on 205 cases over 5 lab runs. lab_error gets verdict code 11. The ratchet test's mutation control now mutates the generated rules. Closes #6217 Refs #6198 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Steward note before merge: required checks validate / check-linked-issue / parse-ratchet are SUCCESS. Non-required reds: Corpus ratchet, coverage, duplicate-bodies and gate-topology are red on master too. spec-guards fails on stale seals of other specs (none of them steward.t27) and does not run on master. Check L1 TRACEABILITY fails only its L2 step, because |
|
Follow-up: the merged |
Closes #6217. Refs #6198, #6063.
This is the second slice of the owner's rule "t27b is written in t27". The per-entry
ifchain intri t27b ratchetis now inspecs/tri/t27b/steward.t27.What moved
is_pass,entry_code,unlisted,over_cap,ratchet_is_red, with 17 new tests (31 tests and 1 invariant in all).lab_erroris a reference verdict the lab really emits and had no code.gen/c/tri/t27b/steward.cis regenerated.t27b_rules.pybinds the new functions, andratchet()now only words the findings.Evidence
t27c test-report: 31/31.t27b test --check: 31/31, invariant held.gen-pythonlowers declarations only, not function bodies, so this PR keeps gen-c plus ctypes.ratchet()agree on all 205 cases: 5 lab runs, each checked against the committed ledger and 40 randomly perturbed ledgers, with perturbed run verdicts. 0 cases differ, and all 9 finding kinds fire.scripts/ci/test_the_t27b_steward_decides_in_t27.py: PASS. New checks cover the ratchet cases, the red set,unlistedandover_cap, and confirmratchet()keeps no branch of its own.scripts/ci/test_a_t27b_spec_cannot_move_silently.py: PASS. Its mutation control now removes the UNEXPECTED PASS branch from the generated C, and the mutant misses the planted case.Not done
bless, doctor and status reading are still Python (epic: t27b in t27 -- port the backend and its tooling from Rust/Python into .t27 #6198).🤖 Generated with Claude Code