feat(skills): add content-culture calibration + use-real-subject#550
feat(skills): add content-culture calibration + use-real-subject#550vanceingalls wants to merge 1 commit intomainfrom
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
jrusso1020
left a comment
There was a problem hiding this comment.
Staff review
TL;DR: The genre/energy-register table is genuinely good — it codifies a real failure mode ("treating a brand launch as introspective narrative") into a checkable rule. The "use the real subject" rule is also right in spirit. But there's a dangling cross-reference to R4 that isn't defined anywhere in the stack, and the real-subject rule glosses over copyright/trademark issues that matter for commercial output. Stacks on #549, so it inherits those issues too.
Blocking
1. R4 (persistent-element continuity morph) is referenced but never defined. I greppped the cumulative state of the stack (top of pr-551) — R4 appears only as a reference, never a definition. If this PR introduces the term, define it inline. If it's defined in #551, then this PR can't merge ahead of #551 without breaking the cross-ref. Given Graphite stacks land bottom-up (this is the middle), that's a sequencing issue worth flagging.
2. Real-subject rule has IP landmines that need a softer default. The current text says "use what's real" with three narrow exceptions. For commercial output that's the wrong default:
- Public-figure speeches: "quote their actual words when available" — recent speeches are still copyrighted (50–95+ year terms). The example glosses over this.
- Real company UI/brand: "use them unless the prompt says otherwise" — using a competitor's logo or another brand's UI in a marketing video without permission is trademark/passing-off risk, not a default-on behavior. This needs to flip: only use when the user has explicit rights, or for clearly non-commercial illustrative use.
- Museum open-access works: usually fine for public-domain art (Vermeer, Lange) but check IIIF rights metadata — some institutions restrict reproductions even of PD originals.
Suggestion: re-frame as "when the user has rights or the work is clearly public domain (verified, not assumed), use the real subject. When unclear, ask." That keeps the spirit (don't ship [ PHOTOGRAPH ] placeholders for the Migrant Mother piece) without inviting trademark/copyright headaches.
Significant
3. Stacks on unresolved #549 issues. The genre table tells Claude to "check design.md's mood field" when genre is ambiguous — but design.md schema isn't defined in #549. Until that's pinned down, "mood field" is aspirational.
4. Empty PR template + no test plan. Same issue as #549. For a rule that re-frames how every expansion behaves, please show at least 2–3 sample expansions across different genres (brand launch, documentary, technical explainer) — they're the easiest way to verify the table actually steers the model.
Smaller things
- Genre table line lengths: the "What does NOT want" column has long lines that may render awkwardly in markdown. Consider one-bullet-per-anti-pattern instead of comma-separated lists.
- Energy-register column is good but consider whether "Editorial / brand story" + "Documentary / archival" deserve separate rows or could collapse. They share a lot of "wants" (warmth, restraint).
- Forward-reference to R4 could be replaced with an inline parenthetical until #551 lands: e.g., "(see persistent-overlay choreography in #551)".
What this PR gets right
- The genre table is the kind of structured guardrail skills should have. A 6-row table mapping genre → energy register → wants → does-not-want is exactly the format that converts vague "tone" intuitions into checkable rules. The "running-shoes treated as introspective narrative" example is concrete and memorable.
- Naming the failure mode "always-enrich has a known over-rotation" is honest and useful. Calling out the regression risk in a rule that is mostly right makes the rule stronger.
- "Use the real subject" rule is correct in spirit — abstracting Migrant Mother to
[ PHOTOGRAPH ]is exactly the failure mode worth fixing. Just needs a more conservative default for the commercial cases.
Recommended path
Block on (1) — define R4 here or merge after #551 lands. Soften the real-subject defaults (2). De-block on (3) once #549 lands. Fill in the PR template + ship 2–3 example expansions across genres for verification.
4e73f9e to
9d9154d
Compare
jrusso1020
left a comment
There was a problem hiding this comment.
Staff re-review (round 2)
TL;DR: No changes to this PR's own commits since round 1, but the stack drifted — #550 is based on ad44c313, which is 19 commits behind the current #549 tip. After Vance's round-1 fixes to #549 (gate merge, step renumbering, design-picker.md, beat-direction-format expansion), this PR will conflict heavily on references/prompt-expansion.md and reintroduce some of the issues that #549 just fixed. Restack required before merge.
New blocker
0. Stack is stale. git merge-base origin/vance/04-28-prompt-expansion origin/vance/04-28-content-culture resolves to ad44c313, but #549's tip is 541173f8. Concretely:
- #549 rewrote
references/prompt-expansion.md's "What to generate" into the new beat-direction format (Title + style block / Rhythm declaration / Global rules / Per-scene beats with concept-mood-depth-choreography-transition / Recurring motifs / Negative prompt). - This PR's
prompt-expansion.mdstill has the old 7-section format (Title / Global animation rules / Scene-by-scene breakdown with bg/mg/fg sub-bullets / Recurring motifs / Transition rules / Pacing curve / Negative prompt). - Merging this PR as-is would revert the new beat-direction format that landed in #549.
Run gt restack (or gt sync --no-interactive) and resolve prompt-expansion.md keeping #549's new "What to generate" — then layer this PR's content-culture and use-real-subject sections on top.
Round 1 blockers — status (after restack)
1. R4 is referenced but never defined. Still BLOCKING. I re-grepped the full stack including #549's latest commits (541173f8):
$ git grep -nE "^- R[0-9]|^R[0-9]|## R[0-9]|R1 |R2 |R3 |R5 " origin/vance/04-28-persistent-choreography
(no results)
R4 has no definition — only parenthetical glosses. If this PR introduces the term "persistent-element continuity morph", define it as a numbered rule somewhere (or drop the R4 notation and call it out by name inline).
2. Real-subject IP defaults too aggressive. Unchanged. The "Real company UI/brand → use them unless the prompt says otherwise" default still has trademark/passing-off exposure. Recommended re-frame: "When the user has rights or the work is verifiably public domain, use the real subject. When unclear, ask." That keeps the spirit (don't ship [ PHOTOGRAPH ] placeholders for Migrant Mother) without inviting commercial-use risk for competitor logos.
3. design.md schema gap (carried from #549) → ✅ Resolved by #549 — picker now outputs google-labs-code/design.md spec. So when #550's content-culture text says "check design.md's mood field", the schema exists. Good.
4. PR template + test plan. Still empty. For a rule that re-frames how every expansion behaves, ship 2–3 sample expansions across genres (brand launch, documentary, technical explainer) — table-stakes verification.
What this PR continues to get right
- The genre/energy-register table is the strongest piece in the stack. Mapping genre → energy register → wants → does-not-want is exactly the format that converts vague "tone" intuitions into checkable rules. The "running-shoes treated as introspective narrative" example is concrete.
- Naming "always-enrich has a known over-rotation" as an honest regression risk is good defensive design.
- "Use the real subject" rule is correct in spirit — the failure mode (abstracting Migrant Mother to
[ PHOTOGRAPH ]) is real and worth fixing.
Recommended path
- Restack on current #549 tip (
541173f8). Resolveprompt-expansion.mdby keeping #549's new beat-direction "What to generate" and inserting this PR's content-culture + real-subject sections at the appropriate point. - Define R4 inline (or drop the rule-number notation).
- Soften the real-subject defaults for commercial UI/brand cases.
- Add 2–3 sample expansions to the PR description for genre verification.
528dddd to
4f411f1
Compare
0c62741 to
22f0e6a
Compare
4f411f1 to
129375a
Compare
Content-culture calibration (beat-direction.md): genre table that constrains enrichment to match content energy register. Prevents treating a shoe ad like a documentary or a documentary like a tech demo. 6 genres: consumer launch, product demo, technical explainer, documentary, editorial, news/social. Use-real-subject (video-composition.md): when a composition is about a real artifact (photograph, painting, company UI), fetch and use it instead of placeholders. Lists public-domain sources. Exceptions for fictional, private, or consent-blocked subjects. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
129375a to
5cd19fe
Compare

Summary
beat-direction.md— maps 6 genres to energy registers with explicit "wants" and "does NOT want" columnsvideo-composition.md— use real artifacts when rights are clear, ask when unclear, abstract when unavailableChanges
beat-direction.md
video-composition.md
Review items addressed
Test plan
🤖 Generated with Claude Code