Verdict: PARTIAL. Updates the substrate liveness registry with the L1 field substrate audit, including ADR enumeration, module/caller mapping, suite lane evidence, cross-layer contract findings, and downstream notes. Cleanup: none; no unambiguously dead L1 code was found. Test-only helpers and pulse-only field operators are documented for review instead of deleted. Verification: python3 -m core.cli test --suite smoke -q; python3 -m core.cli test --suite algebra -q; python3 -m core.cli test --suite pulse -q; python3 scripts/verify_lane_shas.py.
20 KiB
Substrate Liveness Registry
Scope: substrate-liveness-audit-scope (v2) Status: Active audit — append-only as layers are completed. Discipline: feedback-adr-cross-reference-discipline, feedback-cleanup-as-you-find
Audit progress
| Layer | Status | Verdict | Cleanup performed | Last audited |
|---|---|---|---|---|
| L0 — Algebra primitives | ✅ Audited | CLOSED | None — no dead code found | 2026-05-24 |
| L1 — Field substrate | ✅ Audited | PARTIAL | None — no dead code found | 2026-05-24 |
| L2 — Vault | ⏳ Pending | — | — | — |
| L3 — Language packs | ⏳ Pending | — | — | — |
| L4 — Recognition | ⏳ Pending | — | — | — |
| L5 — Cognition pipeline | ⏳ Pending | — | — | — |
| L6 — Chat runtime + surface composition | ⏳ Pending | — | — | — |
| L7 — Teaching loop | ⏳ Pending | — | — | — |
| L8 — Inter-session memory + contemplation | ⏳ Pending | — | — | — |
| L9 — Epistemic state + verdicts | ⏳ Pending | — | — | — |
L10 / L11 are not audit targets (no design to audit; flagged in scope as gaps the audit will surface need for).
L0 — Algebra primitives
Audit date: 2026-05-24 Auditor: primary agent (Claude) Verdict: CLOSED
Scope-hypothesis correction (per audit step 0)
The scope's layering table cited algebra/backend/ (directory). Reality:
algebra/backend.py (single 267-line file). Hypothesis drift, not a
finding — recorded so the scope's layering map can be amended if it
matters elsewhere.
ADRs in scope for L0
Triaged from the broader algebra/versor/CGA keyword grep against
docs/decisions/:
| ADR | Title | Status | Belongs at L0? |
|---|---|---|---|
| ADR-0001 | VocabManifold Versor Invariant | Accepted | Yes — defines the versor_condition < 1e-6 invariant L0 must preserve |
| ADR-0003 | Coordinate System Dissolution | Accepted | Yes — algebraic foundation |
| ADR-0004 | Rotor as Operator, Not Vocabulary Property | Accepted | Yes — defines rotors as L0 primitives |
| ADR-0009 | Compositional Physics | Accepted | Yes — versor composition rules |
Other ADRs surfaced by the grep but assigned to higher layers (not audited at L0): ADR-0006 (L1), ADR-0019 (L2), ADR-0010 (L3 identity), ADR-0021/0022/0023/0024/0025 (L5 policy), ADR-0020 (cross-cutting Rust parity, audit when relevant).
Modules in scope for L0
| Module | Lines | Live-import sites (outside algebra/, outside tests/) |
Test-import sites |
|---|---|---|---|
algebra/__init__.py |
5 | (re-export shim) | — |
algebra/backend.py |
267 | 21 | 16 |
algebra/cga.py |
84 | 16 | 17 |
algebra/cl41.py |
165 | 8 | 10 |
algebra/holonomy.py |
100 | 2 | 5 |
algebra/rotor.py |
179 | 5 | 8 |
algebra/versor.py |
180 | 20 | 19 |
Every module has at least 2 live-import sites outside algebra/. No
dormant modules at L0.
Caller-trace evidence
Sample of live callers (full grep: grep -rn "from algebra\|import algebra" --include="*.py" | grep -v "^algebra/" | grep -v "tests/" — 38 distinct caller files):
field/propagate.py:23— versor application during field propagation (L1 → L0)ingest/gate.py:33— versor/energy at injection boundary (L1 → L0)language_packs/compiler.py:14— versor construction during pack compilation (L3 → L0)chat/runtime.py— versor operations in the live turn loop (L6 → L0)generate/intent_ratifier.py,generate/admissibility.py,generate/proposition.py— versor-gated generation (L5 → L0)core/cli.py:446-469— versor diagnostics surfaced to operator (CLI → L0)
Every live caller traces back to the runtime entry through at least one
of: core chat, core eval cognition, or the field/ingest pipeline.
Exercising suite lane
core test --suite algebra — 13 test files, every L0 module covered:
| Module | Tests in algebra suite |
|---|---|
versor.py |
test_versor_closure, test_holonomy, test_energy, test_motor, test_versor_condition_rust_parity, test_versor_apply_rust_parity |
rotor.py |
test_versor_closure, test_energy |
holonomy.py |
test_holonomy, test_holonomy_resonance |
cga.py |
test_holonomy_resonance, test_null_cone, test_vault_recall |
cl41.py |
test_vault_recall_vectorised |
backend.py |
test_vault_recall_vectorised, test_vault_recall_rust_parity, test_cga_inner_rust_parity, test_geometric_product_rust_parity, test_versor_condition_rust_parity, test_versor_apply_rust_parity |
Verification: python3 -m core.cli test --suite algebra -q →
82 passed, 50 skipped (skipped are Rust-parity tests on a Python-
only environment; not a closure gap).
Cross-layer contract check
Pass 1 — mechanical (consumer-exists per exposed symbol):
| Exposed symbol | Consumer evidence |
|---|---|
versor_apply |
field/propagate.py, generate/stream.py, chat/runtime.py (3+ live consumers) |
versor_condition |
core/cognition/trace.py:34, evals/cognition/runner.py:60 (gated in evals at < 1e-6) |
normalize_to_versor |
generate/intent_ratifier.py, generate/admissibility.py |
cga_inner |
vault/store.py, algebra/backend.py (_CGA_INNER_METRIC), evals/lab/vault_epistemic_trace.py |
embed_point, is_null, null_project |
vault/store.py, language_packs/compiler.py, field/operators.py |
using_rust, vault_recall (backend) |
vault/store.py, all Rust-parity tests |
word_transition_rotor, make_rotor_from_angle |
field/operators.py, generate/intent_ratifier.py |
holonomy_encode, holonomy_similarity |
vault/store.py, evals/lab/ |
N_COMPONENTS (cl41) |
algebra/backend.py, algebra/cga.py |
No exposed L0 symbol with zero downstream consumers.
Pass 2 — semantic (judgment-required):
ADR-0001's versor_condition < 1e-6 invariant is the primary semantic
contract. Verified:
- Measured per turn: L0's
versor_condition()is computed and folded into the deterministic trace payload (core/cognition/trace.py:34,70) on every turn. - Surfaced to operator: displayed by
core chatandcoreinfo commands (core/cli.py:398,461,469). - Gated at eval boundary: evals refuse to count a turn as
versor_okifversor_condition >= 1e-6(evals/cognition/runner.py:60,evals/run_cognition_eval.py:54). - NOT enforced inline as exception: a turn with
vc >= 1e-6still completes; the violation is visible in trace + eval, not raised as an error. This matches CLAUDE.md's discipline ("Do not weaken this threshold to make tests pass. Fix the operator/construction boundary that violated it.") — violations are surfaced for fix, not catastrophically refused at runtime.
Semantic mismatches flagged for human review: none. The contract is consistently consumed.
Closure criteria scorecard
| Criterion | Status | Evidence |
|---|---|---|
| 1. Design artifact | ✅ | ADR-0001, ADR-0003, ADR-0004, ADR-0009 |
| 2. Code artifact | ✅ | algebra/{backend,cga,cl41,holonomy,rotor,versor}.py |
| 3. Live caller | ✅ | 38 distinct caller files outside algebra/ and tests/ |
| 4. Exercised by suite lane | ✅ | core test --suite algebra — 82/82 non-skipped pass; every L0 module covered |
| 5. Cross-layer consistency | ✅ | All exposed symbols consumed; versor_condition invariant measured + traced + gated |
Verdict: CLOSED.
Cleanup performed
None. Audit found no dead, redundant, superseded, or orphaned code at L0. Every module has live callers; every exposed symbol is consumed; the suite lane exercises every module; the invariant is preserved end-to-end.
Findings / notes for downstream layers
- L1 (Field substrate) auditor: L0's
versor_conditionis consumed at L5 (trace) and at the eval boundary, but L1 itself does not appear to enforce the invariant — L1's propagation produces field states that may later violate the invariant, with measurement deferred to L5. Worth verifying that L1's propagation correctness is itself tested independently of L5's downstream measurement. - L2 (Vault) auditor:
vault/store.pyis one of the heaviest consumers of L0 (cga_inner, embed_point, is_null, holonomy_encode). L2's closure depends on L0's exact-CGA-recall guarantees; the L2 audit should verify the vault honors the exact-match discipline end-to-end, not just at the algebra layer. - L6 (Chat runtime) auditor: ADR-0020 (Phase 5 / Rust Parity Sequencing) is cross-cutting; the 50 skipped tests in the algebra suite are Rust-parity tests skipped in a Python-only environment. Audit ADR-0020 wherever Rust integration is live (when it lands) rather than at any single layer.
Audit method footnote
This entry follows the per-layer audit format established here: ADRs in scope → modules in scope → caller traces → suite lane exercise → cross-layer contract (mechanical + semantic) → closure scorecard → cleanup → notes for downstream. Subsequent layers should follow the same format so the registry is uniformly machine- and human-scannable.
L1 — Field substrate
Audit date: 2026-05-24 Auditor: Codex Verdict: PARTIAL
Scope-hypothesis correction (per audit step 0)
The scope's layering table cited ADR-0006 as the starting point. Reality:
L1 also depends on ADR-0002 / ADR-0012 for injection-gate and single-
normalization-site discipline, plus ADR-0024 / ADR-0025 as explicit
negative-placement ADRs that keep admissibility out of field/propagate.py.
field/operators.py is L1-shaped substrate code for core pulse, but it
is not on the current ChatRuntime / CognitiveTurnPipeline path.
ADRs in scope for L1
Triaged from the broader field / propagation / injection / normalization /
energy keyword grep against docs/decisions/:
| ADR | Title | Status | Belongs at L1? |
|---|---|---|---|
| ADR-0002 | Ingest Layer Architecture | Accepted | Yes — original injection-boundary design; superseded by ADR-0012 but still relevant historical design |
| ADR-0006 | The Field Energy Operator (Hamiltonian Companion Field) | Implemented | Yes — defines EnergyClass, EnergyProfile, FieldEnergyOperator, FieldState.energy, and propagation recomputation |
| ADR-0012 | core_ingest Governance Layer |
Accepted | Yes — preserves ingest/gate.py as the single normalization site |
| ADR-0024 | Inner-Loop Per-Rotor Admissibility | Accepted | Boundary-only for L1 — explicitly keeps admissibility upstream of propagate_step() and adds no normalization site |
| ADR-0025 | Rotor / Frame Admissibility | Accepted | Boundary-only for L1 — explicitly rejects field/propagate.py as the admissibility home |
Other ADRs surfaced by the grep but assigned to other layers (not audited at L1): ADR-0007 (valence layer; orthogonal companion to energy, but not part of this brief's L1 concern set), ADR-0013 (sensorium upstream of the gate), ADR-0014 / ADR-0054 (L2 vault / learning), ADR-0022 / ADR-0023 / ADR-0026 (L5 generation admissibility), ADR-0038 and later surface ADRs (L6/L7 surface and teaching concerns).
Modules in scope for L1
| Module | Lines | Live-import sites (outside own package, outside tests/) |
Test-import sites |
|---|---|---|---|
ingest/gate.py |
351 | 4 | 6 |
field/propagate.py |
72 | 3 | 1 |
field/state.py |
122 | 18 actual imports (raw grep also found one prose false positive) | 11 |
field/operators.py |
289 | 3 (core pulse / benchmark path, not chat runtime) |
4 |
core/physics/energy.py |
119 | 8 | 1 |
No module is imported by nothing outside its own package. No
unambiguously dead module was found. field/operators.py is live through
scripts/run_pulse.py and benchmarks/run_benchmarks.py, but not through
the current chat/cognition turn loop.
Caller-trace evidence
Sample of live callers (full greps used the required shape, e.g.
grep -rn "from field.propagate\|import field.propagate" --include="*.py" . | grep -v "^./field/" | grep -v "^./tests/"):
chat/runtime.py:89andsession/context.py:20— live turn ingest callsingest.gate.inject()(L6/session → L1).generate/stream.py:19,628— generation walk appliespropagate_step()for each emitted token (L5 → L1).generate/stream.py:18,core/cognition/pipeline.py:21,core/cognition/result.py:13,chat/runtime.py:80, andsession/context.py:15— liveFieldStateconsumers.language_packs/compiler.py:14,72andingest/gate.py:33,292—FieldEnergyOperatorcomputes pack/injection energy.vocab/manifold.py:36,74,227,generate/salience.py:44, andpacks/common/runtime_rules.py:113,120— energy profile/class consumers.scripts/run_pulse.py:40-41—ManifoldState,GraphDiffusionOperator, andConstraintCorrectionOperatorare live through thecore pulseCLI path, not throughcore chat.
The live chat/cognition trace is:
core chat / ChatRuntime → SessionContext.commit_ingest() →
ingest.gate.inject() → FieldState → generate.stream.generate() →
field.propagate.propagate_step() → GenerationResult.final_state →
CognitiveTurnPipeline trace/result.
Exercising suite lane
Two documented suite lanes are relevant:
| Suite lane | What it exercises | Verification |
|---|---|---|
core test --suite smoke |
Live chat/pipeline reach path plus architectural normalization doctrine (tests/test_architectural_invariants.py) |
python3 -m core.cli test --suite smoke -q → 67 passed |
core test --suite algebra |
ADR-0006 energy operator and propagate_step() energy recomputation independent of L5 trace measurement (tests/test_energy.py) |
python3 -m core.cli test --suite algebra -q → 82 passed, 50 skipped |
Additional evidence for the pulse-only field-operator path:
python3 -m core.cli test --suite pulse -q → 24 passed.
Cross-layer contract check
Pass 1 — mechanical (consumer-exists per exposed symbol):
| Exposed symbol | Consumer evidence |
|---|---|
inject |
chat/runtime.py, session/context.py, core/cli.py, evals/lab/rotor_manifold_explorer.py |
propagate_step |
generate/stream.py; lab probes in evals/lab/ |
FieldState.F |
generate/stream.py, session/context.py, chat/runtime.py, core/cognition/trace.py via result path |
FieldState.node / FieldState.step |
generate/stream.py, generate/salience.py, session/context.py, tests in smoke/cognition lanes |
FieldState.holonomy / energy / valence |
carried by session/context.py and generate/stream.py; energy also consumed by generate/salience.py through vocab energy and by runtime surface helpers |
EnergyClass / EnergyProfile.energy_class |
ingest/gate.py, packs/common/runtime_rules.py, core_ingest/compiler.py, core/physics/learning.py |
EnergyClass.vault_candidate |
core/physics/learning.py (L2 follow-up; internal physics import, not a live L1 turn-loop consumer) |
FieldEnergyOperator.compute |
ingest/gate.py, language_packs/compiler.py, field/propagate.py |
aspect_weight |
Internal to FieldEnergyOperator.compute; direct tests only |
FieldState.advance |
Tests only (tests/test_energy.py) |
ManifoldState.with_fields / ManifoldState.advance |
Tests only (tests/test_manifold_state.py) |
GraphDiffusionOperator / ConstraintCorrectionOperator |
scripts/run_pulse.py, benchmarks/run_benchmarks.py, pulse/proof tests |
Mechanical gaps: FieldState.advance, ManifoldState.with_fields, and
ManifoldState.advance have no non-test consumer. They are small helpers
on public dataclasses, so they were not deleted as unambiguous dead code.
Pass 2 — semantic (judgment-required):
ADR-0012's single-normalization-site contract is mostly honored:
ingest/gate.pyis the only production call site fornormalize_to_versor()in the L1 live path (ingest/gate.py:237,342).field/propagate.pyhas no normalization, unitization, projection, repair, monitor, orversor_condition()check. It calls onlyversor_apply()and recomputes energy (field/propagate.py:47-71).tests/test_architectural_invariants.pymechanically guardsnormalize_to_versor()call sites and forbidsunitize_versor()infield/,generate/, andvault/except the existinggenerate/stream.pyfinal-state closure exception.
ADR-0006 energy propagation is independently tested:
tests/test_energy.pycovers all energy classes, aspect weights, anchor-adjacent escalation,requires_architect_review,FieldStateenergy storage, andpropagate_step()recomputation.- This directly answers the L0 note: L1 propagation correctness is not
tested only through L5's downstream
versor_conditiontrace/eval measurement.
Cross-layer consistency gaps:
- Gate threshold mismatch:
ingest/gate.pydocumentsversor_condition(F) < 1e-6at the gate contract (ingest/gate.py:22-24) but raises only whencond > 1e-5(ingest/gate.py:344-345).tests/test_architectural_invariants.pyalso pins the weaker< 1e-5post-condition (tests/test_architectural_invariants.py:339-367). This conflicts mechanically with the project/L0 hard invariantversor_condition(F) < 1e-6. - ADR-0006 threshold drift: ADR-0006 specifies E2 begins at raw
0.38, while code classifies E2 atraw >= 0.37(core/physics/energy.py:104-105). Tests exercise the code behavior, not the exact ADR table boundary.
Semantic mismatches flagged for human review:
field/operators.pycontains a private_unitize_f32()and uses it in graph diffusion / correction (field/operators.py:69-118,190,272). This is notfield/propagate.py, and it is reached throughcore pulserather than the live chat/cognition turn loop. It is nevertheless field-substrate code that re-projects blended fields, so the operator should decide whether it is an allowed construction boundary, a pulse-only legacy path, or a normalization-site violation.session/context.pyperforms final-turn hemisphere correction and anchor pull withunitize_versor()(session/context.py:207-246). This is outside L1 and was not verdicted here, but it is a forward note for the L6 runtime auditor because it changes live session field state after generation.
Closure criteria scorecard
| Criterion | Status | Evidence |
|---|---|---|
| 1. Design artifact | ✅ | ADR-0002, ADR-0006, ADR-0012; ADR-0024/0025 for negative placement at the propagation seam |
| 2. Code artifact | ✅ | ingest/gate.py, field/propagate.py, field/state.py, core/physics/energy.py; pulse-only field/operators.py |
| 3. Live caller | ✅ | Chat runtime/session/generation callers for gate/state/propagate/energy; pulse callers for graph operators |
| 4. Exercised by suite lane | ✅ | smoke walks live turn path; algebra independently tests ADR-0006 propagation; pulse covers graph operators |
| 5. Cross-layer consistency | ⚠️ | Gate/test threshold is < 1e-5 while project/L0 invariant is < 1e-6; ADR-0006 E2 boundary drifts by 0.01; several dataclass helpers are test-only |
Verdict: PARTIAL.
Cleanup performed
None. Audit found no module that was unambiguously dead, redundant, superseded, or orphaned. Test-only helper methods and pulse-only field operators are ambiguous rather than safe deletion candidates.
Findings / notes for downstream layers
- L2 (Vault) auditor: ADR-0006 says vault recall re-activates a region to E2 transiently and lets it cool. L1 verifies the energy operator exists and is used at injection/propagation, but did not trace a live vault-recall path that updates energy on recall. Audit this in L2.
- L5 (Cognition/generation) auditor:
generate/stream.pyhas an explicit final-stateunitize_versor()closure exception. L1 did not verdict it because it belongs to generation, but it is adjacent to the normalization-site discipline. - L6 (Chat runtime) auditor:
session/context.pyperforms live post-generation field orientation and anchor pull, includingunitize_versor(). Verify whether that runtime correction boundary is documented and suite-protected. - Future scope cleanup: Decide whether
field/operators.pyis still a first-class pulse substrate, a benchmark-only substrate, or legacy code. It is live throughcore pulse, so this audit did not delete it.