Claude-Code-Game-Studios/docs/examples/session-story-lifecycle.md
Donchitos 9f731f3d86 Delete /create-epics-stories and update all references
Removes the deprecated skill entirely and updates every reference across:
- README.md, UPGRADING.md (skill count + file lists)
- docs/WORKFLOW-GUIDE.md (pipeline diagrams, step descriptions, command reference)
- docs/examples/skill-flow-diagrams.md, session-*.md
- docs/architecture/tr-registry.yaml
- tests/skills/catalog.yaml
- .claude/skills: adopt, content-audit, create-control-manifest,
  skill-test, story-readiness
- .claude/docs: skills-reference.md, quick-start.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 15:04:15 +11:00

8.8 KiB
Raw Blame History

Example Session: Full Story Lifecycle — /story-readiness → Implement → /story-done

Context: Solo indie dev, mid-production sprint. The movement system GDD and architecture are complete. A story for movement's core implementation has been generated by /create-stories.

Starting State:

  • design/gdd/movement-system.md — complete, all 8 sections
  • docs/architecture/movement-adr-001.md — Status: Accepted
  • production/sprints/sprint-03.md — lists STORY-MOV-001 in backlog
  • production/stories/STORY-MOV-001.md — exists but not yet validated
  • No implementation code yet

Session Duration: ~50 minutes Turns: 13 Outcome: Story validated ready, implemented, verified complete with /story-done


Phase 1: Story Readiness Check

Turn 1: User Runs Readiness Check

User:

/story-readiness production/stories/STORY-MOV-001.md

Turn 2: Agent Validates the Story

Agent (via /story-readiness):

Reading production/stories/STORY-MOV-001.md...

STORY-MOV-001: Implement CharacterBody2D movement with terrain modifiers

Running 4 validation checks:

1. Design Completeness

  • GDD referenced: design/gdd/movement-system.md
  • GDD section coverage: Detailed Rules , Formulas , Edge Cases
  • TR-IDs embedded: TR-MOV-001 through TR-MOV-008

2. Architecture Completeness

  • ADR referenced: docs/architecture/movement-adr-001.md
  • ADR status: Accepted (Would be BLOCKED if Proposed)
  • Control manifest version in story: 2026-03-10 — current manifest is 2026-03-10

3. Scope Clarity

  • Acceptance criteria: 9 items, all measurable
  • Out-of-scope items listed: swimming, climbing
  • Ambiguities found: 1
    • ⚠️ Story says "roll direction follows last input direction" but GDD says "roll in movement direction" — these conflict when player stops and immediately rolls. Clarify before pickup.

4. Definition of Done

  • Tests required: unit tests for formula functions
  • Integration signal: on_stamina_event must fire correctly

Verdict: NEEDS WORK

One ambiguity must be resolved before implementation starts. Would you like to resolve it now so I can mark the story as ready?

Turn 3: User Resolves the Ambiguity

User:

Roll uses last movement direction. If player is standing still, roll uses facing direction instead.

Turn 4: Agent Updates the Story

Agent:

Updating the story's Detailed Rules section:

Roll direction: last movement direction. If velocity is zero at roll input, roll uses current facing direction.

May I write this to production/stories/STORY-MOV-001.md and set Status to ready-for-dev?

User:

Yes

Agent writes update. Story status: ready-for-dev.

Verdict: READY Story is implementation-ready. Pick it up when you're ready to build.


Phase 2: Implementation

Turn 5: User Starts Implementation

User:

Let's implement STORY-MOV-001. I'm ready to start coding.

Turn 6: Agent Reads Story and ADR

Agent (gameplay-programmer):

Reading production/stories/STORY-MOV-001.md, design/gdd/movement-system.md, and docs/architecture/movement-adr-001.md...

Architecture (from ADR-001):

  • MovementComponent.gd — attached to player scene, not a singleton
  • Terrain modifier lookup via TerrainLayer.get_modifier(tile_position) helper
  • Stamina events via signal (not direct call to StaminaSystem)

My proposed file structure:

src/gameplay/movement/
  movement_component.gd       # CharacterBody2D logic, state machine
  terrain_modifier_table.gd   # Const table: terrain_type -> {speed_mod, drain_mod}
tests/unit/
  test_movement_formulas.gd   # Unit tests for speed/drain calculations

May I proceed with this structure?

User:

Yes

Turn 7: Agent Implements and Shows Key Code

Agent:

Implementing movement_component.gd. Key excerpt for your review before I write the file:

class_name MovementComponent
extends Node

signal stamina_event(type: String, amount: float)

@export var base_walk_speed: float = 120.0
@export var run_multiplier: float = 1.7
@export var stamina_drain_walk: float = 2.0
@export var stamina_drain_run: float = 6.0
@export var stamina_cost_roll: float = 15.0

var _is_carrying_heavy: bool = false

func _physics_process(delta: float) -> void:
    var terrain_mod := _get_terrain_modifier()
    var effective_speed := _calculate_speed(terrain_mod)
    # ...

All values are @export — none hardcoded. Is this the direction you want?

User:

Looks good. Write it.

Turn 89: Agent Writes Files and Tests

Agent writes:

  • src/gameplay/movement/movement_component.gd
  • src/gameplay/movement/terrain_modifier_table.gd
  • tests/unit/test_movement_formulas.gd

Agent:

Files written. Running available linting checks...

No errors. Tests file created with 6 unit tests covering:

  • Walk speed formula (3 terrain types)
  • Run speed formula
  • Stamina drain calculation
  • Roll stamina cost (with and without zero-velocity edge case)

Manual testing needed for: invincibility frames, slope blocking, terrain integration (requires running scene).


Phase 3: Story Completion

Turn 10: User Tests Manually and Runs /story-done

User:

I've tested it in the scene — everything works. /story-done production/stories/STORY-MOV-001.md

Turn 11: Agent Runs Completion Review

Agent (via /story-done):

Reading story, GDD, ADRs...

Phase 1: Story Located production/stories/STORY-MOV-001.md

Phase 2: Acceptance Criteria Verification

# Criterion Verification Status
1 Walk speed correct on normal ground Auto: formula unit tests pass AUTO
2 Run speed correct Auto: formula unit tests pass AUTO
3 Run cancels at stamina 0 Manual: user confirmed MANUAL
4 Roll invincibility frames work Manual: user confirmed MANUAL
5 Terrain modifiers apply correctly Manual: user confirmed MANUAL
6 Heavy carry disables run Auto: not yet testable (inventory not integrated) DEFERRED
7 Stamina signals fire correctly Auto: integration test pending DEFERRED
8 No hardcoded values Auto: grep for magic numbers → 0 found AUTO
9 Slopes >45° block movement Manual: user confirmed MANUAL

Phase 3: GDD/ADR Deviations

Scanning implementation against TR-IDs...

  • TR-MOV-001 through TR-MOV-007: Implemented as specified
  • TR-MOV-008 (heavy carry signal): ⚠️ ADVISORY — deferred to inventory integration story. Not a deviation, just unverifiable now.

Phase 4: Manifest Staleness Check

Story control manifest version 2026-03-10 matches current manifest 2026-03-10.

Phase 5: Code Review Prompt

Suggest running /code-review src/gameplay/movement/ before marking complete. Not blocking.


Completion Report: COMPLETE WITH NOTES

Story is complete. Two criteria deferred to inventory integration — log as deferred, not blocked.

May I update the story status to Status: Complete and add Completion Notes, and update production/sprint-status.yaml?

User:

Yes

Turn 12: Agent Closes the Story

Agent writes:

  • Story Status: Complete + Completion Notes (deferred criteria noted)
  • production/sprint-status.yaml — STORY-MOV-001 set to done

Agent:

STORY-MOV-001 closed.

Deferred criteria logged (will auto-surface in inventory integration story):

  • Heavy carry disables run (requires inventory signal)
  • Stamina signal integration test (requires stamina system)

Next ready story from sprint:

  • STORY-MOV-002: Stamina system — this is the logical next story (downstream dep now unblocked)
  • STORY-HUD-001: Movement HUD indicators — also unblocked

Run /story-readiness on whichever you pick up next.


What This Example Demonstrates

  • Readiness gate catches real issues: the roll direction ambiguity would have caused a late implementation decision without /story-readiness
  • ADR status is a hard gate: if movement-adr-001.md had been Proposed instead of Accepted, story would be BLOCKED and implementation wouldn't start
  • Deferred criteria: not every acceptance criterion can be verified at story close — /story-done tracks deferred items rather than blocking completion
  • TR-ID references: story stores TR-MOV-001 IDs, not quoted GDD text — avoids false deviation flags when GDD wording is cleaned up later
  • sprint-status.yaml: single source of truth for sprint state, updated by /story-done and read by /sprint-status
  • Manifest version check: ensures story's implementation guidance hasn't drifted from current architecture decisions