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>
This commit is contained in:
parent
6281cd546e
commit
53c460c992
12 changed files with 536 additions and 16 deletions
100
facts.toml
Normal file
100
facts.toml
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
# GENERATED — do not edit. `make facts-gen` rewrites this file.
|
||||
#
|
||||
# The single source of fact for numbers that appear in more than
|
||||
# one artifact (InnerLoop v1.2). Every value here is produced by
|
||||
# the instrument named in its `by` field, on the current tree.
|
||||
# `make facts-check` fails if this file disagrees with the
|
||||
# instruments, or if a tagged artifact disagrees with this file.
|
||||
|
||||
generated = "2026-07-31"
|
||||
pin = "fc76445"
|
||||
|
||||
[am4a_loc]
|
||||
value = 246250
|
||||
text = "246,250"
|
||||
fmt = "{:,}"
|
||||
by = "tools/dep-weight.py"
|
||||
|
||||
[am4a_target]
|
||||
value = 250000
|
||||
text = "250,000"
|
||||
fmt = "{:,}"
|
||||
by = "tools/dep-weight.py TARGETS"
|
||||
|
||||
[am4b_loc]
|
||||
value = 317021
|
||||
text = "317,021"
|
||||
fmt = "{:,}"
|
||||
by = "tools/dep-weight.py"
|
||||
|
||||
[am4b_target]
|
||||
value = 350000
|
||||
text = "350,000"
|
||||
fmt = "{:,}"
|
||||
by = "tools/dep-weight.py TARGETS"
|
||||
|
||||
[gr_covered]
|
||||
value = 58
|
||||
text = "58"
|
||||
fmt = "{:,}"
|
||||
by = "tools/rule-coverage.py"
|
||||
|
||||
[gr_linked]
|
||||
value = 49
|
||||
text = "49"
|
||||
fmt = "{:,}"
|
||||
by = "tools/rule-coverage.py"
|
||||
|
||||
[gr_rules]
|
||||
value = 58
|
||||
text = "58"
|
||||
fmt = "{:,}"
|
||||
by = "tools/rule-coverage.py"
|
||||
|
||||
[gr_scenarios]
|
||||
value = 21
|
||||
text = "21"
|
||||
fmt = "{:,}"
|
||||
by = "tools/rule-coverage.py"
|
||||
|
||||
[pinned_main]
|
||||
value = 92.03371920000004
|
||||
text = "$92.03"
|
||||
fmt = "${:,.2f}"
|
||||
by = "tools/cb-cost.py --pin fc76445"
|
||||
|
||||
[pinned_mechanical_cost]
|
||||
value = 33.3506319
|
||||
text = "$33.35"
|
||||
fmt = "${:,.2f}"
|
||||
by = "tools/cb-cost.py --pin fc76445"
|
||||
|
||||
[pinned_mechanical_share]
|
||||
value = 36
|
||||
text = "36%"
|
||||
fmt = "{:d}%"
|
||||
by = "tools/cb-cost.py --pin fc76445"
|
||||
|
||||
[pinned_mechanical_turns]
|
||||
value = 167
|
||||
text = "167"
|
||||
fmt = "{:,}"
|
||||
by = "tools/cb-cost.py --pin fc76445"
|
||||
|
||||
[pinned_responses]
|
||||
value = 346
|
||||
text = "346"
|
||||
fmt = "{:,}"
|
||||
by = "tools/cb-cost.py --pin fc76445"
|
||||
|
||||
[pinned_subagent]
|
||||
value = 1.1137235
|
||||
text = "$1.11"
|
||||
fmt = "${:,.2f}"
|
||||
by = "tools/cb-cost.py --pin fc76445"
|
||||
|
||||
[pinned_total]
|
||||
value = 93.14744270000004
|
||||
text = "$93.15"
|
||||
fmt = "${:,.2f}"
|
||||
by = "tools/cb-cost.py --pin fc76445"
|
||||
Loading…
Add table
Add a link
Reference in a new issue