Skip to main content

gds-dev-story

Execute story implementation following a context filled story spec file. Use when the user says "dev this story [story file]" or "implement the next story in the sprint plan"

Source facts

Repository
bmad-code-org/bmad-module-game-dev-studio
Last source activity
September 25, 2026 at 10:18
Detected SKILL.md language
English
Stars
247
Forks
31

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
3 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
gds-dev-story
description
Execute story implementation following a context filled story spec file. Use when the user says "dev this story [story file]" or "implement the next story in the sprint plan"
# Dev Story Workflow **Goal:** Execute story implementation following a context filled story spec file. **Your Role:** Developer implementing the story. - Communicate all responses in {communication_language} and language MUST be tailored to {game_dev_experience} - Generate all documents in {document_output_language} - Only modify the story file in these areas: YAML frontmatter `baseline_commit`, Tasks/Subtasks checkboxes, Dev Agent Record (Debug Log, Completion Notes), File List, Change Log, and Status - Execute ALL steps in exact order; do NOT skip steps - Absolutely DO NOT stop because of "milestones", "significant progress", or "session boundaries". Continue in a single execution until the story is COMPLETE (all ACs satisfied and all tasks/subtasks checked) UNLESS a HALT condition is triggered or the USER gives other instruction. - Do NOT schedule a "next session" or request review pauses unless a HALT condition applies. Only Step 6 decides completion. - Game dev experience ({game_dev_experience}) affects conversation style ONLY, not code updates. ## Paths - `story_file` = `` (explicit story path; auto-discovered if empty) - `sprint_status` = `{implementation_artifacts}/sprint-status.yaml` ## Context - `project_context` = `**/project-context.md` (load if exists) --- ## Conventions - Bare paths (e.g. `template.md`) resolve from the skill root. - `{skill-root}` resolves to this skill's installed directory (where `customize.toml` lives). - `{project-root}` is the nearest folder containing `_bmad/`, starting at the project working directory and moving up through its parents. - `{skill-name}` resolves to the skill directory's basename. ## On Activation ### Step 1: Resolve the Workflow Block Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow` **If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver: 1. `{skill-root}/customize.toml` — defaults 2. `{project-root}/_bmad/custom/{skill-name}.toml` — team overrides 3. `{project-root}/_bmad/custom/{skill-name}.user.toml` — personal overrides Any missing file is skipped. Scalars override, tables deep-merge, arrays of tables keyed by `code` or `id` replace matching entries and append new entries, and all other arrays append. ### Step 2: Execute Prepend Steps Execute each entry in `{workflow.activation_steps_prepend}` in order before proceeding. ### Step 3: Load Persistent Facts Treat every entry in `{workflow.persistent_facts}` as foundational context you carry for the rest of the workflow run. Entries prefixed `file:` are paths or globs under `{project-root}` — load the referenced contents as facts. All other entries are facts verbatim. ### Step 4: Load Config Load config from `{project-root}/_bmad/gds/config.yaml` and resolve: - `user_name` - `communication_language` - `document_output_language` - `game_dev_experience` - `implementation_artifacts` - `sprint_status` - `date` as the system-generated current datetime ### Step 5: Greet the User Greet `{user_name}`, speaking in `{communication_language}`. ### Step 6: Execute Append Steps Execute each entry in `{workflow.activation_steps_append}` in order. Activation is complete. If `activation_steps_prepend` or `activation_steps_append` were non-empty, confirm every entry was executed in order before proceeding. Do not begin the main workflow until all activation steps have been completed. ## EXECUTION <workflow> <critical>Communicate all responses in {communication_language} and language MUST be tailored to {game_dev_experience}</critical> <critical>Generate all documents in {document_output_language}</critical> <critical>Only modify the story file in these areas: YAML frontmatter `baseline_commit`, Tasks/Subtasks checkboxes, Dev Agent Record (Debug Log, Completion Notes), File List, Change Log, and Status</critical> <critical>Execute ALL steps in exact order; do NOT skip steps</critical> <critical>Absolutely DO NOT stop because of "milestones", "significant progress", or "session boundaries". Continue in a single execution until the story is COMPLETE (all ACs satisfied and all tasks/subtasks checked) UNLESS a HALT condition is triggered or the USER gives other instruction.</critical> <critical>Do NOT schedule a "next session" or request review pauses unless a HALT condition applies. Only Step 6 decides completion.</critical> <critical>Game dev experience ({game_dev_experience}) affects conversation style ONLY, not code updates.</critical> <step n="1" goal="Find next ready story and load it" tag="sprint-status"> <check if="{{story_path}} is provided"> <action>Use {{story_path}} directly</action> <action>Read COMPLETE story file</action> <action>Extract story_key from filename or metadata</action> <goto anchor="task_check" /> </check> <!-- Sprint-based story discovery --> <check if="{{sprint_status}} file exists"> <critical>MUST read COMPLETE sprint-status.yaml file from start to end to preserve order</critical> <action>Load the FULL file: {{sprint_status}}</action> <action>Read ALL lines from beginning to end - do not skip any content</action> <action>Parse the development_status section completely to understand story order</action> <action>Find the FIRST story (by reading in order from top to bottom) where: - Key matches pattern: number-number-name (e.g., "1-2-user-auth") - NOT an epic key (epic-X) or retrospective (epic-X-retrospective) - Status value equals "ready-for-dev" </action> <check if="no ready-for-dev or in-progress story found"> <output>📋 No ready-for-dev stories found in sprint-status.yaml **Current Sprint Status:** {{sprint_status_summary}} **What would you like to do?** 1. Run `create-story` to create next story from epics with comprehensive context 2. Run `*validate-create-story` to improve existing stories before development (recommended quality check) 3. Specify a particular story file to develop (provide full path) 4. Check {{sprint_status}} file to see current sprint status 💡 **Tip:** Stories in `ready-for-dev` may not have been validated. Consider running `validate-create-story` first for a quality check. </output> <ask>Choose option [1], [2], [3], or [4], or specify story file path:</ask> <check if="user chooses '1'"> <action>HALT - Run create-story to create next story</action> </check> <check if="user chooses '2'"> <action>HALT - Run validate-create-story to improve existing stories</action> </check> <check if="user chooses '3'"> <ask>Provide the story file path to develop:</ask> <action>Store user-provided story path as {{story_path}}</action> <goto anchor="task_check" /> </check> <check if="user chooses '4'"> <output>Loading {{sprint_status}} for detailed status review...</output> <action>Display detailed sprint status analysis</action> <action>HALT - User can review sprint status and provide story path</action> </check> <check if="user provides story file path"> <action>Store user-provided story path as {{story_path}}</action> <goto anchor="task_check" /> </check> </check> </check> <!-- Non-sprint story discovery --> <check if="{{sprint_status}} file does NOT exist"> <action>Search {implementation_artifacts} for stories directly</action> <action>Find stories with "ready-for-dev" status in files</action> <action>Look for story files matching pattern: *-*-*.md</action> <action>Read each candidate story file to check Status section</action> <check if="no ready-for-dev stories found in story files"> <output>📋 No ready-for-dev stories found **Available Options:** 1. Run `create-story` to create next story from epics with comprehensive context 2. Run `*validate-create-story` to improve existing stories 3. Specify which story to develop </output> <ask>What would you like to do? Choose option [1], [2], or [3]:</ask> <check if="user chooses '1'"> <action>HALT - Run create-story to create next story</action> </check> <check if="user chooses '2'"> <action>HALT - Run validate-create-story to improve existing stories</action> </check> <check if="user chooses '3'"> <ask>It's unclear what story you want developed. Please provide the full path to the story file:</ask> <action>Store user-provided story path as {{story_path}}</action> <action>Continue with provided story file</action> </check> </check> <check if="ready-for-dev story found in files"> <action>Use discovered story file and extract story_key</action> </check> </check> <action>Store the found story_key (e.g., "1-2-user-authentication") for later status updates</action> <action>Find matching story file in {implementation_artifacts} using story_key pattern: {{story_key}}.md</action> <action>Read COMPLETE story file from discovered path</action> <anchor id="task_check" /> <action>Parse sections: Story, Acceptance Criteria, Tasks/Subtasks, Dev Notes, Dev Agent Record, File List, Change Log, Status</action> <action>Load comprehensive context from story file's Dev Notes section</action> <action>Extract developer guidance from Dev Notes: architecture requirements, previous learnings, technical specifications</action> <action>Use enhanced story context to inform implementation decisions and approaches</action> <action>Identify first incomplete task (unchecked [ ]) in Tasks/Subtasks</action> <action if="no incomplete tasks"> <goto step="6">Completion sequence</goto> </action> <action if="story file inaccessible">HALT: "Cannot develop story without access to story file"</action> <action if="incomplete task or subtask requirements ambiguous">ASK user to clarify or HALT</action> </step> <step n="2" goal="Load project context and story information"> <critical>Load all available context to inform implementation</critical> <action>Load {project_context} for coding standards and project-wide patterns (if exists)</action> <check if="{project_context} was loaded and is not empty"> <action>Extract actionable rules from {project_context}: - Required third-party frameworks and libraries (MUST use these, not alternatives) - MCP server integrations to leverage during implementation - Coding conventions and naming patterns - Project-wide constraints and mandatory patterns </action> <action>Store as {{active_project_rules}} — these override default implementation choices</action> </check> <action>Parse sections: Story, Acceptance Criteria, Tasks/Subtasks, Dev Notes, Dev Agent Record, File List, Change Log, Status</action> <action>Load comprehensive context from story file's Dev Notes section</action> <action>Check story's "Project Context Rules" section in Dev Notes for pre-extracted project rules</action> <action>Extract developer guidance from Dev Notes: architecture requirements, previous learnings, technical specifications</action> <action>Use enhanced story context AND {{active_project_rules}} to inform implementation decisions</action> <output>✅ **Context Loaded** Story and project context available for implementation </output> </step> <step n="3" goal="Detect review continuation and extract review context"> <critical>Determine if this is a fresh start or continuation after code review</critical> <action>Check if "Senior Developer Review (AI)" section exists in the story file</action> <action>Check if "Review Follow-ups (AI)" subsection exists under Tasks/Subtasks</action> <check if="Senior Developer Review section exists"> <action>Set review_continuation = true</action> <action>Extract from "Senior Developer Review (AI)" section: - Review outcome (Approve/Changes Requested/Blocked) - Review date - Total action items with checkboxes (count checked vs unchecked) - Severity breakdown (High/Med/Low counts) </action> <action>Count unchecked [ ] review follow-up tasks in "Review Follow-ups (AI)" subsection</action> <action>Store list of unchecked review items as {{pending_review_items}}</action> <output>⏯️ **Resuming Story After Code Review** ({{review_date}}) **Review Outcome:** {{review_outcome}} **Action Items:** {{unchecked_review_count}} remaining to address **Priorities:** {{high_count}} High, {{med_count}} Medium, {{low_count}} Low **Strategy:** Will prioritize review follow-up tasks (marked [AI-Review]) before continuing with regular tasks. </output> </check> <check if="Senior Developer Review section does NOT exist"> <action>Set review_continuation = false</action> <action>Set {{pending_review_items}} = empty</action> <output>🚀 **Starting Fresh Implementation** Story: {{story_key}} Story Status: {{current_status}} First incomplete task: {{first_task_description}} </output> </check> </step> <step n="4" goal="Mark story in-progress" tag="sprint-status"> <action>If story file YAML frontmatter already contains `baseline_commit`, preserve the existing value and do not overwrite it</action> <check if="{{sprint_status}} file exists"> <action>Load the FULL file: {{sprint_status}}</action> <action>Read all development_status entries to find {{story_key}}</action> <action>Set {{current_status}} to development_status[{{story_key}}]</action> </check> <check if="{{sprint_status}} file does NOT exist"> <action>Set {{current_status}} to the story file Status section value</action> </check> <check if="{{current_status}} == 'ready-for-dev' AND story file YAML frontmatter does NOT contain baseline_commit"> <action>Run `git rev-parse HEAD` to capture current commit into {{baseline_commit}}; if git/version control is unavailable, set {{baseline_commit}} = `NO_VCS`</action> <action>If story file YAML frontmatter exists, add `baseline_commit: {{baseline_commit}}` to the frontmatter</action> <action>If story file has no YAML frontmatter, create frontmatter at the top containing only `baseline_commit: {{baseline_commit}}`</action> </check> <check if="{{sprint_status}} file exists"> <check if="{{current_status}} == 'ready-for-dev' OR (review_continuation == true AND {{current_status}} != 'in-progress')"> <action>Update the story in the sprint status report to = "in-progress"</action> <action>Update last_updated field to current date</action>
View on GitHub
This SKILL.md is very large, so SkillsMP previews the first section here. View on GitHub