[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71PHTKD8F1P2D7QE9848KDF":3,"skill-same:01M71PHTKD8F1P2D7QE9848KDF":75},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":14,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":48,"install":49,"resources":62},"01M71PHTKD8F1P2D7QE9848KDF","bmad-dev-story",null,"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\"","jsacko\u002FOpenDFIR","jsacko","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F63580474?v=4","01M71PG17HH9PJ0ME3103K2MF5","Julien Sacko","01M71PG188SHJ0DBAYX85237WG",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fjsacko\u002FOpenDFIR\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fbmad-dev-story\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"dev","dev story","bmad","bmad dev","Story","bmad dev story","context","user","sprint plan","execute","implementation","spec","next","plan","implement","file","when","use","sprint","2026-11-10 13:02:02",false,"---\nname: bmad-dev-story\ndescription: '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\"'\n---\n\n# Dev Story Workflow\n\n**Goal:** Execute story implementation following a context filled story spec file.\n\n**Your Role:** Developer implementing the story.\n- Communicate all responses in {communication_language} and language MUST be tailored to {user_skill_level}\n- Generate all documents in {document_output_language}\n- Only modify the story file in these areas: Tasks\u002FSubtasks checkboxes, Dev Agent Record (Debug Log, Completion Notes), File List, Change Log, and Status\n- Execute ALL steps in exact order; do NOT skip steps\n- 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\u002Fsubtasks checked) UNLESS a HALT condition is triggered or the USER gives other instruction.\n- Do NOT schedule a \"next session\" or request review pauses unless a HALT condition applies. Only Step 9 decides completion.\n- User skill level ({user_skill_level}) affects conversation style ONLY, not code updates.\n\n## Conventions\n\n- Bare paths (e.g. `steps\u002Fstep-01-init.md`) resolve from the skill root.\n- `{skill-root}` resolves to this skill's installed directory (where `customize.toml` lives).\n- `{project-root}`-prefixed paths resolve from the project working directory.\n- `{skill-name}` resolves to the skill directory's basename.\n\n## On Activation\n\n### Step 1: Resolve the Workflow Block\n\nRun: `python3 {project-root}\u002F_bmad\u002Fscripts\u002Fresolve_customization.py --skill {skill-root} --key workflow`\n\n**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:\n\n1. `{skill-root}\u002Fcustomize.toml` — defaults\n2. `{project-root}\u002F_bmad\u002Fcustom\u002F{skill-name}.toml` — team overrides\n3. `{project-root}\u002F_bmad\u002Fcustom\u002F{skill-name}.user.toml` — personal overrides\n\nAny 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.\n\n### Step 2: Execute Prepend Steps\n\nExecute each entry in `{workflow.activation_steps_prepend}` in order before proceeding.\n\n### Step 3: Load Persistent Facts\n\nTreat 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.\n\n### Step 4: Load Config\n\nLoad config from `{project-root}\u002F_bmad\u002Fbmm\u002Fconfig.yaml` and resolve:\n\n- `project_name`, `user_name`\n- `communication_language`, `document_output_language`\n- `user_skill_level`\n- `implementation_artifacts`\n- `date` as system-generated current datetime\n\n### Step 5: Greet the User\n\nGreet `{user_name}`, speaking in `{communication_language}`.\n\n### Step 6: Execute Append Steps\n\nExecute each entry in `{workflow.activation_steps_append}` in order.\n\nActivation is complete. Begin the workflow below.\n\n## Paths\n\n- `story_file` = `` (explicit story path; auto-discovered if empty)\n- `sprint_status` = `{implementation_artifacts}\u002Fsprint-status.yaml`\n\n## Execution\n\n\u003Cworkflow>\n  \u003Ccritical>Communicate all responses in {communication_language} and language MUST be tailored to {user_skill_level}\u003C\u002Fcritical>\n  \u003Ccritical>Generate all documents in {document_output_language}\u003C\u002Fcritical>\n  \u003Ccritical>Only modify the story file in these areas: Tasks\u002FSubtasks checkboxes, Dev Agent Record (Debug Log, Completion Notes), File List,\n    Change Log, and Status\u003C\u002Fcritical>\n  \u003Ccritical>Execute ALL steps in exact order; do NOT skip steps\u003C\u002Fcritical>\n  \u003Ccritical>Absolutely DO NOT stop because of \"milestones\", \"significant progress\", or \"session boundaries\". Continue in a single execution\n    until the story is COMPLETE (all ACs satisfied and all tasks\u002Fsubtasks checked) UNLESS a HALT condition is triggered or the USER gives\n    other instruction.\u003C\u002Fcritical>\n  \u003Ccritical>Do NOT schedule a \"next session\" or request review pauses unless a HALT condition applies. Only Step 9 decides completion.\u003C\u002Fcritical>\n  \u003Ccritical>User skill level ({user_skill_level}) affects conversation style ONLY, not code updates.\u003C\u002Fcritical>\n\n  \u003Cstep n=\"1\" goal=\"Find next ready story and load it\" tag=\"sprint-status\">\n    \u003Ccheck if=\"{{story_path}} is provided\">\n      \u003Caction>Use {{story_path}} directly\u003C\u002Faction>\n      \u003Caction>Read COMPLETE story file\u003C\u002Faction>\n      \u003Caction>Extract story_key from filename or metadata\u003C\u002Faction>\n      \u003Cgoto anchor=\"task_check\" \u002F>\n    \u003C\u002Fcheck>\n\n    \u003C!-- Sprint-based story discovery -->\n    \u003Ccheck if=\"{{sprint_status}} file exists\">\n      \u003Ccritical>MUST read COMPLETE sprint-status.yaml file from start to end to preserve order\u003C\u002Fcritical>\n      \u003Caction>Load the FULL file: {{sprint_status}}\u003C\u002Faction>\n      \u003Caction>Read ALL lines from beginning to end - do not skip any content\u003C\u002Faction>\n      \u003Caction>Parse the development_status section completely to understand story order\u003C\u002Faction>\n\n      \u003Caction>Find the FIRST story (by reading in order from top to bottom) where:\n        - Key matches pattern: number-number-name (e.g., \"1-2-user-auth\")\n        - NOT an epic key (epic-X) or retrospective (epic-X-retrospective)\n        - Status value equals \"ready-for-dev\"\n      \u003C\u002Faction>\n\n      \u003Ccheck if=\"no ready-for-dev or in-progress story found\">\n        \u003Coutput>📋 No ready-for-dev stories found in sprint-status.yaml\n\n          **Current Sprint Status:** {{sprint_status_summary}}\n\n          **What would you like to do?**\n          1. Run `create-story` to create next story from epics with comprehensive context\n          2. Run `*validate-create-story` to improve existing stories before development (recommended quality check)\n          3. Specify a particular story file to develop (provide full path)\n          4. Check {{sprint_status}} file to see current sprint status\n\n          💡 **Tip:** Stories in `ready-for-dev` may not have been validated. Consider running `validate-create-story` first for a quality\n          check.\n        \u003C\u002Foutput>\n        \u003Cask>Choose option [1], [2], [3], or [4], or specify story file path:\u003C\u002Fask>\n\n        \u003Ccheck if=\"user chooses '1'\">\n          \u003Caction>HALT - Run create-story to create next story\u003C\u002Faction>\n        \u003C\u002Fcheck>\n\n        \u003Ccheck if=\"user chooses '2'\">\n          \u003Caction>HALT - Run validate-create-story to improve existing stories\u003C\u002Faction>\n        \u003C\u002Fcheck>\n\n        \u003Ccheck if=\"user chooses '3'\">\n          \u003Cask>Provide the story file path to develop:\u003C\u002Fask>\n          \u003Caction>Store user-provided story path as {{story_path}}\u003C\u002Faction>\n          \u003Cgoto anchor=\"task_check\" \u002F>\n        \u003C\u002Fcheck>\n\n        \u003Ccheck if=\"user chooses '4'\">\n          \u003Coutput>Loading {{sprint_status}} for detailed status review...\u003C\u002Foutput>\n          \u003Caction>Display detailed sprint status analysis\u003C\u002Faction>\n          \u003Caction>HALT - User can review sprint status and provide story path\u003C\u002Faction>\n        \u003C\u002Fcheck>\n\n        \u003Ccheck if=\"user provides story file path\">\n          \u003Caction>Store user-provided story path as {{story_path}}\u003C\u002Faction>\n          \u003Cgoto anchor=\"task_check\" \u002F>\n        \u003C\u002Fcheck>\n      \u003C\u002Fcheck>\n    \u003C\u002Fcheck>\n\n    \u003C!-- Non-sprint story discovery -->\n    \u003Ccheck if=\"{{sprint_status}} file does NOT exist\">\n      \u003Caction>Search {implementation_artifacts} for stories directly\u003C\u002Faction>\n      \u003Caction>Find stories with \"ready-for-dev\" status in files\u003C\u002Faction>\n      \u003Caction>Look for story files matching pattern: *-*-*.md\u003C\u002Faction>\n      \u003Caction>Read each candidate story file to check Status section\u003C\u002Faction>\n\n      \u003Ccheck if=\"no ready-for-dev stories found in story files\">\n        \u003Coutput>📋 No ready-for-dev stories found\n\n          **Available Options:**\n          1. Run `create-story` to create next story from epics with comprehensive context\n          2. Run `*validate-create-story` to improve existing stories\n          3. Specify which story to develop\n        \u003C\u002Foutput>\n        \u003Cask>What would you like to do? Choose option [1], [2], or [3]:\u003C\u002Fask>\n\n        \u003Ccheck if=\"user chooses '1'\">\n          \u003Caction>HALT - Run create-story to create next story\u003C\u002Faction>\n        \u003C\u002Fcheck>\n\n        \u003Ccheck if=\"user chooses '2'\">\n          \u003Caction>HALT - Run validate-create-story to improve existing stories\u003C\u002Faction>\n        \u003C\u002Fcheck>\n\n        \u003Ccheck if=\"user chooses '3'\">\n          \u003Cask>It's unclear what story you want developed. Please provide the full path to the story file:\u003C\u002Fask>\n          \u003Caction>Store user-provided story path as {{story_path}}\u003C\u002Faction>\n          \u003Caction>Continue with provided story file\u003C\u002Faction>\n        \u003C\u002Fcheck>\n      \u003C\u002Fcheck>\n\n      \u003Ccheck if=\"ready-for-dev story found in files\">\n        \u003Caction>Use discovered story file and extract story_key\u003C\u002Faction>\n      \u003C\u002Fcheck>\n    \u003C\u002Fcheck>\n\n    \u003Caction>Store the found story_key (e.g., \"1-2-user-authentication\") for later status updates\u003C\u002Faction>\n    \u003Caction>Find matching story file in {implementation_artifacts} using story_key pattern: {{story_key}}.md\u003C\u002Faction>\n    \u003Caction>Read COMPLETE story file from discovered path\u003C\u002Faction>\n\n    \u003Canchor id=\"task_check\" \u002F>\n\n    \u003Caction>Parse sections: Story, Acceptance Criteria, Tasks\u002FSubtasks, Dev Notes, Dev Agent Record, File List, Change Log, Status\u003C\u002Faction>\n\n    \u003Caction>Load comprehensive context from story file's Dev Notes section\u003C\u002Faction>\n    \u003Caction>Extract developer guidance from Dev Notes: architecture requirements, previous learnings, technical specifications\u003C\u002Faction>\n    \u003Caction>Use enhanced story context to inform implementation decisions and approaches\u003C\u002Faction>\n\n    \u003Caction>Identify first incomplete task (unchecked [ ]) in Tasks\u002FSubtasks\u003C\u002Faction>\n\n    \u003Caction if=\"no incomplete tasks\">\n      \u003Cgoto step=\"9\">Completion sequence\u003C\u002Fgoto>\n    \u003C\u002Faction>\n    \u003Caction if=\"story file inaccessible\">HALT: \"Cannot develop story without access to story file\"\u003C\u002Faction>\n    \u003Caction if=\"incomplete task or subtask requirements ambiguous\">ASK user to clarify or HALT\u003C\u002Faction>\n  \u003C\u002Fstep>\n\n  \u003Cstep n=\"2\" goal=\"Load project context and story information\">\n    \u003Ccritical>Load all available context to inform implementation\u003C\u002Fcritical>\n\n    \u003Caction>Load {project_context} for coding standards and project-wide patterns (if exists)\u003C\u002Faction>\n    \u003Caction>Parse sections: Story, Acceptance Criteria, Tasks\u002FSubtasks, Dev Notes, Dev Agent Record, File List, Change Log, Status\u003C\u002Faction>\n    \u003Caction>Load comprehensive context from story file's Dev Notes section\u003C\u002Faction>\n    \u003Caction>Extract developer guidance from Dev Notes: architecture requirements, previous learnings, technical specifications\u003C\u002Faction>\n    \u003Caction>Use enhanced story context to inform implementation decisions and approaches\u003C\u002Faction>\n    \u003Coutput>✅ **Context Loaded**\n      Story and project context available for implementation\n    \u003C\u002Foutput>\n  \u003C\u002Fstep>\n\n  \u003Cstep n=\"3\" goal=\"Detect review continuation and extract review context\">\n    \u003Ccritical>Determine if this is a fresh start or continuation after code review\u003C\u002Fcritical>\n\n    \u003Caction>Check if \"Senior Developer Review (AI)\" section exists in the story file\u003C\u002Faction>\n    \u003Caction>Check if \"Review Follow-ups (AI)\" subsection exists under Tasks\u002FSubtasks\u003C\u002Faction>\n\n    \u003Ccheck if=\"Senior Developer Review section exists\">\n      \u003Caction>Set review_continuation = true\u003C\u002Faction>\n      \u003Caction>Extract from \"Senior Developer Review (AI)\" section:\n        - Review outcome (Approve\u002FChanges Requested\u002FBlocked)\n        - Review date\n        - Total action items with checkboxes (count checked vs unchecked)\n        - Severity breakdown (High\u002FMed\u002FLow counts)\n      \u003C\u002Faction>\n      \u003Caction>Count unchecked [ ] review follow-up tasks in \"Review Follow-ups (AI)\" subsection\u003C\u002Faction>\n      \u003Caction>Store list of unchecked review items as {{pending_review_items}}\u003C\u002Faction>\n\n      \u003Coutput>⏯️ **Resuming Story After Code Review** ({{review_date}})\n\n        **Review Outcome:** {{review_outcome}}\n        **Action Items:** {{unchecked_review_count}} remaining to address\n        **Priorities:** {{high_count}} High, {{med_count}} Medium, {{low_count}} Low\n\n        **Strategy:** Will prioritize review follow-up tasks (marked [AI-Review]) before continuing with regular tasks.\n      \u003C\u002Foutput>\n    \u003C\u002Fcheck>\n\n    \u003Ccheck if=\"Senior Developer Review section does NOT exist\">\n      \u003Caction>Set review_continuation = false\u003C\u002Faction>\n      \u003Caction>Set {{pending_review_items}} = empty\u003C\u002Faction>\n\n      \u003Coutput>🚀 **Starting Fresh Implementation**\n\n        Story: {{story_key}}\n        Story Status: {{current_status}}\n        First incomplete task: {{first_task_description}}\n      \u003C\u002Foutput>\n    \u003C\u002Fcheck>\n  \u003C\u002Fstep>\n\n  \u003Cstep n=\"4\" goal=\"Mark story in-progress\" tag=\"sprint-status\">\n    \u003Ccheck if=\"{{sprint_status}} file exists\">\n      \u003Caction>Load the FULL file: {{sprint_status}}\u003C\u002Faction>\n      \u003Caction>Read all development_status entries to find {{story_key}}\u003C\u002Faction>\n      \u003Caction>Get current status value for development_status[{{story_key}}]\u003C\u002Faction>\n\n      \u003Ccheck if=\"current status == 'ready-for-dev' OR review_continuation == true\">\n        \u003Caction>Update the story in the sprint status report to = \"in-progress\"\u003C\u002Faction>\n        \u003Caction>Update last_updated field to current date\u003C\u002Faction>\n        \u003Coutput>🚀 Starting work on story {{story_key}}\n          Status updated: ready-for-dev → in-progress\n        \u003C\u002Foutput>\n      \u003C\u002Fcheck>\n\n      \u003Ccheck if=\"current status == 'in-progress'\">\n        \u003Coutput>⏯️ Resuming work on story {{story_key}}\n          Story is already marked in-progress\n        \u003C\u002Foutput>\n      \u003C\u002Fcheck>\n\n      \u003Ccheck if=\"current status is neither ready-for-dev nor in-progress\">\n        \u003Coutput>⚠️ Unexpected story status: {{current_status}}\n          Expected ready-for-dev or in-progress. Continuing anyway...\n        \u003C\u002Foutput>\n      \u003C\u002Fcheck>\n\n      \u003Caction>Store {{current_sprint_status}} for later use\u003C\u002Faction>\n    \u003C\u002Fcheck>\n\n    \u003Ccheck if=\"{{sprint_status}} file does NOT exist\">\n      \u003Coutput>ℹ️ No sprint status file exists - story progress will be tracked in story file only\u003C\u002Foutput>\n      \u003Caction>Set {{current_sprint_status}} = \"no-sprint-tracking\"\u003C\u002Faction>\n    \u003C\u002Fcheck>\n  \u003C\u002Fstep>\n\n  \u003Cstep n=\"5\" goal=\"Implement task following red-green-refactor cycle\">\n    \u003Ccritical>FOLLOW THE STORY FILE TASKS\u002FSUBTASKS SEQUENCE EXACTLY AS WRITTEN - NO DEVIATION\u003C\u002Fcritical>\n\n    \u003Caction>Review the current task\u002Fsubtask from the story file - this is your authoritative implementation guide\u003C\u002Faction>\n    \u003Caction>Plan implementation following red-green-refactor cycle\u003C\u002Faction>\n\n    \u003C!-- RED PHASE -->\n    \u003Caction>Write FAILING tests first for the task\u002Fsubtask functionality\u003C\u002Faction>\n    \u003Caction>Confirm tests fail before implementation - this validates test correctness\u003C\u002Faction>\n\n    \u003C!-- GREEN PHASE -->\n    \u003Caction>Implement MINIMAL code to make tests pass\u003C\u002Faction>\n    \u003Caction>Run tests to confirm they now pass\u003C\u002Faction>\n    \u003Caction>Handle error conditions and edge cases as specified in task\u002Fsubtask\u003C\u002Faction>\n\n    \u003C!-- REFACTOR PHASE -->\n    \u003Caction>Improve code structure while keeping tests green\u003C\u002Faction>\n    \u003Caction>Ensure code follows architecture patterns and coding standards from Dev Notes\u003C\u002Faction>\n\n    \u003Caction>Document technical approach and decisions in Dev Agent Record → Implementation Plan\u003C\u002Faction>\n\n    \u003Caction if=\"new dependencies required beyond story specifications\">HALT: \"Additional dependencies need user approval\"\u003C\u002Faction>\n    \u003Caction if=\"3 consecutive implementation failures occur\">HALT and request guidance\u003C\u002Faction>\n    \u003Caction if=\"required configuration is missing\">HALT: \"Cannot proceed without necessary configuration files\"\u003C\u002Faction>\n\n    \u003Ccritical>NEVER implement anything not mapped to a specific task\u002Fsubtask in the story file\u003C\u002Fcritical>\n    \u003Ccritical>NEVER proceed to next task until current task\u002Fsubtask is complete AND tests pass\u003C\u002Fcritical>\n    \u003Ccritical>Execute continuously without pausing until all tasks\u002Fsubtasks are complete or explicit HALT condition\u003C\u002Fcritical>\n    \u003Ccritical>Do NOT propose to pause for review until Step 9 completion gates are satisfied\u003C\u002Fcritical>\n  \u003C\u002Fstep>\n\n  \u003Cstep n=\"6\" goal=\"Author comprehensive tests\">\n    \u003Caction>Create unit tests for business logic and core functionality introduced\u002Fchanged by the task\u003C\u002Faction>\n    \u003Caction>Add integration tests for component interactions specified in story requirements\u003C\u002Faction>\n    \u003Caction>Include end-to-end tests for critical user flows when story requirements demand them\u003C\u002Faction>\n    \u003Caction>Cover edge cases and error handling scenarios identified in story Dev Notes\u003C\u002Faction>\n  \u003C\u002Fstep>\n\n  \u003Cstep n=\"7\" goal=\"Run validations and tests\">\n    \u003Caction>Determine how to run tests for this repo (infer test framework from project structure)\u003C\u002Faction>\n    \u003Caction>Run all existing tests to ensure no regressions\u003C\u002Faction>\n    \u003Caction>Run the new tests to verify implementation correctness\u003C\u002Faction>\n    \u003Caction>Run linting and code quality checks if configured in project\u003C\u002Faction>\n    \u003Caction>Validate implementation meets ALL story acceptance criteria; enforce quantitative thresholds explicitly\u003C\u002Faction>\n    \u003Caction if=\"regression tests fail\">STOP and fix before continuing - identify breaking changes immediately\u003C\u002Faction>\n    \u003Caction if=\"new tests fail\">STOP and fix before continuing - ensure implementation correctness\u003C\u002Faction>\n  \u003C\u002Fstep>\n\n  \u003Cstep n=\"8\" goal=\"Validate and mark task complete ONLY when fully done\">\n    \u003Ccritical>NEVER mark a task complete unless ALL conditions are met - NO LYING OR CHEATING\u003C\u002Fcritical>\n\n    \u003C!-- VALIDATION GATES -->\n    \u003Caction>Verify ALL tests for this task\u002Fsubtask ACTUALLY EXIST and PASS 100%\u003C\u002Faction>\n    \u003Caction>Confirm implementation matches EXACTLY what the task\u002Fsubtask specifies - no extra features\u003C\u002Faction>\n    \u003Caction>Validate that ALL acceptance criteria related to this task are satisfied\u003C\u002Faction>\n    \u003Caction>Run full test suite to ensure NO regressions introduced\u003C\u002Faction>\n\n    \u003C!-- REVIEW FOLLOW-UP HANDLING -->\n    \u003Ccheck if=\"task is review follow-up (has [AI-Review] prefix)\">\n      \u003Caction>Extract review item details (severity, description, related AC\u002Ffile)\u003C\u002Faction>\n      \u003Caction>Add to resolution tracking list: {{resolved_review_items}}\u003C\u002Faction>\n\n      \u003C!-- Mark task in Review Follow-ups section -->\n      \u003Caction>Mark task checkbox [x] in \"Tasks\u002FSubtasks → Review Follow-ups (AI)\" section\u003C\u002Faction>\n\n      \u003C!-- CRITICAL: Also mark corresponding action item in review section -->\n      \u003Caction>Find matching action item in \"Senior Developer Review (AI) → Action Items\" section by matching description\u003C\u002Faction>\n      \u003Caction>Mark that action item checkbox [x] as resolved\u003C\u002Faction>\n\n      \u003Caction>Add to Dev Agent Record → Completion Notes: \"✅ Resolved review finding [{{severity}}]: {{description}}\"\u003C\u002Faction>\n    \u003C\u002Fcheck>\n\n    \u003C!-- ONLY MARK COMPLETE IF ALL VALIDATION PASS -->\n    \u003Ccheck if=\"ALL validation gates pass AND tests ACTUALLY exist and pass\">\n      \u003Caction>ONLY THEN mark the task (and subtasks) checkbox with [x]\u003C\u002Faction>\n      \u003Caction>Update File List section with ALL new, modified, or deleted files (paths relative to repo root)\u003C\u002Faction>\n      \u003Caction>Add completion notes to Dev Agent Record summarizing what was ACTUALLY implemented and tested\u003C\u002Faction>\n    \u003C\u002Fcheck>\n\n    \u003Ccheck if=\"ANY validation fails\">\n      \u003Caction>DO NOT mark task complete - fix issues first\u003C\u002Faction>\n      \u003Caction>HALT if unable to fix validation failures\u003C\u002Faction>\n    \u003C\u002Fcheck>\n\n    \u003Ccheck if=\"review_continuation == true and {{resolved_review_items}} is not empty\">\n      \u003Caction>Count total resolved review items in this session\u003C\u002Faction>\n      \u003Caction>Add Change Log entry: \"Addressed code review findings - {{resolved_count}} items resolved (Date: {{date}})\"\u003C\u002Faction>\n    \u003C\u002Fcheck>\n\n    \u003Caction>Save the story file\u003C\u002Faction>\n    \u003Caction>Determine if more incomplete tasks remain\u003C\u002Faction>\n    \u003Caction if=\"more tasks remain\">\n      \u003Cgoto step=\"5\">Next task\u003C\u002Fgoto>\n    \u003C\u002Faction>\n    \u003Caction if=\"no tasks remain\">\n      \u003Cgoto step=\"9\">Completion\u003C\u002Fgoto>\n    \u003C\u002Faction>\n  \u003C\u002Fstep>\n\n  \u003Cstep n=\"9\" goal=\"Story completion and mark for review\" tag=\"sprint-status\">\n    \u003Caction>Verify ALL tasks and subtasks are marked [x] (re-scan the story document now)\u003C\u002Faction>\n    \u003Caction>Run the full regression suite (do not skip)\u003C\u002Faction>\n    \u003Caction>Confirm File List includes every changed file\u003C\u002Faction>\n    \u003Caction>Execute enhanced definition-of-done validation\u003C\u002Faction>\n    \u003Caction>Update the story Status to: \"review\"\u003C\u002Faction>\n\n    \u003C!-- Enhanced Definition of Done Validation -->\n    \u003Caction>Validate definition-of-done checklist with essential requirements:\n      - All tasks\u002Fsubtasks marked complete with [x]\n      - Implementation satisfies every Acceptance Criterion\n      - Unit tests for core functionality added\u002Fupdated\n      - Integration tests for component interactions added when required\n      - End-to-end tests for critical flows added when story demands them\n      - All tests pass (no regressions, new tests successful)\n      - Code quality checks pass (linting, static analysis if configured)\n      - File List includes every new\u002Fmodified\u002Fdeleted file (relative paths)\n      - Dev Agent Record contains implementation notes\n      - Change Log includes summary of changes\n      - Only permitted story sections were modified\n    \u003C\u002Faction>\n\n    \u003C!-- Mark story ready for review - sprint status conditional -->\n    \u003Ccheck if=\"{sprint_status} file exists AND {{current_sprint_status}} != 'no-sprint-tracking'\">\n      \u003Caction>Load the FULL file: {sprint_status}\u003C\u002Faction>\n      \u003Caction>Find development_status key matching {{story_key}}\u003C\u002Faction>\n      \u003Caction>Verify current status is \"in-progress\" (expected previous state)\u003C\u002Faction>\n      \u003Caction>Update development_status[{{story_key}}] = \"review\"\u003C\u002Faction>\n      \u003Caction>Update last_updated field to current date\u003C\u002Faction>\n      \u003Caction>Save file, preserving ALL comments and structure including STATUS DEFINITIONS\u003C\u002Faction>\n      \u003Coutput>✅ Story status updated to \"review\" in sprint-status.yaml\u003C\u002Foutput>\n    \u003C\u002Fcheck>\n\n    \u003Ccheck if=\"{sprint_status} file does NOT exist OR {{current_sprint_status}} == 'no-sprint-tracking'\">\n      \u003Coutput>ℹ️ Story status updated to \"review\" in story file (no sprint tracking configured)\u003C\u002Foutput>\n    \u003C\u002Fcheck>\n\n    \u003Ccheck if=\"story key not found in sprint status\">\n      \u003Coutput>⚠️ Story file updated, but sprint-status update failed: {{story_key}} not found\n\n        Story status is set to \"review\" in file, but sprint-status.yaml may be out of sync.\n      \u003C\u002Foutput>\n    \u003C\u002Fcheck>\n\n    \u003C!-- Final validation gates -->\n    \u003Caction if=\"any task is incomplete\">HALT - Complete remaining tasks before marking ready for review\u003C\u002Faction>\n    \u003Caction if=\"regression failures exist\">HALT - Fix regression issues before completing\u003C\u002Faction>\n    \u003Caction if=\"File List is incomplete\">HALT - Update File List with all changed files\u003C\u002Faction>\n    \u003Caction if=\"definition-of-done validation fails\">HALT - Address DoD failures before completing\u003C\u002Faction>\n  \u003C\u002Fstep>\n\n  \u003Cstep n=\"10\" goal=\"Completion communication and user support\">\n    \u003Caction>Execute the enhanced definition-of-done checklist using the validation framework\u003C\u002Faction>\n    \u003Caction>Prepare a concise summary in Dev Agent Record → Completion Notes\u003C\u002Faction>\n\n    \u003Caction>Communicate to {user_name} that story implementation is complete and ready for review\u003C\u002Faction>\n    \u003Caction>Summarize key accomplishments: story ID, story key, title, key changes made, tests added, files modified\u003C\u002Faction>\n    \u003Caction>Provide the story file path and current status (now \"review\")\u003C\u002Faction>\n\n    \u003Caction>Based on {user_skill_level}, ask if user needs any explanations about:\n      - What was implemented and how it works\n      - Why certain technical decisions were made\n      - How to test or verify the changes\n      - Any patterns, libraries, or approaches used\n      - Anything else they'd like clarified\n    \u003C\u002Faction>\n\n    \u003Ccheck if=\"user asks for explanations\">\n      \u003Caction>Provide clear, contextual explanations tailored to {user_skill_level}\u003C\u002Faction>\n      \u003Caction>Use examples and references to specific code when helpful\u003C\u002Faction>\n    \u003C\u002Fcheck>\n\n    \u003Caction>Once explanations are complete (or user indicates no questions), suggest logical next steps\u003C\u002Faction>\n    \u003Caction>Recommended next steps (flexible based on project setup):\n      - Review the implemented story and test the changes\n      - Verify all acceptance criteria are met\n      - Ensure deployment readiness if applicable\n      - Run `code-review` workflow for peer review\n      - Optional: If Test Architect module installed, run `\u002Fbmad:tea:automate` to expand guardrail tests\n    \u003C\u002Faction>\n\n    \u003Coutput>💡 **Tip:** For best results, run `code-review` using a **different** LLM than the one that implemented this story.\u003C\u002Foutput>\n    \u003Ccheck if=\"{sprint_status} file exists\">\n      \u003Caction>Suggest checking {sprint_status} to see project progress\u003C\u002Faction>\n    \u003C\u002Fcheck>\n    \u003Caction>Remain flexible - allow user to choose their own path or ask for other assistance\u003C\u002Faction>\n  \u003Caction>Run: `python3 {project-root}\u002F_bmad\u002Fscripts\u002Fresolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.\u003C\u002Faction>\n  \u003C\u002Fstep>\n\n\u003C\u002Fworkflow>\n","# Dev Story Workflow\n\n**Goal:** Execute story implementation following a context filled story spec file.\n\n**Your Role:** Developer implementing the story.\n- Communicate all responses in {communication_language} and language MUST be tailored to {user_skill_level}\n- Generate all documents in {document_output_language}\n- Only modify the story file in these areas: Tasks\u002FSubtasks checkboxes, Dev Agent Record (Debug Log, Completion Notes), File List, Change Log, and Status\n- Execute ALL steps in exact order; do NOT skip steps\n- 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\u002Fsubtasks checked) UNLESS a HALT condition is triggered or the USER gives other instruction.\n- Do NOT schedule a \"next session\" or request review pauses unless a HALT condition applies. Only Step 9 decides completion.\n- User skill level ({user_skill_level}) affects conversation style ONLY, not code updates.\n\n## Conventions\n\n- Bare paths (e.g. `steps\u002Fstep-01-init.md`) resolve from the skill root.\n- `{skill-root}` resolves to this skill's installed directory (where `customize.toml` lives).\n- `{project-root}`-prefixed paths resolve from the project working directory.\n- `{skill-name}` resolves to the skill directory's basename.\n\n## On Activation\n\n### Step 1: Resolve the Workflow Block\n\nRun: `python3 {project-root}\u002F_bmad\u002Fscripts\u002Fresolve_customization.py --skill {skill-root} --key workflow`\n\n**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:\n\n1. `{skill-root}\u002Fcustomize.toml` — defaults\n2. `{project-root}\u002F_bmad\u002Fcustom\u002F{skill-name}.toml` — team overrides\n3. `{project-root}\u002F_bmad\u002Fcustom\u002F{skill-name}.user.toml` — personal overrides\n\nAny 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.\n\n### Step 2: Execute Prepend Steps\n\nExecute each entry in `{workflow.activation_steps_prepend}` in order before proceeding.\n\n### Step 3: Load Persistent Facts\n\nTreat 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.\n\n### Step 4: Load Config\n\nLoad config from `{project-root}\u002F_bmad\u002Fbmm\u002Fconfig.yaml` and resolve:\n\n- `project_name`, `user_name`\n- `communication_language`, `document_output_language`\n- `user_skill_level`\n- `implementation_artifacts`\n- `date` as system-generated current datetime\n\n### Step 5: Greet the User\n\nGreet `{user_name}`, speaking in `{communication_language}`.\n\n### Step 6: Execute Append Steps\n\nExecute each entry in `{workflow.activation_steps_append}` in order.\n\nActivation is complete. Begin the workflow below.\n\n## Paths\n\n- `story_file` = `` (explicit story path; auto-discovered if empty)\n- `sprint_status` = `{implementation_artifacts}\u002Fsprint-status.yaml`\n\n## Execution\n\n\u003Cworkflow>\n  \u003Ccritical>Communicate all responses in {communication_language} and language MUST be tailored to {user_skill_level}\u003C\u002Fcritical>\n  \u003Ccritical>Generate all documents in {document_output_language}\u003C\u002Fcritical>\n  \u003Ccritical>Only modify the story file in these areas: Tasks\u002FSubtasks checkboxes, Dev Agent Record (Debug Log, Completion Notes), File List,\n    Change Log, and Status\u003C\u002Fcritical>\n  \u003Ccritical>Execute ALL steps in exact order; do NOT skip steps\u003C\u002Fcritical>\n  \u003Ccritical>Absolutely DO NOT stop because of \"milestones\", \"significant progress\", or \"session boundaries\". Continue in a single execution\n    until the story is COMPLETE (all ACs satisfied and all tasks\u002Fsubtasks checked) UNLESS a HALT condition is triggered or the USER gives\n    other instruction.\u003C\u002Fcritical>\n  \u003Ccritical>Do NOT schedule a \"next session\" or request review pauses unless a HALT condition applies. Only Step 9 decides completion.\u003C\u002Fcritical>\n  \u003Ccritical>User skill level ({user_skill_level}) affects conversation style ONLY, not code updates.\u003C\u002Fcritical>\n\n  \u003Cstep n=\"1\" goal=\"Find next ready story and load it\" tag=\"sprint-status\">\n    \u003Ccheck if=\"{{story_path}} is provided\">\n      \u003Caction>Use {{story_path}} directly\u003C\u002Faction>\n      \u003Caction>Read COMPLETE story file\u003C\u002Faction>\n      \u003Caction>Extract story_key from filename or metadata\u003C\u002Faction>\n      \u003Cgoto anchor=\"task_check\" \u002F>\n    \u003C\u002Fcheck>\n\n    \u003C!-- Sprint-based story discovery -->\n    \u003Ccheck if=\"{{sprint_status}} file exists\">\n      \u003Ccritical>MUST read COMPLETE sprint-status.yaml file from start to end to preserve order\u003C\u002Fcritical>\n      \u003Caction>Load the FULL file: {{sprint_status}}\u003C\u002Faction>\n      \u003Caction>Read ALL lines from beginning to end - do not skip any content\u003C\u002Faction>\n      \u003Caction>Parse the development_status section completely to understand story order\u003C\u002Faction>\n\n      \u003Caction>Find the FIRST story (by reading in order from top to bottom) where:\n        - Key matches pattern: number-number-name (e.g., \"1-2-user-auth\")\n        - NOT an epic key (epic-X) or retrospective (epic-X-retrospective)\n        - Status value equals \"ready-for-dev\"\n      \u003C\u002Faction>\n\n      \u003Ccheck if=\"no ready-for-dev or in-progress story found\">\n        \u003Coutput>📋 No ready-for-dev stories found in sprint-status.yaml\n\n          **Current Sprint Status:** {{sprint_status_summary}}\n\n          **What would you like to do?**\n          1. Run `create-story` to create next story from epics with comprehensive context\n          2. Run `*validate-create-story` to improve existing stories before development (recommended quality check)\n          3. Specify a particular story file to develop (provide full path)\n          4. Check {{sprint_status}} file to see current sprint status\n\n          💡 **Tip:** Stories in `ready-for-dev` may not have been validated. Consider running `validate-create-story` first for a quality\n          check.\n        \u003C\u002Foutput>\n        \u003Cask>Choose option [1], [2], [3], or [4], or specify story file path:\u003C\u002Fask>\n\n        \u003Ccheck if=\"user chooses '1'\">\n          \u003Caction>HALT - Run create-story to create next story\u003C\u002Faction>\n        \u003C\u002Fcheck>\n\n        \u003Ccheck if=\"user chooses '2'\">\n          \u003Caction>HALT - Run validate-create-story to improve existing stories\u003C\u002Faction>\n        \u003C\u002Fcheck>\n\n        \u003Ccheck if=\"user chooses '3'\">\n          \u003Cask>Provide the story file path to develop:\u003C\u002Fask>\n          \u003Caction>Store user-provided story path as {{story_path}}\u003C\u002Faction>\n          \u003Cgoto anchor=\"task_check\" \u002F>\n        \u003C\u002Fcheck>\n\n        \u003Ccheck if=\"user chooses '4'\">\n          \u003Coutput>Loading {{sprint_status}} for detailed status review...\u003C\u002Foutput>\n          \u003Caction>Display detailed sprint status analysis\u003C\u002Faction>\n          \u003Caction>HALT - User can review sprint status and provide story path\u003C\u002Faction>\n        \u003C\u002Fcheck>\n\n        \u003Ccheck if=\"user provides story file path\">\n          \u003Caction>Store user-provided story path as {{story_path}}\u003C\u002Faction>\n          \u003Cgoto anchor=\"task_check\" \u002F>\n        \u003C\u002Fcheck>\n      \u003C\u002Fcheck>\n    \u003C\u002Fcheck>\n\n    \u003C!-- Non-sprint story discovery -->\n    \u003Ccheck if=\"{{sprint_status}} file does NOT exist\">\n      \u003Caction>Search {implementation_artifacts} for stories directly\u003C\u002Faction>\n      \u003Caction>Find stories with \"ready-for-dev\" status in files\u003C\u002Faction>\n      \u003Caction>Look for story files matching pattern: *-*-*.md\u003C\u002Faction>\n      \u003Caction>Read each candidate story file to check Status section\u003C\u002Faction>\n\n      \u003Ccheck if=\"no ready-for-dev stories found in story files\">\n        \u003Coutput>📋 No ready-for-dev stories found\n\n          **Available Options:**\n          1. Run `create-story` to create next story from epics with comprehensive context\n          2. Run `*validate-create-story` to improve existing stories\n          3. Specify which story to develop\n        \u003C\u002Foutput>\n        \u003Cask>What would you like to do? Choose option [1], [2], or [3]:\u003C\u002Fask>\n\n        \u003Ccheck if=\"user chooses '1'\">\n          \u003Caction>HALT - Run create-story to create next story\u003C\u002Faction>\n        \u003C\u002Fcheck>\n\n        \u003Ccheck if=\"user chooses '2'\">\n          \u003Caction>HALT - Run validate-create-story to improve existing stories\u003C\u002Faction>\n        \u003C\u002Fcheck>\n\n        \u003Ccheck if=\"user chooses '3'\">\n          \u003Cask>It's unclear what story you want developed. Please provide the full path to the story file:\u003C\u002Fask>\n          \u003Caction>Store user-provided story path as {{story_path}}\u003C\u002Faction>\n          \u003Caction>Continue with provided story file\u003C\u002Faction>\n        \u003C\u002Fcheck>\n      \u003C\u002Fcheck>\n\n      \u003Ccheck if=\"ready-for-dev story found in files\">\n        \u003Caction>Use discovered story file and extract story_key\u003C\u002Faction>\n      \u003C\u002Fcheck>\n    \u003C\u002Fcheck>\n\n    \u003Caction>Store the found story_key (e.g., \"1-2-user-authentication\") for later status updates\u003C\u002Faction>\n    \u003Caction>Find matching story file in {implementation_artifacts} using story_key pattern: {{story_key}}.md\u003C\u002Faction>\n    \u003Caction>Read COMPLETE story file from discovered path\u003C\u002Faction>\n\n    \u003Canchor id=\"task_check\" \u002F>\n\n    \u003Caction>Parse sections: Story, Acceptance Criteria, Tasks\u002FSubtasks, Dev Notes, Dev Agent Record, File List, Change Log, Status\u003C\u002Faction>\n\n    \u003Caction>Load comprehensive context from story file's Dev Notes section\u003C\u002Faction>\n    \u003Caction>Extract developer guidance from Dev Notes: architecture requirements, previous learnings, technical specifications\u003C\u002Faction>\n    \u003Caction>Use enhanced story context to inform implementation decisions and approaches\u003C\u002Faction>\n\n    \u003Caction>Identify first incomplete task (unchecked [ ]) in Tasks\u002FSubtasks\u003C\u002Faction>\n\n    \u003Caction if=\"no incomplete tasks\">\n      \u003Cgoto step=\"9\">Completion sequence\u003C\u002Fgoto>\n    \u003C\u002Faction>\n    \u003Caction if=\"story file inaccessible\">HALT: \"Cannot develop story without access to story file\"\u003C\u002Faction>\n    \u003Caction if=\"incomplete task or subtask requirements ambiguous\">ASK user to clarify or HALT\u003C\u002Faction>\n  \u003C\u002Fstep>\n\n  \u003Cstep n=\"2\" goal=\"Load project context and story information\">\n    \u003Ccritical>Load all available context to inform implementation\u003C\u002Fcritical>\n\n    \u003Caction>Load {project_context} for coding standards and project-wide patterns (if exists)\u003C\u002Faction>\n    \u003Caction>Parse sections: Story, Acceptance Criteria, Tasks\u002FSubtasks, Dev Notes, Dev Agent Record, File List, Change Log, Status\u003C\u002Faction>\n    \u003Caction>Load comprehensive context from story file's Dev Notes section\u003C\u002Faction>\n    \u003Caction>Extract developer guidance from Dev Notes: architecture requirements, previous learnings, technical specifications\u003C\u002Faction>\n    \u003Caction>Use enhanced story context to inform implementation decisions and approaches\u003C\u002Faction>\n    \u003Coutput>✅ **Context Loaded**\n      Story and project context available for implementation\n    \u003C\u002Foutput>\n  \u003C\u002Fstep>\n\n  \u003Cstep n=\"3\" goal=\"Detect review continuation and extract review context\">\n    \u003Ccritical>Determine if this is a fresh start or continuation after code review\u003C\u002Fcritical>\n\n    \u003Caction>Check if \"Senior Developer Review (AI)\" section exists in the story file\u003C\u002Faction>\n    \u003Caction>Check if \"Review Follow-ups (AI)\" subsection exists under Tasks\u002FSubtasks\u003C\u002Faction>\n\n    \u003Ccheck if=\"Senior Developer Review section exists\">\n      \u003Caction>Set review_continuation = true\u003C\u002Faction>\n      \u003Caction>Extract from \"Senior Developer Review (AI)\" section:\n        - Review outcome (Approve\u002FChanges Requested\u002FBlocked)\n        - Review date\n        - Total action items with checkboxes (count checked vs unchecked)\n        - Severity breakdown (High\u002FMed\u002FLow counts)\n      \u003C\u002Faction>\n      \u003Caction>Count unchecked [ ] review follow-up tasks in \"Review Follow-ups (AI)\" subsection\u003C\u002Faction>\n      \u003Caction>Store list of unchecked review items as {{pending_review_items}}\u003C\u002Faction>\n\n      \u003Coutput>⏯️ **Resuming Story After Code Review** ({{review_date}})\n\n        **Review Outcome:** {{review_outcome}}\n        **Action Items:** {{unchecked_review_count}} remaining to address\n        **Priorities:** {{high_count}} High, {{med_count}} Medium, {{low_count}} Low\n\n        **Strategy:** Will prioritize review follow-up tasks (marked [AI-Review]) before continuing with regular tasks.\n      \u003C\u002Foutput>\n    \u003C\u002Fcheck>\n\n    \u003Ccheck if=\"Senior Developer Review section does NOT exist\">\n      \u003Caction>Set review_continuation = false\u003C\u002Faction>\n      \u003Caction>Set {{pending_review_items}} = empty\u003C\u002Faction>\n\n      \u003Coutput>🚀 **Starting Fresh Implementation**\n\n        Story: {{story_key}}\n        Story Status: {{current_status}}\n        First incomplete task: {{first_task_description}}\n      \u003C\u002Foutput>\n    \u003C\u002Fcheck>\n  \u003C\u002Fstep>\n\n  \u003Cstep n=\"4\" goal=\"Mark story in-progress\" tag=\"sprint-status\">\n    \u003Ccheck if=\"{{sprint_status}} file exists\">\n      \u003Caction>Load the FULL file: {{sprint_status}}\u003C\u002Faction>\n      \u003Caction>Read all development_status entries to find {{story_key}}\u003C\u002Faction>\n      \u003Caction>Get current status value for development_status[{{story_key}}]\u003C\u002Faction>\n\n      \u003Ccheck if=\"current status == 'ready-for-dev' OR review_continuation == true\">\n        \u003Caction>Update the story in the sprint status report to = \"in-progress\"\u003C\u002Faction>\n        \u003Caction>Update last_updated field to current date\u003C\u002Faction>\n        \u003Coutput>🚀 Starting work on story {{story_key}}\n          Status updated: ready-for-dev → in-progress\n        \u003C\u002Foutput>\n      \u003C\u002Fcheck>\n\n      \u003Ccheck if=\"current status == 'in-progress'\">\n        \u003Coutput>⏯️ Resuming work on story {{story_key}}\n          Story is already marked in-progress\n        \u003C\u002Foutput>\n      \u003C\u002Fcheck>\n\n      \u003Ccheck if=\"current status is neither ready-for-dev nor in-progress\">\n        \u003Coutput>⚠️ Unexpected story status: {{current_status}}\n          Expected ready-for-dev or in-progress. Continuing anyway...\n        \u003C\u002Foutput>\n      \u003C\u002Fcheck>\n\n      \u003Caction>Store {{current_sprint_status}} for later use\u003C\u002Faction>\n    \u003C\u002Fcheck>\n\n    \u003Ccheck if=\"{{sprint_status}} file does NOT exist\">\n      \u003Coutput>ℹ️ No sprint status file exists - story progress will be tracked in story file only\u003C\u002Foutput>\n      \u003Caction>Set {{current_sprint_status}} = \"no-sprint-tracking\"\u003C\u002Faction>\n    \u003C\u002Fcheck>\n  \u003C\u002Fstep>\n\n  \u003Cstep n=\"5\" goal=\"Implement task following red-green-refactor cycle\">\n    \u003Ccritical>FOLLOW THE STORY FILE TASKS\u002FSUBTASKS SEQUENCE EXACTLY AS WRITTEN - NO DEVIATION\u003C\u002Fcritical>\n\n    \u003Caction>Review the current task\u002Fsubtask from the story file - this is your authoritative implementation guide\u003C\u002Faction>\n    \u003Caction>Plan implementation following red-green-refactor cycle\u003C\u002Faction>\n\n    \u003C!-- RED PHASE -->\n    \u003Caction>Write FAILING tests first for the task\u002Fsubtask functionality\u003C\u002Faction>\n    \u003Caction>Confirm tests fail before implementation - this validates test correctness\u003C\u002Faction>\n\n    \u003C!-- GREEN PHASE -->\n    \u003Caction>Implement MINIMAL code to make tests pass\u003C\u002Faction>\n    \u003Caction>Run tests to confirm they now pass\u003C\u002Faction>\n    \u003Caction>Handle error conditions and edge cases as specified in task\u002Fsubtask\u003C\u002Faction>\n\n    \u003C!-- REFACTOR PHASE -->\n    \u003Caction>Improve code structure while keeping tests green\u003C\u002Faction>\n    \u003Caction>Ensure code follows architecture patterns and coding standards from Dev Notes\u003C\u002Faction>\n\n    \u003Caction>Document technical approach and decisions in Dev Agent Record → Implementation Plan\u003C\u002Faction>\n\n    \u003Caction if=\"new dependencies required beyond story specifications\">HALT: \"Additional dependencies need user approval\"\u003C\u002Faction>\n    \u003Caction if=\"3 consecutive implementation failures occur\">HALT and request guidance\u003C\u002Faction>\n    \u003Caction if=\"required configuration is missing\">HALT: \"Cannot proceed without necessary configuration files\"\u003C\u002Faction>\n\n    \u003Ccritical>NEVER implement anything not mapped to a specific task\u002Fsubtask in the story file\u003C\u002Fcritical>\n    \u003Ccritical>NEVER proceed to next task until current task\u002Fsubtask is complete AND tests pass\u003C\u002Fcritical>\n    \u003Ccritical>Execute continuously without pausing until all tasks\u002Fsubtasks are complete or explicit HALT condition\u003C\u002Fcritical>\n    \u003Ccritical>Do NOT propose to pause for review until Step 9 completion gates are satisfied\u003C\u002Fcritical>\n  \u003C\u002Fstep>\n\n  \u003Cstep n=\"6\" goal=\"Author comprehensive tests\">\n    \u003Caction>Create unit tests for business logic and core functionality introduced\u002Fchanged by the task\u003C\u002Faction>\n    \u003Caction>Add integration tests for component interactions specified in story requirements\u003C\u002Faction>\n    \u003Caction>Include end-to-end tests for critical user flows when story requirements demand them\u003C\u002Faction>\n    \u003Caction>Cover edge cases and error handling scenarios identified in story Dev Notes\u003C\u002Faction>\n  \u003C\u002Fstep>\n\n  \u003Cstep n=\"7\" goal=\"Run validations and tests\">\n    \u003Caction>Determine how to run tests for this repo (infer test framework from project structure)\u003C\u002Faction>\n    \u003Caction>Run all existing tests to ensure no regressions\u003C\u002Faction>\n    \u003Caction>Run the new tests to verify implementation correctness\u003C\u002Faction>\n    \u003Caction>Run linting and code quality checks if configured in project\u003C\u002Faction>\n    \u003Caction>Validate implementation meets ALL story acceptance criteria; enforce quantitative thresholds explicitly\u003C\u002Faction>\n    \u003Caction if=\"regression tests fail\">STOP and fix before continuing - identify breaking changes immediately\u003C\u002Faction>\n    \u003Caction if=\"new tests fail\">STOP and fix before continuing - ensure implementation correctness\u003C\u002Faction>\n  \u003C\u002Fstep>\n\n  \u003Cstep n=\"8\" goal=\"Validate and mark task complete ONLY when fully done\">\n    \u003Ccritical>NEVER mark a task complete unless ALL conditions are met - NO LYING OR CHEATING\u003C\u002Fcritical>\n\n    \u003C!-- VALIDATION GATES -->\n    \u003Caction>Verify ALL tests for this task\u002Fsubtask ACTUALLY EXIST and PASS 100%\u003C\u002Faction>\n    \u003Caction>Confirm implementation matches EXACTLY what the task\u002Fsubtask specifies - no extra features\u003C\u002Faction>\n    \u003Caction>Validate that ALL acceptance criteria related to this task are satisfied\u003C\u002Faction>\n    \u003Caction>Run full test suite to ensure NO regressions introduced\u003C\u002Faction>\n\n    \u003C!-- REVIEW FOLLOW-UP HANDLING -->\n    \u003Ccheck if=\"task is review follow-up (has [AI-Review] prefix)\">\n      \u003Caction>Extract review item details (severity, description, related AC\u002Ffile)\u003C\u002Faction>\n      \u003Caction>Add to resolution tracking list: {{resolved_review_items}}\u003C\u002Faction>\n\n      \u003C!-- Mark task in Review Follow-ups section -->\n      \u003Caction>Mark task checkbox [x] in \"Tasks\u002FSubtasks → Review Follow-ups (AI)\" section\u003C\u002Faction>\n\n      \u003C!-- CRITICAL: Also mark corresponding action item in review section -->\n      \u003Caction>Find matching action item in \"Senior Developer Review (AI) → Action Items\" section by matching description\u003C\u002Faction>\n      \u003Caction>Mark that action item checkbox [x] as resolved\u003C\u002Faction>\n\n      \u003Caction>Add to Dev Agent Record → Completion Notes: \"✅ Resolved review finding [{{severity}}]: {{description}}\"\u003C\u002Faction>\n    \u003C\u002Fcheck>\n\n    \u003C!-- ONLY MARK COMPLETE IF ALL VALIDATION PASS -->\n    \u003Ccheck if=\"ALL validation gates pass AND tests ACTUALLY exist and pass\">\n      \u003Caction>ONLY THEN mark the task (and subtasks) checkbox with [x]\u003C\u002Faction>\n      \u003Caction>Update File List section with ALL new, modified, or deleted files (paths relative to repo root)\u003C\u002Faction>\n      \u003Caction>Add completion notes to Dev Agent Record summarizing what was ACTUALLY implemented and tested\u003C\u002Faction>\n    \u003C\u002Fcheck>\n\n    \u003Ccheck if=\"ANY validation fails\">\n      \u003Caction>DO NOT mark task complete - fix issues first\u003C\u002Faction>\n      \u003Caction>HALT if unable to fix validation failures\u003C\u002Faction>\n    \u003C\u002Fcheck>\n\n    \u003Ccheck if=\"review_continuation == true and {{resolved_review_items}} is not empty\">\n      \u003Caction>Count total resolved review items in this session\u003C\u002Faction>\n      \u003Caction>Add Change Log entry: \"Addressed code review findings - {{resolved_count}} items resolved (Date: {{date}})\"\u003C\u002Faction>\n    \u003C\u002Fcheck>\n\n    \u003Caction>Save the story file\u003C\u002Faction>\n    \u003Caction>Determine if more incomplete tasks remain\u003C\u002Faction>\n    \u003Caction if=\"more tasks remain\">\n      \u003Cgoto step=\"5\">Next task\u003C\u002Fgoto>\n    \u003C\u002Faction>\n    \u003Caction if=\"no tasks remain\">\n      \u003Cgoto step=\"9\">Completion\u003C\u002Fgoto>\n    \u003C\u002Faction>\n  \u003C\u002Fstep>\n\n  \u003Cstep n=\"9\" goal=\"Story completion and mark for review\" tag=\"sprint-status\">\n    \u003Caction>Verify ALL tasks and subtasks are marked [x] (re-scan the story document now)\u003C\u002Faction>\n    \u003Caction>Run the full regression suite (do not skip)\u003C\u002Faction>\n    \u003Caction>Confirm File List includes every changed file\u003C\u002Faction>\n    \u003Caction>Execute enhanced definition-of-done validation\u003C\u002Faction>\n    \u003Caction>Update the story Status to: \"review\"\u003C\u002Faction>\n\n    \u003C!-- Enhanced Definition of Done Validation -->\n    \u003Caction>Validate definition-of-done checklist with essential requirements:\n      - All tasks\u002Fsubtasks marked complete with [x]\n      - Implementation satisfies every Acceptance Criterion\n      - Unit tests for core functionality added\u002Fupdated\n      - Integration tests for component interactions added when required\n      - End-to-end tests for critical flows added when story demands them\n      - All tests pass (no regressions, new tests successful)\n      - Code quality checks pass (linting, static analysis if configured)\n      - File List includes every new\u002Fmodified\u002Fdeleted file (relative paths)\n      - Dev Agent Record contains implementation notes\n      - Change Log includes summary of changes\n      - Only permitted story sections were modified\n    \u003C\u002Faction>\n\n    \u003C!-- Mark story ready for review - sprint status conditional -->\n    \u003Ccheck if=\"{sprint_status} file exists AND {{current_sprint_status}} != 'no-sprint-tracking'\">\n      \u003Caction>Load the FULL file: {sprint_status}\u003C\u002Faction>\n      \u003Caction>Find development_status key matching {{story_key}}\u003C\u002Faction>\n      \u003Caction>Verify current status is \"in-progress\" (expected previous state)\u003C\u002Faction>\n      \u003Caction>Update development_status[{{story_key}}] = \"review\"\u003C\u002Faction>\n      \u003Caction>Update last_updated field to current date\u003C\u002Faction>\n      \u003Caction>Save file, preserving ALL comments and structure including STATUS DEFINITIONS\u003C\u002Faction>\n      \u003Coutput>✅ Story status updated to \"review\" in sprint-status.yaml\u003C\u002Foutput>\n    \u003C\u002Fcheck>\n\n    \u003Ccheck if=\"{sprint_status} file does NOT exist OR {{current_sprint_status}} == 'no-sprint-tracking'\">\n      \u003Coutput>ℹ️ Story status updated to \"review\" in story file (no sprint tracking configured)\u003C\u002Foutput>\n    \u003C\u002Fcheck>\n\n    \u003Ccheck if=\"story key not found in sprint status\">\n      \u003Coutput>⚠️ Story file updated, but sprint-status update failed: {{story_key}} not found\n\n        Story status is set to \"review\" in file, but sprint-status.yaml may be out of sync.\n      \u003C\u002Foutput>\n    \u003C\u002Fcheck>\n\n    \u003C!-- Final validation gates -->\n    \u003Caction if=\"any task is incomplete\">HALT - Complete remaining tasks before marking ready for review\u003C\u002Faction>\n    \u003Caction if=\"regression failures exist\">HALT - Fix regression issues before completing\u003C\u002Faction>\n    \u003Caction if=\"File List is incomplete\">HALT - Update File List with all changed files\u003C\u002Faction>\n    \u003Caction if=\"definition-of-done validation fails\">HALT - Address DoD failures before completing\u003C\u002Faction>\n  \u003C\u002Fstep>\n\n  \u003Cstep n=\"10\" goal=\"Completion communication and user support\">\n    \u003Caction>Execute the enhanced definition-of-done checklist using the validation framework\u003C\u002Faction>\n    \u003Caction>Prepare a concise summary in Dev Agent Record → Completion Notes\u003C\u002Faction>\n\n    \u003Caction>Communicate to {user_name} that story implementation is complete and ready for review\u003C\u002Faction>\n    \u003Caction>Summarize key accomplishments: story ID, story key, title, key changes made, tests added, files modified\u003C\u002Faction>\n    \u003Caction>Provide the story file path and current status (now \"review\")\u003C\u002Faction>\n\n    \u003Caction>Based on {user_skill_level}, ask if user needs any explanations about:\n      - What was implemented and how it works\n      - Why certain technical decisions were made\n      - How to test or verify the changes\n      - Any patterns, libraries, or approaches used\n      - Anything else they'd like clarified\n    \u003C\u002Faction>\n\n    \u003Ccheck if=\"user asks for explanations\">\n      \u003Caction>Provide clear, contextual explanations tailored to {user_skill_level}\u003C\u002Faction>\n      \u003Caction>Use examples and references to specific code when helpful\u003C\u002Faction>\n    \u003C\u002Fcheck>\n\n    \u003Caction>Once explanations are complete (or user indicates no questions), suggest logical next steps\u003C\u002Faction>\n    \u003Caction>Recommended next steps (flexible based on project setup):\n      - Review the implemented story and test the changes\n      - Verify all acceptance criteria are met\n      - Ensure deployment readiness if applicable\n      - Run `code-review` workflow for peer review\n      - Optional: If Test Architect module installed, run `\u002Fbmad:tea:automate` to expand guardrail tests\n    \u003C\u002Faction>\n\n    \u003Coutput>💡 **Tip:** For best results, run `code-review` using a **different** LLM than the one that implemented this story.\u003C\u002Foutput>\n    \u003Ccheck if=\"{sprint_status} file exists\">\n      \u003Caction>Suggest checking {sprint_status} to see project progress\u003C\u002Faction>\n    \u003C\u002Fcheck>\n    \u003Caction>Remain flexible - allow user to choose their own path or ask for other assistance\u003C\u002Faction>\n  \u003Caction>Run: `python3 {project-root}\u002F_bmad\u002Fscripts\u002Fresolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.\u003C\u002Faction>\n  \u003C\u002Fstep>\n\n\u003C\u002Fworkflow>\n",{"name":5,"description":7},"main","6a38430d5c23377d52d12343bfc156063f577e1d",".agents\u002Fskills\u002Fbmad-dev-story","https:\u002F\u002Fgithub.com\u002Fjsacko\u002FOpenDFIR","https:\u002F\u002Fgithub.com\u002Fjsacko","2026-06-22 14:57:27",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add jsacko\u002FOpenDFIR --skill bmad-dev-story",{"tool":55,"command":56},"bunx","bunx skills add jsacko\u002FOpenDFIR --skill bmad-dev-story",{"tool":58,"command":59},"pnpm","pnpm dlx skills add jsacko\u002FOpenDFIR --skill bmad-dev-story","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjsacko\u002FOpenDFIR\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fbmad-dev-story\u002FSKILL.md",true,[63,69],{"path":64,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":67,"sourceHtmlUrl":68},"checklist.md","REFERENCE","参考文档",4389,"https:\u002F\u002Fgithub.com\u002Fjsacko\u002FOpenDFIR\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fbmad-dev-story\u002Fchecklist.md",{"path":70,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":74},"customize.toml","OTHER","其他",1613,"https:\u002F\u002Fgithub.com\u002Fjsacko\u002FOpenDFIR\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fbmad-dev-story\u002Fcustomize.toml",[76,106,127,146,167,179],{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":87,"publishedAt":38},"01M71PW68SHKJ6357YZJH4ES0E","agent-tonin","Pressure-tests incident response product design against real SOC and DFIR constraints. Use when the user asks to talk to Tonin, requests the Incident Response Strategist, or needs a senior security design partner to challenge incident response automation ideas.","https:\u002F\u002Fgithub.com\u002Fjsacko\u002FOpenDFIR\u002Fblob\u002Fmain\u002Fskills\u002Fagent-tonin\u002FSKILL.md",[82],{"categoryNo":83,"categoryName":84,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[88,89,90,91,92,93,94,95,36,35,96,97,98,99,100,101,102,103,104,105],"agent tonin","ideas","senior security","dfir","incident","challenge","tests","design","product design","automation","incident response","soc","design partner","requests","product","senior","strategist","security",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":113,"publishedAt":38},"01M71PW3BV6P3JK7MFN31TA61D","bmad-workflow-builder","Builds, converts, and analyzes workflows and skills. Use when the user requests to \"build a workflow\", \"modify a workflow\", \"quality check workflow\", \"analyze skill\", or \"convert a skill\".","https:\u002F\u002Fgithub.com\u002Fjsacko\u002FOpenDFIR\u002Fblob\u002Fmain\u002F.continue\u002Fskills\u002Fbmad-workflow-builder\u002FSKILL.md",[112],{"categoryNo":83,"categoryName":84,"taxonomyType":85,"taxonomyTypeDesc":86},[114,115,116,21,117,101,26,118,119,120,121,122,123,35,124,36,125,126],"builder","workflow","workflow builder","bmad workflow builder","a skill","quality","build","analyze","check","convert","workflows","quality check","modify",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":138,"publishedAt":38},"01M71PW0ETTF8DA2C6HB77FPNX","bmad-validate-prd","Validate a PRD against standards. Use when the user says \"validate this PRD\" or \"run PRD validation\"","https:\u002F\u002Fgithub.com\u002Fjsacko\u002FOpenDFIR\u002Fblob\u002Fmain\u002F.continue\u002Fskills\u002Fbmad-validate-prd\u002FSKILL.md",[133],{"categoryNo":134,"categoryName":135,"taxonomyType":136,"taxonomyTypeDesc":137},"01JBSEEDCAT000000000000031","产品经理","PROFESSION","适用职业",[139,140,21,141,142,143,36,35,144,145,26],"validate","bmad validate prd","prd","validate prd","standards","run","validation",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":155,"publishedAt":38},"01M71PVY254CKN2PNAEX41CRR9","bmad-technical-research","Conduct technical research on technologies and architecture. Use when the user says they would like to do or produce a technical research report","https:\u002F\u002Fgithub.com\u002Fjsacko\u002FOpenDFIR\u002Fblob\u002Fmain\u002F.continue\u002Fskills\u002Fbmad-technical-research\u002FSKILL.md",[152],{"categoryNo":153,"categoryName":154,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000021","资料检索与研究",[156,157,158,21,159,160,161,162,36,35,163,164,165,166,26],"technical research","bmad technical research","technical","research","conduct","do","produce","architecture","to do","research report","report",{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":173,"publishedAt":38},"01M71PVWCA63WBH08JHVV6WV75","bmad-sprint-status","Summarize sprint status and surface risks. Use when the user says \"check sprint status\" or \"show sprint status\"","https:\u002F\u002Fgithub.com\u002Fjsacko\u002FOpenDFIR\u002Fblob\u002Fmain\u002F.continue\u002Fskills\u002Fbmad-sprint-status\u002FSKILL.md",[],[174,21,175,37,176,26,122,177,35,36,178],"status","bmad sprint status","sprint status","summarize","show",{"skillNo":180,"name":181,"nameZh":6,"description":182,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":183,"categories":184,"keywords":185,"publishedAt":38},"01M71PVT03ZW4PQVV5TZDNPBXH","bmad-sprint-planning","Generate sprint status tracking from epics. Use when the user says \"run sprint planning\" or \"generate sprint plan\"","https:\u002F\u002Fgithub.com\u002Fjsacko\u002FOpenDFIR\u002Fblob\u002Fmain\u002F.continue\u002Fskills\u002Fbmad-sprint-planning\u002FSKILL.md",[],[37,186,187,21,188,174,26,27,189,144,190,176,32,35,36],"bmad sprint planning","planning","sprint planning","tracking","generate"]