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
12 KiB
Skill Test Spec: /asset-spec
Skill Summary
/asset-spec turns one target's visual needs into asset specs with AI generation
prompts. The argument names a target — system:<name>, level:<name> or
character:<name> (an entity: entry from the inventory is read like a
character) — plus an optional --review full|lean|solo. It reads the art bible
at design/art/art-bible.md (and stops if it is missing, unless the minimal-path
exception applies), performance.* and naming.* from project.yaml, and the
target's source doc. It confirms the identified asset list with the user, drafts
one ASSET-NNN block per asset, and after approval writes one file per target
to design/assets/specs/[target-name]-assets.md, then updates
design/assets/asset-manifest.md. Asset IDs run sequentially across the whole
project. A re-run for a target whose spec file exists updates that file in place
(existing blocks and IDs kept, new assets appended) after "May I update".
The resolved review mode decides who drafts: full spawns art-director and
technical-artist in parallel, lean spawns art-director only, solo (the
default, via modes.rigor: minimal) spawns no agents; full is also what
modes.rigor: full resolves to. Every skipped agent is announced by name in
the output. These are drafting consultations, not gates. The skill produces an
artifact, not a judgement, so it has no run verdict; it closes with an
AskUserQuestion offering the next target or /asset-audit.
Static Assertions (Structural)
Checked against the SKILL.md by /skill-test spec — no fixture needed.
- Has required frontmatter fields:
name,description,argument-hint,user-invocable,allowed-tools - Has ≥2 phase headings
- Check 3 passes on the
BLOCKEDkeyword of its Error Recovery Protocol; the skill has no run verdict by design (artifact producer), and the run closes with "Asset specs complete for [target]. What's next?" - Contains "May I write" language for the spec file and "May I update" for the manifest
- Has a next-step handoff (
/asset-spec [next-context],/asset-audit)
Director Gate Checks
No gate IDs and no /gate-check. The review mode controls drafting agents only:
- Full mode (what
modes.rigor: fullresolves to):art-directorandtechnical-artistspawned in parallel - Lean mode:
art-directoronly; the output says "technical-artist skipped — Lean mode: technical constraints not validated." - Solo mode (default at
modes.rigor: minimal): no agents; the main session derives specs from the art bible, and the output names both skipped agents and says technical constraints were not validated
Test Cases
Case 1: Happy Path — Character spec in lean mode
Fixture:
project.yamlsetsmodes.rigor: standard(review mode resolves tolean) and hasperformance.*andnaming.*valuesdesign/art/art-bible.mdexists with Shape Language, Color System and Section 8 Asset Standardsdesign/narrative/characters/goblin-enemy.mdexists with a visual description- No
design/assets/asset-manifest.md
Input: /asset-spec character:goblin-enemy
Expected behavior:
- Skill reads the art bible, project config and the character doc before asking anything
- Skill presents the context summary ("Asset Spec: Character — goblin-enemy")
- Phase 2 identifies the character's assets (sprite sheets such as idle, walk,
attack, death; portrait; ability VFX; UI icon), shows them grouped by category,
and asks via
AskUserQuestionbefore speccing - Lean mode: spawns
art-directoronly, and says so: "technical-artist skipped — Lean mode: technical constraints not validated." - Phase 4 presents one
ASSET-NNNblock per asset with the field table (Category, Dimensions, Format, Naming, Polycount, Texture Res), Visual Description, Art Bible Anchors citing sections, Generation Prompt, andStatus: Needed - After approval asks "May I write the spec to
design/assets/specs/goblin-enemy-assets.md?" - Creates the manifest after asking "May I update
design/assets/asset-manifest.md?"; IDs start atASSET-001 - Phase 6
AskUserQuestionoffers another target or/asset-audit
Assertions:
- Asset list is confirmed with
AskUserQuestionbefore any spec is generated - Only
art-directoris spawned (notechnical-artistin lean mode) - The output names
technical-artistas skipped and says technical constraints were not validated - Each asset block has the field table, Art Bible Anchors (by section), a Generation Prompt and
Status: Needed - "May I write" names
design/assets/specs/goblin-enemy-assets.md - Manifest is created with a Progress Summary and IDs starting at
ASSET-001 - Phase 6 offers
/asset-auditamong the next steps
Case 2: No Art Bible — Skill stops before speccing
Fixture:
project.yamlsetsmodes.rigor: standarddesign/gdd/combat.mdexists with a Visual/Audio Requirements sectiondesign/art/art-bible.mddoes NOT existdesign/game-brief.mddoes NOT exist
Input: /asset-spec system:combat
Expected behavior:
- Phase 1 reads for
design/art/art-bible.mdand finds nothing - The minimal-path exception does not apply (no game brief)
- Skill stops with: "No art bible found. Run
/art-biblefirst — asset specs are anchored to the art bible's visual rules and asset standards." - No asset identification, no agents, no files
Assertions:
- The "No art bible found. Run
/art-biblefirst" message is shown - No asset list is presented and no
Agentcall is made - No spec file or manifest is written
- Specs are not generated with invented style rules
Case 3: Manifest Already Exists — IDs continue and shared assets are reused
Fixture:
project.yamlsetsmodes.rigor: standard; art bible existsdesign/assets/asset-manifest.mdexists; the highest ID isASSET-014, andASSET-012(Generic Hit Spark) is specced for the Combat system indesign/assets/specs/combat-assets.mddesign/gdd/tower-defense.mdVisual/Audio section lists a hit spark and a tower-build VFX
Input: /asset-spec system:tower-defense
Expected behavior:
- Skill reads the manifest and globs
design/assets/specs/*.mdfor shareable assets - Context summary lists the shared asset found in another spec
- The hit spark reuses
ASSET-012instead of creating a duplicate, with a note like "ASSET-012 (Generic Hit Spark) already specced for Combat system. Reusing for Tower Defense" - The new tower-build VFX is numbered
ASSET-015 - After "May I write" for
design/assets/specs/tower-defense-assets.md, the skill asks "May I updatedesign/assets/asset-manifest.md?", appends a Tower Defense context block, and updates the Progress Summary counts
Assertions:
- The hit spark references
ASSET-012; no duplicate hit-spark spec is created - The new asset's ID is
ASSET-015(project-wide sequence, not restarted per target) - The manifest is appended to, not recreated, after a "May I update" ask
- Progress Summary counts are updated
Case 4: Several Assets in One Target — One file, per-asset revision before write
Fixture:
project.yamlsetsmodes.rigor: standard; art bible exists; no manifestdesign/gdd/combat.mdVisual/Audio section names a hit-spark VFX, a floating damage number (UI) and a hit sound (audio)
Input: /asset-spec system:combat
Expected behavior:
- Phase 2 lists all three assets grouped under VFX, UI and Audio and asks the user to confirm
- Phase 4 presents
ASSET-001toASSET-003; the audio asset carries a description of its sonic character and no image generation prompt - User picks
[B] Revise a specific assetfor the damage number; the skill revises it inline and re-presents without re-spawning agents - User approves all; the skill asks "May I write" once, for
design/assets/specs/combat-assets.md, which holds all three assets
Assertions:
- One "May I write" ask covers all three assets in one file (not one ask or file per asset)
- The audio asset has no image generation prompt
- The minor revision does not re-spawn
art-director - All three
ASSET-NNNblocks are indesign/assets/specs/combat-assets.md
Case 5: Director Gate Check — Solo default, brief instead of art bible
Fixture:
project.yamlhas nomodesblock (review mode resolves tosoloviamodes.rigor: minimal)design/game-brief.mdexists with an Art & audio direction line- No
design/art/art-bible.md - No character profile for
heroindesign/narrative/ordesign/assets/entity-inventory.md
Input: /asset-spec character:hero
Expected behavior:
- The minimal-path exception applies: the skill does not stop, and states at the top "Anchored to the brief's one-line art direction; there is no art bible, so colour, shape and asset-standard rules below are proposals, not constraints."
/art-bibleis offered once, as optional- No profile found →
AskUserQuestion: "No profile found for hero. Describe it briefly" with Describe / Skip / Stop options - Solo mode: no
Agentcalls; the output announces "art-director and technical-artist skipped — Solo mode: specs derived in this session; technical constraints not validated." - No gate IDs appear and
/gate-checkis not invoked
Assertions:
- Skill continues without an art bible and says the specs are anchored to the brief
- Missing profile triggers the "Describe it briefly" question rather than a failure
- No
art-directorortechnical-artistis spawned - Both skipped agents are named in the output, which says technical constraints were not validated
- If the spec is written, its header names
design/game-brief.mdas the art direction (no> **Art Bible**:line), each asset carries a**Brief anchor:**line instead of Art Bible Anchors, and no Art Bible section or §8 tier is cited - No gate IDs appear — the skip note names agents, not gates
Case 6: Re-run on an Existing Spec — Updated in place, not overwritten
Fixture:
project.yamlsetsmodes.rigor: standard; art bible existsdesign/assets/specs/goblin-enemy-assets.mdexists withASSET-001toASSET-004(idle, walk and attack sprites; portrait); the manifest's highest ID isASSET-009design/narrative/characters/goblin-enemy.mdhas since gained a charge-attack ability
Input: /asset-spec character:goblin-enemy
Expected behavior:
- Phase 1 reads the existing spec file for this target as well as the character doc
- Phase 2 proposes only what is new — the charge-attack sprite and its VFX — and confirms the list with the user
- The new assets are numbered
ASSET-010andASSET-011(project-wide sequence) - The skill shows what changes, then asks "May I update
design/assets/specs/goblin-enemy-assets.md?" — not "May I write" ASSET-001toASSET-004are kept unchanged in the file; the new blocks are appended
Assertions:
- The existing spec file is detected and read before the asset list is proposed
- The ask is "May I update", naming the existing file
- Existing blocks and IDs are preserved; the file is not overwritten wholesale
- New assets continue the project-wide ID sequence (
ASSET-010,ASSET-011)
Protocol Compliance
- Reads the art bible, project config and source doc before asking the user anything
- Never specs assets before the user confirms the asset list
- Spawns agents strictly per the resolved review mode (
--reviewoverrides for one run), and names every skipped agent in the output - Surfaces any art-director / technical-artist conflict instead of silently resolving it
- Asks "May I write" before a new spec file, "May I update" before changing an existing one, and "May I update" before the manifest
- Assigns asset IDs sequentially across the project, reading the manifest first
Coverage Notes
- The no-argument flow (pick the next "Needed" item from
design/assets/entity-inventory.md, or build the inventory in Phase 0b) is not separately tested. level:targets and full-mode parallel spawning with a surfaced art-director / technical-artist conflict are not separately tested.- Agent BLOCKED handling (Error Recovery Protocol: always produce a partial spec) is not separately tested.