Skip to content

t27f: scene renderers for the 12 archetypes and the still anomaly gate, R3 (Closes #10571) - #10770

Merged
gHashTag merged 4 commits into
masterfrom
claude/t27f-r3-scenes
Oct 19, 2026
Merged

gHashTag merged 4 commits into
masterfrom
claude/t27f-r3-scenes

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Closes #10571. Part of epic #10560 (R3). Supersedes #10592.

Why a new PR

#10592 could not pass L1: 16 of its WIP commits named the issue without a linking keyword, and its history cannot be rewritten without a force-push. This PR carries the same work as one commit on master's tip. Its tree equals #10592 merged with master, plus two fixes for the duplicate-bodies check.

What this does

reel_factory.t27 plans one of 12 scene archetypes per lesson. Before this PR, no code drew the plan. This PR adds one renderer per archetype, each drawing the lesson's own content as a still. It also adds a gate that compares the stills.

  • Shared parts:
    • scene_raster.t27: an integer raster with colours, discs, rings, segments and a bitmap font.
    • scene_lex.t27: the lesson's lines, bytes and keyword counts.
    • scene_bg.t27: a backdrop seeded by the lesson.
  • 12 renderers, one .t27 each: code, graph, tests, trit, loop, branch, data, links, guard, title, task and map. Each is a function <name>_px(t, acc, n, x, y) on a 360 x 640 canvas. scene_still.pixel dispatches by archetype and applies the plan's accent, motion and layout.
  • still_gate.t27:
    • Renders the 27 course-0 stills at 108 x 192 luma.
    • Scores all 351 pairs with an integer block SSIM.
    • Refuses the course when the most similar pair is above 850 permille.
    • Measured worst pair: lessons 8 and 20 at 607 permille, which the test pins.
  • claw/reel_still, claw/visual_output: TRI CLAW's still tool and its visual-output rule.

Fixes over #10592

  • scene_code: calls scene_lex's lex_letter instead of a copy of its body. Its seal is re-saved.
  • scene_raster's i32 clamp: has the same body as igla/coder/prm.t27's f32 clamp. The types differ, so neither can call the other. The ledger now records the copy as deliberate (clamp 6 -> 6,2, written by tools/dupe_scan.py --bless).
  • Ledger rows: the conflicts with master are resolved as a union of rows.

Evidence (Railway lab, 355d44a)

  • Tests: t27c test-report on all 19 R3 specs: 91 of 91 tests pass, 0 vacuous.
  • Seals: t27c seal --verify reports all hashes MATCH for all 19.
  • Duplicates: tools/dupe_scan.py is clean after the bless: "no new duplicate body, and none of the known groups grew".
  • t27b: the lab is x86_64 and the t27b JIT runs only on arm64, so the pass verdict comes from the arm64 CI job.
  • Preview render: a lab-only printer module (.t27, not committed) dumped all 27 stills at 360 x 640.
    • ffmpeg made a 720 x 1280 preview of 21.6 s, 648 frames.
    • Each still has 9 to 14 flat colours.
    • No render output is committed.

Not claimed

  • SSIM on luma sees layout and contrast, not meaning.
  • lesson_reel still draws token_floor. That is R4, next.

🤖 Generated with Claude Code

gHashTag and others added 2 commits October 19, 2026 08:50
…e, R3 (Closes #10571)

Squash of PR #10592 onto master's tip. Its WIP commits named the issue
without a linking keyword, which L1 refuses, and the history cannot be
rewritten.

- scene_raster, scene_lex, scene_bg: the shared integer raster, the
  lesson's own lines and bytes, and the per-lesson background.
- One scene_<archetype> renderer for each of the 12 archetypes that
  reel_factory plans, plus scene_still, which dispatches on the plan.
- still_gate: block SSIM over the 27 stills, with the worst pair pinned.
- claw/reel_still and claw/visual_output: TRI CLAW's still command.

scene_code now calls scene_lex's lex_letter instead of a copy of its
body, which the duplicate-bodies check refused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
scene_raster's i32 clamp has the same body as igla/coder/prm's f32
clamp. The types differ, so neither can call the other; the copy is
deliberate and the ledger now says so (clamp 6 -> 6,2, via
tools/dupe_scan.py --bless on the Railway lab).

scene_code's seal is re-saved after it switched to lex_letter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… recipe (Refs #10571)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The only conflict was tools/duplicate_bodies_baseline.txt: this branch raised
clamp to 6,2; master added block_ids_equal 6 and lowered clear to 6. Resolved
three-way (clamp 6,2; clear 6; block_ids_equal 6). docs/reports/t27b_expectations.json
merged cleanly and parses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-19 02:21:20 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 43
PRs with All Checks Green 7
READY 2
FAILING 43
PENDING 0
NO CHECKS YET 0

These columns do not partition: 2 + 43 + 0 + 0 = 45, and there are 50 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=fad12492937a != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

t27f factory R3: a renderer per scene archetype and the still anomaly gate (SSIM)

1 participant