Eight component cards in 20-component-cards/: the four zero-subsystem zones
(comprehend-organ, determine-phase, realize-phase, sensorium-falsification)
plus always-on-process, derivation-organs, surface-selection,
attention-allocation. Plus 05-phase3-findings.md and correction banners on
the M6 and M4 layer cards.
CORRECTIONS (C-1..C-5):
- THREE more map live-serving labels demoted to live-internal:
comprehend-organ (a MATH SETUP ROUTER, not chat comprehension — imported
by neither serving entrypoint), determine-phase and realize-phase (both
behind accrue_realized_knowledge=False / idle flags; NO default-config
serving turn touches any of the three).
- Phase 2's M6 card overstated ephemerality: Shape B+ persistence exists
(persist_session_state, daemon-forced, "restored bit-exactly").
- Phase 2's M4 card understated the resolver: surface_resolution.py IS a
declared-precedence resolver for the pipeline seam; only the upstream
composer arms remain ordered branches. Third Door refines to "extend the
existing pattern upstream."
- 34-vs-18 RESOLVED: 18 resolve_promotable_* organs existed AT the ADR-0252
ratification commit; "34" counted modules (~32-33). No consolidation has
occurred; the governing ADR's headline number has no stated basis.
- The 2026-07-25 verification doc's claim that accrual "is enabled by the
production L10 process" is contradicted: CONTINUOUS_LIFE_CONFIG_FLAGS is
exactly {persist_session_state, consolidate_determinations,
strict_identity_continuity}.
NEW FINDINGS (F-6..F-10):
- F-6 THE CONTINUOUS LIFE MAY CONSOLIDATE AN EMPTY SET: the daemon forces
the consolidator ON but not the accruer, and realize_comprehension — the
only turn-path writer of realized facts — sits behind the accrual flag.
The two halves of the lived learning loop are gated by different flags
and only one is forced. Undocumented either way.
- F-7 ADR-0008's Allocation Physics LANDED, mutated, ungoverned: curvature
kernel -> salience adapter -> attention threshold plan -> candidate
intersection, with budget feedback making attention SELF-NARROWING
across a walk. InhibitionMask is decoration. top_k=16/threshold=0.3 have
no recorded derivation. CR-1 closes with a one-page ADR.
- F-8 two load-bearing naming traps (comprehend-organ; realize vs realizer).
- F-9 REALIZE is sound; its ceiling is the reader that feeds it (the #138
fabrication locus — measured/pinned/held, recorded not re-discovered).
- F-10 _accrue_in_turn swallows exceptions into a no-op with no telemetry.
Phase 4 seed list consolidated: 8 hindrance candidates, 10 gap candidates,
each with its deciding authority. Method note recorded: three phases of
corrections, and nothing in the chain was caught by re-reading documents.
3.4 KiB
comprehend-organ — core/comprehension_attempt/
Kind: zone→component descent · Parent: M3 · Assessor: Fable 5 (Phase 3)
Verified at: 8927c563 (2026-07-27)
Liveness: live-internal (demoted from the map's live-serving) · Fitness: fit, misleadingly named · Topology role: runtime boundary (off the chat serving path)
The deterministic multi-organ setup router (N3): when several comprehension organs each attempt a problem setup, admit a setup only when exactly one organ produced an admissible one — or the admitting organs agree by signature. Never pick among disagreeing readings. Its philosophical role is refusal-preserving arbitration: routing must not become a place where a guess can hide.
What it is / What it does
Six modules, 754 lines: router.py (77 — the N3 router), classify.py (159 — classify_cmb/r1/r2/r3), failure_family.py (250), proposal.py (148 — comprehension-failure proposals), model.py (63 — ComprehensionAttempt), __init__.py. Routing rule, verbatim from the module doc: exactly one setup_correct → routed; zero → all_refused (classified downstream); ≥2 agreeing signatures → routed; ≥2 differing → ambiguous (refuse — never pick). Cross-organ signatures are produced by different functions and never coincide, so two admitting organs resolve to ambiguous in practice. The router never solves and never emits setup_wrong — that is an eval-only outcome.
The liveness demotion, with evidence
comprehension_attempt is imported by neither chat/runtime.py nor core/cognition/pipeline.py. Its non-test callers are core/epistemic_disclosure/limitation.py (→ chat/ask_runtime.py, behind ask_serving_enabled=False), core/proposal_review/queue.py, core/epistemic_questions/delivery.py, and evals/constraint_oracle/verified_producer.py. Nothing on the default serving path reaches it. The map's live-serving label is therefore wrong at this SHA: live-internal (eval lanes + flag-gated ask path + proposal machinery).
Contract & evidence
- Refuse-on-ambiguity is the load-bearing invariant — pins: router tests (
tests/test_cmb_router_contemplation.py,tests/test_failure_family.py,tests/test_failure_proposal.py) — present in the tree; suite membership not individually confirmed. - wrong=0 posture: against gold the routed setup must match; the router structurally cannot emit a wrong setup, only a refusal or a routed one.
Judgment
Fitness: fit — but the zone name is a trap. This is a math setup router over the GSM8K-era R1/R2/CMB organs, not "the comprehension organ" of the chat path. Chat comprehension lives in generate/meaning_graph/reader.py (see the realize-phase card). A future reader who greps "comprehend-organ" expecting the thing that reads user English will land in the wrong subsystem. Recommend the zone be renamed (e.g. setup-router) or its card carry this disambiguation permanently.
Honest wrinkles: the design is deliberately boring and correct — no dynamic scoring, no priority heuristics. Its consumers are all flag-gated or eval-side, so this machinery currently arbitrates for paths that mostly do not serve.
Open questions: should epistemic_questions/disclosure consumers ever reach serving, the router becomes serving-path arbitration — does it then need a suite-pinned invariant? (→ Phase 4)