ma-agents 3.4.9 → 3.5.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 (826) hide show
  1. package/AiAudit.md +7 -0
  2. package/README.md +78 -29
  3. package/_bmad-output/implementation-artifacts/17-10-rework-generate-backlog.md +237 -0
  4. package/_bmad-output/implementation-artifacts/17-11-rework-add-to-sprint.md +339 -0
  5. package/_bmad-output/implementation-artifacts/17-12-rework-remove-from-sprint.md +348 -0
  6. package/_bmad-output/implementation-artifacts/17-13-rework-sprint-status-view.md +383 -0
  7. package/_bmad-output/implementation-artifacts/17-14-rework-cleanup-done.md +348 -0
  8. package/_bmad-output/implementation-artifacts/17-15-rework-bmad-sprint-planning.md +385 -0
  9. package/_bmad-output/implementation-artifacts/17-16-rework-add-sprint.md +362 -0
  10. package/_bmad-output/implementation-artifacts/17-17-rework-modify-sprint.md +477 -0
  11. package/_bmad-output/implementation-artifacts/17-18-rework-bmad-dev-story.md +377 -0
  12. package/_bmad-output/implementation-artifacts/17-19-rework-story-status-lookup.md +301 -0
  13. package/_bmad-output/implementation-artifacts/17-20-rework-bmad-sprint-status.md +508 -0
  14. package/_bmad-output/implementation-artifacts/17-21-new-close-sprint.md +455 -0
  15. package/_bmad-output/implementation-artifacts/17-22-jira-adapter-pattern.md +325 -0
  16. package/_bmad-output/implementation-artifacts/17-23-migration-deprecation-old-files.md +403 -0
  17. package/_bmad-output/implementation-artifacts/17-24-rework-prioritize-backlog.md +344 -0
  18. package/_bmad-output/implementation-artifacts/17-9-unified-sprint-status-schema.md +279 -0
  19. package/_bmad-output/implementation-artifacts/4-1-vs-agent-registry-entry.md +173 -0
  20. package/_bmad-output/implementation-artifacts/4-2-vs-skill-template-format.md +129 -0
  21. package/_bmad-output/implementation-artifacts/5-5-explicit-parameter-passing.md +274 -0
  22. package/_bmad-output/implementation-artifacts/5-6-fix-space-in-path-bug.md +186 -0
  23. package/_bmad-output/implementation-artifacts/7-1-test-infrastructure-setup.md +144 -0
  24. package/_bmad-output/implementation-artifacts/7-2-installer-pipeline-tests.md +132 -0
  25. package/_bmad-output/implementation-artifacts/7-3-bmad-pipeline-tests.md +119 -0
  26. package/_bmad-output/implementation-artifacts/7-4-cli-command-routing-tests.md +162 -0
  27. package/_bmad-output/implementation-artifacts/deferred-work.md +9 -0
  28. package/_bmad-output/implementation-artifacts/done/1-1-ci-cd-yes-flag.md +200 -0
  29. package/_bmad-output/implementation-artifacts/done/10-1-ensure-bmad-output-not-gitignored.md +172 -0
  30. package/_bmad-output/implementation-artifacts/done/10-2-document-bmad-output-policy.md +102 -0
  31. package/_bmad-output/implementation-artifacts/done/11-1-auto-bug-detection-skill.md +119 -0
  32. package/_bmad-output/implementation-artifacts/done/11-2-bug-story-extension-workflow.md +132 -0
  33. package/_bmad-output/implementation-artifacts/done/11-3-integrate-bug-detection-code-review.md +111 -0
  34. package/_bmad-output/implementation-artifacts/done/12-1-add-sprint-workflow.md +126 -0
  35. package/_bmad-output/implementation-artifacts/done/12-2-add-to-sprint-workflow.md +137 -0
  36. package/_bmad-output/implementation-artifacts/done/12-3-modify-sprint-workflow.md +127 -0
  37. package/_bmad-output/implementation-artifacts/done/12-4-sprint-status-assigned-items.md +129 -0
  38. package/_bmad-output/implementation-artifacts/done/13-1-project-context-template-and-generator.md +179 -0
  39. package/_bmad-output/implementation-artifacts/done/13-2-install-pipeline-integration.md +138 -0
  40. package/_bmad-output/implementation-artifacts/done/13-3-bmad-critical-actions-update.md +150 -0
  41. package/_bmad-output/implementation-artifacts/done/13-4-retrospective-expansion-trigger.md +128 -0
  42. package/_bmad-output/implementation-artifacts/done/13-5-document-project-context-generation.md +118 -0
  43. package/_bmad-output/implementation-artifacts/done/15-1-bump-bmad-method-to-6-2-1.md +132 -0
  44. package/_bmad-output/implementation-artifacts/done/15-2-restructure-extension-module.md +174 -0
  45. package/_bmad-output/implementation-artifacts/done/15-3-convert-custom-agents-to-skill-folders.md +183 -0
  46. package/_bmad-output/implementation-artifacts/done/15-4-convert-mil498-workflows-to-skill-md.md +252 -0
  47. package/_bmad-output/implementation-artifacts/done/15-5-convert-sre-devops-cyber-workflows.md +232 -0
  48. package/_bmad-output/implementation-artifacts/done/15-6-separate-built-in-agent-customizations.md +163 -0
  49. package/_bmad-output/implementation-artifacts/done/15-7-migration-detection-and-upgrade-path.md +133 -0
  50. package/_bmad-output/implementation-artifacts/done/15-8-validate-migrated-agents-and-workflows.md +172 -0
  51. package/_bmad-output/implementation-artifacts/done/15-8-validation-report.md +342 -0
  52. package/_bmad-output/implementation-artifacts/done/16-1-repository-layout-wizard.md +223 -0
  53. package/_bmad-output/implementation-artifacts/done/16-2-config-storage-and-cross-reference.md +180 -0
  54. package/_bmad-output/implementation-artifacts/done/16-3-project-context-multi-repo-section.md +136 -0
  55. package/_bmad-output/implementation-artifacts/done/16-4-validate-cross-repo-path-resolution.md +137 -0
  56. package/_bmad-output/implementation-artifacts/done/16-4-validation-report.md +79 -0
  57. package/_bmad-output/implementation-artifacts/done/16-5-fix-config-lost-on-update.md +110 -0
  58. package/_bmad-output/implementation-artifacts/done/16-6-repo-sync-check-skill.md +116 -0
  59. package/_bmad-output/implementation-artifacts/done/16-7-portable-path-storage.md +109 -0
  60. package/_bmad-output/implementation-artifacts/done/16-8-cicd-remote-mode.md +97 -0
  61. package/_bmad-output/implementation-artifacts/done/16-9-reconfigure-layout-workflow.md +125 -0
  62. package/_bmad-output/implementation-artifacts/done/17-1-sprint-entity-model.md +322 -0
  63. package/_bmad-output/implementation-artifacts/done/17-2-flat-backlog-model.md +264 -0
  64. package/_bmad-output/implementation-artifacts/done/17-3-bug-as-story-type.md +208 -0
  65. package/_bmad-output/implementation-artifacts/done/17-4-backlog-to-sprint-workflow.md +209 -0
  66. package/_bmad-output/implementation-artifacts/done/17-5-sprint-to-backlog-workflow.md +221 -0
  67. package/_bmad-output/implementation-artifacts/done/17-6-done-item-cleanup.md +273 -0
  68. package/_bmad-output/implementation-artifacts/done/17-7-multi-criteria-prioritization.md +235 -0
  69. package/_bmad-output/implementation-artifacts/done/17-8-rework-sprint-status-display.md +285 -0
  70. package/_bmad-output/implementation-artifacts/done/2-1-cpp-coding-standards-skill.md +188 -0
  71. package/_bmad-output/implementation-artifacts/done/2-2-csharp-coding-standards-skill.md +211 -0
  72. package/_bmad-output/implementation-artifacts/done/2-3-python-coding-standards-skill.md +189 -0
  73. package/_bmad-output/implementation-artifacts/done/3-1-skill-scaffolding-tool.md +184 -0
  74. package/_bmad-output/implementation-artifacts/done/3-2-skill-validation-tool.md +178 -0
  75. package/_bmad-output/implementation-artifacts/done/3-3-mandatory-skill-designation.md +136 -0
  76. package/_bmad-output/implementation-artifacts/done/3-4-bmad-persona-customization-tooling.md +141 -0
  77. package/_bmad-output/implementation-artifacts/done/3-5-specialized-agent-development-tooling.md +145 -0
  78. package/_bmad-output/implementation-artifacts/done/5-1-bmad-method-direct-dependency.md +188 -0
  79. package/_bmad-output/implementation-artifacts/done/5-2-bmad-cache-build-script.md +219 -0
  80. package/_bmad-output/implementation-artifacts/done/5-3-pre-populate-bmad-cache.md +234 -0
  81. package/_bmad-output/implementation-artifacts/done/5-4-validate-bundled-installation.md +274 -0
  82. package/_bmad-output/implementation-artifacts/done/6-1-methodology-presentation-bundle.md +173 -0
  83. package/_bmad-output/implementation-artifacts/done/8-1-move-instruction-injection-to-top.md +131 -0
  84. package/_bmad-output/implementation-artifacts/done/8-2-agent-aware-injection-strategy.md +124 -0
  85. package/_bmad-output/implementation-artifacts/done/8-3-create-bmad-extension-module.md +187 -0
  86. package/_bmad-output/implementation-artifacts/done/8-4-integration-verification.md +102 -0
  87. package/_bmad-output/implementation-artifacts/done/8-5-per-agent-enforcement-hooks-research.md +126 -0
  88. package/_bmad-output/implementation-artifacts/done/8-6-context-persistence-research.md +101 -0
  89. package/_bmad-output/implementation-artifacts/done/9-1-register-opencode-agent.md +73 -0
  90. package/_bmad-output/implementation-artifacts/done/9-2-json-merge-injection.md +91 -0
  91. package/_bmad-output/implementation-artifacts/done/9-3-json-merge-existing.md +113 -0
  92. package/_bmad-output/implementation-artifacts/done/9-4-json-error-handling.md +90 -0
  93. package/_bmad-output/implementation-artifacts/epic-11-12-shared-guardrails.md +53 -0
  94. package/_bmad-output/implementation-artifacts/epic-15-adversarial-fixes.md +287 -0
  95. package/_bmad-output/implementation-artifacts/epic-16-adversarial-review.md +49 -0
  96. package/_bmad-output/implementation-artifacts/epic-16-edge-case-review.md +230 -0
  97. package/_bmad-output/implementation-artifacts/epic-17-adversarial-review.md +37 -0
  98. package/_bmad-output/implementation-artifacts/epic-17-edge-case-review.md +140 -0
  99. package/_bmad-output/implementation-artifacts/sprint-status.yaml +83 -0
  100. package/_bmad-output/methodology/BMAD_AI_Development_Training.pptx +0 -0
  101. package/_bmad-output/methodology/version.json +7 -0
  102. package/_bmad-output/planning-artifacts/adapter-pattern-spec.md +508 -0
  103. package/_bmad-output/planning-artifacts/architecture.md +1619 -0
  104. package/_bmad-output/planning-artifacts/domain-research-roocode-2026-03-31.md +295 -0
  105. package/_bmad-output/planning-artifacts/epics.md +3287 -0
  106. package/_bmad-output/planning-artifacts/mil498-workflow-audit.md +290 -0
  107. package/_bmad-output/planning-artifacts/prd.md +684 -0
  108. package/_bmad-output/planning-artifacts/product-brief-agents-2026-03-08.md +214 -0
  109. package/_bmad-output/planning-artifacts/sprint-status-schema.md +506 -0
  110. package/_bmad-output/project-context.md +47 -0
  111. package/lib/bmad-extension/module-help.csv +26 -4
  112. package/lib/bmad-extension/skills/add-sprint/SKILL.md +126 -72
  113. package/lib/bmad-extension/skills/add-to-sprint/SKILL.md +124 -96
  114. package/{.opencode/skills/add-to-sprint → lib/bmad-extension/skills/bmad-dev-story}/bmad-skill-manifest.yaml +1 -1
  115. package/{.opencode → lib/bmad-extension}/skills/bmad-dev-story/checklist.md +13 -13
  116. package/{.opencode → lib/bmad-extension}/skills/bmad-dev-story/workflow.md +103 -44
  117. package/lib/bmad-extension/skills/bmad-ma-agent-mil498/SKILL.md +2 -1
  118. package/lib/bmad-extension/skills/bmad-sprint-planning/SKILL.md +6 -0
  119. package/lib/bmad-extension/skills/bmad-sprint-planning/bmad-skill-manifest.yaml +3 -0
  120. package/lib/bmad-extension/skills/bmad-sprint-planning/checklist.md +74 -0
  121. package/lib/bmad-extension/skills/bmad-sprint-planning/sprint-status-template.yaml +89 -0
  122. package/lib/bmad-extension/skills/bmad-sprint-planning/workflow.md +372 -0
  123. package/lib/bmad-extension/skills/bmad-sprint-status/SKILL.md +6 -0
  124. package/{.opencode/skills/create-bug-story → lib/bmad-extension/skills/bmad-sprint-status}/bmad-skill-manifest.yaml +1 -1
  125. package/lib/bmad-extension/skills/bmad-sprint-status/workflow.md +434 -0
  126. package/lib/bmad-extension/skills/cleanup-done/SKILL.md +215 -0
  127. package/lib/bmad-extension/skills/close-sprint/SKILL.md +379 -0
  128. package/{.opencode/skills/add-sprint → lib/bmad-extension/skills/close-sprint}/bmad-skill-manifest.yaml +1 -1
  129. package/lib/bmad-extension/skills/generate-backlog/SKILL.md +195 -0
  130. package/lib/bmad-extension/skills/mil498-requirement-quality/SKILL.md +105 -0
  131. package/lib/bmad-extension/skills/mil498-requirement-quality/bmad-skill-manifest.yaml +5 -0
  132. package/lib/bmad-extension/skills/mil498-ssdd/prompts/05-validate.md +4 -0
  133. package/lib/bmad-extension/skills/modify-sprint/SKILL.md +227 -175
  134. package/lib/bmad-extension/skills/prioritize-backlog/SKILL.md +217 -0
  135. package/lib/bmad-extension/skills/remove-from-sprint/SKILL.md +184 -0
  136. package/lib/bmad-extension/skills/sprint-status-view/SKILL.md +165 -190
  137. package/lib/bmad-extension/workflows/add-sprint/workflow.md +125 -71
  138. package/lib/bmad-extension/workflows/add-to-sprint/workflow.md +123 -95
  139. package/lib/bmad-extension/workflows/modify-sprint/workflow.md +228 -176
  140. package/lib/bmad-extension/workflows/remove-from-sprint/workflow.md +164 -0
  141. package/lib/bmad-extension/workflows/sprint-status-view/workflow.md +162 -189
  142. package/mil498/README.md +4 -0
  143. package/out.txt +0 -0
  144. package/package.json +1 -1
  145. package/skills/add-sprint/SKILL.md +165 -0
  146. package/skills/add-sprint/skill.json +7 -0
  147. package/skills/add-to-sprint/SKILL.md +231 -0
  148. package/skills/add-to-sprint/skill.json +7 -0
  149. package/skills/bmad-sprint-planning/SKILL.md +321 -0
  150. package/skills/bmad-sprint-planning/skill.json +7 -0
  151. package/skills/bmad-sprint-status/SKILL.md +273 -0
  152. package/skills/bmad-sprint-status/skill.json +7 -0
  153. package/skills/cleanup-done/SKILL.md +203 -0
  154. package/skills/cleanup-done/skill.json +7 -0
  155. package/skills/close-sprint/SKILL.md +370 -0
  156. package/skills/close-sprint/skill.json +7 -0
  157. package/skills/generate-backlog/SKILL.md +178 -0
  158. package/skills/generate-backlog/skill.json +7 -0
  159. package/skills/modify-sprint/SKILL.md +302 -0
  160. package/skills/modify-sprint/skill.json +7 -0
  161. package/skills/prioritize-backlog/SKILL.md +203 -0
  162. package/skills/prioritize-backlog/skill.json +7 -0
  163. package/skills/remove-from-sprint/SKILL.md +174 -0
  164. package/skills/remove-from-sprint/skill.json +7 -0
  165. package/skills/sprint-status-view/SKILL.md +173 -0
  166. package/skills/sprint-status-view/skill.json +7 -0
  167. package/skills/story-status-lookup/SKILL.md +21 -6
  168. package/skills/story-status-lookup/skill.json +2 -2
  169. package/test/extension-module-restructure.test.js +12 -11
  170. package/test/migration-validation.test.js +10 -10
  171. package/.opencode/skills/.ma-agents.json +0 -241
  172. package/.opencode/skills/MANIFEST.yaml +0 -254
  173. package/.opencode/skills/add-sprint/SKILL.md +0 -207
  174. package/.opencode/skills/add-to-sprint/SKILL.md +0 -189
  175. package/.opencode/skills/ai-audit-trail/SKILL.md +0 -23
  176. package/.opencode/skills/auto-bug-detection/SKILL.md +0 -169
  177. package/.opencode/skills/bmad-advanced-elicitation/SKILL.md +0 -137
  178. package/.opencode/skills/bmad-advanced-elicitation/methods.csv +0 -51
  179. package/.opencode/skills/bmad-agent-analyst/SKILL.md +0 -56
  180. package/.opencode/skills/bmad-agent-analyst/bmad-skill-manifest.yaml +0 -11
  181. package/.opencode/skills/bmad-agent-architect/SKILL.md +0 -52
  182. package/.opencode/skills/bmad-agent-architect/bmad-skill-manifest.yaml +0 -11
  183. package/.opencode/skills/bmad-agent-dev/SKILL.md +0 -62
  184. package/.opencode/skills/bmad-agent-dev/bmad-skill-manifest.yaml +0 -11
  185. package/.opencode/skills/bmad-agent-pm/SKILL.md +0 -57
  186. package/.opencode/skills/bmad-agent-pm/bmad-skill-manifest.yaml +0 -11
  187. package/.opencode/skills/bmad-agent-qa/SKILL.md +0 -59
  188. package/.opencode/skills/bmad-agent-qa/bmad-skill-manifest.yaml +0 -11
  189. package/.opencode/skills/bmad-agent-quick-flow-solo-dev/SKILL.md +0 -51
  190. package/.opencode/skills/bmad-agent-quick-flow-solo-dev/bmad-skill-manifest.yaml +0 -11
  191. package/.opencode/skills/bmad-agent-sm/SKILL.md +0 -53
  192. package/.opencode/skills/bmad-agent-sm/bmad-skill-manifest.yaml +0 -11
  193. package/.opencode/skills/bmad-agent-tech-writer/SKILL.md +0 -55
  194. package/.opencode/skills/bmad-agent-tech-writer/bmad-skill-manifest.yaml +0 -11
  195. package/.opencode/skills/bmad-agent-tech-writer/explain-concept.md +0 -20
  196. package/.opencode/skills/bmad-agent-tech-writer/mermaid-gen.md +0 -20
  197. package/.opencode/skills/bmad-agent-tech-writer/validate-doc.md +0 -19
  198. package/.opencode/skills/bmad-agent-tech-writer/write-document.md +0 -20
  199. package/.opencode/skills/bmad-agent-ux-designer/SKILL.md +0 -53
  200. package/.opencode/skills/bmad-agent-ux-designer/bmad-skill-manifest.yaml +0 -11
  201. package/.opencode/skills/bmad-brainstorming/SKILL.md +0 -6
  202. package/.opencode/skills/bmad-brainstorming/brain-methods.csv +0 -62
  203. package/.opencode/skills/bmad-brainstorming/steps/step-01-session-setup.md +0 -214
  204. package/.opencode/skills/bmad-brainstorming/steps/step-01b-continue.md +0 -124
  205. package/.opencode/skills/bmad-brainstorming/steps/step-02a-user-selected.md +0 -229
  206. package/.opencode/skills/bmad-brainstorming/steps/step-02b-ai-recommended.md +0 -239
  207. package/.opencode/skills/bmad-brainstorming/steps/step-02c-random-selection.md +0 -211
  208. package/.opencode/skills/bmad-brainstorming/steps/step-02d-progressive-flow.md +0 -266
  209. package/.opencode/skills/bmad-brainstorming/steps/step-03-technique-execution.md +0 -401
  210. package/.opencode/skills/bmad-brainstorming/steps/step-04-idea-organization.md +0 -305
  211. package/.opencode/skills/bmad-brainstorming/template.md +0 -15
  212. package/.opencode/skills/bmad-brainstorming/workflow.md +0 -53
  213. package/.opencode/skills/bmad-check-implementation-readiness/SKILL.md +0 -6
  214. package/.opencode/skills/bmad-check-implementation-readiness/steps/step-01-document-discovery.md +0 -179
  215. package/.opencode/skills/bmad-check-implementation-readiness/steps/step-02-prd-analysis.md +0 -168
  216. package/.opencode/skills/bmad-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +0 -169
  217. package/.opencode/skills/bmad-check-implementation-readiness/steps/step-04-ux-alignment.md +0 -129
  218. package/.opencode/skills/bmad-check-implementation-readiness/steps/step-05-epic-quality-review.md +0 -241
  219. package/.opencode/skills/bmad-check-implementation-readiness/steps/step-06-final-assessment.md +0 -126
  220. package/.opencode/skills/bmad-check-implementation-readiness/templates/readiness-report-template.md +0 -4
  221. package/.opencode/skills/bmad-check-implementation-readiness/workflow.md +0 -49
  222. package/.opencode/skills/bmad-cis-design-thinking/SKILL.md +0 -6
  223. package/.opencode/skills/bmad-cis-design-thinking/bmad-skill-manifest.yaml +0 -1
  224. package/.opencode/skills/bmad-cis-design-thinking/design-methods.csv +0 -31
  225. package/.opencode/skills/bmad-cis-design-thinking/template.md +0 -111
  226. package/.opencode/skills/bmad-cis-design-thinking/workflow.md +0 -242
  227. package/.opencode/skills/bmad-cis-innovation-strategy/SKILL.md +0 -6
  228. package/.opencode/skills/bmad-cis-innovation-strategy/bmad-skill-manifest.yaml +0 -1
  229. package/.opencode/skills/bmad-cis-innovation-strategy/innovation-frameworks.csv +0 -31
  230. package/.opencode/skills/bmad-cis-innovation-strategy/template.md +0 -189
  231. package/.opencode/skills/bmad-cis-innovation-strategy/workflow.md +0 -315
  232. package/.opencode/skills/bmad-cis-problem-solving/SKILL.md +0 -6
  233. package/.opencode/skills/bmad-cis-problem-solving/bmad-skill-manifest.yaml +0 -1
  234. package/.opencode/skills/bmad-cis-problem-solving/solving-methods.csv +0 -31
  235. package/.opencode/skills/bmad-cis-problem-solving/template.md +0 -165
  236. package/.opencode/skills/bmad-cis-problem-solving/workflow.md +0 -291
  237. package/.opencode/skills/bmad-cis-storytelling/SKILL.md +0 -6
  238. package/.opencode/skills/bmad-cis-storytelling/bmad-skill-manifest.yaml +0 -1
  239. package/.opencode/skills/bmad-cis-storytelling/story-types.csv +0 -26
  240. package/.opencode/skills/bmad-cis-storytelling/template.md +0 -113
  241. package/.opencode/skills/bmad-cis-storytelling/workflow.md +0 -321
  242. package/.opencode/skills/bmad-code-review/SKILL.md +0 -6
  243. package/.opencode/skills/bmad-code-review/steps/step-01-gather-context.md +0 -62
  244. package/.opencode/skills/bmad-code-review/steps/step-02-review.md +0 -34
  245. package/.opencode/skills/bmad-code-review/steps/step-03-triage.md +0 -49
  246. package/.opencode/skills/bmad-code-review/steps/step-04-present.md +0 -129
  247. package/.opencode/skills/bmad-code-review/workflow.md +0 -55
  248. package/.opencode/skills/bmad-correct-course/SKILL.md +0 -6
  249. package/.opencode/skills/bmad-correct-course/checklist.md +0 -288
  250. package/.opencode/skills/bmad-correct-course/workflow.md +0 -267
  251. package/.opencode/skills/bmad-create-architecture/SKILL.md +0 -6
  252. package/.opencode/skills/bmad-create-architecture/architecture-decision-template.md +0 -12
  253. package/.opencode/skills/bmad-create-architecture/data/domain-complexity.csv +0 -13
  254. package/.opencode/skills/bmad-create-architecture/data/project-types.csv +0 -7
  255. package/.opencode/skills/bmad-create-architecture/steps/step-01-init.md +0 -153
  256. package/.opencode/skills/bmad-create-architecture/steps/step-01b-continue.md +0 -173
  257. package/.opencode/skills/bmad-create-architecture/steps/step-02-context.md +0 -224
  258. package/.opencode/skills/bmad-create-architecture/steps/step-03-starter.md +0 -329
  259. package/.opencode/skills/bmad-create-architecture/steps/step-04-decisions.md +0 -318
  260. package/.opencode/skills/bmad-create-architecture/steps/step-05-patterns.md +0 -359
  261. package/.opencode/skills/bmad-create-architecture/steps/step-06-structure.md +0 -379
  262. package/.opencode/skills/bmad-create-architecture/steps/step-07-validation.md +0 -359
  263. package/.opencode/skills/bmad-create-architecture/steps/step-08-complete.md +0 -76
  264. package/.opencode/skills/bmad-create-architecture/workflow.md +0 -38
  265. package/.opencode/skills/bmad-create-epics-and-stories/SKILL.md +0 -6
  266. package/.opencode/skills/bmad-create-epics-and-stories/steps/step-01-validate-prerequisites.md +0 -255
  267. package/.opencode/skills/bmad-create-epics-and-stories/steps/step-02-design-epics.md +0 -212
  268. package/.opencode/skills/bmad-create-epics-and-stories/steps/step-03-create-stories.md +0 -255
  269. package/.opencode/skills/bmad-create-epics-and-stories/steps/step-04-final-validation.md +0 -131
  270. package/.opencode/skills/bmad-create-epics-and-stories/templates/epics-template.md +0 -61
  271. package/.opencode/skills/bmad-create-epics-and-stories/workflow.md +0 -53
  272. package/.opencode/skills/bmad-create-prd/SKILL.md +0 -6
  273. package/.opencode/skills/bmad-create-prd/data/domain-complexity.csv +0 -15
  274. package/.opencode/skills/bmad-create-prd/data/prd-purpose.md +0 -197
  275. package/.opencode/skills/bmad-create-prd/data/project-types.csv +0 -11
  276. package/.opencode/skills/bmad-create-prd/steps-c/step-01-init.md +0 -178
  277. package/.opencode/skills/bmad-create-prd/steps-c/step-01b-continue.md +0 -161
  278. package/.opencode/skills/bmad-create-prd/steps-c/step-02-discovery.md +0 -208
  279. package/.opencode/skills/bmad-create-prd/steps-c/step-02b-vision.md +0 -142
  280. package/.opencode/skills/bmad-create-prd/steps-c/step-02c-executive-summary.md +0 -158
  281. package/.opencode/skills/bmad-create-prd/steps-c/step-03-success.md +0 -214
  282. package/.opencode/skills/bmad-create-prd/steps-c/step-04-journeys.md +0 -201
  283. package/.opencode/skills/bmad-create-prd/steps-c/step-05-domain.md +0 -194
  284. package/.opencode/skills/bmad-create-prd/steps-c/step-06-innovation.md +0 -211
  285. package/.opencode/skills/bmad-create-prd/steps-c/step-07-project-type.md +0 -222
  286. package/.opencode/skills/bmad-create-prd/steps-c/step-08-scoping.md +0 -216
  287. package/.opencode/skills/bmad-create-prd/steps-c/step-09-functional.md +0 -219
  288. package/.opencode/skills/bmad-create-prd/steps-c/step-10-nonfunctional.md +0 -230
  289. package/.opencode/skills/bmad-create-prd/steps-c/step-11-polish.md +0 -221
  290. package/.opencode/skills/bmad-create-prd/steps-c/step-12-complete.md +0 -115
  291. package/.opencode/skills/bmad-create-prd/templates/prd-template.md +0 -10
  292. package/.opencode/skills/bmad-create-prd/workflow.md +0 -62
  293. package/.opencode/skills/bmad-create-story/SKILL.md +0 -6
  294. package/.opencode/skills/bmad-create-story/checklist.md +0 -357
  295. package/.opencode/skills/bmad-create-story/discover-inputs.md +0 -88
  296. package/.opencode/skills/bmad-create-story/template.md +0 -49
  297. package/.opencode/skills/bmad-create-story/workflow.md +0 -380
  298. package/.opencode/skills/bmad-create-ux-design/SKILL.md +0 -6
  299. package/.opencode/skills/bmad-create-ux-design/steps/step-01-init.md +0 -135
  300. package/.opencode/skills/bmad-create-ux-design/steps/step-01b-continue.md +0 -127
  301. package/.opencode/skills/bmad-create-ux-design/steps/step-02-discovery.md +0 -190
  302. package/.opencode/skills/bmad-create-ux-design/steps/step-03-core-experience.md +0 -217
  303. package/.opencode/skills/bmad-create-ux-design/steps/step-04-emotional-response.md +0 -220
  304. package/.opencode/skills/bmad-create-ux-design/steps/step-05-inspiration.md +0 -235
  305. package/.opencode/skills/bmad-create-ux-design/steps/step-06-design-system.md +0 -253
  306. package/.opencode/skills/bmad-create-ux-design/steps/step-07-defining-experience.md +0 -255
  307. package/.opencode/skills/bmad-create-ux-design/steps/step-08-visual-foundation.md +0 -225
  308. package/.opencode/skills/bmad-create-ux-design/steps/step-09-design-directions.md +0 -225
  309. package/.opencode/skills/bmad-create-ux-design/steps/step-10-user-journeys.md +0 -242
  310. package/.opencode/skills/bmad-create-ux-design/steps/step-11-component-strategy.md +0 -249
  311. package/.opencode/skills/bmad-create-ux-design/steps/step-12-ux-patterns.md +0 -238
  312. package/.opencode/skills/bmad-create-ux-design/steps/step-13-responsive-accessibility.md +0 -265
  313. package/.opencode/skills/bmad-create-ux-design/steps/step-14-complete.md +0 -171
  314. package/.opencode/skills/bmad-create-ux-design/ux-design-template.md +0 -13
  315. package/.opencode/skills/bmad-create-ux-design/workflow.md +0 -36
  316. package/.opencode/skills/bmad-distillator/SKILL.md +0 -178
  317. package/.opencode/skills/bmad-distillator/agents/distillate-compressor.md +0 -116
  318. package/.opencode/skills/bmad-distillator/agents/round-trip-reconstructor.md +0 -68
  319. package/.opencode/skills/bmad-distillator/resources/compression-rules.md +0 -51
  320. package/.opencode/skills/bmad-distillator/resources/distillate-format-reference.md +0 -227
  321. package/.opencode/skills/bmad-distillator/resources/splitting-strategy.md +0 -78
  322. package/.opencode/skills/bmad-distillator/scripts/analyze_sources.py +0 -300
  323. package/.opencode/skills/bmad-distillator/scripts/tests/test_analyze_sources.py +0 -204
  324. package/.opencode/skills/bmad-document-project/SKILL.md +0 -6
  325. package/.opencode/skills/bmad-document-project/checklist.md +0 -245
  326. package/.opencode/skills/bmad-document-project/documentation-requirements.csv +0 -12
  327. package/.opencode/skills/bmad-document-project/instructions.md +0 -128
  328. package/.opencode/skills/bmad-document-project/templates/deep-dive-template.md +0 -345
  329. package/.opencode/skills/bmad-document-project/templates/index-template.md +0 -169
  330. package/.opencode/skills/bmad-document-project/templates/project-overview-template.md +0 -103
  331. package/.opencode/skills/bmad-document-project/templates/project-scan-report-schema.json +0 -160
  332. package/.opencode/skills/bmad-document-project/templates/source-tree-template.md +0 -135
  333. package/.opencode/skills/bmad-document-project/workflow.md +0 -27
  334. package/.opencode/skills/bmad-document-project/workflows/deep-dive-instructions.md +0 -299
  335. package/.opencode/skills/bmad-document-project/workflows/deep-dive-workflow.md +0 -34
  336. package/.opencode/skills/bmad-document-project/workflows/full-scan-instructions.md +0 -1107
  337. package/.opencode/skills/bmad-document-project/workflows/full-scan-workflow.md +0 -34
  338. package/.opencode/skills/bmad-domain-research/SKILL.md +0 -6
  339. package/.opencode/skills/bmad-domain-research/domain-steps/step-01-init.md +0 -137
  340. package/.opencode/skills/bmad-domain-research/domain-steps/step-02-domain-analysis.md +0 -229
  341. package/.opencode/skills/bmad-domain-research/domain-steps/step-03-competitive-landscape.md +0 -238
  342. package/.opencode/skills/bmad-domain-research/domain-steps/step-04-regulatory-focus.md +0 -206
  343. package/.opencode/skills/bmad-domain-research/domain-steps/step-05-technical-trends.md +0 -234
  344. package/.opencode/skills/bmad-domain-research/domain-steps/step-06-research-synthesis.md +0 -444
  345. package/.opencode/skills/bmad-domain-research/research.template.md +0 -29
  346. package/.opencode/skills/bmad-domain-research/workflow.md +0 -49
  347. package/.opencode/skills/bmad-edit-prd/SKILL.md +0 -6
  348. package/.opencode/skills/bmad-edit-prd/steps-e/step-e-01-discovery.md +0 -242
  349. package/.opencode/skills/bmad-edit-prd/steps-e/step-e-01b-legacy-conversion.md +0 -204
  350. package/.opencode/skills/bmad-edit-prd/steps-e/step-e-02-review.md +0 -245
  351. package/.opencode/skills/bmad-edit-prd/steps-e/step-e-03-edit.md +0 -250
  352. package/.opencode/skills/bmad-edit-prd/steps-e/step-e-04-complete.md +0 -165
  353. package/.opencode/skills/bmad-edit-prd/workflow.md +0 -63
  354. package/.opencode/skills/bmad-editorial-review-prose/SKILL.md +0 -86
  355. package/.opencode/skills/bmad-editorial-review-structure/SKILL.md +0 -179
  356. package/.opencode/skills/bmad-generate-project-context/SKILL.md +0 -6
  357. package/.opencode/skills/bmad-generate-project-context/project-context-template.md +0 -21
  358. package/.opencode/skills/bmad-generate-project-context/steps/step-01-discover.md +0 -186
  359. package/.opencode/skills/bmad-generate-project-context/steps/step-02-generate.md +0 -321
  360. package/.opencode/skills/bmad-generate-project-context/steps/step-03-complete.md +0 -278
  361. package/.opencode/skills/bmad-generate-project-context/workflow.md +0 -43
  362. package/.opencode/skills/bmad-help/SKILL.md +0 -73
  363. package/.opencode/skills/bmad-index-docs/SKILL.md +0 -66
  364. package/.opencode/skills/bmad-init/SKILL.md +0 -100
  365. package/.opencode/skills/bmad-init/resources/core-module.yaml +0 -25
  366. package/.opencode/skills/bmad-init/scripts/bmad_init.py +0 -593
  367. package/.opencode/skills/bmad-init/scripts/tests/test_bmad_init.py +0 -329
  368. package/.opencode/skills/bmad-ma-agent-cyber/SKILL.md +0 -49
  369. package/.opencode/skills/bmad-ma-agent-cyber/bmad-skill-manifest.yaml +0 -11
  370. package/.opencode/skills/bmad-ma-agent-devops/SKILL.md +0 -49
  371. package/.opencode/skills/bmad-ma-agent-devops/bmad-skill-manifest.yaml +0 -11
  372. package/.opencode/skills/bmad-ma-agent-mil498/SKILL.md +0 -53
  373. package/.opencode/skills/bmad-ma-agent-mil498/bmad-skill-manifest.yaml +0 -11
  374. package/.opencode/skills/bmad-ma-agent-ml/SKILL.md +0 -59
  375. package/.opencode/skills/bmad-ma-agent-ml/bmad-skill-manifest.yaml +0 -11
  376. package/.opencode/skills/bmad-ma-agent-sre/SKILL.md +0 -49
  377. package/.opencode/skills/bmad-ma-agent-sre/bmad-skill-manifest.yaml +0 -11
  378. package/.opencode/skills/bmad-market-research/SKILL.md +0 -6
  379. package/.opencode/skills/bmad-market-research/research.template.md +0 -29
  380. package/.opencode/skills/bmad-market-research/steps/step-01-init.md +0 -184
  381. package/.opencode/skills/bmad-market-research/steps/step-02-customer-behavior.md +0 -239
  382. package/.opencode/skills/bmad-market-research/steps/step-03-customer-pain-points.md +0 -251
  383. package/.opencode/skills/bmad-market-research/steps/step-04-customer-decisions.md +0 -261
  384. package/.opencode/skills/bmad-market-research/steps/step-05-competitive-analysis.md +0 -173
  385. package/.opencode/skills/bmad-market-research/steps/step-06-research-completion.md +0 -478
  386. package/.opencode/skills/bmad-market-research/workflow.md +0 -49
  387. package/.opencode/skills/bmad-party-mode/SKILL.md +0 -6
  388. package/.opencode/skills/bmad-party-mode/steps/step-01-agent-loading.md +0 -138
  389. package/.opencode/skills/bmad-party-mode/steps/step-02-discussion-orchestration.md +0 -187
  390. package/.opencode/skills/bmad-party-mode/steps/step-03-graceful-exit.md +0 -167
  391. package/.opencode/skills/bmad-party-mode/workflow.md +0 -190
  392. package/.opencode/skills/bmad-product-brief/SKILL.md +0 -87
  393. package/.opencode/skills/bmad-product-brief/agents/artifact-analyzer.md +0 -60
  394. package/.opencode/skills/bmad-product-brief/agents/opportunity-reviewer.md +0 -44
  395. package/.opencode/skills/bmad-product-brief/agents/skeptic-reviewer.md +0 -44
  396. package/.opencode/skills/bmad-product-brief/agents/web-researcher.md +0 -49
  397. package/.opencode/skills/bmad-product-brief/bmad-manifest.json +0 -17
  398. package/.opencode/skills/bmad-product-brief/prompts/contextual-discovery.md +0 -57
  399. package/.opencode/skills/bmad-product-brief/prompts/draft-and-review.md +0 -86
  400. package/.opencode/skills/bmad-product-brief/prompts/finalize.md +0 -75
  401. package/.opencode/skills/bmad-product-brief/prompts/guided-elicitation.md +0 -70
  402. package/.opencode/skills/bmad-product-brief/resources/brief-template.md +0 -60
  403. package/.opencode/skills/bmad-qa-generate-e2e-tests/SKILL.md +0 -6
  404. package/.opencode/skills/bmad-qa-generate-e2e-tests/checklist.md +0 -33
  405. package/.opencode/skills/bmad-qa-generate-e2e-tests/workflow.md +0 -136
  406. package/.opencode/skills/bmad-quick-dev/SKILL.md +0 -6
  407. package/.opencode/skills/bmad-quick-dev/spec-template.md +0 -88
  408. package/.opencode/skills/bmad-quick-dev/step-01-clarify-and-route.md +0 -64
  409. package/.opencode/skills/bmad-quick-dev/step-02-plan.md +0 -35
  410. package/.opencode/skills/bmad-quick-dev/step-03-implement.md +0 -37
  411. package/.opencode/skills/bmad-quick-dev/step-04-review.md +0 -49
  412. package/.opencode/skills/bmad-quick-dev/step-05-present.md +0 -63
  413. package/.opencode/skills/bmad-quick-dev/step-oneshot.md +0 -49
  414. package/.opencode/skills/bmad-quick-dev/workflow.md +0 -79
  415. package/.opencode/skills/bmad-retrospective/SKILL.md +0 -6
  416. package/.opencode/skills/bmad-retrospective/workflow.md +0 -1479
  417. package/.opencode/skills/bmad-review-adversarial-general/SKILL.md +0 -37
  418. package/.opencode/skills/bmad-review-edge-case-hunter/SKILL.md +0 -67
  419. package/.opencode/skills/bmad-shard-doc/SKILL.md +0 -105
  420. package/.opencode/skills/bmad-sprint-planning/SKILL.md +0 -6
  421. package/.opencode/skills/bmad-sprint-planning/checklist.md +0 -33
  422. package/.opencode/skills/bmad-sprint-planning/sprint-status-template.yaml +0 -56
  423. package/.opencode/skills/bmad-sprint-planning/workflow.md +0 -263
  424. package/.opencode/skills/bmad-sprint-status/SKILL.md +0 -6
  425. package/.opencode/skills/bmad-sprint-status/workflow.md +0 -261
  426. package/.opencode/skills/bmad-technical-research/SKILL.md +0 -6
  427. package/.opencode/skills/bmad-technical-research/research.template.md +0 -29
  428. package/.opencode/skills/bmad-technical-research/technical-steps/step-01-init.md +0 -137
  429. package/.opencode/skills/bmad-technical-research/technical-steps/step-02-technical-overview.md +0 -239
  430. package/.opencode/skills/bmad-technical-research/technical-steps/step-03-integration-patterns.md +0 -248
  431. package/.opencode/skills/bmad-technical-research/technical-steps/step-04-architectural-patterns.md +0 -202
  432. package/.opencode/skills/bmad-technical-research/technical-steps/step-05-implementation-research.md +0 -233
  433. package/.opencode/skills/bmad-technical-research/technical-steps/step-06-research-synthesis.md +0 -487
  434. package/.opencode/skills/bmad-technical-research/workflow.md +0 -50
  435. package/.opencode/skills/bmad-validate-prd/SKILL.md +0 -6
  436. package/.opencode/skills/bmad-validate-prd/data/domain-complexity.csv +0 -15
  437. package/.opencode/skills/bmad-validate-prd/data/prd-purpose.md +0 -197
  438. package/.opencode/skills/bmad-validate-prd/data/project-types.csv +0 -11
  439. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-01-discovery.md +0 -221
  440. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-02-format-detection.md +0 -188
  441. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-02b-parity-check.md +0 -206
  442. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-03-density-validation.md +0 -171
  443. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +0 -211
  444. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-05-measurability-validation.md +0 -225
  445. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-06-traceability-validation.md +0 -214
  446. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +0 -202
  447. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +0 -240
  448. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-09-project-type-validation.md +0 -260
  449. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-10-smart-validation.md +0 -206
  450. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +0 -261
  451. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-12-completeness-validation.md +0 -239
  452. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-13-report-complete.md +0 -229
  453. package/.opencode/skills/bmad-validate-prd/workflow.md +0 -62
  454. package/.opencode/skills/cleanup-done/SKILL.md +0 -159
  455. package/.opencode/skills/cmake-best-practices/SKILL.md +0 -64
  456. package/.opencode/skills/cmake-best-practices/examples/cmake.md +0 -59
  457. package/.opencode/skills/code-documentation/SKILL.md +0 -57
  458. package/.opencode/skills/code-documentation/examples/cpp.md +0 -29
  459. package/.opencode/skills/code-documentation/examples/csharp.md +0 -28
  460. package/.opencode/skills/code-documentation/examples/javascript_typescript.md +0 -28
  461. package/.opencode/skills/code-documentation/examples/python.md +0 -57
  462. package/.opencode/skills/code-review/SKILL.md +0 -43
  463. package/.opencode/skills/commit-message/SKILL.md +0 -79
  464. package/.opencode/skills/cpp-best-practices/SKILL.md +0 -234
  465. package/.opencode/skills/cpp-best-practices/examples/modern-idioms.md +0 -189
  466. package/.opencode/skills/cpp-best-practices/examples/naming-and-organization.md +0 -102
  467. package/.opencode/skills/cpp-concurrency-safety/SKILL.md +0 -60
  468. package/.opencode/skills/cpp-concurrency-safety/examples/concurrency.md +0 -73
  469. package/.opencode/skills/cpp-const-correctness/SKILL.md +0 -63
  470. package/.opencode/skills/cpp-const-correctness/examples/const_correctness.md +0 -54
  471. package/.opencode/skills/cpp-memory-handling/SKILL.md +0 -42
  472. package/.opencode/skills/cpp-memory-handling/examples/modern-cpp.md +0 -49
  473. package/.opencode/skills/cpp-memory-handling/examples/smart-pointers.md +0 -46
  474. package/.opencode/skills/cpp-modern-composition/SKILL.md +0 -64
  475. package/.opencode/skills/cpp-modern-composition/examples/composition.md +0 -51
  476. package/.opencode/skills/cpp-robust-interfaces/SKILL.md +0 -55
  477. package/.opencode/skills/cpp-robust-interfaces/examples/interfaces.md +0 -56
  478. package/.opencode/skills/create-bug-story/SKILL.md +0 -263
  479. package/.opencode/skills/create-hardened-docker-skill/SKILL.md +0 -637
  480. package/.opencode/skills/create-hardened-docker-skill/scripts/create-all.sh +0 -489
  481. package/.opencode/skills/csharp-best-practices/SKILL.md +0 -278
  482. package/.opencode/skills/cyber-generate-certs/.gitkeep +0 -0
  483. package/.opencode/skills/cyber-generate-certs/SKILL.md +0 -27
  484. package/.opencode/skills/cyber-generate-certs/bmad-skill-manifest.yaml +0 -3
  485. package/.opencode/skills/cyber-immunity-estimation/.gitkeep +0 -0
  486. package/.opencode/skills/cyber-immunity-estimation/SKILL.md +0 -29
  487. package/.opencode/skills/cyber-immunity-estimation/bmad-skill-manifest.yaml +0 -3
  488. package/.opencode/skills/cyber-security-audit/.gitkeep +0 -0
  489. package/.opencode/skills/cyber-security-audit/SKILL.md +0 -27
  490. package/.opencode/skills/cyber-security-audit/bmad-skill-manifest.yaml +0 -3
  491. package/.opencode/skills/cyber-vault-secrets/.gitkeep +0 -0
  492. package/.opencode/skills/cyber-vault-secrets/SKILL.md +0 -28
  493. package/.opencode/skills/cyber-vault-secrets/bmad-skill-manifest.yaml +0 -3
  494. package/.opencode/skills/cyber-verify-docker-users/.gitkeep +0 -0
  495. package/.opencode/skills/cyber-verify-docker-users/SKILL.md +0 -23
  496. package/.opencode/skills/cyber-verify-docker-users/bmad-skill-manifest.yaml +0 -3
  497. package/.opencode/skills/cyber-verify-image-signature/.gitkeep +0 -0
  498. package/.opencode/skills/cyber-verify-image-signature/SKILL.md +0 -22
  499. package/.opencode/skills/cyber-verify-image-signature/bmad-skill-manifest.yaml +0 -3
  500. package/.opencode/skills/cyber-vulnerability-scan/.gitkeep +0 -0
  501. package/.opencode/skills/cyber-vulnerability-scan/SKILL.md +0 -28
  502. package/.opencode/skills/cyber-vulnerability-scan/bmad-skill-manifest.yaml +0 -3
  503. package/.opencode/skills/devops-configure-infrastructure/.gitkeep +0 -0
  504. package/.opencode/skills/devops-configure-infrastructure/SKILL.md +0 -27
  505. package/.opencode/skills/devops-configure-infrastructure/bmad-skill-manifest.yaml +0 -3
  506. package/.opencode/skills/devops-disconnected-deployment/.gitkeep +0 -0
  507. package/.opencode/skills/devops-disconnected-deployment/SKILL.md +0 -27
  508. package/.opencode/skills/devops-disconnected-deployment/bmad-skill-manifest.yaml +0 -3
  509. package/.opencode/skills/devops-docker-compose-setup/.gitkeep +0 -0
  510. package/.opencode/skills/devops-docker-compose-setup/SKILL.md +0 -26
  511. package/.opencode/skills/devops-docker-compose-setup/bmad-skill-manifest.yaml +0 -3
  512. package/.opencode/skills/devops-manage-helm/.gitkeep +0 -0
  513. package/.opencode/skills/devops-manage-helm/SKILL.md +0 -28
  514. package/.opencode/skills/devops-manage-helm/bmad-skill-manifest.yaml +0 -3
  515. package/.opencode/skills/devops-sign-docker-image/.gitkeep +0 -0
  516. package/.opencode/skills/devops-sign-docker-image/SKILL.md +0 -24
  517. package/.opencode/skills/devops-sign-docker-image/bmad-skill-manifest.yaml +0 -3
  518. package/.opencode/skills/docker-hardening-verification/SKILL.md +0 -28
  519. package/.opencode/skills/docker-hardening-verification/scripts/verify-hardening.sh +0 -39
  520. package/.opencode/skills/docker-image-signing/SKILL.md +0 -28
  521. package/.opencode/skills/docker-image-signing/scripts/sign-image.sh +0 -33
  522. package/.opencode/skills/document-revision-history/SKILL.md +0 -104
  523. package/.opencode/skills/generate-backlog/.gitkeep +0 -0
  524. package/.opencode/skills/generate-backlog/SKILL.md +0 -183
  525. package/.opencode/skills/git-workflow-skill/SKILL.md +0 -194
  526. package/.opencode/skills/git-workflow-skill/hooks/commit-msg +0 -61
  527. package/.opencode/skills/git-workflow-skill/hooks/pre-commit +0 -38
  528. package/.opencode/skills/git-workflow-skill/hooks/prepare-commit-msg +0 -56
  529. package/.opencode/skills/git-workflow-skill/scripts/finish-feature.sh +0 -192
  530. package/.opencode/skills/git-workflow-skill/scripts/install-hooks.sh +0 -55
  531. package/.opencode/skills/git-workflow-skill/scripts/start-feature.sh +0 -110
  532. package/.opencode/skills/git-workflow-skill/scripts/validate-workflow.sh +0 -229
  533. package/.opencode/skills/js-ts-dependency-mgmt/SKILL.md +0 -49
  534. package/.opencode/skills/js-ts-dependency-mgmt/examples/dependency_mgmt.md +0 -60
  535. package/.opencode/skills/js-ts-security-skill/SKILL.md +0 -64
  536. package/.opencode/skills/js-ts-security-skill/scripts/verify-security.sh +0 -136
  537. package/.opencode/skills/logging-best-practices/SKILL.md +0 -50
  538. package/.opencode/skills/logging-best-practices/examples/cpp.md +0 -36
  539. package/.opencode/skills/logging-best-practices/examples/csharp.md +0 -49
  540. package/.opencode/skills/logging-best-practices/examples/javascript.md +0 -77
  541. package/.opencode/skills/logging-best-practices/examples/python.md +0 -57
  542. package/.opencode/skills/logging-best-practices/references/logging-standards.md +0 -29
  543. package/.opencode/skills/mil498-ocd/.gitkeep +0 -0
  544. package/.opencode/skills/mil498-ocd/SKILL.md +0 -30
  545. package/.opencode/skills/mil498-ocd/bmad-skill-manifest.yaml +0 -5
  546. package/.opencode/skills/mil498-ocd/prompts/01-discover-project-artifacts.md +0 -26
  547. package/.opencode/skills/mil498-ocd/prompts/02-load-template.md +0 -10
  548. package/.opencode/skills/mil498-ocd/prompts/03-generate-document.md +0 -90
  549. package/.opencode/skills/mil498-ocd/prompts/04-validate.md +0 -14
  550. package/.opencode/skills/mil498-ocd/prompts/05-review.md +0 -15
  551. package/.opencode/skills/mil498-ocd/prompts/06-save.md +0 -15
  552. package/.opencode/skills/mil498-sdd/.gitkeep +0 -0
  553. package/.opencode/skills/mil498-sdd/SKILL.md +0 -30
  554. package/.opencode/skills/mil498-sdd/bmad-skill-manifest.yaml +0 -5
  555. package/.opencode/skills/mil498-sdd/prompts/01-discover-project-artifacts.md +0 -50
  556. package/.opencode/skills/mil498-sdd/prompts/02-load-template.md +0 -10
  557. package/.opencode/skills/mil498-sdd/prompts/03-generate-document.md +0 -98
  558. package/.opencode/skills/mil498-sdd/prompts/04-validate.md +0 -16
  559. package/.opencode/skills/mil498-sdd/prompts/05-review.md +0 -15
  560. package/.opencode/skills/mil498-sdd/prompts/06-save.md +0 -19
  561. package/.opencode/skills/mil498-sdd/template.md +0 -163
  562. package/.opencode/skills/mil498-sdp/.gitkeep +0 -0
  563. package/.opencode/skills/mil498-sdp/SKILL.md +0 -30
  564. package/.opencode/skills/mil498-sdp/bmad-skill-manifest.yaml +0 -5
  565. package/.opencode/skills/mil498-sdp/prompts/01-discover-project-artifacts.md +0 -32
  566. package/.opencode/skills/mil498-sdp/prompts/02-load-template.md +0 -10
  567. package/.opencode/skills/mil498-sdp/prompts/03-generate-document.md +0 -187
  568. package/.opencode/skills/mil498-sdp/prompts/04-validate.md +0 -13
  569. package/.opencode/skills/mil498-sdp/prompts/05-review.md +0 -15
  570. package/.opencode/skills/mil498-sdp/prompts/06-save.md +0 -14
  571. package/.opencode/skills/mil498-srs/.gitkeep +0 -0
  572. package/.opencode/skills/mil498-srs/SKILL.md +0 -30
  573. package/.opencode/skills/mil498-srs/bmad-skill-manifest.yaml +0 -5
  574. package/.opencode/skills/mil498-srs/prompts/01-discover-project-artifacts.md +0 -42
  575. package/.opencode/skills/mil498-srs/prompts/02-load-template.md +0 -10
  576. package/.opencode/skills/mil498-srs/prompts/03-generate-document.md +0 -100
  577. package/.opencode/skills/mil498-srs/prompts/04-validate.md +0 -16
  578. package/.opencode/skills/mil498-srs/prompts/05-review.md +0 -15
  579. package/.opencode/skills/mil498-srs/prompts/06-save.md +0 -18
  580. package/.opencode/skills/mil498-ssdd/.gitkeep +0 -0
  581. package/.opencode/skills/mil498-ssdd/SKILL.md +0 -32
  582. package/.opencode/skills/mil498-ssdd/bmad-skill-manifest.yaml +0 -5
  583. package/.opencode/skills/mil498-ssdd/prompts/01-discover-project-artifacts.md +0 -32
  584. package/.opencode/skills/mil498-ssdd/prompts/02-load-template.md +0 -10
  585. package/.opencode/skills/mil498-ssdd/prompts/03-csci-discovery-interview.md +0 -43
  586. package/.opencode/skills/mil498-ssdd/prompts/04-generate-document.md +0 -96
  587. package/.opencode/skills/mil498-ssdd/prompts/05-validate.md +0 -14
  588. package/.opencode/skills/mil498-ssdd/prompts/06-review.md +0 -16
  589. package/.opencode/skills/mil498-ssdd/prompts/07-save.md +0 -16
  590. package/.opencode/skills/mil498-sss/.gitkeep +0 -0
  591. package/.opencode/skills/mil498-sss/SKILL.md +0 -31
  592. package/.opencode/skills/mil498-sss/bmad-skill-manifest.yaml +0 -5
  593. package/.opencode/skills/mil498-sss/prompts/01-discover-project-artifacts.md +0 -31
  594. package/.opencode/skills/mil498-sss/prompts/02-load-template.md +0 -10
  595. package/.opencode/skills/mil498-sss/prompts/03-generate-document.md +0 -108
  596. package/.opencode/skills/mil498-sss/prompts/04-validate.md +0 -16
  597. package/.opencode/skills/mil498-sss/prompts/05-review.md +0 -15
  598. package/.opencode/skills/mil498-sss/prompts/06-save.md +0 -15
  599. package/.opencode/skills/mil498-std/.gitkeep +0 -0
  600. package/.opencode/skills/mil498-std/SKILL.md +0 -30
  601. package/.opencode/skills/mil498-std/bmad-skill-manifest.yaml +0 -5
  602. package/.opencode/skills/mil498-std/prompts/01-discover-project-artifacts.md +0 -42
  603. package/.opencode/skills/mil498-std/prompts/02-load-template.md +0 -10
  604. package/.opencode/skills/mil498-std/prompts/03-generate-document.md +0 -117
  605. package/.opencode/skills/mil498-std/prompts/04-validate.md +0 -15
  606. package/.opencode/skills/mil498-std/prompts/05-review.md +0 -15
  607. package/.opencode/skills/mil498-std/prompts/06-save.md +0 -15
  608. package/.opencode/skills/ml-advise/.gitkeep +0 -0
  609. package/.opencode/skills/ml-advise/SKILL.md +0 -76
  610. package/.opencode/skills/ml-advise/bmad-skill-manifest.yaml +0 -3
  611. package/.opencode/skills/ml-advise/skill.json +0 -7
  612. package/.opencode/skills/ml-analysis/.gitkeep +0 -0
  613. package/.opencode/skills/ml-analysis/SKILL.md +0 -60
  614. package/.opencode/skills/ml-analysis/bmad-skill-manifest.yaml +0 -3
  615. package/.opencode/skills/ml-analysis/skill.json +0 -7
  616. package/.opencode/skills/ml-architecture/.gitkeep +0 -0
  617. package/.opencode/skills/ml-architecture/SKILL.md +0 -55
  618. package/.opencode/skills/ml-architecture/bmad-skill-manifest.yaml +0 -3
  619. package/.opencode/skills/ml-architecture/skill.json +0 -7
  620. package/.opencode/skills/ml-detailed-design/.gitkeep +0 -0
  621. package/.opencode/skills/ml-detailed-design/SKILL.md +0 -67
  622. package/.opencode/skills/ml-detailed-design/bmad-skill-manifest.yaml +0 -3
  623. package/.opencode/skills/ml-detailed-design/skill.json +0 -7
  624. package/.opencode/skills/ml-eda/.gitkeep +0 -0
  625. package/.opencode/skills/ml-eda/SKILL.md +0 -56
  626. package/.opencode/skills/ml-eda/bmad-skill-manifest.yaml +0 -3
  627. package/.opencode/skills/ml-eda/scripts/baseline_classifier.py +0 -522
  628. package/.opencode/skills/ml-eda/scripts/class_weights_calculator.py +0 -295
  629. package/.opencode/skills/ml-eda/scripts/clustering_explorer.py +0 -383
  630. package/.opencode/skills/ml-eda/scripts/eda_analyzer.py +0 -654
  631. package/.opencode/skills/ml-eda/skill.json +0 -7
  632. package/.opencode/skills/ml-experiment/.gitkeep +0 -0
  633. package/.opencode/skills/ml-experiment/SKILL.md +0 -74
  634. package/.opencode/skills/ml-experiment/assets/advanced_trainer_configs.py +0 -430
  635. package/.opencode/skills/ml-experiment/assets/quick_trainer_setup.py +0 -233
  636. package/.opencode/skills/ml-experiment/assets/template_datamodule.py +0 -219
  637. package/.opencode/skills/ml-experiment/assets/template_gnn_module.py +0 -341
  638. package/.opencode/skills/ml-experiment/assets/template_lightning_module.py +0 -158
  639. package/.opencode/skills/ml-experiment/bmad-skill-manifest.yaml +0 -3
  640. package/.opencode/skills/ml-experiment/skill.json +0 -7
  641. package/.opencode/skills/ml-hparam/.gitkeep +0 -0
  642. package/.opencode/skills/ml-hparam/SKILL.md +0 -81
  643. package/.opencode/skills/ml-hparam/bmad-skill-manifest.yaml +0 -3
  644. package/.opencode/skills/ml-hparam/skill.json +0 -7
  645. package/.opencode/skills/ml-ideation/.gitkeep +0 -0
  646. package/.opencode/skills/ml-ideation/SKILL.md +0 -50
  647. package/.opencode/skills/ml-ideation/bmad-skill-manifest.yaml +0 -3
  648. package/.opencode/skills/ml-ideation/scripts/validate_ml_prd.py +0 -287
  649. package/.opencode/skills/ml-ideation/skill.json +0 -7
  650. package/.opencode/skills/ml-infra/.gitkeep +0 -0
  651. package/.opencode/skills/ml-infra/SKILL.md +0 -58
  652. package/.opencode/skills/ml-infra/bmad-skill-manifest.yaml +0 -3
  653. package/.opencode/skills/ml-infra/skill.json +0 -7
  654. package/.opencode/skills/ml-retrospective/.gitkeep +0 -0
  655. package/.opencode/skills/ml-retrospective/SKILL.md +0 -63
  656. package/.opencode/skills/ml-retrospective/bmad-skill-manifest.yaml +0 -3
  657. package/.opencode/skills/ml-retrospective/skill.json +0 -7
  658. package/.opencode/skills/ml-revision/.gitkeep +0 -0
  659. package/.opencode/skills/ml-revision/SKILL.md +0 -82
  660. package/.opencode/skills/ml-revision/bmad-skill-manifest.yaml +0 -3
  661. package/.opencode/skills/ml-revision/skill.json +0 -7
  662. package/.opencode/skills/ml-techspec/.gitkeep +0 -0
  663. package/.opencode/skills/ml-techspec/SKILL.md +0 -80
  664. package/.opencode/skills/ml-techspec/bmad-skill-manifest.yaml +0 -3
  665. package/.opencode/skills/ml-techspec/skill.json +0 -7
  666. package/.opencode/skills/modify-sprint/.gitkeep +0 -0
  667. package/.opencode/skills/modify-sprint/SKILL.md +0 -322
  668. package/.opencode/skills/modify-sprint/bmad-skill-manifest.yaml +0 -3
  669. package/.opencode/skills/open-presentation/SKILL.md +0 -35
  670. package/.opencode/skills/opentelemetry-best-practices/SKILL.md +0 -34
  671. package/.opencode/skills/opentelemetry-best-practices/examples/go.md +0 -32
  672. package/.opencode/skills/opentelemetry-best-practices/examples/javascript.md +0 -58
  673. package/.opencode/skills/opentelemetry-best-practices/examples/python.md +0 -37
  674. package/.opencode/skills/opentelemetry-best-practices/references/otel-standards.md +0 -37
  675. package/.opencode/skills/prioritize-backlog/.gitkeep +0 -0
  676. package/.opencode/skills/prioritize-backlog/SKILL.md +0 -195
  677. package/.opencode/skills/project-context-expansion/.gitkeep +0 -0
  678. package/.opencode/skills/project-context-expansion/SKILL.md +0 -238
  679. package/.opencode/skills/project-context-expansion/bmad-skill-manifest.yaml +0 -3
  680. package/.opencode/skills/python-best-practices/SKILL.md +0 -385
  681. package/.opencode/skills/python-dependency-mgmt/SKILL.md +0 -42
  682. package/.opencode/skills/python-dependency-mgmt/examples/dependency_mgmt.md +0 -67
  683. package/.opencode/skills/python-security-skill/SKILL.md +0 -56
  684. package/.opencode/skills/python-security-skill/examples/security.md +0 -56
  685. package/.opencode/skills/remove-from-sprint/.gitkeep +0 -0
  686. package/.opencode/skills/remove-from-sprint/SKILL.md +0 -163
  687. package/.opencode/skills/self-signed-cert/SKILL.md +0 -42
  688. package/.opencode/skills/self-signed-cert/scripts/generate-cert.ps1 +0 -45
  689. package/.opencode/skills/self-signed-cert/scripts/generate-cert.sh +0 -43
  690. package/.opencode/skills/skill-creator/SKILL.md +0 -196
  691. package/.opencode/skills/skill-creator/references/output-patterns.md +0 -82
  692. package/.opencode/skills/skill-creator/references/workflows.md +0 -28
  693. package/.opencode/skills/skill-creator/scripts/init_skill.py +0 -208
  694. package/.opencode/skills/skill-creator/scripts/package_skill.py +0 -99
  695. package/.opencode/skills/skill-creator/scripts/quick_validate.py +0 -113
  696. package/.opencode/skills/sprint-status-view/.gitkeep +0 -0
  697. package/.opencode/skills/sprint-status-view/SKILL.md +0 -263
  698. package/.opencode/skills/sprint-status-view/bmad-skill-manifest.yaml +0 -3
  699. package/.opencode/skills/sre-check-deployment-status/.gitkeep +0 -0
  700. package/.opencode/skills/sre-check-deployment-status/SKILL.md +0 -32
  701. package/.opencode/skills/sre-check-deployment-status/bmad-skill-manifest.yaml +0 -3
  702. package/.opencode/skills/sre-check-secrets/.gitkeep +0 -0
  703. package/.opencode/skills/sre-check-secrets/SKILL.md +0 -23
  704. package/.opencode/skills/sre-check-secrets/bmad-skill-manifest.yaml +0 -3
  705. package/.opencode/skills/sre-check-system-status/.gitkeep +0 -0
  706. package/.opencode/skills/sre-check-system-status/SKILL.md +0 -27
  707. package/.opencode/skills/sre-check-system-status/bmad-skill-manifest.yaml +0 -3
  708. package/.opencode/skills/sre-day-2-ops/.gitkeep +0 -0
  709. package/.opencode/skills/sre-day-2-ops/SKILL.md +0 -26
  710. package/.opencode/skills/sre-day-2-ops/bmad-skill-manifest.yaml +0 -3
  711. package/.opencode/skills/sre-deployment-strategies/.gitkeep +0 -0
  712. package/.opencode/skills/sre-deployment-strategies/SKILL.md +0 -28
  713. package/.opencode/skills/sre-deployment-strategies/bmad-skill-manifest.yaml +0 -3
  714. package/.opencode/skills/sre-fix-deployments/.gitkeep +0 -0
  715. package/.opencode/skills/sre-fix-deployments/SKILL.md +0 -25
  716. package/.opencode/skills/sre-fix-deployments/bmad-skill-manifest.yaml +0 -3
  717. package/.opencode/skills/sre-gitops-status/.gitkeep +0 -0
  718. package/.opencode/skills/sre-gitops-status/SKILL.md +0 -25
  719. package/.opencode/skills/sre-gitops-status/bmad-skill-manifest.yaml +0 -3
  720. package/.opencode/skills/story-status-lookup/SKILL.md +0 -78
  721. package/.opencode/skills/test-accompanied-development/SKILL.md +0 -50
  722. package/.opencode/skills/test-generator/SKILL.md +0 -65
  723. package/.opencode/skills/vercel-react-best-practices/SKILL.md +0 -109
  724. package/.opencode/skills/verify-hardened-docker-skill/SKILL.md +0 -442
  725. package/.opencode/skills/verify-hardened-docker-skill/scripts/verify-docker-hardening.sh +0 -439
  726. package/.roo/rules/00-ma-agents.md +0 -13
  727. package/.roo/skills/.ma-agents.json +0 -241
  728. package/.roo/skills/MANIFEST.yaml +0 -254
  729. package/.roo/skills/ai-audit-trail/SKILL.md +0 -23
  730. package/.roo/skills/auto-bug-detection/SKILL.md +0 -169
  731. package/.roo/skills/cmake-best-practices/SKILL.md +0 -64
  732. package/.roo/skills/cmake-best-practices/examples/cmake.md +0 -59
  733. package/.roo/skills/code-documentation/SKILL.md +0 -57
  734. package/.roo/skills/code-documentation/examples/cpp.md +0 -29
  735. package/.roo/skills/code-documentation/examples/csharp.md +0 -28
  736. package/.roo/skills/code-documentation/examples/javascript_typescript.md +0 -28
  737. package/.roo/skills/code-documentation/examples/python.md +0 -57
  738. package/.roo/skills/code-review/SKILL.md +0 -43
  739. package/.roo/skills/commit-message/SKILL.md +0 -79
  740. package/.roo/skills/cpp-best-practices/SKILL.md +0 -234
  741. package/.roo/skills/cpp-best-practices/examples/modern-idioms.md +0 -189
  742. package/.roo/skills/cpp-best-practices/examples/naming-and-organization.md +0 -102
  743. package/.roo/skills/cpp-concurrency-safety/SKILL.md +0 -60
  744. package/.roo/skills/cpp-concurrency-safety/examples/concurrency.md +0 -73
  745. package/.roo/skills/cpp-const-correctness/SKILL.md +0 -63
  746. package/.roo/skills/cpp-const-correctness/examples/const_correctness.md +0 -54
  747. package/.roo/skills/cpp-memory-handling/SKILL.md +0 -42
  748. package/.roo/skills/cpp-memory-handling/examples/modern-cpp.md +0 -49
  749. package/.roo/skills/cpp-memory-handling/examples/smart-pointers.md +0 -46
  750. package/.roo/skills/cpp-modern-composition/SKILL.md +0 -64
  751. package/.roo/skills/cpp-modern-composition/examples/composition.md +0 -51
  752. package/.roo/skills/cpp-robust-interfaces/SKILL.md +0 -55
  753. package/.roo/skills/cpp-robust-interfaces/examples/interfaces.md +0 -56
  754. package/.roo/skills/create-hardened-docker-skill/SKILL.md +0 -637
  755. package/.roo/skills/create-hardened-docker-skill/scripts/create-all.sh +0 -489
  756. package/.roo/skills/csharp-best-practices/SKILL.md +0 -278
  757. package/.roo/skills/docker-hardening-verification/SKILL.md +0 -28
  758. package/.roo/skills/docker-hardening-verification/scripts/verify-hardening.sh +0 -39
  759. package/.roo/skills/docker-image-signing/SKILL.md +0 -28
  760. package/.roo/skills/docker-image-signing/scripts/sign-image.sh +0 -33
  761. package/.roo/skills/document-revision-history/SKILL.md +0 -104
  762. package/.roo/skills/git-workflow-skill/SKILL.md +0 -194
  763. package/.roo/skills/git-workflow-skill/hooks/commit-msg +0 -61
  764. package/.roo/skills/git-workflow-skill/hooks/pre-commit +0 -38
  765. package/.roo/skills/git-workflow-skill/hooks/prepare-commit-msg +0 -56
  766. package/.roo/skills/git-workflow-skill/scripts/finish-feature.sh +0 -192
  767. package/.roo/skills/git-workflow-skill/scripts/install-hooks.sh +0 -55
  768. package/.roo/skills/git-workflow-skill/scripts/start-feature.sh +0 -110
  769. package/.roo/skills/git-workflow-skill/scripts/validate-workflow.sh +0 -229
  770. package/.roo/skills/js-ts-dependency-mgmt/SKILL.md +0 -49
  771. package/.roo/skills/js-ts-dependency-mgmt/examples/dependency_mgmt.md +0 -60
  772. package/.roo/skills/js-ts-security-skill/SKILL.md +0 -64
  773. package/.roo/skills/js-ts-security-skill/scripts/verify-security.sh +0 -136
  774. package/.roo/skills/logging-best-practices/SKILL.md +0 -50
  775. package/.roo/skills/logging-best-practices/examples/cpp.md +0 -36
  776. package/.roo/skills/logging-best-practices/examples/csharp.md +0 -49
  777. package/.roo/skills/logging-best-practices/examples/javascript.md +0 -77
  778. package/.roo/skills/logging-best-practices/examples/python.md +0 -57
  779. package/.roo/skills/logging-best-practices/references/logging-standards.md +0 -29
  780. package/.roo/skills/open-presentation/SKILL.md +0 -35
  781. package/.roo/skills/opentelemetry-best-practices/SKILL.md +0 -34
  782. package/.roo/skills/opentelemetry-best-practices/examples/go.md +0 -32
  783. package/.roo/skills/opentelemetry-best-practices/examples/javascript.md +0 -58
  784. package/.roo/skills/opentelemetry-best-practices/examples/python.md +0 -37
  785. package/.roo/skills/opentelemetry-best-practices/references/otel-standards.md +0 -37
  786. package/.roo/skills/python-best-practices/SKILL.md +0 -385
  787. package/.roo/skills/python-dependency-mgmt/SKILL.md +0 -42
  788. package/.roo/skills/python-dependency-mgmt/examples/dependency_mgmt.md +0 -67
  789. package/.roo/skills/python-security-skill/SKILL.md +0 -56
  790. package/.roo/skills/python-security-skill/examples/security.md +0 -56
  791. package/.roo/skills/self-signed-cert/SKILL.md +0 -42
  792. package/.roo/skills/self-signed-cert/scripts/generate-cert.ps1 +0 -45
  793. package/.roo/skills/self-signed-cert/scripts/generate-cert.sh +0 -43
  794. package/.roo/skills/skill-creator/SKILL.md +0 -196
  795. package/.roo/skills/skill-creator/references/output-patterns.md +0 -82
  796. package/.roo/skills/skill-creator/references/workflows.md +0 -28
  797. package/.roo/skills/skill-creator/scripts/init_skill.py +0 -208
  798. package/.roo/skills/skill-creator/scripts/package_skill.py +0 -99
  799. package/.roo/skills/skill-creator/scripts/quick_validate.py +0 -113
  800. package/.roo/skills/story-status-lookup/SKILL.md +0 -78
  801. package/.roo/skills/test-accompanied-development/SKILL.md +0 -50
  802. package/.roo/skills/test-generator/SKILL.md +0 -65
  803. package/.roo/skills/vercel-react-best-practices/SKILL.md +0 -109
  804. package/.roo/skills/verify-hardened-docker-skill/SKILL.md +0 -442
  805. package/.roo/skills/verify-hardened-docker-skill/scripts/verify-docker-hardening.sh +0 -439
  806. package/opencode.json +0 -5
  807. /package/{.opencode/skills/add-sprint → lib/bmad-extension/skills/bmad-dev-story}/.gitkeep +0 -0
  808. /package/{.opencode → lib/bmad-extension}/skills/bmad-dev-story/SKILL.md +0 -0
  809. /package/{.opencode/skills/add-to-sprint → lib/bmad-extension/skills/bmad-sprint-planning}/.gitkeep +0 -0
  810. /package/{.opencode/skills/bmad-ma-agent-cyber → lib/bmad-extension/skills/bmad-sprint-status}/.gitkeep +0 -0
  811. /package/{.opencode/skills/bmad-ma-agent-devops → lib/bmad-extension/skills/cleanup-done}/.gitkeep +0 -0
  812. /package/{.opencode → lib/bmad-extension}/skills/cleanup-done/bmad-skill-manifest.yaml +0 -0
  813. /package/{.opencode/skills/bmad-ma-agent-mil498 → lib/bmad-extension/skills/close-sprint}/.gitkeep +0 -0
  814. /package/{.opencode/skills/bmad-ma-agent-ml → lib/bmad-extension/skills/generate-backlog}/.gitkeep +0 -0
  815. /package/{.opencode → lib/bmad-extension}/skills/generate-backlog/bmad-skill-manifest.yaml +0 -0
  816. /package/{.opencode/skills/bmad-ma-agent-sre → lib/bmad-extension/skills/mil498-requirement-quality}/.gitkeep +0 -0
  817. /package/{.opencode/skills/cleanup-done → lib/bmad-extension/skills/prioritize-backlog}/.gitkeep +0 -0
  818. /package/{.opencode → lib/bmad-extension}/skills/prioritize-backlog/bmad-skill-manifest.yaml +0 -0
  819. /package/{.opencode/skills/create-bug-story → lib/bmad-extension/skills/remove-from-sprint}/.gitkeep +0 -0
  820. /package/{.opencode → lib/bmad-extension}/skills/remove-from-sprint/bmad-skill-manifest.yaml +0 -0
  821. /package/{.opencode/skills/mil498-ocd/template.md → mil498/OCD.md} +0 -0
  822. /package/{.opencode/skills/mil498-sdp/template.md → mil498/SDP.md} +0 -0
  823. /package/{.opencode/skills/mil498-srs/template.md → mil498/SRS.md} +0 -0
  824. /package/{.opencode/skills/mil498-ssdd/template.md → mil498/SSDD.md} +0 -0
  825. /package/{.opencode/skills/mil498-sss/template.md → mil498/SSS.md} +0 -0
  826. /package/{.opencode/skills/mil498-std/template.md → mil498/STD.md} +0 -0
@@ -1,295 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- class_weights_calculator.py — BMAD DL Lifecycle
4
- Computes class weights for imbalanced datasets to use in weighted loss functions.
5
-
6
- Supports:
7
- - Image datasets (class-labeled subdirectory layout)
8
- - CSV/TSV tabular datasets
9
- - JSON annotation files (COCO or flat dict)
10
-
11
- Outputs ready-to-paste Python dict for PyTorch loss functions, plus a
12
- markdown summary. Works entirely with stdlib (no external deps).
13
-
14
- Usage:
15
- python3 scripts/class_weights_calculator.py <data_path> [--label-col LABEL] [--output report.md]
16
- python3 scripts/class_weights_calculator.py data/images/ # image dir
17
- python3 scripts/class_weights_calculator.py data/labels.csv --label-col defective
18
- python3 scripts/class_weights_calculator.py data/annotations.json
19
-
20
- Exit codes:
21
- 0 — success
22
- 2 — error
23
- """
24
-
25
- from __future__ import annotations
26
-
27
- import argparse
28
- import csv
29
- import json
30
- import sys
31
- from collections import Counter
32
- from pathlib import Path
33
-
34
- IMAGE_EXTENSIONS = {".jpg", ".jpeg", ".png", ".bmp", ".tiff", ".tif", ".webp"}
35
-
36
-
37
- def count_image_classes(data_dir: Path) -> dict[str, int]:
38
- """Count images per class from class-labeled subdirectories."""
39
- counts: dict[str, int] = {}
40
- subdirs = [d for d in sorted(data_dir.iterdir()) if d.is_dir()]
41
- if not subdirs:
42
- raise ValueError(f"No subdirectories found in {data_dir}. "
43
- "Expected class-labeled subdirectory layout: data/class_name/img.jpg")
44
- for cls_dir in subdirs:
45
- images = [f for f in cls_dir.iterdir() if f.suffix.lower() in IMAGE_EXTENSIONS]
46
- if images:
47
- counts[cls_dir.name] = len(images)
48
- return counts
49
-
50
-
51
- def count_csv_classes(path: Path, label_col: str | None) -> dict[str, int]:
52
- """Count class frequencies from a CSV label column."""
53
- with path.open(newline="", encoding="utf-8", errors="replace") as f:
54
- reader = csv.DictReader(f)
55
- rows = list(reader)
56
- if not rows:
57
- raise ValueError("CSV is empty")
58
-
59
- columns = list(rows[0].keys())
60
- if label_col and label_col in columns:
61
- target = label_col
62
- else:
63
- target = next(
64
- (c for c in columns if c.lower() in ("label", "class", "target", "y", "category")),
65
- None,
66
- )
67
- if target is None:
68
- raise ValueError(
69
- f"No label column found. Use --label-col or name your column: "
70
- f"label, class, target, y, category"
71
- )
72
- counter = Counter(row[target].strip() for row in rows if row.get(target, "").strip())
73
- return dict(counter)
74
-
75
-
76
- def count_json_classes(path: Path) -> dict[str, int]:
77
- """Count class frequencies from JSON annotations (COCO or flat dict)."""
78
- data = json.loads(path.read_text(encoding="utf-8"))
79
-
80
- # COCO format
81
- if isinstance(data, dict) and "annotations" in data and "categories" in data:
82
- categories = {c["id"]: c["name"] for c in data.get("categories", [])}
83
- counter: Counter = Counter()
84
- for ann in data.get("annotations", []):
85
- cat_id = ann.get("category_id")
86
- counter[categories.get(cat_id, f"id_{cat_id}")] += 1
87
- return dict(counter)
88
-
89
- # Flat dict: {"img.jpg": "class_name"}
90
- if isinstance(data, dict):
91
- return dict(Counter(str(v) for v in data.values()))
92
-
93
- # List of dicts
94
- if isinstance(data, list) and data and isinstance(data[0], dict):
95
- label_key = next(
96
- (k for k in data[0] if k.lower() in ("label", "class", "category", "target")),
97
- None,
98
- )
99
- if label_key:
100
- return dict(Counter(str(item.get(label_key, "unknown")) for item in data))
101
-
102
- raise ValueError("Unrecognized JSON annotation format")
103
-
104
-
105
- def compute_weights(counts: dict[str, int]) -> dict[str, float]:
106
- """
107
- Compute balanced class weights: weight_i = n_samples / (n_classes * count_i).
108
- This is sklearn's 'balanced' strategy, equivalent to:
109
- sklearn.utils.class_weight.compute_class_weight('balanced', ...)
110
- """
111
- n_samples = sum(counts.values())
112
- n_classes = len(counts)
113
- return {
114
- cls: round(n_samples / (n_classes * count), 6)
115
- for cls, count in counts.items()
116
- }
117
-
118
-
119
- def compute_inverse_freq_weights(counts: dict[str, int]) -> dict[str, float]:
120
- """Normalized inverse frequency weights: weight_i = (1/count_i) / sum(1/count_j)."""
121
- inv = {cls: 1.0 / count for cls, count in counts.items()}
122
- total_inv = sum(inv.values())
123
- return {cls: round(v / total_inv, 6) for cls, v in inv.items()}
124
-
125
-
126
- def generate_report(
127
- counts: dict[str, int],
128
- weights_balanced: dict[str, float],
129
- weights_inv: dict[str, float],
130
- data_path: Path,
131
- ) -> str:
132
- total = sum(counts.values())
133
- n_classes = len(counts)
134
- sorted_classes = sorted(counts, key=lambda c: -counts[c])
135
-
136
- lines: list[str] = [
137
- "# Class Weights Report",
138
- f"*Dataset: `{data_path.name}` | {total:,} samples | {n_classes} classes*",
139
- "",
140
- "---",
141
- "",
142
- "## A. Class Distribution",
143
- "",
144
- "| Class | Count | % | Imbalance Ratio |",
145
- "| :--- | ---: | ---: | ---: |",
146
- ]
147
- majority = counts[sorted_classes[0]]
148
- for cls in sorted_classes:
149
- pct = counts[cls] / total * 100
150
- ratio = majority / counts[cls]
151
- bar = "█" * int(pct / 5)
152
- lines.append(f"| {cls} | {counts[cls]:,} | {pct:.1f}% {bar} | {ratio:.1f}:1 |")
153
-
154
- max_ratio = majority / counts[sorted_classes[-1]]
155
- if max_ratio > 10:
156
- lines += ["", f"⚠ **Severe imbalance** detected: {max_ratio:.0f}:1 ratio. Weighted loss is strongly recommended."]
157
- elif max_ratio > 3:
158
- lines += ["", f"⚠ **Moderate imbalance** detected: {max_ratio:.0f}:1 ratio. Consider weighted loss."]
159
- else:
160
- lines += ["", f"✓ Dataset is relatively balanced ({max_ratio:.1f}:1 ratio)."]
161
-
162
- # Balanced weights
163
- sorted_by_cls = sorted(weights_balanced)
164
- lines += [
165
- "",
166
- "---",
167
- "",
168
- "## B. Balanced Class Weights",
169
- "",
170
- "*Formula: `n_samples / (n_classes × class_count)` — equivalent to sklearn's `class_weight='balanced'`*",
171
- "",
172
- "| Class | Count | Weight |",
173
- "| :--- | ---: | ---: |",
174
- ]
175
- for cls in sorted_by_cls:
176
- lines.append(f"| {cls} | {counts[cls]:,} | {weights_balanced[cls]:.4f} |")
177
-
178
- # Python code snippets
179
- weight_list_balanced = [weights_balanced[c] for c in sorted(weights_balanced)]
180
- lines += [
181
- "",
182
- "### PyTorch Usage",
183
- "",
184
- "```python",
185
- "import torch",
186
- "",
187
- "# Option 1: As tensor for nn.CrossEntropyLoss",
188
- f"class_names = {sorted_by_cls}",
189
- f"weights = torch.tensor({[round(weights_balanced[c], 4) for c in sorted_by_cls]}, dtype=torch.float)",
190
- "criterion = torch.nn.CrossEntropyLoss(weight=weights.to(device))",
191
- "",
192
- "# Option 2: As dict (for custom loss or WeightedRandomSampler)",
193
- f"class_weight_dict = {dict(zip(sorted_by_cls, [weights_balanced[c] for c in sorted_by_cls]))}",
194
- "```",
195
- "",
196
- ]
197
-
198
- # Inverse freq weights
199
- lines += [
200
- "---",
201
- "",
202
- "## C. Inverse Frequency Weights (Normalized)",
203
- "",
204
- "*Alternative: normalized so weights sum to 1.0*",
205
- "",
206
- "| Class | Count | Weight |",
207
- "| :--- | ---: | ---: |",
208
- ]
209
- for cls in sorted_by_cls:
210
- lines.append(f"| {cls} | {counts[cls]:,} | {weights_inv[cls]:.4f} |")
211
-
212
- lines += [
213
- "",
214
- "```python",
215
- "# Inverse frequency weights tensor",
216
- f"weights_inv = torch.tensor({[round(weights_inv[c], 4) for c in sorted_by_cls]}, dtype=torch.float)",
217
- "```",
218
- "",
219
- "---",
220
- "",
221
- "## D. Recommendations",
222
- "",
223
- ]
224
- if max_ratio > 10:
225
- lines += [
226
- "1. Use `CrossEntropyLoss(weight=...)` with balanced weights (Section B).",
227
- "2. Consider `WeightedRandomSampler` to oversample minority classes in each batch.",
228
- "3. Use per-class metrics (F1, precision, recall per class) — not just accuracy.",
229
- "4. Consider Focal Loss for severe imbalance (set `gamma=2`).",
230
- ]
231
- elif max_ratio > 3:
232
- lines += [
233
- "1. Apply balanced class weights to your loss function (Section B).",
234
- "2. Monitor per-class F1 during training.",
235
- "3. Consider data augmentation on minority classes.",
236
- ]
237
- else:
238
- lines += [
239
- "1. Dataset is balanced — standard `CrossEntropyLoss` without weights is acceptable.",
240
- "2. Monitor per-class metrics to catch any per-class degradation.",
241
- ]
242
-
243
- lines += [
244
- "",
245
- "---",
246
- "*Generated by `class_weights_calculator.py` — BMAD DL Lifecycle*",
247
- ]
248
- return "\n".join(lines)
249
-
250
-
251
- def main() -> int:
252
- parser = argparse.ArgumentParser(description="Compute class weights for imbalanced datasets")
253
- parser.add_argument("data_path", type=Path)
254
- parser.add_argument("--label-col", type=str, default=None)
255
- parser.add_argument("--output", type=Path, default=None)
256
- args = parser.parse_args()
257
-
258
- if not args.data_path.exists():
259
- print(f"Error: Path not found: {args.data_path}", file=sys.stderr)
260
- return 2
261
-
262
- try:
263
- if args.data_path.is_dir():
264
- counts = count_image_classes(args.data_path)
265
- elif args.data_path.suffix.lower() in (".csv", ".tsv"):
266
- counts = count_csv_classes(args.data_path, args.label_col)
267
- elif args.data_path.suffix.lower() == ".json":
268
- counts = count_json_classes(args.data_path)
269
- else:
270
- print(f"Error: Unsupported format. Use image dir, CSV, or JSON.", file=sys.stderr)
271
- return 2
272
- except Exception as e:
273
- print(f"Error: {e}", file=sys.stderr)
274
- return 2
275
-
276
- if not counts:
277
- print("Error: No class data found.", file=sys.stderr)
278
- return 2
279
-
280
- weights_balanced = compute_weights(counts)
281
- weights_inv = compute_inverse_freq_weights(counts)
282
-
283
- report = generate_report(counts, weights_balanced, weights_inv, args.data_path)
284
-
285
- output = args.output or args.data_path.parent / f"{args.data_path.stem}_class_weights.md"
286
- output.write_text(report, encoding="utf-8")
287
-
288
- print(f"✓ Class weight report: {output}")
289
- print(f" Classes: {list(counts.keys())}")
290
- print(f" Balanced weights: {weights_balanced}")
291
- return 0
292
-
293
-
294
- if __name__ == "__main__":
295
- sys.exit(main())
@@ -1,383 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- clustering_explorer.py — BMAD DL Lifecycle
4
- (Inspired by K-Dense claude-scientific-skills/scikit-learn/clustering_analysis.py)
5
-
6
- Unsupervised cluster analysis for EDA on unlabeled or partially-labeled datasets.
7
- Useful during TSK-001 to discover natural groupings before annotation or labeling.
8
-
9
- Runs K-Means, Agglomerative, and DBSCAN; scores with Silhouette, Calinski-Harabasz,
10
- and Davies-Bouldin indices; optionally saves a PCA 2D scatter plot.
11
-
12
- Usage:
13
- python3 scripts/clustering_explorer.py <data_csv> [--k N] [--find-k] [--output report.md] [--plot clusters.png]
14
- python3 scripts/clustering_explorer.py data/features.csv --find-k --plot clusters.png
15
-
16
- Exit codes:
17
- 0 — success
18
- 2 — error
19
- """
20
-
21
- from __future__ import annotations
22
-
23
- import argparse
24
- import csv
25
- import sys
26
- import warnings
27
- from dataclasses import dataclass, field
28
- from pathlib import Path
29
-
30
- warnings.filterwarnings("ignore")
31
-
32
- try:
33
- import numpy as np
34
- HAS_NUMPY = True
35
- except ImportError:
36
- HAS_NUMPY = False
37
-
38
- try:
39
- from sklearn.preprocessing import StandardScaler
40
- from sklearn.decomposition import PCA
41
- from sklearn.cluster import KMeans, DBSCAN, AgglomerativeClustering
42
- from sklearn.metrics import silhouette_score, calinski_harabasz_score, davies_bouldin_score
43
- from sklearn.impute import SimpleImputer
44
- HAS_SKLEARN = True
45
- except ImportError:
46
- HAS_SKLEARN = False
47
-
48
- try:
49
- import matplotlib
50
- matplotlib.use("Agg")
51
- import matplotlib.pyplot as plt
52
- import matplotlib.cm as cm
53
- HAS_MPL = True
54
- except ImportError:
55
- HAS_MPL = False
56
-
57
-
58
- # ── Data structures ────────────────────────────────────────────────────────────
59
-
60
- @dataclass
61
- class ClusterResult:
62
- name: str
63
- n_clusters: int
64
- silhouette: float | None
65
- calinski: float | None
66
- davies: float | None
67
- labels: "list | None" = None
68
- n_noise: int = 0
69
- notes: str = ""
70
-
71
-
72
- # ── Data loading ───────────────────────────────────────────────────────────────
73
-
74
- def load_numeric_csv(path: Path) -> tuple["np.ndarray", list[str]]:
75
- """Load CSV, drop non-numeric and label columns, return (X, feature_names)."""
76
- with path.open(newline="", encoding="utf-8", errors="replace") as f:
77
- reader = csv.DictReader(f)
78
- rows = list(reader)
79
- if not rows:
80
- raise ValueError("CSV is empty")
81
-
82
- columns = list(rows[0].keys())
83
- # Exclude likely label columns
84
- label_cols = {c for c in columns if c.lower() in ("label", "class", "target", "y", "category")}
85
-
86
- numeric_cols: list[str] = []
87
- for col in columns:
88
- if col in label_cols:
89
- continue
90
- try:
91
- [float(row[col]) for row in rows if row.get(col, "").strip()]
92
- numeric_cols.append(col)
93
- except ValueError:
94
- pass
95
-
96
- if not numeric_cols:
97
- raise ValueError("No numeric feature columns found")
98
-
99
- X = np.array([
100
- [float(row[c]) if row.get(c, "").strip() else float("nan") for c in numeric_cols]
101
- for row in rows
102
- ], dtype=float)
103
- return X, numeric_cols
104
-
105
-
106
- def preprocess(X: "np.ndarray") -> "np.ndarray":
107
- imputer = SimpleImputer(strategy="median")
108
- scaler = StandardScaler()
109
- return scaler.fit_transform(imputer.fit_transform(X))
110
-
111
-
112
- # ── Optimal K search ───────────────────────────────────────────────────────────
113
-
114
- def find_optimal_k(X: "np.ndarray", k_range: range) -> tuple[int, list[float], list[float]]:
115
- inertias, silhouettes = [], []
116
- for k in k_range:
117
- km = KMeans(n_clusters=k, random_state=42, n_init=10)
118
- labels = km.fit_predict(X)
119
- inertias.append(km.inertia_)
120
- silhouettes.append(silhouette_score(X, labels))
121
- best_k = list(k_range)[int(np.argmax(silhouettes))]
122
- return best_k, inertias, silhouettes
123
-
124
-
125
- # ── Clustering ─────────────────────────────────────────────────────────────────
126
-
127
- def run_clustering(X: "np.ndarray", n_clusters: int) -> list[ClusterResult]:
128
- results: list[ClusterResult] = []
129
-
130
- algorithms = {
131
- "K-Means": KMeans(n_clusters=n_clusters, random_state=42, n_init=10),
132
- "Agglomerative": AgglomerativeClustering(n_clusters=n_clusters, linkage="ward"),
133
- }
134
- for name, algo in algorithms.items():
135
- labels = algo.fit_predict(X)
136
- try:
137
- sil = silhouette_score(X, labels)
138
- cal = calinski_harabasz_score(X, labels)
139
- dav = davies_bouldin_score(X, labels)
140
- except Exception:
141
- sil = cal = dav = None
142
- results.append(ClusterResult(
143
- name=name, n_clusters=n_clusters,
144
- silhouette=sil, calinski=cal, davies=dav, labels=labels.tolist(),
145
- ))
146
-
147
- # DBSCAN (auto eps via 5th-NN heuristic)
148
- try:
149
- from sklearn.neighbors import NearestNeighbors
150
- nn = NearestNeighbors(n_neighbors=5)
151
- nn.fit(X)
152
- distances, _ = nn.kneighbors(X)
153
- eps = float(np.percentile(distances[:, -1], 90))
154
- except Exception:
155
- eps = 0.5
156
-
157
- dbscan = DBSCAN(eps=eps, min_samples=5)
158
- db_labels = dbscan.fit_predict(X)
159
- unique_clusters = set(db_labels) - {-1}
160
- n_noise = int((db_labels == -1).sum())
161
-
162
- if len(unique_clusters) > 1:
163
- mask = db_labels != -1
164
- try:
165
- sil = silhouette_score(X[mask], db_labels[mask])
166
- cal = calinski_harabasz_score(X[mask], db_labels[mask])
167
- dav = davies_bouldin_score(X[mask], db_labels[mask])
168
- except Exception:
169
- sil = cal = dav = None
170
- results.append(ClusterResult(
171
- name="DBSCAN", n_clusters=len(unique_clusters),
172
- silhouette=sil, calinski=cal, davies=dav,
173
- labels=db_labels.tolist(), n_noise=n_noise,
174
- ))
175
- else:
176
- results.append(ClusterResult(
177
- name="DBSCAN", n_clusters=len(unique_clusters),
178
- silhouette=None, calinski=None, davies=None,
179
- labels=db_labels.tolist(), n_noise=n_noise,
180
- notes=f"Only {len(unique_clusters)} cluster(s) found — try adjusting eps",
181
- ))
182
- return results
183
-
184
-
185
- # ── Visualization ──────────────────────────────────────────────────────────────
186
-
187
- def save_cluster_plot(X: "np.ndarray", results: list[ClusterResult], output_path: Path) -> None:
188
- pca = PCA(n_components=2)
189
- X_2d = pca.fit_transform(X)
190
- var = pca.explained_variance_ratio_
191
-
192
- n_plots = len(results)
193
- ncols = min(3, n_plots)
194
- nrows = (n_plots + ncols - 1) // ncols
195
-
196
- fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), squeeze=False)
197
- axes = axes.flatten()
198
-
199
- for idx, r in enumerate(results):
200
- ax = axes[idx]
201
- labels = np.array(r.labels)
202
- unique = sorted(set(labels))
203
- colors = cm.tab10(np.linspace(0, 1, max(len(unique), 1)))
204
-
205
- for i, lbl in enumerate(unique):
206
- mask = labels == lbl
207
- color = "gray" if lbl == -1 else colors[i % len(colors)]
208
- marker = "x" if lbl == -1 else "o"
209
- label = "Noise" if lbl == -1 else f"C{lbl}"
210
- ax.scatter(X_2d[mask, 0], X_2d[mask, 1], c=[color], marker=marker,
211
- alpha=0.6, s=20, label=label)
212
-
213
- title = f"{r.name} (k={r.n_clusters})"
214
- if r.silhouette is not None:
215
- title += f"\nSil={r.silhouette:.3f}"
216
- ax.set_title(title, fontsize=9)
217
- ax.set_xlabel(f"PC1 ({var[0]:.1%})", fontsize=8)
218
- ax.set_ylabel(f"PC2 ({var[1]:.1%})", fontsize=8)
219
- ax.tick_params(labelsize=7)
220
- if r.n_clusters <= 8:
221
- ax.legend(fontsize=7, markerscale=1.2)
222
-
223
- for idx in range(len(results), len(axes)):
224
- axes[idx].axis("off")
225
-
226
- plt.suptitle("Cluster Analysis — PCA Projection", fontsize=11, y=1.01)
227
- plt.tight_layout()
228
- plt.savefig(output_path, dpi=150, bbox_inches="tight")
229
- plt.close()
230
-
231
-
232
- # ── Report generation ──────────────────────────────────────────────────────────
233
-
234
- def generate_report(
235
- results: list[ClusterResult],
236
- data_path: Path,
237
- n_samples: int,
238
- n_features: int,
239
- k_range: range | None,
240
- inertias: list[float] | None,
241
- silhouettes_per_k: list[float] | None,
242
- optimal_k: int | None,
243
- plot_path: Path | None,
244
- ) -> str:
245
- lines: list[str] = [
246
- "# Clustering Explorer Report",
247
- f"*Dataset: `{data_path.name}` | {n_samples} samples | {n_features} features*",
248
- "",
249
- "---",
250
- "",
251
- ]
252
-
253
- if k_range and optimal_k:
254
- lines += [
255
- "## A. Optimal K Analysis (K-Means Silhouette)",
256
- "",
257
- "| K | Inertia | Silhouette Score |",
258
- "| ---: | ---: | ---: |",
259
- ]
260
- for k, inert, sil in zip(k_range, inertias or [], silhouettes_per_k or []):
261
- marker = " ←" if k == optimal_k else ""
262
- lines.append(f"| {k} | {inert:.1f} | {sil:.4f}{marker} |")
263
- lines += ["", f"**Recommended K = {optimal_k}** (highest silhouette score)", "", "---", ""]
264
-
265
- lines += [
266
- "## B. Algorithm Comparison",
267
- "",
268
- "| Algorithm | Clusters | Silhouette ↑ | Calinski-Harabasz ↑ | Davies-Bouldin ↓ | Notes |",
269
- "| :--- | ---: | ---: | ---: | ---: | :--- |",
270
- ]
271
- for r in results:
272
- sil = f"{r.silhouette:.4f}" if r.silhouette is not None else "N/A"
273
- cal = f"{r.calinski:.1f}" if r.calinski is not None else "N/A"
274
- dav = f"{r.davies:.4f}" if r.davies is not None else "N/A"
275
- noise = f" ({r.n_noise} noise pts)" if r.n_noise else ""
276
- lines.append(f"| {r.name} | {r.n_clusters}{noise} | {sil} | {cal} | {dav} | {r.notes} |")
277
-
278
- # Best algorithm by silhouette
279
- scored = [r for r in results if r.silhouette is not None]
280
- if scored:
281
- best = max(scored, key=lambda r: r.silhouette)
282
- lines += ["", f"**Best algorithm by silhouette: {best.name}** (score: {best.silhouette:.4f})", ""]
283
-
284
- if plot_path:
285
- lines += [
286
- "---",
287
- "",
288
- "## C. Cluster Visualization",
289
- "",
290
- f"![Cluster scatter]({plot_path.name})",
291
- "",
292
- "*2D PCA projection. Colors indicate cluster assignments.*",
293
- "",
294
- ]
295
-
296
- lines += [
297
- "---",
298
- "",
299
- "## D. Interpretation Guide",
300
- "",
301
- "| Metric | Good Range | Meaning |",
302
- "| :--- | :--- | :--- |",
303
- "| Silhouette Score | 0.5 – 1.0 | Points are well-separated from other clusters |",
304
- "| Calinski-Harabasz | Higher = better | Dense, well-separated clusters |",
305
- "| Davies-Bouldin | 0.0 – 1.0 | Low = compact, well-separated clusters |",
306
- "",
307
- "**Next steps:**",
308
- "1. Use the best cluster assignments as pseudo-labels for semi-supervised training.",
309
- "2. Investigate outlier/noise points (DBSCAN noise) — these may be rare defects or data errors.",
310
- "3. If clusters align with known classes, your feature space is discriminative — good sign for DL.",
311
- "",
312
- "---",
313
- "*Generated by `clustering_explorer.py` — BMAD DL Lifecycle (TSK-001)*",
314
- ]
315
- return "\n".join(lines)
316
-
317
-
318
- # ── Main ───────────────────────────────────────────────────────────────────────
319
-
320
- def main() -> int:
321
- parser = argparse.ArgumentParser(description="Unsupervised clustering explorer for BMAD DL")
322
- parser.add_argument("data_csv", type=Path)
323
- parser.add_argument("--k", type=int, default=3, help="Number of clusters (default: 3)")
324
- parser.add_argument("--find-k", action="store_true", help="Search for optimal K (2–10)")
325
- parser.add_argument("--k-max", type=int, default=10)
326
- parser.add_argument("--output", type=Path, default=None)
327
- parser.add_argument("--plot", type=Path, default=None, help="Save cluster plot PNG")
328
- args = parser.parse_args()
329
-
330
- if not HAS_SKLEARN or not HAS_NUMPY:
331
- print("Error: scikit-learn and numpy required. Run: pip install scikit-learn numpy",
332
- file=sys.stderr)
333
- return 2
334
- if not args.data_csv.exists():
335
- print(f"Error: File not found: {args.data_csv}", file=sys.stderr)
336
- return 2
337
-
338
- try:
339
- X_raw, feature_names = load_numeric_csv(args.data_csv)
340
- except Exception as e:
341
- print(f"Error loading CSV: {e}", file=sys.stderr)
342
- return 2
343
-
344
- X = preprocess(X_raw)
345
- n_samples, n_features = X.shape
346
- print(f"Dataset: {n_samples} samples, {n_features} features")
347
-
348
- # Find optimal K
349
- k_range = inertias = silhouettes_k = optimal_k = None
350
- n_clusters = args.k
351
- if args.find_k:
352
- k_max = min(args.k_max, n_samples - 1)
353
- k_range = range(2, k_max + 1)
354
- print(f"Searching optimal K in range 2–{k_max}...")
355
- optimal_k, inertias, silhouettes_k = find_optimal_k(X, k_range)
356
- n_clusters = optimal_k
357
- print(f"Optimal K = {n_clusters}")
358
-
359
- print(f"Running clustering with k={n_clusters}...")
360
- results = run_clustering(X, n_clusters)
361
-
362
- # Plot
363
- plot_path: Path | None = None
364
- if args.plot:
365
- if HAS_MPL:
366
- save_cluster_plot(X, results, args.plot)
367
- plot_path = args.plot
368
- print(f"✓ Cluster plot: {plot_path}")
369
- else:
370
- print("⚠ matplotlib not available — skipping plot")
371
-
372
- report = generate_report(
373
- results, args.data_csv, n_samples, n_features,
374
- k_range, inertias, silhouettes_k, optimal_k, plot_path,
375
- )
376
- output = args.output or args.data_csv.parent / f"{args.data_csv.stem}_clustering_report.md"
377
- output.write_text(report, encoding="utf-8")
378
- print(f"✓ Report: {output}")
379
- return 0
380
-
381
-
382
- if __name__ == "__main__":
383
- sys.exit(main())