bmad-method 6.10.1-next.9 → 6.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/.claude-plugin/marketplace.json +30 -57
  2. package/README.md +49 -82
  3. package/README_CN.md +10 -10
  4. package/README_VN.md +11 -11
  5. package/bmad-modules.yaml +43 -39
  6. package/package.json +7 -3
  7. package/removals.txt +17 -0
  8. package/src/bmm-skills/{1-analysis → agents}/bmad-agent-analyst/SKILL.md +1 -1
  9. package/src/bmm-skills/{1-analysis → agents}/bmad-agent-analyst/customize.toml +22 -7
  10. package/src/bmm-skills/{3-solutioning → agents}/bmad-agent-architect/SKILL.md +1 -1
  11. package/src/bmm-skills/{3-solutioning → agents}/bmad-agent-architect/customize.toml +2 -2
  12. package/src/bmm-skills/{4-implementation → agents}/bmad-agent-dev/SKILL.md +1 -1
  13. package/src/bmm-skills/{4-implementation → agents}/bmad-agent-dev/customize.toml +7 -14
  14. package/src/bmm-skills/{2-plan-workflows → agents}/bmad-agent-pm/SKILL.md +1 -1
  15. package/src/bmm-skills/{2-plan-workflows → agents}/bmad-agent-pm/customize.toml +2 -2
  16. package/src/bmm-skills/{2-plan-workflows → agents}/bmad-agent-ux-designer/SKILL.md +1 -1
  17. package/src/bmm-skills/module-help.csv +14 -26
  18. package/src/bmm-skills/module.yaml +5 -15
  19. package/src/bmm-skills/{3-solutioning → plan}/bmad-architecture/SKILL.md +3 -3
  20. package/src/bmm-skills/{3-solutioning → plan}/bmad-architecture/customize.toml +4 -2
  21. package/src/bmm-skills/{3-solutioning → plan}/bmad-create-epics-and-stories/SKILL.md +1 -1
  22. package/src/bmm-skills/{3-solutioning → plan}/bmad-create-epics-and-stories/steps/step-04-final-validation.md +1 -1
  23. package/src/bmm-skills/plan/bmad-generate-project-context/SKILL.md +10 -0
  24. package/src/bmm-skills/{2-plan-workflows → plan}/bmad-prd/SKILL.md +3 -1
  25. package/src/bmm-skills/{2-plan-workflows → plan}/bmad-prd/assets/prd-template.md +1 -1
  26. package/src/bmm-skills/{2-plan-workflows → plan}/bmad-prd/customize.toml +5 -3
  27. package/src/bmm-skills/{2-plan-workflows → plan}/bmad-prd/references/validate.md +3 -3
  28. package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/SKILL.md +1 -1
  29. package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/bmad-manifest.json +1 -1
  30. package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/references/verdict.md +1 -1
  31. package/src/bmm-skills/{1-analysis → plan}/bmad-product-brief/SKILL.md +1 -1
  32. package/src/bmm-skills/{1-analysis → plan}/bmad-product-brief/customize.toml +5 -3
  33. package/src/bmm-skills/plan/bmad-project-context/SKILL.md +110 -0
  34. package/src/bmm-skills/plan/bmad-project-context/customize.toml +24 -0
  35. package/src/bmm-skills/plan/bmad-project-context/references/best-practices.md +65 -0
  36. package/src/bmm-skills/plan/bmad-project-context/references/template.md +55 -0
  37. package/src/{core-skills → bmm-skills/plan}/bmad-spec/SKILL.md +1 -1
  38. package/src/{core-skills → bmm-skills/plan}/bmad-spec/assets/spec-template.md +1 -1
  39. package/src/{core-skills → bmm-skills/plan}/bmad-spec/customize.toml +3 -4
  40. package/src/bmm-skills/plan/bmad-sprint-planning/SKILL.md +62 -0
  41. package/src/bmm-skills/plan/bmad-sprint-planning/references/fix-sprint-status.md +30 -0
  42. package/src/bmm-skills/plan/bmad-sprint-planning/references/generate-tracking.md +25 -0
  43. package/src/bmm-skills/plan/bmad-sprint-planning/references/readiness-gate.md +20 -0
  44. package/src/bmm-skills/plan/bmad-sprint-planning/references/status-view.md +14 -0
  45. package/src/bmm-skills/plan/bmad-sprint-planning/references/validate.md +10 -0
  46. package/src/bmm-skills/plan/bmad-sprint-planning/scripts/__pycache__/sprint_plan.cpython-311.pyc +0 -0
  47. package/src/bmm-skills/plan/bmad-sprint-planning/scripts/sprint_plan.py +697 -0
  48. package/src/bmm-skills/plan/bmad-sprint-planning/scripts/tests/__pycache__/test_sprint_plan.cpython-311-pytest-9.1.1.pyc +0 -0
  49. package/src/bmm-skills/plan/bmad-sprint-planning/scripts/tests/test_sprint_plan.py +524 -0
  50. package/src/bmm-skills/{4-implementation → plan}/bmad-sprint-planning/sprint-status-template.yaml +9 -7
  51. package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/SKILL.md +1 -1
  52. package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/color-themes.md +1 -1
  53. package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/customize.toml +4 -2
  54. package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/references/creative-tools.md +1 -1
  55. package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/references/validate.md +1 -1
  56. package/src/bmm-skills/ship/bmad-build/SKILL.md +13 -0
  57. package/src/bmm-skills/{4-implementation/bmad-quick-dev → ship/bmad-build}/compile-epic-context.md +1 -1
  58. package/src/bmm-skills/ship/bmad-build/customize.toml +164 -0
  59. package/src/bmm-skills/ship/bmad-build/references/deletion-check.md +14 -0
  60. package/src/bmm-skills/ship/bmad-build/review-prompts/edge-case-hunter.md +88 -0
  61. package/src/bmm-skills/ship/bmad-build/review-prompts/verification-gap.md +113 -0
  62. package/src/bmm-skills/{4-implementation/bmad-quick-dev → ship/bmad-build}/step-01-clarify-and-route.md +20 -19
  63. package/src/bmm-skills/{4-implementation/bmad-quick-dev → ship/bmad-build}/step-02-plan.md +5 -9
  64. package/src/bmm-skills/{4-implementation/bmad-quick-dev → ship/bmad-build}/step-03-implement.md +10 -6
  65. package/src/bmm-skills/{4-implementation/bmad-quick-dev → ship/bmad-build}/step-04-review.md +9 -15
  66. package/src/bmm-skills/{4-implementation/bmad-quick-dev → ship/bmad-build}/step-05-present.md +10 -13
  67. package/src/bmm-skills/ship/bmad-build/step-oneshot.md +77 -0
  68. package/src/bmm-skills/ship/bmad-build/sync-sprint-status.md +19 -0
  69. package/src/bmm-skills/ship/bmad-build/workflow.md +84 -0
  70. package/src/bmm-skills/ship/bmad-build-auto/SKILL.md +13 -0
  71. package/src/bmm-skills/{4-implementation/bmad-dev-auto → ship/bmad-build-auto}/compile-epic-context.md +1 -1
  72. package/src/bmm-skills/ship/bmad-build-auto/customize.toml +121 -0
  73. package/src/{core-skills/bmad-review-edge-case-hunter/SKILL.md → bmm-skills/ship/bmad-build-auto/review-prompts/edge-case-hunter.md} +21 -6
  74. package/src/{core-skills/bmad-review-verification-gap/SKILL.md → bmm-skills/ship/bmad-build-auto/review-prompts/verification-gap.md} +15 -8
  75. package/src/bmm-skills/{4-implementation/bmad-dev-auto → ship/bmad-build-auto}/spec-template.md +2 -1
  76. package/src/bmm-skills/{4-implementation/bmad-dev-auto → ship/bmad-build-auto}/step-01-clarify-and-route.md +16 -17
  77. package/src/bmm-skills/{4-implementation/bmad-dev-auto → ship/bmad-build-auto}/step-02-plan.md +5 -9
  78. package/src/bmm-skills/{4-implementation/bmad-dev-auto → ship/bmad-build-auto}/step-03-implement.md +6 -4
  79. package/src/bmm-skills/{4-implementation/bmad-dev-auto → ship/bmad-build-auto}/step-04-review.md +26 -25
  80. package/src/bmm-skills/{4-implementation/bmad-dev-auto/SKILL.md → ship/bmad-build-auto/workflow.md} +27 -46
  81. package/src/bmm-skills/{4-implementation → ship}/bmad-checkpoint-preview/SKILL.md +1 -1
  82. package/src/bmm-skills/{4-implementation → ship}/bmad-checkpoint-preview/step-05-wrapup.md +1 -1
  83. package/src/bmm-skills/{4-implementation → ship}/bmad-code-review/SKILL.md +1 -1
  84. package/src/bmm-skills/{4-implementation → ship}/bmad-code-review/customize.toml +37 -17
  85. package/src/bmm-skills/ship/bmad-code-review/references/deletion-check.md +14 -0
  86. package/src/bmm-skills/ship/bmad-code-review/review-prompts/edge-case-hunter.md +88 -0
  87. package/src/bmm-skills/ship/bmad-code-review/review-prompts/verification-gap.md +113 -0
  88. package/src/bmm-skills/{4-implementation → ship}/bmad-code-review/steps/step-01-gather-context.md +7 -4
  89. package/src/bmm-skills/{4-implementation → ship}/bmad-code-review/steps/step-02-review.md +1 -1
  90. package/src/bmm-skills/{4-implementation → ship}/bmad-code-review/steps/step-04-present.md +1 -1
  91. package/src/bmm-skills/{4-implementation → ship}/bmad-correct-course/SKILL.md +7 -8
  92. package/src/bmm-skills/{4-implementation → ship}/bmad-qa-generate-e2e-tests/SKILL.md +2 -2
  93. package/src/bmm-skills/ship/bmad-retrospective/SKILL.md +94 -0
  94. package/src/bmm-skills/{4-implementation → ship}/bmad-retrospective/customize.toml +2 -2
  95. package/src/bmm-skills/ship/bmad-retrospective/references/acceptance-verdict.md +55 -0
  96. package/src/bmm-skills/ship/bmad-retrospective/references/aggregate-views.md +17 -0
  97. package/src/bmm-skills/ship/bmad-retrospective/references/evidence-gathering.md +30 -0
  98. package/src/bmm-skills/ship/bmad-retrospective/references/retro-document.md +84 -0
  99. package/src/bmm-skills/ship/bmad-retrospective/references/team-discussion.md +22 -0
  100. package/src/bmm-skills/ship/bmad-retrospective/scripts/__pycache__/sprint_status.cpython-311.pyc +0 -0
  101. package/src/bmm-skills/ship/bmad-retrospective/scripts/git_evidence.py +304 -0
  102. package/src/bmm-skills/ship/bmad-retrospective/scripts/sprint_status.py +746 -0
  103. package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/__pycache__/test_git_evidence.cpython-311-pytest-9.1.1.pyc +0 -0
  104. package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/__pycache__/test_sprint_status.cpython-311-pytest-9.1.1.pyc +0 -0
  105. package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/fixtures/sprint-status-template.yaml +71 -0
  106. package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/test_git_evidence.py +750 -0
  107. package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/test_sprint_status.py +1579 -0
  108. package/src/bmm-skills/v6-shims/README.md +28 -0
  109. package/src/bmm-skills/{3-solutioning → v6-shims}/bmad-create-architecture/SKILL.md +2 -2
  110. package/src/bmm-skills/{2-plan-workflows → v6-shims}/bmad-create-prd/SKILL.md +4 -4
  111. package/src/bmm-skills/{4-implementation → v6-shims}/bmad-create-story/SKILL.md +5 -3
  112. package/src/bmm-skills/v6-shims/bmad-dev-auto/SKILL.md +19 -0
  113. package/src/bmm-skills/{4-implementation → v6-shims}/bmad-dev-story/SKILL.md +5 -3
  114. package/src/bmm-skills/{4-implementation → v6-shims}/bmad-dev-story/customize.toml +3 -0
  115. package/src/bmm-skills/v6-shims/bmad-document-project/SKILL.md +14 -0
  116. package/src/bmm-skills/v6-shims/bmad-domain-research/SKILL.md +14 -0
  117. package/src/bmm-skills/{2-plan-workflows → v6-shims}/bmad-edit-prd/SKILL.md +4 -4
  118. package/src/bmm-skills/v6-shims/bmad-market-research/SKILL.md +14 -0
  119. package/src/bmm-skills/v6-shims/bmad-quick-dev/SKILL.md +19 -0
  120. package/src/bmm-skills/v6-shims/bmad-sprint-status/SKILL.md +26 -0
  121. package/src/bmm-skills/v6-shims/bmad-technical-research/SKILL.md +14 -0
  122. package/src/bmm-skills/{2-plan-workflows → v6-shims}/bmad-validate-prd/SKILL.md +4 -4
  123. package/src/core-skills/bmad-advanced-elicitation/SKILL.md +26 -103
  124. package/src/core-skills/bmad-advanced-elicitation/customize.toml +54 -0
  125. package/src/core-skills/bmad-advanced-elicitation/scripts/pick_methods.py +233 -0
  126. package/src/core-skills/bmad-advanced-elicitation/scripts/tests/test_pick_methods.py +228 -0
  127. package/src/core-skills/bmad-brainstorming/SKILL.md +3 -3
  128. package/src/core-skills/bmad-brainstorming/assets/brain-selector.html +2 -0
  129. package/src/core-skills/bmad-brainstorming/references/mode-autonomous.md +1 -1
  130. package/src/core-skills/bmad-brainstorming/scripts/brain.py +36 -6
  131. package/src/core-skills/bmad-brainstorming/scripts/tests/test_brain.py +22 -0
  132. package/src/core-skills/bmad-customize/SKILL.md +2 -2
  133. package/src/core-skills/bmad-deep-recon/SKILL.md +82 -0
  134. package/src/core-skills/bmad-deep-recon/assets/research.template.md +18 -0
  135. package/src/core-skills/bmad-deep-recon/customize.toml +212 -0
  136. package/src/core-skills/bmad-deep-recon/references/draft.md +8 -0
  137. package/src/core-skills/bmad-deep-recon/references/finalize.md +11 -0
  138. package/src/core-skills/bmad-deep-recon/references/html-briefing.md +16 -0
  139. package/src/core-skills/bmad-deep-recon/references/lifecycle.md +11 -0
  140. package/src/core-skills/bmad-deep-recon/references/process.md +10 -0
  141. package/src/core-skills/bmad-deep-recon/references/run.md +73 -0
  142. package/src/core-skills/bmad-deep-recon/references/selection.md +13 -0
  143. package/src/core-skills/bmad-deep-recon/references/synthesis.md +16 -0
  144. package/src/core-skills/bmad-deep-recon/references/verification.md +29 -0
  145. package/src/core-skills/bmad-deep-recon/scripts/recon_kit.py +322 -0
  146. package/src/core-skills/bmad-deep-recon/scripts/tests/test_recon_kit.py +144 -0
  147. package/src/core-skills/bmad-deep-recon/types/academic-lit.md +19 -0
  148. package/src/core-skills/bmad-deep-recon/types/competitive.md +19 -0
  149. package/src/core-skills/bmad-deep-recon/types/domain.md +19 -0
  150. package/src/core-skills/bmad-deep-recon/types/market.md +19 -0
  151. package/src/core-skills/bmad-deep-recon/types/technical.md +19 -0
  152. package/src/core-skills/bmad-deep-recon/types/user-voice.md +19 -0
  153. package/src/core-skills/bmad-forge-idea/SKILL.md +2 -2
  154. package/src/core-skills/bmad-forge-idea/scripts/resolve_personas.py +7 -2
  155. package/src/core-skills/bmad-help/SKILL.md +3 -3
  156. package/src/core-skills/bmad-party-mode/SKILL.md +2 -2
  157. package/src/core-skills/bmad-party-mode/customize.toml +1 -1
  158. package/src/core-skills/bmad-party-mode/scripts/resolve_party.py +14 -4
  159. package/src/core-skills/bmad-review/SKILL.md +49 -0
  160. package/src/core-skills/bmad-review/customize.toml +141 -0
  161. package/src/core-skills/bmad-review/references/editorial-common.md +56 -0
  162. package/src/core-skills/bmad-review/references/lens-adversarial.md +19 -0
  163. package/src/core-skills/bmad-review/references/lens-edge-case-hunter.md +54 -0
  164. package/src/core-skills/bmad-review/references/lens-prose.md +7 -0
  165. package/src/core-skills/bmad-review/references/lens-structure.md +9 -0
  166. package/src/core-skills/bmad-review/references/lens-verification-gap.md +92 -0
  167. package/src/core-skills/bmad-review/references/structure-models.md +44 -0
  168. package/src/core-skills/bmad-review/scripts/tests/test_word_metrics.py +62 -0
  169. package/src/core-skills/bmad-review/scripts/word_metrics.py +102 -0
  170. package/src/core-skills/module-help.csv +4 -8
  171. package/src/core-skills/module.yaml +5 -0
  172. package/src/core-skills/v6-shims/README.md +25 -0
  173. package/src/core-skills/v6-shims/bmad-editorial-review/SKILL.md +6 -0
  174. package/src/core-skills/v6-shims/bmad-editorial-review/customize.toml +31 -0
  175. package/src/core-skills/v6-shims/bmad-editorial-review-prose/SKILL.md +6 -0
  176. package/src/core-skills/v6-shims/bmad-editorial-review-structure/SKILL.md +6 -0
  177. package/src/core-skills/v6-shims/bmad-review-adversarial-general/SKILL.md +6 -0
  178. package/src/core-skills/v6-shims/bmad-review-edge-case-hunter/SKILL.md +6 -0
  179. package/src/core-skills/v6-shims/bmad-review-verification-gap/SKILL.md +6 -0
  180. package/src/scripts/__pycache__/config_utils.cpython-311.pyc +0 -0
  181. package/src/scripts/config_utils.py +119 -0
  182. package/src/scripts/render_skill.py +401 -0
  183. package/src/scripts/resolve_config.py +32 -136
  184. package/src/scripts/resolve_customization.py +43 -184
  185. package/src/scripts/tests/__pycache__/test_config_utils.cpython-311.pyc +0 -0
  186. package/src/scripts/tests/__pycache__/test_resolve_config.cpython-311.pyc +0 -0
  187. package/src/scripts/tests/__pycache__/test_resolve_customization.cpython-311.pyc +0 -0
  188. package/src/scripts/tests/test_config_utils.py +85 -0
  189. package/src/scripts/tests/test_resolve_config.py +89 -0
  190. package/src/scripts/tests/test_resolve_customization.py +27 -0
  191. package/tools/installer/cli-utils.js +6 -2
  192. package/tools/installer/core/installer.js +31 -9
  193. package/tools/installer/core/manifest-generator.js +1 -1
  194. package/tools/installer/core/uv-check.js +122 -24
  195. package/tools/installer/ide/_config-driven.js +1 -1
  196. package/tools/installer/ide/platform-codes.yaml +7 -0
  197. package/tools/installer/ide/shared/path-utils.js +2 -2
  198. package/tools/installer/install-messages.yaml +3 -2
  199. package/tools/installer/modules/custom-module-manager.js +12 -6
  200. package/tools/installer/modules/external-manager.js +12 -8
  201. package/tools/installer/modules/git-env.js +47 -0
  202. package/tools/installer/modules/official-modules.js +1 -1
  203. package/tools/installer/prompts.js +41 -102
  204. package/tools/installer/ui.js +99 -22
  205. package/tools/skill-validator.md +11 -1
  206. package/tools/validate-published-implementation-model.mjs +68 -0
  207. package/tools/validate-skills.js +33 -0
  208. package/web-bundles/prd-coach/prd-template.md +1 -1
  209. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/SKILL.md +0 -76
  210. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/customize.toml +0 -81
  211. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/explain-concept.md +0 -20
  212. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/mermaid-gen.md +0 -20
  213. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/validate-doc.md +0 -19
  214. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/write-document.md +0 -20
  215. package/src/bmm-skills/1-analysis/bmad-document-project/SKILL.md +0 -62
  216. package/src/bmm-skills/1-analysis/bmad-document-project/checklist.md +0 -245
  217. package/src/bmm-skills/1-analysis/bmad-document-project/customize.toml +0 -41
  218. package/src/bmm-skills/1-analysis/bmad-document-project/documentation-requirements.csv +0 -12
  219. package/src/bmm-skills/1-analysis/bmad-document-project/instructions.md +0 -128
  220. package/src/bmm-skills/1-analysis/bmad-document-project/templates/deep-dive-template.md +0 -345
  221. package/src/bmm-skills/1-analysis/bmad-document-project/templates/index-template.md +0 -169
  222. package/src/bmm-skills/1-analysis/bmad-document-project/templates/project-overview-template.md +0 -103
  223. package/src/bmm-skills/1-analysis/bmad-document-project/templates/project-scan-report-schema.json +0 -160
  224. package/src/bmm-skills/1-analysis/bmad-document-project/templates/source-tree-template.md +0 -135
  225. package/src/bmm-skills/1-analysis/bmad-document-project/workflows/deep-dive-instructions.md +0 -300
  226. package/src/bmm-skills/1-analysis/bmad-document-project/workflows/deep-dive-workflow.md +0 -34
  227. package/src/bmm-skills/1-analysis/bmad-document-project/workflows/full-scan-instructions.md +0 -1108
  228. package/src/bmm-skills/1-analysis/bmad-document-project/workflows/full-scan-workflow.md +0 -34
  229. package/src/bmm-skills/1-analysis/research/bmad-domain-research/SKILL.md +0 -96
  230. package/src/bmm-skills/1-analysis/research/bmad-domain-research/customize.toml +0 -41
  231. package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-01-init.md +0 -137
  232. package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-02-domain-analysis.md +0 -229
  233. package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-03-competitive-landscape.md +0 -238
  234. package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-04-regulatory-focus.md +0 -206
  235. package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-05-technical-trends.md +0 -234
  236. package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-06-research-synthesis.md +0 -450
  237. package/src/bmm-skills/1-analysis/research/bmad-domain-research/research.template.md +0 -29
  238. package/src/bmm-skills/1-analysis/research/bmad-market-research/SKILL.md +0 -96
  239. package/src/bmm-skills/1-analysis/research/bmad-market-research/customize.toml +0 -41
  240. package/src/bmm-skills/1-analysis/research/bmad-market-research/research.template.md +0 -29
  241. package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-01-init.md +0 -184
  242. package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-02-customer-behavior.md +0 -239
  243. package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-03-customer-pain-points.md +0 -251
  244. package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-04-customer-decisions.md +0 -261
  245. package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-05-competitive-analysis.md +0 -173
  246. package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-06-research-completion.md +0 -484
  247. package/src/bmm-skills/1-analysis/research/bmad-technical-research/SKILL.md +0 -96
  248. package/src/bmm-skills/1-analysis/research/bmad-technical-research/customize.toml +0 -41
  249. package/src/bmm-skills/1-analysis/research/bmad-technical-research/research.template.md +0 -29
  250. package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-01-init.md +0 -137
  251. package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-02-technical-overview.md +0 -239
  252. package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-03-integration-patterns.md +0 -248
  253. package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-04-architectural-patterns.md +0 -202
  254. package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-05-implementation-research.md +0 -233
  255. package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-06-research-synthesis.md +0 -493
  256. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/SKILL.md +0 -91
  257. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/customize.toml +0 -41
  258. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-01-document-discovery.md +0 -179
  259. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-02-prd-analysis.md +0 -168
  260. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +0 -169
  261. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-04-ux-alignment.md +0 -129
  262. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-05-epic-quality-review.md +0 -241
  263. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-06-final-assessment.md +0 -132
  264. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/templates/readiness-report-template.md +0 -4
  265. package/src/bmm-skills/3-solutioning/bmad-generate-project-context/SKILL.md +0 -81
  266. package/src/bmm-skills/3-solutioning/bmad-generate-project-context/customize.toml +0 -41
  267. package/src/bmm-skills/3-solutioning/bmad-generate-project-context/project-context-template.md +0 -21
  268. package/src/bmm-skills/3-solutioning/bmad-generate-project-context/steps/step-01-discover.md +0 -186
  269. package/src/bmm-skills/3-solutioning/bmad-generate-project-context/steps/step-02-generate.md +0 -321
  270. package/src/bmm-skills/3-solutioning/bmad-generate-project-context/steps/step-03-complete.md +0 -284
  271. package/src/bmm-skills/4-implementation/bmad-dev-auto/customize.toml +0 -108
  272. package/src/bmm-skills/4-implementation/bmad-quick-dev/SKILL.md +0 -115
  273. package/src/bmm-skills/4-implementation/bmad-quick-dev/customize.toml +0 -83
  274. package/src/bmm-skills/4-implementation/bmad-quick-dev/step-oneshot.md +0 -82
  275. package/src/bmm-skills/4-implementation/bmad-quick-dev/sync-sprint-status.md +0 -19
  276. package/src/bmm-skills/4-implementation/bmad-retrospective/SKILL.md +0 -1527
  277. package/src/bmm-skills/4-implementation/bmad-sprint-planning/SKILL.md +0 -319
  278. package/src/bmm-skills/4-implementation/bmad-sprint-planning/checklist.md +0 -34
  279. package/src/bmm-skills/4-implementation/bmad-sprint-status/SKILL.md +0 -311
  280. package/src/core-skills/bmad-brainstorming/analysis/catalog-analysis.md +0 -239
  281. package/src/core-skills/bmad-brainstorming/analysis/method-matrix.csv +0 -109
  282. package/src/core-skills/bmad-editorial-review-prose/SKILL.md +0 -86
  283. package/src/core-skills/bmad-editorial-review-structure/SKILL.md +0 -179
  284. package/src/core-skills/bmad-index-docs/SKILL.md +0 -66
  285. package/src/core-skills/bmad-review-adversarial-general/SKILL.md +0 -37
  286. package/src/core-skills/bmad-shard-doc/SKILL.md +0 -105
  287. /package/src/bmm-skills/{2-plan-workflows → agents}/bmad-agent-ux-designer/customize.toml +0 -0
  288. /package/src/bmm-skills/{3-solutioning → plan}/bmad-architecture/assets/spine-template.md +0 -0
  289. /package/src/bmm-skills/{3-solutioning → plan}/bmad-architecture/references/headless.md +0 -0
  290. /package/src/bmm-skills/{3-solutioning → plan}/bmad-architecture/references/reviewer-gate.md +0 -0
  291. /package/src/bmm-skills/{3-solutioning → plan}/bmad-architecture/scripts/lint_spine.py +0 -0
  292. /package/src/bmm-skills/{3-solutioning → plan}/bmad-architecture/scripts/tests/test_lint_spine.py +0 -0
  293. /package/src/bmm-skills/{3-solutioning → plan}/bmad-create-epics-and-stories/customize.toml +0 -0
  294. /package/src/bmm-skills/{3-solutioning → plan}/bmad-create-epics-and-stories/steps/step-01-validate-prerequisites.md +0 -0
  295. /package/src/bmm-skills/{3-solutioning → plan}/bmad-create-epics-and-stories/steps/step-02-design-epics.md +0 -0
  296. /package/src/bmm-skills/{3-solutioning → plan}/bmad-create-epics-and-stories/steps/step-03-create-stories.md +0 -0
  297. /package/src/bmm-skills/{3-solutioning → plan}/bmad-create-epics-and-stories/templates/epics-template.md +0 -0
  298. /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-prd/assets/headless-schemas.md +0 -0
  299. /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-prd/assets/prd-validation-checklist.md +0 -0
  300. /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-prd/assets/validation-report-template.html +0 -0
  301. /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-prd/references/headless.md +0 -0
  302. /package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/agents/artifact-analyzer.md +0 -0
  303. /package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/agents/web-researcher.md +0 -0
  304. /package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/assets/prfaq-template.md +0 -0
  305. /package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/customize.toml +0 -0
  306. /package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/references/customer-faq.md +0 -0
  307. /package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/references/internal-faq.md +0 -0
  308. /package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/references/press-release.md +0 -0
  309. /package/src/bmm-skills/{1-analysis → plan}/bmad-product-brief/assets/brief-template.md +0 -0
  310. /package/src/{core-skills → bmm-skills/plan}/bmad-spec/assets/headless-schemas.md +0 -0
  311. /package/src/{core-skills → bmm-skills/plan}/bmad-spec/assets/stories-schema.md +0 -0
  312. /package/src/bmm-skills/{4-implementation → plan}/bmad-sprint-planning/customize.toml +0 -0
  313. /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/design-directions.md +0 -0
  314. /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/design-example-editorial.md +0 -0
  315. /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/design-example-mobile.md +0 -0
  316. /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/design-example-shadcn.md +0 -0
  317. /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/excalidraw-wireframe.md +0 -0
  318. /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/experience-example-mobile.md +0 -0
  319. /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/experience-example-shadcn.md +0 -0
  320. /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/headless-schemas.md +0 -0
  321. /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/key-screens.md +0 -0
  322. /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/validation-report-template.html +0 -0
  323. /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/references/design-md-spec.md +0 -0
  324. /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/references/headless.md +0 -0
  325. /package/src/bmm-skills/{4-implementation/bmad-quick-dev → ship/bmad-build}/spec-template.md +0 -0
  326. /package/src/{core-skills/bmad-review-edge-case-hunter → bmm-skills/ship/bmad-build-auto}/references/deletion-check.md +0 -0
  327. /package/src/bmm-skills/{4-implementation → ship}/bmad-checkpoint-preview/customize.toml +0 -0
  328. /package/src/bmm-skills/{4-implementation → ship}/bmad-checkpoint-preview/generate-trail.md +0 -0
  329. /package/src/bmm-skills/{4-implementation → ship}/bmad-checkpoint-preview/step-01-orientation.md +0 -0
  330. /package/src/bmm-skills/{4-implementation → ship}/bmad-checkpoint-preview/step-02-walkthrough.md +0 -0
  331. /package/src/bmm-skills/{4-implementation → ship}/bmad-checkpoint-preview/step-03-detail-pass.md +0 -0
  332. /package/src/bmm-skills/{4-implementation → ship}/bmad-checkpoint-preview/step-04-testing.md +0 -0
  333. /package/src/bmm-skills/{4-implementation → ship}/bmad-code-review/steps/step-03-triage.md +0 -0
  334. /package/src/bmm-skills/{4-implementation → ship}/bmad-correct-course/checklist.md +0 -0
  335. /package/src/bmm-skills/{4-implementation → ship}/bmad-correct-course/customize.toml +0 -0
  336. /package/src/bmm-skills/{4-implementation → ship}/bmad-qa-generate-e2e-tests/checklist.md +0 -0
  337. /package/src/bmm-skills/{4-implementation → ship}/bmad-qa-generate-e2e-tests/customize.toml +0 -0
  338. /package/src/bmm-skills/{3-solutioning → v6-shims}/bmad-create-architecture/customize.toml +0 -0
  339. /package/src/bmm-skills/{2-plan-workflows → v6-shims}/bmad-create-prd/customize.toml +0 -0
  340. /package/src/bmm-skills/{4-implementation → v6-shims}/bmad-create-story/checklist.md +0 -0
  341. /package/src/bmm-skills/{4-implementation → v6-shims}/bmad-create-story/customize.toml +0 -0
  342. /package/src/bmm-skills/{4-implementation → v6-shims}/bmad-create-story/discover-inputs.md +0 -0
  343. /package/src/bmm-skills/{4-implementation → v6-shims}/bmad-create-story/template.md +0 -0
  344. /package/src/bmm-skills/{4-implementation → v6-shims}/bmad-dev-story/checklist.md +0 -0
  345. /package/src/bmm-skills/{2-plan-workflows → v6-shims}/bmad-edit-prd/customize.toml +0 -0
  346. /package/src/bmm-skills/{4-implementation → v6-shims}/bmad-sprint-status/customize.toml +0 -0
  347. /package/src/bmm-skills/{2-plan-workflows → v6-shims}/bmad-validate-prd/customize.toml +0 -0
  348. /package/src/core-skills/bmad-advanced-elicitation/{methods.csv → assets/methods.csv} +0 -0
  349. /package/src/core-skills/bmad-party-mode/scripts/tests/{test-resolve_party.py → test_resolve_party.py} +0 -0
@@ -0,0 +1,88 @@
1
+ # Edge Case Hunter Review
2
+
3
+ **Goal:** You are a pure path tracer. Never comment on whether code is good or bad; only list missing handling.
4
+ When a diff is provided, scan only the diff hunks and list boundaries that are directly reachable from the changed lines and lack an explicit guard in the diff.
5
+ When no diff is provided (full file or function), treat the entire provided content as the scope.
6
+ Ignore the rest of the codebase unless the provided content explicitly references external functions.
7
+ A brief secondary deletion check runs as Step 4 when the diff removes code.
8
+
9
+ **Inputs:**
10
+ - **content** — Content to review: diff, full file, or function
11
+ - **also_consider** (optional) — Areas to keep in mind during review alongside normal edge-case analysis
12
+
13
+ **MANDATORY: Execute steps in the Execution section IN EXACT ORDER. DO NOT skip steps or change the sequence. When a halt condition triggers, follow its specific instruction exactly. Each action within a step is a REQUIRED action to complete that step.**
14
+
15
+ **Your method is exhaustive path enumeration — mechanically walk every branch, not hunt by intuition. Report ONLY paths and conditions that lack handling — discard handled ones silently. Do NOT editorialize or add filler. Do not assign severity labels, rankings, or priority levels.**
16
+
17
+
18
+ ## EXECUTION
19
+
20
+ ### Step 1: Receive Content
21
+
22
+ - Load the content to review strictly from the parent message that launched you (not from this instruction file)
23
+ - If content is empty, or cannot be decoded as text, return `[{"location":"N/A","trigger_condition":"Input empty or undecodable","guard_snippet":"Provide valid content to review","potential_consequence":"Review skipped — no analysis performed"}]` and stop
24
+ - Identify content type (diff, full file, or function) to determine scope rules
25
+
26
+ ### Step 2: Exhaustive Path Analysis
27
+
28
+ **Walk every branching path and boundary condition within scope — report only unhandled ones.**
29
+
30
+ - If `also_consider` input was provided, incorporate those areas into the analysis
31
+ - Walk all branching paths: control flow (conditionals, loops, error handlers, early returns) and domain boundaries (where values, states, or conditions transition). Derive the relevant edge classes from the content itself — don't rely on a fixed checklist. Examples: missing else/default, unguarded inputs, off-by-one loops, arithmetic overflow, implicit type coercion, race conditions, timeout gaps
32
+ - Consider implicit branches: the diff special-cases or changes the handling of one or more members of a fixed set of values — enums, status codes, sentinels, type tags, flags, value ranges. The rest of the set is implicit branches (e.g. the diff changes the `RED` and `YELLOW` cases of a `RED`/`YELLOW`/`GREEN` enum; `GREEN` is the implicit branch)
33
+ - For each path: determine whether the content handles it
34
+ - Collect only the unhandled paths as findings — discard handled ones silently
35
+
36
+ ### Step 3: Validate Completeness
37
+
38
+ - Revisit every edge class from Step 2 — e.g., missing else/default, null/empty inputs, off-by-one loops, arithmetic overflow, implicit type coercion, race conditions, timeout gaps
39
+ - Add any newly found unhandled paths to findings; discard confirmed-handled ones
40
+
41
+ ### Step 4: Deletion Check
42
+
43
+ If the diff removed or replaced meaningful code (ignore pure renames and whitespace): load `references/deletion-check.md` and follow it.
44
+
45
+ ### Step 5: Present Findings
46
+
47
+ Output all findings as a single JSON array following the Output Format specification exactly.
48
+
49
+
50
+ ## OUTPUT FORMAT
51
+
52
+ Return ONLY a valid JSON array of objects. Each edge-case finding contains exactly these four fields:
53
+
54
+ ```json
55
+ [{
56
+ "location": "file:start-end (or file:line when single line, or file:hunk when exact line unavailable)",
57
+ "trigger_condition": "one-line description (max 15 words)",
58
+ "guard_snippet": "minimal code sketch that closes the gap (single-line escaped string, no raw newlines or unescaped quotes)",
59
+ "potential_consequence": "what could actually go wrong (max 15 words)"
60
+ }]
61
+ ```
62
+
63
+ No extra text, no explanations, no markdown wrapping. An empty array `[]` is valid when nothing is found. Deletion findings from Step 4, if any, go in the same array with the extra fields defined in `references/deletion-check.md`.
64
+
65
+
66
+ ## HALT CONDITIONS
67
+
68
+ - If content is empty or cannot be decoded as text, return `[{"location":"N/A","trigger_condition":"Input empty or undecodable","guard_snippet":"Provide valid content to review","potential_consequence":"Review skipped — no analysis performed"}]` and stop
69
+ <reference path="references/deletion-check.md">
70
+ # Deletion Check
71
+
72
+ Secondary pass for the Edge Case Hunter — runs only when the diff removed meaningful code. Subordinate to the edge-case pass; findings are usually few or none.
73
+
74
+ For each chunk of removed or replaced code (ignore pure renames and whitespace), ask: did it carry behavior or a contract that the change neither re-established nor intentionally retired? Add a finding for any resulting regression, orphaned reference, or newly-dead code. Skip anything already covered by your edge-case findings.
75
+
76
+ Append each finding to the same JSON array as the edge-case findings, with the four standard fields plus:
77
+
78
+ - `kind`: `"deletion"`
79
+ - `confidence`: `"high"`, `"medium"`, or `"low"` — these are inferences; rate them
80
+
81
+ For a deletion finding the standard fields read as: `location` = the removed item; `trigger_condition` = the behavior or contract it enforced; `guard_snippet` = where or how to re-establish it; `potential_consequence` = the regression or orphan.
82
+
83
+ Add nothing if nothing qualifies.
84
+ </reference>
85
+
86
+ ## CONTENT SOURCE
87
+
88
+ Review the content supplied under "Review content:" in the message that launched you.
@@ -0,0 +1,113 @@
1
+ # Verification Gap Review
2
+
3
+ **Goal:** Find changed behavior that could break without reliable verification catching it. Ask one question — "if the behavior this change is supposed to produce broke where it's actually used, would verification fail?" Do not hunt for correctness bugs, but report genuine problems you notice while tracing verification.
4
+
5
+ The main verification gap shapes are:
6
+
7
+ 1. **Regression gap:** the changed code regresses where it's used, and no test covering that use would fail.
8
+ 2. **Missing-adoption gap:** a place that should now use the new behavior doesn't; it handles the same case its own way, or not at all, and no test would flag the omission.
9
+ 3. **Broken-verification gap:** a test appears to cover the changed behavior, but would not actually protect it because it is skipped, flaky, not run in the normal verification path, or too weak to observe the regression.
10
+
11
+ ## Evidence Rules
12
+
13
+ - Read a test before claiming what it covers, runs, asserts, or misses.
14
+ - Before claiming no test exists, search the whole repo by the symbol under test and by import references; expected file locations are not enough.
15
+ - Never assert what you did not verify. If a finding cannot be grounded, drop it.
16
+ - In a finding, say what you actually checked — "none of the tests I read cover this" — and show how far you looked. Say a test doesn't exist anywhere only when the symbol/import-reference search actually shows that.
17
+ - Do not assign severity, confidence, priority, or ranking.
18
+
19
+ ## Review Sequence
20
+
21
+ ### Step 1: Screen for behavioral change
22
+
23
+ Screen each part of the change separately. If a part is non-behavioral, skip it. Call a part non-behavioral only when the changed code does not alter return values, thrown errors, caller-visible side effects, or observable state (including iteration order and emitted messages). Once a part meets that test, move on; do not inspect callers or tests for extra confirmation.
24
+
25
+ Common non-behavioral examples: formatting, comments, whitespace; pure renames; trivial getters/setters and pass-throughs; type-only or compiler-enforced changes with no runtime effect; etc.
26
+
27
+ Only outcomes produced by deterministic code are worth automatically testing; tests are useless on static source text and brittle on LLM output. Skip those parts.
28
+
29
+ If every part is skipped, output the clean result (see Output Format).
30
+
31
+ ### Step 2: Find the behavior that changed
32
+
33
+ Identify what behavior changed compared to the previous version: output, side effect, branch, error path, schema/event shape, config default, validation/authorization rule, external contract, etc. If the change affects more than one behavior, handle each separately.
34
+
35
+ Treat broad-impact changes as behavioral even when no single changed line looks important: dependency, toolchain, build/config, data-file, etc.
36
+
37
+ ### Step 3: Trace where that behavior is used
38
+
39
+ Trace the changed behavior to the places that observe it. Start with direct callers and registered entry points (routes, commands, DI), contract consumers (schemas, events, APIs, database readers), and reverse-dependency info if already available.
40
+
41
+ Follow a path only while the changed behavior is reachable and unverified. Stop when a test at that boundary would fail, the consumer does not observe the changed behavior, or the next hop is guesswork (dynamic dispatch, reflection, outside-repo consumers, etc.). Prefer the nearest observable boundary, often one to three hops away, especially across contract, integration, or service edges. If there are more than five similar consumers, group obvious repeats and check representative paths; expand only when a consumer observes the behavior differently.
42
+
43
+ ### Step 4: Qualify the consumer, then check its test
44
+
45
+ For each consumer, name the smallest realistic regression this consumer would observe: invert the branch, drop the default, omit the field, return the old error code, skip the integration call, etc. This is the Demonstration. If no such regression exists, drop the path; untested downstream code is not a finding.
46
+
47
+ A `Missing-adoption gap` qualifies not by the adoption failure alone but by a supersession signal: the change gives clear evidence the new behavior is meant to replace the local one — PR intent, naming or docs, a replaced sibling site, deleted duplicate logic, or a test defining the new rule — and the local site shares the same observable contract. Without a supersession signal and a shared observable contract, it is a refactor suggestion, not a verification-gap finding. Once both hold, check whether any test for that site would flag the non-adoption; missing coverage of the non-adoption is the gap itself, not a disqualifier.
48
+
49
+ Find and read the relevant test. Ask whether the Demonstration would make an assertion fail.
50
+
51
+ - If yes, the behavior is verified. No finding.
52
+ - For a regression-style Demonstration: if no test runs the path, the test is skipped/flaky/not run normally, or the test runs the code without checking the changed result, report a `Regression gap` or `Broken-verification gap`.
53
+ - For a qualifying Missing-adoption case: if none of the site tests you found assert it adopts the new behavior, report a `Missing-adoption gap`.
54
+
55
+ A test counts only if it runs normally and an assertion observes the changed output, branch, or contract. These do not count: no execution; source-text assertions that match a file's wording instead of running it; success/no-throw/snapshot-only checks; mock/log-call checks; human-only checks; tests that mock away the integration; e2e tests that pass through without checking the changed output; stale assertions or fixtures.
56
+
57
+ For example, `expect(x ?? DEFAULT).toBe(DEFAULT)` passes when `x` is missing.
58
+
59
+ Common patterns:
60
+
61
+ - **Caller-path gap** — helper test covers the branch, but caller values skip it.
62
+ - **Contract drift** — payload/schema/event changes must be verified at the consumer.
63
+ - **Migration compatibility** — tests only create new-format rows or fresh schemas.
64
+ - **Phantom exception** — handled partial-failure path has no test.
65
+ - **Missing-adoption gap** — sibling site should use the new rule/helper and does not.
66
+ - **Removed verification** — deleted test or weakened assertion leaves behavior unpinned; removing a source-text assertion is not this, since it never counted.
67
+
68
+ ### Step 5: Confirm each finding is real
69
+
70
+ Before writing a finding, re-open the specific tests or search results the finding relies on. Verify the Demonstration would not make any test you checked fail, or that the absence claim is backed by the symbol/import-reference search. Do not claim more than you verified; drop any finding you cannot ground.
71
+
72
+ Explain why the test misses the bug using what the test sets up and checks.
73
+
74
+ Do not report: compiler/type-checker-enforced cases; behavior already verified by an integration, contract, or e2e test; implementation-detail or mock-only tests; low coverage or a missing test file by itself; legacy untested code the change did not affect.
75
+
76
+ Report genuine problems you noticed while tracing verification, even if they are not verification gaps. Put them under `Other findings` in the output. This permits reporting what you already reached, not extra hunting.
77
+
78
+ ## OUTPUT FORMAT
79
+
80
+ Emit each verification-gap finding as one block. No general advice, no severity or confidence.
81
+
82
+ ```markdown
83
+ ### <one-line title naming the gap>
84
+
85
+ - **Changed surface:** the exact behavior or contract that changed — `file:line`.
86
+ - **Impacted consumer or site:** named concretely with `file:line` (e.g. "the `createInvoice` mutation used by the billing dashboard at `billing/dashboard.ts:88`," not "callers of this function").
87
+ - **Existing test evidence:**
88
+ - `Regression gap`: what the relevant test actually asserts, with `file:line`; or, if none, the symbol/import-reference searches run and their result.
89
+ - `Missing-adoption gap`: tests for the impacted site, and whether any assert it adopts the new behavior.
90
+ - `Broken-verification gap`: the apparent test or verification path, and why it does not count.
91
+ - **Missing verification:** the precise assertion or check that's absent.
92
+ - **Demonstration:**
93
+ - `Regression gap` / `Broken-verification gap`: the concrete regression that would ship undetected, and why the tests you checked would not fail.
94
+ - `Missing-adoption gap`: the case the site mishandles by not adopting the new behavior, and that none of the tests you read assert adoption.
95
+ - **Consequence:** the concrete thing that ships wrong — a regression the checked evidence would not catch, or a site that should use the new behavior and doesn't.
96
+ - **Suggested test shape:** (optional) the kind of test that would close the gap, fit to the repo's own way of verifying — don't impose a generic test pyramid.
97
+ ```
98
+
99
+ If you noticed genuine non-gap problems while tracing verification, append:
100
+
101
+ ```markdown
102
+ ## Other findings
103
+
104
+ - <description only; no severity, confidence, priority, or ranking>
105
+ ```
106
+
107
+ When you find no verification gaps and no other findings, output exactly this single line, not an empty response:
108
+
109
+ `No verification gaps found.`
110
+
111
+ ## CONTENT SOURCE
112
+
113
+ Review the content supplied under "Review content:" in the message that launched you. If none is supplied, stop with exactly: `No verification gaps found.`
@@ -64,10 +64,13 @@ story_key: '' # set at runtime when discovered from sprint status
64
64
  - After constructing `{diff_output}`, verify it is non-empty regardless of source type. If empty, HALT and tell the user there is nothing to review.
65
65
 
66
66
  4. **Set the spec context.**
67
- - If `{spec_file}` is already set (from Tier 1 or Tier 2): verify the file exists and is readable, then set `{review_mode}` = `"full"`.
68
- - Otherwise, ask the user: **Is there a spec or story file that provides context for these changes?**
69
- - If yes: set `{spec_file}` to the path provided, verify the file exists and is readable, then set `{review_mode}` = `"full"`.
70
- - If no: set `{review_mode}` = `"no-spec"`.
67
+ - If the triggering request or recent conversation **explicitly** states there is no spec (e.g. "no spec", "without a spec", "no-spec"): set `{review_mode}` = `"no-spec"` and clear `{spec_file}` (set it to `''`). Do **not** ask for a spec. Do **not** infer no-spec mode merely because the invocation omitted a spec path.
68
+ - Else if `{spec_file}` is already set (from Tier 1 or Tier 2): verify the file exists and is readable, then set `{review_mode}` = `"full"`.
69
+ - Else (neither a spec path nor an explicit no-spec declaration is present): ask the user to choose:
70
+ 1. Provide a spec or story file path for context; or
71
+ 2. Continue without a spec.
72
+ - If the user provides a path: set `{spec_file}` to that path, verify the file exists and is readable, then set `{review_mode}` = `"full"`.
73
+ - If the user explicitly chooses to continue without a spec: set `{review_mode}` = `"no-spec"`.
71
74
 
72
75
  5. If `{review_mode}` = `"full"` and the file at `{spec_file}` has a `context` field in its frontmatter listing additional docs, load each referenced document. Warn the user about any docs that cannot be found.
73
76
 
@@ -21,7 +21,7 @@ failed_layers: '' # set at runtime: comma-separated list of layers that failed o
21
21
 
22
22
  If no layer is active, HALT with status `blocked` and blocking condition `no active review layers`.
23
23
 
24
- 3. Execute all active layers in parallel wherever their execution methods allow: substitute the runtime placeholders (`{diff_output}`, `{spec_file}`) into each layer's `instruction`, then follow it verbatim. If a layer's instruction requires subagents and subagents are not available, generate prompt files in `{implementation_artifacts}` for each such layer and HALT. Ask the user to run each in a separate session (ideally a different LLM) and paste back the findings. When findings are pasted, treat them as those layers' findings and resume from this point.
24
+ 3. Execute all active layers in parallel wherever their execution methods allow: expand `{skill-root}` in each layer's `instruction` to this skill's absolute installed directory, then substitute the runtime placeholders (`{diff_output}`, `{spec_file}`). For an instruction that launches a reviewer subagent, launch that child with the prompt text after placeholder substitution; do not load the reviewer instruction file yourself. For any other customized instruction, execute it as written. Do not leave `{skill-root}` unresolved in a child prompt. If a layer's instruction requires subagents and subagents are not available, for each such layer write under `{implementation_artifacts}` the exact child prompt from that layer's instruction after placeholder substitution (not a path-only pointer), then HALT. Ask the user to run each in a separate session (ideally a different LLM) and paste back the findings. When findings are pasted, treat them as those layers' findings and resume from this point. This is the only allowed parent-side read of a reviewer instruction file.
25
25
 
26
26
  4. **Layer failure handling**: If any layer fails, times out, or returns empty results, append the layer's `name` to `{failed_layers}` (comma-separated) and proceed with findings from the remaining layers.
27
27
 
@@ -127,6 +127,6 @@ Present the user with follow-up options:
127
127
 
128
128
  ## On Complete
129
129
 
130
- Run: `python3 {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete`
130
+ Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete`
131
131
 
132
132
  If the resolved `workflow.on_complete` is non-empty, follow it as the final terminal instruction before exiting.
@@ -20,7 +20,7 @@ description: 'Manage significant changes during sprint execution. Use when the u
20
20
 
21
21
  ### Step 1: Resolve the Workflow Block
22
22
 
23
- Run: `python3 {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
23
+ Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
24
24
 
25
25
  **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:
26
26
 
@@ -77,7 +77,7 @@ Activation is complete. If `activation_steps_prepend` or `activation_steps_appen
77
77
  | Architecture | `{planning_artifacts}/*architecture*.md` (whole) or `{planning_artifacts}/*architecture*/*.md` (sharded) | FULL_LOAD |
78
78
  | UX Design | `{planning_artifacts}/*ux*.md` (whole) or `{planning_artifacts}/*ux*/*.md` (sharded) | FULL_LOAD |
79
79
  | Spec | `{planning_artifacts}/*spec-*.md` (whole) | FULL_LOAD |
80
- | Document Project | `{project_knowledge}/index.md` (sharded) | INDEX_GUIDED |
80
+ | Project Context | `AGENTS.md` in the affected repo (the `bmad:context` block) | FULL_LOAD |
81
81
 
82
82
  ## Execution
83
83
 
@@ -95,12 +95,11 @@ Activation is complete. If `activation_steps_prepend` or `activation_steps_appen
95
95
  - Process the combined content as a single document
96
96
  4. **Priority**: If both whole and sharded versions exist, use the whole document
97
97
 
98
- **Discovery Process for INDEX_GUIDED documents (Document Project):**
98
+ **Discovery Process for Project Context:**
99
99
 
100
- 1. **Search for index file** - Look for `{project_knowledge}/index.md`
101
- 2. **If found**: Read the index to understand available documentation sections
102
- 3. **Selectively load sections** based on relevance to the change being analyzed — do NOT load everything, only sections that relate to the impacted areas
103
- 4. **This document is optional** — skip if `{project_knowledge}` does not exist (greenfield projects)
100
+ 1. **Read `AGENTS.md`** in the repo the change affects — the block between the `bmad:context` markers carries the policy, frozen paths, and conventions a course correction must respect.
101
+ 2. **Follow only the pointers that relate to the impacted areas** — nested component files or linked rule files listed under "Where things are". Do not load them all.
102
+ 3. **This document is optional** — skip if the repo has no `AGENTS.md` (greenfield projects).
104
103
 
105
104
  **Fuzzy matching**: Be flexible with document names — users may use variations like `prd.md`, `bmm-prd.md`, `product-requirements.md`, etc.
106
105
 
@@ -295,7 +294,7 @@ Activation is complete. If `activation_steps_prepend` or `activation_steps_appen
295
294
 
296
295
  <action>Report workflow completion to user with personalized message: "Correct Course workflow complete, {user_name}!"</action>
297
296
  <action>Remind user of success criteria and next steps for Developer agent</action>
298
- <action>Run: `python3 {project-root}/_bmad/scripts/resolve_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.</action>
297
+ <action>Run: `uv run {project-root}/_bmad/scripts/resolve_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.</action>
299
298
  </step>
300
299
 
301
300
  </workflow>
@@ -20,7 +20,7 @@ description: 'Generate end to end automated tests for existing features. Use whe
20
20
 
21
21
  ### Step 1: Resolve the Workflow Block
22
22
 
23
- Run: `python3 {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
23
+ Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
24
24
 
25
25
  **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:
26
26
 
@@ -171,6 +171,6 @@ Save summary to: `{default_output_file}`
171
171
 
172
172
  ## On Complete
173
173
 
174
- Run: `python3 {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete`
174
+ Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete`
175
175
 
176
176
  If the resolved `workflow.on_complete` is non-empty, follow it as the final terminal instruction before exiting.
@@ -0,0 +1,94 @@
1
+ ---
2
+ name: bmad-retrospective
3
+ description: 'Evidence-based epic retrospective — collect what the epic produced, verify findings against sources, render an acceptance verdict. Use when the user says "run a retrospective" or "lets retro the epic [epic]". Supports -H/--headless.'
4
+ ---
5
+
6
+ # Retrospective
7
+
8
+ Review a completed epic by reading the evidence it left — the epic spec, story files, the full diff, per-story commits, sprint status, and session logs when they exist. An unattended epic run leaves a record; this skill reads that record, surfaces the defects no single story could show, and judges the epic against the criteria it set for itself.
9
+
10
+ Every finding you report carries a source reference (file, line, commit, or log). A claim you cannot point at — an invented root cause, a pattern the diff does not actually show — is not a finding. Drop it.
11
+
12
+ ## Resolution rules
13
+
14
+ - Bare paths and `{skill-root}` (e.g. `references/aggregate-views.md`, `scripts/sprint_status.py`) resolve from this skill's installed directory.
15
+ - `{project-root}` → the project working directory.
16
+ - `{skill-name}` → the skill directory's basename.
17
+
18
+ ## Modes
19
+
20
+ Interactive by default. With `-H`/`--headless`: skip every confirmation, take the epic from the invocation (falling back to detection only if none was supplied), never open the team discussion, render the verdict on the evidence alone, and record each assumption made without the user (which epic was selected, the machine verdict, each proposed item) into the retrospective document's Assumptions section so the audit trail survives. The Phase 4 acceptance fail-safe still applies in headless runs.
21
+
22
+ For automation, `-H <epic>` — an explicit epic in headless mode — is the stable orchestrator-facing interface. Pass the same number to `detect-epic --epic <N>` so the unfinished-story gate is script-backed (see Inputs). Epic auto-detection is a human convenience, not an automation contract: unflagged `detect-epic` returns the highest epic with *any* `done` story, and stories-mode projects have no `sprint-status.yaml` to detect from.
23
+
24
+ ## On Activation
25
+
26
+ Run these in order before the retrospective begins:
27
+
28
+ 1. **Resolve the workflow block.** Run `uv run --no-cache {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`. If it fails, resolve `{workflow.*}` yourself by reading `{skill-root}/customize.toml`, then `{project-root}/_bmad/custom/{skill-name}.toml`, then `.user.toml` in that order, merging base → team → user (scalars override, keyed arrays-of-tables merge by `code`/`id`, other arrays append).
29
+ 2. **Run prepend steps** — execute each entry in `{workflow.activation_steps_prepend}` in order.
30
+ 3. **Load persistent facts** — treat every `{workflow.persistent_facts}` entry as standing context. `file:` entries are paths/globs under `{project-root}` whose contents load as facts; all others are literal facts.
31
+ 4. **Load config** from `{project-root}/_bmad/bmm/config.yaml`: `project_name`, `user_name`, `communication_language`, `document_output_language`, `user_skill_level`, `planning_artifacts`, `implementation_artifacts`, and `date` (system datetime), plus `output_folder` from `{project-root}/_bmad/core/config.yaml`. Speak all output in `{communication_language}`; write all documents in `{document_output_language}`. Never state time estimates — AI has changed development speed, so hour/day/week predictions are noise.
32
+ 5. **Greet and orient** (interactive only). Greet `{user_name}`, name the epic you are about to retro, and optionally invite their going-in concerns ("anything you want weighted — a story that felt rushed, a risky interaction between two stories?"). Use any answer to focus the Phase 1–2 analysis; it directs attention but never becomes a finding without a source.
33
+ 6. **Run append steps** — execute each entry in `{workflow.activation_steps_append}` in order.
34
+
35
+ ## Inputs
36
+
37
+ | Input | Where | Use |
38
+ |-------|-------|-----|
39
+ | epic | invocation argument, or detected from sprint status | which epic to retro |
40
+ | spec folder | invocation argument, or found under the spec roots | the stories-mode epic: `SPEC.md`, ordered `stories.yaml`, `stories/<id>-*.md` |
41
+ | sprint status | `{implementation_artifacts}/sprint-status.yaml` | epic detection + final status update |
42
+ | architecture / prd | `{planning_artifacts}/*architecture*`, `*prd*` | context for judging as-built vs intended |
43
+ | previous retro (optional) | `{implementation_artifacts}/**/epic-{{prev}}-retro-*.md` | check whether last epic's actions landed |
44
+ | session logs (optional) | conversation/session records for the epic's stories | process lessons; record the gap when absent |
45
+
46
+ An epic reaches this skill in one of two shapes, and they are peers. **Sprint mode** reads `sprint-status.yaml`. **Stories mode** reads a spec folder holding `SPEC.md`, an ordered `stories.yaml`, and `stories/<id>-*.md` artifacts — the shape an unattended run leaves behind. Resolve which applies first: a named folder is stories mode whether or not sprint status exists; a named epic number is sprint mode; with neither, use sprint mode when `sprint-status.yaml` exists, and otherwise look for spec folders under `{output_folder}/specs`, `{planning_artifacts}`, and `{implementation_artifacts}`. Ask the user which to retro when there is more than one, and never choose silently; headless, stop and require an explicit folder.
47
+
48
+ In stories mode, `stories.yaml` in list order is the story list — list order is authoritative, filename sort is not — and each story's `stories/<id>-*.md` frontmatter carries its `status`. `pending_stories` is the ids whose status is not `done`; apply the same completeness gate as below. Then skip to Phase 1: do not read or write sprint status for the rest of the run. The rest of this section is sprint mode.
49
+
50
+ Determine the epic and its unfinished-story list from `sprint_status.py detect-epic` whenever `{implementation_artifacts}/sprint-status.yaml` is available:
51
+
52
+ - **Epic supplied** (including the stable `-H <epic>` orchestrator path): run `uv run --no-cache {skill-root}/scripts/sprint_status.py detect-epic --file {implementation_artifacts}/sprint-status.yaml --epic <N>`. The script scopes `pending_stories` to that number even when auto-detect would have picked a different epic, and even when the epic has no `done` story yet. `story_count` is that same scoped count of the epic's story keys: `0` means the file has no such epic at all — a nonexistent epic returns the same empty `pending_stories` as a finished one, so treat `story_count: 0` as a likely mistyped epic number, confirm with the user, and headless, stop and report rather than proceeding.
53
+ - **No epic supplied**: run the same command without `--epic` (returns the highest epic with a `done` story). Confirm the detected epic with the user and let them override; in headless mode accept it and record the assumption. If detection returns none, ask the user — or, headless, stop and report.
54
+
55
+ If the script exits non-zero it emits `{"ok": false, "error": ...}` instead of a detection — the normal path for a stories-mode project with no `sprint-status.yaml`, and for a file that does not parse: surface that error verbatim — or, if the script produced no JSON at all, whatever it wrote to stderr — and ask the user which epic to retro; headless, stop and report. Without a readable sprint-status file there is no `pending_stories` list; record that the completeness check did not run and continue only if the user (or headless Assumptions trail) accepts proceeding without it.
56
+
57
+ Then check the epic is actually finished before Phase 1. A successful detect carries `pending_stories` — the selected epic's story keys whose status is not `done`, in file order, scoped to that epic alone (an unfinished story in some *other* epic is out of scope for this retrospective). When the list is non-empty, interactively list those stories and ask whether to retro an unfinished epic: if the user declines, stop and report — do not enter Phase 1; if they accept, record the stories they accepted proceeding over in the document's Epic summary. Headless, proceed and record the same list in the Assumptions section — do not invent a confirmation. Either way the list sits in the document, and Phase 4's machine verdict is **rejected** when any story remained unfinished (see `references/acceptance-verdict.md`); a human may override interactively.
58
+
59
+ ## Working state and resumption
60
+
61
+ The retrospective document is the working artifact, not only the final output. Once the epic is fixed, create it as a skeleton (`references/retro-document.md` names the sections) and write each phase's result into it as you finish — inventory, then findings with sources, then dispositions and verdict. Continuity is re-reading the file.
62
+
63
+ If a retrospective document for this epic already exists, load it, reconcile its recorded state against the current evidence — the current evidence wins, since commits may have landed and questions may have been answered since — and resume at the first incomplete phase instead of redoing finished ones. In stories mode that document is `{spec-folder}/RETROSPECTIVE.md`, a fixed name so a resumed run finds it; sprint mode keeps its dated `{implementation_artifacts}` filename.
64
+
65
+ ## Flow
66
+
67
+ Run the phases in order. A default run stops at a written evidence report and verdict; the team discussion in Phase 3 is opt-in.
68
+
69
+ ### Phase 1 — Gather
70
+
71
+ Enumerate what the epic actually produced and record what is missing. Load `references/evidence-gathering.md` for the inventory checklist, the `git_evidence.py` pre-pass that derives the diff range and per-story commits, and the missing-evidence rule: each later analysis declares what it needs and records a narrowed scope when the evidence is absent, so a reader can always tell "checked and clean" from "never checked."
72
+
73
+ ### Phase 2 — Analyze
74
+
75
+ Produce findings, each with a source reference, from three angles:
76
+
77
+ - **Aggregate views** — the defects no single diff hunk shows: architecture delta, duplication map, god-class growth, pattern divergence, spec-to-implementation reconciliation. Load `references/aggregate-views.md` for the catalog and how to derive each (deterministic scripts first).
78
+ - **Diff-scope review** — do not reimplement review. Invoke **`bmad-review`** on the epic's diff for the code lenses (adversarial, edge-case, verification-gap), weighting the boundaries between stories, where no single session ever saw both sides. Fold its findings in. If `bmad-review` is unavailable, run those lenses inline over the diff on a narrowed scope and record the narrowing.
79
+ - **Behavior check (when the epic changed runtime behavior)** — exercise the changed flows end to end and record what you observed. Passing tests do not substitute for running the system.
80
+
81
+ Consolidate: merge, dedupe, and provenance-link findings. Drop any finding you cannot tie to a source.
82
+
83
+ ### Phase 3 — Team Discussion (opt-in)
84
+
85
+ Skip by default; never runs headless. When the user asks to "discuss it as a team," "run party mode," or similar, invoke the skill `bmad-party-mode` seeded with the Phase 2 findings so the installed agents react to real evidence — the god class the diff really grew, the verification gap that is actually there, the wins the evidence confirms. Load `references/team-discussion.md` for how to seed it and keep it grounded. If `bmad-party-mode` is unavailable, run the discussion inline over the Phase 2 findings and record the narrowing. The rule: agents speak only to findings with sources.
86
+
87
+ ### Phase 4 — Decide
88
+
89
+ - **Action items** — compile fix-now findings and process lessons into specific, owned action items. Fixes and spec reconciliations are *proposed here*, not auto-applied; the human decides what to execute.
90
+ - **Acceptance verdict** — judge the final state against the epic's declared acceptance criteria (profile it from the diff and stories if none were declared): **accepted**, **accepted-with-open-items**, or **rejected** — one spelling, everywhere a machine reads it. Unfinished stories in `pending_stories` force the machine verdict to **rejected**. A human decision always overrides. An epic that fails its criteria with no human decision is recorded as *not accepted* — never as silently accepted. Load `references/acceptance-verdict.md` for the rubric, the finding-routing dispositions, and the previous-retro follow-through record — the per-item evidence Phase 5's status offer reads.
91
+
92
+ ### Phase 5 — Finalize
93
+
94
+ Finalize the retrospective document and update sprint status. Load `references/retro-document.md` for the document's sections and the exact `sprint_status.py update` invocation that marks the retro key `done`, appends the action items, and validates the write. Where the Phase 4 follow-through has evidence a *previous* epic's action item landed, offer `--set-action-status` and pass only the transitions the user confirms — the evidence justifies proposing a transition, and only the user's confirmation justifies writing it; a headless run records the transitions it would have proposed and does not pass the flag at all. In stories mode, finalize `{spec-folder}/RETROSPECTIVE.md` and stop there: no `sprint_status.py` call, no sprint-status file created, and no edits to `SPEC.md`, `stories.yaml`, or any story artifact. Then, if `{workflow.on_complete}` is non-empty, follow it as the final instruction.
@@ -34,8 +34,8 @@ persistent_facts = [
34
34
  "file:{project-root}/**/project-context.md",
35
35
  ]
36
36
 
37
- # Scalar: executed when the workflow reaches Step 13 (Final Summary and Handoff),
38
- # after the retrospective document is saved and sprint-status is updated. Override wins.
37
+ # Scalar: executed at the end of Phase 5 (Close), after the retrospective
38
+ # document is saved and sprint-status is updated. Override wins.
39
39
  # Leave empty for no custom post-completion behavior.
40
40
 
41
41
  on_complete = ""
@@ -0,0 +1,55 @@
1
+ # Decide: Routing and the Acceptance Verdict
2
+
3
+ Phase 4. Turn the consolidated findings into two outputs: routed action items the human can act on, and an honest verdict on whether the epic met its acceptance criteria. This skill proposes; it does not auto-apply fixes or edit the project spec. The human decides what executes.
4
+
5
+ ## Route each finding
6
+
7
+ Give every finding two independent dispositions:
8
+
9
+ - **What to do about this instance** — *fix now*, *defer*, or *accept as-is*. Fix-now findings become action items. Deferred findings carry enough context to be acted on later without re-investigation. Accepted deviations are recorded so later retros stop re-flagging them.
10
+ - **What would prevent the next one** — the upstream lesson: spec wording, story sizing, a missing convention or gate, or nothing. This is where a recurring finding becomes a process change rather than a one-off fix.
11
+
12
+ Findings from sub-agents or the team discussion are unverified reports, not established facts. Before an action item relies on one, re-check it against the primary source — reopen the file, the commit, the spec. A finding whose source does not hold up is dropped, not routed.
13
+
14
+ ## Action items
15
+
16
+ Compile fix-now findings and process lessons into specific, owned action items. Each names what to change and who owns it. Two kinds are *proposed, not applied* in this version:
17
+
18
+ - **Remediation** — code fixes are written up as action items (or story-shaped work) for the normal dev loop to execute later. The retrospective does not run the dev loop itself.
19
+ - **Spec reconciliation** — where the as-built diverges from the spec, propose the reconciliation as an action item with the evidence attached. The human applies it to the project contract; an uncertain interpretation is never written into the spec automatically.
20
+
21
+ ## Previous-retro follow-through
22
+
23
+ When a prior retro exists, check whether the action items it committed to were completed. Read `action_items` in `{implementation_artifacts}/sprint-status.yaml` and, for every entry belonging to an earlier epic that is not already `done`, record one line in the retrospective document's Previous-retro follow-through section:
24
+
25
+ - **How to address the item** — its `id`, exactly as the file spells it. Legacy entries written before ids existed have none; for those, record the item's `epic` (the integer in the file) plus its exact `action` text, character for character. One or the other is what Phase 5 needs to name the item at all.
26
+ - **Whether it landed** — with the source that shows it: the commit, the file and line, the test. An item you cannot point at is "no evidence found", not "not done" — the reader must be able to tell a checked item from an unchecked one.
27
+ - **The status it argues for** — `done` for a landed item, `in-progress` for one demonstrably underway, or nothing. A proposal, never a write.
28
+
29
+ That record is exactly what Phase 5's `--set-action-status` offer reads: the selector becomes the JSON, the evidence is what the user is asked to confirm, and the proposed status is written only if they confirm it. A run with no prior retro, or one whose `sprint-status.yaml` is unreadable or carries no `action_items`, records that there was nothing to follow through on — and which of those it was, so a missing file is never mistaken for "no outstanding items."
30
+
31
+ ## The verdict
32
+
33
+ Judge the final state against the epic's declared acceptance criteria. If the epic declared none, profile the criteria from the diff and stories and mark the verdict as **profiled** rather than declared. Weigh verification results (the Phase 2 behavior check) and unresolved findings. Render one of:
34
+
35
+ - **Accepted** — criteria demonstrably met in the evidence, no blocking findings open, and **no unfinished stories** for this epic.
36
+ - **Accepted-with-open-items** — criteria met, but named findings remain deferred and tracked — still only when every story of this epic is `done`.
37
+ - **Rejected** — criteria not met, a blocking finding stands unresolved, **or any of this epic's stories is still not `done`**.
38
+
39
+ ### Unfinished stories
40
+
41
+ `pending_stories` is authoritative for this epic's incomplete work, whichever mode produced it: sprint-status story keys in file order from `detect-epic`, or `stories.yaml` ids in list order whose artifact status is not `done`. When that list is non-empty:
42
+
43
+ - The **machine** verdict is **rejected**. Name every unfinished story key in the Acceptance verdict section as the evidence. Do not soften this to accepted-with-open-items: unfinished delivery is not an open finding about a finished epic — the epic itself is incomplete.
44
+ - Record the unfinished keys in Epic summary (interactive) or Assumptions (headless) as the Inputs section already requires.
45
+ - Headless runs have no human at the console: the document's verdict is **rejected** when `pending_stories` was non-empty. Interactive runs may still let a human override (rule 1 below) after seeing the list.
46
+
47
+ If the completeness check did not run (no readable `sprint-status.yaml`), do **not** render a rejected or accepted verdict from the absence of data — say the check was unavailable and weigh only the criteria and findings you have.
48
+
49
+ Three hard rules:
50
+
51
+ 1. A human decision always overrides the machine verdict.
52
+ 2. An epic that fails its criteria with **no** human decision is recorded as **not accepted** — never as silently accepted.
53
+ 3. A non-empty `pending_stories` list makes the machine verdict **rejected**, including in headless mode.
54
+
55
+ The verdict and its evidence carry into the Phase 5 document.
@@ -0,0 +1,17 @@
1
+ # Aggregate Views
2
+
3
+ Phase 2. An epic is many coding sessions, each validated in isolation; the defects that matter are the ones no single session — and no single diff hunk — could see. Nine sessions each added three hundred lines and none ever saw the 3,000-line class they collectively built. These views are properties of the *whole* change, derived across the full diff range from Phase 1.
4
+
5
+ Prefer deterministic derivation: a script that measures the codebase is evidence; a model's impression is not. Where you compute a view inline instead of by script, record the narrowed scope. Every observation that becomes a finding carries a source reference — the file, the symbol, the commits. `references/evidence-gathering.md` is authoritative for what every `git_evidence.py` key means, including the commit-level `is_merge` and `stories` (every story id a subject names, so a commit spanning two counts for both) — read it there before deriving anything from the numbers.
6
+
7
+ ## The catalog
8
+
9
+ - **Architecture delta** — how the dependency structure changed across the epic. Where a language-native dependency tool exists (dependency-cruiser, madge, pydeps, and the like), run it before and after the range and diff the graphs; otherwise derive the module/import graph from the changed files. Look for new cross-cutting dependencies, layering violations, and cycles introduced — structure the code's own conventions would forbid but no single story tripped.
10
+ - **Duplication map** — the same problem solved more than one way across stories. Two sessions independently writing near-identical logic, or a helper reimplemented because the second session did not know the first existed.
11
+ - **God-class / size growth** — files that grew past a healthy size *over the epic*, invisible per-commit because each session added only a little. The `git_evidence.py` pre-pass (Phase 1) reports `added` / `deleted` / `net` per path in `files` — *change volume*, not a file's absolute size or a per-commit growth rate. Those sums cover the range's **non-merge** commits only, and they are always integers: an unmeasurable revision is left out of them rather than nulling them. Rank on `files`, then open the top of the ranking and read each file's real current size and structure before calling anything a god-class — high net churn makes a file a candidate to inspect, not a verdict on its own. Three qualifiers say how far the ranking can be trusted: `binary_revisions` counts that path's revisions whose churn could not be measured, so its true volume is *at least* what the sums report; `merges_measured` short of `merge_count` means some merges were never measured at all, which caps how complete the ranking can be; and `merge_files` mostly restates churn `files` already counted, so summing the two double counts — but it is not redundant, because a merge's first-parent diff also carries whatever the conflict resolution itself added, code that lives in no non-merge commit and therefore appears in `files` nowhere. So read `merge_files` separately, for the paths whose churn shows up only there, rather than discarding it as double counting. Whether a flagged file is genuinely a god-class or legitimately large stays your judgment.
12
+ - **Pattern divergence** — where the epic's code diverges from the conventions the surrounding codebase already established: naming, error handling, test structure, module boundaries. Agents learn conventions by pattern-matching the code, so divergence compounds.
13
+ - **Spec-to-implementation reconciliation** — where the as-built diverges from what the epic spec and PRD/architecture described. Requirements silently dropped, added behavior nobody specified, intent reinterpreted between stories. Each divergence is either a defect (fix), an accepted deviation (record so later runs stop re-flagging it), or a spec that should be reconciled to reality (propose in Phase 4).
14
+
15
+ ## Delegation
16
+
17
+ When sub-agents are available, delegate the derivation: each returns evidence with source refs and checked scope, never a verdict — the parent consolidates and decides. Give each a narrow view and an explicit return format. When sub-agents are unavailable, compute the highest-value views inline (architecture delta and spec reconciliation first) and record which views were narrowed or skipped.
@@ -0,0 +1,30 @@
1
+ # Evidence Gathering
2
+
3
+ Phase 1 of the retrospective. Enumerate what the completed epic produced, so every later analysis works from real artifacts instead of memory. Output is an inventory: what exists, what is missing, and the diff range the rest of the retro will read.
4
+
5
+ ## Inventory checklist
6
+
7
+ Collect what the epic produced and note the source path or range of each:
8
+
9
+ - **Epic spec** — the epic file under `{planning_artifacts}`, including any declared acceptance criteria. If the spec declares how the epic will be judged, that governs Phase 4; if not, note that the verdict will be profiled from the diff.
10
+ - **Story files** — the story specs implemented under this epic (`{implementation_artifacts}`), each carrying its intent and context. These mark the boundaries between coding sessions.
11
+ - **Diff range and commits** — the full set of changes the epic introduced. Establish the range from the first and last story commits (or ask the user for it). The range must *include* the first story commit: `A..B` excludes `A`, so use the parent of the first commit as the left endpoint — `<first-commit>^..<last-commit>` — or the whole first story disappears from the diff, the commit attribution, and the verdict evidence. Then run `uv run --no-cache {skill-root}/scripts/git_evidence.py --repo {project-root} --range <range> --stories <story-ids>` to get, as JSON, the per-story commit attribution and the per-file change volume — added / deleted / net across the range — that Phase 2 reads. Record the range explicitly; Phase 2's aggregate views and the `bmad-review` pass both read it. When the range cannot be established, say so and narrow the scope rather than guessing. Read the output keys precisely: each commit carries `is_merge` and `stories` — *every* id its subject names, so a commit spanning two stories counts for both. `files` sums non-merge commits only. `merge_files` is each measured merge's diff against its first parent, so it *restates* the churn that merge brought in plus whatever the conflict resolution added — never add it into `files`, and never read it as merge-introduced work on its own. `merges_measured` counts the merges on the range head's first-parent spine; `merge_count` counts every merge in the range, so a gap between the two means merges went unmeasured. `binary_revisions` is unmeasured churn, not zero churn.
12
+ - **Sprint status** — `{implementation_artifacts}/sprint-status.yaml`, for which stories are `done` and the current retro-key state.
13
+ - **Previous retrospective** — the prior epic's retro doc, if one exists, so Phase 4 can check whether last epic's action items landed.
14
+ - **Session logs** — conversation or session records for the epic's stories, when available. They are the only record of *why* a session took an unexpected turn — what was tried and abandoned. They are also the evidence most likely to be deleted or expire, so capture references now.
15
+
16
+ ## Stories mode
17
+
18
+ A stories-mode epic is a spec folder. Map it onto the checklist above: `SPEC.md` is the epic spec; `stories.yaml` in list order is the story list, each entry's artifact being the single `stories/<id>-*.md` it names; there is no sprint status; the previous retrospective, when resuming, is `{spec-folder}/RETROSPECTIVE.md`; session logs are unchanged.
19
+
20
+ The diff range differs. Each story records its own baseline in its artifact frontmatter — `baseline_revision` (deprecated) or `baseline_commit` — so there is no single epic-wide range. The range end is the next story's baseline in list order, which is exact because neither skill adds a commit of its own after the work. For the last story, when nothing records the end, derive it from the history — usually `HEAD`, though not always — and mark it inferred rather than recorded. A baseline that is absent or is not a revision leaves that story with no commit or diff evidence — record that too. Group the stories sharing an identical range and run `git_evidence.py` once per distinct range, passing that group's ids as one comma-separated `--stories` value. No `^` is needed here: unlike the sprint-mode range above, the recorded baseline is already the pre-change commit. Ranges may overlap or diverge; count a shared commit or file change once in the aggregate views while keeping each story's range as its provenance.
21
+
22
+ ## Missing evidence
23
+
24
+ Evidence availability varies; never hide a gap. Each later analysis declares what it needs and, when that input is absent, records a narrowed scope rather than guessing. A reader of the final retro must always be able to tell **"checked and clean"** from **"never checked."**
25
+
26
+ - Missing session logs → process-lesson analysis is skipped, and the retro says so.
27
+ - No declared acceptance criteria → the verdict is profiled from the diff and stories, flagged as profiled rather than declared.
28
+ - Sub-agents unavailable → analyses that would delegate run inline over a narrowed scope, and the narrowing is recorded.
29
+
30
+ Carry the inventory forward into Phase 2 as the authoritative list of what is available to read.