Repository navigation
t27f: Cyrillic idea factory -- UTF-8 ideas set in a 5x7 particle font #10788
Description
Part of epic #10560. Follows the idea factory (#10771, PR #10784).
The idea factory reads its idea as ASCII and sets it in scene_raster's 3x5 font, which has no Cyrillic. The owner's reels are Russian. Today the Russian reels (lesson_reel, token_floor) draw their text with a TTF font through ffmpeg drawtext. That text is not made of particles and cannot move to the FPGA path. A 3x5 cell is also too small for Cyrillic letters such as Zh, Sh, Shch and Yu.
Boundary
- New:
specs/t27f/glyph57.t27.- UTF-8 decoding:
cp_len,cp_atandcp_count. A malformed byte reads as one byte. - Case folding: Latin a..z, Cyrillic a..ya and yo fold to upper case.
- The 5x7 font:
- glyphs for ASCII 32..95 and for the 21 Cyrillic capitals with no Latin look-alike;
- the 11 look-alikes (A, Ve, Ie, Ka, Em, En, O, Er, Es, Te, Ha) and Yo reuse Latin glyphs through a 32-entry map;
- an unknown code point draws as
?.
- Integer only: lookups and compares.
- UTF-8 decoding:
- Changed:
specs/t27f/idea_factory.t27.- It wraps by characters, not bytes.
- It sets text in the 5x7 font, with a 6-pixel advance and a line pitch of 9.
- It accepts UTF-8 ideas, written with
\xNNescapes because L3 keeps sources ASCII-only.
- Out of scope: lowercase glyphs, voice, and Verilog synthesis.
Scenarios
- An idea in Russian, for example "particles build the frame" written in UTF-8, wraps by letters. A 7-letter Russian word, 14 bytes long, stays on one line.
- Lower- and upper-case Russian light the same cells.
- The English sample idea still gives 7 lines, 2 scenes and 216 frames.
Requirements
- Decoding is pinned by tests: Zh (U+0416) is
D0 96; yo (U+0451) folds to Yo (U+0401); a stray continuation byte counts as one character. - No two stored glyphs share a bitmap, and the space glyph is blank.
- Every look-alike letter lights exactly the cells of its Latin twin.
- Every target of every scene stays inside the frame. A scene lights at most MAXCELLS cells.
Criteria
t27c test-reportpasses on both specs with 0 vacuous tests (Railway lab).- Seals are saved and verified.
tools/dupe_scan.pyis clean.- A Russian preview reel is rendered on the lab and shown to the owner.
🤖 Generated with Claude Code
Requirements
FR-001: The glyph57 spec MUST provide UTF-8 decoding with cp_len, cp_at, and cp_count where a malformed byte reads as one byte.
FR-002: The glyph57 spec MUST implement case folding for Latin a..z, Cyrillic a..ya, and yo to upper case.
FR-003: The glyph57 spec MUST define a 5x7 font with glyphs for ASCII 32..95 and the 21 Cyrillic capitals with no Latin look-alike.
FR-004: The glyph57 spec MUST map the 11 look-alike Cyrillic capitals (A, Ve, Ie, Ka, Em, En, O, Er, Es, Te, Ha) and Yo to their Latin glyphs through a 32-entry map.
FR-005: An unknown code point in the glyph57 spec MUST draw as ?.
FR-006: All lookups and comparisons in the glyph57 spec MUST use integer arithmetic only.
FR-007: The idea_factory spec MUST wrap text by Unicode characters, not bytes.
FR-008: The idea_factory spec MUST set text in the 5x7 font with a 6-pixel advance and a line pitch of 9.
FR-009: The idea_factory spec MUST accept UTF-8 ideas written with \xNN escapes.
FR-010: Decoding MUST be pinned by tests: Zh (U+0416) is D0 96; yo (U+0451) folds to Yo (U+0401); a stray continuation byte counts as one character.
FR-011: No two stored glyphs in the glyph57 spec MUST share a bitmap, and the space glyph MUST be blank.
FR-012: Every look-alike letter in the glyph57 spec MUST light exactly the cells of its Latin twin.
FR-013: Every target of every scene in the idea_factory spec MUST stay inside the frame, and a scene MUST light at most MAXCELLS cells.
Success Criteria
t27c test-report specs/t27f/glyph57.t27passes with 0 vacuous tests and exit 0t27c test-report specs/t27f/idea_factory.t27passes with 0 vacuous tests and exit 0- Seals for
specs/t27f/glyph57.t27andspecs/t27f/idea_factory.t27are saved and verified with exit 0 tools/dupe_scan.pyruns clean with exit 0
Activity
Merge master into claude/t27f-cyrillic; list five t27b-pass specs in …
github-actions commentedon Oct 19, 2026
Closed by the issue-shape gate (specs/policy/issue_shape.t27, #7498): an issue must have the template's sections. Edit the body; an edit that passes reopens it.
FR-001: ... MUST ...exit 0, or a backticked commandt27f skill: a new spec's t27b ledger row comes from the arm64 run, ke…
Ledger: glyph57 and petal_menu pass the t27b front end (Refs #10788)
Ledger rows for mos_psp103 and re-sealed frontend, both inherited fro…
Ledger row for sar_switch, another master spec landed without one (Refs
Ledger: sar_switch sorts after sar_comparator (Refs #10788)
t27f: Russian ideas in the factory -- UTF-8 and a 5x7 Latin and Cyril…
skills: t27/idea-factory card -- TRI CLAW unpacks any idea in any par…
t27f: idea factory picks its style preset from a hash of the idea, PR…
t27f: idea factory batch -- five ideas cover all five presets, and th…
t27f: idea factory pre-flight -- refuse an idea the font cannot draw …
t27f: idea factory cover still -- COVER=1 writes the reel's settled t…