Appendix: defects and the checks that now catch them
Nine essays condensed to a register. Each entry is a defect found in our own work, what it cost, and the test that fires if it returns.
Applies to SC-WBD-001-beta and 002-pilot. Each entry names the run it came from; the checks that now catch them run against every future one.
This is an appendix, not the argument. It exists because the
checks described here are running in the repository and someone maintaining the
code needs to know why they are there. The full narrative for each entry is in
reports/decorative_guards.md.
| Defect | What it cost | What catches it now |
|---|---|---|
| Card patterns named modules that no longer existed Regional modules were renamed local → family_local;
the source cards still granted the old names. An unmatched glob is an empty
permission set, not an error. |
88.8% of run 2's parameters — the entire family-indexed regional model — received no gradient for 8,700 steps. The loss fell anyway, because the 285k reachable parameters were enough to fit something. | tests/foundation/test_card_patterns_reach_the_model.py:
no module unreachable by every card, and no grant pattern that names nothing
in any architecture. |
| Stage behaviour selected by matching stage names Six gates in the trainer keyed on run-1 stage names. Run 2 renamed every stage, so five returned the wrong answer. |
Nine hours of training on simulation alone, with every metric healthy. No gradient was ever taken on a recording. | Stage admission is declared in config
(extra.curriculum) and a stage that declares nothing is refused
rather than defaulted. |
A permission flag that nothing readallow_derived appeared once, in a signature. The config option
that fed it defaulted to False and was discarded. |
An evidence-rejected cortical partition (Yeo-7, 6 of 21 pairs separating under a spin null) ran silently whenever an anatomy declared no families. | The refusal exists and sits where the fallback is taken; opting in records
REJECTS: in the partition's own notes. |
| Checks that could not fail Guards whose assertion was true by construction — a lookup with a permissive default, a count that matched itself, a regex that matched nothing. |
Several defects passed review while the check written to catch them reported green. | Mutation testing is the standing requirement: a guard is not accepted until it has been made to fail on purpose. |
Two directories for one objectconfigs/source_cards/ read by release,
configs/curriculum/source_cards/ read by training. |
The published licence manifest was computed from a different card set than the one that trained the weights. | The release path derives the directory from the checkpoint's recorded config, and a disagreement between checkpoint and config is a blocker. |
| Artifact claims recomputed from current configuration The model card's gradient-reach figure was read from today's source cards rather than the run's. |
A routine republish would have replaced 88.8% with 0.9% — a number describing a run that never happened. | tests/release/test_card_is_computed_from_the_run.py: anything
said about weights is computed at the checkpoint's recorded commit, and a
dirty tree is disclosed. |
| Instruments that failed silently A health check reading a log path that did not exist; a sweep whose recorded exit code came from basename rather than the command. |
A finished run reported as dead; a killed run reported as
exit=0. |
scripts/health.sh fails on its own preconditions and reads
the checkpoint, not only the log.
tests/release/test_shell_exit_capture.py rejects
$? read after a command substitution. |
Six same-name class pairs across modulesderive_families, ClaimManifest,
RegionFamily, and the R12 rule itself, each existing twice in
unrelated namespaces. |
Repeated misdiagnosis; in one case a refusal's remedy named a field the object it validated could not carry. | Partition agreement is enforced
(tests/foundation/test_one_region_ontology.py); full unification
is ARCHITECTURE.md O-3/O-7. |
| Global state set at import time Eleven test modules called torch.set_default_dtype(float64) at
module level, which runs during collection. |
The whole suite ran in float64 whenever those files were collected, inflating a failure list from 10 files to 38. | An autouse fixture owns the dtype per test and restores it. |
The one generalisation worth keeping
A published artifact and the code that generates it are two objects with separate histories. Green tests on the generator say nothing about the bytes already published, and a healthy artifact says nothing about the generator. Only a diff between them is evidence about both.
Three of the entries above were found that way and by no other means.