Implementation spec: governance, decision intelligence, theme system, and E2E bug fixes
Implements the 2026-04-02 transformation spec (Phases 1-8) and fixes all critical bugs found during 5-pipeline E2E testing. Governance & Decision Intelligence: - Pipeline-specific stage order in checkpoint (replaces global STAGES list) - Provider scoring engine (lib/scoring.py) with 7-dimension weighted ranking - Decision log artifact enforced at proposal/idea stage across all 10 pipelines - Delivery promise classifier prevents silent motion-to-still downgrades - Structured shot language in scene_plan schema (camera, lens, lighting, DOF) - Variation checker and slideshow risk scorer block samey output before render - Creative intake, capability extension, and creative-intake meta skills - Final self-review artifact with 5 mandatory checks before presenting output - Source media review contract for user-supplied footage Render & Theme System: - Remotion AnimatedBackground now derives colors from playbook (no more hardcoded dark blue fintech gradient on every video) - video_compose builds custom ThemeConfig from playbook YAML colors/fonts — custom playbooks flow through to Remotion automatically - Explainer component wires theme to all child components (charts, cards, etc.) - resolveAsset() handles absolute paths on Windows/Unix via file:// URIs - RENDERER_FAMILY_MAP synced with actual Remotion compositions Critical Bug Fixes: - Windows npx subprocess: run_command() resolves .cmd wrappers via shutil.which() - Silent renderer downgrade: Remotion failure now returns explicit error with options instead of silently falling back to FFmpeg - .env inline comment parsing strips trailing # comments from API keys - concat_path UnboundLocalError in video_compose finally block - audio_mixer and showcase_card capture=True kwarg bug - Selector estimate_cost() calls fixed (_select_tool -> _select_best_tool) - asset_manifest schema expanded with provider, license, subtype fields - screen-demo subtitle_gen moved from required to optional tools - Duration drift detection in post-render final review (>25% warns)
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
# Creative Intake
|
||||
|
||||
Before the research stage, gather user intent through targeted questions.
|
||||
Do NOT start production on a vague brief.
|
||||
|
||||
## Required Questions (ask conversationally, not as a survey)
|
||||
|
||||
1. **Purpose**: What is this video FOR? (educate, sell, inspire, document, entertain)
|
||||
2. **Audience**: Who will watch it? (age, expertise, context — "my team" vs "YouTube public")
|
||||
3. **Platform**: Where will it live? (YouTube, internal Slack, social media, presentation, website)
|
||||
4. **Tone**: What should it FEEL like? (serious, playful, cinematic, raw, warm, provocative)
|
||||
5. **References**: Any videos you admire or want this to feel like?
|
||||
6. **Outcome**: What should the viewer DO or FEEL after watching?
|
||||
7. **Constraints**: Budget ceiling? Timeline? Must-include content?
|
||||
|
||||
## How to Ask
|
||||
|
||||
Don't dump all 7 questions at once. Start with purpose and audience,
|
||||
then let the conversation flow. Fill in gaps naturally.
|
||||
|
||||
If the user gives a detailed brief, skip questions they've already answered.
|
||||
|
||||
Identify what the user has already told you. If they said "I want a
|
||||
cinematic brand film for Instagram," you already have purpose (inspire/sell),
|
||||
platform (Instagram), and tone (cinematic). Ask what's missing.
|
||||
|
||||
## Handling Vague Briefs
|
||||
|
||||
When the user says something like "make me a video about X":
|
||||
|
||||
1. Acknowledge the topic — show you understood.
|
||||
2. Ask the single most important missing question first (usually purpose or audience).
|
||||
3. Based on their answer, ask the next most important gap.
|
||||
4. Stop asking when you have enough to start research. You don't need perfect answers — research will fill in details.
|
||||
|
||||
## Handling Detailed Briefs
|
||||
|
||||
When the user provides a multi-paragraph brief or a document:
|
||||
|
||||
1. Summarize what you understood (1-2 sentences).
|
||||
2. Call out any gaps: "I have a clear picture of the audience and tone, but I'd love to know — is there a specific outcome you're hoping for?"
|
||||
3. Confirm the platform and constraints if not stated.
|
||||
|
||||
## Output
|
||||
|
||||
Produce an `intake_brief` (informal, not schema-validated) that the
|
||||
research stage uses as its starting context. Include:
|
||||
|
||||
- Direct quotes from the user where their language reveals intent
|
||||
- Explicit answers to each of the 7 questions (mark any that were inferred vs stated)
|
||||
- Any reference videos/images the user mentioned
|
||||
- Constraints that must be honored (budget, timeline, must-include)
|
||||
|
||||
The intake_brief is passed as context to the research-director, not as a
|
||||
formal artifact. It exists to prevent the research stage from inventing
|
||||
intent that the user never expressed.
|
||||
|
||||
## What NOT To Do
|
||||
|
||||
- Do not present a numbered survey. This is a conversation, not a form.
|
||||
- Do not ask questions the user already answered in their initial message.
|
||||
- Do not delay production unnecessarily — if the brief is clear, move on.
|
||||
- Do not invent answers for questions the user didn't address. Mark them as "not specified" and let the research stage handle ambiguity.
|
||||
- Do not assume the user wants an explainer. Many users want cinematic, animation, or source-led work. Listen for signals.
|
||||
Reference in New Issue
Block a user