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
|
|
@ -1,7 +1,11 @@
|
|||
# The Inner Loop — Assimilate and Surpass
|
||||
|
||||
Status: **v1.2** — corrected from CB-WP-0003 (loop hardening) on
|
||||
2026-07-31. Changes from v1.1: single source of fact; review targets the
|
||||
Status: **v1.3** — corrected from CB-WP-0004 (mechanical work) on
|
||||
2026-07-31. Change from v1.2: single source of fact is now executable
|
||||
(`make facts-check`, CB-WP-0004 T04), giving the duplicated-fact-drift
|
||||
class its first gate.
|
||||
|
||||
v1.2 changes from v1.1: single source of fact; review targets the
|
||||
harness and states its sampling limit; correction vs retarget; the chaos
|
||||
roll's calibration window; the live cost budget. The design goal is now
|
||||
stated: **optimize for cheap correction, not for exhaustive prevention.**
|
||||
|
|
@ -39,7 +43,16 @@ command so re-running is free.
|
|||
> acceptance figure had to be chased across three artifacts each time it
|
||||
> moved. No positive control catches this — both copies are internally
|
||||
> consistent — and re-derivation does not either, because the copy
|
||||
> reproduces whatever it was copied from.)* The loop's own optimization target is **agentic efficiency**:
|
||||
> reproduces whatever it was copied from.)*
|
||||
>
|
||||
> **Now executable (v1.3, CB-WP-0004 T04):** `make facts-check`. `facts.toml`
|
||||
> is generated from the instruments, never edited; an artifact quoting a
|
||||
> registry value tags it `<!-- fact:<key> -->` and the gate fails when the
|
||||
> two disagree. Untagged literal copies are reported, not failed — that is
|
||||
> the drift surface still uncovered, and naming it is more useful than
|
||||
> pretending it is closed.
|
||||
|
||||
The loop's own optimization target is **agentic efficiency**:
|
||||
every artifact it produces must be small enough to load whole, structured
|
||||
enough to act on without interpretation, and falsifiable enough that an
|
||||
agent can judge its own work without a human in the iteration.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue