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>
8.8 KiB
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 sectionsdocs/architecture/movement-adr-001.md— Status: Acceptedproduction/sprints/sprint-03.md— lists STORY-MOV-001 in backlogproduction/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 is2026-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_eventmust 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.mdand set Status toready-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, anddocs/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 calculationsMay 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 8–9: Agent Writes Files and Tests
Agent writes:
src/gameplay/movement/movement_component.gdsrc/gameplay/movement/terrain_modifier_table.gdtests/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.mdPhase 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-10matches current manifest2026-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: Completeand add Completion Notes, and updateproduction/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 todone
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-readinesson 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.mdhad beenProposedinstead ofAccepted, story would beBLOCKEDand implementation wouldn't start - Deferred criteria: not every acceptance criterion can be verified at story close —
/story-donetracks deferred items rather than blocking completion - TR-ID references: story stores
TR-MOV-001IDs, 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-doneand read by/sprint-status - Manifest version check: ensures story's implementation guidance hasn't drifted from current architecture decisions