Repository navigation
t27f factory R3: a renderer per scene archetype and the still anomaly gate (SSIM) #10571
Description
Sub-issue R3 of epic #10560 (T27F content factory). R1 and R2 (the plan and its uniqueness tests) are specs/t27f/reel_factory.t27, PR #10566.
The plan gives each of the 27 course-0 lessons one of 12 scene archetypes (code, graph, tests, trit, loop, branch, data, links, guard, title, task, map), but nothing draws them yet: the reels still show token_floor's physics world. This issue adds a renderer per archetype, built on the still recipe of specs/claw/reel_still.t27 (PR #10548), and the anomaly gate that refuses two stills which look alike.
Boundary
- In: new specs under
specs/t27f/(the 12 scene renderers, the shared raster and SSIM helpers, the still gate), their tests, their seals, and their t27b ledger rows. - Out:
lesson_reel.t27reading the plan (R4), TRI CLAW skill cards (R5),tricommands (R6), the voice and the music, publishing. Noout-reels/file is added to the repository; stills are rendered on the Railway lab and measured there. - Hard rules: only t27 (no probe, loader or render script in another language), nothing is built or run on the Mac, and no spec in the t27b corpus gets a printing
main(the not-pass cap of the t27b ledger only moves down).
User Scenarios
- The owner asks for the covers of course 0. Each lesson's still shows the scene its plan names, and the hero of that scene is drawn from the lesson's own code: a code minimap, the declarations of a graph, the asserts of a test column, the trits of a field, the loops, branches, fields,
useedges and invariants it counts. - A reviewer runs the gate. It renders the 27 course-0 stills, compares every pair, and prints the most-similar pair with its score. A pair above the bound fails the run.
- A new course arrives as data. Its stills come from the same renderers with no hand edit.
Requirements
- R3.1. One renderer per archetype, in t27, in
specs/t27f/: a pure function from (lesson, pixel) to a colour, using the lesson's code, title or task fromreel_topics, the accent, motion and layout fromreel_factory, and the framestill_frame()ofreel_still. - R3.2. Each renderer has tests: it reads the lesson's own content (changing the lesson changes the picture), it draws inside the canvas, and a negative control fails when the content is not read.
- R3.3. A still gate: render the 27 course-0 stills at gate size on the Railway lab, compute SSIM for each of the 351 pairs, report the most-similar pair and its score in permille, and refuse any pair above
SIMILAR_MAX_PERMILLE(850). - R3.4.
t27c test-reportpasses with 0 vacuous tests,t27c seal --save/--verifymatch, and the t27b ledger rows are added without raising the not-pass cap.
Success Criteria
- Every renderer spec passes
t27c test-reporton the Railway lab with 0 vacuous. - The 27 stills are rendered on the lab (
~/t27-lanes/fs-lab.sh), never on the Mac; the gate prints the most-similar pair and its score, and that score is at most 850 permille. - Seals match with
seal --verify; the t27b ledger rows arepassandmax_not_passdoes not rise. - The PR is non-draft, English, closes this issue, and adds nothing under
out-reels/.
Requirements
FR-001: For each of the 12 scene archetypes, a renderer spec MUST exist in specs/t27f/ as a pure function mapping (lesson, pixel) to colour, consuming lesson code/title/task from reel_topics, accent/motion/layout from reel_factory, and still_frame() from reel_still.
FR-002: Each renderer spec MUST have tests verifying that changing lesson content changes the rendered output, that drawing stays within canvas bounds, and that a negative control (content not read) fails.
FR-003: A still gate spec MUST render all 27 course-0 stills at gate size on the Railway lab, compute SSIM for all 351 pairs, report the most-similar pair and its score in permille, and fail if any pair exceeds SIMILAR_MAX_PERMILLE (850).
FR-004: The t27c test-report MUST pass with 0 vacuous tests, t27c seal --save and --verify MUST match, and t27b ledger rows MUST be added without increasing max_not_pass.
Success Criteria
t27c test-report specs/t27f/renderer_*.t27exits 0 with 0 vacuous tests~/t27-lanes/fs-lab.shexits 0 and prints the most-similar pair with score ≤ 850 permillet27c seal --verifyexits 0 and t27b ledger shows 12 pass rows withmax_not_passunchangedgit diff --name-only HEAD~1shows no paths underout-reels/and PR metadata validates non-draft, English, closes t27f factory R3: a renderer per scene archetype and the still anomaly gate (SSIM) #10571
Activity
t27f: scene_raster.t27 -- shared integer raster for the scene rendere…
t27f: scene_code.t27 (WIP, #10571)
t27f: scene_still.t27 dispatcher (WIP, #10571)
t27f: scene names are unique (WIP, #10571)
t27f: scene_lex.t27 -- lesson lines, bytes and keyword counts for the…
t27f: scene_bg and the 11 remaining scene renderers, dispatched from …
t27f: scene_tests ch is i32 (WIP, #10571)
t27f: unique scene constants, scene_tests negative control finds its …
t27f: scene_tests negative control checks a row without an assert (WIP,
t27f: still_gate -- block SSIM over the 27 stills, worst pair and ref…
t27f: still_gate pins the measured worst pair, lessons 8 and 20 at 60…
t27f: scene specs spell the floor modulo as fmod so t27b can compile …
t27f: scene_still test steps to the next archetype without a modulo (…
t27f: seals, t27b ledger rows and skill row for the scene renderers a…
github-actions commentedon Oct 18, 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: re-seal scene_code, bless the i32 clamp twin (Refs #10571)
t27f skill: preview the factory's stills as a video, and the L1 carry…
Merge master into claude/t27f-r3-scenes (Refs #10571)
t27f: scene renderers for the 12 archetypes and the still anomaly gat…