Files
hyperframes/.agents/skills
James RussoandClaude Opus 4.7 807078c7cd docs(skills): make captions non-optional in changelog-video (#2729)
* docs(skills): make captions non-optional in changelog-video

The Jul 13-20 build shipped without captions because the pipeline had two soft
failure modes:

- Empty vo-words.json from the TTS provider was silently accepted, so
  align-captions.mjs had nothing to align. captions.json was never produced.
- Step 5 tolerated the master-skeleton's LINES array staying empty. The build
  lint-checked and validated clean, but the caption rail rendered no text.

This adds three hard gates on top of the existing scaffold:

- Step 4 adds a whisper forced-alignment fallback so a missing TTS timestamp
  payload no longer breaks the caption pipeline. Whisper only supplies timings;
  captions still use the DISPLAY layer from script-tokens.json.
- Step 5 flags an empty LINES array as a shipped bug and shows the exact
  IIFE-input shape it expects.
- Step 6 adds gate 5: sample 3-4 frames across the VO window and confirm visible
  caption text on each. If any spoken window renders no caption, the build is
  red.

Anti-patterns table gets two rows covering the empty-LINES and
missing-word-timings failure modes. .claude and .agents mirrors stay
byte-identical.

Follow-up to #2669 (pre-build gate); paired with the v5 rebuild that
retrofitted captions onto the shipped Jul 13-20 video.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* docs(skills): bump changelog caption size to 32px for phone-screen legibility

25px reads too small at 1080² when the video is viewed on a phone without
zoom. Bumped to 32px (font-size 25→32, top 1002→990, height 40→52, alpha
.92→.94) so captions carry across small-screen playback. Change is CSS-only
on the master-skeleton; existing per-scene chrome and layouts are untouched.

Retrofitted the Jul 13-20 v6 build with the same values (identical CSS
block) so the shipped video and the future default match. .claude and
.agents mirrors stay byte-identical.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* docs(skills): sync caption position refs to top: 990 across SKILL.md + build-spec

Miga caught: the master-skeleton bump to top: 990 / 32px / height: 52 was
not reflected in the SKILL.md prose or build-spec.md. All three files now
name the same values so the doc, gate, and code stay consistent. Also
clarifies build-spec.md's caption-rail line to point at SKILL.md step 5 as
the source of the LINES-populated requirement.

.claude and .agents mirrors byte-identical.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* docs(skills): sync script-voice.md caption rail to top: 990 / 32px

Third and final stale reference to top: 1002 / 25px — script-voice.md was
still stating the pre-bump values. Now matches master-skeleton.html,
build-spec.md, and SKILL.md. Also bumps the 'keep critical small text out'
guidance from ~80px to ~100px to reflect the slightly taller caption rail.

Full-directory sweep confirms zero remaining occurrences of 1002 or 25px
across .claude/ and .agents/ skill mirrors.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-21 20:38:46 -04:00
..

Project-local Codex CLI skills

Skills in this directory are auto-discovered by Codex CLI (verified against Codex 0.144.3) when the hyperframes repo is opened as the working directory. They are NOT part of the marketplace-distributed plugin (that set lives under skills/ and is manifested by .codex-plugin/). Two separate namespaces, on purpose:

  • .agents/skills/repo-native, run only against this repo (weekly changelog videos, doctrine-heavy authoring flows). Codex CLI's project-local skill dir.
  • skills/marketplace-distributable, installed into other projects via npx hyperframes skills or npx skills add heygen-com/hyperframes.

Weekly changelog video

The changelog-video skill turns a weekly changelog markdown into a ~4560s branded 1080×1080 MP4 (motion-doctrine layout, Annie VO, seam-gated cuts, caption rail). It ships pre-configured — fonts, background pattern, house BGM, lexicon, and the align-captions script all live inside changelog-video/. Its five dependency skills (motion-doctrine, cut-the-curve, captions-overlay, seam-craft, oversized-cursor) sit alongside so the router graph is complete on clone.

Weekly usage:

  1. Regenerate the digest markdown for the target range: bun run changelog:weekly --from YYYY-MM-DD --to YYYY-MM-DD (this only reads git; the --write variant is what the docs cron uses).
  2. In Codex CLI at the repo root, invoke /changelog-video with the generated markdown. The agent will present its script + visualization plan for review before rendering.
  3. Accept, and the agent produces weekly-changelog-<range>.mp4 gated by hyperframes check (0 errors) + seam-gate verify (0 fail/warn).

TTS uses the tracked skills/hyperframes-media/scripts/heygen-tts.mjs (no extra install needed). Runtime dependencies you need on PATH:

  • Node ≥ 22
  • HeyGen CLI ≥ 0.3.0, authenticated via heygen auth login --oauth
  • ffmpeg (for VO wav conversion + frame QA)
  • A headless Chrome for HyperFrames rendering (hyperframes doctor will point out the exact ask if it's missing)

The parallel set at .claude/skills/ is a byte-identical copy so Claude Code users get the same auto-discover behaviour — keep the two in sync when editing. A scripts/check-skill-mirror.mjs check enforces this at CI time.