Skip to content
Merged
Show file tree
Hide file tree
Changes from 42 commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
c0c1a69
board: publication-limit wording + board-entry rule
claude Jul 26, 2026
0b9717c
plan: rosetta-codebook-convergence v1 (Bible Rosetta SoA + qualia agr…
claude Jul 26, 2026
4f16d2e
plan: D-RCC-1 demoted kill-gate -> calibrator (per-item anchors are t…
claude Jul 26, 2026
7155433
plan: worst case is a confidently wrong anchor (Erbsuende>Tod) — sour…
claude Jul 26, 2026
14f8e28
plan: translation-error search IS CHAODA — outlier-vs-fork by cluster…
claude Jul 26, 2026
3dce800
plan: WordNet synsets as language-neutral CHAODA coordinates; tier de…
claude Jul 26, 2026
2f48982
plan: research posture — licences documented in place, gate only the …
claude Jul 26, 2026
a64987b
D-RCC-1 v1: rosetta probe (4 PD lanes, one frozen key) + board
claude Jul 26, 2026
8858bfb
gitignore: keep wordnet generators, ignore wordnet data
claude Jul 26, 2026
91b9db0
WIP: rosetta versification-map + wordnet tier-delta generators (agent…
claude Jul 26, 2026
6fdf123
D-RCC-5 taxonomic arm + versification map: two findings (wordnet rail…
claude Jul 26, 2026
95a8bb7
gitignore: keep coca generators, ignore coca data
claude Jul 26, 2026
0ea2631
D-RCC-1 v2: split survives normalisation (48.9->43.0%), swallow ancho…
claude Jul 26, 2026
9f383d2
WIP: lane codebooks generator (agent in flight)
claude Jul 26, 2026
a92b553
lane codebooks: 4 lanes, morphology ordering as sanity check; closed_…
claude Jul 26, 2026
c76e407
wordnet rail v2: measured 12.76% sense-selection error (33.84% verbs)…
claude Jul 26, 2026
861b0c1
COCA x WordNet: coverage-inversion claim REFUTED; router keys on meas…
claude Jul 26, 2026
0efa227
audit: standing wave / rung ladder / 34 recipes all shipped, mutually…
claude Jul 26, 2026
679a63a
wire rung stratification: pass -> rung -> recipe admissibility (contr…
claude Jul 26, 2026
db8c867
peripheral-dissent guard: the rung prune must not become a blind spot
claude Jul 26, 2026
cd330cb
saturation -> passive quorum mantissa (hindsight-blind by signature);…
claude Jul 26, 2026
6c2a9ca
temporal axis: RevisionTrajectory (belief-state traversal) + churn ma…
claude Jul 26, 2026
8c14a37
greek lane acquired (Tischendorf PD); wordnet rail exact-arity guard …
claude Jul 26, 2026
949cf80
fix: multipass wave aborted before the budget that resolves the chain…
claude Jul 26, 2026
6e0e8d3
closed-class detection: negative result (dispersion loses to rank<=15…
claude Jul 26, 2026
a1dda62
plan: Greek-edition blocker discharged; D-RCC-3 in flight + closed-cl…
claude Jul 26, 2026
bf6eefd
board: D-RCC-9 Greek source lane shipped; D-RCC-3 in flight; blocker …
claude Jul 26, 2026
e3df46d
CLAUDE.md: falsifiability rule — an assertion implied by the code it …
claude Jul 26, 2026
107eaa8
eigenvalue sweep: 6/12 prunes blind, M1 critical; vacuous-assertion h…
claude Jul 26, 2026
3d00d26
WIP: D-RCC-3 alignment + CHAODA trajectory tag-file (agents in flight)
claude Jul 26, 2026
4d01f57
CHAODA relative-density over a proven trajectory metric; escalation c…
claude Jul 26, 2026
1dd2e99
D-RCC-3 aligner shipped: tongue split reproduced, Dice not better tha…
claude Jul 26, 2026
26b4f68
split ChainResolution::escalated into out_of_horizon/budget_exhausted…
claude Jul 26, 2026
3c332ca
temporal periphery: superseded beliefs enumerable/sampled/escalation-…
claude Jul 26, 2026
1c0893f
wave 3: CascadeRejects (recall@10=0.50, heel_threshold inert), vacuou…
claude Jul 26, 2026
0dc5818
lemma key: coverage up but tongue anchor broke — -chen rule splits sp…
claude Jul 26, 2026
70fe1be
ruling: i4-16D qualia are CMYK-native; observed statistics need a sep…
claude Jul 26, 2026
04966a1
board: separation is shipped (wire, don't invent); D-RCC-8 first Rele…
claude Jul 26, 2026
59a4e3a
release: kjv is GPL not PD — split regimes, add missing reports + PD …
claude Jul 26, 2026
b8de41a
plateau: move codebook/bake generators to claude/rosetta-codebook-bak…
claude Jul 26, 2026
71caab8
gitignore: branch-local ignore for the bake generators (tracked on th…
claude Jul 26, 2026
2799b4b
external review adjudicated: diagnosed wave (EscalateReason), coverag…
claude Jul 26, 2026
15d0870
foresight test shipped + meta-awareness adjudicated + mutation wave-1…
claude Jul 26, 2026
31a2dc9
fmt: deepnsm-v2 wave.rs (workspace-excluded crate CI checks explicitly)
claude Jul 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
673 changes: 660 additions & 13 deletions .claude/board/EPIPHANIES.md

Large diffs are not rendered by default.

19 changes: 19 additions & 0 deletions .claude/board/INTEGRATION_PLANS.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,22 @@
## 2026-07-26 — rosetta-codebook-convergence v1 — PROPOSED (D-RCC-1 calibrator runnable today) — main thread

**Plan:** `.claude/plans/rosetta-codebook-convergence-v1.md`
The Bible Rosetta SoA + multi-codebook qualia agreement: frozen verse address
= external key ⇒ all translations are LANES on one row (~31k rows, in-memory);
language = lane discriminant resolved from classid (no LanguageDto — the
witness facet is the shipped `ClauseSignature`); codebooks never merge — the
qualia of a word is a VECTOR OF AGREEMENTS (rank stats, i4, support-masked,
POS-routed hydration); sense resolution = Schnittpunkt of cross-language
sense-set intersection (extensional) × CLAM/HHTL cascade descent
(intensional); cross-lane constraint propagation to fixpoint (facts cross,
form never; propagated ≠ attested); Czech/Kralická as the aspect-marked
lane; bake as PD-texts-only Release with NC treebanks as local oracle
(libtesseract pattern). Deliverables D-RCC-1 (lanes-to-singleton
CALIBRATOR — per-item anchors are the value, blocks nothing; operator-corrected
from a kill gate) + D-RCC-2..8. Absorbs task-board W4/W7/W15/W17/W18;
un-gates W11 via D-RCC-4. Blockers §4: per-treebank licence re-verify,
Kralická edition provenance, versification map source, Greek PD edition.

## 2026-07-23 — scientific-kg-substrate v1 — PROPOSED (scoping; outward-facing crawl BLOCKED) — main thread

**Plan:** `.claude/plans/scientific-kg-substrate-v1.md`
Expand Down
4 changes: 2 additions & 2 deletions .claude/board/PR_ARC_INVENTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -405,7 +405,7 @@

**Added:** `.claude/knowledge/ast-as-partof-isa-address.md` corrections — Status CONJECTURE → PARTIALLY MEASURED (carrier #613/#614/#615 shipped AND the rank-minter brick-3 has RUN: `ruff_csharp_spo` harvest → `ruff_spo_address::{mint, mint_factored}` → `medcare_probe`); "The missing brick" → "The brick that ran"; Next-bricks checkmarked with the real open bricks (reroute *execution* in the mint pipeline, probe re-run blocked on harvest input data, classid Canon:Custom half-order, LSP serve end). New `.claude/knowledge/do-arm-triage-3-bucket.md` — the operator's 3-bucket DO-residue triage (fuzzy/order-varying → canonicalize-first; anticipated standard DO → ontologically-shaped landing zone as ONE DTO adapter + codebook swiss-knife `open`/`filter`/`reorder`/`apply_mask`; truly random → hand-port, recurrences graduate to bucket 2), refining OGAR's 85/15 split; records the C#/C++ DO-extractor gap (`ruff_python_dto_check` is Python-only). Lock: ogar pin `597ecb1 → a0c7936` (post-OGAR-#146). EPIPHANIES `E-BRICK3-RAN-TRUNCATION-DISALLOWED` (same-commit hygiene).

**Locked:** the naive fixed-width 6-tier `(part_of:is_a)` mint is FALSIFIED at real-corpus scale (mass truncation + god-class collisions); `mint_factored` (base-255 positional path + `is_a`-from-`inherits`-only) is the corrected minter. **Truncation is DISALLOWED by policy** — bucket overflow (256-cap / 6-tier depth) is a separation-of-concerns REROUTE trigger (split the god-class or escalate a cascade level; never truncate, never field-widen — the OGAR `256-cap-is-a-lint` law #130/#140 made operational). Division of labour: `mint_factored` = addressing precision; overflow→SoC-reroute = structure. Overflow *classification* SHIPPED upstream as `ruff_spo_address::soc` (`soc_findings` → `SocVerdict`, `law_holds`; class-conditioned cascade shapes Rails `6×2` / other `4×3` / canonical GUID `3×4`, all `G·D = 12`). **Privacy split:** proprietary corpus numbers live ONLY in private MedCare-rs `.claude/archive/ruff-spo-address-medcare-probe/`; the lance-graph tree carries the design consequence, zero corpus identifiers.
**Locked:** the naive fixed-width 6-tier `(part_of:is_a)` mint is FALSIFIED at real-corpus scale (mass truncation + god-class collisions); `mint_factored` (base-255 positional path + `is_a`-from-`inherits`-only) is the corrected minter. **Truncation is DISALLOWED by policy** — bucket overflow (256-cap / 6-tier depth) is a separation-of-concerns REROUTE trigger (split the god-class or escalate a cascade level; never truncate, never field-widen — the OGAR `256-cap-is-a-lint` law #130/#140 made operational). Division of labour: `mint_factored` = addressing precision; overflow→SoC-reroute = structure. Overflow *classification* SHIPPED upstream as `ruff_spo_address::soc` (`soc_findings` → `SocVerdict`, `law_holds`; class-conditioned cascade shapes Rails `6×2` / other `4×3` / canonical GUID `3×4`, all `G·D = 12`). **Privacy split:** the proprietary corpus numbers are recorded nowhere in this repo; the lance-graph tree carries the design consequence, zero corpus identifiers.

**Deferred:** overflow-reroute *execution* inside the mint pipeline (the lint flags, a human splits); `medcare_probe` re-run on the current minter (needs corpus/NDJSON access); C#/C++ DO harvester (bucket-2 landing-zone extractor); classid Canon:Custom half-order (superseded mid-arc by the #627 canon:custom flip plan).

Expand All @@ -415,7 +415,7 @@

**Confidence (2026-07-02):** HIGH for the knowledge content (brick-3 findings mirror the private archive's measured record; re-fetch diff against ruff `b459ec3` confirmed `lib.rs` byte-identical + `soc.rs` as the movement). Lock verified: contract `ogar_codebook` 8/8 + `lance-graph-ogar` standalone green at `a0c7936` (compile-time COUNT_FUSE holds); consumer medcare-bridge (`--features ontology`) compiles clean. NOTE: merged BEFORE #628's P1 flip — the ast-address doc's classid examples predate `ClassidOrder::CanonHigh`; interpret per the flip (canon `domain:appid` = HIGH u16).

**Cross-ref:** #616/#617 (the ast-address doc lineage); #623 (OGAR sink-in plan); OGAR #145/#146 (OSINT mint + zero-rows ruling); ruff `b459ec3` (`ruff_spo_address` + `soc`); `E-CODEBOOK-MINT-IS-A-CROSS-REPO-ARC`; MedCare-rs private archive (RESTORE-STATUS re-fetch log).
**Cross-ref:** #616/#617 (the ast-address doc lineage); #623 (OGAR sink-in plan); OGAR #145/#146 (OSINT mint + zero-rows ruling); ruff `b459ec3` (`ruff_spo_address` + `soc`); `E-CODEBOOK-MINT-IS-A-CROSS-REPO-ARC`.

**Correction (2026-07-02, from the OGAR+ruff review fan-out):** the Locked line's "`mint_factored` … is the corrected minter" overstates its location — on public ruff main only `mint` + `soc.rs` exist; `mint_factored`+`RadixCodebook` are stranded on branch `claude/medcare-ruff-csharp-sync-4iahey` (`505fdc4`), which predates and LACKS `soc.rs`. The corrected-minter state exists only as the union of two diverged branches. See `E-BRICK3-CORRECTION-MINT-FACTORED-IS-SPLIT-BRAIN`.

Expand Down
16 changes: 16 additions & 0 deletions .claude/board/STATUS_BOARD.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
## rosetta-codebook-convergence-v1 — Bible Rosetta SoA + qualia agreement (ACTIVE)

Plan: `.claude/plans/rosetta-codebook-convergence-v1.md` (operator convergence arc, 3 same-day corrections baked). Absorbs W4/W15/W17/W18.

| D-id | Deliverable | Repo | Status | Evidence |
|---|---|---|---|---|
| D-RCC-1 | lanes-to-singleton probe (calibrator) | lance-graph | **v1 RUN** (`build_rosetta_probe.py`; 4 PD lanes kjv/luther1545/elberfelder1905/bkr; census 31,103 union / 31,097 common; swallow+grape receipts incl. LIVE Ps-84 versification-offset + two-lane rescue; en→de split census 48.9% of 3,071 mid-freq words; `tongue→Zunge/Sprache` real sense split) | `E-RCC-1-FOUR-LANES-ONE-KEY-1`; report in local `out/` |
| D-RCC-2 | Rosetta SoA shape (contract) | lance-graph | Queued | plan §2 |
| D-RCC-3 | corpus-derived word alignment | lance-graph | **In flight** (`build_alignment.py`; PMI v0 proven inside D-RCC-1; also the successor to the failed monolingual closed-class detector — labels TRANSFER through alignment) | plan §2 |
| D-RCC-4 | qualia-agreement vector (POS-routed) | lance-graph | Queued — un-gates W11 | plan §2 |
| D-RCC-5 | CLAM/WordNet probe + CHAODA lane-anomaly read | lance-graph | Queued (taxonomic arm runnable now) | plan §2 |
| D-RCC-6 | cross-lane constraint propagation to fixpoint | lance-graph | Queued | plan §2 |
| D-RCC-7 | Czech lane | lance-graph | **Data landed** (bkr lane fetched + in census) | plan §2 |
| D-RCC-9 | **Greek SOURCE lane (new)** | lance-graph | **Shipped** — Tischendorf 8th ed., stated `Public Domain`; TR + WH are both CC BY-NC-SA (the age-implies-PD assumption is false). 27 books / 7,895 verses; 62 KJV verses `TextAbsent`. Unblocks *source outranks translation*. | `E-PD-GREEK-LANE-ACQUIRED-TISCHENDORF-1`; `fetch_greek_lane.py` |
| D-RCC-8 | Rosetta package Release | lance-graph | Licence blocker §4.4 **DISCHARGED** (PD Greek acquired); remaining: per-treebank re-verify, Kralická edition provenance, versification map source | plan §4 |

## dialectic-engine-v1 — the reasoning cathedral (ACTIVE)

Plan: `.claude/plans/dialectic-engine-v1.md` (six operator pillars + S1-S12 synthesis). V0-V1 SHIPPED; V2-V5 queued.
Expand Down
47 changes: 47 additions & 0 deletions .claude/board/TECH_DEBT.md
Original file line number Diff line number Diff line change
Expand Up @@ -3189,3 +3189,50 @@ bijection needs re-seeding. Pair: D-IDENTITY-4.
- **TD-CI-EXCLUDED-FUSE (F5):** main's CI never compiles the workspace-`exclude`d `lance-graph-ogar`, so its compile-time `COUNT_FUSE` fires only in *consumers'* builds (medcare hit E0080 twice). Fix: one CI job `cargo check`-ing the excluded crate against OGAR main. Effort S.
- **TD-OGAR-LOCK-UNDECIDED (F3):** `lance-graph-ogar/Cargo.lock` is gitignored → fresh checkouts build the fuse against OGAR HEAD (floating canary) while the workspace lock pins. Decide canary-vs-pin; document in one sentence. Effort S.
- **TD-BOARD-PREPEND-CONFLICTS (F6):** at fleet cadence the append-only board files (EPIPHANIES/LATEST_STATE/PR_ARC) are the only recurring rebase-conflict cost (~30-60 min/day/session). Per-entry board files + generated index make the conflict structurally impossible. Council-sized; forwarded to the V3/coordination session.

## TD-COCA-LEXICON-RANK-UNRELIABLE-AT-HEAD (2026-07-26)

`crates/lance-graph-planner/examples/data/coca/lexicon.tsv` (20,004 rows) is a
PRE-FILTERED list, not raw COCA rank 1..N, and its `rank` column is wrong in the
high-frequency band: `the` = 5645 (pos `i`), `and` = 3584 (pos `r`/adverb — also
a wrong tag), while `of` = 5. Pure function words `a, I, you, he, she, they, not,
what, which` are absent entirely.

Impact: any consumer treating `rank` as a frequency proxy gets a scrambled head of
the distribution; any coverage/decile analysis silently excludes function words.
Surfaced by `E-COVERAGE-INVERSION-CLAIM-REFUTED-1` (the decile analysis is sound
for content vocabulary only, for this reason).

Fix options: (a) re-derive rank from a real COCA frequency list; (b) rename the
column `list_order` and add a MANIFEST note that it is not a frequency rank;
(c) supersede with the verse-attested lane codebooks (`rosetta/build_lane_codebooks.py`),
whose `freq`/`rank`/`dispersion` ARE corpus-measured — at the cost of Bible-domain bias.

## TD-COCA-LEXICON-POS-UNUSABLE-FOR-FUNCTION-WORDS (2026-07-26)

Extends `TD-COCA-LEXICON-RANK-UNRELIABLE-AT-HEAD`: the same file's **`pos`
column is wrong for exactly the words a POS column is most needed for.**
Spot-checked on the main thread:

| word | recorded pos | correct |
|---|---|---|
| `the` | `i` (preposition) | determiner |
| `and` | `r` (adverb) | coordinating conjunction |
| `it` | `n` (**noun**) | pronoun |
| `that` | `r` (adverb) | determiner/conjunction/pronoun |
| `of` | `i` (preposition) | ✓ correct |
| `a` | ABSENT | determiner |

3 of 5 function words checked are mis-tagged and 1 is missing; the one
correct tag is the one that is unambiguously a preposition.

Impact: any consumer treating this column as POS ground truth for
closed-class vocabulary is reading noise. Surfaced by the closed-class
transfer work (`E-BOTH-CLOSED-CLASS-METHODS-LOSE-TO-RANK-150-1`), which had
to substitute a curated word list. **Do not use `coca/lexicon.tsv` `pos` for
function words.** For open-class content words it was not audited — unknown,
not vindicated.

Fix options: (a) re-derive POS from a real tagged corpus (the German lane
already uses UD-derived tags and they are sound); (b) rename the column to
mark it unreliable; (c) supersede with UD-derived English tags.
Comment on lines +3192 to +3238

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Board-hygiene violation: new entries appended at the end instead of prepended.

These two 2026-07-26 entries land after the existing 2026-07-02 TD-FLEET-CADENCE entry, breaking newest-first ordering.

Based on learnings, "For governance files in .claude/board/*.md, follow the Mandatory Board-Hygiene Rule defined in CLAUDE.md: treat these files as append-only ledgers that are ordered newest-first... prepend new entries rather than appending at the end."

📋 Fix: move the new entries to the top of the file

Relocate the TD-COCA-LEXICON-RANK-UNRELIABLE-AT-HEAD and TD-COCA-LEXICON-POS-UNUSABLE-FOR-FUNCTION-WORDS sections above the earlier TD-FLEET-CADENCE entry (or to the very top of the document, per convention), leaving all prior entries in their original order.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/board/TECH_DEBT.md around lines 3192 - 3238, Move the
TD-COCA-LEXICON-RANK-UNRELIABLE-AT-HEAD and
TD-COCA-LEXICON-POS-UNUSABLE-FOR-FUNCTION-WORDS sections to the top of
.claude/board/TECH_DEBT.md, before TD-FLEET-CADENCE, while preserving the
existing order and content of all prior entries.

Source: Learnings

117 changes: 117 additions & 0 deletions .claude/board/exec-runs/aligner-lemma-key.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
Task #34 — shared lemma key for build_alignment.py (D-RCC-3 aligner)
Agent: Sonnet grindwork exec. File owned/touched: crates/lance-graph-planner/examples/data/rosetta/build_alignment.py ONLY.
No other rosetta/*.py touched. No commit/push performed (per brief).

WHAT WAS BUILT
- Added `normalize_de`/`DE_SUFFIXES` (copied with attribution from
build_rosetta_probe.py, not imported — that module is a separate
deliverable another agent owns concurrently) and a NEW `normalize_en`/
no-EN_SUFFIXES-table-needed (hand-written suffix cascade: -ies->y, -eth/
-est/-ing, -ed, -es (orthography-aware: sibilant stem -> full -es strip,
else keep the silent e and strip only -s), plain -s), both min-stem-len=4
guarded, both explicitly NOT lemmatisers (no dict, no irregulars, no
ablaut/umlaut, no compounds).
- New CLI flag `--lemma-key`, default OFF. Verified: with or without the
flag, `alignment_en-de.tsv` and `alignment_en-el.tsv` (the files the
closed_class_transfer.py consumer reads) are byte-identical (md5 diff
empty both before and after the normalizer bugfix). When the flag IS
passed, an ADDITIONAL `alignment_<pair>_lemmakey.tsv` is written (new
file, same 5 columns, nothing renamed/reordered) and the report gains a
"Lemma-key pass" section per pair.
- Fixed a bug I introduced myself before reporting: initial normalize_en
stripped "grapes" -> "grap" (wrong; -es branch always chopped 2 chars).
Fixed with an orthography-aware branch (sibilant-final stem -> chop -es;
else chop only trailing -s so grapes->grape, tongues->tongue). Verified
with unit spot-checks before regenerating the real report.
- Data for real run: bible_{kjv,luther1545,tischendorf}.json are
gitignored + were not present in the fresh checkout; found cached copies
in this session's scratchpad (left over from the prior D-RCC-3 session)
and copied them into the rosetta dir (also gitignored, `git status`
confirms zero untracked noise) to run the REAL aligner end-to-end rather
than reasoning about it unverified.

MEASURED RESULTS (real KJV/Luther1545/Tischendorf corpus, MIN_COOC=5, topk=3)

en-de (12,266 src tokens, 28,636 shared verses):
overall coverage PMI: raw 39.2% (4806/12266) -> lemma-key 43.0% (4103/9545)
vocab: 12266 distinct src tokens (raw) -> 9545 (lemma-key), i.e. folding
did fire (2721 keys merged away).
band coverage (own-vocab, raw -> lemma-key):
hapax(1): 3872 tok, 0.0% -> 2845 tok, 0.0% (hard floor unmoved)
rare(2-4): 3286 tok, 0.0% -> 2415 tok, 0.0% (hard floor unmoved)
low(5-19): 2943 tok, 89.7% -> 2285 tok, 92.0%
mid(20-99): 1518 tok, 100% -> 1335 tok, 100%
high(100+): 647 tok, 100% -> 665 tok, 100%
LOW-BAND LIFT (direct flip measurement: raw-unaligned token, does its
normalised key become aligned?):
hapax: 3872 considered, 581 flipped = 15.0%
rare: 3286 considered, 866 flipped = 26.4%
low: 302 considered, 165 flipped = 54.6%
ALL THREE: 7460 considered, 1612 flipped = 21.6%
-> normalisation DOES lift low-frequency coverage via merging, and it is
quantified directly (not inferred from two independently-banded
tables): ~1 in 5 raw-unaligned hapax/rare/low tokens gains an aligned
target purely from folding onto a normalised key that already cleared
cooc>=5 elsewhere.

en-el (5,960 src tokens, 7,895 shared verses; NO German normalizer applies
here — Greek target side has no normalizer, English source side does):
overall coverage PMI: raw 30.7% (1831/5960) -> lemma-key 36.3% (1679/4620)
LOW-BAND LIFT: hapax 12.9%, rare 25.6%, low 36.9%, ALL THREE 20.4%
(independent corpus, same order of magnitude as en-de -- the lift is not
an en-de-specific artifact).

ANCHOR RECEIPTS — the falsifier, both ways (en-de pair)
grape:
raw (8 verses): die(cooc=5,.76); der(cooc=5,.54); und(cooc=8,.37) <- stopword noise
lemma (41 verses): herling(cooc=5,9.45); traub(cooc=14,9.09); beer(cooc=5,8.77)
-> YES, grape now finds trauben (traub, unripe-grape herling, beere/berry)
instead of stopwords. The predicted fix landed and is measured, not
asserted.
swallow:
raw (17 v): verschlingen(7,10.36); ihr(5,1.31); nicht(7,1.05)
lemma (41 v): verschlang(6,8.86); verschl(6,8.86); verschling(9,8.53)
-> also improved: all three lemma-key targets are the swallow-up verb
stem across its inflected forms, replacing 2 of 3 stopword hits.
vineyard:
raw (58 v): weinberges(7,8.95); weinberg(36,8.83); weingärtnern(7,8.75)
lemma (100 v): weinberg(97,8.08); jesreelit(5,7.48); weingärtn(10,7.02)
-> stays correct both ways (was never broken); coverage/verse-count
grows via merging plural forms.
tongue — THE REGRESSION-CHECK ANCHOR:
raw (96 v): zunge(57,8.08); zungen(14,6.78); sprache(7,6.44)
lemma (126 v): zung(88,7.63); lipp(8,5.00); schweig(5,4.79)
DID NOT SURVIVE: sprach(e)'s sense drops out of top-3 under lemma-key.
ROOT CAUSE (diagnosed, NOT tuned away): the borrowed DE_SUFFIXES
"chen" entry (meant for diminutives, e.g. Mädchen) spuriously matches
the tail of "sprachen" (spra+chen), folding plural "sprachen" -> "spra"
while singular "sprache" folds to "sprach" via the separate bare-"e"
suffix rule. Two forms of ONE word land on TWO different normalised
keys, so their evidence never merges, and both individually rank below
newly-boosted associates (lipp, schweig, falsch) that gained mass from
unrelated folding. This is a suffix-table collision in the REUSED
German table, not a bug in the new English-side logic. Per the brief's
explicit instruction, this was reported as-is and NOT hand-tuned to
make the anchor look green again.

SO: lemma-key is a real, measured net positive on coverage (+3.8pp en-de
overall, +5.6pp en-el overall, ~21% low-band flip rate both corpora,
grape/swallow both fixed) but is NOT unconditionally safe — the known-good
tongue regression anchor DOES break under it, root-caused to a specific
suffix-table collision, and documented in the module docstring, the
generated report's Limitations section, and this file rather than being
silently avoided.

IRON-RULE COMPLIANCE
- stdlib-only Python 3 (argparse/json/math/re/sys/collections/pathlib —
unchanged from before).
- No network access.
- Every threshold in force (MIN_COOC=5, DE_MIN_STEM_LEN=4, EN_MIN_STEM_LEN=4,
topk) is stated in the report.
- Primary TSV columns/filenames unchanged (verified via md5 before/after,
with and without the flag); the lemma-key TSV is a NEW file with the same
5-column schema, not a rename/reorder.
- Reported a regression rather than tuning it away (tongue/sprache).

FILES CHANGED: crates/lance-graph-planner/examples/data/rosetta/build_alignment.py only.
NOT COMMITTED. Orchestrator to review + commit/push.
Loading
Loading