Fix release for 1.1.1: the minimal path end to end, engine commands that run on Godot, Unity and Unreal, hook warnings you can see, and verdicts that say when they could not check. Details in CHANGELOG.md; upgrade steps in UPGRADING.md (v1.1.1 → v1.1.2). Fixes #67 Fixes #131 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WuJn2FdynEybfL5KC697nJ
16 KiB
Skill Test Spec: /team-narrative
Skill Summary
Orchestrates the narrative team through a five-phase pipeline: narrative direction
(narrative-director) → world foundation, dialogue drafting and visual direction
(world-builder, writer and art-director in parallel) → level narrative integration
(level-designer) → consistency review (narrative-director) → polish + localization
compliance (writer, localization-lead, and world-builder in parallel). Phase 0
resolves review_mode, automation and team.size and the skill announces the
active set before Phase 1 — at the default individual only writer is spawned
(narrative-director only on an explicit pillar conflict), small adds
narrative-director, plus localization-lead and world-builder when review_mode is
full, and studio activates every narrative agent whatever the review mode. Each agent drafts to a concrete path
under production/narrative/[content-slug]/ named in the skill's path table;
Phase 4 runs the ND-CONSISTENCY gate; the orchestrator writes the final documents
to design/narrative/ after one approval. Uses
AskUserQuestion at each phase transition. Produces a narrative summary report.
Verdict is COMPLETE when all phases succeed — COMPLETE — consistency NOT ASSESSED ([input]) when the ND-CONSISTENCY review could not assess — or BLOCKED when a
dependency is unresolved.
Static Assertions (Structural)
- Has required frontmatter fields:
name,description,argument-hint,user-invocable,allowed-tools - Has ≥2 phase headings
- Contains verdict keywords: COMPLETE, BLOCKED
- Contains "File Write Protocol" section
- Sub-agents write drafts under
production/narrative/[content-slug]/; the orchestrator writes only the finaldesign/narrative/documents, after one "May I write" approval - Names a concrete draft path per agent (including level-designer and localization-lead) and the final
design/narrative/document each design artifact becomes — localization-lead's review is not one, and stays inproduction/ - Every agent prompt ends with the return contract: path written, ≤5-bullet summary, BLOCKED/CONCERNS items one line each
- Defines a phase gate as a decision point the pipeline itself lists, whatever the
automationmode, and claims no director spawn at phase gates - Has a next-step handoff at the end (references
/design-review,/localize extract,/dev-story) - Error Recovery Protocol section is present: verify a named artifact is on disk, surface BLOCKED immediately, always produce a partial report, full procedure in
.claude/docs/error-recovery-protocol.md AskUserQuestionis used at phase transitions before proceeding (collaborativemode)- Phase 0 resolves
team.size, and the skill requires a one-line active-set announcement before Phase 1 - Phase 2 explicitly spawns world-builder, writer and art-director in parallel
- Phase 5 explicitly spawns writer, localization-lead, and world-builder in parallel
Test Cases
Case 1: Happy Path — All five phases complete, narrative doc delivered
Fixture:
- Resolved config block:
team.size: studio,automation: collaborative - A game concept and GDD exist for the target feature (e.g.,
design/gdd/faction-intro.md) - Character voice profiles exist (e.g.,
design/narrative/characters/) - Existing lore entries exist for cross-reference (e.g.,
design/narrative/lore/) - No lore contradictions exist between existing entries and the new content
Input: /team-narrative faction introduction cutscene for the Ironveil faction
Expected behavior:
- Before any spawn, one line announces the active set for
team.size: studio - Phase 1: narrative-director is spawned; writes a narrative brief draft to
production/narrative/[content-slug]/brief.mddefining the story beat, characters involved, emotional tone, and lore dependencies AskUserQuestionpresents the narrative brief; user approves before Phase 2 begins- Phase 2: world-builder, writer and art-director are spawned in parallel; world-builder drafts Ironveil lore entries, writer drafts dialogue using character voice profiles, and art-director drafts visual direction — each under
production/narrative/[content-slug]/ - Phase gate: all three Phase 2 outputs are collected, then
AskUserQuestionpresents the lore, dialogue and visual direction summaries; user approves before Phase 3 begins - Phase 3: level-designer is spawned; produces environmental storytelling layout, trigger placement, and pacing plan
AskUserQuestionpresents level narrative plan; user approves before Phase 4 begins- Phase 4: narrative-director is spawned with the ND-CONSISTENCY gate; reviews voices, lore and pacing and returns APPROVE
AskUserQuestionpresents review results; user approves before Phase 5 begins- Phase 5: writer, localization-lead, and world-builder are spawned in parallel; writer performs final self-review; localization-lead validates i18n compliance; world-builder finalizes canon levels
- The orchestrator lists the final documents and asks once, "May I write these [N] narrative documents to
design/narrative/?"; on approval it writes them - Final summary report is presented
- Verdict: COMPLETE
Assertions:
- Active-set line naming
team.size: studioappears before the first agent is spawned - narrative-director is spawned in Phase 1 before any other agents
AskUserQuestionappears after Phase 1 output and before Phase 2 launch- world-builder, writer and art-director Agent calls are issued simultaneously in Phase 2 (not sequentially)
- level-designer is not launched until Phase 2
AskUserQuestionis approved - narrative-director is re-spawned in Phase 4 using gate ND-CONSISTENCY — in every review mode, since it is this pipeline's own review and
review_modenever skips it — and its APPROVE / CONCERNS / REJECT verdict decides whether Phase 5 starts - Phase 5 spawns all three agents (writer, localization-lead, world-builder) simultaneously
- Each agent prompt names its draft path from the skill's path table
- Nothing is written under
design/narrative/before the single "May I write" approval - Summary report includes: narrative brief status, lore entries created/updated, dialogue lines written, level narrative integration points, consistency review results
- The orchestrator writes nothing except the approved final documents
- Verdict is COMPLETE after delivery
Case 2: Lore Contradiction Found — world-builder finds conflict before writer proceeds
Fixture:
- Resolved config block:
team.size: studio,automation: collaborative - Existing lore entry at
design/narrative/lore/ironveil-history.mdstates the Ironveil faction was founded 200 years ago - The new narrative brief (from Phase 1) states the Ironveil were founded 50 years ago
- The writer has been spawned in parallel with the world-builder in Phase 2
Input: /team-narrative ironveil faction introduction cutscene
Expected behavior:
- Phases 1–2 begin normally
- Phase 2 world-builder detects a factual contradiction between the narrative brief and existing lore: founding date conflict
- world-builder returns BLOCKED with reason: "Lore contradiction found — founding date conflicts with
design/narrative/lore/ironveil-history.md" - Orchestrator surfaces the contradiction immediately: "world-builder: BLOCKED — Lore contradiction: founding date in narrative brief (50 years ago) conflicts with existing canon (200 years ago in
ironveil-history.md)" - Orchestrator assesses dependency: the writer's dialogue depends on canon lore — the writer's draft cannot be finalized without resolving the contradiction
AskUserQuestionpresents the error-recovery options:- Skip world-builder and note the gap in the final report
- Retry with narrower scope (e.g., world-builder works against the canon the user confirms)
- Stop here and resolve the contradiction in the lore docs first
- Writer output is preserved in the partial report — work is not discarded
- Orchestrator does NOT proceed to Phase 3 until the contradiction is resolved or user explicitly chooses to skip
Assertions:
- Contradiction is surfaced before Phase 3 begins
- Orchestrator does not silently resolve the contradiction by picking one version
AskUserQuestionpresents at least 3 options including "stop and resolve first"- Writer's draft output is preserved in the partial report, not discarded
- Phase 3 (level-designer) is not launched until the user resolves the contradiction or explicitly chooses to skip world-builder
- Verdict is BLOCKED (not COMPLETE) if the user stops to resolve the contradiction
Case 3: No Argument — Usage guidance shown
Fixture:
- Any project state
Input: /team-narrative (no argument)
Expected behavior:
- Skill detects no argument is provided
- Outputs usage guidance: e.g., "Usage:
/team-narrative [narrative content description] [--review full|lean|solo]— describe the story content, scene, or narrative area to work on (e.g.,boss encounter cutscene,faction intro dialogue,tutorial narrative)" - Skill exits without spawning any agents
Assertions:
- Skill does NOT spawn any agents when no argument is provided
- Usage message shows the full argument-hint —
/team-narrative [narrative content description] [--review full|lean|solo]— and an argument example - Skill does NOT attempt to guess or infer a narrative topic from project files
- No
AskUserQuestionis used — output is direct guidance
Case 4: Localization Compliance — localization-lead blocks on a non-translatable string
Fixture:
- Resolved config block:
team.size: studio,automation: collaborative - Phases 1–4 complete successfully
- Phase 5 begins; writer and world-builder complete without issues
- localization-lead finds a dialogue line that uses a hardcoded formatted date string (e.g.,
"On March 12th, Year 3") that cannot survive locale-specific translation without a locale-aware formatter, and returns it as a BLOCKED item in its return contract
Input: /team-narrative ironveil faction introduction cutscene (Phase 5 scenario)
Expected behavior:
- Phase 5 spawns writer, localization-lead, and world-builder in parallel
- localization-lead returns BLOCKED: "String key
dialogue.ironveil.intro.003contains a hardcoded date format (March 12th, Year 3) that will not localize correctly — requires a locale-aware date placeholder" - Orchestrator surfaces it immediately: "localization-lead: BLOCKED — [reason with the string key]"
- writer's and world-builder's Phase 5 outputs are kept in the partial report
AskUserQuestionpresents the error-recovery options:- Skip and note the gap in the final report (deliver with the string flagged)
- Retry with narrower scope (e.g., the writer revises that one line, then localization-lead re-checks it)
- Stop and resolve before finalizing
- If the user skips, the final summary lists the unfixed string key among its unresolved items; if the user stops, the verdict is
BLOCKED — [reason]
Assertions:
- localization-lead is spawned in Phase 5 simultaneously with writer and world-builder
- Hardcoded date format is identified as a localization blocker (not silently passed)
- The specific string key and reason are included in the surfaced BLOCKED message
AskUserQuestionoffers skip-and-note-gap, retry, and stop options- If the user proceeds without fixing, the final report names the unfixed string key; if the user stops, the verdict is BLOCKED
- Skill does NOT automatically rewrite the offending line without user approval
Case 5: Writer Blocked — Missing character voice profiles
Fixture:
- Resolved config block:
team.size: studio,automation: collaborative - Phase 1 narrative-director produces a narrative brief referencing two characters: Commander Varek and Advisor Selene
- No character voice profiles exist in
design/narrative/characters/for either character - Phase 2 begins; world-builder and art-director proceed normally
Input: /team-narrative ironveil surrender negotiation scene
Expected behavior:
- Phase 1 completes; narrative brief lists Commander Varek and Advisor Selene as characters
- Phase 2: writer is spawned in parallel with world-builder and art-director
- writer returns BLOCKED: "Cannot produce dialogue — no voice profiles found for Commander Varek or Advisor Selene in
design/narrative/characters/. Voice profiles required to match character tone and speech patterns." - Orchestrator surfaces the blocker immediately: "writer: BLOCKED — Missing prerequisite: character voice profiles for Commander Varek and Advisor Selene"
- world-builder output is preserved; partial report is produced with lore entries
AskUserQuestionpresents the error-recovery options:- Skip writer and note the gap in the final report
- Retry with narrower scope (e.g., minimal voice direction supplied inline)
- Stop here and create voice profiles before proceeding
- Orchestrator does NOT proceed to Phase 3 (level-designer) without writer output unless the user explicitly chooses to skip
Assertions:
- Writer block is surfaced before Phase 3 begins
- world-builder's completed lore output is preserved in the partial report
- Missing prerequisite (voice profiles) is named specifically (character names and expected file path)
AskUserQuestionoffers at least one option to resolve the missing prerequisite- Orchestrator does not fabricate voice profiles or invent character voices
- Phase 3 is not launched while writer is BLOCKED without explicit user authorization
Protocol Compliance
- At the default
team.size: individual, the run opens withActive set (team.size: individual): writer.and aNot spawned this run:line naming narrative-director, world-builder, art-director, level-designer and localization-lead, consulted through writer — before any agent is spawned - In
collaborativemode,AskUserQuestionis used after every phase output before the next phase launches - Parallel spawning: Phase 2 (world-builder + writer + art-director) and Phase 5 (writer + localization-lead + world-builder) issue all Agent calls before waiting for results
- No write under
design/happens without a "May I write" approval —design/is outside the bounded exception (production/,docs/,tests/) - At
team.size: individual, Phase 4 does not spawn narrative-director; the output says "ND-CONSISTENCY not run — narrative-director is not active atteam.size: individual; consistency self-checked by writer." and never presents the writer's self-check as the gate's verdict - An ND-CONSISTENCY
NOT ASSESSED [missing input]answer is never treated as APPROVE: the missing input is named, then either supplied and the gate re-run, orND-CONSISTENCY: NOT ASSESSED — [input]is carried into the report's consistency review results and the verdict readsCOMPLETE — consistency NOT ASSESSED ([input]), never a plain COMPLETE - A phase whose named artifact is missing on disk is treated as failed, not done
- BLOCKED status from any agent is surfaced immediately — not silently skipped
- A partial report is always produced when some agents complete and others block
- Verdict is exactly COMPLETE,
COMPLETE — consistency NOT ASSESSED ([input])or BLOCKED — no other verdict values used - Next Steps handoff references
/design-review,/localize extract, and/dev-story
Coverage Notes
- Phase 3 (level-designer) and Phase 4 (narrative-director review) happy-path behavior are validated implicitly by Case 1. Separate edge cases are not needed for these phases as their failure modes follow the standard Error Recovery Protocol.
- The "Retry with narrower scope" and "Skip this agent" resolution paths from the Error Recovery Protocol are not separately walked to completion — Cases 2, 4 and 5 check that they are offered.
- Advisory localization concerns (e.g., German/Finnish +30% expansion warnings) are not given a case; Case 4 covers only a concern the localization-lead returns as BLOCKED.
- The writer's "all lines under 120 characters" and "string keys not raw strings" checks in Phase 5 are covered implicitly by Case 4's localization compliance scenario.
- The
smallactive set (review_mode-dependent localization-lead and world-builder) is not given its own case.