core/docs/decisions/ADR-0073a-anchor-lens-content-phase.md
Shay 2dd50b8dc4 feat(packs): ADR-0073a — anchor lens L1.1 content phase
Umbrella ADR-0073 ratified (Accepted); L1.1 content phase
(ADR-0073a) landed.  Pure pack enrichment — no runtime code, no
composer change, no test of behaviour.  Substrate prerequisite for
the L1.2–L1.4 phases.

Greek additions (grc_logos_cognition_v1, 20 → 29 entries)
  Knowledge family (English collapses to `knowledge`):
    - ἐπιστήμη  logos.episteme.systematic_knowledge
    - σύνεσις   logos.synesis.insight
    (γνῶσις at grc-core-cog-007 unchanged — treated as the
     experiential variant by the L1.3 lens config)
  Love family (English collapses to `love`):
    - ἀγάπη   logos.agape.covenant_love
    - φιλία   logos.philia.companion_love
    - ἔρως    logos.eros.passionate_love
    - στοργή  logos.storge.familial_love
  Time family (English collapses to `time`):
    - αἰών    logos.aion.age_era
    - χρόνος  logos.chronos.clock_time
    - καιρός  logos.kairos.opportune_moment

Hebrew additions (he_core_cognition_v1, 20 → 23 entries)
  - חסד    logos.chesed.covenant_loyalty
  - שלום   logos.shalom.wholeness_peace
  - צδק    logos.tzedek.right_order

Alignment.jsonl on both cognition-tier packs (previously only the
micro packs carried alignment)
  - grc_logos_cognition_v1/alignment.jsonl — 20 edges: three-way core
    dyads (word / truth / light / life / beginning / wisdom),
    knowledge-family → en collapse, ἀγάπη↔חסד covenant-love pairing
    (weight 0.86, Septuagintal), `cross_lang.no_english_collapse`
    annotations for love + time families pointing at
    `en-collapse-<family>` sentinel ids (weight 0.0).
  - he_core_cognition_v1/alignment.jsonl — 7 edges: core dyads to en,
    חסד↔ἀγάπη covenant pairing, no-english-collapse annotations for
    חסד / שלום / צδק.

Manifest checksums refreshed per CLAUDE.md doctrine
  - grc_logos_cognition_v1: b45bcf581cee… → 0f9436675707…
  - he_core_cognition_v1:   dee1e8c6ad9a… → 22145d008185…

Design decisions
  - Existing 20 + 20 lemma atoms untouched — downstream tests /
    composers / teaching chains keep referencing the same atoms.
    Only new lemmas carry the distinguishing atoms.
  - `cross_lang.no_english_collapse` edges are metadata not data
    (sentinel target ids, weight 0.0).  Their purpose is letting the
    alignment graph answer "does English split this family?" without
    forcing an artificial English lemma.
  - Every new entry carries `adr-0073a:hand_authored:2026-05-19` in
    its `provenance_ids` so future audits can find the L1.1 cohort
    deterministically.

Verification
  - python -m language_packs verify grc_logos_cognition_v1   → OK
  - python -m language_packs verify he_core_cognition_v1     → OK
  - python -m language_packs compile <both>                  → 29 / 23
    manifold points; spot-check confirms καιρός / צδק resolve.
  - python -m core.cli eval cognition                        → public
    100 / 100 / 91.7 / 100 byte-identical (new lemmas sit on disk but
    no composer references them yet).
  - python -m core.cli test --suite cognition                → 120/1 pass
  - python -m core.cli test --suite smoke                    → 67/0 pass
  - python -m core.cli test --suite full                     → 2632 passed
    / 4 skipped / 1 pre-existing failure (test_all_preamble_explains_
    combined_run rename drift, unrelated).
  - core demo register-tour                                  → exit 0
    (R5 seam still holds; L1.1 doesn't touch register pathway).

What L1.1 deliberately does NOT do
  - No AnchorLens class (that's L1.2 / ADR-0073b).
  - No composer wiring (L1.3 / ADR-0073c).
  - No --anchor-lens CLI flag or demo (L1.4 / ADR-0073d).
  - No teaching corpus in non-English (post-L1).
2026-05-19 19:30:20 -07:00

6.5 KiB
Raw Permalink Blame History

ADR-0073a — Anchor lens content phase (Plan Phase L1.1)

Status: Accepted Date: 2026-05-19 Ratified: 2026-05-19 Author: Shay Phase: Plan Phase L1.1 (content prerequisites — pack enrichment, no code) Parent: ADR-0073 (umbrella anchor-lens architecture)


Context

ADR-0073 identifies three honest gaps blocking anchor-lens implementation, the first being distinction-bearing breadth absent from cognition-tier packs. Greek's interesting move is splitting one English concept into multiple lemmas; the cognition packs carry one lemma per concept. Without those distinctions on disk, no later phase (L1.2L1.4) can render "knowing-as-experience" vs "knowing-as-system" deterministically — the substrate atoms simply do not exist to pivot on.

L1.1 fixes this with pure content enrichment. No runtime code, no composer, no realizer, no test of behaviour — only:

  • lexicon.jsonl additions
  • matching morphology.jsonl additions
  • alignment.jsonl creation on the cognition-tier packs (currently only the micro packs carry alignment)
  • manifest.json checksum refresh + re-verification

This is the highest-leverage step in the L1 sequence because it unblocks every later phase without code risk.


Decision

Greek additions (grc_logos_cognition_v1)

Nine new lemmas covering three distinction-bearing families that English collapses:

Knowledge family (English collapses to knowledge):

entry_id lemma distinguishing atom
grc-core-cog-021 ἐπιστήμη logos.episteme.systematic_knowledge
grc-core-cog-022 σύνεσις logos.synesis.insight

(γνῶσις at grc-core-cog-007 retains logos.epignosis.knowledge — the L1.3 lens reads it as the experiential variant.)

Love family (English collapses to love):

entry_id lemma distinguishing atom
grc-core-cog-023 ἀγάπη logos.agape.covenant_love
grc-core-cog-024 φιλία logos.philia.companion_love
grc-core-cog-025 ἔρως logos.eros.passionate_love
grc-core-cog-026 στοργή logos.storge.familial_love

Time family (English collapses to time):

entry_id lemma distinguishing atom
grc-core-cog-027 αἰών logos.aion.age_era
grc-core-cog-028 χρόνος logos.chronos.clock_time
grc-core-cog-029 καιρός logos.kairos.opportune_moment

Hebrew additions (he_core_cognition_v1)

Three new lemmas from Hebrew's load-bearing covenant / wholeness / righteousness distinctions:

entry_id lemma distinguishing atom
he-core-cog-021 חסד logos.chesed.covenant_loyalty
he-core-cog-022 שלום logos.shalom.wholeness_peace
he-core-cog-023 צדק logos.tzedek.right_order

Alignment.jsonl on both cognition-tier packs

The cognition-tier packs (grc_logos_cognition_v1, he_core_cognition_v1) gain a companion alignment.jsonl mirroring the micro packs' format. Edges fall in three categories:

  • cross_lang.<atom> — three-way alignment on the shared logos.* atoms where all three substrates have the lemma (word / truth / light / life / beginning / pneuma / sophia).
  • cross_lang.<family> — within-family alignment where two substrates have distinguishing lemmas but the third collapses or lacks the family (e.g. ἀγάπη ↔ חסד on the covenant-love axis; English has no covenant-love lemma).
  • cross_lang.no_english_collapse — annotation edges marking families English does not split (love, time). These are metadata: target_id is en-collapse-<family>, a sentinel pointing at no real lexicon entry, with weight=0.0 and an evidence_ids list naming the collapsed English term.

Manifest checksum refresh

Per CLAUDE.md doctrine:

checksum = hashlib.sha256(Path(lexicon_path).read_bytes()).hexdigest()

grc_logos_cognition_v1/manifest.json and he_core_cognition_v1/manifest.json are updated with the new checksums of their post-enrichment lexicon.jsonl files. python -m language_packs verify <pack_id> is the canonical gate.


What L1.1 deliberately does NOT do

  • No new AnchorLens class. That's L1.2.
  • No composer wiring. Composers continue to render English by default.
  • No --anchor-lens CLI flag. That's L1.4.
  • No teaching corpus in non-English. Teaching chains in grc/he are a later phase (L2+).
  • No modification of existing lemma atoms. The 20 grc + 20 he existing entries are untouched so downstream tests / composers / teaching chains keep referencing the same atoms they always have. Only new lemmas carry the distinguishing atoms.

These deferrals are deliberate: L1.1 keeps the diff to pure JSONL/JSON, so the substrate is ratified independently of any runtime change.


Trust boundary

L1.1 touches user-influenceable content (pack files) but the gate remains the same as for every other language pack: manifest checksum + python -m language_packs verify. The new entries are authored by hand here, not ingested from an external source.

No dynamic imports, no filesystem traversal, no shell passthrough.


Verification

python -m language_packs verify grc_logos_cognition_v1   → OK
python -m language_packs verify he_core_cognition_v1     → OK
python -m language_packs list                            → both packs listed,
                                                            entry counts 29 / 23
python -m core.cli test --suite packs -q                 → green
python -m core.cli eval cognition                        → public 100/100/91.7/100
                                                            (byte-identical;
                                                             new lemmas not yet
                                                             consumed by any
                                                             composer)

The cognition eval byte-identity holds because the new lemmas sit on disk but no composer references them yet — composers will start consuming them in L1.3.


What this unlocks

L1.2 (AnchorLens class + loader + default_unanchored_v1 sentinel) can now start. Without L1.1's substrate, L1.2 would have nothing to lens onto: the unanchored-vs-anchored distinction would be academic because both branches would render the same single lemma. L1.1 makes anchor lens possible; the later phases make it operator-visible.