core/docs/assessment/10-layer-cards/M2-afferent-boundary.md
Claude 3650331b5b
docs(assessment): re-stamp the eight cards this arc touched, and post the board
§9.8 of the plan — "every card carries a verified_at no older than the last arc
that touched its layer" — is a maintenance contract this directory holds itself
to, and today's arc moved MV, M3, M4, M2, M6 and three component cards. A card
whose stamp falls behind a load-bearing arc is testimony, not evidence, which is
the failure mode the directory exists to replace.

Each card gains a Re-verified stamp at 39331dbc plus an arc note saying what
actually changed under it, not merely that something did:

  MV   PR-4 + PR-6 landed; G-7/G-9 closed. The layer's finding is sharper than
       the card stated: the recurring defect is not ABSENT pins but PINS THAT
       EXIST AND DO NOT RUN — four found this arc, each indistinguishable from
       coverage in any document.
  M3   §5 run to NO-GO, settling the successor-path question. New measurement
       G-21: the reader decides 5 of 500 holdout_dev/v1 cases. H-8e corrected.
  M4   H-13 fixed — the served-marker honesty contract held where it leaked.
  M2   PR-7's table: two boundaries already met, THREE CLOSED as category
       differences, one real delta (no audit record per rejection).
  M6   PR-9 — the accrual backstop counts and names what it absorbs.
  realize-phase / always-on-process / surface-selection — the component-level
       versions of the same three.

Plan §Status replaced with the actual board: what landed, what each remaining
item is blocked on, and the six findings this arc added that the assessment did
not have (N-8, N-9, G-21, H-13, H-14, H-8e). README carries the same summary at
the directory's entry point.

The status block says plainly what has NOT moved: comprehension breadth and
proof-of-life. The reader is still 19 constructions wide and decides 1.0% of the
held-out corpus; the 5000-beat soak is still prose with no pinned digest.
Everything landed this arc is enforcement and evidence machinery. Capability
moves in PR-11/PR-12/PR-14/Track B, all four ruling-gated.

Docs only.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
2026-07-28 04:36:13 +00:00

8.3 KiB

M2 — Afferent Boundary

Kind: layer · Parent: CORE · Assessor: Opus 5 (Phase 2) Re-verified: 39331dbc (2026-07-28) — see the arc note below. Verified at: 8927c563 (2026-07-27) Liveness: partial-wiring-debt (text) / inert (non-text) · Fitness: strained · Topology role: runtime boundary

World → field. M2 is where untrusted reality becomes admissible structure, and it is the only layer whose failure mode is contamination rather than error: everything downstream inherits whatever M2 admits. Its philosophical charge is that admission is an act with consequences — the gate does not merely parse, it vouches. Every entry point is therefore a trust boundary, and normalization is permitted here precisely because this is a declared construction boundary, not a repair site.

Telos stages: listen/ingest Macro role: Admits input into the field under a closure-preserving construction boundary, or refuses it.

Arc note — 2026-07-28 (39331dbc). PR-7 wrote the M2 trust-boundary table (docs/specs/runtime_contracts.md). Measured against formation's six declared boundaries: two already met, three are category differences and are now CLOSED (they presuppose a persisted artifact with citations, which this boundary does not produce), one real delta — no audit record per rejection. Forensic, not containment.


What it is / What it does

ingest/gate.py::inject is the live text path: it converts tokens into field excitation and is one of the explicitly allowed normalization boundaries in AGENTS.md — permitted because injection is construction, not drift repair. core_ingest/ (7 modules) is the ingest compiler. ingest/ itself is small (2 modules). OOV policy is applied at the same seam via packs.OOVPolicy.

sensorium/ (59 modules — the largest non-test, non-generate package after core/) is the afferent track for non-text modalities, plus sensorium.environment.falsification (ADR-0211), a deterministic replay surface comparing expected against actual ObservationFrame evidence with a closed two-verdict set (SUPPORTED / FALSIFIED). Neither verdict promotes anything to reviewed memory or mutates packs, vault, identity, or policy.

Verified at this SHA: sensorium is imported by neither chat/runtime.py nor core/cognition/pipeline.py. The afferent track is off the serving path entirely — consistent with the map's inert label for sensorium-afferent, and consistent with the position paper's honest statement that vision, audio, and motor modalities are planned, not built: the ProjectionHead protocol supports them architecturally; the projection heads do not exist.


Contract

  • Inputs: raw user text; (designed) non-text modality frames.
  • Outputs: injected FieldState satisfying versor_condition < 1e-6, OOV decisions, ObservationFrame evidence, falsification verdicts.
  • Invariants:
    • Every accepted field state satisfies the versor condition at the gate — pin: algebra/ingest suites — status: running.
    • Normalization is allowed only at declared construction boundaries (ingest/gate.py is named explicitly); drift repair is forbidden and may not be disguised by naming.
    • Falsification bench forbids raw pixels/PCM/event streams/byte payloads/actuator traces in traces; forbids motor-efferent units in v1; forbids learned latents as substrate; forbids probabilistic confidence or tolerance thresholds in verdicts; forbids generate/* dependencies and vault mutation — pin: sensorium suite (21 files) — status: running.
    • Trust-boundary defaults: explicit opt-in for arbitrary execution; reject unsafe paths before filesystem access; no hidden background execution.

Design vs build

  • Design: ADR-0007 (ingest → CandidateGeometricPressureFieldState), ADR-0211 (environmental falsification), ADR-0243 §multimodal ingress, AGENTS.md allowed-normalization-boundaries rule, formation's six trust boundaries as the adjacent standard (M5).
  • Build: text path partial-wiring-debt; non-text inert.
  • Evidence:
    • inject is the live serving entry — code-read — chat/runtime.py:115 from ingest.gate import inject — would-fail-if-absent: yes.
    • Sensorium is absent from both serving entrypoints — code-read (negative) — would-fail-if-absent: n/a; this is evidence of absence.
    • sensorium suite exists with 21 test files — code-read — core/cli_test.py — would-fail-if-absent: yes (the falsification bench is genuinely exercised).
    • unified_ingest=False (core/config.py:243) — measurement — the unified ingest path is built and off by default.

Capacity

  • Designed: any modality admitted through a closure-preserving, trust-bounded gate.
  • Measured: text only, in production. Non-text afferent machinery is substantial (59 modules) and exercised by its own suite, but reaches no serving path.
  • Ceilings: no projection heads exist for vision/audio/motor. The falsification bench is deliberately v1-closed (two verdicts, no probabilistic confidence, no tolerance thresholds) — a scoping decision, not a defect.

Dependencies & provenance

feeds → M0 (field excitation), M3 (tokens, OOV decisions); reads → M1 (packs, OOV policy, vocabulary); verified-by → MV.


Stage coverage

Stage Verdict Evidence
listen/ingest (text) covered inject is on the live path and gate-checks closure
listen/ingest (non-text) uncovered Sensorium imports nowhere on the serving path; no projection heads exist

Zone roster: ingest-boundary, ingest-compiler, sensorium-afferent (inert, confirmed by import evidence), sensorium-falsification ⚑ (live-internal; zero subsystems mapped).

⚑ Zero-subsystem zone. sensorium-falsification is the fourth unmapped zone and the only one outside M3. What is known: it corresponds to sensorium.environment.falsification under ADR-0211 with a closed verdict set and an explicit forbidden-list, and its suite runs. What is unmapped: internal decomposition and the boundary against the rest of sensorium/. The system map labels it layer "L12" — a stratum no other CORE document uses. That label should be either adopted deliberately or dropped; it currently exists only in a local, gitignored artifact.

Rollup note: weakest-link rollup, and here it is genuinely informative rather than misleading: M2's text half serves and its non-text half does not.


Judgment

Fitness: strained. The text gate is sound and correctly privileged as a construction boundary. The strain is proportional: 59 modules of afferent machinery reach no serving path, which is the largest quantity of built-and-disconnected code the assessment has located. That is not automatically waste — a deliberately staged capability awaiting projection heads is legitimate — but it is a large standing bet whose entry criterion is nowhere stated.

Honest wrinkles:

  • The single most consequential asymmetry in this layer: M5's formation pipeline declares six explicit trust boundaries with content-addressed inputs and outputs and an audit record for every rejection; M2 — the boundary that actually faces untrusted user text in production — has no comparable declared table. Both are "the place the world gets in," and only one of them has a published contract of that rigor. This is a Phase 4 item and, in this assessor's reading, the strongest single hindrance-audit lead outside M6: the standard exists in-repo and has not been applied where the exposure is highest.
  • sensorium-falsification's "L12" layer label exists in one local artifact and no ratified document. Minor, but it is exactly how a phantom stratum enters an architecture.
  • unified_ingest is built and off; like M5's learning flags, the gap between built and on is undocumented.
  • The falsification bench's explicit prohibition on motor/efferent units in v1 is the only place in the corpus that takes a position adjacent to Candidate CR-3 (efferent action) — and it is a scoping constraint on one bench, not a system-level ruling. CR-3 remains unruled.

Open questions:

  • Should M2 adopt formation's trust-boundary table format? (→ Phase 4 / ruling)
  • What is the entry criterion for the sensorium track reaching serving? (→ ruling)
  • Adopt or drop the "L12" label (→ Phase 1 taxonomy amendment or ruling)