Skip to content

t27f: idea factory cover still -- COVER=1 renders the reel's settled title frame, byte-identical to the reel #10828

Closed

Description

@gHashTag

Part of epic #10560 (the t27f content factory).

Instagram Reels, YouTube Shorts and TikTok each show one still before a reel plays: the cover. Today the idea factory renders only the full reel. To get a cover, someone has to cut a frame out with ffmpeg and guess which frame shows the title once it has settled. Competitors make the still from the same source as the video (Remotion renderStill, CapCut and Opus Clip auto-covers). The factory should make it from the spec too, so the cover can never come from a different idea or preset than the reel.

Boundary

  • specs/t27f/idea_factory.t27, plus its seal .trinity/seals/t27f_idea_factory.json.
  • .claude/skills/t27f/SKILL.md: one bullet on how to cut a cover.
  • No other spec changes. This does not touch particle_ds, scene_raster or glyph57.

Scenarios

  1. COVER = 0 (the default): the binary writes exactly the reel it writes today, every byte.
  2. COVER = 1: the binary writes one 1080x1920 RGB24 frame, 6220800 bytes, and nothing else.
  3. That frame is byte-identical to frame cover_frame(IDEA) of the COVER = 0 reel.
  4. cover_frame(t) is the last frame of the first scene, when the law's clock has run out and the title has settled.
  5. An idea that preflight refuses still writes 0 bytes under COVER = 1.

Requirements

Criteria

  • t27c test-report passes with 0 vacuous tests. New tests: cover_frame is in scene 0, inside the reel, and at live(...) == 0, for the sample idea, CTA, RU_IDEA and the batch ideas.
  • On the lab, binaries generated with COVER = 1 write 6220800 bytes. cmp against the matching slice of the COVER = 0 output reports no difference. A control, with the cover moved one frame, does differ.
  • The COVER = 0 output is md5-identical to the binary before this change.
  • Mutants of cover_frame and of the raster guard are killed.
  • The t27b front end reports 0 unsupported constructs. The seal matches.

Requirements

FR-001: The spec specs/t27f/idea_factory.t27 MUST declare pub const COVER : i32 = 0; and pub fn cover_frame(t) -> i32.

FR-002: When COVER = 1, main MUST simulate frames 0..cover_frame(IDEA) but MUST raster only the final frame, so physics state matches the COVER = 0 reel.

FR-003: The COVER = 1 binary MUST write exactly one 1080x1920 RGB24 frame (6,220,800 bytes) and nothing else.

FR-004: The frame produced under COVER = 1 MUST be byte-identical to frame cover_frame(IDEA) of the COVER = 0 output.

FR-005: cover_frame(t) MUST return the last frame of the first scene where the law's clock has run out and the title has settled (live(...) == 0).

FR-006: An idea rejected by preflight MUST produce 0 bytes of output when COVER = 1.

FR-007: The new code MUST contain no ! (codegen trap #6549).

FR-008: .claude/skills/t27f/SKILL.md MUST gain one bullet describing how to cut a cover.

FR-009: The seal .trinity/seals/t27f_idea_factory.json MUST be updated to match the changed spec.

Success Criteria

  • t27c test-report passes with 0 vacuous tests; new tests verify cover_frame is in scene 0, inside the reel, and at live(...) == 0 for sample idea, CTA, RU_IDEA, and batch ideas — exit 0
  • COVER=1 binary writes 6220800 bytes; cmp <(./bin COVER=1) <(dd if=./bin COVER=0 bs=6220800 skip=1 count=1 2>/dev/null) reports no difference; same cmp with cover frame ±1 differs — exit 0
  • COVER=0 output is md5-identical to pre-change binary — md5sum matches — exit 0
  • Mutants of cover_frame and the raster guard are killed — 5 tests minimum
  • t27b front end reports 0 unsupported constructs — exit 0
  • Seal .trinity/seals/t27f_idea_factory.json matches regenerated spec — exit 0

Activity

  1. added
    shape-refusedClosed by the issue-shape gate (specs/policy/issue_shape.t27); a passing edit reopens it
    on Oct 19, 2026
  2. github-actions commented on Oct 19, 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
  3. gHashTag commented on Oct 19, 2026

    @gHashTag
    OwnerAuthor

    Reopened: the body now passes the generated issue-shape check (check_issue() from gen/c/policy/issue_shape.c, exit 0 on the Railway lab; a body with only a Boundary exits 1 as the control). The PR that closes this issue is resynced on master and its seal re-saved.

  4. removed
    shape-refusedClosed by the issue-shape gate (specs/policy/issue_shape.t27); a passing edit reopens it
    on Oct 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions