diff --git a/src/modules/bmm/agents/dev.agent.yaml b/src/modules/bmm/agents/dev.agent.yaml
index 50201eea..0033feda 100644
--- a/src/modules/bmm/agents/dev.agent.yaml
+++ b/src/modules/bmm/agents/dev.agent.yaml
@@ -55,3 +55,11 @@ agent:
- trigger: CR or fuzzy match on code-review
workflow: "{project-root}/_bmad/bmm/workflows/4-implementation/code-review/workflow.yaml"
description: "[CR] Perform a thorough clean context code review (Highly Recommended, use fresh context and different LLM)"
+
+ - trigger: RVS or fuzzy match on revalidate-story
+ workflow: "{project-root}/_bmad/bmm/workflows/4-implementation/revalidate-story/workflow.yaml"
+ description: "[RVS] Revalidate Story - clear checkboxes and re-verify against codebase (detect ghost features and gaps)"
+
+ - trigger: RVE or fuzzy match on revalidate-epic
+ workflow: "{project-root}/_bmad/bmm/workflows/4-implementation/revalidate-epic/workflow.yaml"
+ description: "[RVE] Revalidate Epic - batch revalidation of all stories in an epic with semaphore pattern"
diff --git a/src/modules/bmm/agents/sm.agent.yaml b/src/modules/bmm/agents/sm.agent.yaml
index 0bffebf4..2fb883e5 100644
--- a/src/modules/bmm/agents/sm.agent.yaml
+++ b/src/modules/bmm/agents/sm.agent.yaml
@@ -49,3 +49,11 @@ agent:
- trigger: CC or fuzzy match on correct-course
workflow: "{project-root}/_bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml"
description: "[CC] Execute correct-course task (When implementation is off-track)"
+
+ - trigger: RVS or fuzzy match on revalidate-story
+ workflow: "{project-root}/_bmad/bmm/workflows/4-implementation/revalidate-story/workflow.yaml"
+ description: "[RVS] Revalidate Story - clear checkboxes and verify against codebase reality (find gaps and ghost features)"
+
+ - trigger: RVE or fuzzy match on revalidate-epic
+ workflow: "{project-root}/_bmad/bmm/workflows/4-implementation/revalidate-epic/workflow.yaml"
+ description: "[RVE] Revalidate Epic - batch revalidation of all stories with semaphore pattern"
diff --git a/src/modules/bmm/workflows/4-implementation/revalidate-epic/instructions.md b/src/modules/bmm/workflows/4-implementation/revalidate-epic/instructions.md
new file mode 100644
index 00000000..e229e944
--- /dev/null
+++ b/src/modules/bmm/workflows/4-implementation/revalidate-epic/instructions.md
@@ -0,0 +1,273 @@
+# Revalidate Epic - Batch Story Revalidation with Semaphore Pattern
+
+The workflow execution engine is governed by: {project-root}/_bmad/core/tasks/workflow.xml
+You MUST have already loaded and processed: {installed_path}/workflow.yaml
+
+
+
+
+ Verify epic_number parameter provided
+
+
+
+ HALT
+
+
+ Read {sprint_status} file
+ Parse development_status map
+
+ Filter stories starting with "{{epic_number}}-" (e.g., "2-1-", "2-2-", etc.)
+ Exclude epics (keys starting with "epic-") and retrospectives
+
+ Store as: epic_stories (list of story keys)
+
+
+
+ HALT
+
+
+
+
+ Proceed with revalidation? (yes/no):
+
+
+
+ Exit workflow
+
+
+
+
+
+
+ Initialize worker pool state:
+
+ - story_queue = epic_stories
+ - active_workers = {}
+ - completed_stories = []
+ - failed_stories = []
+ - verification_results = {}
+ - next_story_index = 0
+ - max_workers = {{max_concurrent}}
+
+
+ Fill initial worker slots:
+
+ While next_story_index < min(max_workers, story_queue.length):
+
+
+ story_key = story_queue[next_story_index]
+ story_file = {sprint_artifacts}/{{story_key}}.md # Try multiple naming patterns if needed
+ worker_id = next_story_index + 1
+
+ Spawn Task agent:
+ - subagent_type: "general-purpose"
+ - description: "Revalidate story {{story_key}}"
+ - prompt: "Execute revalidate-story workflow for {{story_key}}.
+
+ CRITICAL INSTRUCTIONS:
+ 1. Load workflow: _bmad/bmm/workflows/4-implementation/revalidate-story/workflow.yaml
+ 2. Parameters: story_file={{story_file}}, fill_gaps={{fill_gaps}}
+ 3. Clear all checkboxes
+ 4. Verify each AC/Task/DoD against codebase
+ 5. Re-check verified items
+ 6. Report gaps
+ {{#if fill_gaps}}7. Fill gaps and commit{{/if}}
+ 8. Return verification summary"
+ - run_in_background: true
+
+ Store in active_workers[worker_id]:
+ story_key: {{story_key}}
+ task_id: {{returned_task_id}}
+ started_at: {{timestamp}}
+
+
+ Increment next_story_index
+
+
+
+
+
+ SEMAPHORE PATTERN: Keep {{max_workers}} agents running continuously
+
+ While active_workers.size > 0 OR next_story_index < story_queue.length:
+
+ Poll for completed workers (non-blocking):
+
+ For each worker_id in active_workers:
+
+ Check worker status using TaskOutput(task_id, block=false)
+
+
+ Get verification results from worker output
+ Parse: verified_pct, gaps_found, gaps_filled
+
+ Store in verification_results[story_key]
+ Add to completed_stories
+ Remove from active_workers
+
+
+
+
+ Refill slot with next story (same pattern as batch-super-dev)
+
+
+
+
+
+ Add to failed_stories with error
+ Remove from active_workers
+
+
+
+ Refill slot despite failure
+
+
+
+ Display live progress every 30 seconds:
+
+
+ Sleep 5 seconds before next poll
+
+
+
+ Aggregate verification results across all stories:
+
+ epic_total_items = sum of all items across stories
+ epic_verified = sum of verified items
+ epic_partial = sum of partial items
+ epic_missing = sum of missing items
+ epic_gaps_filled = sum of gaps filled
+
+ epic_verified_pct = (epic_verified / epic_total_items) × 100
+
+
+ Group stories by verification percentage:
+
+ - complete_stories (≥95% verified)
+ - mostly_complete_stories (80-94% verified)
+ - partial_stories (50-79% verified)
+ - incomplete_stories (<50% verified)
+
+
+
+
+
+ Write epic summary to: {sprint_artifacts}/revalidation-epic-{{epic_number}}-{{timestamp}}.md
+
+
+
+
+ Update sprint-status.yaml with revalidation timestamp and results
+ Add comment to epic entry: # Revalidated: {{epic_verified_pct}}% verified ({{timestamp}})
+
+
+
+
diff --git a/src/modules/bmm/workflows/4-implementation/revalidate-epic/workflow.yaml b/src/modules/bmm/workflows/4-implementation/revalidate-epic/workflow.yaml
new file mode 100644
index 00000000..38b7de23
--- /dev/null
+++ b/src/modules/bmm/workflows/4-implementation/revalidate-epic/workflow.yaml
@@ -0,0 +1,44 @@
+name: revalidate-epic
+description: "Batch revalidation of all stories in an epic. Clears checkboxes and re-verifies against codebase with semaphore pattern."
+author: "BMad"
+version: "1.0.0"
+
+# Critical variables from config
+config_source: "{project-root}/_bmad/bmm/config.yaml"
+output_folder: "{config_source}:output_folder"
+sprint_artifacts: "{output_folder}/sprint-artifacts"
+sprint_status: "{output_folder}/sprint-status.yaml"
+
+# Input parameters
+epic_number: "{epic_number}" # Required: Epic number (e.g., "2" for Epic 2)
+fill_gaps: false # Optional: Fill missing items after verification
+max_concurrent: 3 # Optional: Max concurrent revalidation agents (default: 3)
+
+# Verification settings (inherited by story revalidations)
+verification:
+ verify_acceptance_criteria: true
+ verify_tasks: true
+ verify_definition_of_done: true
+ check_for_stubs: true
+ require_tests: true
+
+# Gap filling settings
+gap_filling:
+ max_gaps_per_story: 10 # Safety limit per story
+ require_confirmation_first_story: true # Ask on first story, then auto for rest
+ run_tests_after_each: true
+ commit_strategy: "per_gap" # "per_gap" | "per_story" | "all_at_once"
+
+# Execution settings
+execution:
+ use_semaphore_pattern: true # Constant concurrency (not batch-and-wait)
+ continue_on_failure: true # Keep processing if one story fails
+ display_live_progress: true # Show progress updates every 30s
+
+# Output settings
+output:
+ create_epic_report: true # Generate epic-level summary
+ create_story_reports: true # Generate per-story reports
+ update_sprint_status: true # Update progress in sprint-status.yaml
+
+standalone: true
diff --git a/src/modules/bmm/workflows/4-implementation/revalidate-story/instructions.md b/src/modules/bmm/workflows/4-implementation/revalidate-story/instructions.md
new file mode 100644
index 00000000..f5135606
--- /dev/null
+++ b/src/modules/bmm/workflows/4-implementation/revalidate-story/instructions.md
@@ -0,0 +1,510 @@
+# Revalidate Story - Verify Checkboxes Against Codebase Reality
+
+The workflow execution engine is governed by: {project-root}/_bmad/core/tasks/workflow.xml
+You MUST have already loaded and processed: {installed_path}/workflow.yaml
+
+
+
+
+ Verify story_file parameter provided
+
+
+
+ HALT
+
+
+ Read COMPLETE story file: {{story_file}}
+ Parse sections: Acceptance Criteria, Tasks/Subtasks, Definition of Done, Dev Agent Record
+
+ Extract story_key from filename (e.g., "2-7-image-file-handling")
+
+ Create backup of current checkbox state:
+ Count currently checked items:
+ - ac_checked_before = count of [x] in Acceptance Criteria
+ - tasks_checked_before = count of [x] in Tasks/Subtasks
+ - dod_checked_before = count of [x] in Definition of Done
+ - total_checked_before = sum of above
+
+
+
+
+
+
+
+
+ Use Edit tool to replace all [x] with [ ] in Acceptance Criteria section
+ Use Edit tool to replace all [x] with [ ] in Tasks/Subtasks section
+ Use Edit tool to replace all [x] with [ ] in Definition of Done section
+
+ Save story file with all boxes unchecked
+
+
+
+
+
+
+
+ Extract all AC items from Acceptance Criteria section
+
+ For each AC item:
+
+
+ Extract AC description and identify artifacts:
+ - File mentions (e.g., "UserProfile component")
+ - Function names (e.g., "updateUser function")
+ - Features (e.g., "dark mode toggle")
+ - Test requirements (e.g., "unit tests covering edge cases")
+
+
+
+
+
+
+ Use Glob to find relevant files:
+ - If AC mentions specific file: glob for that file
+ - If AC mentions component: glob for **/*ComponentName*
+ - If AC mentions feature: glob for files in related directories
+
+
+ Use Grep to search for symbols/functions/features
+
+ Read found files to verify:
+ - NOT a stub (check for "TODO", "Not implemented", "throw new Error")
+ - Has actual implementation (not just empty function)
+ - Tests exist (search for *.test.* or *.spec.* files)
+ - Tests pass (if --fill-gaps mode, run tests)
+
+
+
+
+ verification_status = VERIFIED
+ Check box [x] in story file for this AC
+ Record evidence: "✅ VERIFIED: {{files_found}}, tests: {{test_files}}"
+
+
+
+
+ verification_status = PARTIAL
+ Check box [~] in story file for this AC
+ Record gap: "🔶 PARTIAL: {{what_exists}}, missing: {{what_is_missing}}"
+
+ Add to gaps_list with details
+
+
+
+ verification_status = MISSING
+ Leave box unchecked [ ] in story file
+ Record gap: "❌ MISSING: No implementation found for {{ac_description}}"
+
+ Add to gaps_list with details
+
+
+
+ Save story file after each AC verification
+
+
+
+
+
+
+
+ Extract all Task items from Tasks/Subtasks section
+
+ For each Task item (same verification logic as ACs):
+
+ Parse task description for artifacts
+ Search codebase with Glob/Grep
+ Read and verify (check for stubs, tests)
+ Determine status: VERIFIED | PARTIAL | MISSING
+ Update checkbox: [x] | [~] | [ ]
+ Record evidence or gap
+ Save story file
+
+
+
+
+
+
+
+ Extract all DoD items from Definition of Done section
+
+ For each DoD item:
+
+ Parse DoD requirement:
+ - "Type check passes" → Run type checker
+ - "Unit tests 90%+ coverage" → Run coverage report
+ - "Linting clean" → Run linter
+ - "Build succeeds" → Run build
+ - "All tests pass" → Run test suite
+
+
+ Execute verification for this DoD item
+
+
+ Check box [x]
+ Record: "✅ VERIFIED: {{verification_result}}"
+
+
+
+ Leave unchecked [ ] or partial [~]
+ Record gap if applicable
+
+
+
+
+
+
+ Calculate overall completion:
+
+ total_verified = ac_verified + tasks_verified + dod_verified
+ total_partial = ac_partial + tasks_partial + dod_partial
+ total_missing = ac_missing + tasks_missing + dod_missing
+ total_items = ac_total + tasks_total + dod_total
+
+ verified_pct = (total_verified / total_items) × 100
+ completion_pct = ((total_verified + total_partial) / total_items) × 100
+
+
+
+
+
+ Write detailed report to: {sprint_artifacts}/revalidation-{{story_key}}-{{timestamp}}.md
+ Include: verification results, gaps list, evidence for each item, recommendations
+
+
+
+
+
+
+
+ Exit workflow
+
+
+
+
+ Exit workflow
+
+
+
+
+
+ HALT
+
+
+
+
+ Continue to Step 8
+
+
+
+
+ For each gap in gaps_list:
+
+
+
+
+Fill this gap?
+
+**Item:** {{item_description}}
+**Type:** {{item_type}} ({{section}})
+**Missing:** {{what_is_missing}}
+
+[Y] Yes - Implement this item
+[A] Auto-fill - Implement this and all remaining gaps without asking
+[S] Skip - Leave this gap unfilled
+[H] Halt - Stop gap filling
+
+Your choice:
+
+
+
+ Set require_confirmation = false (auto-fill remaining)
+
+
+
+ Continue to next gap
+
+
+
+ Exit gap filling loop
+ Jump to Step 9 (Summary)
+
+
+
+
+
+
+
+ Load story context (Technical Requirements, Architecture Compliance, Dev Notes)
+ Implement missing item following story specifications
+ Write tests if required
+ Run tests to verify implementation
+ Verify linting/type checking passes
+
+
+ Check box [x] for this item in story file
+ Update File List with new/modified files
+ Add to Dev Agent Record: "Gap filled: {{item_description}}"
+
+
+
+ Stage files for this gap
+ Commit: "fix({{story_key}}): fill gap - {{item_description}}"
+
+
+
+
+
+
+ Leave box unchecked
+ Record failure in gaps_list
+ Add to failed_gaps
+
+
+
+ After all gaps processed:
+
+
+
+
+
+
+
+ For each filled gap:
+ Re-run verification for that item
+ Ensure still VERIFIED after all changes
+
+
+
+
+ Calculate final completion:
+
+ final_verified = count of [x] across all sections
+ final_partial = count of [~] across all sections
+ final_missing = count of [ ] across all sections
+ final_pct = (final_verified / total_items) × 100
+
+
+
+ Stage all changed files
+ Commit: "fix({{story_key}}): fill {{gaps_filled}} gaps from revalidation"
+
+
+
+
+ Load {sprint_status} file
+ Update entry with current progress:
+ Format: {{story_key}}: {{current_status}} # Revalidated: {{final_verified}}/{{total_items}} ({{final_pct}}%) verified
+ Save sprint-status.yaml
+
+
+
+
+ Add to Dev Agent Record in story file:
+
+## Revalidation Record ({{timestamp}})
+
+**Revalidation Mode:** {{#if fill_gaps}}Verify & Fill{{else}}Verify Only{{/if}}
+
+**Results:**
+- Verified: {{final_verified}}/{{total_items}} ({{final_pct}}%)
+- Gaps Found: {{total_missing}}
+- Gaps Filled: {{gaps_filled}}
+
+**Evidence:**
+{{#each verification_evidence}}
+- {{item}}: {{evidence}}
+{{/each}}
+
+{{#if gaps_filled > 0}}
+**Gaps Filled:**
+{{#each filled_gaps}}
+- {{item}}: {{what_was_implemented}}
+{{/each}}
+{{/if}}
+
+{{#if failed_gaps.length > 0}}
+**Failed to Fill:**
+{{#each failed_gaps}}
+- {{item}}: {{error}}
+{{/each}}
+{{/if}}
+
+ Save story file
+
+
+
+
+
+
+
+
diff --git a/src/modules/bmm/workflows/4-implementation/revalidate-story/workflow.yaml b/src/modules/bmm/workflows/4-implementation/revalidate-story/workflow.yaml
new file mode 100644
index 00000000..ecc23f56
--- /dev/null
+++ b/src/modules/bmm/workflows/4-implementation/revalidate-story/workflow.yaml
@@ -0,0 +1,37 @@
+name: revalidate-story
+description: "Clear checkboxes and re-verify story against actual codebase implementation. Identifies gaps and optionally fills them."
+author: "BMad"
+version: "1.0.0"
+
+# Critical variables from config
+config_source: "{project-root}/_bmad/bmm/config.yaml"
+output_folder: "{config_source}:output_folder"
+sprint_artifacts: "{output_folder}/sprint-artifacts"
+
+# Input parameters
+story_file: "{story_file}" # Required: Full path to story file
+fill_gaps: false # Optional: Fill missing items after verification (default: verify-only)
+auto_commit: false # Optional: Auto-commit filled gaps (default: prompt)
+
+# Verification settings
+verification:
+ verify_acceptance_criteria: true
+ verify_tasks: true
+ verify_definition_of_done: true
+ check_for_stubs: true # Reject stub implementations (TODO, Not implemented, etc.)
+ require_tests: true # Require tests for code items
+
+# Gap filling settings (only used if fill_gaps=true)
+gap_filling:
+ max_gaps_to_fill: 10 # Safety limit - HALT if more gaps than this
+ require_confirmation: true # Ask before filling each gap (false = auto-fill all)
+ run_tests_after_each: true # Verify each filled gap works
+ commit_strategy: "per_gap" # "per_gap" | "all_at_once" | "none"
+
+# Output settings
+output:
+ create_report: true # Generate revalidation-report.md
+ update_dev_agent_record: true # Add revalidation notes to story
+ update_sprint_status: true # Update progress in sprint-status.yaml
+
+standalone: false