ma-agents 3.12.3 → 3.13.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 (254) hide show
  1. package/docs/architecture.md +18 -0
  2. package/lib/bmad-cache/bmb/.claude-plugin/marketplace.json +1 -1
  3. package/lib/bmad-cache/bmb/_git_preserved/hooks/commit-msg.sample +52 -2
  4. package/lib/bmad-cache/bmb/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
  5. package/lib/bmad-cache/bmb/_git_preserved/index +0 -0
  6. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.idx +0 -0
  7. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.pack +0 -0
  8. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.rev +0 -0
  9. package/lib/bmad-cache/bmb/_git_preserved/packed-refs +1 -1
  10. package/lib/bmad-cache/bmb/_git_preserved/refs/heads/main +1 -1
  11. package/lib/bmad-cache/bmb/_git_preserved/shallow +1 -1
  12. package/lib/bmad-cache/bmb/package-lock.json +2 -2
  13. package/lib/bmad-cache/bmb/package.json +1 -1
  14. package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/assets/module-help.csv +1 -1
  15. package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/scripts/merge-config.py +33 -0
  16. package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/scripts/merge-help-csv.py +28 -0
  17. package/lib/bmad-cache/bmb/samples/sample-module-setup/assets/module-help.csv +1 -1
  18. package/lib/bmad-cache/bmb/samples/sample-module-setup/scripts/cleanup-legacy.py +28 -0
  19. package/lib/bmad-cache/bmb/samples/sample-module-setup/scripts/merge-config.py +33 -0
  20. package/lib/bmad-cache/bmb/samples/sample-module-setup/scripts/merge-help-csv.py +28 -0
  21. package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/assets/module-help.csv +1 -1
  22. package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/scripts/cleanup-legacy.py +28 -0
  23. package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/scripts/merge-config.py +33 -0
  24. package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/scripts/merge-help-csv.py +28 -0
  25. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/assets/Dockerfile +29 -0
  26. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/docker_setup.py +115 -0
  27. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/generate_report.py +184 -0
  28. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/pty_runner.py +171 -0
  29. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/run_evals.py +492 -0
  30. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/run_triggers.py +366 -0
  31. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/utils.py +260 -0
  32. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/assets/module-help.csv +1 -1
  33. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/scripts/cleanup-legacy.py +28 -0
  34. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/scripts/merge-config.py +33 -0
  35. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/scripts/merge-help-csv.py +28 -0
  36. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/standalone-module-template/merge-config.py +33 -0
  37. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/standalone-module-template/merge-help-csv.py +28 -0
  38. package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/tests/test-validate-module.py +74 -1
  39. package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/validate-module.py +24 -13
  40. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/assets/sample-customize-product-brief.toml +48 -33
  41. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/extract-report-json.py +287 -0
  42. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/generate-html-report.py +57 -8
  43. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/prepass-prompt-metrics.py +7 -7
  44. package/lib/bmad-cache/bmb/skills/module-help.csv +1 -1
  45. package/lib/bmad-cache/bmb/website/public/img/eval-test-types.png +0 -0
  46. package/lib/bmad-cache/cache-manifest.json +17 -18
  47. package/lib/bmad-cache/cis/_git_preserved/hooks/commit-msg.sample +52 -2
  48. package/lib/bmad-cache/cis/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
  49. package/lib/bmad-cache/cis/_git_preserved/index +0 -0
  50. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-18c8290560a98bcb7bf0676e6cc9b2ac5ca2823e.idx +0 -0
  51. package/lib/bmad-cache/cis/_git_preserved/objects/pack/{pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.pack → pack-18c8290560a98bcb7bf0676e6cc9b2ac5ca2823e.pack} +0 -0
  52. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-18c8290560a98bcb7bf0676e6cc9b2ac5ca2823e.rev +0 -0
  53. package/lib/bmad-cache/cis/_git_preserved/packed-refs +1 -1
  54. package/lib/bmad-cache/cis/_git_preserved/refs/heads/main +1 -1
  55. package/lib/bmad-cache/cis/_git_preserved/refs/tags/v0.2.1 +1 -0
  56. package/lib/bmad-cache/cis/_git_preserved/shallow +1 -1
  57. package/lib/bmad-cache/cis/package-lock.json +2 -2
  58. package/lib/bmad-cache/cis/package.json +1 -1
  59. package/lib/bmad-cache/cis/src/module-help.csv +1 -1
  60. package/lib/bmad-cache/gds/.claude-plugin/marketplace.json +4 -7
  61. package/lib/bmad-cache/gds/README.md +3 -1
  62. package/lib/bmad-cache/gds/_git_preserved/hooks/commit-msg.sample +52 -2
  63. package/lib/bmad-cache/gds/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
  64. package/lib/bmad-cache/gds/_git_preserved/index +0 -0
  65. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.idx +0 -0
  66. package/lib/bmad-cache/gds/_git_preserved/objects/pack/{pack-9427a146a90c00bb542cba038874bf9671ba4dc0.pack → pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.pack} +0 -0
  67. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.rev +0 -0
  68. package/lib/bmad-cache/gds/_git_preserved/packed-refs +1 -1
  69. package/lib/bmad-cache/gds/_git_preserved/refs/heads/main +1 -1
  70. package/lib/bmad-cache/gds/_git_preserved/shallow +1 -1
  71. package/lib/bmad-cache/gds/package.json +1 -1
  72. package/lib/bmad-cache/gds/src/agents/gds-agent-game-designer/customize.toml +5 -5
  73. package/lib/bmad-cache/gds/src/agents/gds-agent-game-dev/customize.toml +5 -5
  74. package/lib/bmad-cache/gds/src/agents/gds-agent-game-solo-dev/customize.toml +0 -5
  75. package/lib/bmad-cache/gds/src/module-help.csv +6 -12
  76. package/lib/bmad-cache/gds/src/module.yaml +1 -1
  77. package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-create-game-brief/customize.toml +97 -22
  78. package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/assets/validation-report-template.html +190 -0
  79. package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/customize.toml +99 -0
  80. package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/scripts/render-validation-html.py +290 -0
  81. package/lib/bmad-cache/gds/src/workflows/2-design/gds-prd/assets/validation-report-template.html +190 -0
  82. package/lib/bmad-cache/gds/src/workflows/2-design/gds-prd/customize.toml +84 -0
  83. package/lib/bmad-cache/gds/src/workflows/2-design/gds-ux/assets/validation-report-template.html +319 -0
  84. package/lib/bmad-cache/gds/src/workflows/2-design/gds-ux/customize.toml +101 -0
  85. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/architecture-patterns.yaml +1 -0
  86. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/decision-catalog.yaml +88 -0
  87. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/engine-mcps.yaml +124 -2
  88. package/lib/bmad-cache/gds/src/workflows/4-production/gds-investigate/customize.toml +62 -0
  89. package/lib/bmad-cache/tea/.claude-plugin/marketplace.json +1 -1
  90. package/lib/bmad-cache/tea/.github/workflows/docs.yaml +3 -3
  91. package/lib/bmad-cache/tea/.github/workflows/quality.yaml +10 -10
  92. package/lib/bmad-cache/tea/AGENTS.md +31 -0
  93. package/lib/bmad-cache/tea/CHANGELOG.md +42 -1
  94. package/lib/bmad-cache/tea/README.md +8 -5
  95. package/lib/bmad-cache/tea/_git_preserved/hooks/commit-msg.sample +52 -2
  96. package/lib/bmad-cache/tea/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
  97. package/lib/bmad-cache/tea/_git_preserved/index +0 -0
  98. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-9e4197e37df7763dd7a05c2965ee921dfd2eb617.idx +0 -0
  99. package/lib/bmad-cache/tea/_git_preserved/objects/pack/{pack-f0df537f2649464ff6c5aee241165eb9c8664227.pack → pack-9e4197e37df7763dd7a05c2965ee921dfd2eb617.pack} +0 -0
  100. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-9e4197e37df7763dd7a05c2965ee921dfd2eb617.rev +0 -0
  101. package/lib/bmad-cache/tea/_git_preserved/packed-refs +1 -1
  102. package/lib/bmad-cache/tea/_git_preserved/refs/heads/main +1 -1
  103. package/lib/bmad-cache/tea/_git_preserved/refs/tags/v1.19.0 +1 -0
  104. package/lib/bmad-cache/tea/_git_preserved/shallow +1 -1
  105. package/lib/bmad-cache/tea/docs/explanation/engagement-models.md +15 -16
  106. package/lib/bmad-cache/tea/docs/explanation/knowledge-base-system.md +2 -0
  107. package/lib/bmad-cache/tea/docs/explanation/risk-based-testing.md +1 -1
  108. package/lib/bmad-cache/tea/docs/explanation/tea-overview.md +88 -52
  109. package/lib/bmad-cache/tea/docs/explanation/testing-as-engineering.md +13 -12
  110. package/lib/bmad-cache/tea/docs/glossary/index.md +2 -2
  111. package/lib/bmad-cache/tea/docs/how-to/brownfield/use-tea-for-enterprise.md +19 -18
  112. package/lib/bmad-cache/tea/docs/how-to/brownfield/use-tea-with-existing-tests.md +1 -1
  113. package/lib/bmad-cache/tea/docs/how-to/workflows/run-nfr-assess.md +32 -26
  114. package/lib/bmad-cache/tea/docs/how-to/workflows/run-test-design.md +20 -14
  115. package/lib/bmad-cache/tea/docs/how-to/workflows/run-trace.md +3 -3
  116. package/lib/bmad-cache/tea/docs/index.md +13 -11
  117. package/lib/bmad-cache/tea/docs/reference/commands.md +37 -13
  118. package/lib/bmad-cache/tea/docs/reference/knowledge-base.md +2 -2
  119. package/lib/bmad-cache/tea/package-lock.json +2 -2
  120. package/lib/bmad-cache/tea/package.json +1 -1
  121. package/lib/bmad-cache/tea/src/agents/bmad-tea/customize.toml +20 -15
  122. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/confidence-gate.md +73 -0
  123. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/test-quality.md +1 -0
  124. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/tea-index.csv +2 -1
  125. package/lib/bmad-cache/tea/src/module-help.csv +2 -2
  126. package/lib/bmad-cache/tea/src/workflows/testarch/README.md +5 -4
  127. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/role-paths.yaml +1 -1
  128. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/tea-resources-index.yaml +1 -1
  129. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-01.md +2 -2
  130. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-07.md +1 -1
  131. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/templates/certificate-template.md +1 -1
  132. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/tea-index.csv +1 -1
  133. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/tea-index.csv +1 -1
  134. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/tea-index.csv +1 -1
  135. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/tea-index.csv +1 -1
  136. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/SKILL.md +3 -3
  137. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/checklist.md +11 -11
  138. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/instructions.md +4 -2
  139. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/nfr-report-template.md +5 -5
  140. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/tea-index.csv +1 -1
  141. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-01-load-context.md +1 -1
  142. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-01b-resume.md +1 -1
  143. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-02-define-thresholds.md +14 -3
  144. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04-evaluate-and-score.md +7 -7
  145. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04a-subagent-security.md +4 -4
  146. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04b-subagent-performance.md +4 -4
  147. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04c-subagent-reliability.md +4 -4
  148. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04d-subagent-scalability.md +4 -4
  149. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04e-aggregate-nfr.md +4 -4
  150. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-05-generate-report.md +1 -1
  151. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/workflow-plan.md +1 -1
  152. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/workflow.yaml +3 -3
  153. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/checklist.md +23 -3
  154. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/tea-index.csv +1 -1
  155. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-02-load-context.md +7 -0
  156. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-03-risk-and-testability.md +16 -2
  157. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-04-coverage-plan.md +20 -4
  158. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-05-generate-output.md +2 -0
  159. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-architecture-template.md +17 -0
  160. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-qa-template.md +15 -0
  161. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-template.md +16 -0
  162. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/tea-index.csv +1 -1
  163. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/checklist.md +1 -1
  164. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/tea-index.csv +1 -1
  165. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/trace-template.md +1 -1
  166. package/lib/bmad-cache/tea/test/test-installation-components.js +49 -0
  167. package/lib/bmad-cache/tea/website/astro.config.mjs +2 -2
  168. package/lib/bmad-cache/wds/README.md +1 -1
  169. package/lib/bmad-cache/wds/_git_preserved/hooks/commit-msg.sample +52 -2
  170. package/lib/bmad-cache/wds/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
  171. package/lib/bmad-cache/wds/_git_preserved/index +0 -0
  172. package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.idx +0 -0
  173. package/lib/bmad-cache/wds/_git_preserved/objects/pack/{pack-96877c1c09123cccb1f91c1412184b11d2b492ad.pack → pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.pack} +0 -0
  174. package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.rev +0 -0
  175. package/lib/bmad-cache/wds/_git_preserved/packed-refs +1 -1
  176. package/lib/bmad-cache/wds/_git_preserved/refs/heads/main +1 -1
  177. package/lib/bmad-cache/wds/_git_preserved/refs/tags/v0.4.3 +1 -0
  178. package/lib/bmad-cache/wds/_git_preserved/shallow +1 -1
  179. package/lib/bmad-cache/wds/eslint.config.mjs +1 -1
  180. package/lib/bmad-cache/wds/package.json +1 -1
  181. package/lib/bmad-cache/wds/src/agents/wds-agent-freya-ux/customize.toml +80 -0
  182. package/lib/bmad-cache/wds/src/agents/wds-agent-mimir-builder/customize.toml +52 -0
  183. package/lib/bmad-cache/wds/src/agents/wds-agent-saga-analyst/customize.toml +70 -0
  184. package/lib/bmad-cache/wds/src/module-help.csv +19 -19
  185. package/lib/bmad-cache/wds/src/module.yaml +28 -0
  186. package/lib/bmad-cache/wds/src/scripts/README.md +155 -0
  187. package/lib/bmad-cache/wds/src/scripts/wds-add-object.js +202 -0
  188. package/lib/bmad-cache/wds/src/scripts/wds-add-spacing.js +158 -0
  189. package/lib/bmad-cache/wds/src/scripts/wds-init-page.js +229 -0
  190. package/lib/bmad-cache/wds/src/scripts/wds-init-scenario.js +120 -0
  191. package/lib/bmad-cache/wds/src/scripts/wds-nav.js +201 -0
  192. package/lib/bmad-cache/wds/src/scripts/wds-validate.js +301 -0
  193. package/lib/bmad-cache/wds/src/workflows/wds-3-scenarios/workflow.xml +450 -0
  194. package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/workflow-specify.xml +387 -0
  195. package/lib/bmad-extension/.claude-plugin/marketplace.json.template +1 -1
  196. package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +2 -2
  197. package/lib/bmad.js +91 -7
  198. package/lib/installer.js +28 -6
  199. package/lib/mil498-templates/OCD.md +169 -169
  200. package/lib/mil498-templates/README.md +4 -4
  201. package/lib/mil498-templates/SDD.md +163 -163
  202. package/lib/mil498-templates/SDP.md +307 -307
  203. package/lib/mil498-templates/SRS.md +219 -219
  204. package/lib/mil498-templates/SSDD.md +154 -154
  205. package/lib/mil498-templates/SSS.md +225 -225
  206. package/lib/mil498-templates/STD.md +188 -188
  207. package/lib/templates/instruction-block-git.template.md +25 -0
  208. package/package.json +5 -4
  209. package/scripts/build-bmad-cache.js +143 -42
  210. package/skills/git-workflow-skill/skill.json +21 -21
  211. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-6ecd9fc6445b1281449c5ec49a6c5794708e662e.idx +0 -0
  212. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-6ecd9fc6445b1281449c5ec49a6c5794708e662e.pack +0 -0
  213. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-6ecd9fc6445b1281449c5ec49a6c5794708e662e.rev +0 -0
  214. package/lib/bmad-cache/bmb/_git_preserved/refs/remotes/origin/HEAD +0 -1
  215. package/lib/bmad-cache/bmb/_git_preserved/refs/tags/v1.7.0 +0 -1
  216. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/generate-convert-report.py +0 -406
  217. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/tests/test_generate_convert_report.py +0 -243
  218. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.idx +0 -0
  219. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.rev +0 -0
  220. package/lib/bmad-cache/cis/_git_preserved/refs/remotes/origin/HEAD +0 -1
  221. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-9427a146a90c00bb542cba038874bf9671ba4dc0.idx +0 -0
  222. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-9427a146a90c00bb542cba038874bf9671ba4dc0.rev +0 -0
  223. package/lib/bmad-cache/gds/_git_preserved/refs/remotes/origin/HEAD +0 -1
  224. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-gdd/customize.toml +0 -41
  225. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-prd/customize.toml +0 -41
  226. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-prd/data/domain-complexity.csv +0 -15
  227. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-prd/data/project-types.csv +0 -11
  228. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-ux-design/customize.toml +0 -41
  229. package/lib/bmad-cache/gds/src/workflows/2-design/gds-edit-gdd/customize.toml +0 -41
  230. package/lib/bmad-cache/gds/src/workflows/2-design/gds-edit-prd/customize.toml +0 -41
  231. package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-gdd/customize.toml +0 -41
  232. package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-prd/customize.toml +0 -41
  233. package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-prd/data/domain-complexity.csv +0 -15
  234. package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-prd/data/project-types.csv +0 -11
  235. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-f0df537f2649464ff6c5aee241165eb9c8664227.idx +0 -0
  236. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-f0df537f2649464ff6c5aee241165eb9c8664227.rev +0 -0
  237. package/lib/bmad-cache/tea/_git_preserved/refs/remotes/origin/HEAD +0 -1
  238. package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-96877c1c09123cccb1f91c1412184b11d2b492ad.idx +0 -0
  239. package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-96877c1c09123cccb1f91c1412184b11d2b492ad.rev +0 -0
  240. package/lib/bmad-cache/wds/_git_preserved/refs/remotes/origin/HEAD +0 -1
  241. package/lib/bmad-cache/wds/src/agents/wds-agent-freya-ux/bmad-skill-manifest.yaml +0 -12
  242. package/lib/bmad-cache/wds/src/agents/wds-agent-saga-analyst/bmad-skill-manifest.yaml +0 -12
  243. package/lib/bmad-cache/wds/src/workflows/wds-0-alignment-signoff/bmad-skill-manifest.yaml +0 -1
  244. package/lib/bmad-cache/wds/src/workflows/wds-0-project-setup/bmad-skill-manifest.yaml +0 -1
  245. package/lib/bmad-cache/wds/src/workflows/wds-1-project-brief/bmad-skill-manifest.yaml +0 -1
  246. package/lib/bmad-cache/wds/src/workflows/wds-2-trigger-mapping/bmad-skill-manifest.yaml +0 -1
  247. package/lib/bmad-cache/wds/src/workflows/wds-3-scenarios/bmad-skill-manifest.yaml +0 -1
  248. package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/bmad-skill-manifest.yaml +0 -1
  249. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/bmad-skill-manifest.yaml +0 -1
  250. package/lib/bmad-cache/wds/src/workflows/wds-6-asset-generation/bmad-skill-manifest.yaml +0 -1
  251. package/lib/bmad-cache/wds/src/workflows/wds-7-design-system/bmad-skill-manifest.yaml +0 -1
  252. package/lib/bmad-cache/wds/src/workflows/wds-8-product-evolution/bmad-skill-manifest.yaml +0 -1
  253. /package/lib/bmad-cache/gds/src/workflows/2-design/{gds-create-gdd → gds-gdd/assets}/game-types.csv +0 -0
  254. /package/lib/bmad-cache/gds/src/workflows/2-design/{gds-validate-gdd/data → gds-gdd/assets}/genre-complexity.csv +0 -0
@@ -0,0 +1,301 @@
1
+ // wds-validate.js — WDS scaffold: validate page spec files for correctness
2
+ // Usage: node src/scripts/wds-validate.js --page "C-UX-Scenarios/01-onboarding/01-start/01-start.md"
3
+ // node src/scripts/wds-validate.js --scenario "01 Onboarding"
4
+ // node src/scripts/wds-validate.js --all
5
+
6
+ 'use strict';
7
+
8
+ const fs = require('node:fs');
9
+ const path = require('node:path');
10
+
11
+ function parseArgs(argv) {
12
+ const args = {};
13
+ for (let i = 0; i < argv.length; i++) {
14
+ if (argv[i].startsWith('--')) {
15
+ const key = argv[i].slice(2);
16
+ const value = argv[i + 1] && !argv[i + 1].startsWith('--') ? argv[i + 1] : true;
17
+ args[key] = value;
18
+ if (value !== true) i++;
19
+ }
20
+ }
21
+ return args;
22
+ }
23
+
24
+ function toSlug(str) {
25
+ return str.toLowerCase().replaceAll(/\s+/g, '-');
26
+ }
27
+
28
+ function printUsage() {
29
+ process.stdout.write(
30
+ [
31
+ 'Usage: node src/scripts/wds-validate.js --page <path>',
32
+ ' node src/scripts/wds-validate.js --scenario "01 Onboarding"',
33
+ ' node src/scripts/wds-validate.js --all',
34
+ '',
35
+ 'Options:',
36
+ ' --page Path to a single page spec .md file',
37
+ ' --scenario Scenario name or slug to validate all pages',
38
+ ' --all Validate all scenarios',
39
+ ' --output Base path (default: current directory)',
40
+ '',
41
+ ].join('\n'),
42
+ );
43
+ }
44
+
45
+ const REQUIRED_SECTIONS = [
46
+ '## Overview',
47
+ '## Page Metadata',
48
+ '## Layout Structure',
49
+ '## Spacing',
50
+ '## Typography',
51
+ '## Page Sections',
52
+ '## Page States',
53
+ '## Checklist',
54
+ ];
55
+
56
+ const REQUIRED_METADATA_PROPS = ['Scenario', 'Page Number', 'Platform', 'Page Type', 'Viewport', 'Interaction', 'Visibility'];
57
+
58
+ const KEBAB_CASE_RE = /^[a-z0-9]+(-[a-z0-9]+)*$/;
59
+
60
+ // Extract all OBJECT IDs from content: lines matching **OBJECT ID:** `...`
61
+ function extractObjectIds(content) {
62
+ const ids = [];
63
+ const re = /\*\*OBJECT ID:\*\*\s+`([^`]+)`/g;
64
+ let m;
65
+ while ((m = re.exec(content)) !== null) {
66
+ ids.push(m[1]);
67
+ }
68
+ return ids;
69
+ }
70
+
71
+ // Extract all spacing IDs from content: lines matching #### ↕ `...`
72
+ function extractSpacingIds(content) {
73
+ const ids = [];
74
+ const re = /####\s+[↕↔]\s+`([^`]+)`/g;
75
+ let m;
76
+ while ((m = re.exec(content)) !== null) {
77
+ ids.push(m[1]);
78
+ }
79
+ return ids;
80
+ }
81
+
82
+ // Count nav rows: lines starting with '←'
83
+ function countNavRows(content) {
84
+ const lines = content.split('\n');
85
+ return lines.filter((l) => l.trim().startsWith('←')).length;
86
+ }
87
+
88
+ // Check Swedish + English content: for each object block, look for SE and EN rows
89
+ function checkObjectContent(content) {
90
+ const missing = [];
91
+ // Split into object blocks by #### heading
92
+ const blocks = content.split(/(?=#### )/);
93
+ for (const block of blocks) {
94
+ const idMatch = block.match(/\*\*OBJECT ID:\*\*\s+`([^`]+)`/);
95
+ if (!idMatch) continue;
96
+ const objectId = idMatch[1];
97
+ // Check for SE row
98
+ if (block.includes('| SE |')) {
99
+ const seMatch = block.match(/\| SE \| "([^"]*)"/);
100
+ if (!seMatch || seMatch[1].trim() === '' || seMatch[1].trim() === '—') {
101
+ missing.push(`Object "${objectId}" has empty SE content`);
102
+ }
103
+ } else {
104
+ missing.push(`Object "${objectId}" missing SE content field`);
105
+ }
106
+ // Check for EN row
107
+ if (block.includes('| EN |')) {
108
+ const enMatch = block.match(/\| EN \| "([^"]*)"/);
109
+ if (!enMatch || enMatch[1].trim() === '' || enMatch[1].trim() === '—') {
110
+ missing.push(`Object "${objectId}" has empty EN content`);
111
+ }
112
+ } else {
113
+ missing.push(`Object "${objectId}" missing EN content field`);
114
+ }
115
+ }
116
+ return missing;
117
+ }
118
+
119
+ function validatePage(filePath) {
120
+ const errors = [];
121
+ const warnings = [];
122
+
123
+ if (!fs.existsSync(filePath)) {
124
+ return { errors: [`File not found: ${filePath}`], warnings: [], objectCount: 0, spacingCount: 0 };
125
+ }
126
+
127
+ let content;
128
+ try {
129
+ content = fs.readFileSync(filePath, 'utf8');
130
+ } catch (error) {
131
+ return { errors: [`Cannot read file: ${error.message}`], warnings: [], objectCount: 0, spacingCount: 0 };
132
+ }
133
+
134
+ const pageSlug = path.basename(filePath, '.md');
135
+ // Derive page prefix (strip leading number): "01-start" -> "start"
136
+ const slugParts = pageSlug.split('-');
137
+ const pagePrefix = slugParts.length > 1 ? slugParts.slice(1).join('-') : pageSlug;
138
+
139
+ // 1. Required sections
140
+ for (const section of REQUIRED_SECTIONS) {
141
+ if (!content.includes(section)) {
142
+ errors.push(`Missing section: ${section}`);
143
+ }
144
+ }
145
+
146
+ // 2. Object IDs — kebab-case and prefix
147
+ const objectIds = extractObjectIds(content);
148
+ const seenIds = new Set();
149
+
150
+ for (const id of objectIds) {
151
+ // Kebab-case check
152
+ if (!KEBAB_CASE_RE.test(id)) {
153
+ errors.push(`Object ID not in kebab-case: \`${id}\``);
154
+ }
155
+ // Prefix check
156
+ if (!id.startsWith(pagePrefix + '-')) {
157
+ errors.push(`Object ID missing prefix: \`${id}\` (expected prefix: ${pagePrefix}-)`);
158
+ }
159
+ // Duplicate check
160
+ if (seenIds.has(id)) {
161
+ errors.push(`Duplicate Object ID: \`${id}\``);
162
+ }
163
+ seenIds.add(id);
164
+ }
165
+
166
+ // 3. Navigation rows (expect 3)
167
+ const navCount = countNavRows(content);
168
+ if (navCount < 3) {
169
+ errors.push(`Navigation rows: found ${navCount}, expected 3`);
170
+ }
171
+
172
+ // 4. Metadata table properties
173
+ for (const prop of REQUIRED_METADATA_PROPS) {
174
+ if (!content.includes(`| ${prop} |`)) {
175
+ errors.push(`Metadata table missing property: ${prop}`);
176
+ }
177
+ }
178
+
179
+ // 5. Sketches folder
180
+ const sketchesDir = path.join(path.dirname(filePath), 'sketches');
181
+ if (!fs.existsSync(sketchesDir)) {
182
+ warnings.push('Sketches folder does not exist');
183
+ }
184
+
185
+ // 6. Swedish + English content check
186
+ const contentWarnings = checkObjectContent(content);
187
+ for (const w of contentWarnings) {
188
+ warnings.push(w);
189
+ }
190
+
191
+ // Spacing IDs
192
+ const spacingIds = extractSpacingIds(content);
193
+
194
+ return {
195
+ errors,
196
+ warnings,
197
+ objectCount: objectIds.length,
198
+ spacingCount: spacingIds.length,
199
+ };
200
+ }
201
+
202
+ function formatResult(label, result) {
203
+ const { errors, warnings, objectCount, spacingCount } = result;
204
+ if (errors.length === 0 && warnings.length === 0) {
205
+ return `✓ ${label} — valid (${objectCount} objects, ${spacingCount} spacing objects)\n`;
206
+ }
207
+
208
+ const lines = [];
209
+ if (errors.length > 0) {
210
+ lines.push(`✗ ${label} — ${errors.length} error(s):`);
211
+ for (const e of errors) lines.push(` - ${e}`);
212
+ }
213
+ if (warnings.length > 0) {
214
+ lines.push(` ${warnings.length} warning(s):`);
215
+ for (const w of warnings) lines.push(` ! ${w}`);
216
+ }
217
+ return lines.join('\n') + '\n';
218
+ }
219
+
220
+ function getPageFiles(scenarioDir) {
221
+ let entries;
222
+ try {
223
+ entries = fs.readdirSync(scenarioDir, { withFileTypes: true });
224
+ } catch {
225
+ return [];
226
+ }
227
+
228
+ return entries
229
+ .filter((e) => e.isDirectory())
230
+ .map((e) => {
231
+ const mdFile = path.join(scenarioDir, e.name, `${e.name}.md`);
232
+ return fs.existsSync(mdFile) ? mdFile : null;
233
+ })
234
+ .filter(Boolean)
235
+ .sort();
236
+ }
237
+
238
+ function main() {
239
+ const args = parseArgs(process.argv.slice(2));
240
+
241
+ if (args.help) {
242
+ printUsage();
243
+ process.exit(0);
244
+ }
245
+
246
+ if (!args.page && !args.scenario && !args.all) {
247
+ process.stderr.write('Error: --page, --scenario, or --all is required.\n\n');
248
+ printUsage();
249
+ process.exit(1);
250
+ }
251
+
252
+ const outputBase = args.output || process.cwd();
253
+ const scenariosBase = path.join(outputBase, 'C-UX-Scenarios');
254
+
255
+ let filesToValidate = [];
256
+
257
+ if (args.page) {
258
+ filesToValidate = [path.resolve(args.page)];
259
+ } else if (args.scenario) {
260
+ const scenarioSlug = toSlug(args.scenario);
261
+ const scenarioDir = path.join(scenariosBase, scenarioSlug);
262
+ filesToValidate = getPageFiles(scenarioDir);
263
+ if (filesToValidate.length === 0) {
264
+ process.stdout.write(`No pages found in scenario: ${scenarioSlug}\n`);
265
+ process.exit(0);
266
+ }
267
+ } else if (args.all) {
268
+ if (!fs.existsSync(scenariosBase)) {
269
+ process.stderr.write(`Error: C-UX-Scenarios not found at: ${scenariosBase}\n`);
270
+ process.exit(1);
271
+ }
272
+ let entries;
273
+ try {
274
+ entries = fs.readdirSync(scenariosBase, { withFileTypes: true });
275
+ } catch (error) {
276
+ process.stderr.write(`Error reading scenarios: ${error.message}\n`);
277
+ process.exit(1);
278
+ }
279
+ for (const e of entries.filter((e) => e.isDirectory()).sort()) {
280
+ const pages = getPageFiles(path.join(scenariosBase, e.name));
281
+ filesToValidate.push(...pages);
282
+ }
283
+ if (filesToValidate.length === 0) {
284
+ process.stdout.write('No page specs found.\n');
285
+ process.exit(0);
286
+ }
287
+ }
288
+
289
+ let hasErrors = false;
290
+
291
+ for (const filePath of filesToValidate) {
292
+ const label = path.basename(filePath);
293
+ const result = validatePage(filePath);
294
+ process.stdout.write(formatResult(label, result));
295
+ if (result.errors.length > 0) hasErrors = true;
296
+ }
297
+
298
+ process.exit(hasErrors ? 1 : 0);
299
+ }
300
+
301
+ main();