diff --git a/docs/assessment/31-hindrance-audit.md b/docs/assessment/31-hindrance-audit.md index af545e92..d7ceb690 100644 --- a/docs/assessment/31-hindrance-audit.md +++ b/docs/assessment/31-hindrance-audit.md @@ -191,3 +191,13 @@ For symmetry with the Candidate Register's "considered and not registered" — h 6. ***The unifying proposal — a root `contracts.toml` holding every declared relationship — is "the highest-leverage single change."*** The *principle* is already this repository's (ADR-0263 Rule 5: declared in the table, not the call site) and is implemented in the very file the assessment cites: `core/epistemic_state.py` declares `GroundingSource` as a closed `Literal` plus a runtime-iterable `GROUNDING_SOURCES` frozenset, single-sourced across the runtime, the lane validator, the Workbench API coercion, and a build-time enum-coverage test under `workbench-ui/` — and its docstring records the bug that pattern caught (unregistered `deduction`/`curriculum` labels floored to `"none"`, *"recording a proved answer as ungrounded in a durable audit artifact"*). Centralizing four tables with four different authorities and lifecycles into one file adds a fifth copy that must agree with four generators; it is a ratchet to guard ratchets (standing philosophy 2). **Cleared as a proposal, kept as an observation:** nobody can currently enumerate *"which declared tables exist and what enforces each"* — that is one page, folded into PR-5, not a new mechanism. **What it got right, and it is worth saying:** proposal 1 pointed at the pack/domain seam. Every specific was wrong, and reading the code there anyway found **G-23** — a real, load-bearing, one-directional check on the band whose license is next to be earned. Bad method, useful direction. The triage rule survives unchanged and earned a second demonstration: *every rejected proposal above failed on a file its author did not open.* + +- **A fourth external audit (2026-07-28, "red-team dissection", six faults) — the best-anchored of the four, and the first to catch a hole in *our own* sweep.** Verified fault by fault at `a4f567f0`: + 1. ***"Integration hole; `comprehension_attempt/` is a confession"*** — **exhibit wrong, direction right.** `core/comprehension_attempt/` is the typed *failure-analysis* layer (attempt records → failure families → contemplation/proposal loop), off-serving **by design**, zero geometry — instrumentation, not an abandoned engine. But chasing the audit's adjacent claim found what G-24's own sweep missed: **`core/semantic_primitives/` + `generate/linguistic_pipeline/`** — a faithful implementation of ADR-0252 §2 (typed `Container`/`ConservationLaw`/`DimensionalType` → `field_integration.py`, **51 geometric refs**, conformal points / **composed rotors**, `versor_condition` + GoldTether closure) — **unreached from serving.** F-B amended: two readers exist; the inverted one serves, the faithful one is dark. Folded into the perception arc §2b. + 2. ***"Salience is a hardcoded heuristic in the parser, or a ghost"*** — **both horns false.** It is `core/physics/salience.py` (field curvature, ADR-0008 lineage), invoked from `generate/stream.py`, absent from the reader entirely; licensed lanes bypass it. The true half (default-ON, no recorded rationale) was already registered in the flag register §1. Its salience-timing point was good and is adopted: the ruling moves ahead of Phase 3's serving evals. + 3. ***"Curriculum lane is negative value"*** — direction already executed (parked, Phase 4); "negative" overstates — the lane's failure produced the outcome-mix rule, the honesty machinery now guarding every future licence. + 4. ***"`sensorium/` is premature infrastructure"*** — coincides with P-3, ruled a day earlier. Its cited authority ("Axiom 6, Compilation-last") appears **nowhere in this repository** — it is founding-doctrine upload language, not repo doctrine. + 5. ***"W-007 blocked behind an uncommitted L10 process-shape decision; L10 is the single point of failure"*** — **stale by two months, and sourced from the retired instrument.** The "master plan" it reasons from is `docs/audit/substrate-liveness-ratchet.md` — marked historical by PR-3 *this same day*. L10's shape was committed in ADR-0146 (2026-05-25), the daemon landed `18e25580` (2026-06-14), and W-007's mechanism is **built**: `core/cognition/pipeline.py` step 0b attaches `DerivedRecognizer` (ADR-0144) behind `recognition_grounded_graph = False`. H-9's mechanism — an authoritative-looking dead instrument converting "I should check" into "I already checked" — demonstrated on an external auditor, which is exactly why the banner PR-3 wrote quotes the mechanism it retires. + 6. ***"H2 has no experiment designed"*** — true when written, superseded the same day by the perception arc Phase 1. Its one genuine addition is adopted verbatim: the **non-collapse criterion** (the §5 `add`-vs-`subtract` minimal pair, residual exactly 0.0 under similarity, must show non-zero relational contrast under operator composition) joins the pre-registration as a named must-pass case. + - ***Its closing ("insert one junction; everything else stays exactly as it is")*** — **internally inconsistent**: a junction downstream of a 1.28% reader receives 1.28% of input, which its own priority stack (freeze the enumerative reader) concedes. The junction instinct is right and now has a concrete referent — `field_integration`'s composed-rotor path — but connecting it *is* the perception rebuild, not an alternative to it. + - **The pattern the cross-examination surfaced, worth more than any single fault:** `linguistic_pipeline`, the ADR-0144 recognizer step, and `relation_compiler` are three instances of one class — **correct mechanisms built dark behind unruled flags while enumerative stopgaps serve.** The flag register's §3a cluster is the same disease seen flag-side. CORE's failure mode is not "never built"; it is **transition windows that never close.** Recorded in the perception arc §2b, where Phase 2 now begins from the dark-bridge inventory rather than from new code. diff --git a/docs/plans/2026-07-28-perception-arc.md b/docs/plans/2026-07-28-perception-arc.md index 0af89347..414e3e5c 100644 --- a/docs/plans/2026-07-28-perception-arc.md +++ b/docs/plans/2026-07-28-perception-arc.md @@ -116,6 +116,20 @@ One front end replacing both readers, structured as the repo's own governing pat --- +## 2b. Pass-3 amendments — from the third external audit (2026-07-28), verified in-tree + +A red-team audit was cross-examined against the source. Three of its six faults were stale or mis-attributed (see the triage in `31-hindrance-audit.md`), **but its direction flushed out two subsystems this plan's own author had missed** — and they change Phases 1–2 from "build" to "connect and test": + +- **The faithful §2 reader already exists, dark.** `core/semantic_primitives/` (typed `Container`, `ConservationLaw`, `DimensionalType` — *"linguistic → field compilation"*) feeds `generate/linguistic_pipeline/` (layers A/B/C + `field_integration.py`, **51 geometric refs**): surface text → typed constraints → **conformal points / composed rotors** → `versor_condition` + GoldTether closure. **Nothing on the serving side calls it.** So F-B sharpens: the ratified design was not merely inverted by the serving reader — it was *also implemented faithfully* in a parallel pipeline that never reached dispatch. Two readers: the wrong one serving, the right one dark. +- **The recognizer junction is built, not blocked.** `core/cognition/pipeline.py` step 0b (ADR-0144) attaches `DerivedRecognizer` (anti-unification) and can derive the articulation graph from the admitted `EpistemicNode` — behind `recognition_grounded_graph = False`, one of the flag register's four *"waiting on a transition window that has not been closed"* entries. + +**The pattern, named once:** `linguistic_pipeline`, the ADR-0144 recognizer step, and `relation_compiler` are three instances of one class — **correct mechanisms built dark behind unruled flags while enumerative stopgaps serve.** The flag register's §3a hesitancy cluster (`recognition_grounded_graph`, `realizer_grounded_authority`, `forward_graph_constraint`, `unified_ingest`) is this same unfinished migration, seen flag-side. The disease is not "never built"; it is **transition windows that never close.** + +**Consequences for the phases:** +1. **Phase 1 (H2) runs on existing machinery, not new scaffolding** — extend `layer_a_english` to the four ratified primitives and encode relations as operators through `field_integration`'s composed-rotor path. Adopted from the audit verbatim into the pre-registration: an explicit **non-collapse criterion** — the §5 `add`-vs-`subtract` minimal pair (residual exactly 0.0 under similarity alignment) must show non-zero relational contrast under operator composition, as a named must-pass case. +2. **Phase 2 starts from the dark-bridge inventory** (the four §3a flags + the linguistic pipeline), wiring and measuring before writing anything new — "less machinery" made concrete. +3. **The `use_salience` ruling moves from Phase 5 to before Phase 3** — the read-rate lane (Phase 0) is pre-salience and unconfounded, but serving evals are not; an undocumented default-ON attention mask must be ruled before licences are measured through it. + ## 3. What this plan deliberately does not do - It does not touch `core/physics`, the algebra, the reliability gate, or the ledger discipline. Those are correct and load-bearing.