| name | amcs-plan-generator |
| description | Generate execution plan from Song Design Spec (SDS). Extracts section structure, calculates target metrics, and produces ordered work objectives for downstream workflow nodes. Use when processing SDS to determine song arrangement, section ordering, target word counts, and evaluation criteria. |
AMCS Plan Generator
Transforms a Song Design Spec (SDS) into a deterministic execution plan that guides all downstream workflow nodes.
When to Use
Invoke this skill as the first node in the AMCS workflow when processing a new SDS. The plan establishes section order, target metrics, and evaluation criteria that inform Style, Lyrics, and Producer nodes.
Input Contract
inputs:
- name: sds
type: amcs://schemas/sds-1.0.json
required: true
description: Complete Song Design Spec containing all entity specs and constraints
- name: seed
type: integer
required: true
description: Determinism seed for this run
Output Contract
outputs:
- name: plan
type: amcs://schemas/plan-1.0.json
description: |
Execution plan containing:
- section_order: Array of section names in performance order
- target_word_counts: Per-section word count targets
- evaluation_targets: Rubric thresholds from blueprint
- work_objectives: Ordered list of tasks for downstream nodes
Determinism Requirements
- Seed: Use run seed directly (no RNG calls in this node)
- Temperature: N/A (no LLM generation required)
- Top-p: N/A
- Retrieval: None
- Hashing: Hash the complete plan output for provenance tracking
Constraints & Policies
- Section order MUST include at least one "Chorus" section
- Total target word count MUST respect
sds.constraints.max_linesconverted to approximate words (avg 6 words/line) - Section requirements from
sds.lyrics.constraints.section_requirementsMUST be preserved - If hook strategy is "lyrical" or "chant", require at least 2 chorus sections
- Duration targets MUST sum to within ±30 seconds of
sds.constraints.duration_sec - All blueprint-specified evaluation thresholds MUST be included in
evaluation_targets
Implementation Guidance
Step 1: Extract Section Structure
- Read
sds.lyrics.section_orderto get the base section sequence - Validate that at least one "Chorus" exists; if not, return error
- If
sds.lyrics.hook_strategyis "lyrical" or "chant", verify ≥2 chorus sections - Copy section order to
plan.section_order
Step 2: Calculate Target Metrics
For each section in
section_order:- Check
sds.lyrics.constraints.section_requirements[section]for min/max lines - Convert lines to approximate word counts (6 words/line avg)
- Store in
plan.target_word_counts[section]
- Check
Validate total:
- Sum all section word counts
- Verify ≤
sds.constraints.max_lines * 6words - If exceeded, proportionally reduce section targets
Duration targets:
- If
sds.producer_notes.section_metacontainstarget_duration_sec, copy to plan - Verify sum matches
sds.constraints.duration_sec(±30s tolerance)
- If
Step 3: Define Evaluation Targets
Load blueprint for
sds.style.genre_detail.primaryExtract rubric thresholds:
hook_density: minimum acceptable scoresingability: minimum acceptable scorerhyme_tightness: minimum acceptable scoresection_completeness: minimum acceptable scoreprofanity_score: maximum acceptable score (0 ifexplicit=false)total: minimum composite score
Store in
plan.evaluation_targets
Step 4: Create Work Objectives
Generate ordered list of objectives for downstream nodes:
{
"work_objectives": [
{
"node": "STYLE",
"objective": "Generate style spec with tempo [min-max], key [primary], mood [list], enforcing blueprint tempo ranges and tag conflict matrix",
"dependencies": []
},
{
"node": "LYRICS",
"objective": "Produce lyrics for sections [list], enforcing rhyme scheme [scheme], meter [meter], hook strategy [strategy]",
"dependencies": ["STYLE"]
},
{
"node": "PRODUCER",
"objective": "Create production notes with [N] hooks, structure [structure], section tags from plan",
"dependencies": ["STYLE"]
},
{
"node": "COMPOSE",
"objective": "Merge artifacts into render-ready prompt respecting [engine] character limits",
"dependencies": ["STYLE", "LYRICS", "PRODUCER"]
}
]
}
Step 5: Validate and Return
- Validate plan against
amcs://schemas/plan-1.0.json - Compute SHA-256 hash of plan JSON
- Return plan with hash in metadata
Examples
Example 1: Christmas Pop Song
Input:
{
"sds": {
"style": {"genre_detail": {"primary": "Christmas Pop"}},
"lyrics": {
"section_order": ["Intro", "Verse", "PreChorus", "Chorus", "Verse", "Chorus", "Bridge", "Chorus"],
"hook_strategy": "chant",
"constraints": {
"max_lines": 120,
"section_requirements": {
"Chorus": {"min_lines": 6, "max_lines": 10}
}
}
},
"producer_notes": {
"hooks": 2,
"section_meta": {
"Intro": {"target_duration_sec": 10},
"Chorus": {"target_duration_sec": 25}
}
},
"constraints": {"duration_sec": 180, "max_lines": 120}
},
"seed": 42
}
Output:
{
"section_order": ["Intro", "Verse", "PreChorus", "Chorus", "Verse", "Chorus", "Bridge", "Chorus"],
"target_word_counts": {
"Intro": 30,
"Verse": 96,
"PreChorus": 60,
"Chorus": 54,
"Bridge": 72
},
"evaluation_targets": {
"hook_density": 0.7,
"singability": 0.8,
"rhyme_tightness": 0.75,
"section_completeness": 0.9,
"profanity_score": 0.0,
"total": 0.8
},
"work_objectives": [
{"node": "STYLE", "objective": "Generate Christmas Pop style with anthemic energy, brass instrumentation", "dependencies": []},
{"node": "LYRICS", "objective": "Produce chant-heavy lyrics with AABB rhyme scheme across 8 sections", "dependencies": ["STYLE"]},
{"node": "PRODUCER", "objective": "Create production notes with 2 hooks, lush mix, section-specific tags", "dependencies": ["STYLE"]},
{"node": "COMPOSE", "objective": "Merge into Suno-compatible prompt under 5000 chars", "dependencies": ["STYLE", "LYRICS", "PRODUCER"]}
],
"_hash": "abc123..."
}
Common Pitfalls
- Missing Chorus: Failing to validate chorus presence causes downstream validation failures
- Word Count Overflow: Not checking total against
max_linesleads to truncated lyrics - Duration Mismatch: Ignoring
target_duration_secsum validation causes rendering issues - Blueprint Mismatch: Using wrong blueprint for genre results in inappropriate thresholds
- Determinism Loss: Introducing any randomness breaks reproducibility guarantee