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
8.3 KiB
/create-stories — Handoff Contract
Role in Pipeline
Decomposes a single epic into implementable story files by tracing GDD acceptance
criteria through ADR decisions and manifest rules — sits between /create-epics
and /story-readiness + /dev-story.
Inputs Required
Files That Must Exist
| File | Required Fields / Sections | Read-Only? |
|---|---|---|
production/epics/[epic-slug]/EPIC.md |
Layer:, GDD: path, Architecture Module:, ## Governing ADRs table, ## GDD Requirements table with TR-IDs |
Yes |
design/gdd/[filename].md |
All 8 required sections, especially ## Acceptance Criteria, ## Formulas, ## Edge Cases |
Yes |
docs/architecture/adr-NNNN-[slug].md (all governing ADRs) |
Status:, Decision, Implementation Guidelines, Engine Compatibility, Engine Notes |
Yes |
docs/architecture/control-manifest.md |
Layer rules (required patterns, forbidden patterns, guardrails), Manifest Version: date in header |
Yes |
docs/architecture/tr-registry.yaml |
All TR-IDs for the epic's system, with stable id values |
Yes |
Tier. The rows above are the
standard/fullinputs. Atworkflow: minimalthe only input isdesign/game-brief.md: the skill writesproduction/epics/<slug>/EPIC.mditself from the brief (or uses one that already exists there, never rewriting it), needs no/create-epicsrun, and reads no GDD, ADR, control manifest or TR registry. Each story traces toBrief MVP feature Ninstead of a TR-ID, and its ADR lines readN/A (minimal — no ADRs)(SKILL.md, theminimalbranch of Step 2 and theminimalfield mapping in Step 6).
Preconditions
/create-epicshas been run and the targetEPIC.mdhasStatus: Ready- The EPIC.md contains a populated
## GDD Requirementstable (not empty) - All governing ADRs listed in the EPIC.md exist as files
- Foundation epics have stories created before Core epics are started; Core before Feature; Feature before Presentation
Outputs Produced
Files Written
| File | Guaranteed Fields / Sections | Notes |
|---|---|---|
production/epics/[epic-slug]/story-NNN-[slug].md |
Epic:, Status:, Layer:, Type:, Manifest Version:, ## Context (GDD path + TR-[system]-NNN + ADR reference + ADR Decision Summary + Engine/Risk + Engine Notes + Control Manifest Rules), ## Acceptance Criteria, ## Implementation Notes, ## Out of Scope, ## Test Evidence, ## Dependencies |
Created per story |
production/epics/[epic-slug]/EPIC.md |
## Stories table replacing the "Not yet created" placeholder |
Updated in-place; a return visit appends rows for new stories only. At minimal, when none exists yet, the skill creates it from the brief, after the write ask names it |
production/epics/index.md |
The epic's Stories column set to [N] stories |
Only when the index exists; otherwise the run prints Epics index not updated: production/epics/index.md absent |
Output Guarantees
- Every story file contains a
TR-[system]-NNNreference in its## Contextsection (orTR-[system]-???with a warning if the registry has no match) — atminimal,Brief MVP feature Ninstead - Every story file contains an
ADR Governing Implementation:line referencing at least one ADR, or an explicitNo ADR appliesnote - Every story file has a
Status:field — eitherReadyorBlocked(if the governing ADR isProposed,DeprecatedorSuperseded) - Every story file has a
Type:field — one of: Logic, Integration, Visual/Feel, UI, Config/Data - Every story file has a
Manifest Version:field matching the date fromdocs/architecture/control-manifest.md's header at time of writing — atminimal,N/A (minimal — no control manifest) - Every story file has a
## Test Evidencesection stating the expected evidence location for its type - Every story file has a
## Acceptance Criteriasection with at least one checkbox item copied from the GDD — atminimal, derived fromdesign/game-brief.md(its Player goal & fail state and the MVP feature the story implements) - Every story file has a
## Dependenciessection (may say "None" but is never omitted) - The EPIC.md
## Storiestable is updated with a row per story including#,Storytitle,Type,Status, andADR - Stories with a
ProposedADR haveStatus: Blockedand a note:BLOCKED: ADR-NNNN is Proposed — accept it with /architecture-decision accept ADR-NNNN once decided; aDeprecatedorSupersededADR blocks the same way, naming its successor - Every story file has an
Engineand aRiskfield.Riskis taken fromdocs/engine-reference/<engine>/VERSION.md; when that file is missing or assigns no level,RiskisNOT ASSESSED (no VERSION.md risk rating)— never a guessed level NOT ASSESSEDis an emittable value of theRiskfield, and downstream readers must handle it./dev-storytreats it as HIGH when deciding whether to spawn the engine specialist: an unknown risk is not a low one
Immutability Rules
- READS but does NOT modify: the epic's GDD, all ADR files,
docs/architecture/tr-registry.yaml,docs/architecture/control-manifest.md - MODIFIES:
production/epics/[epic-slug]/story-NNN-[slug].md(creates),production/epics/[epic-slug]/EPIC.md(updates Stories section only; created atminimalwhen none exists yet),production/epics/index.md(the epic's row, when the index exists) — all after one write ask that names them
Hard Constraints (Never Violate)
- Never start implementation — this skill stops at the story file level
- Never invent acceptance criteria — all criteria must come from the GDD (from
design/game-brief.mdatminimal) - Never invent implementation notes — all guidance must come from the referenced ADR
- Never write story files without presenting the full story list for approval first
- Never mark a story
Status: Readyif its governing ADR hasStatus: Proposed,DeprecatedorSuperseded - Never omit the
Manifest Version:field — downstream readiness checks depend on it - Never reuse a story number (NNN) that already exists in the epic directory
Downstream Skill Expects
Next skill: /story-readiness (then /dev-story)
It will read:
- Each
story-NNN-[slug].mdfile — specifically:Status:,Type:,Manifest Version:(header),TR-[system]-NNN(in## Context),ADR Governing Implementation:line,## Acceptance Criteriasection,## Test Evidencesection,## Dependenciessection docs/architecture/control-manifest.md— to compare itsManifest Version:against the story's embedded version- The referenced ADR file — to verify its
Status:field is stillAccepted
It assumes:
Manifest Version:in the story header is a date string that can be compared against the manifest's currentManifest Version:dateTR-[system]-NNNIDs are resolvable indocs/architecture/tr-registry.yaml- The ADR referenced by name in
ADR Governing Implementation:exists as a file indocs/architecture/(pattern:adr-NNNN-[slug].md) Status: Readymeans the story is a candidate for assignment (not Draft, not in progress)## Acceptance Criteriacontains checkbox items that are directly testable## Test Evidencespecifies an exact file path or evidence doc path where proof will be stored
Known Fragile Points
- If the story file format (header field names, section names, checkbox syntax) changes,
/story-readinesswill silently skip checks for fields it cannot parse — stories may pass readiness that should fail - If
control-manifest.mdis regenerated with a newManifest Version:date after stories are written, all existing stories will show a stale manifest version and fail the readiness manifest check — every story in the epic will need itsManifest Version:updated - If a governing ADR is renumbered or its file is renamed after stories are written, the
ADR Governing Implementation:reference in story files will point to a missing file and/story-readinesswill BLOCK those stories - If
tr-registry.yamldeprecates or supersedes a TR-ID that is already embedded in story files,/story-readinesswill flag those stories as NEEDS WORK - The EPIC.md Stories table update is append-style — if
/create-storiesis run twice for the same epic, duplicate rows will appear in the table