bmad-method 5.0.0 → 5.1.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 (329) hide show
  1. package/.github/FUNDING.yaml +15 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +32 -0
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  4. package/.github/workflows/discord.yaml +25 -0
  5. package/.github/workflows/format-check.yaml +42 -0
  6. package/.github/workflows/manual-release.yaml +173 -0
  7. package/.husky/pre-commit +3 -2
  8. package/.vscode/settings.json +67 -74
  9. package/CHANGELOG.md +564 -19
  10. package/CONTRIBUTING.md +168 -5
  11. package/LICENSE +1 -1
  12. package/README.md +146 -218
  13. package/bmad-core/agent-teams/team-all.yaml +14 -0
  14. package/bmad-core/agent-teams/team-fullstack.yaml +18 -0
  15. package/bmad-core/agent-teams/team-ide-minimal.yaml +10 -0
  16. package/bmad-core/agent-teams/team-no-ui.yaml +13 -0
  17. package/bmad-core/agents/analyst.md +81 -0
  18. package/bmad-core/agents/architect.md +83 -0
  19. package/bmad-core/agents/bmad-master.md +107 -0
  20. package/bmad-core/agents/bmad-orchestrator.md +149 -0
  21. package/bmad-core/agents/dev.md +75 -0
  22. package/bmad-core/agents/pm.md +81 -0
  23. package/bmad-core/agents/po.md +76 -0
  24. package/bmad-core/agents/qa.md +88 -0
  25. package/bmad-core/agents/sm.md +62 -0
  26. package/bmad-core/agents/ux-expert.md +66 -0
  27. package/{.bmad-core → bmad-core}/checklists/architect-checklist.md +0 -5
  28. package/{.bmad-core → bmad-core}/checklists/change-checklist.md +2 -2
  29. package/{.bmad-core → bmad-core}/checklists/pm-checklist.md +0 -5
  30. package/{.bmad-core → bmad-core}/checklists/po-master-checklist.md +0 -9
  31. package/{.bmad-core → bmad-core}/checklists/story-dod-checklist.md +0 -7
  32. package/{.bmad-core → bmad-core}/checklists/story-draft-checklist.md +1 -4
  33. package/bmad-core/core-config.yaml +20 -0
  34. package/bmad-core/data/bmad-kb.md +806 -0
  35. package/bmad-core/data/brainstorming-techniques.md +36 -0
  36. package/bmad-core/data/elicitation-methods.md +154 -0
  37. package/bmad-core/data/test-levels-framework.md +146 -0
  38. package/bmad-core/data/test-priorities-matrix.md +172 -0
  39. package/bmad-core/tasks/advanced-elicitation.md +117 -0
  40. package/{.bmad-core → bmad-core}/tasks/correct-course.md +9 -12
  41. package/bmad-core/tasks/create-brownfield-story.md +312 -0
  42. package/{.bmad-core → bmad-core}/tasks/create-deep-research-prompt.md +4 -27
  43. package/bmad-core/tasks/create-next-story.md +112 -0
  44. package/bmad-core/tasks/document-project.md +343 -0
  45. package/bmad-core/tasks/facilitate-brainstorming-session.md +136 -0
  46. package/bmad-core/tasks/generate-ai-frontend-prompt.md +51 -0
  47. package/{.bmad-core → bmad-core}/tasks/index-docs.md +3 -13
  48. package/bmad-core/tasks/kb-mode-interaction.md +75 -0
  49. package/bmad-core/tasks/nfr-assess.md +343 -0
  50. package/bmad-core/tasks/qa-gate.md +159 -0
  51. package/bmad-core/tasks/review-story.md +314 -0
  52. package/bmad-core/tasks/risk-profile.md +353 -0
  53. package/{.bmad-core → bmad-core}/tasks/shard-doc.md +27 -15
  54. package/bmad-core/tasks/test-design.md +174 -0
  55. package/bmad-core/tasks/trace-requirements.md +264 -0
  56. package/bmad-core/tasks/validate-next-story.md +134 -0
  57. package/bmad-core/templates/architecture-tmpl.yaml +650 -0
  58. package/bmad-core/templates/brainstorming-output-tmpl.yaml +156 -0
  59. package/bmad-core/templates/brownfield-architecture-tmpl.yaml +476 -0
  60. package/bmad-core/templates/brownfield-prd-tmpl.yaml +280 -0
  61. package/bmad-core/templates/competitor-analysis-tmpl.yaml +306 -0
  62. package/bmad-core/templates/front-end-architecture-tmpl.yaml +218 -0
  63. package/bmad-core/templates/front-end-spec-tmpl.yaml +349 -0
  64. package/bmad-core/templates/fullstack-architecture-tmpl.yaml +823 -0
  65. package/bmad-core/templates/market-research-tmpl.yaml +252 -0
  66. package/bmad-core/templates/prd-tmpl.yaml +202 -0
  67. package/bmad-core/templates/project-brief-tmpl.yaml +221 -0
  68. package/bmad-core/templates/qa-gate-tmpl.yaml +102 -0
  69. package/bmad-core/templates/story-tmpl.yaml +137 -0
  70. package/bmad-core/workflows/brownfield-fullstack.yaml +297 -0
  71. package/bmad-core/workflows/brownfield-service.yaml +187 -0
  72. package/bmad-core/workflows/brownfield-ui.yaml +197 -0
  73. package/{.bmad-core/workflows/greenfield-fullstack.yml → bmad-core/workflows/greenfield-fullstack.yaml} +140 -77
  74. package/bmad-core/workflows/greenfield-service.yaml +206 -0
  75. package/bmad-core/workflows/greenfield-ui.yaml +235 -0
  76. package/common/tasks/create-doc.md +101 -0
  77. package/{.bmad-core → common}/tasks/execute-checklist.md +2 -13
  78. package/common/utils/bmad-doc-template.md +325 -0
  79. package/common/utils/workflow-management.md +69 -0
  80. package/dist/agents/analyst.txt +2889 -0
  81. package/dist/agents/architect.txt +3552 -0
  82. package/dist/agents/bmad-master.txt +8769 -0
  83. package/dist/agents/bmad-orchestrator.txt +1513 -0
  84. package/dist/agents/dev.txt +414 -0
  85. package/{.bmad-core/web-bundles → dist}/agents/pm.txt +668 -1119
  86. package/{.bmad-core/web-bundles → dist}/agents/po.txt +341 -484
  87. package/dist/agents/qa.txt +1987 -0
  88. package/dist/agents/sm.txt +658 -0
  89. package/dist/agents/ux-expert.txt +694 -0
  90. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +2371 -0
  91. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +1620 -0
  92. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +815 -0
  93. package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +10952 -0
  94. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.txt +4012 -0
  95. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.txt +3698 -0
  96. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.txt +450 -0
  97. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.txt +973 -0
  98. package/dist/expansion-packs/bmad-2d-unity-game-dev/teams/unity-2d-game-team.txt +15376 -0
  99. package/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +2075 -0
  100. package/dist/teams/team-all.txt +12682 -0
  101. package/dist/teams/team-fullstack.txt +10421 -0
  102. package/dist/teams/team-ide-minimal.txt +5103 -0
  103. package/dist/teams/team-no-ui.txt +8980 -0
  104. package/docs/GUIDING-PRINCIPLES.md +91 -0
  105. package/docs/core-architecture.md +219 -0
  106. package/docs/enhanced-ide-development-workflow.md +248 -0
  107. package/docs/expansion-packs.md +280 -0
  108. package/docs/how-to-contribute-with-pull-requests.md +158 -0
  109. package/docs/user-guide.md +504 -0
  110. package/docs/versioning-and-releases.md +8 -16
  111. package/docs/versions.md +4 -5
  112. package/docs/working-in-the-brownfield.md +597 -0
  113. package/eslint.config.mjs +119 -0
  114. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/Complete AI Agent System - Flowchart.svg +102 -0
  115. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.1 Google Cloud Project Setup/1.1.1 - Initial Project Configuration - bash copy.txt +13 -0
  116. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.1 Google Cloud Project Setup/1.1.1 - Initial Project Configuration - bash.txt +13 -0
  117. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.2 Agent Development Kit Installation/1.2.2 - Basic Project Structure - txt.txt +25 -0
  118. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.3 Core Configuration Files/1.3.1 - settings.py +34 -0
  119. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.3 Core Configuration Files/1.3.2 - main.py - Base Application.py +70 -0
  120. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.4 Deployment Configuration/1.4.2 - cloudbuild.yaml +26 -0
  121. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/README.md +109 -0
  122. package/expansion-packs/README.md +2 -112
  123. package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yaml +13 -0
  124. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.md +71 -0
  125. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +78 -0
  126. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +64 -0
  127. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-design-checklist.md +201 -0
  128. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-story-dod-checklist.md +160 -0
  129. package/expansion-packs/bmad-2d-phaser-game-dev/config.yaml +8 -0
  130. package/expansion-packs/bmad-2d-phaser-game-dev/data/bmad-kb.md +250 -0
  131. package/expansion-packs/bmad-2d-phaser-game-dev/data/development-guidelines.md +647 -0
  132. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/advanced-elicitation.md +110 -0
  133. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/create-game-story.md +216 -0
  134. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/game-design-brainstorming.md +290 -0
  135. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.yaml +613 -0
  136. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.yaml +356 -0
  137. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.yaml +343 -0
  138. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.yaml +253 -0
  139. package/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.yaml +484 -0
  140. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yaml +183 -0
  141. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-prototype.yaml +175 -0
  142. package/expansion-packs/bmad-2d-unity-game-dev/agent-teams/unity-2d-game-team.yaml +14 -0
  143. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.md +80 -0
  144. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.md +77 -0
  145. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.md +78 -0
  146. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.md +65 -0
  147. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-architect-checklist.md +391 -0
  148. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-change-checklist.md +203 -0
  149. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-design-checklist.md +201 -0
  150. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-story-dod-checklist.md +124 -0
  151. package/expansion-packs/bmad-2d-unity-game-dev/config.yaml +6 -0
  152. package/expansion-packs/bmad-2d-unity-game-dev/data/bmad-kb.md +769 -0
  153. package/expansion-packs/bmad-2d-unity-game-dev/data/development-guidelines.md +586 -0
  154. package/expansion-packs/bmad-2d-unity-game-dev/tasks/advanced-elicitation.md +110 -0
  155. package/expansion-packs/bmad-2d-unity-game-dev/tasks/correct-course-game.md +141 -0
  156. package/expansion-packs/bmad-2d-unity-game-dev/tasks/create-game-story.md +184 -0
  157. package/expansion-packs/bmad-2d-unity-game-dev/tasks/game-design-brainstorming.md +290 -0
  158. package/expansion-packs/bmad-2d-unity-game-dev/tasks/validate-game-story.md +200 -0
  159. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-architecture-tmpl.yaml +1030 -0
  160. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-brief-tmpl.yaml +356 -0
  161. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-design-doc-tmpl.yaml +705 -0
  162. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-story-tmpl.yaml +256 -0
  163. package/expansion-packs/bmad-2d-unity-game-dev/templates/level-design-doc-tmpl.yaml +484 -0
  164. package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-dev-greenfield.yaml +183 -0
  165. package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-prototype.yaml +175 -0
  166. package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/README.md +9 -9
  167. package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/agents/infra-devops-platform.md +30 -18
  168. package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/checklists/infrastructure-checklist.md +1 -1
  169. package/expansion-packs/bmad-infrastructure-devops/config.yaml +9 -0
  170. package/expansion-packs/bmad-infrastructure-devops/data/bmad-kb.md +305 -0
  171. package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/tasks/review-infrastructure.md +4 -5
  172. package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/tasks/validate-infrastructure.md +4 -5
  173. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-architecture-tmpl.yaml +424 -0
  174. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.yaml +629 -0
  175. package/package.json +74 -42
  176. package/prettier.config.mjs +32 -0
  177. package/release_notes.md +25 -0
  178. package/tools/bmad-npx-wrapper.js +13 -15
  179. package/tools/builders/web-builder.js +544 -15
  180. package/tools/bump-all-versions.js +115 -0
  181. package/tools/bump-expansion-version.js +90 -0
  182. package/tools/cli.js +65 -32
  183. package/tools/flattener/aggregate.js +76 -0
  184. package/tools/flattener/binary.js +80 -0
  185. package/tools/flattener/discovery.js +71 -0
  186. package/tools/flattener/files.js +35 -0
  187. package/tools/flattener/ignoreRules.js +176 -0
  188. package/tools/flattener/main.js +573 -0
  189. package/tools/flattener/projectRoot.js +206 -0
  190. package/tools/flattener/prompts.js +44 -0
  191. package/tools/flattener/stats.helpers.js +395 -0
  192. package/tools/flattener/stats.js +80 -0
  193. package/tools/flattener/test-matrix.js +413 -0
  194. package/tools/flattener/xml.js +88 -0
  195. package/tools/installer/README.md +3 -53
  196. package/tools/installer/bin/bmad.js +475 -90
  197. package/tools/installer/config/ide-agent-config.yaml +58 -0
  198. package/tools/installer/config/install.config.yaml +123 -0
  199. package/tools/installer/lib/config-loader.js +208 -40
  200. package/tools/installer/lib/file-manager.js +258 -55
  201. package/tools/installer/lib/ide-base-setup.js +228 -0
  202. package/tools/installer/lib/ide-setup.js +1265 -253
  203. package/tools/installer/lib/installer.js +1651 -310
  204. package/tools/installer/lib/memory-profiler.js +225 -0
  205. package/tools/installer/lib/module-manager.js +114 -0
  206. package/tools/installer/lib/resource-locator.js +308 -0
  207. package/tools/installer/package.json +25 -24
  208. package/tools/lib/dependency-resolver.js +44 -48
  209. package/tools/lib/yaml-utils.js +29 -0
  210. package/tools/md-assets/web-agent-startup-instructions.md +39 -0
  211. package/tools/preview-release-notes.js +66 -0
  212. package/tools/shared/bannerArt.js +105 -0
  213. package/tools/sync-installer-version.js +7 -9
  214. package/tools/update-expansion-version.js +53 -0
  215. package/tools/upgraders/v3-to-v4-upgrader.js +221 -320
  216. package/tools/version-bump.js +42 -27
  217. package/tools/yaml-format.js +57 -44
  218. package/.bmad-core/agent-teams/team-all.yml +0 -16
  219. package/.bmad-core/agent-teams/team-fullstack.yml +0 -26
  220. package/.bmad-core/agent-teams/team-no-ui.yml +0 -15
  221. package/.bmad-core/agents/analyst.md +0 -59
  222. package/.bmad-core/agents/architect.md +0 -66
  223. package/.bmad-core/agents/bmad-master.md +0 -104
  224. package/.bmad-core/agents/bmad-orchestrator.md +0 -81
  225. package/.bmad-core/agents/dev.md +0 -70
  226. package/.bmad-core/agents/pm.md +0 -59
  227. package/.bmad-core/agents/po.md +0 -60
  228. package/.bmad-core/agents/qa.md +0 -52
  229. package/.bmad-core/agents/sm.md +0 -55
  230. package/.bmad-core/agents/ux-expert.md +0 -66
  231. package/.bmad-core/data/bmad-kb.md +0 -47
  232. package/.bmad-core/schemas/agent-team-schema.yml +0 -153
  233. package/.bmad-core/tasks/advanced-elicitation.md +0 -92
  234. package/.bmad-core/tasks/brainstorming-techniques.md +0 -238
  235. package/.bmad-core/tasks/core-dump.md +0 -74
  236. package/.bmad-core/tasks/create-agent.md +0 -202
  237. package/.bmad-core/tasks/create-doc.md +0 -74
  238. package/.bmad-core/tasks/create-expansion-pack.md +0 -425
  239. package/.bmad-core/tasks/create-next-story.md +0 -206
  240. package/.bmad-core/tasks/create-team.md +0 -229
  241. package/.bmad-core/tasks/doc-migration-task.md +0 -143
  242. package/.bmad-core/tasks/generate-ai-frontend-prompt.md +0 -58
  243. package/.bmad-core/templates/agent-tmpl.md +0 -58
  244. package/.bmad-core/templates/architecture-tmpl.md +0 -771
  245. package/.bmad-core/templates/brownfield-architecture-tmpl.md +0 -542
  246. package/.bmad-core/templates/brownfield-prd-tmpl.md +0 -240
  247. package/.bmad-core/templates/competitor-analysis-tmpl.md +0 -289
  248. package/.bmad-core/templates/expansion-pack-plan-tmpl.md +0 -91
  249. package/.bmad-core/templates/front-end-architecture-tmpl.md +0 -173
  250. package/.bmad-core/templates/front-end-spec-tmpl.md +0 -411
  251. package/.bmad-core/templates/fullstack-architecture-tmpl.md +0 -1016
  252. package/.bmad-core/templates/market-research-tmpl.md +0 -261
  253. package/.bmad-core/templates/prd-tmpl.md +0 -200
  254. package/.bmad-core/templates/project-brief-tmpl.md +0 -228
  255. package/.bmad-core/templates/simple-project-prd-tmpl.md +0 -461
  256. package/.bmad-core/templates/story-tmpl.md +0 -61
  257. package/.bmad-core/templates/web-agent-startup-instructions-template.md +0 -39
  258. package/.bmad-core/utils/agent-switcher.ide.md +0 -112
  259. package/.bmad-core/utils/template-format.md +0 -26
  260. package/.bmad-core/utils/workflow-management.md +0 -224
  261. package/.bmad-core/web-bundles/agents/analyst.txt +0 -1684
  262. package/.bmad-core/web-bundles/agents/architect.txt +0 -3584
  263. package/.bmad-core/web-bundles/agents/bmad-master.txt +0 -9491
  264. package/.bmad-core/web-bundles/agents/bmad-orchestrator.txt +0 -1466
  265. package/.bmad-core/web-bundles/agents/dev.txt +0 -316
  266. package/.bmad-core/web-bundles/agents/qa.txt +0 -129
  267. package/.bmad-core/web-bundles/agents/sm.txt +0 -658
  268. package/.bmad-core/web-bundles/agents/ux-expert.txt +0 -1099
  269. package/.bmad-core/web-bundles/teams/team-all.txt +0 -10757
  270. package/.bmad-core/web-bundles/teams/team-fullstack.txt +0 -10109
  271. package/.bmad-core/web-bundles/teams/team-no-ui.txt +0 -8950
  272. package/.bmad-core/workflows/brownfield-fullstack.yml +0 -116
  273. package/.bmad-core/workflows/brownfield-service.yml +0 -117
  274. package/.bmad-core/workflows/brownfield-ui.yml +0 -127
  275. package/.bmad-core/workflows/greenfield-service.yml +0 -143
  276. package/.bmad-core/workflows/greenfield-ui.yml +0 -172
  277. package/.claude/commands/analyst.md +0 -63
  278. package/.claude/commands/architect.md +0 -70
  279. package/.claude/commands/bmad-master.md +0 -108
  280. package/.claude/commands/bmad-orchestrator.md +0 -85
  281. package/.claude/commands/dev.md +0 -74
  282. package/.claude/commands/pm.md +0 -63
  283. package/.claude/commands/po.md +0 -64
  284. package/.claude/commands/qa.md +0 -56
  285. package/.claude/commands/sm.md +0 -59
  286. package/.claude/commands/ux-expert.md +0 -70
  287. package/.cursor/rules/analyst.mdc +0 -77
  288. package/.cursor/rules/architect.mdc +0 -84
  289. package/.cursor/rules/bmad-master.mdc +0 -122
  290. package/.cursor/rules/bmad-orchestrator.mdc +0 -99
  291. package/.cursor/rules/dev.mdc +0 -88
  292. package/.cursor/rules/pm.mdc +0 -77
  293. package/.cursor/rules/po.mdc +0 -78
  294. package/.cursor/rules/qa.mdc +0 -70
  295. package/.cursor/rules/sm.mdc +0 -73
  296. package/.cursor/rules/ux-expert.mdc +0 -84
  297. package/.github/workflows/release.yml +0 -59
  298. package/.releaserc.json +0 -18
  299. package/.roo/.roomodes +0 -95
  300. package/.roo/README.md +0 -38
  301. package/.vscode/extensions.json +0 -6
  302. package/.windsurf/rules/analyst.md +0 -71
  303. package/.windsurf/rules/architect.md +0 -78
  304. package/.windsurf/rules/bmad-master.md +0 -116
  305. package/.windsurf/rules/bmad-orchestrator.md +0 -93
  306. package/.windsurf/rules/dev.md +0 -82
  307. package/.windsurf/rules/pm.md +0 -71
  308. package/.windsurf/rules/po.md +0 -72
  309. package/.windsurf/rules/qa.md +0 -64
  310. package/.windsurf/rules/sm.md +0 -67
  311. package/.windsurf/rules/ux-expert.md +0 -78
  312. package/docs/bmad-workflow-guide.md +0 -161
  313. package/docs/claude-code-guide.md +0 -119
  314. package/docs/cursor-guide.md +0 -127
  315. package/docs/roo-code-guide.md +0 -140
  316. package/docs/sample-output/simple-fullstack-greenfield/prd.md +0 -42
  317. package/docs/windsurf-guide.md +0 -127
  318. package/expansion-packs/infrastructure-devops/manifest.yml +0 -38
  319. package/expansion-packs/infrastructure-devops/templates/infrastructure-architecture-tmpl.md +0 -415
  320. package/expansion-packs/infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.md +0 -0
  321. package/tools/installer/config/install.config.yml +0 -139
  322. package/tools/installer/package-lock.json +0 -906
  323. package/tools/installer/templates/claude-commands.md +0 -7
  324. package/tools/installer/templates/cursor-rules.md +0 -22
  325. package/tools/installer/templates/windsurf-rules.md +0 -22
  326. package/tools/semantic-release-sync-installer.js +0 -31
  327. /package/{.bmad-core → bmad-core}/data/technical-preferences.md +0 -0
  328. /package/{.bmad-core → bmad-core}/tasks/brownfield-create-epic.md +0 -0
  329. /package/{.bmad-core → bmad-core}/tasks/brownfield-create-story.md +0 -0
@@ -0,0 +1,647 @@
1
+ # Game Development Guidelines
2
+
3
+ ## Overview
4
+
5
+ This document establishes coding standards, architectural patterns, and development practices for 2D game development using Phaser 3 and TypeScript. These guidelines ensure consistency, performance, and maintainability across all game development stories.
6
+
7
+ ## TypeScript Standards
8
+
9
+ ### Strict Mode Configuration
10
+
11
+ **Required tsconfig.json settings:**
12
+
13
+ ```json
14
+ {
15
+ "compilerOptions": {
16
+ "strict": true,
17
+ "noImplicitAny": true,
18
+ "strictNullChecks": true,
19
+ "strictFunctionTypes": true,
20
+ "noImplicitReturns": true,
21
+ "noUnusedLocals": true,
22
+ "noUnusedParameters": true,
23
+ "exactOptionalPropertyTypes": true
24
+ }
25
+ }
26
+ ```
27
+
28
+ ### Type Definitions
29
+
30
+ **Game Object Interfaces:**
31
+
32
+ ```typescript
33
+ // Core game entity interface
34
+ interface GameEntity {
35
+ readonly id: string;
36
+ position: Phaser.Math.Vector2;
37
+ active: boolean;
38
+ destroy(): void;
39
+ }
40
+
41
+ // Player controller interface
42
+ interface PlayerController {
43
+ readonly inputEnabled: boolean;
44
+ handleInput(input: InputState): void;
45
+ update(delta: number): void;
46
+ }
47
+
48
+ // Game system interface
49
+ interface GameSystem {
50
+ readonly name: string;
51
+ initialize(): void;
52
+ update(delta: number): void;
53
+ shutdown(): void;
54
+ }
55
+ ```
56
+
57
+ **Scene Data Interfaces:**
58
+
59
+ ```typescript
60
+ // Scene transition data
61
+ interface SceneData {
62
+ [key: string]: any;
63
+ }
64
+
65
+ // Game state interface
66
+ interface GameState {
67
+ currentLevel: number;
68
+ score: number;
69
+ lives: number;
70
+ settings: GameSettings;
71
+ }
72
+
73
+ interface GameSettings {
74
+ musicVolume: number;
75
+ sfxVolume: number;
76
+ difficulty: 'easy' | 'normal' | 'hard';
77
+ controls: ControlScheme;
78
+ }
79
+ ```
80
+
81
+ ### Naming Conventions
82
+
83
+ **Classes and Interfaces:**
84
+
85
+ - PascalCase for classes: `PlayerSprite`, `GameManager`, `AudioSystem`
86
+ - PascalCase with 'I' prefix for interfaces: `IGameEntity`, `IPlayerController`
87
+ - Descriptive names that indicate purpose: `CollisionManager` not `CM`
88
+
89
+ **Methods and Variables:**
90
+
91
+ - camelCase for methods and variables: `updatePosition()`, `playerSpeed`
92
+ - Descriptive names: `calculateDamage()` not `calcDmg()`
93
+ - Boolean variables with is/has/can prefix: `isActive`, `hasCollision`, `canMove`
94
+
95
+ **Constants:**
96
+
97
+ - UPPER_SNAKE_CASE for constants: `MAX_PLAYER_SPEED`, `DEFAULT_VOLUME`
98
+ - Group related constants in enums or const objects
99
+
100
+ **Files and Directories:**
101
+
102
+ - kebab-case for file names: `player-controller.ts`, `audio-manager.ts`
103
+ - PascalCase for scene files: `MenuScene.ts`, `GameScene.ts`
104
+
105
+ ## Phaser 3 Architecture Patterns
106
+
107
+ ### Scene Organization
108
+
109
+ **Scene Lifecycle Management:**
110
+
111
+ ```typescript
112
+ class GameScene extends Phaser.Scene {
113
+ private gameManager!: GameManager;
114
+ private inputManager!: InputManager;
115
+
116
+ constructor() {
117
+ super({ key: 'GameScene' });
118
+ }
119
+
120
+ preload(): void {
121
+ // Load only scene-specific assets
122
+ this.load.image('player', 'assets/player.png');
123
+ }
124
+
125
+ create(data: SceneData): void {
126
+ // Initialize game systems
127
+ this.gameManager = new GameManager(this);
128
+ this.inputManager = new InputManager(this);
129
+
130
+ // Set up scene-specific logic
131
+ this.setupGameObjects();
132
+ this.setupEventListeners();
133
+ }
134
+
135
+ update(time: number, delta: number): void {
136
+ // Update all game systems
137
+ this.gameManager.update(delta);
138
+ this.inputManager.update(delta);
139
+ }
140
+
141
+ shutdown(): void {
142
+ // Clean up resources
143
+ this.gameManager.destroy();
144
+ this.inputManager.destroy();
145
+
146
+ // Remove event listeners
147
+ this.events.off('*');
148
+ }
149
+ }
150
+ ```
151
+
152
+ **Scene Transitions:**
153
+
154
+ ```typescript
155
+ // Proper scene transitions with data
156
+ this.scene.start('NextScene', {
157
+ playerScore: this.playerScore,
158
+ currentLevel: this.currentLevel + 1,
159
+ });
160
+
161
+ // Scene overlays for UI
162
+ this.scene.launch('PauseMenuScene');
163
+ this.scene.pause();
164
+ ```
165
+
166
+ ### Game Object Patterns
167
+
168
+ **Component-Based Architecture:**
169
+
170
+ ```typescript
171
+ // Base game entity
172
+ abstract class GameEntity extends Phaser.GameObjects.Sprite {
173
+ protected components: Map<string, GameComponent> = new Map();
174
+
175
+ constructor(scene: Phaser.Scene, x: number, y: number, texture: string) {
176
+ super(scene, x, y, texture);
177
+ scene.add.existing(this);
178
+ }
179
+
180
+ addComponent<T extends GameComponent>(component: T): T {
181
+ this.components.set(component.name, component);
182
+ return component;
183
+ }
184
+
185
+ getComponent<T extends GameComponent>(name: string): T | undefined {
186
+ return this.components.get(name) as T;
187
+ }
188
+
189
+ update(delta: number): void {
190
+ this.components.forEach((component) => component.update(delta));
191
+ }
192
+
193
+ destroy(): void {
194
+ this.components.forEach((component) => component.destroy());
195
+ this.components.clear();
196
+ super.destroy();
197
+ }
198
+ }
199
+
200
+ // Example player implementation
201
+ class Player extends GameEntity {
202
+ private movement!: MovementComponent;
203
+ private health!: HealthComponent;
204
+
205
+ constructor(scene: Phaser.Scene, x: number, y: number) {
206
+ super(scene, x, y, 'player');
207
+
208
+ this.movement = this.addComponent(new MovementComponent(this));
209
+ this.health = this.addComponent(new HealthComponent(this, 100));
210
+ }
211
+ }
212
+ ```
213
+
214
+ ### System Management
215
+
216
+ **Singleton Managers:**
217
+
218
+ ```typescript
219
+ class GameManager {
220
+ private static instance: GameManager;
221
+ private scene: Phaser.Scene;
222
+ private gameState: GameState;
223
+
224
+ constructor(scene: Phaser.Scene) {
225
+ if (GameManager.instance) {
226
+ throw new Error('GameManager already exists!');
227
+ }
228
+
229
+ this.scene = scene;
230
+ this.gameState = this.loadGameState();
231
+ GameManager.instance = this;
232
+ }
233
+
234
+ static getInstance(): GameManager {
235
+ if (!GameManager.instance) {
236
+ throw new Error('GameManager not initialized!');
237
+ }
238
+ return GameManager.instance;
239
+ }
240
+
241
+ update(delta: number): void {
242
+ // Update game logic
243
+ }
244
+
245
+ destroy(): void {
246
+ GameManager.instance = null!;
247
+ }
248
+ }
249
+ ```
250
+
251
+ ## Performance Optimization
252
+
253
+ ### Object Pooling
254
+
255
+ **Required for High-Frequency Objects:**
256
+
257
+ ```typescript
258
+ class BulletPool {
259
+ private pool: Bullet[] = [];
260
+ private scene: Phaser.Scene;
261
+
262
+ constructor(scene: Phaser.Scene, initialSize: number = 50) {
263
+ this.scene = scene;
264
+
265
+ // Pre-create bullets
266
+ for (let i = 0; i < initialSize; i++) {
267
+ const bullet = new Bullet(scene, 0, 0);
268
+ bullet.setActive(false);
269
+ bullet.setVisible(false);
270
+ this.pool.push(bullet);
271
+ }
272
+ }
273
+
274
+ getBullet(): Bullet | null {
275
+ const bullet = this.pool.find((b) => !b.active);
276
+ if (bullet) {
277
+ bullet.setActive(true);
278
+ bullet.setVisible(true);
279
+ return bullet;
280
+ }
281
+
282
+ // Pool exhausted - create new bullet
283
+ console.warn('Bullet pool exhausted, creating new bullet');
284
+ return new Bullet(this.scene, 0, 0);
285
+ }
286
+
287
+ releaseBullet(bullet: Bullet): void {
288
+ bullet.setActive(false);
289
+ bullet.setVisible(false);
290
+ bullet.setPosition(0, 0);
291
+ }
292
+ }
293
+ ```
294
+
295
+ ### Frame Rate Optimization
296
+
297
+ **Performance Monitoring:**
298
+
299
+ ```typescript
300
+ class PerformanceMonitor {
301
+ private frameCount: number = 0;
302
+ private lastTime: number = 0;
303
+ private frameRate: number = 60;
304
+
305
+ update(time: number): void {
306
+ this.frameCount++;
307
+
308
+ if (time - this.lastTime >= 1000) {
309
+ this.frameRate = this.frameCount;
310
+ this.frameCount = 0;
311
+ this.lastTime = time;
312
+
313
+ if (this.frameRate < 55) {
314
+ console.warn(`Low frame rate detected: ${this.frameRate} FPS`);
315
+ this.optimizePerformance();
316
+ }
317
+ }
318
+ }
319
+
320
+ private optimizePerformance(): void {
321
+ // Reduce particle counts, disable effects, etc.
322
+ }
323
+ }
324
+ ```
325
+
326
+ **Update Loop Optimization:**
327
+
328
+ ```typescript
329
+ // Avoid expensive operations in update loops
330
+ class GameScene extends Phaser.Scene {
331
+ private updateTimer: number = 0;
332
+ private readonly UPDATE_INTERVAL = 100; // ms
333
+
334
+ update(time: number, delta: number): void {
335
+ // High-frequency updates (every frame)
336
+ this.updatePlayer(delta);
337
+ this.updatePhysics(delta);
338
+
339
+ // Low-frequency updates (10 times per second)
340
+ this.updateTimer += delta;
341
+ if (this.updateTimer >= this.UPDATE_INTERVAL) {
342
+ this.updateUI();
343
+ this.updateAI();
344
+ this.updateTimer = 0;
345
+ }
346
+ }
347
+ }
348
+ ```
349
+
350
+ ## Input Handling
351
+
352
+ ### Cross-Platform Input
353
+
354
+ **Input Abstraction:**
355
+
356
+ ```typescript
357
+ interface InputState {
358
+ moveLeft: boolean;
359
+ moveRight: boolean;
360
+ jump: boolean;
361
+ action: boolean;
362
+ pause: boolean;
363
+ }
364
+
365
+ class InputManager {
366
+ private inputState: InputState = {
367
+ moveLeft: false,
368
+ moveRight: false,
369
+ jump: false,
370
+ action: false,
371
+ pause: false,
372
+ };
373
+
374
+ private keys!: { [key: string]: Phaser.Input.Keyboard.Key };
375
+ private pointer!: Phaser.Input.Pointer;
376
+
377
+ constructor(private scene: Phaser.Scene) {
378
+ this.setupKeyboard();
379
+ this.setupTouch();
380
+ }
381
+
382
+ private setupKeyboard(): void {
383
+ this.keys = this.scene.input.keyboard.addKeys('W,A,S,D,SPACE,ESC,UP,DOWN,LEFT,RIGHT');
384
+ }
385
+
386
+ private setupTouch(): void {
387
+ this.scene.input.on('pointerdown', this.handlePointerDown, this);
388
+ this.scene.input.on('pointerup', this.handlePointerUp, this);
389
+ }
390
+
391
+ update(): void {
392
+ // Update input state from multiple sources
393
+ this.inputState.moveLeft = this.keys.A.isDown || this.keys.LEFT.isDown;
394
+ this.inputState.moveRight = this.keys.D.isDown || this.keys.RIGHT.isDown;
395
+ this.inputState.jump = Phaser.Input.Keyboard.JustDown(this.keys.SPACE);
396
+ // ... handle touch input
397
+ }
398
+
399
+ getInputState(): InputState {
400
+ return { ...this.inputState };
401
+ }
402
+ }
403
+ ```
404
+
405
+ ## Error Handling
406
+
407
+ ### Graceful Degradation
408
+
409
+ **Asset Loading Error Handling:**
410
+
411
+ ```typescript
412
+ class AssetManager {
413
+ loadAssets(): Promise<void> {
414
+ return new Promise((resolve, reject) => {
415
+ this.scene.load.on('filecomplete', this.handleFileComplete, this);
416
+ this.scene.load.on('loaderror', this.handleLoadError, this);
417
+ this.scene.load.on('complete', () => resolve());
418
+
419
+ this.scene.load.start();
420
+ });
421
+ }
422
+
423
+ private handleLoadError(file: Phaser.Loader.File): void {
424
+ console.error(`Failed to load asset: ${file.key}`);
425
+
426
+ // Use fallback assets
427
+ this.loadFallbackAsset(file.key);
428
+ }
429
+
430
+ private loadFallbackAsset(key: string): void {
431
+ // Load placeholder or default assets
432
+ switch (key) {
433
+ case 'player':
434
+ this.scene.load.image('player', 'assets/defaults/default-player.png');
435
+ break;
436
+ default:
437
+ console.warn(`No fallback for asset: ${key}`);
438
+ }
439
+ }
440
+ }
441
+ ```
442
+
443
+ ### Runtime Error Recovery
444
+
445
+ **System Error Handling:**
446
+
447
+ ```typescript
448
+ class GameSystem {
449
+ protected handleError(error: Error, context: string): void {
450
+ console.error(`Error in ${context}:`, error);
451
+
452
+ // Report to analytics/logging service
453
+ this.reportError(error, context);
454
+
455
+ // Attempt recovery
456
+ this.attemptRecovery(context);
457
+ }
458
+
459
+ private attemptRecovery(context: string): void {
460
+ switch (context) {
461
+ case 'update':
462
+ // Reset system state
463
+ this.reset();
464
+ break;
465
+ case 'render':
466
+ // Disable visual effects
467
+ this.disableEffects();
468
+ break;
469
+ default:
470
+ // Generic recovery
471
+ this.safeShutdown();
472
+ }
473
+ }
474
+ }
475
+ ```
476
+
477
+ ## Testing Standards
478
+
479
+ ### Unit Testing
480
+
481
+ **Game Logic Testing:**
482
+
483
+ ```typescript
484
+ // Example test for game mechanics
485
+ describe('HealthComponent', () => {
486
+ let healthComponent: HealthComponent;
487
+
488
+ beforeEach(() => {
489
+ const mockEntity = {} as GameEntity;
490
+ healthComponent = new HealthComponent(mockEntity, 100);
491
+ });
492
+
493
+ test('should initialize with correct health', () => {
494
+ expect(healthComponent.currentHealth).toBe(100);
495
+ expect(healthComponent.maxHealth).toBe(100);
496
+ });
497
+
498
+ test('should handle damage correctly', () => {
499
+ healthComponent.takeDamage(25);
500
+ expect(healthComponent.currentHealth).toBe(75);
501
+ expect(healthComponent.isAlive()).toBe(true);
502
+ });
503
+
504
+ test('should handle death correctly', () => {
505
+ healthComponent.takeDamage(150);
506
+ expect(healthComponent.currentHealth).toBe(0);
507
+ expect(healthComponent.isAlive()).toBe(false);
508
+ });
509
+ });
510
+ ```
511
+
512
+ ### Integration Testing
513
+
514
+ **Scene Testing:**
515
+
516
+ ```typescript
517
+ describe('GameScene Integration', () => {
518
+ let scene: GameScene;
519
+ let mockGame: Phaser.Game;
520
+
521
+ beforeEach(() => {
522
+ // Mock Phaser game instance
523
+ mockGame = createMockGame();
524
+ scene = new GameScene();
525
+ });
526
+
527
+ test('should initialize all systems', () => {
528
+ scene.create({});
529
+
530
+ expect(scene.gameManager).toBeDefined();
531
+ expect(scene.inputManager).toBeDefined();
532
+ });
533
+ });
534
+ ```
535
+
536
+ ## File Organization
537
+
538
+ ### Project Structure
539
+
540
+ ```
541
+ src/
542
+ ├── scenes/
543
+ │ ├── BootScene.ts # Initial loading and setup
544
+ │ ├── PreloadScene.ts # Asset loading with progress
545
+ │ ├── MenuScene.ts # Main menu and navigation
546
+ │ ├── GameScene.ts # Core gameplay
547
+ │ └── UIScene.ts # Overlay UI elements
548
+ ├── gameObjects/
549
+ │ ├── entities/
550
+ │ │ ├── Player.ts # Player game object
551
+ │ │ ├── Enemy.ts # Enemy base class
552
+ │ │ └── Collectible.ts # Collectible items
553
+ │ ├── components/
554
+ │ │ ├── MovementComponent.ts
555
+ │ │ ├── HealthComponent.ts
556
+ │ │ └── CollisionComponent.ts
557
+ │ └── ui/
558
+ │ ├── Button.ts # Interactive buttons
559
+ │ ├── HealthBar.ts # Health display
560
+ │ └── ScoreDisplay.ts # Score UI
561
+ ├── systems/
562
+ │ ├── GameManager.ts # Core game state management
563
+ │ ├── InputManager.ts # Cross-platform input handling
564
+ │ ├── AudioManager.ts # Sound and music system
565
+ │ ├── SaveManager.ts # Save/load functionality
566
+ │ └── PerformanceMonitor.ts # Performance tracking
567
+ ├── utils/
568
+ │ ├── ObjectPool.ts # Generic object pooling
569
+ │ ├── MathUtils.ts # Game math helpers
570
+ │ ├── AssetLoader.ts # Asset management utilities
571
+ │ └── EventBus.ts # Global event system
572
+ ├── types/
573
+ │ ├── GameTypes.ts # Core game type definitions
574
+ │ ├── UITypes.ts # UI-related types
575
+ │ └── SystemTypes.ts # System interface definitions
576
+ ├── config/
577
+ │ ├── GameConfig.ts # Phaser game configuration
578
+ │ ├── GameBalance.ts # Game balance parameters
579
+ │ └── AssetConfig.ts # Asset loading configuration
580
+ └── main.ts # Application entry point
581
+ ```
582
+
583
+ ## Development Workflow
584
+
585
+ ### Story Implementation Process
586
+
587
+ 1. **Read Story Requirements:**
588
+ - Understand acceptance criteria
589
+ - Identify technical requirements
590
+ - Review performance constraints
591
+
592
+ 2. **Plan Implementation:**
593
+ - Identify files to create/modify
594
+ - Consider component architecture
595
+ - Plan testing approach
596
+
597
+ 3. **Implement Feature:**
598
+ - Follow TypeScript strict mode
599
+ - Use established patterns
600
+ - Maintain 60 FPS performance
601
+
602
+ 4. **Test Implementation:**
603
+ - Write unit tests for game logic
604
+ - Test cross-platform functionality
605
+ - Validate performance targets
606
+
607
+ 5. **Update Documentation:**
608
+ - Mark story checkboxes complete
609
+ - Document any deviations
610
+ - Update architecture if needed
611
+
612
+ ### Code Review Checklist
613
+
614
+ **Before Committing:**
615
+
616
+ - [ ] TypeScript compiles without errors
617
+ - [ ] All tests pass
618
+ - [ ] Performance targets met (60 FPS)
619
+ - [ ] No console errors or warnings
620
+ - [ ] Cross-platform compatibility verified
621
+ - [ ] Memory usage within bounds
622
+ - [ ] Code follows naming conventions
623
+ - [ ] Error handling implemented
624
+ - [ ] Documentation updated
625
+
626
+ ## Performance Targets
627
+
628
+ ### Frame Rate Requirements
629
+
630
+ - **Desktop**: Maintain 60 FPS at 1080p
631
+ - **Mobile**: Maintain 60 FPS on mid-range devices, minimum 30 FPS on low-end
632
+ - **Optimization**: Implement dynamic quality scaling when performance drops
633
+
634
+ ### Memory Management
635
+
636
+ - **Total Memory**: Under 100MB for full game
637
+ - **Per Scene**: Under 50MB per gameplay scene
638
+ - **Asset Loading**: Progressive loading to stay under limits
639
+ - **Garbage Collection**: Minimize object creation in update loops
640
+
641
+ ### Loading Performance
642
+
643
+ - **Initial Load**: Under 5 seconds for game start
644
+ - **Scene Transitions**: Under 2 seconds between scenes
645
+ - **Asset Streaming**: Background loading for upcoming content
646
+
647
+ These guidelines ensure consistent, high-quality game development that meets performance targets and maintains code quality across all implementation stories.