Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .claude/skills/t27f/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,33 @@ the reels. Describing T27F as #1677 is the error this section exists to stop (ow
When asked "how is T27F going", report against the core rows first. Progress on the applications
is not progress on the core.

**Trap: a name declared in two specs cannot be imported (t27#10556).** Measured on t27c 0.5.2:
`use t27f::lesson_reel::phrase_start` returns `UNRESOLVED ... ambiguous, not spliced`, because
`token_floor_mux.t27` declares a private `fn phrase_start`. The same happens to `cta_from` and
`voice_fits`. The explicit path does not help. Before you plan a new module on top of a reel spec,
grep `specs/` for every name it would import. If any of them collides, put the new code inside the
spec that owns those names, under a prefix such as `beat_`. The beat clock (t27#10596, PR #10598)
lives in `lesson_reel.t27` for this reason.

**Cutting video at a ms time: land on a frame, then measure the runs (t27#10603, PR #10605).**

ffmpeg `xfade` starts on the first frame whose time is at or after `offset`. This is how to get the cut you planned:

- Floor the cut to a base frame: `f = (c - half) * fps / 1000`.
- Print the offset as `trunc(f * 1000 / fps)` ms. Rounding up misses frame f on 2 frames in 3.
- Put every input through `fps=30,settb=AVTB` so the offset is not rounded again.
- Chained `xfade` offsets are absolute reel times when each clip starts at its own frame 0.

To check a graph without looking at pictures:

1. Feed it solid `color=` inputs at `s=2x2`.
2. Write `-f rawvideo -pix_fmt rgb24`.
3. Count the runs with `od -An -tu1 -w12 -v | cut -c1-12 | uniq -c`.

The runs are the scene lengths and must equal the spec's frame counts. Expect one extra frame when the offset falls on a whole ms.

Lesson main functions read `std.c.getenv`, so build them on the lab with `zig build-exe -lc`.

## Show a spec (the core: exporter for what it reads, by hand for the rest)

1. Load the spec: `mcp__t27__t27_spec` with `path` and `source: true`, or the file from a
Expand Down
20 changes: 12 additions & 8 deletions .trinity/seals/t27f_lesson_reel.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
"spec": "specs/automation/owner_voice_reel.t27",
"spec_hash": "sha256:76c0df8e57686a90b3bce85bcb0148cbed7fd05da724b217ef53fa468664f151"
},
{
"spec": "specs/t27f/reel.t27",
"spec_hash": "sha256:c47b21cea1d7169da6528e321cf2d2c513d3f552c0cd04fe9d37bbd5314ccacf"
},
{
"spec": "specs/t27f/reel_marketing.t27",
"spec_hash": "sha256:ab07f6476d900cc0e089ba1d851f0b610a77b778f00fd906d1b98a29281941c7"
Expand All @@ -27,23 +31,23 @@
}
],
"config": "gen=c,rust,verilog,zig;tests=zig",
"gen_hash_c": "sha256:74d5f5d8fad98ead782f6c26309ed349da58471650642503a13a8e32cb7427ae",
"gen_hash_rust": "sha256:ccc5014bd6bf09ba55b21e4d5bd5fb80383c36cce4d83468812bdd4fadd04835",
"gen_hash_verilog": "sha256:f956226ada7459fc5d856060971f9160ab41ee78b1a5dbf713ad8531e3d41abd",
"gen_hash_zig": "sha256:42635d596d160c7c49521929d8e4f8f640f89a3180b5e1ac118c0177c4d14545",
"gen_hash_c": "sha256:45fe54cd4be6d62ca81d3decf493c9999a451c7bc4149e49f86c0edc676e6265",
"gen_hash_rust": "sha256:1b2673482a4af8a938ef6146a88f87aa619a7e4e4d5b9c1155b91cf20eb65e01",
"gen_hash_verilog": "sha256:00b75242dd4b9b49a1bbb2720d3a7b817dd8715d1d8a6f36b80cdf83145f0a04",
"gen_hash_zig": "sha256:a45ecc01256a49e9d61781595043045a7ff98f34abfe22df6ae3b6bb8f7dd8a9",
"module": "lesson_reel",
"ring": 12,
"seal_schema": 2,
"sealed_at": "2026-10-18T15:14:32Z",
"sealed_at": "2026-10-18T18:44:43Z",
"sealed_by": "t27c-bootstrap@0.5.2",
"spec_hash": "sha256:0c527e6415d5ffe600cd425db2456e1691e47bcaaf69cf5af0b856bb8bfec66e",
"spec_hash": "sha256:69663c90a7ad61dbdf5a017d97f28d2dc0c885dae0643a361d43bbae31787a9a",
"spec_path": "specs/t27f/lesson_reel.t27",
"tests": {
"failed": 0,
"failing": [],
"forced": false,
"passed": 6,
"total": 6,
"passed": 17,
"total": 17,
"vacuous": 0
},
"toolchain": {
Expand Down
Loading
Loading