feat(wave-1): retire the dead instruments, delete the aliases nobody calls (PR-3, PR-3b, R-7)

Wave 1 — delete — run before more Wave 2 enforcement, correcting the method
inversion this arc had been committing: the plan sequences scrub -> DELETE ->
enforce, and Wave 1 was ruling-blocked while Wave 2 was not, so enforcement
landed first on structures deletion might have removed.

PR-3 (R-7 ruled A)
  docs/gaps.md and docs/audit/substrate-liveness-ratchet.md carry historical
  banners that name H-9's own mechanism as the reason they exist: an instrument
  that looks authoritative converts "I should check" into "I already checked".
  The ratchet's seven OPEN items — W-003, W-005, W-007, W-008, W-009, W-017,
  W-018, every one L10-chained — migrated into G-5 WITH their dependency
  chains, because that reasoning is the ratchet's lasting contribution and its
  status column is not.

  One deliverable could not be executed as written and is recorded rather than
  claimed: L12 has NO in-repo generator to drop it from. The system map is
  local and gitignored (D5 — a regeneratable index carrying no authority), so
  the phantom existed only there and in one taxonomy row. That row now records
  the ruling instead of the flag.

PR-3b — new, and it corrected its own author
  Added when PR-4's two ratchets made the question unavoidable: what exactly
  are they policing? Measured: 21 curated suites, 9 holding exactly ONE file,
  12 holding <=4, and 2 reachable from any gate.

  I proposed cutting ~11. The evidence supported FOUR. cognition, teaching,
  packs and algebra are named in AGENTS.md's own pre-merge-gate instruction;
  fast, pulse and proof in the CLI's help text; phase5, phase6, adr-0024, math
  and formation in READMEs and ADRs. Deleting those breaks documented commands
  — worse than the sprawl. Taking the 4 the evidence supports, rather than the
  11 I had already said out loud, is the whole point.

  Deleted: refusal, margin, rotor, inner-loop. Zero --suite references anywhere
  in code, docs, ADRs, workflows or CLI help. Per-phase ADR-0024 aliases
  offered so reviewers could run a phase independently; nothing ever did. All
  seven of their files remain covered by adr-0024 — verified BEFORE the cut —
  so nothing was orphaned and no coverage moved.

  21 -> 17 suites. Pin 3's gate-unreachable gap 19 -> 15 BY DELETION, which
  costs no gate time at all, versus promotion which costs it every run. An
  alias nobody calls is not a curation decision; it is one more name that has
  to be kept true, and two ratchets were policing these.

Registers: H-9 CLOSED, PR-3 and PR-3b marked LANDED, G-5 carries the seven
migrated items, the taxonomy's L12 row records the ruling.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
This commit is contained in:
Claude 2026-07-28 05:40:45 +00:00
parent 065826c556
commit d0bedfc198
No known key found for this signature in database
8 changed files with 74 additions and 24 deletions

View file

@ -289,18 +289,18 @@ TEST_SUITES: dict[str, tuple[str, ...]] = {
),
"formation": ("tests/formation",),
"proof": ("tests/test_proof_properties.py",),
# ADR-0024 chain suites (Phases 2-6). Each phase has its own contract
# tests so reviewers can run them independently; ``adr-0024`` runs the full
# chain end-to-end.
"refusal": ("tests/test_refusal_contract.py",),
"margin": ("tests/test_margin_admissibility.py",),
"rotor": ("tests/test_rotor_admissibility.py",),
"inner-loop": (
"tests/test_inner_loop_admissibility.py",
"tests/test_inner_loop_phase2.py",
"tests/test_inner_loop_phase3.py",
"tests/test_inner_loop_phase4.py",
),
# ADR-0024 chain suites (Phases 2-6). ``adr-0024`` runs the full chain
# end-to-end; ``phase5``/``phase6`` survive because README.md and the
# forward_semantic_control READMEs invoke them by name.
#
# PR-3b (Wave 1, 2026-07-28) — four per-phase aliases deleted: ``refusal``,
# ``margin``, ``rotor``, ``inner-loop``. Each was offered so reviewers could
# run a phase independently, and measured across the repository, **nothing
# invoked any of them** — zero `--suite` references in code, docs, ADRs,
# workflows or the CLI's own help. Every one of their seven files is still
# covered by ``adr-0024``, so no coverage moved and nothing was orphaned.
# An alias nobody calls is not a curation decision; it is a name that has to
# be kept true. Two ratchets (membership, reachability) were policing these.
"phase5": ("tests/test_phase5_corpus.py",),
"phase6": ("tests/test_phase6_demo.py",),
"adr-0024": (

View file

@ -137,7 +137,7 @@ All 33 zones, mapped once. Liveness is the map's 2026-06-09 label — **48 days
| ingest-boundary | M2 | partial-wiring-debt | |
| ingest-compiler | M2 | partial-wiring-debt | |
| sensorium-afferent | M2 | inert | |
| sensorium-falsification | M2 | live-internal | map labels it "L12" — a stratum no other document uses; flag for ruling |
| sensorium-falsification | M2 | live-internal | map labelled it "L12" — a stratum no other document uses. **Ruled 2026-07-28 (R-7): dropped.** No in-repo generator emits it (the system map is local and gitignored, per D5 a regeneratable index carrying no authority), so nothing in the repository was changed — the phantom existed only in a local artifact and in this row. Recorded rather than silently deleted, so the next reader does not re-derive it. |
| L4-recognition | M3 | partial-wiring-debt | |
| L5-cognition | M3 | partial-wiring-debt | |
| comprehend-organ ⚑ | M3 | live-serving | zero subsystems mapped |

View file

@ -42,6 +42,20 @@ What remains owed is the **ceremony**, and it is this assessment's own §8 maint
A recorded prose result with no pinned digest is **testimony, not evidence** — the same failure mode as the map, the ratchet, and the blueprint.
**Absorbed 2026-07-28 (R-7, PR-3) — the substrate-liveness ratchet's seven OPEN items.** The ratchet is now historical; every one of its open entries was L10-chained, which is this entry, so they live here rather than in a stale instrument:
| Item | What it is | Chain |
|---|---|---|
| **W-003** | `VaultPromotionPolicy` dormant | audit-dependency on L10 |
| **W-005** | E0/E2 readback modulation absent | W-004 → W-005 |
| **W-007** | `DerivedRecognizer` not integrated into the live turn loop | W-003 → recognizer-storage ADR → W-007 |
| **W-008** | Runtime model (L10) scope adoption | scope landed (#236); spike/ADR pending |
| **W-009** | HITL async queue surface | W-008 → W-009 |
| **W-017** | Automated T1/T2 → T3 promotion absent | W-009 → W-017 |
| **W-018** | ADR-0080 contemplation not autonomous | W-008 → W-018 |
Their dependency reasoning is still sound and is the ratchet's lasting contribution; its *status column* was not, which is why the instrument is retired and its content is not.
**Two prior claims in this entry were wrong and are withdrawn.** (a) *"No suite contains any `l10`/`always_on` test"* was a scan artifact: `TEST_SUITES["full"] = ("tests/",)` is a **directory**, so every test file is trivially in a suite. The true statement is that the five `tests/test_l10_*.py` files are in **no curated suite tuple** — reachable only through `full`. (b) *"nothing runs its pins"* is false: CI never invokes `core test --suite`, it runs raw pytest with marker filters, and no L10 file carries `quarantine` or `slow` — so the pins **execute twice a day**, in `full-pytest.yml` (post-merge) and `nightly-full-pytest.yml` (cron `0 2 * * *`). The correct statement is that **nothing runs them on any pre-merge gate**.
**Evidence:** `M6` + `always-on-process` cards; `evals/l10_always_on/contract.md`; `core/cli_test.py:13`; `.github/workflows/{smoke,full-pytest,nightly-full-pytest}.yml`. · **Authority:** execution + the R-9 evidence-standard and cadence ruling.

View file

@ -85,6 +85,7 @@ The surviving delta is **not a containment hole** — refusal is fail-closed and
**Why it hinders:** an instrument that *looks* authoritative converts "I should check" into "I already checked." Phase 0's error was this mechanism operating on this assessment.
**Better home:** this register supersedes `docs/gaps.md` (marked historical); the ratchet's 7 OPEN items migrate here (G-5 absorbs their L10 dependency); the map stays a regeneratable local index per D5, with "L12" dropped; the assessment directory becomes the standing ruled record, `verified_at`-stamped.
**Authority:** ruling (one PR).
**Status (2026-07-28): CLOSED — R-7 ruled A; PR-3 landed.** `docs/gaps.md` and the substrate-liveness ratchet both carry historical banners naming this entry's own mechanism as the reason. The ratchet's seven OPEN items (W-003/005/007/008/009/017/018, all L10-chained) migrated into G-5 with their dependency chains. `L12` had no in-repo generator — the map is local and gitignored — so the phantom is recorded as ruled rather than deleted, which is the honest form.
## H-10 · The demotion that mispriced the paradigm experiment
**Verdict:** `strained` framing — a correct ruling casting an incorrect shadow · **Layers:** M3/governance

View file

@ -205,9 +205,22 @@ The assessment directory's own corrections (N-1…N-7 applied to `30-gap-registe
### PR-2 · Delete the decoration · **S** · H-2
`DriveGradientMap` construction at `chat/runtime.py:716` and the class; `InhibitionMask`/`InhibitionOperator` exports from `core/physics/__init__.py`. Their *intents* are preserved in writing first: drive → the CR-2 design brief (G-4), the mask → the CR-1 ADR (G-14). **Verification:** the sabotage test in reverse — full `smoke` plus the deduction and cognition suites must be byte-identical before and after; a deletion that changes a surface means the object was not decoration and the PR is abandoned.
### PR-3 · Retire the dead instruments · **S** · H-9
### PR-3 · Retire the dead instruments · **S** · H-9**LANDED 2026-07-28** (R-7 ruled A)
`docs/gaps.md` → historical banner pointing at `30-gap-register.md`; substrate-liveness ratchet → historical, 7 OPEN items migrated into G-5; the phantom `L12` stratum dropped from the local map generator. Per R-7.
**Landed.** Both banners written, naming *why* rather than just *what* — H-9's mechanism (an authoritative-looking instrument converts "I should check" into "I already checked") is quoted in the banner it explains. All seven OPEN ratchet items (**W-003, W-005, W-007, W-008, W-009, W-017, W-018** — every one L10-chained) migrated into G-5 with their dependency chains intact, because that reasoning is the ratchet's lasting contribution and its status column is not.
**One deliverable could not be executed as written, and is recorded rather than claimed:** `L12` has **no in-repo generator to drop it from**. The system map is local and gitignored (D5: a regeneratable index carrying no authority), so the phantom existed only in that local artifact and in one taxonomy row. The row now records the ruling instead of the flag.
### PR-3b · Collapse the suite aliases · **S** · *new, Wave 1* — **LANDED 2026-07-28**
Not in the original plan. Added when PR-4's two ratchets made the question unavoidable: *what exactly are they policing?* Measured — **21 curated suites, 9 holding exactly one file, 12 holding ≤4, and 2 reachable from any gate.**
The cut is much smaller than the sprawl suggests, and the measurement is why. `cognition`, `teaching`, `packs`, `algebra` are named in **AGENTS.md's own pre-merge-gate instruction**; `fast`, `pulse`, `proof` in the CLI's help text; `phase5`, `phase6`, `adr-0024`, `math`, `formation` in READMEs and ADRs. Deleting those breaks documented commands — worse than the sprawl.
**Four suites had zero `--suite` references anywhere in code, docs, ADRs, workflows or CLI help: `refusal`, `margin`, `rotor`, `inner-loop`.** Per-phase ADR-0024 aliases offered so reviewers could run a phase independently; nothing ever did. All seven of their files remain covered by `adr-0024`, so **nothing was orphaned and no coverage moved** — verified before the cut, not after.
**21 → 17 suites.** Pin 3's gate-unreachable gap went **19 → 15 by deletion**, which costs no gate time — the ratchet turning the way it should. An alias nobody calls is not a curation decision; it is one more name that has to be kept true, and two ratchets were policing these.
---
## 4. Wave 2 — Simplify & enforce

View file

@ -1,3 +1,13 @@
> **HISTORICAL — superseded 2026-07-28 (R-7, ruled).**
> Last revised ~2026-05-24 and stale since. Its **seven OPEN items — W-003,
> W-005, W-007, W-008, W-009, W-017, W-018 — are all L10-chained** and have
> migrated into **G-5** of the live register
> ([`docs/assessment/30-gap-register.md`](../assessment/30-gap-register.md)),
> which carries the L10 proof debt with current evidence.
>
> Kept for its dependency reasoning, which is still good; not for its status
> column, which is not. Do not add entries here.
# Substrate Liveness Ratchet — v5 (quick-wins lane cleared: W-011/W-012/W-015/W-016 closed)
**Scope:** [substrate-liveness-audit-scope](../adr/substrate-liveness-audit-scope.md) (v2)

View file

@ -1,3 +1,14 @@
> **HISTORICAL — superseded 2026-07-28 (R-7, ruled).**
> This register closed its 26th and last entry and has taken no entry from any
> 2026-06+ arc. The live register is
> [`docs/assessment/30-gap-register.md`](assessment/30-gap-register.md).
>
> It is kept for its history, not its authority. H-9's mechanism is why this
> banner exists: *an instrument that looks authoritative converts "I should
> check" into "I already checked"* — and Phase 0 of the holistic assessment was
> that mechanism operating on the assessment itself. Two dead registers plus a
> live one is worse than one live one.
# Capability Gaps
This file tracks registered blockers for capability progression. Open

View file

@ -11,7 +11,7 @@ PR-4 itself raised against G-7's original formulation: *a curated suite nobody
runs is the same non-guarantee as ``full``, wearing a different name.* The fix
had the same blind spot as the thing it fixed.
Measured at 2026-07-28: **21 curated suites, 2 gate-reachable.** ``smoke`` and
Measured at 2026-07-28: **21 curated suites, 2 gate-reachable** then **17 and 2** after PR-3b deleted four aliases nothing invoked. ``smoke`` and
``deductive`` are invoked by ``scripts/hooks/pre-push`` and
``scripts/ci/local-ci.sh --tier gate``; the other nineteen have members and no
caller. That is why this is a **baseline plus ratchet** and not a flat rule
@ -47,7 +47,11 @@ _ROOT = Path(__file__).resolve().parents[1]
#: So the set is declared here and *verified* against the shell below.
GATE_SUITES: frozenset[str] = frozenset({"smoke", "deductive"})
#: Curated suites with members and no gate caller, measured 2026-07-28.
#: Curated suites with members and no gate caller.
#: 19 at first measurement; **15 after PR-3b (Wave 1) deleted four unreferenced
#: per-phase aliases** — `refusal`, `margin`, `rotor`, `inner-loop`. That is the
#: ratchet turning the way it is supposed to: the gap shrank by deletion rather
#: than by promotion, which costs no gate time at all.
#: This list may only SHRINK. A suite leaves it by being invoked from a gate
#: tier — not by being deleted from this file.
UNREACHABLE_BASELINE: frozenset[str] = frozenset(
@ -58,16 +62,12 @@ UNREACHABLE_BASELINE: frozenset[str] = frozenset(
"fast",
"formation",
"full",
"inner-loop",
"margin",
"math",
"packs",
"phase5",
"phase6",
"proof",
"pulse",
"refusal",
"rotor",
"runtime",
"sensorium",
"teaching",
@ -164,13 +164,14 @@ def test_baseline_has_no_stale_entries() -> None:
def test_recorded_gate_gap_matches_the_measurement() -> None:
"""Pin the number so the gap moving is a reviewed decision, not a drift.
19 of 21 at 2026-07-28. Shrinking this is the point it shrinks by putting
15 of 17, after PR-3b. (19 of 21 before it.) Shrinking this is the point it shrinks by putting
a suite on the gate, which costs gate time and is therefore a decision
someone has to make deliberately.
"""
assert len(UNREACHABLE_BASELINE) <= 19, (
f"gate-unreachable suites grew to {len(UNREACHABLE_BASELINE)} (was 19). "
"The ratchet only turns one way."
assert len(UNREACHABLE_BASELINE) <= 15, (
f"gate-unreachable suites grew to {len(UNREACHABLE_BASELINE)} (was 15; "
"19 before PR-3b deleted four unreferenced aliases). The ratchet only "
"turns one way."
)