[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
This commit is contained in:
co-authored by
Claude Opus 5
parent
23e7515302
commit
0a48e6934d
@@ -0,0 +1,68 @@
|
||||
# Census 01 — Which instruments have no real negative instance?
|
||||
|
||||
**Pre-registered:** 2026-08-03, before reading any instrument source or the verification ladder.
|
||||
**Origin:** the literal question left by the 2026-08-02 evening wrap.
|
||||
|
||||
---
|
||||
|
||||
## The question
|
||||
|
||||
Five times on 2026-08-02, a passing check certified a property of the *code* while
|
||||
claiming a property of the *result*. The discrimination gate (`e9f3544`) is the mechanical
|
||||
answer **for checks that have a real negative instance to test against**.
|
||||
|
||||
So: **which of our current instruments have no real negative instance available, and is
|
||||
that absence recorded anywhere, or does it look like coverage?**
|
||||
|
||||
## Unit of census
|
||||
|
||||
An **instrument** = any check, gate, guard, or test suite whose verdict is used to license
|
||||
a claim. Two populations, both censused entire (no sampling, no `| head`):
|
||||
|
||||
1. Everything in `~/dotfiles/claude/governance/fool/` that returns a verdict.
|
||||
2. Every named entry in `reference-verification-ladder.md`.
|
||||
|
||||
## The test applied to each
|
||||
|
||||
**Was this instrument demonstrated returning its FAIL verdict on a REAL artifact** — one
|
||||
drawn from actual work, not authored so the test would exercise the branch?
|
||||
|
||||
Three outcomes:
|
||||
|
||||
- **DEMONSTRATED** — names the real artifact it was shown failing on.
|
||||
- **ABSENT-RECORDED** — no real negative instance, and the instrument or its record says so.
|
||||
- **ABSENT-UNRECORDED** — no real negative instance, and nothing says so. **This is the finding**: absence that reads as coverage.
|
||||
|
||||
Synthetic fixtures do not count as negative instances. That is the whole point of the
|
||||
discrimination gate: fixtures derived from the check inherit the check's blind spot.
|
||||
|
||||
## Predictions (recorded before the read)
|
||||
|
||||
1. **The discrimination gate itself → DEMONSTRATED.** It was built and shown rejecting the
|
||||
§3.3 pattern as it actually shipped, on two real artifacts.
|
||||
2. **`test_reduce.py` and `test_twin.py` → ABSENT-UNRECORDED.** Expectation is that they
|
||||
are fixture-based and say nothing about it.
|
||||
3. **The trial-03 degraded guard → ABSENT, now RECORDED.** It had no negative instance
|
||||
until trial 03 supplied one by failing; the record exists because the failure did.
|
||||
4. **Verification-ladder entries → mixed, skewed DEMONSTRATED.** Ladder entries were earned
|
||||
from real failures, so most should name the artifact. If they do *not* name it — if the
|
||||
entry states the rule but drops the instance — that is the same concealment shape as
|
||||
yesterday's, at the level of the record rather than the document.
|
||||
5. **Overall skew → ABSENT-UNRECORDED dominant.** Prior: this is the pattern that surfaced
|
||||
five times in one session.
|
||||
|
||||
## The census's own discrimination condition
|
||||
|
||||
This census is an instrument. Its negative instance is an instrument that genuinely *does*
|
||||
have a real negative instance, correctly classified DEMONSTRATED, standing beside one that
|
||||
does not, classified ABSENT.
|
||||
|
||||
**If every instrument lands in one bucket, the census has discriminated nothing** and must
|
||||
be reported as such rather than as a result. If the skew comes out opposite to prediction 5
|
||||
— mostly DEMONSTRATED — the first hypothesis to test is that my classification went lenient,
|
||||
not that the instruments are sound.
|
||||
|
||||
## Stopping rule
|
||||
|
||||
The census is complete when both populations are enumerated entire and every member is
|
||||
classified. Unclassifiable members are reported as unclassifiable, not dropped.
|
||||
@@ -0,0 +1,98 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user