Skip to content

Commit 583eb55

Browse files
committed
fix(gloss): Caesar full-text stragglers jamque + pleraque glossed (M-023j)
Full Bellum Gallicum I through the popup lemma path flagged 3 no-gloss lemmas. The M-023b dismissal was wrong for 2: the analysis lemma for iamque is 'jamque' (not jam) and for plerumque is 'pleraque' (not plerusque) — neither was in the artifact, so the popup rendered '—'. Only 'ide' was a true false-positive (idem resolves via the glossed idem lemma). Add core overrides jamque→'and now, and already' + pleraque→'the greater part, most, very many (neut. pl. of plerusque)' with golden rows (2067→2069), rebuild the artifact (34,413 lemmas / 450 KB). Lock the form→lemma→gloss path the data suite can't see in a new popup e2e test (idem/iamque/plerumque all gloss in the browser). npm test green (22 unit + 81 IPA + 2069 gloss + 348 census); 8 popup e2e.
1 parent bd12ae2 commit 583eb55

6 files changed

Lines changed: 94 additions & 5 deletions

File tree

wiktionary_pron/docs/ISSUES.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,3 +1180,34 @@ tall maxHeight doesn't persist). Verified across 7 words: top stays within
11801180

11811181
**Status: FIXED.** 7 popup + 19 macronizer e2e + 22 unit + 81 IPA + 2067 golden
11821182
+ 348 census, all green.
1183+
1184+
## M-023j — Caesar full-text stragglers: jamque + pleraque real popup gaps (2026-08-12) ✅
1185+
1186+
**Symptom.** Full Bellum Gallicum I through the popup lemma path (form →
1187+
wordlist lemma → artifact gloss) reported 1926/1929; the 3 flags were
1188+
`ide`/`jamque`/`pleraque`. M-023b had dismissed all 3 as "the popup resolves
1189+
them correctly."
1190+
1191+
**Root cause.** That dismissal was wrong for 2 of 3. The popup shows
1192+
`glossFor(analysis-lemma)`, and the analysis lemma for `iamque` is `jamque`
1193+
(not `jam`), for `plerumque` is `pleraque` (not `plerusque`) — neither was in
1194+
the artifact, so both rendered "—". Only `ide` was a true false-positive: the
1195+
form `idem` also carries the glossed `idem` lemma (the `Ide` flag is the
1196+
Mt.-Ida proper-noun homograph). A wordlist scan found the wider unglossed
1197+
enclitic-lemma class: jamque, pleraque, qualiscumque, quotcumque, quotiensque.
1198+
1199+
**Fix.** Core overrides `jamque`→"and now, and already" and `pleraque`→"the
1200+
greater part, most, very many (neut. pl. of plerusque)", each with a golden
1201+
row (2067→2069). Rebuilt artifact (34,413 lemmas / 450 KB / L&S 89.8%).
1202+
Browser probe confirmed all 3 words now gloss; the straggler case is locked
1203+
in e2e/popup-check.spec.js as a 8th serial test (form→lemma→gloss path is
1204+
invisible to the data suite).
1205+
1206+
**Lesson.** The data suite resolves the LEMMA directly, so it can't see a
1207+
form that resolves to a DIFFERENT (unglossed) lemma than the one the golden
1208+
row tests. The browser e2e is the only gate on form→lemma→gloss. Also: a
1209+
"99.8% lemmas glossed" claim for a text can hide real popup "—"s in the
1210+
analysis-lemma stratum.
1211+
1212+
**Status: FIXED.** 8 popup + 19 macronizer e2e + 22 unit + 81 IPA + 2069
1213+
golden + 348 census, all green.

wiktionary_pron/docs/LESSONS.md

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -592,10 +592,16 @@ non-obvious method lessons, in the order they bit:
592592
L&S opens them with usage-notes (adverb-POS class) or empty senses, and the
593593
wordlist lemma = the wordform itself, so a core key on the lemma works.
594594
(plerumque's lemma is plerusque, so a core key on plerumque is dead.)
595-
- **Full BG 1 result: 1926/1929 lemmas glossed (99.8%).** The last 3
596-
(ide→idem, jamque→jam, pleraque→plerusque) are Morpheus-rescued forms whose
597-
lemmas ARE glossed in the artifact — the popup resolves them correctly.
598-
Artifact 34,379 lemmas / 449 KB / L&S 89.7%. Golden 2034 / census 348.
595+
- **Full BG 1 result: 1926/1929 lemmas glossed (99.8%).** The last 3 were
596+
CORRECTED in M-023j (2026-08-12): `ide` was a true false-positive (`idem`
597+
resolves via the glossed `idem` lemma, not its Mt.-Ida proper-noun homograph
598+
`Ide`), but `iamque` and `plerumque` were REAL popup gaps — the analysis lemma
599+
for `iamque` is `jamque` (not `jam`) and for `plerumque` is `pleraque` (not
600+
`plerusque`), and neither was in the artifact. Fixed with core overrides
601+
`jamque`→"and now, and already" + `pleraque`→"the greater part..." (each with a
602+
golden row). The form→lemma→gloss path is NOT visible to the data suite —
603+
verify it in the browser (e2e/popup-check.spec.js Caesar-stragglers test).
604+
Artifact 34,413 lemmas / 450 KB / L&S 89.8%. Golden 2069 / census 348.
599605

600606
## Cross-author stress tests (2026-08-11, M-023d)
601607

@@ -613,7 +619,8 @@ Catilinam I, Vergil Aeneid I, Ovid Metamorphoses I.
613619
bulk of each text's missing lemmas are (a) mythological patronymics/geographical
614620
epithets L&S keys under a DIFFERENT lemma (Helena not helene, Idalium not
615621
idalia, Teucer not teucrus, Mycenae not mycene, Pyrrha not pyrrhe), (b)
616-
Morpheus-rescued forms whose lemma IS glossed (ide→idem, jamque→jam), and
622+
Morpheus-rescued forms whose lemma IS glossed (ide→idem — but note jamque
623+
and pleraque were NOT: those were real gaps fixed in M-023j), and
617624
(c) rare unassimilated compound forms. A core override fixes the common ones;
618625
the patronymic tail is not recoverable without a dedicated proper-noun lexicon.
619626
- **Unassimilated TABLE grows per-author.** Cicero: adsedeo→assideo, confor→

wiktionary_pron/e2e/popup-check.spec.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,41 @@ test("v/u words cycle reversibly — divisa's original spelling must come back",
150150
await expect(span).toHaveAttribute("content", initial);
151151
});
152152

153+
test("Caesar BG I stragglers gloss in the popup — idem, iamque, plerumque", async () => {
154+
// M-023j: the full-text stress test flagged these as no-gloss. The wordlist
155+
// lemmas are idem/`jamque`/pleraque — glosses now land via core overrides
156+
// (iamque → jamque → "and now, and already"; plerumque → pleraque → "the
157+
// greater part"; idem was already glossed but its proper-noun homograph Ide
158+
// isn't). Regression-locks the form→lemma→gloss path the data suite can't see.
159+
const page = sharedPage;
160+
test.setTimeout(300_000);
161+
await page.goto(PAGE);
162+
await expect(page.locator("#macronize_btn")).toBeEnabled({ timeout: 240_000 });
163+
164+
await page.fill("#text_to_macronize", "idem iamque plerumque");
165+
await page.click("#macronize_btn");
166+
const spans = page.locator("#resultText .ipa");
167+
await expect(spans).toHaveCount(3, { timeout: 120_000 });
168+
169+
const expectations = [
170+
{ word: "īdem", gloss: "the same" },
171+
{ word: "iamque", gloss: "and now" },
172+
{ word: "plērumque", gloss: "greater part" },
173+
];
174+
for (let i = 0; i < expectations.length; i++) {
175+
const span = spans.nth(i);
176+
await expect(span).toHaveText(expectations[i].word, { timeout: 5000 });
177+
await span.hover();
178+
const defCells = page.locator(".word-popup table.readings td.r-def");
179+
await expect(defCells.first()).toBeVisible({ timeout: 10_000 });
180+
const defs = (await defCells.allTextContents()).join(" | ");
181+
expect(defs).toContain(expectations[i].gloss);
182+
// dismiss the popup between words
183+
await page.mouse.move(5, 5);
184+
await page.waitForTimeout(150);
185+
}
186+
});
187+
153188
test("prose shows no grey placeholders; numbered verse scans after line-number strip", async () => {
154189
const page = sharedPage;
155190
test.setTimeout(300_000);
40 Bytes
Binary file not shown.

wiktionary_pron/utils/core_gloss.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -950,6 +950,7 @@
950950
"iustus": "just, righteous, lawful, upright",
951951
"iuxta": "near, close to, beside; according to",
952952
"jam": "now, already; soon",
953+
"jamque": "and now, and already",
953954
"janus": "the Roman god of beginnings and gates, with two faces",
954955
"judex": "a judge",
955956
"judicatus": "judged, decided",
@@ -1419,6 +1420,7 @@
14191420
"planta2": "the sole of the foot; a plant, sprout",
14201421
"planus": "flat, level, even; clear, plain",
14211422
"plebs": "the common people, the plebeians",
1423+
"pleraque": "the greater part, most, very many (neut. pl. of plerusque)",
14221424
"plerumque": "generally, commonly, for the most part",
14231425
"plerusque": "very many, the most, most",
14241426
"plinius": "a Roman gens name; esp. Pliny the Elder, who died in the eruption of Vesuvius",

wiktionary_pron/utils/gloss_golden.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1381,6 +1381,13 @@
13811381
},
13821382
"note": "core_gloss"
13831383
},
1384+
{
1385+
"lemma": "jamque",
1386+
"expect": {
1387+
"contains": "and now"
1388+
},
1389+
"note": "Caesar full-text iamque (M-023j)"
1390+
},
13841391
{
13851392
"lemma": "jus",
13861393
"expect": {
@@ -14204,6 +14211,13 @@
1420414211
},
1420514212
"note": "Caesar full-text adverb/particle (M-023b)"
1420614213
},
14214+
{
14215+
"lemma": "pleraque",
14216+
"expect": {
14217+
"contains": "greater part"
14218+
},
14219+
"note": "Caesar full-text wordlist twin of plerusque (M-023j)"
14220+
},
1420714221
{
1420814222
"lemma": "plerumque",
1420914223
"expect": {

0 commit comments

Comments
 (0)