You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
WA multibyte alphabets render but never commit output (no text produced when steering) #70
Every WorldAlphabets alphabet with multi-byte symbols (Arabic, Hebrew, Amharic, Urdu, …) renders a weighted tree after the colour-token fix (da2e558) but produces no output when steered — dasher_get_output_text stays empty forever. WA ASCII alphabets (English) output fine; legacy v5 multibyte alphabets (Russian) output fine.
Evidence (engine-level probes, no fonts involved)
Identical steering program (fixed coordinates, hold, 100–1000 frames, turbo constant-time convention that reliably yields output for other alphabets):
Alphabet
Output
CSymbolNode::Do() calls
English with limited punctuation
'I'
fires
English (WorldAlphabets)
'w'
fires
Russian (v5, Cyrillic = multibyte)
non-empty
fires
Hebrew/Arabic/Amharic/Urdu (WA)
0 bytes
never fires
engineError stays 0; no log messages; no crash.
CDasherModel::GetOffset() shows m_pLastOutput set (root path) but never advances — OutputTo(node) never receives an unseen node, so Do()/actions never run.
Not geometry: swept x∈{40,100,700,760} and y∈{100..500} — no coordinate commits.
Reproduced on pre-PR main (901e4d8, eager parsing) with the colour-fixed data — zero output there too. Nobody could see this before because these alphabets rendered invisible (#69 colour tokens) until da2e558.
Suspects
The distinguishing parse shape is WA node elements whose multi-byte label becomes both Display and Text (no text attr), combined with duplicate symbols (Hebrew: 27, Arabic: 36, Amharic: 282 — every WA multibyte file has dups; WA English has none). The commit path (Reparent_root/Render→OutputTo) appears to depend on something the duplicate/multibyte map breaks — likely interaction with CAlphabetMap lookups during root rebuild (RebuildFindFromOffset text→symbol round-trip).
Probe binaries and methodology available; DODUMP instrumentation point: CSymbolNode::Do() in AlphabetManager.cpp.
Impact
All WA-served RTL/Indic/Ethiopic/… languages are view-but-cannot-write. Combined with the 148-of-474 missing training corpora, the WA usability tail is: render ✓ (fixed), train (148 missing corpora), write ✗ (this issue).
Resolved — with a twist: this decomposed into two non-bugs and one real bug.
RTL alphabets were never broken. The crosshair mirrors to the LEFT edge for RTL orientation; steering from the left works fine (engine probes: Hebrew 134 bytes, Arabic 100 bytes). It looked unwritable because the glyphs rendered as tofu (GTK canvas font — fixed in Dasher-GTK#71), so there was nothing meaningful to aim at.
The real bug: informational warnings paused Dasher forever.FormatMessage hardwires the modal path, which pauses the input filter; the unpause path is only reachable after the model moves — impossible while paused. The trainer fires such a warning at startup for every alphabet lacking a (shipped) training corpus: Amharic, Adangbe, Azeri, and ~148 more. All rendered fine but froze on first input. Fixed in the attached PR: non-modal FormatInfoMessage for the trainer warnings (Amharic 0→81 B, Adangbe 0→44 B).
Follow-up kept open here: the modal-pause deadlock itself (onUnpause unreachable while paused) remains latent for genuinely modal messages — worth its own fix eventually.
Decomposed and resolved: RTL was never broken (mirror steering — see GTK PR #71 for the tofu that obscured it); the real bug (modal warning pauses forever on training-less alphabets) is fixed in PR fix/wa-multibyte-output; the latent modal-unpause deadlock is noted for follow-up.
Activity
willwade commentedon Aug 29, 2026
Resolved — with a twist: this decomposed into two non-bugs and one real bug.
FormatMessagehardwires the modal path, which pauses the input filter; the unpause path is only reachable after the model moves — impossible while paused. The trainer fires such a warning at startup for every alphabet lacking a (shipped) training corpus: Amharic, Adangbe, Azeri, and ~148 more. All rendered fine but froze on first input. Fixed in the attached PR: non-modalFormatInfoMessagefor the trainer warnings (Amharic 0→81 B, Adangbe 0→44 B).willwade commentedon Aug 29, 2026
Decomposed and resolved: RTL was never broken (mirror steering — see GTK PR #71 for the tofu that obscured it); the real bug (modal warning pauses forever on training-less alphabets) is fixed in PR fix/wa-multibyte-output; the latent modal-unpause deadlock is noted for follow-up.
fix: informational warnings no longer pause Dasher — training-less al…