ma-agents 3.12.2 → 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 (255) hide show
  1. package/bin/cli.js +11 -6
  2. package/docs/architecture.md +18 -0
  3. package/lib/bmad-cache/bmb/.claude-plugin/marketplace.json +1 -1
  4. package/lib/bmad-cache/bmb/_git_preserved/hooks/commit-msg.sample +52 -2
  5. package/lib/bmad-cache/bmb/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
  6. package/lib/bmad-cache/bmb/_git_preserved/index +0 -0
  7. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.idx +0 -0
  8. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.pack +0 -0
  9. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.rev +0 -0
  10. package/lib/bmad-cache/bmb/_git_preserved/packed-refs +1 -1
  11. package/lib/bmad-cache/bmb/_git_preserved/refs/heads/main +1 -1
  12. package/lib/bmad-cache/bmb/_git_preserved/shallow +1 -1
  13. package/lib/bmad-cache/bmb/package-lock.json +2 -2
  14. package/lib/bmad-cache/bmb/package.json +1 -1
  15. package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/assets/module-help.csv +1 -1
  16. package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/scripts/merge-config.py +33 -0
  17. package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/scripts/merge-help-csv.py +28 -0
  18. package/lib/bmad-cache/bmb/samples/sample-module-setup/assets/module-help.csv +1 -1
  19. package/lib/bmad-cache/bmb/samples/sample-module-setup/scripts/cleanup-legacy.py +28 -0
  20. package/lib/bmad-cache/bmb/samples/sample-module-setup/scripts/merge-config.py +33 -0
  21. package/lib/bmad-cache/bmb/samples/sample-module-setup/scripts/merge-help-csv.py +28 -0
  22. package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/assets/module-help.csv +1 -1
  23. package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/scripts/cleanup-legacy.py +28 -0
  24. package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/scripts/merge-config.py +33 -0
  25. package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/scripts/merge-help-csv.py +28 -0
  26. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/assets/Dockerfile +29 -0
  27. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/docker_setup.py +115 -0
  28. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/generate_report.py +184 -0
  29. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/pty_runner.py +171 -0
  30. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/run_evals.py +492 -0
  31. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/run_triggers.py +366 -0
  32. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/utils.py +260 -0
  33. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/assets/module-help.csv +1 -1
  34. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/scripts/cleanup-legacy.py +28 -0
  35. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/scripts/merge-config.py +33 -0
  36. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/scripts/merge-help-csv.py +28 -0
  37. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/standalone-module-template/merge-config.py +33 -0
  38. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/standalone-module-template/merge-help-csv.py +28 -0
  39. package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/tests/test-validate-module.py +74 -1
  40. package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/validate-module.py +24 -13
  41. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/assets/sample-customize-product-brief.toml +48 -33
  42. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/extract-report-json.py +287 -0
  43. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/generate-html-report.py +57 -8
  44. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/prepass-prompt-metrics.py +7 -7
  45. package/lib/bmad-cache/bmb/skills/module-help.csv +1 -1
  46. package/lib/bmad-cache/bmb/website/public/img/eval-test-types.png +0 -0
  47. package/lib/bmad-cache/cache-manifest.json +17 -18
  48. package/lib/bmad-cache/cis/_git_preserved/hooks/commit-msg.sample +52 -2
  49. package/lib/bmad-cache/cis/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
  50. package/lib/bmad-cache/cis/_git_preserved/index +0 -0
  51. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-18c8290560a98bcb7bf0676e6cc9b2ac5ca2823e.idx +0 -0
  52. package/lib/bmad-cache/cis/_git_preserved/objects/pack/{pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.pack → pack-18c8290560a98bcb7bf0676e6cc9b2ac5ca2823e.pack} +0 -0
  53. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-18c8290560a98bcb7bf0676e6cc9b2ac5ca2823e.rev +0 -0
  54. package/lib/bmad-cache/cis/_git_preserved/packed-refs +1 -1
  55. package/lib/bmad-cache/cis/_git_preserved/refs/heads/main +1 -1
  56. package/lib/bmad-cache/cis/_git_preserved/refs/tags/v0.2.1 +1 -0
  57. package/lib/bmad-cache/cis/_git_preserved/shallow +1 -1
  58. package/lib/bmad-cache/cis/package-lock.json +2 -2
  59. package/lib/bmad-cache/cis/package.json +1 -1
  60. package/lib/bmad-cache/cis/src/module-help.csv +1 -1
  61. package/lib/bmad-cache/gds/.claude-plugin/marketplace.json +4 -7
  62. package/lib/bmad-cache/gds/README.md +3 -1
  63. package/lib/bmad-cache/gds/_git_preserved/hooks/commit-msg.sample +52 -2
  64. package/lib/bmad-cache/gds/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
  65. package/lib/bmad-cache/gds/_git_preserved/index +0 -0
  66. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.idx +0 -0
  67. package/lib/bmad-cache/gds/_git_preserved/objects/pack/{pack-9427a146a90c00bb542cba038874bf9671ba4dc0.pack → pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.pack} +0 -0
  68. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.rev +0 -0
  69. package/lib/bmad-cache/gds/_git_preserved/packed-refs +1 -1
  70. package/lib/bmad-cache/gds/_git_preserved/refs/heads/main +1 -1
  71. package/lib/bmad-cache/gds/_git_preserved/shallow +1 -1
  72. package/lib/bmad-cache/gds/package.json +1 -1
  73. package/lib/bmad-cache/gds/src/agents/gds-agent-game-designer/customize.toml +5 -5
  74. package/lib/bmad-cache/gds/src/agents/gds-agent-game-dev/customize.toml +5 -5
  75. package/lib/bmad-cache/gds/src/agents/gds-agent-game-solo-dev/customize.toml +0 -5
  76. package/lib/bmad-cache/gds/src/module-help.csv +6 -12
  77. package/lib/bmad-cache/gds/src/module.yaml +1 -1
  78. package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-create-game-brief/customize.toml +97 -22
  79. package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/assets/validation-report-template.html +190 -0
  80. package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/customize.toml +99 -0
  81. package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/scripts/render-validation-html.py +290 -0
  82. package/lib/bmad-cache/gds/src/workflows/2-design/gds-prd/assets/validation-report-template.html +190 -0
  83. package/lib/bmad-cache/gds/src/workflows/2-design/gds-prd/customize.toml +84 -0
  84. package/lib/bmad-cache/gds/src/workflows/2-design/gds-ux/assets/validation-report-template.html +319 -0
  85. package/lib/bmad-cache/gds/src/workflows/2-design/gds-ux/customize.toml +101 -0
  86. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/architecture-patterns.yaml +1 -0
  87. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/decision-catalog.yaml +88 -0
  88. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/engine-mcps.yaml +124 -2
  89. package/lib/bmad-cache/gds/src/workflows/4-production/gds-investigate/customize.toml +62 -0
  90. package/lib/bmad-cache/tea/.claude-plugin/marketplace.json +1 -1
  91. package/lib/bmad-cache/tea/.github/workflows/docs.yaml +3 -3
  92. package/lib/bmad-cache/tea/.github/workflows/quality.yaml +10 -10
  93. package/lib/bmad-cache/tea/AGENTS.md +31 -0
  94. package/lib/bmad-cache/tea/CHANGELOG.md +42 -1
  95. package/lib/bmad-cache/tea/README.md +8 -5
  96. package/lib/bmad-cache/tea/_git_preserved/hooks/commit-msg.sample +52 -2
  97. package/lib/bmad-cache/tea/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
  98. package/lib/bmad-cache/tea/_git_preserved/index +0 -0
  99. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-9e4197e37df7763dd7a05c2965ee921dfd2eb617.idx +0 -0
  100. package/lib/bmad-cache/tea/_git_preserved/objects/pack/{pack-f0df537f2649464ff6c5aee241165eb9c8664227.pack → pack-9e4197e37df7763dd7a05c2965ee921dfd2eb617.pack} +0 -0
  101. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-9e4197e37df7763dd7a05c2965ee921dfd2eb617.rev +0 -0
  102. package/lib/bmad-cache/tea/_git_preserved/packed-refs +1 -1
  103. package/lib/bmad-cache/tea/_git_preserved/refs/heads/main +1 -1
  104. package/lib/bmad-cache/tea/_git_preserved/refs/tags/v1.19.0 +1 -0
  105. package/lib/bmad-cache/tea/_git_preserved/shallow +1 -1
  106. package/lib/bmad-cache/tea/docs/explanation/engagement-models.md +15 -16
  107. package/lib/bmad-cache/tea/docs/explanation/knowledge-base-system.md +2 -0
  108. package/lib/bmad-cache/tea/docs/explanation/risk-based-testing.md +1 -1
  109. package/lib/bmad-cache/tea/docs/explanation/tea-overview.md +88 -52
  110. package/lib/bmad-cache/tea/docs/explanation/testing-as-engineering.md +13 -12
  111. package/lib/bmad-cache/tea/docs/glossary/index.md +2 -2
  112. package/lib/bmad-cache/tea/docs/how-to/brownfield/use-tea-for-enterprise.md +19 -18
  113. package/lib/bmad-cache/tea/docs/how-to/brownfield/use-tea-with-existing-tests.md +1 -1
  114. package/lib/bmad-cache/tea/docs/how-to/workflows/run-nfr-assess.md +32 -26
  115. package/lib/bmad-cache/tea/docs/how-to/workflows/run-test-design.md +20 -14
  116. package/lib/bmad-cache/tea/docs/how-to/workflows/run-trace.md +3 -3
  117. package/lib/bmad-cache/tea/docs/index.md +13 -11
  118. package/lib/bmad-cache/tea/docs/reference/commands.md +37 -13
  119. package/lib/bmad-cache/tea/docs/reference/knowledge-base.md +2 -2
  120. package/lib/bmad-cache/tea/package-lock.json +2 -2
  121. package/lib/bmad-cache/tea/package.json +1 -1
  122. package/lib/bmad-cache/tea/src/agents/bmad-tea/customize.toml +20 -15
  123. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/confidence-gate.md +73 -0
  124. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/test-quality.md +1 -0
  125. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/tea-index.csv +2 -1
  126. package/lib/bmad-cache/tea/src/module-help.csv +2 -2
  127. package/lib/bmad-cache/tea/src/workflows/testarch/README.md +5 -4
  128. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/role-paths.yaml +1 -1
  129. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/tea-resources-index.yaml +1 -1
  130. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-01.md +2 -2
  131. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-07.md +1 -1
  132. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/templates/certificate-template.md +1 -1
  133. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/tea-index.csv +1 -1
  134. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/tea-index.csv +1 -1
  135. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/tea-index.csv +1 -1
  136. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/tea-index.csv +1 -1
  137. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/SKILL.md +3 -3
  138. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/checklist.md +11 -11
  139. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/instructions.md +4 -2
  140. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/nfr-report-template.md +5 -5
  141. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/tea-index.csv +1 -1
  142. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-01-load-context.md +1 -1
  143. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-01b-resume.md +1 -1
  144. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-02-define-thresholds.md +14 -3
  145. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04-evaluate-and-score.md +7 -7
  146. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04a-subagent-security.md +4 -4
  147. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04b-subagent-performance.md +4 -4
  148. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04c-subagent-reliability.md +4 -4
  149. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04d-subagent-scalability.md +4 -4
  150. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04e-aggregate-nfr.md +4 -4
  151. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-05-generate-report.md +1 -1
  152. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/workflow-plan.md +1 -1
  153. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/workflow.yaml +3 -3
  154. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/checklist.md +23 -3
  155. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/tea-index.csv +1 -1
  156. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-02-load-context.md +7 -0
  157. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-03-risk-and-testability.md +16 -2
  158. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-04-coverage-plan.md +20 -4
  159. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-05-generate-output.md +2 -0
  160. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-architecture-template.md +17 -0
  161. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-qa-template.md +15 -0
  162. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-template.md +16 -0
  163. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/tea-index.csv +1 -1
  164. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/checklist.md +1 -1
  165. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/tea-index.csv +1 -1
  166. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/trace-template.md +1 -1
  167. package/lib/bmad-cache/tea/test/test-installation-components.js +49 -0
  168. package/lib/bmad-cache/tea/website/astro.config.mjs +2 -2
  169. package/lib/bmad-cache/wds/README.md +1 -1
  170. package/lib/bmad-cache/wds/_git_preserved/hooks/commit-msg.sample +52 -2
  171. package/lib/bmad-cache/wds/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
  172. package/lib/bmad-cache/wds/_git_preserved/index +0 -0
  173. package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.idx +0 -0
  174. package/lib/bmad-cache/wds/_git_preserved/objects/pack/{pack-96877c1c09123cccb1f91c1412184b11d2b492ad.pack → pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.pack} +0 -0
  175. package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.rev +0 -0
  176. package/lib/bmad-cache/wds/_git_preserved/packed-refs +1 -1
  177. package/lib/bmad-cache/wds/_git_preserved/refs/heads/main +1 -1
  178. package/lib/bmad-cache/wds/_git_preserved/refs/tags/v0.4.3 +1 -0
  179. package/lib/bmad-cache/wds/_git_preserved/shallow +1 -1
  180. package/lib/bmad-cache/wds/eslint.config.mjs +1 -1
  181. package/lib/bmad-cache/wds/package.json +1 -1
  182. package/lib/bmad-cache/wds/src/agents/wds-agent-freya-ux/customize.toml +80 -0
  183. package/lib/bmad-cache/wds/src/agents/wds-agent-mimir-builder/customize.toml +52 -0
  184. package/lib/bmad-cache/wds/src/agents/wds-agent-saga-analyst/customize.toml +70 -0
  185. package/lib/bmad-cache/wds/src/module-help.csv +19 -19
  186. package/lib/bmad-cache/wds/src/module.yaml +28 -0
  187. package/lib/bmad-cache/wds/src/scripts/README.md +155 -0
  188. package/lib/bmad-cache/wds/src/scripts/wds-add-object.js +202 -0
  189. package/lib/bmad-cache/wds/src/scripts/wds-add-spacing.js +158 -0
  190. package/lib/bmad-cache/wds/src/scripts/wds-init-page.js +229 -0
  191. package/lib/bmad-cache/wds/src/scripts/wds-init-scenario.js +120 -0
  192. package/lib/bmad-cache/wds/src/scripts/wds-nav.js +201 -0
  193. package/lib/bmad-cache/wds/src/scripts/wds-validate.js +301 -0
  194. package/lib/bmad-cache/wds/src/workflows/wds-3-scenarios/workflow.xml +450 -0
  195. package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/workflow-specify.xml +387 -0
  196. package/lib/bmad-extension/.claude-plugin/marketplace.json.template +1 -1
  197. package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +2 -2
  198. package/lib/bmad.js +91 -7
  199. package/lib/installer.js +28 -6
  200. package/lib/mil498-templates/OCD.md +169 -169
  201. package/lib/mil498-templates/README.md +4 -4
  202. package/lib/mil498-templates/SDD.md +163 -163
  203. package/lib/mil498-templates/SDP.md +307 -307
  204. package/lib/mil498-templates/SRS.md +219 -219
  205. package/lib/mil498-templates/SSDD.md +154 -154
  206. package/lib/mil498-templates/SSS.md +225 -225
  207. package/lib/mil498-templates/STD.md +188 -188
  208. package/lib/templates/instruction-block-git.template.md +25 -0
  209. package/package.json +5 -4
  210. package/scripts/build-bmad-cache.js +143 -42
  211. package/skills/git-workflow-skill/skill.json +21 -21
  212. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-6ecd9fc6445b1281449c5ec49a6c5794708e662e.idx +0 -0
  213. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-6ecd9fc6445b1281449c5ec49a6c5794708e662e.pack +0 -0
  214. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-6ecd9fc6445b1281449c5ec49a6c5794708e662e.rev +0 -0
  215. package/lib/bmad-cache/bmb/_git_preserved/refs/remotes/origin/HEAD +0 -1
  216. package/lib/bmad-cache/bmb/_git_preserved/refs/tags/v1.7.0 +0 -1
  217. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/generate-convert-report.py +0 -406
  218. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/tests/test_generate_convert_report.py +0 -243
  219. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.idx +0 -0
  220. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.rev +0 -0
  221. package/lib/bmad-cache/cis/_git_preserved/refs/remotes/origin/HEAD +0 -1
  222. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-9427a146a90c00bb542cba038874bf9671ba4dc0.idx +0 -0
  223. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-9427a146a90c00bb542cba038874bf9671ba4dc0.rev +0 -0
  224. package/lib/bmad-cache/gds/_git_preserved/refs/remotes/origin/HEAD +0 -1
  225. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-gdd/customize.toml +0 -41
  226. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-prd/customize.toml +0 -41
  227. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-prd/data/domain-complexity.csv +0 -15
  228. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-prd/data/project-types.csv +0 -11
  229. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-ux-design/customize.toml +0 -41
  230. package/lib/bmad-cache/gds/src/workflows/2-design/gds-edit-gdd/customize.toml +0 -41
  231. package/lib/bmad-cache/gds/src/workflows/2-design/gds-edit-prd/customize.toml +0 -41
  232. package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-gdd/customize.toml +0 -41
  233. package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-prd/customize.toml +0 -41
  234. package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-prd/data/domain-complexity.csv +0 -15
  235. package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-prd/data/project-types.csv +0 -11
  236. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-f0df537f2649464ff6c5aee241165eb9c8664227.idx +0 -0
  237. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-f0df537f2649464ff6c5aee241165eb9c8664227.rev +0 -0
  238. package/lib/bmad-cache/tea/_git_preserved/refs/remotes/origin/HEAD +0 -1
  239. package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-96877c1c09123cccb1f91c1412184b11d2b492ad.idx +0 -0
  240. package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-96877c1c09123cccb1f91c1412184b11d2b492ad.rev +0 -0
  241. package/lib/bmad-cache/wds/_git_preserved/refs/remotes/origin/HEAD +0 -1
  242. package/lib/bmad-cache/wds/src/agents/wds-agent-freya-ux/bmad-skill-manifest.yaml +0 -12
  243. package/lib/bmad-cache/wds/src/agents/wds-agent-saga-analyst/bmad-skill-manifest.yaml +0 -12
  244. package/lib/bmad-cache/wds/src/workflows/wds-0-alignment-signoff/bmad-skill-manifest.yaml +0 -1
  245. package/lib/bmad-cache/wds/src/workflows/wds-0-project-setup/bmad-skill-manifest.yaml +0 -1
  246. package/lib/bmad-cache/wds/src/workflows/wds-1-project-brief/bmad-skill-manifest.yaml +0 -1
  247. package/lib/bmad-cache/wds/src/workflows/wds-2-trigger-mapping/bmad-skill-manifest.yaml +0 -1
  248. package/lib/bmad-cache/wds/src/workflows/wds-3-scenarios/bmad-skill-manifest.yaml +0 -1
  249. package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/bmad-skill-manifest.yaml +0 -1
  250. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/bmad-skill-manifest.yaml +0 -1
  251. package/lib/bmad-cache/wds/src/workflows/wds-6-asset-generation/bmad-skill-manifest.yaml +0 -1
  252. package/lib/bmad-cache/wds/src/workflows/wds-7-design-system/bmad-skill-manifest.yaml +0 -1
  253. package/lib/bmad-cache/wds/src/workflows/wds-8-product-evolution/bmad-skill-manifest.yaml +0 -1
  254. /package/lib/bmad-cache/gds/src/workflows/2-design/{gds-create-gdd → gds-gdd/assets}/game-types.csv +0 -0
  255. /package/lib/bmad-cache/gds/src/workflows/2-design/{gds-validate-gdd/data → gds-gdd/assets}/genre-complexity.csv +0 -0
@@ -0,0 +1,70 @@
1
+ # DO NOT EDIT -- overwritten on every update.
2
+ #
3
+ # Saga, the WDS Analyst, is the hardcoded identity of this agent.
4
+ # Customize the persona and menu below to shape behavior without
5
+ # changing who the agent is.
6
+
7
+ [agent]
8
+ # non-configurable skill frontmatter, create a custom agent if you need a new name/title
9
+ name = "Saga"
10
+ title = "WDS Analyst"
11
+
12
+ # --- Configurable below. Overrides merge per BMad structural rules: ---
13
+ # scalars: override wins • arrays (persistent_facts, principles, activation_steps_*): append
14
+ # arrays-of-tables with `code`/`id`: replace matching items, append new ones.
15
+
16
+ icon = "📚"
17
+
18
+ activation_steps_prepend = []
19
+ activation_steps_append = []
20
+
21
+ persistent_facts = [
22
+ "file:{project-root}/**/project-context.md",
23
+ ]
24
+
25
+ role = "Strategic Business Analyst + Product Discovery Partner"
26
+ identity = "Saga, goddess of stories and wisdom. Treats analysis like a treasure hunt — excited by clues, thrilled by patterns. Builds understanding through conversation, not interrogation. Creates the North Star documents (Product Brief + Trigger Map) that coordinate all teams from vision to delivery."
27
+ communication_style = "Asks questions that spark 'aha!' moments while structuring insights with precision. Listens deeply, reflects back naturally, confirms understanding before moving forward. Professional, direct, efficient — analysis feels like working with a skilled colleague."
28
+
29
+ principles = [
30
+ "Domain: Phases 1 (Product Brief), 2 (Trigger Mapping). Hand over other domains to specialist agents.",
31
+ "Replaces BMM Mary (Analyst) when WDS is installed.",
32
+ "Discovery through conversation — one question at a time, listen deeply.",
33
+ "Connect business goals to user psychology through trigger mapping.",
34
+ "Alliterative persona names for user archetypes (e.g. Harriet the Hairdresser).",
35
+ "Load micro-guides when entering workflows: discovery-conversation.md, trigger-mapping.md, strategic-documentation.md, dream-up-approach.md",
36
+ "When generating artifacts (not pure discovery), offer Dream Up mode selection: Workshop, Suggest, or Dream.",
37
+ "In Suggest/Dream modes: extract context from prior phases, load quality standards, execute self-review generation loop.",
38
+ "HARM: Producing output that looks complete but doesn't follow the template. The user must then correct what should have been right — wasting time, money, and trust. Plausible-looking wrong output is worse than no output. Custom formats break the pipeline for every phase downstream.",
39
+ "HELP: Reading the actual template into context before writing. Discussing decisions with the user. Delivering artifacts that the next phase can consume without auditing. The user's time goes to decisions, not corrections.",
40
+ ]
41
+
42
+ [[agent.menu]]
43
+ code = "AS"
44
+ description = "Alignment & Signoff: Secure stakeholder alignment before starting the project (Phase 0)"
45
+ skill = "bmad-wds-alignment"
46
+
47
+ [[agent.menu]]
48
+ code = "PB"
49
+ description = "Product Brief: Create comprehensive product brief with strategic foundation (Phase 1)"
50
+ skill = "bmad-wds-project-brief"
51
+
52
+ [[agent.menu]]
53
+ code = "TM"
54
+ description = "Trigger Mapping: Create trigger map with user psychology and business goals (Phase 2)"
55
+ skill = "bmad-wds-trigger-mapping"
56
+
57
+ [[agent.menu]]
58
+ code = "BP"
59
+ description = "Brainstorm Project: Guided brainstorming session to explore project vision and goals"
60
+ skill = "bmad-brainstorming"
61
+
62
+ [[agent.menu]]
63
+ code = "RS"
64
+ description = "Research: Conduct market, domain, competitive, or technical research"
65
+ skill = "bmad-market-research"
66
+
67
+ [[agent.menu]]
68
+ code = "DP"
69
+ description = "Document Project: Analyze existing project to produce useful documentation (brownfield projects)"
70
+ skill = "bmad-document-project"
@@ -1,19 +1,19 @@
1
- module,skill,display-name,menu-code,description,action,args,phase,after,before,required,output-location,outputs
2
- Web Design Studio,bmad-wds-idun,Wake Idun,IDUN,Setup and governance agent. Interviews org to configure Agent Space and authority model.,,0-wds-agents,,,false,,
3
- Web Design Studio,bmad-wds-saga,Wake Saga,SAGA,Strategic Analyst agent for Phases 1-2. Scans repos and offers next steps.,,0-wds-agents,,,false,,
4
- Web Design Studio,bmad-wds-freya,Wake Freya,FREYA,UX Designer agent for Phases 3-4. Checks prerequisites and offers next steps.,,0-wds-agents,,,false,,
5
- Web Design Studio,bmad-wds-alignment,Alignment & Signoff,AS,Stakeholder buy-in pitch and service agreement. Skip if building your own product.,,0-wds-pitch,,,false,design_artifacts/A-Product-Brief,"pitch service-agreement signoff"
6
- Web Design Studio,bmad-wds-project-brief,Project Brief,PB,Define product vision positioning and success criteria. Every design decision traces back to this.,,1-wds-strategy,,,true,design_artifacts/A-Product-Brief,project-brief.md
7
- Web Design Studio,bmad-wds-trigger-mapping,Trigger Mapping,TM,Map business goals to user psychology. Create personas and score features against driving forces.,,1-wds-strategy,bmad-wds-project-brief,,true,design_artifacts/B-Trigger-Map,"trigger-map.md personas/ feature-impact-analysis.md"
8
- Web Design Studio,bmad-wds-platform-requirements,Platform Requirements,PR,Technical boundaries: platforms devices integrations constraints. Skip for simple landing pages.,,1-wds-strategy,bmad-wds-project-brief,,false,design_artifacts/A-Product-Brief,platform-requirements.md
9
- Web Design Studio,bmad-wds-outline-scenarios,Outline Scenarios,OS,Define user journeys as persona+goal+outcome. Each connects to a Trigger Map driving force.,,2-wds-design,bmad-wds-trigger-mapping,,true,design_artifacts/C-UX-Scenarios,scenario-overview.md
10
- Web Design Studio,bmad-wds-conceptual-sketching,Conceptual Sketching,CS,Fast rough visual exploration before detailed specification. Skip for straightforward scenarios.,,2-wds-design,bmad-wds-outline-scenarios,,false,design_artifacts/C-UX-Scenarios,sketches
11
- Web Design Studio,bmad-wds-storyboarding,Storyboarding,SB,Sequence the user journey through screens with entry points transitions and error paths. Skip for simple scenarios.,,2-wds-design,bmad-wds-outline-scenarios,,false,design_artifacts/C-UX-Scenarios,storyboards
12
- Web Design Studio,bmad-wds-conceptual-specs,Conceptual Specifications,SP,Document every design decision for every element on every page. Developers build directly from this.,,2-wds-design,bmad-wds-outline-scenarios,,true,design_artifacts/C-UX-Scenarios,"page-specs scenario-specs"
13
- Web Design Studio,bmad-wds-functional-components,Functional Components,FI,Extract reusable patterns from specs into component definitions. Skip if Design System Mode None.,,2-wds-design,bmad-wds-conceptual-specs,,false,design_artifacts/C-UX-Scenarios,component-candidates
14
- Web Design Studio,bmad-wds-visual-design,Visual Design,VD,Transform specs into styled HTML prototypes with Figma round-trips.,,2-wds-design,bmad-wds-conceptual-specs,,false,design_artifacts/C-UX-Scenarios,"html-prototypes visual-designs"
15
- Web Design Studio,bmad-wds-design-system,Design System,DS,Manage component library and design tokens. Skip if Design System Mode None.,,2-wds-design,bmad-wds-functional-components,,false,design_artifacts/D-Design-System,"components/ design-tokens.md"
16
- Web Design Studio,bmad-wds-design-delivery,Design Delivery,DD,Validate specs are complete and package as DD yaml files for development handoff.,,2-wds-design,bmad-wds-conceptual-specs,,true,design_artifacts/E-Development,"delivery-package acceptance-criteria"
17
- Web Design Studio,bmad-wds-agentic-development,Agentic Development,AD,Iterative build-verify cycle with design log tracking and browser verification.,,3-wds-build,bmad-wds-design-delivery,,false,_progress/agent-experiences,experience-documents
18
- Web Design Studio,bmad-wds-usability-testing,Acceptance Testing,AT,Test on real users in their environment with retrospective think-aloud sessions.,,3-wds-build,bmad-wds-agentic-development,,false,design_artifacts/E-Development,"test-results findings"
19
- Web Design Studio,bmad-wds-product-evolution,Product Evolution,PE,Continuous improvement: feedback to Trigger Map to spec update to code to verify.,,3-wds-build,bmad-wds-usability-testing,,false,design_artifacts,updated-artifacts
1
+ module,skill,display-name,menu-code,description,action,args,phase,preceded-by,followed-by,required,output-location,outputs
2
+ Web Design Studio,bmad-wds-idun,Wake Idun,IDUN,Setup and governance agent. Interviews org to configure Agent Space and authority model.,,,0-wds-agents,,,false,,
3
+ Web Design Studio,bmad-wds-saga,Wake Saga,SAGA,Strategic Analyst agent for Phases 1-2. Scans repos and offers next steps.,,,0-wds-agents,,,false,,
4
+ Web Design Studio,bmad-wds-freya,Wake Freya,FREYA,UX Designer agent for Phases 3-4. Checks prerequisites and offers next steps.,,,0-wds-agents,,,false,,
5
+ Web Design Studio,bmad-wds-alignment,Alignment & Signoff,AS,Stakeholder buy-in pitch and service agreement. Skip if building your own product.,,,0-wds-pitch,,,false,design_artifacts/A-Product-Brief,pitch service-agreement signoff
6
+ Web Design Studio,bmad-wds-project-brief,Project Brief,PB,Define product vision positioning and success criteria. Every design decision traces back to this.,,,1-wds-strategy,,,true,design_artifacts/A-Product-Brief,project-brief.md
7
+ Web Design Studio,bmad-wds-trigger-mapping,Trigger Mapping,TM,Map business goals to user psychology. Create personas and score features against driving forces.,,,1-wds-strategy,bmad-wds-project-brief,,true,design_artifacts/B-Trigger-Map,trigger-map.md personas/ feature-impact-analysis.md
8
+ Web Design Studio,bmad-wds-platform-requirements,Platform Requirements,PR,Technical boundaries: platforms devices integrations constraints. Skip for simple landing pages.,,,1-wds-strategy,bmad-wds-project-brief,,false,design_artifacts/A-Product-Brief,platform-requirements.md
9
+ Web Design Studio,bmad-wds-outline-scenarios,Outline Scenarios,OS,Define user journeys as persona+goal+outcome. Each connects to a Trigger Map driving force.,,,2-wds-design,bmad-wds-trigger-mapping,,true,design_artifacts/C-UX-Scenarios,scenario-overview.md
10
+ Web Design Studio,bmad-wds-conceptual-sketching,Conceptual Sketching,CS,Fast rough visual exploration before detailed specification. Skip for straightforward scenarios.,,,2-wds-design,bmad-wds-outline-scenarios,,false,design_artifacts/C-UX-Scenarios,sketches
11
+ Web Design Studio,bmad-wds-storyboarding,Storyboarding,SB,Sequence the user journey through screens with entry points transitions and error paths. Skip for simple scenarios.,,,2-wds-design,bmad-wds-outline-scenarios,,false,design_artifacts/C-UX-Scenarios,storyboards
12
+ Web Design Studio,bmad-wds-conceptual-specs,Conceptual Specifications,SP,Document every design decision for every element on every page. Developers build directly from this.,,,2-wds-design,bmad-wds-outline-scenarios,,true,design_artifacts/C-UX-Scenarios,page-specs scenario-specs
13
+ Web Design Studio,bmad-wds-functional-components,Functional Components,FI,Extract reusable patterns from specs into component definitions. Skip if Design System Mode None.,,,2-wds-design,bmad-wds-conceptual-specs,,false,design_artifacts/C-UX-Scenarios,component-candidates
14
+ Web Design Studio,bmad-wds-visual-design,Visual Design,VD,Transform specs into styled HTML prototypes with Figma round-trips.,,,2-wds-design,bmad-wds-conceptual-specs,,false,design_artifacts/C-UX-Scenarios,html-prototypes visual-designs
15
+ Web Design Studio,bmad-wds-design-system,Design System,DS,Manage component library and design tokens. Skip if Design System Mode None.,,,2-wds-design,bmad-wds-functional-components,,false,design_artifacts/D-Design-System,components/ design-tokens.md
16
+ Web Design Studio,bmad-wds-design-delivery,Design Delivery,DD,Validate specs are complete and package as DD yaml files for development handoff.,,,2-wds-design,bmad-wds-conceptual-specs,,true,design_artifacts/E-Development,delivery-package acceptance-criteria
17
+ Web Design Studio,bmad-wds-agentic-development,Agentic Development,AD,Iterative build-verify cycle with design log tracking and browser verification.,,,3-wds-build,bmad-wds-design-delivery,,false,_progress/agent-experiences,experience-documents
18
+ Web Design Studio,bmad-wds-usability-testing,Acceptance Testing,AT,Test on real users in their environment with retrospective think-aloud sessions.,,,3-wds-build,bmad-wds-agentic-development,,false,design_artifacts/E-Development,test-results findings
19
+ Web Design Studio,bmad-wds-product-evolution,Product Evolution,PE,Continuous improvement: feedback to Trigger Map to spec update to code to verify.,,,3-wds-build,bmad-wds-usability-testing,,false,design_artifacts,updated-artifacts
@@ -127,6 +127,34 @@ directories:
127
127
  - "{design_artifacts}"
128
128
  - "{project_knowledge}"
129
129
 
130
+ # Agent roster — essence only. External skills (party-mode, retrospective,
131
+ # advanced-elicitation, help catalog) read these descriptors to route, display,
132
+ # and embody agents. Full persona and behavior live in each agent's
133
+ # customize.toml. `team` controls which named team(s) an agent belongs to;
134
+ # users can add their own agents (real or fictional) via
135
+ # _bmad/custom/config.toml or _bmad/custom/config.user.toml.
136
+ agents:
137
+ - code: wds-agent-freya-ux
138
+ name: Freya
139
+ title: WDS Designer
140
+ icon: "🎨"
141
+ team: ux-design
142
+ description: "Norse goddess of beauty, magic, and strategy, thinks WITH you not FOR you, starts with WHY before HOW — design without strategy is decoration, creates artifacts developers can trust: detailed specs, prototypes, and design systems. Speaks as a creative collaborator with strategic depth — asks WHY? before WHAT?, explores one challenge deeply rather than skimming many, leads with decisions and follows with rationale."
143
+
144
+ - code: wds-agent-saga-analyst
145
+ name: Saga
146
+ title: WDS Analyst
147
+ icon: "📚"
148
+ team: ux-design
149
+ description: "Goddess of stories and wisdom, treats analysis like a treasure hunt — excited by clues, thrilled by patterns, builds understanding through conversation not interrogation, creates the North Star documents (Product Brief + Trigger Map). Asks questions that spark aha! moments while structuring insights with precision — listens deeply, reflects back naturally, confirms understanding before moving forward."
150
+
151
+ - code: wds-agent-mimir-builder
152
+ name: Mimir
153
+ title: WDS Builder
154
+ icon: "🔨"
155
+ team: ux-design
156
+ description: "God of wisdom and deep knowledge — the well beneath the world tree. Implementation agent who owns the tech audit, the PRD, and the build loop. Methodical, precise, empirical. Reads Freya's Work Orders, writes formal requirements, and implements them one atomic verified task at a time. Reads the spec completely before writing a line of code. Plans before acting. Verifies before moving on."
157
+
130
158
  # WDS folder structure to create within design_artifacts directory
131
159
  wds_folders:
132
160
  - A-Product-Brief
@@ -0,0 +1,155 @@
1
+ # WDS Scaffold Scripts
2
+
3
+ Node.js scripts that enforce deterministic output from AI agents. Agents provide content via CLI flags; scripts produce structure.
4
+
5
+ All scripts use only Node.js stdlib (no external dependencies). Run from the project root.
6
+
7
+ ---
8
+
9
+ ## Scripts
10
+
11
+ ### `wds-init-scenario.js` — Initialize a scenario
12
+
13
+ Creates the scenario folder and a README index file.
14
+
15
+ ```bash
16
+ node src/scripts/wds-init-scenario.js \
17
+ --scenario "01 New User Onboarding" \
18
+ --description "New user first visit to account creation"
19
+ ```
20
+
21
+ Output: `C-UX-Scenarios/01-new-user-onboarding/README.md`
22
+
23
+ ---
24
+
25
+ ### `wds-init-page.js` — Initialize a page spec
26
+
27
+ Creates a new page spec file with all required sections pre-filled with placeholders.
28
+
29
+ ```bash
30
+ node src/scripts/wds-init-page.js \
31
+ --page "01 Start" \
32
+ --scenario "01 New User Onboarding" \
33
+ --platform "Mobile web" \
34
+ --visibility "Public"
35
+ ```
36
+
37
+ Output:
38
+ - `C-UX-Scenarios/01-new-user-onboarding/01-start/01-start.md`
39
+ - `C-UX-Scenarios/01-new-user-onboarding/01-start/sketches/`
40
+
41
+ After creating all pages in a scenario, run `wds-nav.js` to wire up navigation links.
42
+
43
+ ---
44
+
45
+ ### `wds-nav.js` — Update navigation links
46
+
47
+ Scans pages in a scenario (sorted by name) and writes correct prev/next navigation rows into each page spec.
48
+
49
+ ```bash
50
+ # One scenario
51
+ node src/scripts/wds-nav.js --scenario "01 New User Onboarding"
52
+
53
+ # All scenarios
54
+ node src/scripts/wds-nav.js --all
55
+ ```
56
+
57
+ Run this after adding or removing pages, or after reordering page numbers.
58
+
59
+ ---
60
+
61
+ ### `wds-add-object.js` — Append an object spec
62
+
63
+ Appends a structured object spec block to a page spec under a named section.
64
+
65
+ ```bash
66
+ node src/scripts/wds-add-object.js \
67
+ --page "C-UX-Scenarios/01-new-user-onboarding/01-start/01-start.md" \
68
+ --section "Hero" \
69
+ --object "Primary Headline" \
70
+ --component "H1 heading" \
71
+ --se "Välkommen" \
72
+ --en "Welcome" \
73
+ --behavior "Static display"
74
+ ```
75
+
76
+ Object ID is auto-derived: `start-hero-primary-headline`
77
+
78
+ The section heading (`### Section: Hero`) is created if it doesn't already exist.
79
+
80
+ ---
81
+
82
+ ### `wds-add-spacing.js` — Append a spacing object
83
+
84
+ Appends a spacing notation entry to the `## Spacing` section of a page spec.
85
+
86
+ ```bash
87
+ node src/scripts/wds-add-spacing.js \
88
+ --page "C-UX-Scenarios/01-new-user-onboarding/01-start/01-start.md" \
89
+ --direction v \
90
+ --type space \
91
+ --size xl \
92
+ --reason "major section boundary between hero and features"
93
+ ```
94
+
95
+ Valid directions: `v` (vertical), `h` (horizontal)
96
+ Valid types: `space`, `separator`, `line`
97
+ Valid sizes: `zero`, `sm`, `md`, `lg`, `xl`, `2xl`, `3xl`, `flex`
98
+
99
+ Spacing ID is auto-derived: `start-v-space-xl`
100
+
101
+ ---
102
+
103
+ ### `wds-validate.js` — Validate page specs
104
+
105
+ Checks page spec files for structural correctness.
106
+
107
+ ```bash
108
+ # Single page
109
+ node src/scripts/wds-validate.js \
110
+ --page "C-UX-Scenarios/01-new-user-onboarding/01-start/01-start.md"
111
+
112
+ # All pages in a scenario
113
+ node src/scripts/wds-validate.js --scenario "01 New User Onboarding"
114
+
115
+ # All scenarios
116
+ node src/scripts/wds-validate.js --all
117
+ ```
118
+
119
+ Validates:
120
+ - Required sections present
121
+ - Object IDs are kebab-case with correct page prefix
122
+ - No duplicate Object IDs
123
+ - Navigation rows (3 expected)
124
+ - Metadata table has all required properties
125
+ - Sketches folder exists
126
+ - SE + EN content present for each object
127
+
128
+ ---
129
+
130
+ ## How agents use these scripts
131
+
132
+ 1. Agent calls `wds-init-scenario.js` with scenario name and description
133
+ 2. Agent calls `wds-init-page.js` for each page in the scenario
134
+ 3. Agent calls `wds-nav.js` to wire navigation after all pages exist
135
+ 4. Agent calls `wds-add-object.js` for each UI object, providing Swedish and English content
136
+ 5. Agent calls `wds-add-spacing.js` for each spacing decision
137
+ 6. Agent calls `wds-validate.js` to confirm the spec is structurally correct before handoff
138
+
139
+ The agent never writes raw markdown — it only supplies content as flag values. The scripts own all structural decisions.
140
+
141
+ ---
142
+
143
+ ## File location convention
144
+
145
+ ```
146
+ C-UX-Scenarios/
147
+ {scenario-slug}/
148
+ README.md
149
+ {page-slug}/
150
+ {page-slug}.md
151
+ sketches/
152
+ {page-slug}-concept.jpg
153
+ ```
154
+
155
+ Example: `C-UX-Scenarios/01-new-user-onboarding/02-signup/02-signup.md`
@@ -0,0 +1,202 @@
1
+ // wds-add-object.js — WDS scaffold: append an object spec block to a page spec file
2
+ // Usage: node src/scripts/wds-add-object.js --page "C-UX-Scenarios/01-onboarding/01-start/01-start.md" \
3
+ // --section "Hero" --object "Primary Headline" --component "H1 heading" \
4
+ // --se "Välkommen" --en "Welcome"
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-add-object.js --page <path> --section <name> --object <name> [options]',
32
+ '',
33
+ 'Required:',
34
+ ' --page Path to the page spec .md file',
35
+ ' --section Section name (e.g. "Hero")',
36
+ ' --object Object name (e.g. "Primary Headline")',
37
+ '',
38
+ 'Optional:',
39
+ ' --component Component name (default: "—")',
40
+ ' --translation Translation key (auto-derived if omitted)',
41
+ ' --se Swedish text content',
42
+ ' --en English text content',
43
+ ' --behavior Behavior description (e.g. "onClick: submit form")',
44
+ ' --component-path Path to component file (default: "—")',
45
+ '',
46
+ ].join('\n'),
47
+ );
48
+ }
49
+
50
+ // Derive page slug from file path: "01-start/01-start.md" -> "01-start"
51
+ function pageSlugFromPath(filePath) {
52
+ const base = path.basename(filePath, '.md');
53
+ return base;
54
+ }
55
+
56
+ // Derive Object ID: pageSlug + sectionSlug + objectSlug
57
+ // e.g. page=01-start, section=Hero, object=Primary Headline -> 01-start-hero-primary-headline
58
+ function deriveObjectId(pageSlug, sectionName, objectName) {
59
+ // Strip leading page number from pageSlug for ID prefix
60
+ // "01-start" -> "start", "02-signup" -> "signup"
61
+ const slugParts = pageSlug.split('-');
62
+ const pagePrefix = slugParts.length > 1 ? slugParts.slice(1).join('-') : pageSlug;
63
+ const sectionSlug = toSlug(sectionName);
64
+ const objectSlug = toSlug(objectName);
65
+ return `${pagePrefix}-${sectionSlug}-${objectSlug}`;
66
+ }
67
+
68
+ function buildObjectBlock({ objectName, objectId, component, componentPath, translationKey, se, en, behavior }) {
69
+ const compDisplay = componentPath && componentPath !== '—' ? `[${component}](${componentPath})` : component || '—';
70
+
71
+ const lines = [
72
+ `#### ${objectName}`,
73
+ '',
74
+ `**OBJECT ID:** \`${objectId}\``,
75
+ '',
76
+ '| Property | Value |',
77
+ '|----------|-------|',
78
+ `| Component | ${compDisplay} |`,
79
+ `| Translation Key | \`${translationKey}\` |`,
80
+ `| SE | "${se || '—'}" |`,
81
+ `| EN | "${en || '—'}" |`,
82
+ `| Behavior | ${behavior || '—'} |`,
83
+ '',
84
+ ];
85
+
86
+ return lines.join('\n');
87
+ }
88
+
89
+ // Insert content after a section heading. Creates the section heading if it doesn't exist.
90
+ function insertUnderSection(content, sectionHeading, objectBlock) {
91
+ const lines = content.split('\n');
92
+ const headingLine = `### Section: ${sectionHeading}`;
93
+ const headingIdx = lines.findIndex((l) => l.trim() === headingLine);
94
+
95
+ if (headingIdx === -1) {
96
+ // Section doesn't exist — append it before the next ## heading after ## Page Sections
97
+ const pageSectionsIdx = lines.findIndex((l) => l.trim() === '## Page Sections');
98
+ if (pageSectionsIdx === -1) {
99
+ // Just append at end before last nav row
100
+ return content + `\n${headingLine}\n\n${objectBlock}\n`;
101
+ }
102
+
103
+ // Find end of ## Page Sections block
104
+ let insertIdx = pageSectionsIdx + 1;
105
+ while (insertIdx < lines.length) {
106
+ const t = lines[insertIdx].trim();
107
+ if (t.startsWith('## ') || t === '---') break;
108
+ insertIdx++;
109
+ }
110
+
111
+ const before = lines.slice(0, insertIdx);
112
+ const after = lines.slice(insertIdx);
113
+ return [...before, '', headingLine, '', objectBlock, ...after].join('\n');
114
+ } else {
115
+ // Find the end of this section (next ### or ## or end of file)
116
+ let insertIdx = headingIdx + 1;
117
+ // Skip blank lines after heading
118
+ while (insertIdx < lines.length && lines[insertIdx].trim() === '') insertIdx++;
119
+ // Skip comment lines
120
+ while (insertIdx < lines.length && lines[insertIdx].trim().startsWith('<!--')) insertIdx++;
121
+
122
+ // Find end of section
123
+ let endIdx = insertIdx;
124
+ while (endIdx < lines.length) {
125
+ const t = lines[endIdx].trim();
126
+ if (t.startsWith('### ') || t.startsWith('## ') || t === '---') break;
127
+ endIdx++;
128
+ }
129
+
130
+ // Insert object block before end of section
131
+ const before = lines.slice(0, endIdx);
132
+ const after = lines.slice(endIdx);
133
+ return [...before, '', objectBlock, ...after].join('\n');
134
+ }
135
+ }
136
+
137
+ function main() {
138
+ const args = parseArgs(process.argv.slice(2));
139
+
140
+ if (args.help) {
141
+ printUsage();
142
+ process.exit(0);
143
+ }
144
+
145
+ if (!args.page || !args.section || !args.object) {
146
+ process.stderr.write('Error: --page, --section, and --object are required.\n\n');
147
+ printUsage();
148
+ process.exit(1);
149
+ }
150
+
151
+ const filePath = path.resolve(args.page);
152
+
153
+ if (!fs.existsSync(filePath)) {
154
+ process.stderr.write(`Error: File not found: ${filePath}\n`);
155
+ process.exit(1);
156
+ }
157
+
158
+ const pageSlug = pageSlugFromPath(filePath);
159
+ const objectId = deriveObjectId(pageSlug, args.section, args.object);
160
+
161
+ // Auto-derive translation key from objectId
162
+ const translationKey = args.translation || objectId.replaceAll('-', '.');
163
+
164
+ const objectBlock = buildObjectBlock({
165
+ objectName: args.object,
166
+ objectId,
167
+ component: args.component || '—',
168
+ componentPath: args['component-path'] || '—',
169
+ translationKey,
170
+ se: args.se || '',
171
+ en: args.en || '',
172
+ behavior: args.behavior || '—',
173
+ });
174
+
175
+ let content;
176
+ try {
177
+ content = fs.readFileSync(filePath, 'utf8');
178
+ } catch (error) {
179
+ process.stderr.write(`Error reading file: ${error.message}\n`);
180
+ process.exit(1);
181
+ }
182
+
183
+ // Check for duplicate object ID
184
+ if (content.includes(`\`${objectId}\``)) {
185
+ process.stderr.write(`Error: Object ID already exists in file: ${objectId}\n`);
186
+ process.exit(1);
187
+ }
188
+
189
+ const updated = insertUnderSection(content, args.section, objectBlock);
190
+
191
+ try {
192
+ fs.writeFileSync(filePath, updated, 'utf8');
193
+ } catch (error) {
194
+ process.stderr.write(`Error writing file: ${error.message}\n`);
195
+ process.exit(1);
196
+ }
197
+
198
+ process.stdout.write(`✓ Added object ${objectId}\n`);
199
+ process.stdout.write(` File: ${filePath}\n`);
200
+ }
201
+
202
+ main();
@@ -0,0 +1,158 @@
1
+ // wds-add-spacing.js — WDS scaffold: append a spacing object to a page spec file
2
+ // Usage: node src/scripts/wds-add-spacing.js --page "C-UX-Scenarios/01-onboarding/01-start/01-start.md" \
3
+ // --direction v --type space --size xl --reason "major section boundary between hero and features"
4
+
5
+ 'use strict';
6
+
7
+ const fs = require('node:fs');
8
+ const path = require('node:path');
9
+
10
+ function parseArgs(argv) {
11
+ const args = {};
12
+ for (let i = 0; i < argv.length; i++) {
13
+ if (argv[i].startsWith('--')) {
14
+ const key = argv[i].slice(2);
15
+ const value = argv[i + 1] && !argv[i + 1].startsWith('--') ? argv[i + 1] : true;
16
+ args[key] = value;
17
+ if (value !== true) i++;
18
+ }
19
+ }
20
+ return args;
21
+ }
22
+
23
+ function printUsage() {
24
+ process.stdout.write(
25
+ [
26
+ 'Usage: node src/scripts/wds-add-spacing.js --page <path> --direction <v|h> --type <type> --size <size> [options]',
27
+ '',
28
+ 'Required:',
29
+ ' --page Path to the page spec .md file',
30
+ ' --direction v (vertical) or h (horizontal)',
31
+ ' --type space | separator | line',
32
+ ' --size zero | sm | md | lg | xl | 2xl | 3xl | flex',
33
+ '',
34
+ 'Optional:',
35
+ ' --reason Why this spacing exists',
36
+ '',
37
+ 'Valid directions: v, h',
38
+ 'Valid types: space, separator, line',
39
+ 'Valid sizes: zero, sm, md, lg, xl, 2xl, 3xl, flex',
40
+ '',
41
+ ].join('\n'),
42
+ );
43
+ }
44
+
45
+ const VALID_DIRECTIONS = ['v', 'h'];
46
+ const VALID_TYPES = ['space', 'separator', 'line'];
47
+ const VALID_SIZES = ['zero', 'sm', 'md', 'lg', 'xl', '2xl', '3xl', 'flex'];
48
+
49
+ // Derive page prefix from slug: "01-start" -> "start"
50
+ function pagePrefix(slug) {
51
+ const parts = slug.split('-');
52
+ return parts.length > 1 ? parts.slice(1).join('-') : slug;
53
+ }
54
+
55
+ function pageSlugFromPath(filePath) {
56
+ return path.basename(filePath, '.md');
57
+ }
58
+
59
+ function buildSpacingBlock(spacingId, reason) {
60
+ const icon = '↕';
61
+ const reasonText = reason ? ` — ${reason}` : '';
62
+ return `#### ${icon} \`${spacingId}\`${reasonText}\n`;
63
+ }
64
+
65
+ function appendToSpacingSection(content, spacingBlock) {
66
+ const lines = content.split('\n');
67
+ const spacingIdx = lines.findIndex((l) => l.trim() === '## Spacing');
68
+
69
+ if (spacingIdx === -1) {
70
+ // No spacing section — append before first ## after metadata
71
+ return content + `\n## Spacing\n\n${spacingBlock}\n`;
72
+ }
73
+
74
+ // Find end of spacing section (next ## or ---)
75
+ let endIdx = spacingIdx + 1;
76
+ while (endIdx < lines.length) {
77
+ const t = lines[endIdx].trim();
78
+ if ((t.startsWith('## ') && t !== '## Spacing') || t === '---') break;
79
+ endIdx++;
80
+ }
81
+
82
+ // Insert just before the end marker
83
+ const before = lines.slice(0, endIdx);
84
+ const after = lines.slice(endIdx);
85
+ return [...before, spacingBlock, ...after].join('\n');
86
+ }
87
+
88
+ function main() {
89
+ const args = parseArgs(process.argv.slice(2));
90
+
91
+ if (args.help) {
92
+ printUsage();
93
+ process.exit(0);
94
+ }
95
+
96
+ if (!args.page || !args.direction || !args.type || args.size === 0) {
97
+ process.stderr.write('Error: --page, --direction, --type, and --size are required.\n\n');
98
+ printUsage();
99
+ process.exit(1);
100
+ }
101
+
102
+ if (!VALID_DIRECTIONS.includes(args.direction)) {
103
+ process.stderr.write(`Error: Invalid direction "${args.direction}". Must be: ${VALID_DIRECTIONS.join(', ')}\n`);
104
+ process.exit(1);
105
+ }
106
+
107
+ if (!VALID_TYPES.includes(args.type)) {
108
+ process.stderr.write(`Error: Invalid type "${args.type}". Must be: ${VALID_TYPES.join(', ')}\n`);
109
+ process.exit(1);
110
+ }
111
+
112
+ if (!VALID_SIZES.includes(args.size)) {
113
+ process.stderr.write(`Error: Invalid size "${args.size}". Must be: ${VALID_SIZES.join(', ')}\n`);
114
+ process.exit(1);
115
+ }
116
+
117
+ const filePath = path.resolve(args.page);
118
+
119
+ if (!fs.existsSync(filePath)) {
120
+ process.stderr.write(`Error: File not found: ${filePath}\n`);
121
+ process.exit(1);
122
+ }
123
+
124
+ const slug = pageSlugFromPath(filePath);
125
+ const prefix = pagePrefix(slug);
126
+ const spacingId = `${prefix}-${args.direction}-${args.type}-${args.size}`;
127
+ const reason = args.reason || '';
128
+
129
+ let content;
130
+ try {
131
+ content = fs.readFileSync(filePath, 'utf8');
132
+ } catch (error) {
133
+ process.stderr.write(`Error reading file: ${error.message}\n`);
134
+ process.exit(1);
135
+ }
136
+
137
+ // Check for duplicate spacing ID
138
+ if (content.includes(`\`${spacingId}\``)) {
139
+ process.stderr.write(`Error: Spacing ID already exists in file: ${spacingId}\n`);
140
+ process.stderr.write('Use a different combination of direction/type/size or manually edit the file.\n');
141
+ process.exit(1);
142
+ }
143
+
144
+ const spacingBlock = buildSpacingBlock(spacingId, reason);
145
+ const updated = appendToSpacingSection(content, spacingBlock);
146
+
147
+ try {
148
+ fs.writeFileSync(filePath, updated, 'utf8');
149
+ } catch (error) {
150
+ process.stderr.write(`Error writing file: ${error.message}\n`);
151
+ process.exit(1);
152
+ }
153
+
154
+ process.stdout.write(`✓ Added spacing object ${spacingId}\n`);
155
+ process.stdout.write(` File: ${filePath}\n`);
156
+ }
157
+
158
+ main();