bmad-method 6.0.0-alpha.16 → 6.0.0-alpha.18
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.
- package/.coderabbit.yaml +7 -3
- package/.github/scripts/discord-helpers.sh +21 -2
- package/.github/workflows/discord.yaml +31 -7
- package/.github/workflows/manual-release.yaml +12 -42
- package/.markdownlint-cli2.yaml +2 -2
- package/.prettierignore +2 -2
- package/.vscode/settings.json +1 -1
- package/CHANGELOG.md +193 -2
- package/LICENSE +1 -1
- package/README.md +29 -2
- package/docs/agent-customization-guide.md +10 -10
- package/docs/custom-content-installation.md +100 -196
- package/docs/custom-content.md +122 -0
- package/docs/ide-info/crush.md +1 -1
- package/docs/ide-info/cursor.md +7 -7
- package/docs/ide-info/iflow.md +3 -3
- package/docs/ide-info/opencode.md +1 -1
- package/docs/ide-info/rovo-dev.md +1 -1
- package/docs/index.md +2 -2
- package/docs/installers-bundlers/ide-injections.md +2 -2
- package/docs/installers-bundlers/installers-modules-platforms-reference.md +13 -13
- package/docs/sample-custom-modules/README.md +11 -0
- package/docs/sample-custom-modules/sample-unitary-module/README.md +8 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/commit-poet/commit-poet.agent.yaml +129 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/instructions.md +70 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +111 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +70 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +114 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +134 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +161 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +103 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/memories.md +17 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith.agent.yaml +109 -0
- package/docs/sample-custom-modules/sample-unitary-module/module.yaml +8 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-01-init.md +168 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-02-q1.md +155 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-03-q2.md +89 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-04-q3.md +36 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-05-q4.md +36 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-06-q5.md +36 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-07-q6.md +36 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-08-q7.md +36 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-09-q8.md +36 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-10-q9.md +36 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-11-q10.md +36 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-12-results.md +150 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/templates/csv-headers.template +1 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/workflow.md +54 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/wassup/workflow.md +26 -0
- package/docs/sample-custom-modules/sample-wellness-module/README.md +6 -0
- package/docs/sample-custom-modules/sample-wellness-module/agents/meditation-guide.agent.yaml +136 -0
- package/docs/sample-custom-modules/sample-wellness-module/agents/wellness-companion/foo.md +3 -0
- package/docs/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion-sidecar/addition1.md +1 -0
- package/docs/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion-sidecar/insights.md +13 -0
- package/docs/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion-sidecar/instructions.md +30 -0
- package/docs/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion-sidecar/memories.md +13 -0
- package/docs/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion-sidecar/patterns.md +17 -0
- package/docs/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion.agent.yaml +120 -0
- package/docs/sample-custom-modules/sample-wellness-module/module.yaml +17 -0
- package/docs/sample-custom-modules/sample-wellness-module/workflows/daily-checkin/README.md +32 -0
- package/docs/sample-custom-modules/sample-wellness-module/workflows/daily-checkin/workflow.md +45 -0
- package/docs/sample-custom-modules/sample-wellness-module/workflows/guided-meditation/README.md +31 -0
- package/docs/sample-custom-modules/sample-wellness-module/workflows/guided-meditation/workflow.md +45 -0
- package/docs/sample-custom-modules/sample-wellness-module/workflows/wellness-journal/README.md +31 -0
- package/docs/sample-custom-modules/sample-wellness-module/workflows/wellness-journal/workflow.md +45 -0
- package/docs/v4-to-v6-upgrade.md +27 -27
- package/docs/web-bundles-gemini-gpt-guide.md +6 -458
- package/eslint.config.mjs +2 -2
- package/package.json +1 -1
- package/src/core/agents/bmad-master.agent.yaml +6 -11
- package/src/core/module.yaml +11 -18
- package/src/core/resources/excalidraw/README.md +6 -6
- package/src/core/tasks/advanced-elicitation.xml +3 -3
- package/src/core/tasks/index-docs.xml +1 -1
- package/src/core/tasks/validate-workflow.xml +1 -1
- package/src/core/tasks/workflow.xml +4 -4
- package/src/core/tools/shard-doc.xml +12 -12
- package/src/core/workflows/brainstorming/workflow.md +3 -3
- package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +2 -2
- package/src/core/workflows/party-mode/workflow.md +4 -4
- package/src/modules/bmb/agents/bmad-builder.agent.yaml +15 -15
- package/src/modules/bmb/{README.md → docs/README.md} +15 -27
- package/src/modules/bmb/docs/agents/agent-compilation.md +3 -3
- package/src/modules/bmb/docs/agents/agent-menu-patterns.md +23 -24
- package/src/modules/bmb/docs/agents/expert-agent-architecture.md +20 -21
- package/src/modules/bmb/docs/agents/simple-agent-architecture.md +17 -52
- package/src/modules/bmb/docs/agents/understanding-agent-types.md +6 -6
- package/src/modules/bmb/docs/workflows/architecture.md +1 -1
- package/src/modules/bmb/docs/workflows/common-workflow-tools.csv +3 -3
- package/src/modules/bmb/docs/workflows/templates/step-01-init-continuable-template.md +1 -1
- package/src/modules/bmb/docs/workflows/templates/step-1b-template.md +1 -1
- package/src/modules/bmb/docs/workflows/templates/step-file.md +3 -3
- package/src/modules/bmb/docs/workflows/templates/step-template.md +3 -3
- package/src/modules/bmb/docs/workflows/templates/workflow-template.md +2 -2
- package/src/modules/bmb/docs/workflows/templates/workflow.md +1 -1
- package/src/modules/bmb/module.yaml +6 -15
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +7 -7
- package/src/modules/bmb/reference/agents/module-examples/README.md +3 -4
- package/src/modules/bmb/reference/agents/module-examples/security-engineer.agent.yaml +5 -5
- package/src/modules/bmb/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
- package/src/modules/bmb/reference/agents/simple-examples/README.md +1 -1
- package/src/modules/bmb/reference/agents/simple-examples/commit-poet.agent.yaml +1 -1
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +1 -1
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +1 -1
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +3 -3
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +3 -3
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +5 -5
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +5 -5
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +5 -5
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md +2 -2
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/README.md +1 -3
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/security-engineer.agent.yaml +6 -6
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/simple-examples/README.md +1 -1
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/simple-examples/commit-poet.agent.yaml +1 -1
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +1 -1
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +1 -1
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +3 -3
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +3 -3
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +5 -5
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +5 -5
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +5 -5
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/workflow.md +2 -2
- package/src/modules/bmb/workflows/create-agent/data/validation-complete.md +3 -3
- package/src/modules/bmb/workflows/create-agent/steps/step-01-brainstorm.md +4 -4
- package/src/modules/bmb/workflows/create-agent/steps/step-02-discover.md +6 -10
- package/src/modules/bmb/workflows/create-agent/steps/step-03-persona.md +6 -6
- package/src/modules/bmb/workflows/create-agent/steps/step-04-commands.md +9 -9
- package/src/modules/bmb/workflows/create-agent/steps/step-05-name.md +6 -5
- package/src/modules/bmb/workflows/create-agent/steps/step-06-build.md +19 -57
- package/src/modules/bmb/workflows/create-agent/steps/step-07-validate.md +5 -5
- package/src/modules/bmb/workflows/create-agent/steps/{step-11-celebrate.md → step-08-celebrate.md} +2 -6
- package/src/modules/bmb/workflows/create-agent/templates/agent-plan.template.md +3 -0
- package/src/modules/bmb/workflows/create-agent/templates/expert-agent.template.md +364 -0
- package/src/modules/bmb/workflows/create-agent/templates/simple-agent.template.md +257 -0
- package/src/modules/bmb/workflows/create-agent/workflow.md +2 -35
- package/src/modules/bmb/workflows/create-module/steps/step-01-init.md +4 -4
- package/src/modules/bmb/workflows/create-module/steps/step-01b-continue.md +2 -2
- package/src/modules/bmb/workflows/create-module/steps/step-02-concept.md +4 -4
- package/src/modules/bmb/workflows/create-module/steps/step-03-components.md +4 -4
- package/src/modules/bmb/workflows/create-module/steps/step-04-structure.md +6 -6
- package/src/modules/bmb/workflows/create-module/steps/step-05-config.md +5 -5
- package/src/modules/bmb/workflows/create-module/steps/step-06-agents.md +8 -8
- package/src/modules/bmb/workflows/create-module/steps/step-07-workflows.md +5 -5
- package/src/modules/bmb/workflows/create-module/steps/step-08-installer.md +8 -8
- package/src/modules/bmb/workflows/create-module/steps/step-09-documentation.md +7 -7
- package/src/modules/bmb/workflows/create-module/steps/step-10-roadmap.md +7 -7
- package/src/modules/bmb/workflows/create-module/steps/step-11-validate.md +6 -6
- package/src/modules/bmb/workflows/create-module/templates/agent.template.md +15 -19
- package/src/modules/bmb/workflows/create-module/templates/module.template.yaml +1 -1
- package/src/modules/bmb/workflows/create-module/workflow.md +3 -3
- package/src/modules/bmb/workflows/create-workflow/steps/step-01-init.md +4 -4
- package/src/modules/bmb/workflows/create-workflow/steps/step-02-gather.md +6 -6
- package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-configuration.md +5 -5
- package/src/modules/bmb/workflows/create-workflow/steps/step-04-plan-review.md +4 -4
- package/src/modules/bmb/workflows/create-workflow/steps/step-05-output-format-design.md +4 -4
- package/src/modules/bmb/workflows/create-workflow/steps/step-06-design.md +11 -11
- package/src/modules/bmb/workflows/create-workflow/steps/step-07-build.md +14 -14
- package/src/modules/bmb/workflows/create-workflow/steps/step-08-review.md +4 -4
- package/src/modules/bmb/workflows/create-workflow/steps/step-09-complete.md +2 -2
- package/src/modules/bmb/workflows/create-workflow/workflow.md +2 -2
- package/src/modules/bmb/workflows/edit-agent/steps/step-01-discover-intent.md +2 -2
- package/src/modules/bmb/workflows/edit-agent/steps/step-02-analyze-agent.md +12 -12
- package/src/modules/bmb/workflows/edit-agent/steps/step-03-propose-changes.md +4 -4
- package/src/modules/bmb/workflows/edit-agent/steps/step-04-apply-changes.md +2 -2
- package/src/modules/bmb/workflows/edit-agent/steps/step-05-validate.md +4 -4
- package/src/modules/bmb/workflows/edit-agent/workflow.md +1 -1
- package/src/modules/bmb/workflows/edit-workflow/steps/step-01-analyze.md +4 -4
- package/src/modules/bmb/workflows/edit-workflow/steps/step-02-discover.md +3 -3
- package/src/modules/bmb/workflows/edit-workflow/steps/step-03-improve.md +6 -6
- package/src/modules/bmb/workflows/edit-workflow/steps/step-04-validate.md +3 -3
- package/src/modules/bmb/workflows/edit-workflow/steps/step-05-compliance-check.md +3 -3
- package/src/modules/bmb/workflows/edit-workflow/workflow.md +1 -1
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-01-validate-goal.md +3 -3
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-02-workflow-validation.md +5 -5
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-03-step-validation.md +6 -6
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +4 -4
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +4 -4
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +4 -4
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +4 -4
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +3 -3
- package/src/modules/bmb/workflows/workflow-compliance-check/workflow.md +1 -1
- package/src/modules/bmb/workflows-legacy/edit-module/README.md +1 -17
- package/src/modules/bmb/workflows-legacy/edit-module/checklist.md +3 -4
- package/src/modules/bmb/workflows-legacy/edit-module/instructions.md +4 -5
- package/src/modules/bmb/workflows-legacy/edit-module/workflow.yaml +10 -10
- package/src/modules/bmb/workflows-legacy/module-brief/README.md +2 -2
- package/src/modules/bmb/workflows-legacy/module-brief/instructions.md +2 -2
- package/src/modules/bmb/workflows-legacy/module-brief/workflow.yaml +4 -4
- package/src/modules/bmgd/README.md +1 -1
- package/src/modules/bmgd/_module-installer/installer.js +160 -0
- package/src/modules/bmgd/_module-installer/platform-specifics/claude-code.js +23 -0
- package/src/modules/bmgd/_module-installer/platform-specifics/windsurf.js +18 -0
- package/src/modules/bmgd/agents/game-architect.agent.yaml +26 -11
- package/src/modules/bmgd/agents/game-designer.agent.yaml +41 -21
- package/src/modules/bmgd/agents/game-dev.agent.yaml +34 -18
- package/src/modules/bmgd/agents/game-qa.agent.yaml +64 -0
- package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +32 -44
- package/src/modules/bmgd/agents/game-solo-dev.agent.yaml +56 -0
- package/src/modules/bmgd/docs/README.md +180 -0
- package/src/modules/bmgd/docs/agents-guide.md +407 -0
- package/src/modules/bmgd/docs/game-types-guide.md +503 -0
- package/src/modules/bmgd/docs/glossary.md +294 -0
- package/src/modules/bmgd/docs/quick-flow-guide.md +288 -0
- package/src/modules/bmgd/docs/quick-start.md +250 -0
- package/src/modules/bmgd/docs/troubleshooting.md +259 -0
- package/src/modules/bmgd/docs/workflow-overview.jpg +0 -0
- package/src/modules/bmgd/docs/workflows-guide.md +463 -0
- package/src/modules/bmgd/gametest/knowledge/balance-testing.md +220 -0
- package/src/modules/bmgd/gametest/knowledge/certification-testing.md +319 -0
- package/src/modules/bmgd/gametest/knowledge/compatibility-testing.md +228 -0
- package/src/modules/bmgd/gametest/knowledge/godot-testing.md +376 -0
- package/src/modules/bmgd/gametest/knowledge/input-testing.md +315 -0
- package/src/modules/bmgd/gametest/knowledge/localization-testing.md +304 -0
- package/src/modules/bmgd/gametest/knowledge/multiplayer-testing.md +322 -0
- package/src/modules/bmgd/gametest/knowledge/performance-testing.md +204 -0
- package/src/modules/bmgd/gametest/knowledge/playtesting.md +384 -0
- package/src/modules/bmgd/gametest/knowledge/qa-automation.md +190 -0
- package/src/modules/bmgd/gametest/knowledge/regression-testing.md +280 -0
- package/src/modules/bmgd/gametest/knowledge/save-testing.md +280 -0
- package/src/modules/bmgd/gametest/knowledge/smoke-testing.md +404 -0
- package/src/modules/bmgd/gametest/knowledge/test-priorities.md +271 -0
- package/src/modules/bmgd/gametest/knowledge/unity-testing.md +383 -0
- package/src/modules/bmgd/gametest/knowledge/unreal-testing.md +388 -0
- package/src/modules/bmgd/gametest/qa-index.csv +17 -0
- package/src/modules/bmgd/module.yaml +27 -16
- package/src/modules/bmgd/teams/default-party.csv +2 -0
- package/src/modules/bmgd/teams/team-gamedev.yaml +12 -1
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/instructions.md +1 -1
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-01-init.md +164 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-02-context.md +210 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-03-ideation.md +289 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-04-complete.md +275 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.md +49 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.yaml +35 -14
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/instructions.md +1 -1
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-01-init.md +223 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-01b-continue.md +151 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-02-vision.md +218 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-03-market.md +218 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-04-fundamentals.md +231 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-05-scope.md +242 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-06-references.md +224 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-07-content.md +282 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-08-complete.md +296 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.md +62 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.yaml +43 -12
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-01-init.md +248 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-01b-continue.md +173 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-02-context.md +332 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-03-platforms.md +245 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-04-vision.md +229 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-05-core-gameplay.md +258 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-06-mechanics.md +249 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-07-game-type.md +266 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-08-progression.md +272 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-09-levels.md +264 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-10-art-audio.md +255 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-11-technical.md +275 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-12-epics.md +284 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-13-metrics.md +250 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-14-complete.md +335 -0
- package/src/modules/bmgd/workflows/2-design/gdd/workflow.md +61 -0
- package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +54 -34
- package/src/modules/bmgd/workflows/2-design/narrative/instructions-narrative.md +1 -1
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-01-init.md +228 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-01b-continue.md +163 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-02-foundation.md +262 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-03-story.md +238 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-04-characters.md +297 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-05-world.md +262 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-06-dialogue.md +250 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-07-environmental.md +244 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-08-delivery.md +264 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-09-integration.md +254 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-10-production.md +262 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-11-complete.md +331 -0
- package/src/modules/bmgd/workflows/2-design/narrative/workflow.md +57 -0
- package/src/modules/bmgd/workflows/2-design/narrative/workflow.yaml +55 -10
- package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +1 -1
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-01-init.md +223 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-01b-continue.md +153 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-02-context.md +262 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-03-starter.md +290 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-04-decisions.md +300 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-05-crosscutting.md +319 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-06-structure.md +304 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-07-patterns.md +349 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-08-validation.md +293 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-09-complete.md +302 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.md +55 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +51 -22
- package/src/modules/bmgd/workflows/4-production/code-review/checklist.md +23 -0
- package/src/modules/bmgd/workflows/4-production/code-review/instructions.xml +225 -0
- package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +19 -16
- package/src/modules/bmgd/workflows/4-production/correct-course/checklist.md +1 -1
- package/src/modules/bmgd/workflows/4-production/correct-course/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +12 -7
- package/src/modules/bmgd/workflows/4-production/create-story/checklist.md +332 -214
- package/src/modules/bmgd/workflows/4-production/create-story/instructions.xml +298 -0
- package/src/modules/bmgd/workflows/4-production/create-story/template.md +3 -5
- package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +13 -8
- package/src/modules/bmgd/workflows/4-production/dev-story/checklist.md +65 -23
- package/src/modules/bmgd/workflows/4-production/dev-story/instructions.xml +409 -0
- package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +14 -4
- package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +5 -5
- package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +14 -9
- package/src/modules/bmgd/workflows/4-production/sprint-planning/instructions.md +33 -42
- package/src/modules/bmgd/workflows/4-production/sprint-planning/sprint-status-template.yaml +13 -13
- package/src/modules/bmgd/workflows/4-production/sprint-planning/workflow.yaml +7 -2
- package/src/modules/bmgd/workflows/4-production/sprint-status/instructions.md +229 -0
- package/src/modules/bmgd/workflows/4-production/sprint-status/workflow.yaml +35 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/create-tech-spec/instructions.md +140 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/create-tech-spec/workflow.yaml +27 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-dev/checklist.md +37 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-dev/instructions.md +220 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-dev/workflow.yaml +45 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-prototype/checklist.md +26 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-prototype/instructions.md +156 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-prototype/workflow.yaml +36 -0
- package/src/modules/bmgd/workflows/gametest/automate/checklist.md +93 -0
- package/src/modules/bmgd/workflows/gametest/automate/instructions.md +317 -0
- package/src/modules/bmgd/workflows/gametest/automate/workflow.yaml +50 -0
- package/src/modules/bmgd/workflows/gametest/performance/checklist.md +96 -0
- package/src/modules/bmgd/workflows/gametest/performance/instructions.md +323 -0
- package/src/modules/bmgd/workflows/gametest/performance/performance-template.md +256 -0
- package/src/modules/bmgd/workflows/gametest/performance/workflow.yaml +48 -0
- package/src/modules/bmgd/workflows/gametest/playtest-plan/checklist.md +93 -0
- package/src/modules/bmgd/workflows/gametest/playtest-plan/instructions.md +297 -0
- package/src/modules/bmgd/workflows/gametest/playtest-plan/playtest-template.md +208 -0
- package/src/modules/bmgd/workflows/gametest/playtest-plan/workflow.yaml +59 -0
- package/src/modules/bmgd/workflows/gametest/test-design/checklist.md +98 -0
- package/src/modules/bmgd/workflows/gametest/test-design/instructions.md +280 -0
- package/src/modules/bmgd/workflows/gametest/test-design/test-design-template.md +205 -0
- package/src/modules/bmgd/workflows/gametest/test-design/workflow.yaml +47 -0
- package/src/modules/bmgd/workflows/gametest/test-framework/checklist.md +103 -0
- package/src/modules/bmgd/workflows/gametest/test-framework/instructions.md +348 -0
- package/src/modules/bmgd/workflows/gametest/test-framework/workflow.yaml +48 -0
- package/src/modules/bmgd/workflows/gametest/test-review/checklist.md +87 -0
- package/src/modules/bmgd/workflows/gametest/test-review/instructions.md +272 -0
- package/src/modules/bmgd/workflows/gametest/test-review/test-review-template.md +203 -0
- package/src/modules/bmgd/workflows/gametest/test-review/workflow.yaml +48 -0
- package/src/modules/bmgd/workflows/workflow-status/init/instructions.md +299 -0
- package/src/modules/bmgd/workflows/workflow-status/init/workflow.yaml +29 -0
- package/src/modules/bmgd/workflows/workflow-status/instructions.md +395 -0
- package/src/modules/bmgd/workflows/workflow-status/paths/gamedev-brownfield.yaml +65 -0
- package/src/modules/bmgd/workflows/workflow-status/paths/gamedev-greenfield.yaml +71 -0
- package/src/modules/bmgd/workflows/workflow-status/paths/quickflow-brownfield.yaml +29 -0
- package/src/modules/bmgd/workflows/workflow-status/paths/quickflow-greenfield.yaml +39 -0
- package/src/modules/bmgd/workflows/workflow-status/project-levels.yaml +63 -0
- package/src/modules/bmgd/workflows/workflow-status/workflow-status-template.yaml +24 -0
- package/src/modules/bmgd/workflows/workflow-status/workflow.yaml +30 -0
- package/src/modules/bmm/README.md +1 -1
- package/src/modules/bmm/agents/analyst.agent.yaml +9 -9
- package/src/modules/bmm/agents/architect.agent.yaml +8 -8
- package/src/modules/bmm/agents/dev.agent.yaml +5 -5
- package/src/modules/bmm/agents/pm.agent.yaml +8 -8
- package/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml +5 -5
- package/src/modules/bmm/agents/sm.agent.yaml +11 -11
- package/src/modules/bmm/agents/tea.agent.yaml +13 -13
- package/src/modules/bmm/agents/tech-writer.agent.yaml +9 -9
- package/src/modules/bmm/agents/ux-designer.agent.yaml +6 -6
- package/src/modules/bmm/docs/agents-guide.md +16 -14
- package/src/modules/bmm/docs/brownfield-guide.md +6 -6
- package/src/modules/bmm/docs/enterprise-agentic-development.md +3 -3
- package/src/modules/bmm/docs/faq.md +5 -18
- package/src/modules/bmm/docs/glossary.md +3 -4
- package/src/modules/bmm/docs/images/README.md +1 -1
- package/src/modules/bmm/docs/images/workflow-method-greenfield.excalidraw +8 -8
- package/src/modules/bmm/docs/party-mode.md +3 -3
- package/src/modules/bmm/docs/quick-flow-solo-dev.md +5 -5
- package/src/modules/bmm/docs/quick-spec-flow.md +2 -16
- package/src/modules/bmm/docs/quick-start.md +3 -3
- package/src/modules/bmm/docs/test-architecture.md +15 -23
- package/src/modules/bmm/docs/troubleshooting.md +6 -25
- package/src/modules/bmm/docs/workflow-document-project-reference.md +1 -1
- package/src/modules/bmm/docs/workflows-implementation.md +3 -4
- package/src/modules/bmm/module.yaml +25 -23
- package/src/modules/bmm/testarch/knowledge/overview.md +0 -1
- package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-01-init.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-01b-continue.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-02-vision.md +3 -3
- package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-03-users.md +3 -3
- package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-04-metrics.md +3 -3
- package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-05-scope.md +3 -3
- package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-06-complete.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/workflow.md +2 -2
- package/src/modules/bmm/workflows/1-analysis/research/workflow.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +1 -1
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +1 -1
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +3 -3
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +7 -7
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +8 -8
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +12 -12
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +12 -12
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +10 -10
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +7 -7
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +9 -9
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +9 -9
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +1 -1
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +2 -2
- package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/steps/step-01-document-discovery.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/steps/step-02-prd-analysis.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/steps/step-03-epic-coverage-validation.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/steps/step-04-ux-alignment.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/steps/step-05-epic-quality-review.md +2 -2
- package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/steps/step-06-final-assessment.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/workflow.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-01-init.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-02-context.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-03-starter.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-04-decisions.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-05-patterns.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-06-structure.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-07-validation.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-08-complete.md +3 -3
- package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/workflow.md +2 -2
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +3 -3
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +3 -3
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +3 -3
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +3 -3
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +3 -3
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +4 -3
- package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +2 -2
- package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +2 -2
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.xml +5 -5
- package/src/modules/bmm/workflows/4-implementation/create-story/template.md +3 -5
- package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +2 -2
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.xml +11 -8
- package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +3 -3
- package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +3 -3
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +15 -22
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +4 -5
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/sprint-status/instructions.md +90 -35
- package/src/modules/bmm/workflows/4-implementation/sprint-status/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.yaml +5 -5
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.yaml +7 -7
- package/src/modules/bmm/workflows/document-project/instructions.md +5 -5
- package/src/modules/bmm/workflows/document-project/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/document-project/workflows/deep-dive.yaml +5 -5
- package/src/modules/bmm/workflows/document-project/workflows/full-scan.yaml +5 -5
- package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-dataflow/instructions.md +1 -1
- package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-dataflow/workflow.yaml +6 -6
- package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-diagram/instructions.md +2 -2
- package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-diagram/workflow.yaml +6 -6
- package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-flowchart/instructions.md +2 -2
- package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-flowchart/workflow.yaml +6 -6
- package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-wireframe/instructions.md +1 -1
- package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-wireframe/workflow.yaml +6 -6
- package/src/modules/bmm/workflows/generate-project-context/steps/step-01-discover.md +2 -2
- package/src/modules/bmm/workflows/generate-project-context/steps/step-02-generate.md +3 -3
- package/src/modules/bmm/workflows/generate-project-context/steps/step-03-complete.md +2 -2
- package/src/modules/bmm/workflows/generate-project-context/workflow.md +5 -5
- package/src/modules/bmm/workflows/testarch/atdd/instructions.md +2 -2
- package/src/modules/bmm/workflows/testarch/atdd/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/automate/instructions.md +2 -2
- package/src/modules/bmm/workflows/testarch/automate/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/ci/instructions.md +1 -1
- package/src/modules/bmm/workflows/testarch/ci/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/framework/instructions.md +3 -3
- package/src/modules/bmm/workflows/testarch/framework/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/nfr-assess/instructions.md +1 -1
- package/src/modules/bmm/workflows/testarch/nfr-assess/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/test-design/instructions.md +3 -3
- package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +1 -1
- package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +10 -4
- package/src/modules/bmm/workflows/testarch/test-review/instructions.md +1 -1
- package/src/modules/bmm/workflows/testarch/test-review/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/trace/instructions.md +6 -6
- package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/workflow-status/init/instructions.md +1 -1
- package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +4 -4
- package/src/modules/bmm/workflows/workflow-status/instructions.md +3 -3
- package/src/modules/bmm/workflows/workflow-status/project-levels.yaml +1 -1
- package/src/modules/bmm/workflows/workflow-status/workflow.yaml +2 -2
- package/src/modules/cis/agents/brainstorming-coach.agent.yaml +4 -4
- package/src/modules/cis/agents/creative-problem-solver.agent.yaml +4 -4
- package/src/modules/cis/agents/design-thinking-coach.agent.yaml +4 -4
- package/src/modules/cis/agents/innovation-strategist.agent.yaml +4 -4
- package/src/modules/cis/agents/presentation-master.agent.yaml +3 -3
- package/src/modules/cis/agents/storyteller/storyteller-sidecar/stories-told.md +7 -0
- package/src/modules/cis/agents/storyteller/storyteller-sidecar/story-preferences.md +7 -0
- package/src/modules/cis/agents/{storyteller.agent.yaml → storyteller/storyteller.agent.yaml} +9 -4
- package/src/modules/cis/module.yaml +3 -7
- package/src/modules/cis/{README.md → readme.md} +1 -1
- package/src/modules/cis/workflows/README.md +1 -1
- package/src/modules/cis/workflows/design-thinking/instructions.md +2 -2
- package/src/modules/cis/workflows/design-thinking/workflow.yaml +7 -7
- package/src/modules/cis/workflows/innovation-strategy/instructions.md +2 -2
- package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +7 -7
- package/src/modules/cis/workflows/problem-solving/instructions.md +2 -2
- package/src/modules/cis/workflows/problem-solving/workflow.yaml +7 -7
- package/src/modules/cis/workflows/storytelling/instructions.md +2 -2
- package/src/modules/cis/workflows/storytelling/workflow.yaml +7 -7
- package/src/utility/agent-components/activation-rules.txt +7 -0
- package/src/utility/agent-components/activation-steps.txt +13 -0
- package/src/utility/agent-components/agent-command-header.md +1 -0
- package/src/utility/{templates → agent-components}/agent.customize.template.yaml +0 -1
- package/src/utility/agent-components/handler-action.txt +4 -0
- package/src/utility/agent-components/handler-exec.txt +6 -0
- package/src/utility/agent-components/handler-multi.txt +14 -0
- package/src/utility/agent-components/handler-tmpl.txt +5 -0
- package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
- package/src/utility/agent-components/handler-workflow.txt +10 -0
- package/src/utility/agent-components/menu-handlers.txt +6 -0
- package/test/README.md +1 -1
- package/test/test-agent-schema.js +2 -2
- package/tools/cli/README.md +1 -607
- package/tools/cli/commands/build.js +7 -7
- package/tools/cli/commands/install.js +16 -18
- package/tools/cli/commands/list.js +13 -1
- package/tools/cli/installers/lib/core/config-collector.js +224 -59
- package/tools/cli/installers/lib/core/custom-module-cache.js +18 -10
- package/tools/cli/installers/lib/core/dependency-resolver.js +2 -2
- package/tools/cli/installers/lib/core/detector.js +16 -16
- package/tools/cli/installers/lib/core/ide-config-manager.js +9 -7
- package/tools/cli/installers/lib/core/installer.js +634 -1040
- package/tools/cli/installers/lib/core/installer.js.bak +3204 -0
- package/tools/cli/installers/lib/core/manifest-generator.js +43 -40
- package/tools/cli/installers/lib/core/manifest.js +23 -20
- package/tools/cli/installers/lib/custom/handler.js +16 -46
- package/tools/cli/installers/lib/ide/_base-ide.js +26 -33
- package/tools/cli/installers/lib/ide/antigravity.js +3 -3
- package/tools/cli/installers/lib/ide/claude-code.js +3 -3
- package/tools/cli/installers/lib/ide/codex.js +2 -2
- package/tools/cli/installers/lib/ide/gemini.js +6 -6
- package/tools/cli/installers/lib/ide/kiro-cli.js +2 -2
- package/tools/cli/installers/lib/ide/opencode.js +2 -2
- package/tools/cli/installers/lib/ide/roo.js +15 -5
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +2 -2
- package/tools/cli/installers/lib/ide/shared/module-injections.js +2 -2
- package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +2 -2
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +4 -4
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +1 -1
- package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +3 -3
- package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +3 -3
- package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +1 -1
- package/tools/cli/installers/lib/modules/manager.js +315 -312
- package/tools/cli/lib/activation-builder.js +8 -13
- package/tools/cli/lib/agent/compiler.js +166 -167
- package/tools/cli/lib/agent/installer.js +8 -128
- package/tools/cli/lib/agent-analyzer.js +2 -2
- package/tools/cli/lib/agent-party-generator.js +5 -17
- package/tools/cli/lib/config.js +2 -2
- package/tools/cli/lib/platform-codes.js +2 -2
- package/tools/cli/lib/ui.js +678 -564
- package/tools/cli/lib/xml-handler.js +3 -55
- package/tools/cli/lib/yaml-format.js +4 -6
- package/tools/cli/lib/yaml-xml-builder.js +14 -26
- package/tools/flattener/ignoreRules.js +1 -1
- package/tools/flattener/xml.js +1 -7
- package/tools/lib/xml-utils.js +13 -0
- package/tools/migrate-custom-module-paths.js +2 -2
- package/tools/validate-agent-schema.js +2 -2
- package/docs/v6-open-items.md +0 -17
- package/src/core/agents/bmad-web-orchestrator.agent.xml +0 -113
- package/src/modules/bmb/_module-installer/installer.js +0 -76
- package/src/modules/bmb/docs/agents/module-agent-architecture.md +0 -366
- package/src/modules/bmb/workflows/create-agent/steps/step-08-setup.md +0 -179
- package/src/modules/bmb/workflows/create-agent/steps/step-09-customize.md +0 -197
- package/src/modules/bmb/workflows/create-agent/steps/step-10-build-tools.md +0 -180
- package/src/modules/bmb/workflows/create-agent/templates/agent_commands.md +0 -21
- package/src/modules/bmb/workflows/create-agent/templates/agent_persona.md +0 -25
- package/src/modules/bmb/workflows/create-agent/templates/agent_purpose_and_type.md +0 -23
- package/src/modules/bmgd/workflows/2-design/gdd/instructions-gdd.md +0 -502
- package/src/modules/bmgd/workflows/4-production/code-review/instructions.md +0 -398
- package/src/modules/bmgd/workflows/4-production/create-story/instructions.md +0 -256
- package/src/modules/bmgd/workflows/4-production/dev-story/instructions.md +0 -267
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/checklist.md +0 -17
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/instructions.md +0 -164
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/template.md +0 -76
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/workflow.yaml +0 -58
- package/src/modules/bmgd/workflows/4-production/story-context/checklist.md +0 -16
- package/src/modules/bmgd/workflows/4-production/story-context/context-template.xml +0 -34
- package/src/modules/bmgd/workflows/4-production/story-context/instructions.md +0 -209
- package/src/modules/bmgd/workflows/4-production/story-context/workflow.yaml +0 -63
- package/src/modules/bmgd/workflows/4-production/story-done/instructions.md +0 -111
- package/src/modules/bmgd/workflows/4-production/story-done/workflow.yaml +0 -28
- package/src/modules/bmgd/workflows/4-production/story-ready/instructions.md +0 -117
- package/src/modules/bmgd/workflows/4-production/story-ready/workflow.yaml +0 -25
- package/src/modules/bmm/tasks/daily-standup.xml +0 -85
- package/src/modules/cis/agents/README.md +0 -104
- package/src/utility/models/action-command-header.md +0 -0
- package/src/utility/models/agent-activation-ide.xml +0 -51
- package/src/utility/models/agent-activation-web.xml +0 -50
- package/src/utility/models/agent-command-header.md +0 -1
- package/src/utility/models/agent-config-template.md +0 -23
- package/src/utility/models/agent-in-team-activation.xml +0 -3
- package/src/utility/models/fragments/activation-rules.xml +0 -7
- package/src/utility/models/fragments/activation-steps.xml +0 -16
- package/src/utility/models/fragments/handler-action.xml +0 -4
- package/src/utility/models/fragments/handler-exec.xml +0 -6
- package/src/utility/models/fragments/handler-multi.xml +0 -14
- package/src/utility/models/fragments/handler-tmpl.xml +0 -5
- package/src/utility/models/fragments/handler-validate-workflow.xml +0 -7
- package/src/utility/models/fragments/handler-workflow.xml +0 -9
- package/src/utility/models/fragments/menu-handlers.xml +0 -6
- package/src/utility/models/fragments/web-bundle-activation-steps.xml +0 -32
- package/tools/cli/bundlers/bundle-web.js +0 -179
- package/tools/cli/bundlers/test-analyst.js +0 -28
- package/tools/cli/bundlers/test-bundler.js +0 -118
- package/tools/cli/bundlers/web-bundler.js +0 -1754
- package/tools/cli/installers/lib/core/post-install-sidecar-replacement.js +0 -79
- package/tools/cli/lib/replace-project-root.js +0 -239
- package/tools/cli/regenerate-manifests.js +0 -27
- package/tools/cli/test-yaml-builder.js +0 -43
- /package/src/modules/bmgd/workflows/1-preproduction/game-brief/{template.md → templates/game-brief-template.md} +0 -0
- /package/src/modules/bmgd/workflows/2-design/gdd/{gdd-template.md → templates/gdd-template.md} +0 -0
- /package/src/modules/bmgd/workflows/2-design/narrative/{narrative-template.md → templates/narrative-template.md} +0 -0
- /package/src/modules/bmgd/workflows/3-technical/game-architecture/{architecture-template.md → templates/architecture-template.md} +0 -0
- /package/src/modules/bmgd/workflows/4-production/code-review/{backlog_template.md → backlog-template.md} +0 -0
- /package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/product-brief.template.md +0 -0
- /package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/templates/readiness-report-template.md +0 -0
- /package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/architecture-decision-template.md +0 -0
- /package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/data/domain-complexity.csv +0 -0
- /package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/data/project-types.csv +0 -0
- /package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-01b-continue.md +0 -0
- /package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/_shared/excalidraw-library.json +0 -0
- /package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/_shared/excalidraw-templates.yaml +0 -0
- /package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-dataflow/checklist.md +0 -0
- /package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-diagram/checklist.md +0 -0
- /package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-flowchart/checklist.md +0 -0
- /package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-wireframe/checklist.md +0 -0
- /package/src/utility/{models/fragments/handler-data.xml → agent-components/handler-data.txt} +0 -0
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
# Godot GUT Testing Guide
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
GUT (Godot Unit Test) is the standard unit testing framework for Godot. It provides a full-featured testing framework with assertions, mocking, and CI integration.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
### Via Asset Library
|
|
10
|
+
|
|
11
|
+
1. Open AssetLib in Godot
|
|
12
|
+
2. Search for "GUT"
|
|
13
|
+
3. Download and install
|
|
14
|
+
4. Enable the plugin in Project Settings
|
|
15
|
+
|
|
16
|
+
### Via Git Submodule
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
git submodule add https://github.com/bitwes/Gut.git addons/gut
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Project Structure
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
project/
|
|
26
|
+
├── addons/
|
|
27
|
+
│ └── gut/
|
|
28
|
+
├── src/
|
|
29
|
+
│ ├── player/
|
|
30
|
+
│ │ └── player.gd
|
|
31
|
+
│ └── combat/
|
|
32
|
+
│ └── damage_calculator.gd
|
|
33
|
+
└── tests/
|
|
34
|
+
├── unit/
|
|
35
|
+
│ └── test_damage_calculator.gd
|
|
36
|
+
└── integration/
|
|
37
|
+
└── test_player_combat.gd
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Basic Test Structure
|
|
41
|
+
|
|
42
|
+
### Simple Test Class
|
|
43
|
+
|
|
44
|
+
```gdscript
|
|
45
|
+
# tests/unit/test_damage_calculator.gd
|
|
46
|
+
extends GutTest
|
|
47
|
+
|
|
48
|
+
var calculator: DamageCalculator
|
|
49
|
+
|
|
50
|
+
func before_each():
|
|
51
|
+
calculator = DamageCalculator.new()
|
|
52
|
+
|
|
53
|
+
func after_each():
|
|
54
|
+
calculator.free()
|
|
55
|
+
|
|
56
|
+
func test_calculate_base_damage():
|
|
57
|
+
var result = calculator.calculate(100.0, 1.0)
|
|
58
|
+
assert_eq(result, 100.0, "Base damage should equal input")
|
|
59
|
+
|
|
60
|
+
func test_calculate_critical_hit():
|
|
61
|
+
var result = calculator.calculate(100.0, 2.0)
|
|
62
|
+
assert_eq(result, 200.0, "Critical hit should double damage")
|
|
63
|
+
|
|
64
|
+
func test_calculate_with_zero_multiplier():
|
|
65
|
+
var result = calculator.calculate(100.0, 0.0)
|
|
66
|
+
assert_eq(result, 0.0, "Zero multiplier should result in zero damage")
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Parameterized Tests
|
|
70
|
+
|
|
71
|
+
```gdscript
|
|
72
|
+
func test_damage_scenarios():
|
|
73
|
+
var scenarios = [
|
|
74
|
+
{"base": 100.0, "mult": 1.0, "expected": 100.0},
|
|
75
|
+
{"base": 100.0, "mult": 2.0, "expected": 200.0},
|
|
76
|
+
{"base": 50.0, "mult": 1.5, "expected": 75.0},
|
|
77
|
+
{"base": 0.0, "mult": 2.0, "expected": 0.0},
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
for scenario in scenarios:
|
|
81
|
+
var result = calculator.calculate(scenario.base, scenario.mult)
|
|
82
|
+
assert_eq(
|
|
83
|
+
result,
|
|
84
|
+
scenario.expected,
|
|
85
|
+
"Base %s * %s should equal %s" % [
|
|
86
|
+
scenario.base, scenario.mult, scenario.expected
|
|
87
|
+
]
|
|
88
|
+
)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Testing Nodes
|
|
92
|
+
|
|
93
|
+
### Scene Testing
|
|
94
|
+
|
|
95
|
+
```gdscript
|
|
96
|
+
# tests/integration/test_player.gd
|
|
97
|
+
extends GutTest
|
|
98
|
+
|
|
99
|
+
var player: Player
|
|
100
|
+
var player_scene = preload("res://src/player/player.tscn")
|
|
101
|
+
|
|
102
|
+
func before_each():
|
|
103
|
+
player = player_scene.instantiate()
|
|
104
|
+
add_child(player)
|
|
105
|
+
|
|
106
|
+
func after_each():
|
|
107
|
+
player.queue_free()
|
|
108
|
+
|
|
109
|
+
func test_player_initial_health():
|
|
110
|
+
assert_eq(player.health, 100, "Player should start with 100 health")
|
|
111
|
+
|
|
112
|
+
func test_player_takes_damage():
|
|
113
|
+
player.take_damage(30)
|
|
114
|
+
assert_eq(player.health, 70, "Health should be reduced by damage")
|
|
115
|
+
|
|
116
|
+
func test_player_dies_at_zero_health():
|
|
117
|
+
player.take_damage(100)
|
|
118
|
+
assert_true(player.is_dead, "Player should be dead at 0 health")
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Testing with Signals
|
|
122
|
+
|
|
123
|
+
```gdscript
|
|
124
|
+
func test_damage_emits_signal():
|
|
125
|
+
watch_signals(player)
|
|
126
|
+
|
|
127
|
+
player.take_damage(10)
|
|
128
|
+
|
|
129
|
+
assert_signal_emitted(player, "health_changed")
|
|
130
|
+
assert_signal_emit_count(player, "health_changed", 1)
|
|
131
|
+
|
|
132
|
+
func test_death_emits_signal():
|
|
133
|
+
watch_signals(player)
|
|
134
|
+
|
|
135
|
+
player.take_damage(100)
|
|
136
|
+
|
|
137
|
+
assert_signal_emitted(player, "died")
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Testing with Await
|
|
141
|
+
|
|
142
|
+
```gdscript
|
|
143
|
+
func test_attack_cooldown():
|
|
144
|
+
player.attack()
|
|
145
|
+
assert_true(player.is_attacking)
|
|
146
|
+
|
|
147
|
+
# Wait for cooldown
|
|
148
|
+
await get_tree().create_timer(player.attack_cooldown).timeout
|
|
149
|
+
|
|
150
|
+
assert_false(player.is_attacking)
|
|
151
|
+
assert_true(player.can_attack)
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Mocking and Doubles
|
|
155
|
+
|
|
156
|
+
### Creating Doubles
|
|
157
|
+
|
|
158
|
+
```gdscript
|
|
159
|
+
func test_enemy_uses_pathfinding():
|
|
160
|
+
var mock_pathfinding = double(Pathfinding).new()
|
|
161
|
+
stub(mock_pathfinding, "find_path").to_return([Vector2(0, 0), Vector2(10, 10)])
|
|
162
|
+
|
|
163
|
+
var enemy = Enemy.new()
|
|
164
|
+
enemy.pathfinding = mock_pathfinding
|
|
165
|
+
|
|
166
|
+
enemy.move_to(Vector2(10, 10))
|
|
167
|
+
|
|
168
|
+
assert_called(mock_pathfinding, "find_path")
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Partial Doubles
|
|
172
|
+
|
|
173
|
+
```gdscript
|
|
174
|
+
func test_player_inventory():
|
|
175
|
+
var player_double = partial_double(Player).new()
|
|
176
|
+
stub(player_double, "save_to_disk").to_do_nothing()
|
|
177
|
+
|
|
178
|
+
player_double.add_item("sword")
|
|
179
|
+
|
|
180
|
+
assert_eq(player_double.inventory.size(), 1)
|
|
181
|
+
assert_called(player_double, "save_to_disk")
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Physics Testing
|
|
185
|
+
|
|
186
|
+
### Testing Collision
|
|
187
|
+
|
|
188
|
+
```gdscript
|
|
189
|
+
func test_projectile_hits_enemy():
|
|
190
|
+
var projectile = Projectile.new()
|
|
191
|
+
var enemy = Enemy.new()
|
|
192
|
+
|
|
193
|
+
add_child(projectile)
|
|
194
|
+
add_child(enemy)
|
|
195
|
+
|
|
196
|
+
projectile.global_position = Vector2(0, 0)
|
|
197
|
+
enemy.global_position = Vector2(100, 0)
|
|
198
|
+
|
|
199
|
+
projectile.velocity = Vector2(200, 0)
|
|
200
|
+
|
|
201
|
+
# Simulate physics frames
|
|
202
|
+
for i in range(60):
|
|
203
|
+
await get_tree().physics_frame
|
|
204
|
+
|
|
205
|
+
assert_true(enemy.was_hit, "Enemy should be hit by projectile")
|
|
206
|
+
|
|
207
|
+
projectile.queue_free()
|
|
208
|
+
enemy.queue_free()
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Testing Area2D
|
|
212
|
+
|
|
213
|
+
```gdscript
|
|
214
|
+
func test_pickup_collected():
|
|
215
|
+
var pickup = Pickup.new()
|
|
216
|
+
var player = player_scene.instantiate()
|
|
217
|
+
|
|
218
|
+
add_child(pickup)
|
|
219
|
+
add_child(player)
|
|
220
|
+
|
|
221
|
+
pickup.global_position = Vector2(50, 50)
|
|
222
|
+
player.global_position = Vector2(50, 50)
|
|
223
|
+
|
|
224
|
+
# Wait for physics to process overlap
|
|
225
|
+
await get_tree().physics_frame
|
|
226
|
+
await get_tree().physics_frame
|
|
227
|
+
|
|
228
|
+
assert_true(pickup.is_queued_for_deletion(), "Pickup should be collected")
|
|
229
|
+
|
|
230
|
+
player.queue_free()
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## Input Testing
|
|
234
|
+
|
|
235
|
+
### Simulating Input
|
|
236
|
+
|
|
237
|
+
```gdscript
|
|
238
|
+
func test_jump_on_input():
|
|
239
|
+
var input_event = InputEventKey.new()
|
|
240
|
+
input_event.keycode = KEY_SPACE
|
|
241
|
+
input_event.pressed = true
|
|
242
|
+
|
|
243
|
+
Input.parse_input_event(input_event)
|
|
244
|
+
await get_tree().process_frame
|
|
245
|
+
|
|
246
|
+
player._unhandled_input(input_event)
|
|
247
|
+
|
|
248
|
+
assert_true(player.is_jumping, "Player should jump on space press")
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Testing Input Actions
|
|
252
|
+
|
|
253
|
+
```gdscript
|
|
254
|
+
func test_attack_action():
|
|
255
|
+
# Simulate action press
|
|
256
|
+
Input.action_press("attack")
|
|
257
|
+
await get_tree().process_frame
|
|
258
|
+
|
|
259
|
+
player._process(0.016)
|
|
260
|
+
|
|
261
|
+
assert_true(player.is_attacking)
|
|
262
|
+
|
|
263
|
+
Input.action_release("attack")
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
## Resource Testing
|
|
267
|
+
|
|
268
|
+
### Testing Custom Resources
|
|
269
|
+
|
|
270
|
+
```gdscript
|
|
271
|
+
func test_weapon_stats_resource():
|
|
272
|
+
var weapon = WeaponStats.new()
|
|
273
|
+
weapon.base_damage = 10.0
|
|
274
|
+
weapon.attack_speed = 2.0
|
|
275
|
+
|
|
276
|
+
assert_eq(weapon.dps, 20.0, "DPS should be damage * speed")
|
|
277
|
+
|
|
278
|
+
func test_save_load_resource():
|
|
279
|
+
var original = PlayerData.new()
|
|
280
|
+
original.level = 5
|
|
281
|
+
original.gold = 1000
|
|
282
|
+
|
|
283
|
+
ResourceSaver.save(original, "user://test_save.tres")
|
|
284
|
+
var loaded = ResourceLoader.load("user://test_save.tres")
|
|
285
|
+
|
|
286
|
+
assert_eq(loaded.level, 5)
|
|
287
|
+
assert_eq(loaded.gold, 1000)
|
|
288
|
+
|
|
289
|
+
DirAccess.remove_absolute("user://test_save.tres")
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
## GUT Configuration
|
|
293
|
+
|
|
294
|
+
### gut_config.json
|
|
295
|
+
|
|
296
|
+
```json
|
|
297
|
+
{
|
|
298
|
+
"dirs": ["res://tests/"],
|
|
299
|
+
"include_subdirs": true,
|
|
300
|
+
"prefix": "test_",
|
|
301
|
+
"suffix": ".gd",
|
|
302
|
+
"should_exit": true,
|
|
303
|
+
"should_exit_on_success": true,
|
|
304
|
+
"log_level": 1,
|
|
305
|
+
"junit_xml_file": "results.xml",
|
|
306
|
+
"font_size": 16
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
## CI Integration
|
|
311
|
+
|
|
312
|
+
### Command Line Execution
|
|
313
|
+
|
|
314
|
+
```bash
|
|
315
|
+
# Run all tests
|
|
316
|
+
godot --headless -s addons/gut/gut_cmdln.gd
|
|
317
|
+
|
|
318
|
+
# Run specific tests
|
|
319
|
+
godot --headless -s addons/gut/gut_cmdln.gd \
|
|
320
|
+
-gdir=res://tests/unit \
|
|
321
|
+
-gprefix=test_
|
|
322
|
+
|
|
323
|
+
# With JUnit output
|
|
324
|
+
godot --headless -s addons/gut/gut_cmdln.gd \
|
|
325
|
+
-gjunit_xml_file=results.xml
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### GitHub Actions
|
|
329
|
+
|
|
330
|
+
```yaml
|
|
331
|
+
test:
|
|
332
|
+
runs-on: ubuntu-latest
|
|
333
|
+
container:
|
|
334
|
+
image: barichello/godot-ci:4.2
|
|
335
|
+
steps:
|
|
336
|
+
- uses: actions/checkout@v4
|
|
337
|
+
|
|
338
|
+
- name: Run Tests
|
|
339
|
+
run: |
|
|
340
|
+
godot --headless -s addons/gut/gut_cmdln.gd \
|
|
341
|
+
-gjunit_xml_file=results.xml
|
|
342
|
+
|
|
343
|
+
- name: Publish Results
|
|
344
|
+
uses: mikepenz/action-junit-report@v4
|
|
345
|
+
with:
|
|
346
|
+
report_paths: results.xml
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
## Best Practices
|
|
350
|
+
|
|
351
|
+
### DO
|
|
352
|
+
|
|
353
|
+
- Use `before_each`/`after_each` for setup/teardown
|
|
354
|
+
- Free nodes after tests to prevent leaks
|
|
355
|
+
- Use meaningful assertion messages
|
|
356
|
+
- Group related tests in the same file
|
|
357
|
+
- Use `watch_signals` for signal testing
|
|
358
|
+
- Await physics frames when testing physics
|
|
359
|
+
|
|
360
|
+
### DON'T
|
|
361
|
+
|
|
362
|
+
- Don't test Godot's built-in functionality
|
|
363
|
+
- Don't rely on execution order between test files
|
|
364
|
+
- Don't leave orphan nodes
|
|
365
|
+
- Don't use `yield` (use `await` in Godot 4)
|
|
366
|
+
- Don't test private methods directly
|
|
367
|
+
|
|
368
|
+
## Troubleshooting
|
|
369
|
+
|
|
370
|
+
| Issue | Cause | Fix |
|
|
371
|
+
| -------------------- | ------------------ | ------------------------------------ |
|
|
372
|
+
| Tests not found | Wrong prefix/path | Check gut_config.json |
|
|
373
|
+
| Orphan nodes warning | Missing cleanup | Add `queue_free()` in `after_each` |
|
|
374
|
+
| Signal not detected | Signal not watched | Call `watch_signals()` before action |
|
|
375
|
+
| Physics not working | Missing frames | Await `physics_frame` |
|
|
376
|
+
| Flaky tests | Timing issues | Use proper await/signals |
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
# Input Testing Guide
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Input testing validates that all supported input devices work correctly across platforms. Poor input handling frustrates players instantly—responsive, accurate input is foundational to game feel.
|
|
6
|
+
|
|
7
|
+
## Input Categories
|
|
8
|
+
|
|
9
|
+
### Device Types
|
|
10
|
+
|
|
11
|
+
| Device | Platforms | Key Concerns |
|
|
12
|
+
| ----------------- | -------------- | ----------------------------------- |
|
|
13
|
+
| Keyboard + Mouse | PC | Key conflicts, DPI sensitivity |
|
|
14
|
+
| Gamepad (Xbox/PS) | PC, Console | Deadzone, vibration, button prompts |
|
|
15
|
+
| Touch | Mobile, Switch | Multi-touch, gesture recognition |
|
|
16
|
+
| Motion Controls | Switch, VR | Calibration, drift, fatigue |
|
|
17
|
+
| Specialty | Various | Flight sticks, wheels, fight sticks |
|
|
18
|
+
|
|
19
|
+
### Input Characteristics
|
|
20
|
+
|
|
21
|
+
| Characteristic | Description | Test Focus |
|
|
22
|
+
| -------------- | ---------------------------- | -------------------------------- |
|
|
23
|
+
| Responsiveness | Input-to-action delay | Should feel instant (< 100ms) |
|
|
24
|
+
| Accuracy | Input maps to correct action | No ghost inputs or missed inputs |
|
|
25
|
+
| Consistency | Same input = same result | Deterministic behavior |
|
|
26
|
+
| Accessibility | Alternative input support | Remapping, assist options |
|
|
27
|
+
|
|
28
|
+
## Test Scenarios
|
|
29
|
+
|
|
30
|
+
### Keyboard and Mouse
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
SCENARIO: All Keybinds Functional
|
|
34
|
+
GIVEN default keyboard bindings
|
|
35
|
+
WHEN each bound key is pressed
|
|
36
|
+
THEN corresponding action triggers
|
|
37
|
+
AND no key conflicts exist
|
|
38
|
+
|
|
39
|
+
SCENARIO: Key Remapping
|
|
40
|
+
GIVEN player remaps "Jump" from Space to F
|
|
41
|
+
WHEN F is pressed
|
|
42
|
+
THEN jump action triggers
|
|
43
|
+
AND Space no longer triggers jump
|
|
44
|
+
AND remapping persists after restart
|
|
45
|
+
|
|
46
|
+
SCENARIO: Mouse Sensitivity
|
|
47
|
+
GIVEN sensitivity set to 5 (mid-range)
|
|
48
|
+
WHEN mouse moves 10cm
|
|
49
|
+
THEN camera rotation matches expected degrees
|
|
50
|
+
AND movement feels consistent at different frame rates
|
|
51
|
+
|
|
52
|
+
SCENARIO: Mouse Button Support
|
|
53
|
+
GIVEN mouse with 5+ buttons
|
|
54
|
+
WHEN side buttons are pressed
|
|
55
|
+
THEN they can be bound to actions
|
|
56
|
+
AND they function correctly in gameplay
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Gamepad
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
SCENARIO: Analog Stick Deadzone
|
|
63
|
+
GIVEN controller with slight stick drift
|
|
64
|
+
WHEN stick is in neutral position
|
|
65
|
+
THEN no movement occurs (deadzone filters drift)
|
|
66
|
+
AND intentional small movements still register
|
|
67
|
+
|
|
68
|
+
SCENARIO: Trigger Pressure
|
|
69
|
+
GIVEN analog triggers
|
|
70
|
+
WHEN trigger is partially pressed
|
|
71
|
+
THEN partial values are read (e.g., 0.5 for half-press)
|
|
72
|
+
AND full press reaches 1.0
|
|
73
|
+
|
|
74
|
+
SCENARIO: Controller Hot-Swap
|
|
75
|
+
GIVEN game running with keyboard
|
|
76
|
+
WHEN gamepad is connected
|
|
77
|
+
THEN input prompts switch to gamepad icons
|
|
78
|
+
AND gamepad input works immediately
|
|
79
|
+
AND keyboard still works if used
|
|
80
|
+
|
|
81
|
+
SCENARIO: Vibration Feedback
|
|
82
|
+
GIVEN rumble-enabled controller
|
|
83
|
+
WHEN damage is taken
|
|
84
|
+
THEN controller vibrates appropriately
|
|
85
|
+
AND vibration intensity matches damage severity
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Touch Input
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
SCENARIO: Multi-Touch Accuracy
|
|
92
|
+
GIVEN virtual joystick and buttons
|
|
93
|
+
WHEN left thumb on joystick AND right thumb on button
|
|
94
|
+
THEN both inputs register simultaneously
|
|
95
|
+
AND no interference between touch points
|
|
96
|
+
|
|
97
|
+
SCENARIO: Gesture Recognition
|
|
98
|
+
GIVEN swipe-to-attack mechanic
|
|
99
|
+
WHEN player swipes right
|
|
100
|
+
THEN attack direction matches swipe
|
|
101
|
+
AND swipe is distinguished from tap
|
|
102
|
+
|
|
103
|
+
SCENARIO: Touch Target Size
|
|
104
|
+
GIVEN minimum touch target of 44x44 points
|
|
105
|
+
WHEN buttons are placed
|
|
106
|
+
THEN all interactive elements meet minimum size
|
|
107
|
+
AND elements have adequate spacing
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Platform-Specific Testing
|
|
111
|
+
|
|
112
|
+
### PC
|
|
113
|
+
|
|
114
|
+
- Multiple keyboard layouts (QWERTY, AZERTY, QWERTZ)
|
|
115
|
+
- Different mouse DPI settings (400-3200+)
|
|
116
|
+
- Multiple monitors (cursor confinement)
|
|
117
|
+
- Background application conflicts
|
|
118
|
+
- Steam Input API integration
|
|
119
|
+
|
|
120
|
+
### Console
|
|
121
|
+
|
|
122
|
+
| Platform | Specific Tests |
|
|
123
|
+
| ----------- | ------------------------------------------ |
|
|
124
|
+
| PlayStation | Touchpad, adaptive triggers, haptics |
|
|
125
|
+
| Xbox | Impulse triggers, Elite controller paddles |
|
|
126
|
+
| Switch | Joy-Con detachment, gyro, HD rumble |
|
|
127
|
+
|
|
128
|
+
### Mobile
|
|
129
|
+
|
|
130
|
+
- Different screen sizes and aspect ratios
|
|
131
|
+
- Notch/cutout avoidance
|
|
132
|
+
- External controller support
|
|
133
|
+
- Apple MFi / Android gamepad compatibility
|
|
134
|
+
|
|
135
|
+
## Automated Test Examples
|
|
136
|
+
|
|
137
|
+
### Unity
|
|
138
|
+
|
|
139
|
+
```csharp
|
|
140
|
+
using UnityEngine.InputSystem;
|
|
141
|
+
|
|
142
|
+
[UnityTest]
|
|
143
|
+
public IEnumerator Movement_WithGamepad_RespondsToStick()
|
|
144
|
+
{
|
|
145
|
+
var gamepad = InputSystem.AddDevice<Gamepad>();
|
|
146
|
+
|
|
147
|
+
yield return null;
|
|
148
|
+
|
|
149
|
+
// Simulate stick input
|
|
150
|
+
Set(gamepad.leftStick, new Vector2(1, 0));
|
|
151
|
+
yield return new WaitForSeconds(0.1f);
|
|
152
|
+
|
|
153
|
+
Assert.Greater(player.transform.position.x, 0f,
|
|
154
|
+
"Player should move right");
|
|
155
|
+
|
|
156
|
+
InputSystem.RemoveDevice(gamepad);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
[UnityTest]
|
|
160
|
+
public IEnumerator InputLatency_UnderLoad_StaysAcceptable()
|
|
161
|
+
{
|
|
162
|
+
float inputTime = Time.realtimeSinceStartup;
|
|
163
|
+
bool actionTriggered = false;
|
|
164
|
+
|
|
165
|
+
player.OnJump += () => {
|
|
166
|
+
float latency = (Time.realtimeSinceStartup - inputTime) * 1000;
|
|
167
|
+
Assert.Less(latency, 100f, "Input latency should be under 100ms");
|
|
168
|
+
actionTriggered = true;
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
var keyboard = InputSystem.AddDevice<Keyboard>();
|
|
172
|
+
Press(keyboard.spaceKey);
|
|
173
|
+
|
|
174
|
+
yield return new WaitForSeconds(0.2f);
|
|
175
|
+
|
|
176
|
+
Assert.IsTrue(actionTriggered, "Jump should have triggered");
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
[Test]
|
|
180
|
+
public void Deadzone_FiltersSmallInputs()
|
|
181
|
+
{
|
|
182
|
+
var settings = new InputSettings { stickDeadzone = 0.2f };
|
|
183
|
+
|
|
184
|
+
// Input below deadzone
|
|
185
|
+
var filtered = InputProcessor.ApplyDeadzone(new Vector2(0.1f, 0.1f), settings);
|
|
186
|
+
Assert.AreEqual(Vector2.zero, filtered);
|
|
187
|
+
|
|
188
|
+
// Input above deadzone
|
|
189
|
+
filtered = InputProcessor.ApplyDeadzone(new Vector2(0.5f, 0.5f), settings);
|
|
190
|
+
Assert.AreNotEqual(Vector2.zero, filtered);
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Unreal
|
|
195
|
+
|
|
196
|
+
```cpp
|
|
197
|
+
bool FInputTest::RunTest(const FString& Parameters)
|
|
198
|
+
{
|
|
199
|
+
// Test gamepad input mapping
|
|
200
|
+
APlayerController* PC = GetWorld()->GetFirstPlayerController();
|
|
201
|
+
|
|
202
|
+
// Simulate gamepad stick input
|
|
203
|
+
FInputKeyParams Params;
|
|
204
|
+
Params.Key = EKeys::Gamepad_LeftX;
|
|
205
|
+
Params.Delta = FVector(1.0f, 0, 0);
|
|
206
|
+
PC->InputKey(Params);
|
|
207
|
+
|
|
208
|
+
// Verify movement
|
|
209
|
+
APawn* Pawn = PC->GetPawn();
|
|
210
|
+
FVector Velocity = Pawn->GetVelocity();
|
|
211
|
+
|
|
212
|
+
TestTrue("Pawn should be moving", Velocity.SizeSquared() > 0);
|
|
213
|
+
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Godot
|
|
219
|
+
|
|
220
|
+
```gdscript
|
|
221
|
+
func test_input_action_mapping():
|
|
222
|
+
# Verify action exists
|
|
223
|
+
assert_true(InputMap.has_action("jump"))
|
|
224
|
+
|
|
225
|
+
# Simulate input
|
|
226
|
+
var event = InputEventKey.new()
|
|
227
|
+
event.keycode = KEY_SPACE
|
|
228
|
+
event.pressed = true
|
|
229
|
+
|
|
230
|
+
Input.parse_input_event(event)
|
|
231
|
+
await get_tree().process_frame
|
|
232
|
+
|
|
233
|
+
assert_true(Input.is_action_just_pressed("jump"))
|
|
234
|
+
|
|
235
|
+
func test_gamepad_deadzone():
|
|
236
|
+
var input = Vector2(0.15, 0.1)
|
|
237
|
+
var deadzone = 0.2
|
|
238
|
+
|
|
239
|
+
var processed = input_processor.apply_deadzone(input, deadzone)
|
|
240
|
+
|
|
241
|
+
assert_eq(processed, Vector2.ZERO, "Small input should be filtered")
|
|
242
|
+
|
|
243
|
+
func test_controller_hotswap():
|
|
244
|
+
# Simulate controller connect
|
|
245
|
+
Input.joy_connection_changed(0, true)
|
|
246
|
+
await get_tree().process_frame
|
|
247
|
+
|
|
248
|
+
var prompt_icon = ui.get_action_prompt("jump")
|
|
249
|
+
|
|
250
|
+
assert_true(prompt_icon.texture.resource_path.contains("gamepad"),
|
|
251
|
+
"Should show gamepad prompts after controller connect")
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
## Accessibility Testing
|
|
255
|
+
|
|
256
|
+
### Requirements Checklist
|
|
257
|
+
|
|
258
|
+
- [ ] Full keyboard navigation (no mouse required)
|
|
259
|
+
- [ ] Remappable controls for all actions
|
|
260
|
+
- [ ] Button hold alternatives to rapid press
|
|
261
|
+
- [ ] Toggle options for hold actions
|
|
262
|
+
- [ ] One-handed control schemes
|
|
263
|
+
- [ ] Colorblind-friendly UI indicators
|
|
264
|
+
- [ ] Screen reader support for menus
|
|
265
|
+
|
|
266
|
+
### Accessibility Test Scenarios
|
|
267
|
+
|
|
268
|
+
```
|
|
269
|
+
SCENARIO: Keyboard-Only Navigation
|
|
270
|
+
GIVEN mouse is disconnected
|
|
271
|
+
WHEN navigating through all menus
|
|
272
|
+
THEN all menu items are reachable via keyboard
|
|
273
|
+
AND focus indicators are clearly visible
|
|
274
|
+
|
|
275
|
+
SCENARIO: Button Hold Toggle
|
|
276
|
+
GIVEN "sprint requires hold" is toggled OFF
|
|
277
|
+
WHEN sprint button is tapped once
|
|
278
|
+
THEN sprint activates
|
|
279
|
+
AND sprint stays active until tapped again
|
|
280
|
+
|
|
281
|
+
SCENARIO: Reduced Button Mashing
|
|
282
|
+
GIVEN QTE assist mode enabled
|
|
283
|
+
WHEN QTE sequence appears
|
|
284
|
+
THEN single press advances sequence
|
|
285
|
+
AND no rapid input required
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
## Performance Metrics
|
|
289
|
+
|
|
290
|
+
| Metric | Target | Maximum Acceptable |
|
|
291
|
+
| ----------------------- | --------------- | ------------------ |
|
|
292
|
+
| Input-to-render latency | < 50ms | 100ms |
|
|
293
|
+
| Polling rate match | 1:1 with device | No input loss |
|
|
294
|
+
| Deadzone processing | < 1ms | 5ms |
|
|
295
|
+
| Rebind save/load | < 100ms | 500ms |
|
|
296
|
+
|
|
297
|
+
## Best Practices
|
|
298
|
+
|
|
299
|
+
### DO
|
|
300
|
+
|
|
301
|
+
- Test with actual hardware, not just simulated input
|
|
302
|
+
- Support simultaneous keyboard + gamepad
|
|
303
|
+
- Provide sensible default deadzones
|
|
304
|
+
- Show device-appropriate button prompts
|
|
305
|
+
- Allow complete control remapping
|
|
306
|
+
- Test at different frame rates
|
|
307
|
+
|
|
308
|
+
### DON'T
|
|
309
|
+
|
|
310
|
+
- Assume controller layout (Xbox vs PlayStation)
|
|
311
|
+
- Hard-code input mappings
|
|
312
|
+
- Ignore analog input precision
|
|
313
|
+
- Skip accessibility considerations
|
|
314
|
+
- Forget about input during loading/cutscenes
|
|
315
|
+
- Neglect testing with worn/drifting controllers
|