diff --git a/TODO.sota/89-remaining-encodings-sota.md b/TODO.sota/89-remaining-encodings-sota.md new file mode 100644 index 0000000..e7ee7ce --- /dev/null +++ b/TODO.sota/89-remaining-encodings-sota.md @@ -0,0 +1,214 @@ +# WO89 — Master list: every unencoded system, model requirement, and the graph path to SOTA + +Status: PLAN (2026-10-28) — supersedes ad-hoc inventory; work orders created per batch +Goal: encode every remaining reference table in the reference collection; drive all six +Track B model lines to their SOTA targets; no system left unencoded or model-blocked +without an owner decision recorded. + +## Classification legend + +- **D** — deterministic: the source table fully specifies the output; one `.isc` map + achieves conformance. No model involved. +- **D+M** — map is deterministic, but real-world text carries less information than + the table assumes (unwritten vowels, polyphones, unvocalized abjad). Ship the map + now; a model companion is the recorded follow-up for unvocalized input. +- **M** — output is not a character-wise function of the input (lexical readings, + unvocalized scripts as the primary input form). Requires a model. +- **X** — blocked: no Unicode-representable source encoding, no obtainable source + document, or an owner decision is the gate. Only partial sub-items exist today + (the two raster columns inside BGN/PCGN Inuktitut, documented in PR #214). + +Two tracks, never conflated: +- **Track A (conformance):** transcribe the authority's table; the map is the artifact; + CI gates = strict parse + embedded tests + cross-runtime parity. +- **Track B (SOTA):** the conversion of natural, imperfectly written text; the model + is the artifact; CI gates = external-protocol metrics + quantization delta + release. + +## A. Track A inventory — 72 remaining items + +### A1. BGN/PCGN — 15 systems + 1 revision (all D except noted) + +Reference collection: 55 PDFs; 40 systems encoded (56 maps). Inuktitut closed in PR #214. + +| # | System | lang | Class | Notes / work order | +|---|--------|------|-------|--------------------| +| 1 | Adyghe | ady | D | Cyrillic table; WO90 batch 1 | +| 2 | Avar | ava | D | Cyrillic table; WO90 batch 1 | +| 3 | Chuvash | chv | D | Cyrillic table; WO90 batch 1 | +| 4 | Kabardian | kbd | D | Cyrillic table; WO90 batch 1 | +| 5 | Karachay-Balkar | krc | D | Cyrillic table; WO90 batch 1 | +| 6 | Ossetian | oss | D | Cyrillic table; WO90 batch 1 | +| 7 | Udmurt | udm | D | Cyrillic table; WO90 batch 1 | +| 8 | Yakut | sah | D | Cyrillic table; WO90 batch 1 | +| 9 | Kurdish 2012 revision | kur | D | diff against odni-kur-Arab-Latn-2007/2011; WO90 batch 1 | +| 10 | Hebrew | heb | D+M | table is deterministic on pointed text; unvocalized input → existing [[heb-vocalized-plane]] lineage is the companion | +| 11 | Modern Syriac | aii/syc | D+M | pointed table D; primary real-world input is unvocalized → M companion later; resolve syc vs syr/aii codes at encoding | +| 12 | Burmese | mya | D | table deterministic on written form (stacked consonants are explicit); real-world D+M follow-up | +| 13 | Dzongkha | dzo | D | orthographic transliteration table | +| 14 | Lao | lao | D | table deterministic; polyphone disambiguation is a D+M follow-up | +| 15 | Shan | shn | D | table deterministic | +| 16 | Khmer | khm | D+M | table deterministic on written form; subnational vowel/polyphony → existing khm model line is the companion | + +### A2. ALA-LC — 47 catalog gaps (official catalog: 78 tables; 30 encoded) + +Class on the table itself; D+M noted where unvocalized/unsegmented input is the norm. + +| # | System | Class | # | System | Class | +|---|--------|-------|---|--------|-------| +| 1 | Armenian (hye/arm) | D | 25 | Malay (Jawi-Arabic) | D+M | +| 2 | Balinese | D | 26 | Manchu | D | +| 3 | Batak | D | 27 | Mandekan (N'ko) | D | +| 4 | Burmese | D | 28 | Manipuri (Meitei) | D | +| 5 | Cham | D | 29 | Moplah | D+M | +| 6 | Cherokee | D | 30 | Moroccan Tamazight | D | +| 7 | Chinese (Wade-Giles) | D | 31 | Non-Slavic Cyrillic | D | +| 8 | Church Slavic | D | 32 | Ottoman Turkish | D+M | +| 9 | Coptic | D | 33 | Pushto | D+M | +| 10 | Deseret | D | 34 | Romanian (Cyrillic) | D | +| 11 | Hebrew and Yiddish | D+M | 35 | Rusyn | D | +| 12 | Inuktitut | D | 36 | Santali (Ol) | D | +| 13 | Japanese (McCune-Reischauer) | D (kana) / M (kanji readings) | 37 | Shan | D | +| 14 | Javanese/Sundanese/Madurese | D | 38 | Sindhi | D | +| 15 | Jawi-Pegon | D | 39 | Syriac | D+M | +| 16 | Judeo-Arabic | D+M | 40 | Tamashek | D | +| 17 | Kashmiri | D | 41 | Thai | D | +| 18 | Kazakh (Arabic script) | D+M | 42 | Tibetan | D | +| 19 | Khmer | D | 43 | Tod-Oirat-Old Kalmyk | D | +| 20 | Kurdish | D | 44 | Uighur | D+M | +| 21 | Ladino | D | 45 | Urdu | D+M | +| 22 | Lao | D | 46 | Uzbek | D | +| 23 | Lepcha | D | 47 | Vai | D | +| 24 | Limbu | D | | | | + +### A3. DIN — 5 documents (all D) + +Reference collection: 8 DIN PDFs; 4 encoded (32706, 32707, 33903, 33904). + +| Doc | Class | Notes | +|-----|-------|-------| +| DIN 1460-2 | D | subject confirmed against the document at encoding | +| DIN 31635 | D | Arabic | +| DIN 31636 | D | Hebrew column SHIPPED — maps PR #217; Yiddish column still open | +| DIN 32706 | D | SHIPPED — maps PR #216 (Armenian; also closes the ISO 9985 scope gap in A6) | +| DIN 32708 | D | subject confirmed at encoding | + +### A4. BSI — 2 documents (reclassified D -> X, 2026-10-28) + +| Doc | Class | Notes | +|-----|-------|-------| +| BS 2979:1958 | D (via visual reading) | unblocked by owner directive; Russian column SHIPPED — maps PR #219; remaining: ukr/bel/bul/srp columns + Tables D, E, G (WO91) | +| PD 6505:1982 | D (via visual reading) | unblocked by owner directive; scan readable visually, not yet transcribed (WO91) | + +### A5. ICS 630-01 — Annex D Chinese (D) + +29 documents in the reference collection; Annexes encoded through WO-series +(Annex G = PR #213). Annex D (Chinese personal names, pinyin) remains. + +### A6. ISO scope gaps (all D tables; scope, not new authorities) + +| Gap | Class | Notes | +|-----|-------|-------| +| ISO 9 non-Russian Cyrillic coverage | D | verify per-letter coverage of the 1995 table vs corpus | +| ISO 259 Hebrew | D | letter mapping; unvocalized input is Track B | +| ISO 7098 Chinese (pinyin) | D | large per-character table | +| ISO 9985 Armenian | D | closed by DIN 32706 map (maps PR #216), which is aligned with ISO 9985:1996 | +| ISO 15919 Indic remainder | D | enumerate the script set vs corpus; encode the missing scripts | + +### A7. Source-acquisition diffs + +| Item | Class | +|------|-------| +| ICAO systems: obtain current source docs, diff vs corpus | D | +| UNGEGN systems: obtain source docs, diff vs corpus | D | + +**Track A totals: 72 items — 63 D, 8 D+M, 1 M-part (Japanese kanji), 0 X (the two +scan-only BSI documents were unblocked by the owner directive to read the scans +visually). Every remaining table is encodable as a deterministic map.** + +## B. Track B matrix — model lines vs SOTA targets + +| Line | Model / metric | Current | Target | WO | Levers (graph edges) | +|------|----------------|---------|--------|----|----------------------| +| Hebrew vocalization | heb-vocalized-plane-2.0 DER | 8.18 | **DER < 5** (int8 < 6) | 63 | data: additional labeled corpora (Dicta machine labels precedent); plane-conditioning scale; decode policy | +| Arabic vocalization | ara-vocalized-2.0 DER / WikiNews | 2.2864 / 11.83 | **DER < 2.0 / WER < 8** | 64 | r6-morph knowledge injection on v2 lineage; news-domain data; oracle-target quality (r8 noisy-student NEGATIVE — do not retry) | +| Persian registers | fas-phonemic-1.0 CER | 1.6 | **CER < 0.7 all registers** | 66 | register-balanced corpora; G2P lineage (tha-g2p template) | +| Thai phonemic | tha v6a PER (clean split) | 19.29 | **PER < 2** | 67 | lexicon (v6a shipped-candidate line; curriculum NEGATIVE), schedule-matched controls, tha-small 2.85 lineage as student template | +| Khmer Latin | khm-latn-1.0 CER / dict arm | 27.42 / 15.02 (dict-internal) | **CER < 15 + hit-rate** | 68 | lineage recovery (secryst corpus re-derivation, now concrete); owner-gated SEAlang / full Chuon Nath IPA | +| Urdu diac | urd-diac CER | 3.57 | **CER < 3** | 65 | decorrelated teachers only; VRR | +| Urdu G2P | urd-ipa-1.0 CER | 14.77 | license gate green | 65 | BLOCKED-OWNER: commercial-license data selection (option drafts in WO50) | + +Standing negatives — never retry as written: RL distillation, LLM-teacher labels, +noisy-student relabel on correlated teachers, curriculum on full mixes, beam decode +on flat byte students, direct-division Sinkhorn. + +## C. Graph path — reference to SOTA + +```mermaid +flowchart TD + subgraph TrackA[Track A: conformance — 72 items] + REF[reference document
PDF/scan/doc] -->|full transcription| ISC[.isc map
ISO 24229 name] + ISC --> T1[embedded tests
every table row + examples] + ISC --> P1[strict parse
Ruby + TypeScript] + T1 --> CI1[CI: tests + parity green] + P1 --> CI1 + CI1 --> PR[PR to interscript/maps] + PR --> REL[release artifact
maps gem + index] + end + + subgraph TrackB[Track B: SOTA — 6 active lines] + MAPD[conformant map] -->|apply to raw corpus| SILVER[silver pairs
unvocalized → vocalized] + LEX[lexicon / gazetteer / Wikidata] --> GOLD[gold pairs + holdout] + SILVER --> TRAIN[ByT5 train
HF Jobs --detach ≥4h, step ckpts] + GOLD --> EVAL[external protocol eval
DER/CER/PER + VRR] + TRAIN --> EVAL + EVAL -->|meets target| QUANT[int8/fp16 export
delta gate] + QUANT --> PUB[publish_model → GH Releases
+ HF + models.yaml] + PUB --> RUN[runtime: npm gem worker
parity fixtures] + EVAL -->|misses| FB[feedback levers:
data · supervision · features · decode] + FB --> SILVER + FB --> TRAIN + end + + REL -.->|map silver| TrackB + RUN -.->|error mining| FB +``` + +Dependency edges that matter: + +1. Track A maps are the silver-data generators for every Track B line with a + deterministic surface (Hebrew map ↔ vocalization pairs; Urdu ALA-LC ↔ diac pairs; + Khmer BGN/PCGN ↔ latn pairs). Encoding a map feeds its model line. +2. Lexicons gate three targets: Thai (PER < 2 runs through lexicon + schedule controls), + Khmer (open phoneme supply exhausted at ~3.3k gold pairs), Persian (registers). +3. Owner decisions gate two: Urdu G2P license; Khmer SEAlang/Chuon-Nath licensing. +4. The Thai PER < 2 target additionally needs the length-prior mechanism solved + (v6b curriculum NEGATIVE) — filtered fine-tune or compound downweighting. + +## D. Execution order + +- **P0 — deterministic batches, unblocked now (Track A):** + 1. WO90: 8 BGN/PCGN Cyrillic systems + Kurdish 2012 revision (9 maps). + 2. WO91: DIN 5 + BSI 2 + ICS Annex D (8 maps). + 3. WO92: ALA-LC batches — alphabets/syllabaries first (Cherokee, Deseret, Vai, + N'ko, Ol, Meitei, Lepcha, Limbu, …), Arabic-script tables next, Chinese/Japanese last. + 4. WO93: ISO scope gaps + ICAO/UNGEGN acquisition diffs. + 5. Housekeeping: merge PRs #211–#214 (owner authorization); migrate #166/#167 + `.imp` → `.isc`; TS/Python strict-parse port; PyPI trusted publisher. +- **P1 — D+M companions:** after each map ships, open the model-companion work + order only for lines with an existing Track B lineage (heb, aii, khm, urd, ottoman/jawi + as future lines). +- **P2 — Track B pushes (parallel with P0):** + - B1 Hebrew → data lever first (63). + - B3 Arabic → r6-morph injection on v2 + news data (64). + - B4 Urdu diac → decorrelated teacher arms (65). + - B5 Persian → register-balanced corpora (66). + - B6 Thai → schedule-matched controls + lexicon filtering (67). + - B7 Khmer → lineage recovery then owner licensing decision (68). +- **P3 — owner-gated:** Urdu G2P license; Khmer licensing; any new minor version. + +## Acceptance + +- Every row of section A has a merged PR or a recorded blocker with owner decision. +- Every row of section B is at or past its target with external-protocol numbers, + quantization delta green, and runtime parity fixtures shipped. +- No negative lever retried as written; every miss recorded in its WO. diff --git a/TODO.sota/90-wo90-bgnpcgn-cyrillic-batch.md b/TODO.sota/90-wo90-bgnpcgn-cyrillic-batch.md new file mode 100644 index 0000000..b2cf190 --- /dev/null +++ b/TODO.sota/90-wo90-bgnpcgn-cyrillic-batch.md @@ -0,0 +1,74 @@ +# WO90 — BGN/PCGN Cyrillic batch: 8 systems + Kurdish 2012 verdict + +Status: SHIPPED (2026-10-28) — PR #215 +Goal: encode the eight remaining BGN/PCGN Cyrillic systems from the reference +collection; resolve the "Kurdish 2012 revision" item. +Method: transcribe each table in full (every row and note), embed per-row tests plus +the source examples, verify under the Ruby interpreter, strict-parse the corpus, +ship as one PR. +Reference collection: `interscript-references/bgn-pcgn/` (text extracted to +/tmp/wo90-{0..8}.txt; glyph anomalies verified against the PDF text layer). + +## Systems + +| File | Source doc | System date | Checked | Entries | Context rules | +|------|-----------|-------------|---------|---------|---------------| +| bgnpcgn-ady-Cyrl-Latn-2012 | ROMANIZATION OF ADYGHE.pdf | 2012 | 2017-10 | 68 | У word-initial w | +| bgnpcgn-ava-Cyrl-Latn-2011 | ROMANIZATION OF AVAR.pdf | 2011 | 2017-10 | 47 | Е word-initial + post-vowel ye | +| bgnpcgn-chv-Cyrl-Latn-2011 | ROMANIZATION OF CHUVASH.pdf | 2011 | 2017-10 | 37 | Е/Ё initial + post-vowel/post-й-ъ-ь ye/yë | +| bgnpcgn-kbd-Cyrl-Latn-2011 | ROMANIZATION OF KABARDIAN.pdf | 2011 | 2017-10 | 59 | У word-initial w | +| bgnpcgn-krc-Cyrl-Latn-2008 | TABLE OF CORRESPONDENCES FOR KARACHAY-BALKAR.pdf | 2008 | 2017-10 | 38 | У post-vowel w; ъ/ь omitted outside digraphs | +| bgnpcgn-oss-Cyrl-Latn-2009 | ROMANIZATION OF OSSETIAN.pdf | 2009 | 2017-11 | 43 | У three-way (adjacent vowel / post-labializing / u) | +| bgnpcgn-udm-Cyrl-Latn-2011 | ROMANIZATION OF UDMURT.pdf | 2011 | 2017-11 | 38 | Е ye initial, post-vowel, post-йъь, post-дзлнст | +| bgnpcgn-sah-Cyrl-Latn-2012 | ROMANIZATION OF YAKUT.pdf | 2012 | 2017-11 | 40 | Е/Ё initial + post-vowel ye/yë | + +## Source anomalies (documented in the maps, not silently corrected) + +- ADYGHE + KABARDIAN note 4 prints the H̱ inventory codepoint as "0048+0031"; + the glyph shown is h + combining macron below (U+0331) and the tables render the + romanization as the precomposed ẖ (U+1E96). The maps output ẖ (U+1E96) and quote + the note as printed. +- CHUVASH presents Ҫ/ҫ with the Latin Ç codepoints U+00C7/U+00E7 in the document's + text layer. The map accepts both those codepoints and the standard Chuvash + Cyrillic U+04AA/U+04AB, all to ś. +- YAKUT pairs capital Ѳ (text-layer U+0472, FITA) with lowercase ө (U+04E9). The + standard Yakut pair is Ө/ө (U+04E8/U+04E9). The map accepts both capitals to Ö + and records the source pairing. +- OSSETIAN note 2's example output prints "Respublikӕ" with the CYRILLIC ӕ where + the Roman æ (U+00E6) belongs. The embedded test uses Respublikæ and the map + records the source typo. +- YAKUT prints the lowercase form of НЬ as the ligature њ (U+045A). The map maps + нь (U+043D+044C), НЬ, and U+045A to ny and records the presentation. + +## Kurdish "2012 revision" — VERDICT: reissue, no new map + +`Kurdish_system_30April2012.pdf` is headed "ROMANIZATION SYSTEM FOR KURDISH +BGN/PCGN 2007" — the 30 April 2012 file restates the 2007 system already encoded as +`bgnpcgn-kur-Arab-Latn-2007.isc` (all 32 consonant rows, 10 vowel rows, notes 1-7, +special rules 1-7, inventory). No separate system exists; the A1 inventory item +closes as "reissue of 2007". + +Observation recorded for a separate owner decision: in the existing 2007 map the +vowel row 9 (و with macron above, romanized ö, "rare") appears as +`sub "و" "ö"` after `sub "و" "u"` in the same parallel block — dead code +under first-match; the rare row is not reachable. Fix candidate for a dedicated PR; +not bundled here. + +## Acceptance + +- 8 new maps, each with the full table + all notes transcribed and embedded tests + covering every row (upper and lower) plus the source examples. +- All tests pass under the Ruby interpreter; corpus strict-parses (293 files). +- One PR to interscript/maps; coverage docs updated after merge. + +## Result (2026-10-28) + +- 8 maps encoded, 777 embedded tests, all passing under the Ruby interpreter: + ady 137/137, ava 97/97, chv 84/84, kbd 118/118, krc 80/80, oss 90/90, + udm 82/82, sah 89/89. +- Corpus strict parse: 300/300 .isc files. +- Branch `feat/bgnpcgn-cyrillic-batch`, commit 9ef9448, PR + https://github.com/interscript/maps/pull/215 +- Kurdish verdict recorded above (reissue of 2007; no new map). +- Latent-gap observation on bgnpcgn-kur-Arab-Latn-2007 (dead و→ö row) + recorded for a separate owner decision; not bundled here. diff --git a/TODO.sota/91-wo91-din-bsi-ics-batch.md b/TODO.sota/91-wo91-din-bsi-ics-batch.md new file mode 100644 index 0000000..16b3c65 --- /dev/null +++ b/TODO.sota/91-wo91-din-bsi-ics-batch.md @@ -0,0 +1,62 @@ +# WO91 — DIN + BSI + ICS Annex D batch + +Status: IN_PROGRESS (2026-10-28) — 4 of 8 items shipped (maps PRs #216, #217, #218, #219) +Goal: encode the five DIN gaps, the two BSI documents, and ICS Annex D; +A1 items D-classes all deterministic (WO89 section A3/A4/A5). +Reference collection: `interscript-private-references/{din,bsi,ics-630-01}/`; +text extracted to /tmp/wo91-*.txt. + +## Item states + +| Item | Doc | Contents | State | +|------|-----|----------|-------| +| DIN 32706 Armenian | din-32706.pdf (8 pp) | 39-row table aligned with ISO 9985 | **SHIPPED — maps PR #216** (also closes the ISO 9985 scope gap in WO89 A6) | +| BS 2979:1958 | BS-2979-1958.pdf (24 pp) | FIVE systems in one document: "British" Cyrillic (Table A/B), "International" Cyrillic (= ISO/R9, Table C), Church Slavonic (Table D), Rumanian Cyrillic (Table E), Greek (Table G) | **UNBLOCKED by owner directive (visual reading of the scans). Table A Russian column SHIPPED — maps PR #219 (48 rows; examples as tests; rows 45-47 little-yus/fita/izhitsa not rendered — parenthesized cells not legible beyond doubt). Remaining columns of Table A: Ukrainian, Byelorussian (ў→w), Bulgarian (щ→sht, ъ→ŭ), Serbian/Macedonian (latinica: đ for both ђ and ѓ per the footnote, ć for ћ and ќ, dž, dz, lj, nj). Table B/F are back-transliterations (skip; A2 territory). Table C = ISO/R9 (cite). Table D = pdf page 16, Table E = pdf 17, Table G = pdf 20+ (legacy-font text; now also readable visually). Document examples page (pdf 7) gives British+International renderings of 17 periodical titles - test material.** | +| PD 6505:1982 | PD-6505-1982.pdf (49 pp) | Greek transliteration | **UNBLOCKED by owner directive — read visually; not yet transcribed.** | +| DIN 1460-2 | din-1460-2.pdf (29 pp) | Cyrillic alphabets of NON-SLAVIC languages (part 2), 2011-10 | PENDING — 52.8k chars | +| DIN 31635 | din-31635.pdf (29 pp) | Arabic | PENDING — 35.8k chars | +| DIN 31636 Hebrew column | din-31636.pdf (14 pp) | HEBREW (2018-10): **SHIPPED — maps PR #217** (tables 1-6 + section 8 rules over vocalized input; Unicode mark-order normalization; reading-side items documented: matres lectionis, qamats qatan, furtive patah, sheva root exceptions, 8h/8j-k) | +| DIN 31636 Yiddish column | din-31636.pdf (14 pp) | Yiddish vowel table (Table 4), ayin as e, tav as s-with-grave, double forms | **SHIPPED — maps PR #218** (Table 4 spellings as sequence rules; reading-dependent cells resolve first-listed with alternative documented; loshn-koydesh = composition point) | +| DIN 32708 | din-32708.pdf (19 pp) | JAPANESE (2014-08) | PENDING — kana rows deterministic; kanji readings are the one true M-part (WO89 A2) | +| ICS 630-01 Annex D | ANNEX D + Appendices A/B/C | Main annex is name-formatting policy (pinyin; title case; surname first; ü→u; no apostrophes/hyphens; STC codes); the transliteration table is Appendix A | PENDING — Appendix A is a large Hanzi→pinyin table; Appendix B is the Wade-Giles/Gwoyeu/Yale conversion table; Appendix C is the surname list; scope decision: encode Appendix A as the map (large table), record B/C as reference notes | + +## Method notes + +- BS 2979's four encodable systems each become their own map; the document's + "International" Cyrillic table is ISO/R9 and is cited against the existing + iso corpus maps rather than duplicated (WO89 A6 convention). +- PD 6505 has no text layer; options: OCR pass, or manual transcription from + page images. Owner picks the tooling before work starts. +- The ICS Annex D map's input script is Hans/Hant with the Appendix A table; + the name-formatting rules (title case per word, no apostrophe) apply as + post-rules per the main annex text. + +## Vision reading (2026-10-28, third pass) — owner directive + +The owner directed visual reading of scan-only sources. Both BSI documents are +therefore unblocked; no OCR tooling decision is needed. Table A (Russian column) +and the DIN Yiddish column were read from high-resolution page crops +(3x-9x via PyMuPDF clip renders). Recording for the continuation: + +- Table A structure: 48 rows x 5 language columns (Russian, Ukrainian, + Byelorussian, Bulgarian, Serbian & Macedonian); parenthesized cells = obsolete + characters; footnotes: dj/gj alternate to đ; final ъ disregarded. +- Key cross-column cells (from the scans): Г→g/h/h/g/g; Ґ→(g) for ukr/bel; + и: ru i / ukr ȳ; ы→ȳ (ru, bel); й→ĭ; Ў→w (bel); Щ: shch/shch/-/sht; + ъ: “or”/(“or”)/(“or”)/ŭ; Ё→ě (ru, bel); Э→é (ru, bel); ѣ→(ě) rus/ukr/bel/bulg; + Х→kh×4 then h (srp); Ц→ts×4 then c; Ч→č; Ж/Ш→zh/š, sh/š; Тс→t-s ×4, ts (srp); + Ђ→đ, Ѓ→đ, ћ→ć, ќ→ć, Џ→dž, Ѕ→dz, Љ→lj, Њ→nj, Ј→j. +- Rows 45-47 (Ѧ, Ѳ, Ѵ): Bulgarian/Russian cells render only as parenthesized + obsolete marks not legible beyond doubt — not encoded, not guessed. +- Uncertain-by-design choices documented in the maps: ъ→” (of ” or "), ь→’ + (of ' or '), Bulgarian Щ→sht, the BS example diacritic-dropping (NOTE 1). + +## Negative / blocker record (2026-10-28, second pass) + +- BS 2979 and PD 6505 are NOT encodable from their text layers: both documents + present their tables as page images (BS 2979 additionally stores its Greek + table in a legacy 8-bit font). WO89 section A4's class-D assumption for the + BSI pair is corrected to X (owner-gated on OCR/manual-transcription tooling). + No map is written for them; nothing is fabricated from the mojibake. +- DIN subjects confirmed from title pages: 31636 = Hebrew (2018), 32708 = + Japanese (2014), 1460-2 = non-Slavic Cyrillic (2011).