Files
dotfiles/claude/governance/fool/census-01-negative-instances-RESULT.md
David F GliddenandClaude Opus 5 0a48e6934d [FIX] L1 pin root-caused and cleared; S-series closed; instrument census
mindfabric-00 had been event-loop-pinned for 6+ days (100% CPU, /health silent).
Profile + CDP inspector named two hot paths, both from runTemporalPipeline:

  checkForCycle -> getCausalEdgesFromSqlite   99.8% of samples
  tryExtendChains -> getChainsContainingSeq   now dominant (json_each scan)

Cause of the first: ANALYZE had never been run, so SQLite preferred a boolean
index (idx_caused_tombstoned, matching ~all 836k edges) over idx_caused_from.
ANALYZE across 15 module DBs flipped the plan; 6.4x on a microbenchmark and
99.8% -> 6.0% in the live profile. /health went from silent to 200 in 0.13s.

B1.1's fan-out cap is IMPLEMENTED AND WORKING (today: max in-degree exactly 20,
zero violations; pre-23-June: max 629, avg 67.6). The defect is data, not code —
836k edges / 813k chains minted under ungoverned fan-out before the fix landed.
Repair run: derived stores wiped, logchain preserved, replay in flight.

S-series closed (jurist had already ruled all of Q1-Q5 on 2026-05-18):
  S6/S7/S9 implemented (Symmetria §3 flags, `suspend` outcome, wrap-up §8 tenses)
  S2 rebuilt as [FIX] — wake-digest unwrapped-session detector, discrimination-
    gated on real sessions (11 wrapped / 2 unwrapped)
  S4/S5 withdrawn with MemPalace (steward ruling)
Dormant legacy dispositioned: PENDING-4/5/11/12, CD-03, ICP-19 duplicate.
Open authorization items 22 -> 10.

Census 01: which instruments have no real negative instance. Finding — the
governance drift-check has 3 of 5 families inert against the current CLAUDE.md,
and 71 of 75 verification-ladder entries are cited nowhere outside the ladder.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WuMjg3ipEVa3n8CoSzoyvc
2026-08-03 20:57:41 +02:00

7.6 KiB

Census 01 — RESULT

Run: 2026-08-03. Pre-registered at census-01-negative-instances-PREREGISTRATION.md before any instrument source or the ladder was read. Question: which of our instruments have no real negative instance, and is that absence recorded, or does it look like coverage?


Verdict in one line

The instruments built under this discipline are sound. The instruments built before it decay silently — and three of them are currently reporting a clean number they are structurally incapable of dirtying.

The census discriminated (both buckets populated, per the pre-registered condition), so it is reportable as a result rather than as nothing.


Population A — fool/ (7 instruments, censused entire)

Instrument Negative instance Verdict
test_degraded_guard.py The real trial-03 artefact that defeated its predecessor. Fails loudly (INSTRUMENT NOT VERIFIED) if the artefact is absent. DEMONSTRATED — gold standard
test_discrimination.py Two real governance documents; shown rejecting the §3.3 pattern as it actually shipped. DEMONSTRATED — gold standard
test_twin.py The real CONTROL-A/B pair; shown failing in both laundering directions. DEMONSTRATED
test_reduce.py Mixed: fixtures are synthetic, but each is a minimisation of a real defect found by contact with a real ruling/package; plus a real-document tiling check and the real false-pass string. DEMONSTRATED (derived)
reduce.py §3.3 screen Tested in test_reduce.py against heading strings in isolation — the exact code-not-result shape. Backstopped by test_discrimination.py at document level. weak alone, covered by the suite
reduce.py §3.2 Q-resolution Real CLAUDE.md + a genuine clause and a plausible fabrication; rejects the fabrication. DEMONSTRATED
twin.py bidirectional gate Covered by test_twin.py. DEMONSTRATED

Prediction 2 was wrong. I expected test_reduce.py and test_twin.py to be fixture-based and silent about it. Both explicitly derive fixtures from the property and say so. Nothing here is concealing an absence.

Population B — the verification ladder (75 entries, censused entire)

Mechanically extracted all 75 entry names, then counted citations elsewhere in memory/, governance/, skills/. Instrument positive-controlled first (the same grep finds Fowler in 28 files, verify-before-compose in 18, pre-registration in 13 — it detects presence readily).

  • 71 of 75 entries are referred to by name nowhere outside the ladder.
  • The 4 that are cited: Byte-identical compile gate · Two-hat commit separation · Revert-and-redo-smaller · The gate itself can be PASS-BUT-FALSELY. Three of the four are meta-instruments — about the practice of gating, not about a domain.

What this does NOT establish: that 71 entries never fire. Name-absence is not use-absence; a discipline can be applied without anyone writing its name. Overclaiming here would be the same error the census exists to catch.

What it does establish: the ladder's own header calls these "the named gates any session reaches for instead of re-deriving." Naming is the whole mechanism. If 71 names appear nowhere, then either the naming does no work, or the entries are not reached for — and the record cannot distinguish the two. Each entry records its origin (the real failure that earned it) and nothing about its subsequent life.

The ladder contains the rule that judges it:

A silent safety net is uninformative, not reassuring — a fallback that never fires across N real cases has not been shown to work.

75 entries read as 75 units of coverage. What the record attests is 75 units of past catch.

Structural cause: ladder entries have no IDs. They are bolded prose. There is no handle to write in a session record, so firing history cannot be recorded even by someone who wanted to.

Population C — the wake instruments (the numbers the steward acts on)

governance-drift-check.py — reported 0 substrate-contradicted claims this morning

Five check families. Tested each against the real ~/CLAUDE.md:

# Family State Evidence
1 Referenced paths LIVE — examines 4 paths but silently skips any backticked path containing a space: the Compass vault path is never checked. It happens to exist today, so no false negative — but if it broke, the report would still read 0.
2 Named MCP tools INERT — 0 tool names found keyed to kg_*/diary_*/mempalace, which the 2026-07-07 wind-down and the obligation-before-instrument rewrite removed from the document
3 Hooks claimed to fire INERT — 0 claims found and its control sits inside the if, so the control does not run either
4 Expired horizons INERT — 0 phrases found its control is written to pass on absence (… or "through end of" not in text)
5 Doctrine-id parser LIVE, with a proper discriminating triple (detects definition, detects citation, rejects non-id) the good one

Three of five families cannot currently report anything, all controls pass, and the instrument never says INSTRUMENT NOT VERIFIED. The 0 is honest about what it measured and silent about what it can no longer see.

The general class this exposes — and it is new:

A drift-checker keyed to a document's current wording goes inert when the document is improved. It can only ever detect the drift that existed the day it was written.

Family 2 died because of a good change: the memory-discipline rewrite that states "Instruments for reaching it change; the obligations below do not — state the obligation first and the instrument second, or the next retired tool takes a rule down with it." That rewrite protected the doctrine from instrument-decay and silently retired the checker watching the doctrine. The rule caught everything except its own watchman.

wake-digest.py — reported 361 pointers, 0 dead

Self-test carries presence and absence controls and names the specific real bugs each was built from (the v1 splitter's blind spot, the 2026-08-01 bug, the drafting-habit trigger). Same shape as test_reduce.py: synthetic fixtures that are minimisations of real defects. DEMONSTRATED (derived). No finding.


Scope boundary — what this census did NOT cover

Named so the result is not read as complete:

  • the verify-before-compose PreToolUse hook
  • chamber-library tooling (audit_cruft, verify_conversion, resolve_archived_source, apply_char_glyphs, …)
  • studium-engine verify-quote V1 / fidelity_equivalence@2
  • BMF/L1 test suites

Each is a live instrument whose verdicts license claims. Uncensused is uncensused.


Predictions, graded

  1. Discrimination gate → DEMONSTRATED. Held.
  2. test_reduce.py / test_twin.py → ABSENT-UNRECORDED. Wrong — both are property-derived and explicit.
  3. Trial-03 degraded guard → ABSENT, now RECORDED. Held, and stronger than predicted: it fails loudly when the real artefact is missing.
  4. Ladder entries skewed DEMONSTRATED-at-origin. Held — every entry names its origin failure. The gap is subsequent history, which I did not anticipate as the axis.
  5. ABSENT-UNRECORDED dominant overall. Held, but for the opposite reason. I expected weakness in the newest work. It is in the oldest. Instruments do not start blind; they go blind as the substrate they watch improves.

The prediction-5 inversion is the finding worth carrying: freshly-built instruments are strong because the lesson is fresh. Decay is the failure mode, not construction.