clay-borg/specs
tegwick 53c460c992 CB-WP-0004 T04: fact registry and make facts-check — DFD gets a gate
Duplicated-fact drift is the fourth error class and the only one with no
executable rule. No positive control catches it (both copies are
internally consistent) and re-derivation does not either (the copy
reproduces whatever it was copied from). It is caught only by reading a
copy against its source, which nothing in the loop required.

facts.toml holds 15 facts and is GENERATED by `make facts-gen` from
cb-cost, dep-weight and rule-coverage. The trap this task named — a
hand-maintained registry that becomes another drifting copy — is closed
by facts-check re-running the instruments and failing when the committed
registry disagrees with them. A stale registry cannot certify stale
artifacts.

An artifact quoting a fact tags it: **$93.15** <!-- fact --> with the key.
17 occurrences across 5 artifacts are now checked.

Falsified before being believed: changing CostAccounting.md line 158 from
$93.15 to $92.87 — the exact historical drift — produced exit 1 naming
the file, the line and the expected value. Tested against the class it
exists to catch, on a real artifact, not only in its self-test.

It then caught a live tag inside its own documentation example in
InnerLoop.md within the hour. Third time a gate has failed on its own
pass's work.

What it does not close is stated rather than implied: 22 untagged literal
copies remain and are reported, not failed. Tagging is opt-in, a number
can legitimately recur, and a gate that fires on coincidence gets routed
around. Naming the uncovered surface beats claiming the class is closed.

InnerLoop single-source-of-fact moves from prose to executable — v1.3.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 10:24:39 +02:00
..
ArchitectureBlueprint.md T01: audit every InnerLoop rule, and make the checkable ones executable 2026-07-31 09:16:00 +02:00
ArchitectureRuntime.md T01: audit every InnerLoop rule, and make the checkable ones executable 2026-07-31 09:16:00 +02:00
CostAccounting.md CB-WP-0004 T04: fact registry and make facts-check — DFD gets a gate 2026-07-31 10:24:39 +02:00
GameKernel.md ADR-0004: ratify AM-4a and AM-4b (maintainer decision) 2026-07-31 09:45:35 +02:00
GroundRules.md T08: give provisional defaults an owner, a date, and a visible age 2026-07-31 09:29:40 +02:00
InnerLoop.md CB-WP-0004 T04: fact registry and make facts-check — DFD gets a gate 2026-07-31 10:24:39 +02:00
InnerLoopReference.md T07: separate a correction from a retarget with a mechanical test 2026-07-31 09:25:22 +02:00
MetricsAndScenarios.md CB-WP-0004 T04: fact registry and make facts-check — DFD gets a gate 2026-07-31 10:24:39 +02:00
SessionShape.md T04: specs/SessionShape.md — compaction is the lever, not session length 2026-07-31 09:19:32 +02:00