Skip to content

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

Closed as not planned

Description

@gHashTag

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.t27 reading the plan (R4), TRI CLAW skill cards (R5), tri commands (R6), the voice and the music, publishing. No out-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

  1. 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, use edges and invariants it counts.
  2. 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.
  3. 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 from reel_topics, the accent, motion and layout from reel_factory, and the frame still_frame() of reel_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-report passes with 0 vacuous tests, t27c seal --save / --verify match, and the t27b ledger rows are added without raising the not-pass cap.

Success Criteria

  • Every renderer spec passes t27c test-report on 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 are pass and max_not_pass does 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_*.t27 exits 0 with 0 vacuous tests
  • ~/t27-lanes/fs-lab.sh exits 0 and prints the most-similar pair with score ≤ 850 permille
  • t27c seal --verify exits 0 and t27b ledger shows 12 pass rows with max_not_pass unchanged
  • git diff --name-only HEAD~1 shows no paths under out-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

  1. added
    shape-refusedClosed by the issue-shape gate (specs/policy/issue_shape.t27); a passing edit reopens it
    on Oct 18, 2026
  2. github-actions commented on Oct 18, 2026

    @github-actions
    Contributor

    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.

    • missing: ## Requirements -- numbered obligations, FR-001: ... MUST ...
    • missing: ## Success Criteria -- an outcome a machine can settle: a number with a unit, a backticked file, exit 0, or a backticked command
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    queen-shapedshape-refusedClosed by the issue-shape gate (specs/policy/issue_shape.t27); a passing edit reopens it

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions