Release 7.50.0a1 - #768
Open
github-actions[bot] wants to merge 184 commits into
Open
Conversation
* Update kab.json Add post-sonorant occlusivization blocking rules for /k/ and /ɡ/ * kab: rework k/ɡ spirantization, fix Bedar et al. citation kab: rework k/ɡ spirantization, fix Bedar et al. citation - Remove KAB_SPIRANT_K_ALT and the [ʃ] allophone of /k/: the k→ʃ value is Riffian-only in Kossmann & Stroomer (1997) p.469 and never occurs in Kabyle (native-speaker verified). - Replace the 7 sonorant-specific blocking rules (K/G_AFTER_R/L/N/M) with generalized KAB_BLOCK_SPIRANT_K_AFTER_CONSONANT and KAB_BLOCK_SPIRANT_G_AFTER_CONSONANT: /k/→[ç] and /ɡ/→[ʝ] only post-vocalically and word-initially; stops after any consonant. Exception kept: /ɡ/ stays [ʝ] after /m/ (/mʝ/→[mʝ], Bedar, Quellec & Tifrit 2022). Contexts cover all singleton + geminate consonants. * kab: drop t-before-i block, restore anta example, add 6 sources kab: drop t-before-i block, restore anta example, add 6 sources - Remove KAB_BLOCK_SPIRANT_T_BEFORE_I: speaker re-verification (2026-07-17) confirms word-initial /t/ is always [θ] before /i/ (tifinaɣ, tilufa, tilelli, tikwal) — the 2026-07-16 table stands. 24 → 23 allophone rules. - Restore anta as the T_AFTER_N example with corrected gloss: native Kabyle 'which one (f.)' (feminine of anwa), not the Arabic pronoun — only the old gloss was wrong. - Sources 6 → 12: add Chaker 1996 (INALCO notation), Mammeri 1976, Souag 2019, Wang 2020 (McGill Working Papers — corrects a miscitation), the 2026-07 native-speaker verification record, and the 2026-07-17 corpus audit. Notes now list the pending speaker checks (intervocalic -ti-; askar/sk schwa question). Engine-verified on orthography2ipa 7.30.0a3 (fork): all outputs match predictions. * kab: realize /ɣ/ as uvular [ʁ] by default kab: realize /ɣ/ as uvular [ʁ] by default Source check (Kabyle consonant chart: ɣ in the uvular column as [ʁ]; IPA [ʁ] article's word-final Kabyle example bbeɣ → [bːəʁ]; no word-final devoicing documented for Kabyle): add KAB_GH_UVULAR_REALIZATION and its geminate counterpart so /ɣ/ surfaces as [ʁ] in all positions. Underlying phoneme and rule contexts unchanged; broad [ɣ] retained as documented variant. 23 → 25 rules. * Improving kabyle * Improving kabyle specs * Improved kabyle specs * Improved kabyle specs - json format
…greement boards (#636) The scoreboard now carries 553 rows across every gold set the engine ships, up from 467: the languages added since the last regeneration are scored, cmudict and the Arabic diacritized set included. The espeak board gains en-US and splits the single pt row into the five Portuguese lects.
…d a stale regression baseline (#637) * fix(kab): validate against the schema, and re-pin the gold to the sourced rules The Kabyle spec carried a 'type' key on seven sources[] entries. The schema's SourceModel is strict and has no such field, so every spec validation failed; the provenance claim now opens each source's notes, which the model does define. The spec's rules are better sourced than the expectations they broke: /ʝ/ occlusivizes after r, l, n but not after m (bedar_quellec_tifrit_2022 on Chemini Kabyle), so argaz keeps its stop; the /k/ -> [ʃ] rule was Kossmann & Stroomer's RIFFIAN illustration and its removal makes amek agree with its own cited note ([ç]); and /ɣ/ is the uvular [ʁ] in every position. The tests now assert the sourced behaviour on both sides of the blocking context, the twenty gold rows are re-pinned, and the notes that still described the old realizations are corrected. The velar_fricative tag accepts either realization of the one phoneme, and kab-004 drops a spirantization tag its transcription no longer earns (fourteen other rows carry the feature). * fix(ci): install the Portuguese syllabifier in the test environment The gold sets and benchmark baselines pin engine output produced with the silabificador plugin loaded, but the plugin lived only in the 'portuguese' extra while build-tests, coverage and the benchmark gate all install '.[test]'. Without it the syllabifier falls back and stress lands elsewhere, so twenty Portuguese gold rows across fourteen lects failed in CI while passing locally for anyone who had the plugin installed. * fix(ci): refresh the benchmark regression baseline The sample baseline had not been refreshed since #361, so it covered 206 of the 551 rows the engine now scores and measured dev's whole accumulated drift rather than a PR's own effect. Every PR since — #614 among them — met a red gate and merged through it, which is what a baseline this old makes inevitable. Rescored at the same uniform limit: 56 rows improve beyond epsilon (ms/ipadict 0.5509 -> 0.0751, kab/vox_communis 0.3711 -> 0.2242, eu/wikipron 0.0640 -> 0.0227) and 8 worsen. The 8 are listed in the PR so they stay visible rather than folding silently into a new baseline; ca-x-balear/4catac and pt-PT-x-porto/ep_dialects are the two worth a look, both expert-human golds moved by the Iberian vocalism work.
Expose the prosodic-clitic test as module-level orthography2ipa.stress functions so the engine and any downstream assembler place word stress from one shared definition of stress.cliticless_words. G2P._is_cliticless delegates to them; behaviour is unchanged. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
A bare region tag whose specs are all sub-regional had no exact match, so nearest-language fallback picked whichever private-use sibling sorted first: ar-SA resolved to ar-SA-x-dawasir. A dialect named in a private-use subtag was invisible to tag distance, so ar-x-najdi fell through to ar. Add a curated region-default table (ar-SA -> ar-SA-x-najd) alongside the bare-primary defaults, and private-use dialect aliases (ar-x-najdi -> ar-SA-x-najd, ar-x-hejazi -> ar-SA-x-hejaz). The Saudi default is an explicit editorial convention — Najdi is the capital region's variety and the most widely spoken (Ingham 1994) — not a claim in the spec data that Saudi Arabic is Najdi. Unmatched Arabic tags still fall back to the ar (MSA) leaf. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
The grapheme→IPA front-end runs once per utterance before synthesis, so per-sentence latency is what matters. Profiling the transcribe path showed two pure redundancies over immutable spec data: - transcribe_word ran the pronunciation beam, then rebuilt a nearly identical rules-only lattice via ipa_lattice purely to read the confidence score. - syllabification (the silabificador plugin) was recomputed several times per word — stress detection and the lattice each asked for it — and again for every repeat of a function word. Memoize both per engine, keyed only on the word and this engine's fixed stress spec. Neither consults the runtime-mutable lexicon, so a fresh engine gets fresh caches and results are byte-identical. Real speech repeats function words heavily, so the hit rate is high. Steady-state per-utterance latency drops ~2-2.6x across en-GB, pt-PT, es-ES and ar (pt-PT p99 7.2ms -> 3.4ms). Output — IPA and confidence, greedy and beam — is byte-identical across an 8-language differential, and the full suite passes unchanged. benchmarks/latency.py is the repro. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…#654) * feat: add gaa, ada, gen, aja language specs Ga, Dangme/Adangme, Gen (Mina) and Aja — Ghana/Togo Kwa and Gbe languages. Research-tier grapheme/allophone inventories cited to Wikipedia and published phonological descriptions (Kropp Dakubu 1999, Apronti 1967); gen/aja pull their allophone stratum from the closely related Ewe (`ee`) spec via allophones_base. * feat: add tw, fat Akan-variety language specs Twi and Fante as individual-language codes inheriting the shared Akan (`ak`) grapheme table via graphemes_base/allophones_base; fat overrides Fante's distinguishing affricate contrast (ts/dz/z) and labial-palatalised digraphs (tw/dw/hw). Pins the two individual codes in registry.py's alias table (same fix already applied to bxr/diq) since langcodes' macro=True standardisation otherwise collapses them into the ak macrolanguage. Refreshes the Glottolog level snapshot for the five new glottolog_code values and adds cited family-level test cases for all six new specs.
…ulde specs (#655) * feat: add Serer (srr) language spec Northern Atlantic (Senegambian) branch of Atlantic-Congo. Cited to Wikipedia and McLaughlin (2000); quality: research. * feat: add Soninke (snk) language spec Soninke-Bozo branch of Mande. Cited to Wikipedia and Creissels (2016); quality: research. * feat: add Susu (sus) language spec Susu-Yalunka branch of Central Mande. Cited to Wikipedia and Houis (1963); quality: research. * feat: add Mende (men) language spec Southwestern Mande. Cited to Wikipedia and Innes (1969); quality: research. * feat: add Temne (tem) language spec Mel branch of Atlantic-Congo. Cited to Wikipedia and Wilson (1961); quality: research. * feat: add Pular (fuf) and Nigerian Fulfulde (fuv) language specs Both wired as parent_dialect children of ff via graphemes_base/parent, since neither source consulted documents a Fula-variety-specific grapheme or allophone divergence. Cited to Wikipedia and Arnott (1970); quality: research. * test: add cited-rule tests for the new Atlantic and Mande specs One test per key cited claim (srr vowel length + implosives, snk vowel length + affricate, sus/men labiovelars, men affricate vs. sus glide, tem dental/alveolar contrast, fuf/fuv ff inheritance) on real words. * fix(data): correct citation-validation findings for sus and tem specs - sus.json: Wikipedia's Susu phoneme table (fetched) explicitly states nasal vowels are spelled as vowel+n digraphs (in/un/en/on/ɛn/ɔn/an); the previous notes claimed this was unconfirmed and omitted the graphemes. Add the seven nasal-vowel graphemes/allophones and fix the notes to cite the confirmed spelling convention. - tem.json: add Kanu & Tucker (2010) JIPA "Illustrations of the IPA" as the primary fetched source, confirming the 9-vowel inventory and the dental/alveolar ⟨th⟩=/t̪/ vs ⟨t⟩=/t/ contrast, and clarifying that /tʃ/, /ʃ/, /w/ are dialectal variants rather than independently spelled phonemes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
The README and several docs quoted a fixed 676 languages / 749 spec files figure. Running available_codes() against the current data now gives 820 languages and 909 entries including classification-only clade nodes, and that count changes as specs are added. Rather than hardcode a new snapshot that will drift the same way, each mention now points at the one-line command a reader can run to get the live count: available_codes() and available_codes(include_clades=True). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat: add Sasak, Rejang, Pijin language specs
Research-grounded Latin-orthography specs for Sasak (sas, Lombok),
Rejang (rej, Sumatra) and Pijin (pis, Solomon Islands), each cited
against Wikipedia and published grammars/phonology sources.
* feat: add Avestan spec and Sogdian/Khotanese/Parthian stubs
Avestan (ae) is scored in the standard Hoffmann scholarly
transliteration of the native Avestan script, following the akk.json/
pal.json precedent for ancient languages with non-Latin scripts.
Sogdian (sog), Khotanese (kho) and Parthian (xpr) are added as honest
stubs with full metadata and empty graphemes: each survives in
multiple divergent script/transliteration traditions with no single
citable letter-to-IPA table, so no inventory is asserted.
* fix(data): validate sas/rej/pis/ae specs against fetched primary sources
- sas.json: add Archangeli/Tanashur/Yip (2020) JIPA Illustration of the
Meno-Mene dialect as primary source; model word-final <q> = /ʔ/ as a
positional_graphemes rule (directly attested in the JIPA word list);
clarify the 6-vowel (JIPA fieldwork) vs 8-vowel (Wikipedia, other
dialects) vowel-count discrepancy in notes.
- rej.json: add fetched Omniglot citation; model word-final <k> = [ʔ]
as a positional_graphemes rule ("K is pronounced [ʔ] at the end of
words" - Omniglot); leave <q> unmodelled since no IPA value is
confidently sourced for it.
- pis.json: remove unsupported <y> = /j/ grapheme (Wikipedia's Pijin
alphabet excludes y; search evidence points to <i> being used
instead, e.g. "iu" for "you"); fix notes claim that both voiceless
and voiced English th merge with /t/ - fetched Wikipedia source shows
voiceless th merges with /s/ (maos "mouth"), only voiced th merges
with /t/ (brata "brother"); add sh/z merger details.
- ae.json: add Skjaervo (2007) "Old Iranian" chapter (fetched directly,
PDF) as the actually-verified primary source after the Encyclopaedia
Iranica articles by the same author returned HTTP 403 on every fetch
attempt; cross-checked the full Hoffmann transliteration letter set
against Skjaervo's own alphabet/vowel/consonant tables - no mapping
corrections were needed, all graphemes confirmed.
All four specs pass the full test suite (1208 passed, 2 pre-existing
xfails unrelated to these files) and the derivable-key/positional-key
audits from SKILLS.md.
…drift (#670) The CUNY-CL/wikipron Welsh scrape changed upstream (897 -> 894 entries), shifting the sampled gold set and its PER (0.2175 -> 0.2297) with no code or spec change in this repo — verified by bisecting dev back past all of today's data merges and the #645 caching merge, which all score identically. Rebuild the single (cy, wikipron) row with the same build_scoreboard code path (bootstrap CI included), following the stale baseline precedent of #637. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…#751) Awadhi (awa), Dargwa (dar), Dzongkha (dz), Gilaki (glk), Kwanyama (kj), Northern Luri (lrc), Mazanderani (mzn), Southern Kurdish (sdh), Tswana (tn) and Uyghur (ug) move from empty-graphemes REGISTRY STUB to cited grapheme/allophone maps at skeleton or research tier. Uyghur and Dzongkha register their WikiPron gold (uig_arab_broad.tsv, dzo_tibt_broad.tsv) in scripts/benchmark.py and record PER in benchmarks/results.json / docs/scoreboard.md. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Citation-verifies 9 skeleton-tier specs that already had a registered gold row (per docs/quality_tiers.md's research-tier criteria) but were missing a stress block/exemption and a real (non-placeholder) source: crk, rw, cic, lut, klj, gml, dum, wlm, mga. - crk (Plains Cree): added Wolfart 1996 (Sketch of Cree, Handbook of North American Indians vol. 17) and a documented stress rule (default_position=-3, antepenultimate for 3+ syllable words); Wolfart also documents a disyllabic exception (final stress) the schema cannot express in one rule, so it is left as a documented gap rather than silently wrong. Grapheme table checked, no discrepancy found. - rw (Kinyarwanda): added Kimenyi 1980 (A Relational Grammar of Kinyarwanda) and a cited stress EXEMPTION -- Kinyarwanda is a Bantu tone language, not a stress language; word-level prominence is predictable but tone itself (already noted as unmarked in the orthography) is out of the `stress` schema's scope. Grapheme table checked, no discrepancy found. - cic (Chickasaw): added Munro & Willmond 1994 (Chickasaw: An Analytical Dictionary) and a weight-sensitive `stress` block (quantity_sensitive=true, default_position=-2 approximating the rightmost-heavy-syllable rule, which the schema cannot express exactly). Required whitelisting `cic` in tests/test_stress_weight.py::test_the_arabic_specs_opt_in alongside the existing idb precedent, with the same citation-backed justification. Grapheme table checked, no discrepancy found. - lut (Lushootseed): added Bates, Hess & Hilbert 1994 (Lushootseed Dictionary) and a stress rule (default_position=1, approximating "leftmost full/non-schwa vowel" for the Northern dialect this spec models; the schwa-skipping nuance is not expressible and is documented). Grapheme table checked, no discrepancy found. - klj (Khalaj): added Doerfer 1988 (Grammatik des Chaladsch) and the Encyclopaedia Iranica Khalaj article, plus the standard pan-Turkic final-stress rule already used for this project's other Turkic specs. Grapheme table checked, no discrepancy found. - gml (Middle Low German) / dum (Middle Dutch): added Lasch 1914 (Mittelniederdeutsche Grammatik) / Van Loey 1976 (Middelnederlandse Spraakkunst II) and the shared West Germanic root-initial stress rule. While citing dum, found and fixed a discrepancy: `w` was mapped to [ʋ] (the MODERN Dutch labiodental value); Van Loey describes the medieval `w` as bilabial [w], with the labiodental shift a later development. Fixed to [w]; dum's wikipron PER improved 0.3054 -> 0.2822 as a result, re-run and recorded in benchmarks/results.json and docs/scoreboard.md. - wlm (Middle Welsh): added Evans 1964 (A Grammar of Middle Welsh) and the fixed-penultimate Brittonic stress rule. Grapheme table checked, no discrepancy found. - mga (Middle Irish): added Thurneysen 1946 (A Grammar of Old Irish, already used for `sga` in wave 1) and the fixed word-initial Goidelic stress rule. Grapheme table checked, no discrepancy found. Skipped this round: `ale` (Aleut) already carries a real Bergsland 1997 citation and meets every other research criterion, but its own notes document that the registered NorthEuraLex gold does not match the Bergsland practical orthography (different vowel-quality pattern, combining-acute vs. circumflex, hyphenated citation forms) -- a prior investigation already decided not to chase that mismatched gold, and this wave respects that decision rather than re-litigating it. Remaining 39 candidates in the fresh audit pool (skeleton + non-empty graphemes + registered gold) were left for a future wave given this round's scope. All 9 promoted skeleton -> research; docs/scoreboard.md's quality-tier column hand-updated for these rows (not regenerated, per wave-1 precedent), plus dum's PER/CI/exact_match re-run and updated by directly invoking scripts/benchmark.py's per-language evaluation path (not --scoreboard/--ci-sample). Authorship: Claude Sonnet, orchestrated by Fable, per repo AGENTS.md. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adds mutates_neighbor/mutates_neighbor_side to AllophoneRule: a marker
grapheme (e.g. a Goidelic slender vowel letter) can now delete its own
slot while atomically palatalizing (or otherwise mutating) an adjacent
slot -- a capability the existing phoneme->surface allophone_rules
vocabulary could not express (surface only rewrites the rule's OWN
matched phoneme). Generic and language-agnostic: no language names in
allophony.py; applies to any marker-grapheme phenomenon (Goidelic
slender/broad marking, Slavic/Cyrillic soft-sign palatalization, similar
Uralic conventions).
Threaded through types.py (validation), schema.py (pydantic model),
json_loader.py (loading), data/SCHEMA.md and docs/allophony.md ("Marker
graphemes" section, worked example, honest benchmark delta).
Applied to gv (Manx) for the two vestigial slender-marking environments
Broderick 1984-86 / Thomson 1992 describe: word-final -in/-en
(GV_SLENDER_FINAL_N) and onset consonant+vowel (GV_SLENDER_ONSET_CONSONANT),
fixing the two examples issue #743 cited directly: giare -> [ɡʲɛːr],
dowin -> [daunʲ]. Measured gv WikiPron PER: 0.3650 -> 0.3630 (n=690).
Adversarial synthetic-spec mechanism tests (test_allophone_mutates_neighbor.py)
plus real-language pin tests (test_manx_slender_marking.py). Full suite
green (196313 passed, 5 skipped, 136 xfailed): zero behaviour change for
every spec that does not declare mutates_neighbor.
Authorship note: implemented by Claude Sonnet under Fable orchestration.
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Manx (gv): GV_SLENDER_FINAL_N marker rule now surfaces "ə" instead of deleting the vowel outright -- WikiPron gold shows the dominant realisation of word-final -in/-ein/-ain as an epenthetic schwa before the palatalised n (Mannin [manənʲ], aalin [ɛːlinʲ], aynin [unənʲ], etc; Broderick 1984-86; Thomson 1992). A documented minority (dowin [daunʲ], ain [ain]) keeps no schwa and is left undecoded per the honesty rule. gv PER 0.3630 -> 0.3623. Wave 2, ranked by descending PER among research-tier rows (excluding languages fixed in prior waves): - ee (Ewe): orthographic <w> spells the velar approximant /ɰ/, not /w| -- 100% of WikiPron tokens containing <w> confirm this (Ansre 1961; Duthie 1996). PER 0.4824 -> 0.4687. - pjt (Pitjantjatjara): the three-vowel system a/i/u (long aa/ii/uu) surfaces as the lowered/centralised allophones [ɐ]/[ɪ]/[ʊ] ([ɐː]/[ɪː]/[ʊː]), not cardinal [a]/[i]/[u], per the WikiPron gold and Wati-subgroup phonology (Goddard 1985). PER 0.4846 -> 0.0027. Convention-mismatch / structural findings documented, not chased (honesty rule): dz (Tibetan-script stacking/silent-prefix system needs a new engine capability, not a rule tweak); nrf (Jerriais word-final vowel/ consonant elision system, non-trivial, gold itself inconsistent on some forms); guw (Gbe tone is not written in the source orthography at all -- unrecoverable from spelling); mga (Middle Irish single/double intervocalic consonant lenition system -- same scale of change as a new engine capability); mh (spec targets the "old" Marshallese orthography -- n/ ll dl m. with dot-below/tilde diacritics -- while WikiPron gold uses the "new" orthography's macron/cedilla diacritics (n-, l,, o,) -- a genuine orthography-variant mismatch, not a bug); ki, zu (dominant error is unwritten tone/downstep in the standard orthography, an inherent gap not a spec defect). Full suite green (196513 passed, 5 skipped, 136 xfailed). Authorship: Claude Sonnet under Fable orchestration. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Citation-verifies 6 more skeleton-tier specs from the fresh 37-candidate pool (skeleton + non-empty graphemes + registered gold, per docs/quality_tiers.md's research-tier criteria): kru, bbl, kwk, srs, kld, bdq. Each already had a real Wikipedia orthography source; the gap was a primary reference grammar/dictionary and a cited stress block/exemption. - kru (Kurukh): added Winfield 1928 (A Grammar of the Kurux Language). Grapheme table (Devanagari retroflex/aspirate/nasal series, nuqta letters) checked: no discrepancy found. Descriptive phonological work reports Kurukh word accent as weak and variable across syllables rather than a fixed positional rule, so no `stress` block is added (documented exemption) rather than encoding a guess. - bbl (Bats/Tsova-Tush): added Holisky & Gagua 1994 (Tsova-Tush (Batsbi), in Smeets ed., Indigenous Languages of the Caucasus vol. 4). Grapheme table (Georgian ejective series, added letters) checked: no discrepancy found. Added a cited stress rule (default_position=1) approximating the documented initial-syllable tendency; morphologically-conditioned shifts are a documented gap. - kwk (Kwak'wala): added Boas 1947 (Kwakiutl Grammar, Transactions of the American Philosophical Society 37(3)). Grapheme table (labialized/lateral/affricate series) checked: no discrepancy found. Stress is quantity-sensitive and, in current analyses, phrasal rather than a fixed word position (Boas 1947; Elfner 2024), which this project's positional `stress` schema cannot express without a syllable-weight primitive, so no `stress` block is added (documented exemption). - srs (Sarsi/Tsuut'ina): added Cook 1984 (A Sarcee Grammar). Grapheme table (lateral/ejective/affricate series) checked: no discrepancy found. Tsuut'ina is a tone language (Cook 1984; reported as a three-way H/M/L system in later work), not a stress language, and tone is not consistently marked in the mapped orthography, so no `stress` block is added (documented exemption). - kld (Gamilaraay): added Austin 1993 (A Reference Grammar of Gamilaraay, Northern New South Wales). Grapheme table (stop series, retroflex r, digraph values) checked: no discrepancy found. Added a cited stress rule (default_position=1): word-initial primary stress, the typologically regular Pama-Nyungan pattern. - bdq (Bahnar): added Banker & Banker 1979 (Bahnar Dictionary, Bahnar-Vietnamese-English, SIL). Grapheme table (Vietnamese-style digraphs, implosives, vowel letters) checked: no discrepancy found. Added a cited stress rule (default_position=-1): Bahnaric sesquisyllabic words carry stress on the word-final main syllable; non-native disyllabic loans are a documented gap. None of the six required a grapheme-table fix, so no PER numbers changed; only each spec's `quality_tier` was hand-updated in benchmarks/results.json and docs/scoreboard.md (not regenerated via --scoreboard/--ci-sample), per wave-2 precedent. No CI-sample epsilon concerns are expected since no PER value moved. 31 candidates remain in the fresh audit pool (skeleton + non-empty graphemes + registered gold, missing a real source or stress block/exemption) after this wave's 6 promotions, left for a future wave. `tn` and `ale` were left untouched: `tn`'s only registered gold row is a 0-entry stub-tier placeholder (no usable PER to certify a promotion against), and `ale` carries a prior deliberate skeleton decision (documented gold mismatch) that this wave respects rather than re-litigating. Authorship: Claude Sonnet, orchestrated by Fable, per repo AGENTS.md. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Gold-hunting wave 1: audited all 41 WOLD (World Loanword Database) languages against the o2i spec registry. Gawwada, Iraqw, Seychelles Creole and Tarifiyt Berber each have a non-empty grapheme table and no existing gold anywhere in the registry; all four smoke-checked at ~100% non-empty engine coverage on a 150-row sample. Rows recorded in benchmarks/results.json and docs/scoreboard.md, with the full audit (what was already covered, what has no spec, what is stub-empty) documented in docs/benchmarks.md. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* data: orthography wave 6 -- 10 registry stubs upgraded with cited orthographies Cantonese (yue, Jyutping), Saraiki (skr, Shahmukhi) promoted to research tier and wired to WikiPron gold (yue_latn_standard_broad, skr_arab_broad). Southern Min (nan, POJ), Hakka (hak, Phåk-fa-sṳ), Wu (wuu, Wugniu), Eastern Min (cdo, Bàng-uâ-cê), Gan (gan, Gan Wikipedia romanisation), Northern Hindko (hno, Shahmukhi), Rohingya (rhg, RLC Latin alphabet) and Chittagonian (ctg, Bengali script with cited divergent values) promoted to skeleton tier with cited grapheme maps and documented tone/stress exemptions. Co-Authored-By: Claude Sonnet 5 (Fable orchestration) <noreply@anthropic.com> * fix: drop Sinitic base-spec romanization graphemes and the loanword yue gold The five Han-script base specs (yue/nan/hak/wuu/cdo) must stay grapheme- empty per the zh-Hani principle: a Han character encodes no sound, and their romanizations already live in the dedicated -Latn-* script-variant specs (which these divergent duplicate tables contradicted). gan's 'Gan Wikipedia romanisation' is a wiki convention, not a citable standard. The yue wikipron file was previously audited and rejected as English loanword entries (PER 0.71 confirms); registration and rows removed. Wave 6 keeps its four legitimate native-script languages: skr Saraiki (Shahmukhi, wikipron research), hno Hindko, rhg Rohingya, ctg Chittagonian. --------- Co-authored-by: Claude Sonnet 5 (Fable orchestration) <noreply@anthropic.com>
Wires udm, ady, av, lbe, dar, lez, lv, smn, vep into _NORTHEURALEX_LANGS: each had zero gold anywhere and a non-empty grapheme table. Language-ID mappings were verified against NEL's own cldf/languages.csv (not a naive ISO 639-3 lookup) -- av -> ava and lv -> lav needed an explicit code translation, and dar was checked against its glottocode (darg1241, "North-Central Dargwa") to confirm it is the same Akusha-based literary standard the o2i dar spec targets. All 9 passed a 100-sample smoke gate (100% non-empty output, real per-language orthography in Value) before full-dataset scoring. dar is promoted skeleton -> research: it already had sources and a documented stress exemption, and now has a registered gold row (1056 entries, PER 0.0833) to complete the tier's criteria. The other 8 languages were already labeled research pending exactly this gold registration. benchmarks/results.json and docs/scoreboard.md are hand-updated with the new rows (full-dataset PER, no --scoreboard/--ci-sample rerun). Authorship: Claude Sonnet, orchestrated by Fable (Anthropic). Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ve-speaker spot-checked (#767) Registers Salesteq/arabic-dialects-gold20 (public HF dataset) at the llm-generated provenance tier: semi-synthetic, authored by the same Claude lineage that wrote o2i's Arabic dialect specs (near-circular — the dataset carries an ipa_o2i draft column), spot-checked by a native Arabic speaker, registered on explicit maintainer instruction because for most of these 33 dialects no other gold exists. PERs 0.002-0.05 = self-agreement, documented as such; no quality-tier promotion may rest on these rows. Runtime fetch only, nothing vendored.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Human review requested!