core/docs/decisions
Shay b35bec6465 feat(anchor_lens): ADR-0073c — L1.3 first lenses + composer wiring
L1.3 of the anchor-lens inside-out rollout — first substantive
surface lift on the substantive axis.  Two ratified non-trivial
lenses engage on cognition-pack lemmas via the alignment graph,
appending [lens(<id>):<mode>] annotations to the existing
pack-grounded surface.

Two ratified lenses

  grc_logos_v1 (Greek substrate)
    primary_substrate         : "grc"
    semantic_domain_preferences: ["logos.episteme.systematic_knowledge"]
    cognitive_mode_label       : "systematic"
    Engages on en "knowledge" via grc-core-cog-021 (ἐπιστήμη) →
    en-core-cog-007 alignment edge.

  he_logos_v1 (Hebrew substrate)
    primary_substrate         : "he"
    semantic_domain_preferences: ["logos.aletheia.verity"]
    cognitive_mode_label       : "covenant-verity"
    Engages on en "truth" via he-core-cog-002 (אמת) →
    en-core-cog-002 alignment edge.

  Both ratified under method anchor_lens_lifts_proposition.

Engagement rule (single)

  1. Resolve en_lemma → entry_id (cognition pack).
  2. For each substrate pack matching lens.primary_substrate, load
     alignment.jsonl; find edges where target_id == entry_id.
  3. For each such substrate lemma, if any atom in its
     semantic_domains ∈ lens.semantic_domain_preferences → engage.
  4. No match → None (no annotation; byte-identical surface).

The pivot is shared semantic_domain atoms surfaced via the
alignment graph — exactly the language-neutral commitment from
ADR-0073.  Engagement never touches non-English surface text;
entry_ids and atom strings only.

Surface lift

  no-lens : "Knowledge is X. pack-grounded (en_core_cognition_v1)."
  lens-on : "Knowledge is X. pack-grounded (en_core_cognition_v1) [lens(grc_logos_v1):systematic]."

  Annotation between existing provenance and trailing period.
  Both metadata fields are ASCII-bounded ≤64 chars at the loader
  level, so the annotation can never carry non-ASCII.

Scope deliberately narrow

  L1.3 wiring restricted to pack_grounded_surface /
  build_pack_surface_candidate (DEFINITION/RECALL only).  Other
  composers (COMPARISON / CORRECTION / PROCEDURE / NARRATIVE /
  EXAMPLE / CAUSE / VERIFICATION) accept the anchor_lens kwarg via
  forward-compat default UNANCHORED but do not yet consume it.
  L1.3b or later broadens to those intent shapes.

Ratify gate widening

  Non-null lenses must:
    - have primary_substrate ∈ {grc, he, en}
    - have a non-empty cognitive_mode_label
    - every preferred atom must exist in at least one lemma of the
      named substrate (trust boundary: operators cannot ship a lens
      pointing at atoms not on disk).
  Method: anchor_lens_lifts_proposition.  Null lenses still ratify
  under byte_identity_null_lift (L1.2 method).

Seam allow-list widening

  Truth-path modules (cognition / trace / pipeline / intent /
  propagation / vault / algebra) still refused.  Composer-side
  imports from chat/pack_grounding.py now permitted — the same way
  ADR-0069's R2 widened the register seam.

New invariants pinned (3)

  tests/test_anchor_lens_engagement_unit.py (14 tests) — resolver
  returns mode label only on intended substrate × en lemma pair;
  case-insensitive; engagement None under null lens; synthetic
  lens with unmatched atom returns None; annotation is pure ASCII.

  tests/test_anchor_lens_lifts_proposition.py (17 tests) — grc
  engages on knowledge only, he engages on truth only,
  cross-lens isolation, three-way distinctness, replay determinism
  per (lens × prompt), register-tour seam holds within each lens
  scope (orthogonality CI-pinned, parametrized over 4 lens
  choices).

  tests/test_anchor_lens_no_glyph_leak.py (5 tests) — hard
  block-scoped gate: Greek (U+0370..03FF, U+1F00..1FFF), Hebrew
  (U+0590..05FF), Syriac, Arabic.  Stylistic punctuation
  (em-dash etc.) explicitly allowed; em-dash predates L1.3 by a
  wide margin and is not a substrate-leak risk.  Tested per-lens
  across every cognition case + direct lens-metadata ASCII check.

Lane evidence

  74 anchor-lens tests pass (37 from L1.2 + 37 new).
  python -m core.cli eval cognition → public 100/100/91.7/100
  byte-identical (lens=None / default_unanchored_v1).
  core demo register-tour --json → all_claims_supported: True
  (R5 seam still holds; L1.3 doesn't perturb presentation axis).
  Full lane: 2706 passed / 4 skipped / 1 pre-existing failure
  (+37 over L1.2's 2669; the one failure remains
  test_all_preamble_explains_combined_run, unrelated).

Files

  packs/anchor_lens/grc_logos_v1.json                        NEW
  packs/anchor_lens/grc_logos_v1.mastery_report.json         NEW
  packs/anchor_lens/he_logos_v1.json                         NEW
  packs/anchor_lens/he_logos_v1.mastery_report.json          NEW

  scripts/ratify_anchor_lens_packs.py                        EDIT
    LENS_IDS adds grc_logos_v1 / he_logos_v1; gate widened.

  chat/pack_grounding.py                                     EDIT
    _resolve_anchor_lens_mode, _maybe_append_anchor_lens_annotation,
    _substrate_lexicon_by_entry_id, _en_lemma_to_entry_id.
    build_pack_surface_candidate + pack_grounded_surface gain
    anchor_lens kwarg (default UNANCHORED).

  chat/runtime.py                                            EDIT
    Thread self.anchor_lens into pack_grounded_surface() call.

  tests/test_anchor_lens_pack_seam.py                        EDIT
    Doc-comment updated for L1.3 allow-list.

  tests/test_anchor_lens_*                                   NEW (3 files)

  docs/decisions/ADR-0073c-anchor-lens-composer-wiring.md    NEW
2026-05-19 20:06:02 -07:00
..
ADR-0001-vocab-layer-invariants.md
ADR-0002-ingest-layer-design.md
ADR-0003-coordinate-system-dissolution.md
ADR-0004-rotor-as-operator-not-property.md
ADR-0005-language-pack-contract.md
ADR-0006-field-energy-operator.md
ADR-0007-valence-layer.md
ADR-0008-allocation-physics.md
ADR-0009-compositional-physics.md
ADR-0010-identity-physics.md
ADR-0011-renderer.md
ADR-0012-core-ingest-governance-layer.md
ADR-0013-sensorium-multimodal-protocol.md
ADR-0014-train-learning-loop.md
ADR-0015-language-packs-and-holonomy-resonance.md
ADR-0016-capability-roadmap.md
ADR-0017-agency-scope.md
ADR-0018-tool-use-scope.md
ADR-0019-exact-vault-recall-acceleration.md
ADR-0020-phase5-rust-parity-sequencing.md
ADR-0021-epistemic-grade-policy.md
ADR-0022-forward-semantic-control.md
ADR-0023-forward-semantic-control-proof.md
ADR-0024-inner-loop-admissibility.md
ADR-0025-rotor-frame-admissibility-design-note.md
ADR-0026-ranked-admissibility-with-margin.md
ADR-0027-identity-packs.md feat(identity-packs): ADR-0028 — pack-driven hedge & claim-strength shaping 2026-05-17 19:42:54 -07:00
ADR-0028-identity-surface-wiring.md feat(identity-packs): ADR-0028 — pack-driven hedge & claim-strength shaping 2026-05-17 19:42:54 -07:00
ADR-0029-safety-packs.md feat(safety): ADR-0029 — always-loaded, never-replaceable safety pack 2026-05-17 19:56:29 -07:00
ADR-0030-depth-language-hedge.md feat(surface): ADR-0030 — depth-language hedge wiring 2026-05-17 20:05:45 -07:00
ADR-0031-score-decomposition-surface.md feat(surface): ADR-0031 — score-decomposition surface (per-axis hedges) 2026-05-17 20:16:22 -07:00
ADR-0032-safety-check-surface.md feat(safety): ADR-0032 — SafetyCheck structural surface 2026-05-17 20:25:22 -07:00
ADR-0033-ethics-packs.md feat(adr-0033): ethics packs — third pack-layer sibling to identity + safety 2026-05-17 20:41:04 -07:00
ADR-0034-ethics-check-surface.md feat(adr-0034): EthicsCheck — structural surface parallel to SafetyCheck 2026-05-17 20:46:34 -07:00
ADR-0035-turn-loop-verdict-surfacing.md feat(adr-0035): turn-loop auto-invocation — surfacing only 2026-05-17 20:57:33 -07:00
ADR-0036-safety-refusal-policy.md feat(adr-0036): safety-only typed refusal policy 2026-05-17 21:10:52 -07:00
ADR-0037-per-predicate-ethics-refusal.md feat(adr-0037,adr-0038): per-predicate ethics refusal + hedge injection 2026-05-17 21:23:28 -07:00
ADR-0038-hedge-injection.md feat(adr-0037,adr-0038): per-predicate ethics refusal + hedge injection 2026-05-17 21:23:28 -07:00
ADR-0039-audit-completeness.md feat(adr-0039): audit completeness — TurnVerdicts bundle, stub TurnEvent, hedge_injected 2026-05-17 21:32:46 -07:00
ADR-0040-telemetry-sink.md feat(adr-0040): structured-logging sink for turn-event audit 2026-05-17 21:39:58 -07:00
ADR-0041-cli-verdicts-and-fanout.md feat(adr-0041): core chat --show-verdicts + FanOutSink 2026-05-17 21:47:47 -07:00
ADR-0042-audit-tour-demo.md feat(adr-0042): audit-tour demo — pack-layer story in four scenes 2026-05-17 22:06:45 -07:00
ADR-0043-pack-measurements-phase2.md feat(adr-0043): Phase-2 pack measurements — claims → numbers 2026-05-17 22:19:24 -07:00
ADR-0044-medical-clinical-ethics-pack.md feat(adr-0044, adr-0045): domain ethics pack + long-context comparison 2026-05-17 22:31:47 -07:00
ADR-0045-long-context-recall-vs-transformer-baselines.md feat(adr-0044, adr-0045): domain ethics pack + long-context comparison 2026-05-17 22:31:47 -07:00
ADR-0046-forward-graph-constraint.md fix(adr-0046): make forward-graph-constraint branch mergeable 2026-05-18 05:57:46 -07:00
ADR-0047-wire-forward-graph-constraint.md feat(adr-0047): wire forward graph constraint into the chat hot path 2026-05-18 06:18:10 -07:00
ADR-0048-pack-grounded-surface.md feat(adr-0048): pack-grounded surface for cold-start DEFINITION/RECALL 2026-05-18 06:36:10 -07:00
ADR-0049-intent-subject-extraction.md feat(adr-0049): head-noun subject extraction in intent classifier 2026-05-18 06:51:46 -07:00
ADR-0050-pack-grounded-comparison.md feat(adr-0050): pack-grounded COMPARISON surface 2026-05-18 06:59:53 -07:00
ADR-0051-trust-boundary-hardening.md feat(adr-0051): trust-boundary hardening pass 2026-05-18 07:09:55 -07:00
ADR-0052-teaching-grounded-surface.md feat(adr-0052): teaching-grounded CAUSE/VERIFICATION surface 2026-05-18 07:13:43 -07:00
ADR-0053-cognition-lane-closure.md feat(adr-0053): cognition lane closure — corpus expansion + CORRECTION acknowledgement 2026-05-18 07:43:39 -07:00
ADR-0054-vault-recall-indexing-batching.md feat(adr-0054): vault recall indexing/batching + holdout split wired 2026-05-18 07:58:57 -07:00
ADR-0055-inter-session-memory-discovery-promotion.md feat(adr-0055): Phase B — DiscoveryCandidate emission from turn loop 2026-05-18 08:26:04 -07:00
ADR-0056-contemplation-loop-c1.md docs(adr-0056): Accepted (Phase C1 implemented at 4eecf73) 2026-05-18 10:07:27 -07:00
ADR-0057-teaching-chain-proposal-review.md feat(adr-0057): Phase C2 — TeachingChainProposal + replay gate + review CLI 2026-05-18 10:23:14 -07:00
ADR-0058-forward-graph-constraint-status.md docs(adr-0058): forward_graph_constraint engaged-but-inert; null-lift pinned 2026-05-18 13:36:37 -07:00
ADR-0059-correction-pass-telemetry.md feat(adr-0059): correction-pass telemetry emission — backward perturbation auditable 2026-05-18 13:47:48 -07:00
ADR-0060-correction-acknowledgment-topic-lemma.md feat(adr-0060): correction acknowledgement carries corrected-topic lemma 2026-05-18 14:14:27 -07:00
ADR-0061-procedure-intent-pack-grounded-surface.md feat(adr-0061): PROCEDURE intent routes to pack-grounded surface 2026-05-18 14:22:19 -07:00
ADR-0062-composed-teaching-grounded-surface.md feat(adr-0062): composed teaching-grounded surface (chain-of-chains) 2026-05-18 14:34:45 -07:00
ADR-0063-cross-pack-surface-resolver.md feat(adr-0063): cross-pack surface resolver — kinship lemmas ground on live path 2026-05-18 15:00:58 -07:00
ADR-0064-cross-pack-teaching-chains.md feat(adr-0064): cross-pack teaching chains + relations_chains_v1 seed (Phase 1.3+1.4) 2026-05-18 16:04:20 -07:00
ADR-0065-oov-gradient-and-relations-v2.md feat(teaching): OOV signal flywheel — sink, aggregator, auto-promotion (Phase 2.3) 2026-05-18 16:42:26 -07:00
ADR-0066-turn-level-composition.md feat(adr-0066): NARRATIVE + EXAMPLE intents with multi-clause composers (Phase 3.3 + 3.4) 2026-05-18 17:01:55 -07:00
ADR-0067-cross-pack-teaching-chains.md feat(adr-0067): cross-pack teaching chains — Plan Phase 4 closed 2026-05-18 17:22:43 -07:00
ADR-0068-register-pack-class.md feat(register): R1–R4 register pack subsystem — deterministic surface variation 2026-05-19 16:52:36 -07:00
ADR-0069-realizer-register-parameter.md feat(register): R1–R4 register pack subsystem — deterministic surface variation 2026-05-19 16:52:36 -07:00
ADR-0070-register-pack-terse-v1.md feat(register): R1–R4 register pack subsystem — deterministic surface variation 2026-05-19 16:52:36 -07:00
ADR-0071-seeded-surface-variation.md feat(register): R1–R4 register pack subsystem — deterministic surface variation 2026-05-19 16:52:36 -07:00
ADR-0072-register-telemetry-operator-surface.md feat(register): R5 — operator-visible register telemetry + tour demo 2026-05-19 19:03:07 -07:00
ADR-0073-anchor-lens-substrate.md feat(packs): ADR-0073a — anchor lens L1.1 content phase 2026-05-19 19:30:20 -07:00
ADR-0073a-anchor-lens-content-phase.md feat(packs): ADR-0073a — anchor lens L1.1 content phase 2026-05-19 19:30:20 -07:00
ADR-0073b-anchor-lens-class-loader.md feat(anchor_lens): ADR-0073b — L1.2 class + loader + unanchored sentinel 2026-05-19 19:46:34 -07:00
ADR-0073c-anchor-lens-composer-wiring.md feat(anchor_lens): ADR-0073c — L1.3 first lenses + composer wiring 2026-05-19 20:06:02 -07:00
README.md feat(adr-0067): cross-pack teaching chains — Plan Phase 4 closed 2026-05-18 17:22:43 -07:00
SESSION-2026-05-12-b.md
SESSION-2026-05-12-language-packs-addendum.md
SESSION-2026-05-12.md
SESSION-2026-05-13.md

Architecture Decision Records

This directory contains the Architecture Decision Records (ADRs) for the CORE project.

ADRs record significant architectural decisions: what was decided, why, what alternatives were considered, and what consequences follow. They are permanent records — superseded ADRs are archived, not deleted.


Index

ADR Title Status
ADR-0001 Vocab Layer Invariants Accepted
ADR-0002 Ingest Layer Design (original) Archived — superseded by ADR-0012
ADR-0003 Coordinate System Dissolution Accepted
ADR-0004 Rotor as Operator, Not Property Accepted
ADR-0005 Language Pack Contract Accepted
ADR-0006 Field Energy Operator Accepted
ADR-0007 Valence Layer Accepted
ADR-0008 Allocation Physics Accepted
ADR-0009 Compositional Physics Accepted
ADR-0010 Identity Physics Accepted
ADR-0011 Renderer Accepted
ADR-0012 core_ingest Governance Layer Accepted
ADR-0013 sensorium/ Multimodal Protocol Layer Accepted
ADR-0014 train/ Learning Loop Accepted (Stub)
ADR-0015 Language Packs as Compiled Linguistic Manifolds Accepted
ADR-0016 Capability Roadmap and Eval Methodology Accepted
ADR-0017 Agency Scope: Responsive-with-Axiology Accepted
ADR-0018 Tool Use Scope: Typed Deterministic Operators Accepted
ADR-0019 Exact Vault Recall Acceleration Accepted
ADR-0020 Phase 5 / Rust Parity Sequencing Accepted (2026-05-16)
ADR-0021 Epistemic Grade Policy Accepted
ADR-0022 Forward Semantic Control Accepted (2026-05-17)
ADR-0023 Forward Semantic Control: Proof Evidence Accepted
ADR-0024 Inner-Loop Per-Rotor Admissibility Accepted
ADR-0025 Rotor / Frame Admissibility Accepted (2026-05-17)
ADR-0026 Ranked Admissibility with Margin Accepted (2026-05-17)
ADR-0027 Identity Packs — swappable, ratified Accepted (2026-05-17)
ADR-0028 Identity Surface Wiring Accepted (2026-05-17)
ADR-0029 Safety Packs — never-swappable, fail-closed Accepted (2026-05-17)
ADR-0030 Depth-Language Hedge Accepted (2026-05-17)
ADR-0031 Score-Decomposition Surface Accepted (2026-05-17)
ADR-0032 SafetyCheck Predicate Surface Accepted (2026-05-17)
ADR-0033 Ethics Packs — third pack tier Accepted (2026-05-17)
ADR-0034 EthicsCheck Predicate Surface Accepted (2026-05-17)
ADR-0035 Turn-Loop Verdict Surfacing Accepted (2026-05-17)
ADR-0036 Safety-Only Typed Refusal Accepted (2026-05-17)
ADR-0037 Per-Predicate Ethics Refusal Opt-In Accepted (2026-05-17)
ADR-0038 Hedge Injection as Runtime Affordance Accepted (2026-05-17)
ADR-0039 Audit Completeness — TurnVerdicts + stub TurnEvent Accepted (2026-05-17)
ADR-0040 Structured-Logging Sink Accepted (2026-05-17)
ADR-0041 --show-verdicts + FanOutSink Accepted (2026-05-17)
ADR-0042 Audit Tour Demo (core demo audit-tour) Accepted (2026-05-17)
ADR-0043 Phase-2 pack measurements — claims → numbers Accepted (2026-05-17)
ADR-0044 Medical / clinical ethics pack (worked-example domain pack) Accepted (2026-05-17)
ADR-0045 Long-context recall: CORE vs transformer baselines Accepted (2026-05-17)
ADR-0046 PropositionGraph as forward AdmissibilityRegion + industry demos Accepted (2026-05-18)
ADR-0047 Wire forward graph constraint into the chat hot path (opt-in) Accepted (2026-05-18)
ADR-0048 Pack-grounded surface for cold-start DEFINITION / RECALL Accepted (2026-05-18)
ADR-0049 Intent classifier head-noun subject extraction Accepted (2026-05-18)
ADR-0050 Pack-grounded surface for cold-start COMPARISON Accepted (2026-05-18)
ADR-0051 Trust-boundary hardening pass Accepted (2026-05-18)
ADR-0052 Teaching-grounded surface for cold-start CAUSE / VERIFICATION Accepted (2026-05-18)
ADR-0053 Cognition lane closure: dev-driven corpus expansion + CORRECTION acknowledgement Accepted (2026-05-18)
ADR-0054 Vault recall matrix-cache indexing + batched API; holdout split wired into eval CLI Accepted (2026-05-18)
ADR-0055 Inter-session memory: reviewed discovery promotion (phased design — DiscoveryCandidate, TeachingChainProposal, replay-equivalence gate); Phase A + Phase B Accepted Phase A + B Accepted; CE Proposed (2026-05-18)
ADR-0056 Contemplation loop (Phase C1): question decomposition, polarity (affirms/falsifies/undetermined), claim_domain typing (factual/relational/evaluative), sync-only by design Accepted (2026-05-18, implemented 4eecf73)
ADR-0057 Teaching-chain proposal + review + replay-equivalence gate (Phase C2): the only path to active-corpus extension; eligibility predicate; auto-reject on metric regression; operator accept/reject/withdraw; append-only proposal log Accepted (2026-05-18)
ADR-0058 forward_graph_constraint remains opt-in default-False; no identity pack flips it on; ADR-0047 null-lift on cognition lane promoted to CI-enforced invariant (regression test); identity-pack→RuntimeConfig composition deferred until at least one such preference shows lift Accepted (2026-05-18)
ADR-0059 ChatRuntime.correct() emits a discriminated "type": "correction" JSONL event to the existing telemetry sink with target_turn, records_count, turn_idxs_affected, max_delta_norm, mean_delta_norm, SHA-256 correction-versor digest, pack ids — no raw versor coordinates; deterministic; no-op without sink Accepted (2026-05-18)
ADR-0060 CORRECTION acknowledgement surface weaves the first pack-resident topical lemma from the utterance (left-to-right, excluding correction itself and be/have fillers) into a fixed template; backward-compatible with ADR-0053 (no-arg path byte-identical); closes correction_truth_040 holdout miss; holdout term_capture_rate 75.0% → 79.2% Accepted (2026-05-18)
ADR-0061 PROCEDURE intent ("How do I X?") routes to new pack_grounded_procedure_surface; selector picks last pack-resident lemma from verb-phrase subject (object > verb), falls back to verb when object is OOV, returns None (→ universal disclosure) for no-pack-lemma utterances; closes procedure_define_010 (term concept) + procedure_verify_034 (surface); holdout surface_groundedness 94.7% → 100.0%; term_capture_rate 79.2% → 83.3% Accepted (2026-05-18)
ADR-0062 Composed teaching-grounded surface: when a chain (A, intent_A, conn_A, B) has a follow-up chain (B, ?, conn_B, C), emit "{A} {conn_A} {B}, which {conn_B} {C}" instead of just "{A} {conn_A} {B}"; depth-1 (one hop) + cycle guard + pack-residency guard; degrades to single-chain byte-identically when no follow-up survives the guards; opt-in via RuntimeConfig.composed_surface=False default; cognition lane null-drop invariant (metrics byte-identical flag OFF/ON) CI-pinned Accepted (2026-05-18)
ADR-0067 Cross-pack teaching chains (Plan Phase 4): chat/cross_pack_grounding.py + teaching/cross_pack_chains/cross_pack_chains_v1.jsonl seeded with 5 reviewed chains; each chain carries explicit subject_pack_id + object_pack_id, loader verifies per-chain residency, same-pack entries rejected (anti-leakage); fall-through after in-pack composer in CAUSE/VERIFICATION (cognition-lane byte-identity preserved); NARRATIVE + EXAMPLE composers merge cross-pack chains into multi-clause aggregation with widened corpus tag (e.g. cognition_chains_v1 + cross_pack_chains_v1); first cross-domain edges (family grounds identity, identity requires family, etc.) — relations × cognition; no prose generation, no new mutation surface, supersession honoured Accepted (2026-05-18)
ADR-0066 Turn-level composition (Plan Phase 3): bounded session-thread context (P3.1) + opt-in deterministic anaphora prefix (Recalling turn N: chain X.) (P3.2, default off) + IntentTag.NARRATIVE multi-clause composer for "Tell me about X" walking every chain rooted on X across registered corpora (P3.3) + IntentTag.EXAMPLE reverse-chain composer for "Give me an example of X" surfacing chains where X is the object (P3.4); no prose generation, no new corpus mutation, all composers consult ADR-0064's cross-corpus aggregator; cognition lane byte-identical Accepted (2026-05-18)
ADR-0065 OOV gradient + relations v2 (Plan Phase 2): five-tier honesty gradient replaces the OOV cliff — pack / teaching / partial (one OOV + one known) / oov (learning invitation surface naming the unknown token + mounted-pack list) / universal disclosure; sink-emit OOVCandidates → core teaching oov-gaps aggregator → core teaching oov-queue auto-promotion mirrors P1.1+P1.2 architecture for vocab gaps; en_core_relations_v2 adds 8 pronoun + role-filler lemmas (mother/father/son/daughter/brother/sister/grandparent/grandchild) with 7 reviewed v2-internal chains; no content synthesis, no domain inference, no auto-pack-mutation Accepted (2026-05-18)
ADR-0064 Cross-pack teaching chains: chat/teaching_grounding.py registers a tuple of TeachingCorpusSpec(corpus_id, path, pack_id); each corpus is 1:1-bound to one lexicon pack (cross-domain triples deferred per teaching_order.md §5); new _all_chains_index() aggregates across registered corpora (first-match-wins); surface composers + discovery gate consult the aggregated view; TeachingChain gains corpus_id field; surface tag follows the resolving corpus id; replay-equivalence gate rewrites registry path during transient phase; relations_chains_v1 seeded with 7 reviewed kinship chains; cognition lane byte-identical Accepted (2026-05-18)
ADR-0063 Cross-pack surface resolver: chat/pack_resolver.py introduces resolve_lemma(lemma, pack_ids) that maps a lemma to (resolving_pack_id, semantic_domains) across an ordered tuple of mounted lexicon packs (first-match-wins); pack-grounded DEFINITION / RECALL / COMPARISON / CORRECTION / PROCEDURE composers now consult the resolver instead of a hardcoded en_core_cognition_v1; surface trust-boundary tag follows the resolving pack id; en_core_relations_v1 joins RuntimeConfig.input_packs defaults — kinship lemmas now ground on the live path without a separate composer module; cognition-lane surfaces remain byte-identical (cognition is resolved first) Accepted (2026-05-18)

ADR-0024 chain — Forward Semantic Control closure

ADR-0022 through ADR-0026 form a single coherent chain that closes forward semantic control as a non-stochastic, replay-deterministic, trace-evidenced mechanism. Read in order:

  1. ADR-0022 — Forward Semantic Control. Establishes the AdmissibilityRegion data structure (allowed indices, relation blade, frame versor) and the contract that a region restricts the admissible token set at generation time.
  2. ADR-0023 — Proof Evidence. Boundary-only proof that the admissibility region is honored at the region intersection level but not yet at the destination-token level.
  3. ADR-0024 — Inner-Loop Per-Rotor Admissibility. Adds the destination-side check: each per-step selection is re-evaluated by cga_inner(versor(candidate), relation_blade) > threshold, with honest refusal (InnerLoopExhaustion) when every admissible candidate is rejected. Six phases of implementation evidence (Phases 1-6) plus typed RefusalReason taxonomy.
  4. ADR-0025 — Rotor / Frame Admissibility. Adds the rotor-side check: when a region carries a frame_versor, the rotor's effect on the field state (versor_apply(V, F)) is additionally checked against the frame for positivity in CGA inner product. Lives in generate/rotor_admissibility.py — a sibling-but-separate module, not in algebra/versor.py (would couple algebra to pack state) and not in field/propagate.py (forbidden normalization site).
  5. ADR-0026 — Ranked Admissibility with Margin. Replaces static threshold tuning with a scale-invariant margin gate: admit iff the top blade-score exceeds the second by ≥ δ. Defaults to δ = 0.4. Falsifiable; characterization documented in docs/evals/phase5_stratified_findings.md.

Implementation evidence:

Phase Commit Tests
Phase 1 — pack-grounded fixtures 3940290 (rewrites)
Phase 2 — typed refusals + trace fold 310793a +10
Phase 3 — ranked-with-margin gate 639e107 +13
Phase 4 — rotor / frame admissibility 542e13d +11
Phase 5 — stratified mechanism-isolation b664984 +20
Phase 6 — comparative demo vs baseline a076506 +17
CLI surface (suite aliases + core demo) 36aad75 +14

Runtime contracts for the chain are pinned in docs/runtime_contracts.md (Refusal contract, Margin contract, Rotor admissibility contract sections).


Pack-Layer chain — ADR-0027 through ADR-0045

ADR-0027 through ADR-0045 form the second coherent chain in the project: a load-bearing three-tier pack architecture (identity / safety / ethics) with deterministic remediation, full-stream audit, machine-readable telemetry, an operator-facing CLI readout, and an investor-facing walkthrough. Read in order:

Group ADRs What it adds
Identity ADR-0027 / ADR-0028 Identity manifold loads from a swappable JSON pack at composition time. Pack carries surface_preferences that visibly drive hedging and claim strength.
Identity surface refinements ADR-0030 / ADR-0031 Depth-language hedge; score-decomposition surface.
Safety ADR-0029 / ADR-0032 Five universal safety boundaries unioned into every runtime manifold; SafetyCheck registry-of-predicates surface (observational).
Ethics ADR-0033 / ADR-0034 Third pack tier — deployment commitments, swappable like identity but propositional like safety; EthicsCheck predicate surface.
Turn-loop wiring ADR-0035 Both checks auto-invoked at end of every turn; verdicts attached to ChatResponse and TurnEvent.
Remediation tiers ADR-0036 / ADR-0037 / ADR-0038 Safety-only typed refusal → per-commitment ethics refusal opt-in → hedge injection. Three tiers per ethics commitment: audit / hedge / refuse.
Audit completeness ADR-0039 TurnVerdicts bundle + stub-path TurnEvent emission + refusal_emitted / hedge_injected flags. rt.turn_log covers every turn.
Machine + operator surfaces ADR-0040 / ADR-0041 Structured JSONL sink with redact-by-default trust boundary; FanOutSink composer; core chat --show-verdicts operator readout.
Demo ADR-0042 core demo audit-tour — four-scene investor-facing walkthrough; test-gated all_claims_supported flag.
Phase-2 measurements ADR-0043 Pack-driven identity-divergence + refusal-calibration runners convert load-bearing claims into CI-enforced numbers across the three ratified packs; combined report at evals/results/phase2_pack_measurements.json.
Worked-example domain pack ADR-0044 medical_clinical_ethics_v1 — six commitments across all three remediation tiers (refuse / hedge / audit); ratified end-to-end through scripts/ratify_ethics_pack.py; composes into the runtime manifold alongside the universal safety floor.
Long-context comparison ADR-0045 CORE exact needle-in-a-haystack measurement at N ∈ {100, 1k, 10k, 100k} paired with frozen transformer baselines (Claude 2.1, GPT-4 Turbo 128k, Gemini 1.5 Pro, RULER); recall_pct=100 for CORE by construction.

Three sibling pack types compose into every runtime manifold:

identity.boundary_ids  safety.boundary_ids  ethics.commitment_ids → manifold.boundary_ids

Per-commitment ethics policy lives in two opt-in lists on the ethics pack: refusal_commitments (hard stop) and hedge_commitments (soft prepend), mutually exclusive at load time. Safety is always in scope for refusal; the floor never moves.

Verification surface:

Layer Tests Live demo
Identity packs tests/test_identity_packs.py, tests/test_identity_surface_divergence.py core demo audit-tour Scene 1
Safety pack + refusal tests/test_safety_pack.py, tests/test_safety_check.py, tests/test_safety_refusal.py core demo audit-tour Scene 2
Ethics pack + opt-ins tests/test_ethics_packs.py, tests/test_ethics_check.py, tests/test_ethics_refusal_opt_in.py, tests/test_hedge_injection.py core demo audit-tour Scene 3
Turn-loop verdicts + bundle tests/test_turn_loop_verdicts.py, tests/test_turn_verdicts_bundle.py core chat --show-verdicts
Telemetry sink tests/test_telemetry_sink.py, tests/test_telemetry_fanout_and_summary.py core demo audit-tour Scene 4
Audit tour gate tests/test_audit_tour.py — asserts all_claims_supported core demo audit-tour

Pillar 1 → 2 → 3 coupling — ADR-0046 / ADR-0047

ADR-0046 extends the ADR-0022 → ADR-0026 forward-semantic-control chain by giving the AdmissibilityRegion a new, geometry-derived source: the PropositionGraph.

The graph was previously built after generate() ran, from the walk's nearest-node results — a post-hoc descriptor of what the field had already produced. ADR-0046 converts each graph's named-node versors into an AdmissibilityRegion before generate() is called, via the exact CGA top-k neighbourhood. The walk is now constrained by the proposition's geometric meaning rather than described by it after the fact.

geometry (CGA versor neighbourhood)
  → structure (PropositionGraph nodes)
    → propagation (AdmissibilityRegion fed to generate())

Three industry-facing demos under evals/industry_demos/ carry the falsifiable claims for this coupling. The exact-recall-at-scale claim remains under ADR-0045 / evals/long_context/, where it is measured on the real vault path and not duplicated under a weaker construction.

Layer Tests Live demo
Forward graph constraint (primitive) tests/test_graph_constraint.py — 8 tests python -m evals.industry_demos.demo_01_forward_constraint
Forward graph constraint (live wiring) tests/test_forward_graph_constraint_wiring.py — 5 tests RuntimeConfig(forward_graph_constraint=True) then core eval cognition
Geometry-driven identity tests/test_identity_packs.py, tests/test_identity_surface_divergence.py python -m evals.industry_demos.demo_02_geometry_drives_identity
Architectural determinism tests/test_telemetry_sink.py, tests/test_telemetry_fanout_and_summary.py python -m evals.industry_demos.demo_03_deterministic_audit

ADR-0047 lands the wire-up behind an opt-in RuntimeConfig flag. The characterisation it carries (A/B on the public cognition split) shows the wiring is correct and safe but does not move surface_groundedness or term_capture_rate on this lane — isolating the next load-bearing pull to the realizer / surface-assembly path rather than to propagation.


Session Logs

Session logs record the decisions and rationale from individual working sessions. They are not ADRs — they are the narrative record that informed the ADRs.

Date File
2026-05-12 SESSION-2026-05-12.md
2026-05-12 (addendum) SESSION-2026-05-12-b.md
2026-05-12 (language packs) SESSION-2026-05-12-language-packs-addendum.md
2026-05-13 SESSION-2026-05-13.md