Skip to content

feat(skills): add content-culture calibration + use-real-subject#550

Closed
vanceingalls wants to merge 1 commit intomainfrom
vance/04-28-content-culture
Closed

feat(skills): add content-culture calibration + use-real-subject#550
vanceingalls wants to merge 1 commit intomainfrom
vance/04-28-content-culture

Conversation

@vanceingalls
Copy link
Copy Markdown
Collaborator

@vanceingalls vanceingalls commented Apr 29, 2026

Summary

  • Content-culture calibration table in beat-direction.md — maps 6 genres to energy registers with explicit "wants" and "does NOT want" columns
  • Use-real-subject rule in video-composition.md — use real artifacts when rights are clear, ask when unclear, abstract when unavailable

Changes

beat-direction.md

  • Added "Content Culture Calibration" section before Per-Beat Direction
  • 6 genres: consumer launch, product demo, technical explainer, documentary/archival, editorial/brand story, news/social
  • Each genre has energy register, what it wants, what it does NOT want
  • "Choose register FIRST, then enrich" — prevents the always-enrich over-rotation

video-composition.md

  • Added "Use the Real Subject" section
  • Three tiers: use when rights clear (public domain, user's own brand), ask when unclear (competitor brands, copyrighted text), abstract when unavailable
  • Conservative default for commercial cases per review feedback

Review items addressed

Test plan

  • Genre table consulted during Chevron, Ray-Ban, Friskies, and Starship picker tests this session
  • Real-subject rule applied correctly during HeyGen brand extraction (used actual pacific codebase tokens)

🤖 Generated with Claude Code

Copy link
Copy Markdown
Collaborator Author

vanceingalls commented Apr 29, 2026

Copy link
Copy Markdown
Collaborator

@jrusso1020 jrusso1020 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@vanceingalls vanceingalls force-pushed the vance/04-28-prompt-expansion branch from 4e73f9e to 9d9154d Compare April 29, 2026 22:03
Copy link
Copy Markdown
Collaborator

@jrusso1020 jrusso1020 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.md still 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

  1. Restack on current #549 tip (541173f8). Resolve prompt-expansion.md by keeping #549's new beat-direction "What to generate" and inserting this PR's content-culture + real-subject sections at the appropriate point.
  2. Define R4 inline (or drop the rule-number notation).
  3. Soften the real-subject defaults for commercial UI/brand cases.
  4. Add 2–3 sample expansions to the PR description for genre verification.

@vanceingalls vanceingalls force-pushed the vance/04-28-content-culture branch 4 times, most recently from 528dddd to 4f411f1 Compare April 30, 2026 00:48
@vanceingalls vanceingalls changed the base branch from vance/04-28-prompt-expansion to graphite-base/550 April 30, 2026 00:48
@vanceingalls vanceingalls force-pushed the vance/04-28-content-culture branch from 4f411f1 to 129375a Compare April 30, 2026 00:49
@graphite-app graphite-app Bot changed the base branch from graphite-base/550 to main April 30, 2026 00:49
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>
@vanceingalls vanceingalls force-pushed the vance/04-28-content-culture branch from 129375a to 5cd19fe Compare April 30, 2026 00:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants