feat(skills): mode-first briefs, value-first storyboards, and destination defaults across creation workflows#2058
feat(skills): mode-first briefs, value-first storyboards, and destination defaults across creation workflows#2058WaterrrForever wants to merge 6 commits into
Conversation
…fields across workflows New hyperframes-core/references/brief-contract.md, the shared intake contract every creation workflow now runs its brief against: - §1 interaction mode: collaborative (default) vs autonomous, ongoing vs one-time signals, mode set once and carried forward, and a gate taxonomy (preference / checkpoint / quality / routing) — autonomous skips waiting, never verification - §2 field registry: destination→aspect derivation (feed → 1:1, Shorts/TikTok → 9:16, else 16:9), message, angle, length, audience, language, narration — each workflow binds fields as ask or state - §3 question rules: one round with one question per asked field (native question UI mandatory when available, recommended option first with a receipt), never drop a question as inferable, and a mode legend advertised in the intro text instead of asked Wired into the surfaces: - hyperframes router: detect mode at entry, derive aspect from destination instead of stating 16:9 - product-launch-video / pr-to-video / faceless-explainer: ask/state binding tables at Step 0; Step 3/6 checkpoint-gate branches (autonomous posts a heads-up with a preview hint before render) - website-to-video: local mode definition now defers to the contract - music-to-video, general-video, embedded-captions, talking-head-recut, slideshow, motion-graphics: mode semantics wired per gate type - storyboard-format: new optional 'mode' frontmatter key - pr-to-video: length tier is a ceiling, not a floor — a one-headline PR recommends inside the 30–90s sweet spot regardless of diff size
Story — the reverse-iceberg feedback: - New hyperframes-creative/references/story-spine.md, three rules for the narrated workflows: the hook speaks the viewer's outcome language, the value claim lands by beat 2 (implementation is the footnote of the story, not the spine), and the storyboard is presented as a proposal — 'This video tells [audience] that [message]' plus a per-frame why: drawn from narrativeRole - pr-to-video: feature-reveal reordered promise-first (impact leads, diff/mechanism follow as evidence); hooks ban file/function names; fix-explainer, refactor-walkthrough, changelog unchanged - product-launch-video / faceless-explainer hook rules aligned to the spine; website-to-video's beat summary gains the echo line + why:; general-video points at the spine from its plan step Brief — hardened after live-test drift: - Mode is now the first question (Collaborative recommended vs Autonomous), its own round, skipped when the request carries a signal; autonomous asks nothing further until one final preview-or-render question before render - Step 0 rewritten as a literal two-round question script in each shot-sequence workflow (website-to-video's editorial register, channel-agnostic); brief-contract.md §3 reduced to invariants so the procedure lives in exactly one place
typography.md: full-screen viewing keeps body 20px / headline 60px; in-feed destinations (X / LinkedIn / Instagram — brief-contract's destination field) scale to body >=32px, headline >=90px, data labels >=24px. First-pass values, to be calibrated against real renders.
- story-spine § 3: the proposal presents frames as a markdown table (frame · beat · on screen · why) instead of dense paragraphs; the three shot-sequence workflows and website-to-video's beat summary reference the same shape - pr-to-video: the credits close is now the default ending — every PR video ends on a contributors frame (committers by commit count, 1-6 avatars), with no taste judgment; the only skip is when no avatar was fetched, and the user can cut the frame in the proposal
…tract # Conflicts: # skills-manifest.json
miga-heygen
left a comment
There was a problem hiding this comment.
Review: LGTM with nits ✅
Well-structured skill-level documentation work. The two new contracts (brief-contract.md and story-spine.md) cleanly separate concerns: brief-contract owns intake mechanics (mode, fields, question rules), story-spine owns narrative doctrine (hook language, value ordering, proposal shape). The wiring across 14 workflow skills is consistent.
SSOT audit
brief-contract.md— single source for mode semantics, gate taxonomy, field registry, question invariants. ✓story-spine.md— single source for narrative doctrine (hook language, value ordering, proposal table shape). ✓- Per-workflow question scripts — intentionally local (Round 2 field lists differ per workflow). Contract explicitly says "invariants centralized, executable scripts local." Correct design. ✓
- No duplicated decisions across workflows for the shared contract rules. ✓
Findings (non-blocking)
1. website-to-video retains local mode definition overlapping the contract
skills/website-to-video/references/step-2-brief.md:121-130 — Suggestion
The PR correctly says "Mode semantics are canonical in brief-contract.md" in the SKILL.md, but step-2-brief.md still carries its own full mode definition (preference vs quality gates, TTS/music/captions examples). Today they agree, but the local copy could drift. Consider adding a one-line note: "These rules are this workflow's instantiation of brief-contract.md section 1 — see there for the canonical gate taxonomy."
2. embedded-captions "the user picks" contradicts autonomous mode
skills/embedded-captions/SKILL.md:101-107 — Nit
The new paragraph correctly identifies the identity pick as a preference gate and says "pick yourself." But the next existing line still reads "the user picks" — directly contradicts autonomous mode when read back-to-back. Easy fix: update the existing line to say "recommend ONE with a one-line why" without the "the user picks" suffix.
3. aspect field description is terse
skills/hyperframes-core/references/brief-contract.md — Nit
In the field registry table, aspect's Meaning column just says "canvas." Every other field has a short phrase. "canvas aspect ratio" would be more consistent.
Summary
Clean PR that extracts two genuine shared contracts from previously ad-hoc per-workflow behavior, wires them consistently across all 14 affected skills, and hardens pr-to-video with value-first ordering and credits-close-by-default from real user testing. All markdown — no runtime code, no tests affected. Ship it.
— Miga
jrusso1020
left a comment
There was a problem hiding this comment.
Review — COMMENT (external author; stamp = James's call)
Audited: the two new shared contracts (hyperframes-core/references/brief-contract.md and hyperframes-creative/references/story-spine.md) end-to-end; workflow-side wiring in product-launch-video, pr-to-video, faceless-explainer, website-to-video, general-video, music-to-video, motion-graphics, slideshow, talking-head-recut, embedded-captions; the router (skills/hyperframes/SKILL.md); PR-body claims; and the manifest regeneration.
Trusting: the six iterative live-test rounds on PR #2012 described in the PR body (I don't have a reproducible fixture to replay them from), and Miga's parallel review-in-flight for a second pass.
Strengths (file:line-cited)
- Contract scope is clean and non-overlapping.
brief-contract.mdowns interaction mode + shared field registry + question rules;story-spine.mdowns narrative ordering rules and defers voice to the workflow. Neither leaks workflow-specific content. Themode is set onceinvariant + the 4-gate taxonomy (preference / checkpoint / quality / routing) atbrief-contract.md§ 1 is exactly the right shape for guarding against "autonomous → skip verification" misuse; the explicit "Reasoning like 'autonomous means bias toward action, so I'll skip verification' misuses the mode" is a real footgun-blocker in prose. - Exemption lists are enforced by wiring, not just documented.
story-spine.md's exemption list (music-to-video, motion-graphics, embedded-captions, talking-head-recut, slideshow) is honored: none of those SKILL.md files referencestory-spine(verified with grep across all 13 touched SKILLs). Conversely, the 5 workflows the spine claims (product-launch / pr-to-video / faceless-explainer / website-to-video / general-video) each wire it in — for narrated story workflows on the main path, and conditionally ("when the piece tells a story") ingeneral-videoper the spine's own exemption note. - Story-workflow trio has identical Step 0 preambles —
product-launch-video/SKILL.md:14,pr-to-video/SKILL.md:14,faceless-explainer/SKILL.md:14all read "Read../hyperframes-core/references/brief-contract.mdbefore Step 0 — it defines the two modes, the gate types, and the brief fields; the mode governs the Step 0/3/6 gates." Not accidentally-drift-prone. - Value-first framing correctly separates ordering from voice —
story-spine.md§ 2 last sentence: "Structure is value-first; the voice stays whatever the workflow prescribes (a PR video keeps its plain, no-hype developer voice — leading with value is an ordering decision, not a marketing register)." This kills the natural drift-toward-marketing-tone risk of "value-first" up front. - Manifest regeneration is byte-clean.
skills-manifest.json+15/-15 = only the hashes of skills whose files actually changed were updated (embedded-captions,faceless-explainer,general-video,hyperframes,hyperframes-core,hyperframes-creative,motion-graphics,music-to-video,pr-to-video,product-launch-video,slideshow,talking-head-recut,website-to-video).figmahash unchanged (no touched files under it). Pre-commit hook regenerated it correctly + CI'sSkills: manifest in syncgate is green.
Verified PR-body claims
- "the five catalog surfaces (CLAUDE.md / AGENTS.md / README / docs / CLI templates) stay untouched" — verified via
gh api pulls/2058/filesgrep: zero hits underCLAUDE.md|AGENTS.md|README.md|docs/guides/skills.mdx|packages/cli/src/templates/. Claim holds; correct call since no skill descriptions or routing surfaces moved (per Rule "adding/repurposing skills means updating the five catalogs in lockstep" — the inverse here: content changes that DON'T touch descriptions/routing DON'T need catalog sync). - Autonomous single-question invariant (preview vs render only) —
brief-contract.md§ 1 states it explicitly; router (skills/hyperframes/SKILL.md:51) echoes it; product-launch / pr-to-video / faceless-explainer Step 0 sections each carry the literal two-round script. - Destination-defaults regression safety for unknown/desktop — router at
skills/hyperframes/SKILL.md:53: "YouTube / embed / unknown → 16:9". Users who don't specify a destination still get the pre-PR default. No silent regression.
Nits (all non-blocking)
- (nit / spine self-check)
story-spine.md§ 2 recommends a self-check: "Delete every evidence beat — the remaining beats must still state the value on their own." That's an excellent authoring rubric but it's phrased as a suggestion to the model, not enforced anywhere. If a future storyboard reviewer wanted to catch violations at build time, the frame-table format'sWhycolumn (with the "trace back to message" contract from § 3) is the mechanical hook — currently only prose-enforced. - (nit / typography first-pass)
hyperframes-creative/references/typography.mdlabel acknowledges the in-feed values are "first-pass values, to calibrate against real renders." That's good self-signaling. Worth a follow-up issue to actually calibrate once the first N feed videos ship, so this doesn't become the permanent baseline. - (nit / brief-contract § 3 "receipts") The receipts requirement ("Every recommended option states its basis: '~40s — small change, +44/−13 across 12 files'") — the example is
pr-to-video-shaped. Consider adding one non-diff example (e.g. product-launch: "~60s — SaaS promo, 30–90s sweet spot") so future readers of the contract in isolation don't over-anchor on the PR-video example. - (question, not a finding) The
mode: autonomousfrontmatter key instoryboard-format.md— how does a resumed session actually READ that? Does the workflow SKILL.md's Step 0 script check for it and skip questions? The doc adds the field but the workflow-side "read frontmatter to inherit mode" wiring wasn't obvious in my scan of the Step 0 templates. If that's carried in a reference file I skimmed past, please point at it; if it's not wired yet, might be worth a small follow-up rather than amodekey that's set but not read.
Verdict
COMMENT — contract design is clean, exemption enforcement is real (not just documented), the "autonomous ≠ silent + never skips quality gates" invariant is well-anchored across contract + router + workflows, and CI is green on 2aacb79bb0ac. As before, stamp = @jrusso1020's call (external author WaterrrForever; requester Miao is allowlisted but not a trusted-stamper, per delegation rule).
— Rames Jusso
- embedded-captions: the identity procedure now states both sides of the preference gate inline (user picks; autonomous picks with a stated why) - website-to-video step-2-brief: note that its mode section is the workflow's application of brief-contract.md, not a second definition - brief-contract: resuming a project reads mode from STORYBOARD.md frontmatter — a recorded mode counts as set, closing the write-only gap
Esper Labs power users (MVH & Trevin) gave us direct feedback: HyperFrames is "a hammer, not a factory" — the creation workflows hand users raw tools and expect them to drive. Three complaints land squarely on the skills: no way to choose "just build it" vs "walk me through it"; PR videos lead with the diff instead of why it matters; defaults assume desktop full-screen viewing while users post to X/LinkedIn. This PR turns that feedback into two shared contracts plus opinionated defaults across the creation workflows.
What
Changes
hyperframes-core/references/brief-contract.md(new) — the shared intake contract: mode signals + propagation, four gate types (preference / checkpoint / quality / routing), the shared field registry (destination→aspect derivation, message, angle, …), and question rules (two rounds, one question per ask-marked field, receipts required). Workflows bind fields as ask/state; the contract never carries workflow-specific content.hyperframes-creative/references/story-spine.md(new) — three cross-workflow story rules: viewer-language hooks (no file/function names, no feature lists), reverse-iceberg ordering, and storyboard-as-proposal (echo line + per-framewhy:fromnarrativeRole, presented as a table). Includes an exemption list (music / motion-graphics / captions / recut / slideshow) and a voice guard: value-first is an ordering decision, not a marketing tone.hyperframes-creative/references/typography.md— type minimums split by viewing context: full-screen keeps body 20px / headline 60px; in-feed destinations scale to body ≥32px / headline ≥90px / labels ≥24px (first-pass values, to calibrate against real renders).hyperframes-core/references/storyboard-format.md— optionalmodefrontmatter key so resumed sessions inherit the interaction mode (parser-safe: unknown keys land inglobals.extra).No skill descriptions or routing surfaces changed, so the five catalog surfaces (CLAUDE.md / AGENTS.md / README / docs / CLI templates) stay untouched.
Guardrails
lint/validate/inspectand routing confirmations never skip, in any mode.Tests / verification
lint/filesize/skills-manifest/formatpre-commit hooks green on every commit; manifest hashes regenerated by the hook.