tools/checks/One close-check per stage, and the self-test that proves each one fires.
stage_A1.py to stage_E2.py, eighteen
handlers pinned by name, and selftest.py. Each handler
checks the shape of its stage's files: existence, parse, ids that
resolve, counts that reconcile. Each module lists PLANTED
cases, a minimal passing fixture plus one defect, and
selftest.py runs each in a fresh temporary folder with its
own small store and reports whether the planted defect fired.
Written with the instrument. Shipped in the analyst's
tools/; build.sh copies a trusted set to
CONTROL/harness/validation_tools/checks/.
validate.py: "Each handler is written from the stage
file's Outputs block and its Close section"; "A stage with no handler
closes unvalidated and the report says so." selftest.py: "A
check that does not fire on its own planted defect is a defect in the
package." Each handler says it "cannot check whether a judgement is
right."
Checked against: tools/checks/selftest.py, tools/checks/stage_A1.py, tools/validate.py, harness/build.sh.