mirror of
https://github.com/calesthio/OpenMontage.git
synced 2026-08-12 11:43:54 +08:00
Add UAT guardrails to pipeline YAML and fix playbook test
- animation.yaml: enforce audio architecture + provider comparison in proposal stage, Layer 3 skill gate + clip duration in assets stage - video-reference-analyst.md: Step 6 is now a hard redirect forcing stage-by-stage pipeline execution - Fix test_compatible_with_manifest for nested compatible_playbooks dict
This commit is contained in:
@@ -95,10 +95,14 @@ stages:
|
||||
- Production plan reflects actual tool availability from preflight
|
||||
- Cost estimate is itemized and honest
|
||||
- Free/local tool options are highlighted where applicable
|
||||
- "Audio architecture decided: single narrator / character dialogue / narrator+characters"
|
||||
- "Provider choice presented as comparison table with costs — agent recommends but user decides"
|
||||
success_criteria:
|
||||
- Schema-valid proposal_packet with at least 3 concept_options
|
||||
- selected_concept includes animation_mode and reuse_strategy
|
||||
- selected_concept includes audio_architecture (single_narrator | character_dialogue | narrator_plus_characters)
|
||||
- cost_estimate has itemized line_items with per-tool costs
|
||||
- cost_estimate includes provider_comparison table with at least 2 provider options
|
||||
- approval.status is "approved" or "approved_with_changes" before proceeding
|
||||
sub_stages:
|
||||
- name: sample
|
||||
@@ -191,9 +195,12 @@ stages:
|
||||
- Reusable motifs and templates are prepared and referenced
|
||||
- Missing tool paths are surfaced honestly
|
||||
- Total cost within approved budget from proposal_packet
|
||||
- "Layer 3 skills read for EVERY generation tool before writing prompts (check agent_skills field)"
|
||||
- "Clip duration maximized (prefer 10s over 5s) to reduce API calls and cost"
|
||||
success_criteria:
|
||||
- Schema-valid asset_manifest artifact
|
||||
- All referenced asset files exist on disk
|
||||
- layer3_skills_read list is present and includes all tools used for generation
|
||||
|
||||
- name: edit
|
||||
skill: pipelines/animation/edit-director
|
||||
|
||||
@@ -327,13 +327,33 @@ adjust: voice, visual style, pacing, music, colors."
|
||||
Iterate on sample feedback until approved. Store samples at:
|
||||
`projects/<name>/assets/sample/sample_v{N}.mp4`
|
||||
|
||||
### Step 6: Enter Pipeline
|
||||
### Step 6: Enter Pipeline (HARD REDIRECT)
|
||||
|
||||
After sample approval, enter the appropriate pipeline with:
|
||||
After sample approval, the agent MUST enter the pipeline. This is not optional.
|
||||
|
||||
**Mandatory steps:**
|
||||
1. Read the pipeline manifest: `pipeline_defs/animation.yaml` (or whichever
|
||||
pipeline matches the production type)
|
||||
2. Execute **stage by stage** in order — research → proposal → script →
|
||||
scene_plan → assets → edit → compose → publish
|
||||
3. Before EACH stage, read its director skill from
|
||||
`skills/pipelines/<pipeline>/<stage>-director.md`
|
||||
4. Produce the required artifacts at each stage
|
||||
5. Hit every checkpoint where `checkpoint_required: true`
|
||||
6. Get user approval where `human_approval_default: true`
|
||||
|
||||
**Do NOT collapse stages.** Do not jump from "user approved proposal" to
|
||||
"generate all assets." The pipeline stages exist to enforce quality gates,
|
||||
artifact dependencies, and review checkpoints. Skipping them is a governance
|
||||
violation.
|
||||
|
||||
**Context to carry into the pipeline:**
|
||||
- VideoAnalysisBrief as grounding context in the research/proposal stage
|
||||
- User's chosen variant as the approved direction
|
||||
- Sample feedback incorporated into the brief
|
||||
- All creative differentiation decisions recorded in the decision_log
|
||||
- Audio architecture and voice casting decisions from Step 3
|
||||
- Layer 3 skills already read from Step 4b
|
||||
|
||||
The pipeline takes over from here. The VideoAnalysisBrief travels alongside the
|
||||
standard artifacts, providing reference grounding at every stage.
|
||||
|
||||
@@ -239,7 +239,10 @@ class TestStylePlaybooks:
|
||||
def test_compatible_with_manifest(self):
|
||||
manifest = load_pipeline("animated-explainer")
|
||||
available = list_playbooks()
|
||||
for name in manifest.get("compatible_playbooks", []):
|
||||
compat = manifest.get("compatible_playbooks", {})
|
||||
# compatible_playbooks is a dict with recommended/also_works lists
|
||||
playbook_names = compat.get("recommended", []) + compat.get("also_works", [])
|
||||
for name in playbook_names:
|
||||
assert name in available, f"Manifest references unavailable playbook: {name}"
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user