bmad-module-skill-forge 0.9.0 → 0.10.1-alpha.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 (268) hide show
  1. package/.claude-plugin/marketplace.json +39 -0
  2. package/.gitattributes +16 -0
  3. package/README.md +105 -38
  4. package/docs/404.md +13 -10
  5. package/docs/RELEASING.md +185 -0
  6. package/docs/STABILITY.md +123 -0
  7. package/docs/_data/pinned.yaml +98 -0
  8. package/docs/agents.md +16 -11
  9. package/docs/architecture.md +221 -0
  10. package/docs/bmad-synergy.md +11 -13
  11. package/docs/concepts.md +18 -108
  12. package/docs/examples.md +121 -80
  13. package/docs/getting-started.md +85 -147
  14. package/docs/how-it-works.md +25 -536
  15. package/docs/index.md +44 -27
  16. package/docs/skill-model.md +328 -0
  17. package/docs/troubleshooting.md +39 -0
  18. package/docs/verifying-a-skill.md +232 -0
  19. package/docs/why-skf.md +93 -0
  20. package/docs/workflows.md +119 -13
  21. package/package.json +25 -4
  22. package/src/README.md +23 -25
  23. package/src/forger/forge-tier.yaml +4 -2
  24. package/src/forger/preferences.yaml +7 -1
  25. package/src/knowledge/agentskills-spec.md +1 -1
  26. package/src/knowledge/architecture-verification.md +1 -1
  27. package/src/knowledge/ccc-bridge.md +16 -15
  28. package/src/knowledge/overview.md +11 -11
  29. package/src/knowledge/progressive-capability.md +3 -3
  30. package/src/knowledge/provenance-tracking.md +9 -3
  31. package/src/knowledge/qmd-registry.md +8 -8
  32. package/src/knowledge/skf-knowledge-index.csv +2 -2
  33. package/src/knowledge/skill-lifecycle.md +16 -1
  34. package/src/knowledge/split-body-strategy.md +1 -1
  35. package/src/knowledge/version-paths.md +17 -12
  36. package/src/module-help.csv +18 -17
  37. package/src/module.yaml +4 -0
  38. package/src/shared/health-check.md +372 -0
  39. package/src/shared/references/feasibility-report-schema.md +86 -0
  40. package/src/shared/references/headless-gate-convention.md +62 -0
  41. package/src/shared/references/output-contract-schema.md +35 -0
  42. package/src/shared/references/pipeline-contracts.md +102 -0
  43. package/src/shared/scripts/skf-atomic-write.py +370 -0
  44. package/src/shared/scripts/skf-manifest-ops.py +236 -0
  45. package/src/shared/scripts/skf-preflight.py +164 -0
  46. package/src/shared/scripts/skf-rebuild-managed-sections.py +201 -0
  47. package/src/shared/scripts/skf-severity-classify.py +163 -0
  48. package/src/shared/scripts/skf-skill-inventory.py +210 -0
  49. package/src/shared/scripts/skf-structural-diff.py +257 -0
  50. package/src/shared/scripts/skf-validate-frontmatter.py +318 -0
  51. package/src/shared/scripts/skf-validate-output.py +247 -0
  52. package/src/skf-analyze-source/SKILL.md +57 -0
  53. package/src/skf-analyze-source/assets/skill-brief-schema.md +125 -0
  54. package/src/skf-analyze-source/references/unit-detection-heuristics.md +124 -0
  55. package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-01-init.md +6 -66
  56. package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-01b-continue.md +4 -59
  57. package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-02-scan-project.md +7 -68
  58. package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-03-identify-units.md +6 -66
  59. package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-04-map-and-detect.md +7 -68
  60. package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-05-recommend.md +6 -66
  61. package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-06-generate-briefs.md +14 -66
  62. package/src/skf-analyze-source/steps-c/step-07-health-check.md +22 -0
  63. package/src/skf-audit-skill/SKILL.md +59 -0
  64. package/src/{workflows/audit-skill/data → skf-audit-skill/assets}/drift-report-template.md +7 -7
  65. package/src/{workflows/audit-skill/data → skf-audit-skill/references}/severity-rules.md +11 -11
  66. package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-01-init.md +24 -68
  67. package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-02-re-index.md +36 -71
  68. package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-03-structural-diff.md +21 -63
  69. package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-04-semantic-diff.md +6 -65
  70. package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-05-severity-classify.md +5 -63
  71. package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-06-report.md +10 -59
  72. package/src/skf-audit-skill/steps-c/step-07-health-check.md +22 -0
  73. package/src/skf-brief-skill/SKILL.md +53 -0
  74. package/src/{workflows/brief-skill/data → skf-brief-skill/assets}/scope-templates.md +23 -0
  75. package/src/skf-brief-skill/assets/skill-brief-schema.md +206 -0
  76. package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-01-gather-intent.md +6 -67
  77. package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-02-analyze-target.md +6 -66
  78. package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-03-scope-definition.md +12 -68
  79. package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-04-confirm-brief.md +5 -63
  80. package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-05-write-brief.md +10 -69
  81. package/src/skf-brief-skill/steps-c/step-06-health-check.md +22 -0
  82. package/src/skf-create-skill/SKILL.md +63 -0
  83. package/src/{workflows/create-skill/data → skf-create-skill/assets}/compile-assembly-rules.md +60 -0
  84. package/src/{workflows/create-skill/data → skf-create-skill/assets}/skill-sections.md +92 -23
  85. package/src/skf-create-skill/assets/tessl-dismissal-rules.md +102 -0
  86. package/src/{workflows/create-skill/data → skf-create-skill/references}/extraction-patterns-tracing.md +13 -13
  87. package/src/{workflows/create-skill/data → skf-create-skill/references}/extraction-patterns.md +8 -3
  88. package/src/skf-create-skill/references/source-resolution-protocols.md +239 -0
  89. package/src/{workflows/create-skill/data → skf-create-skill/references}/tier-degradation-rules.md +8 -7
  90. package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-01-load-brief.md +25 -63
  91. package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-02-ecosystem-check.md +8 -64
  92. package/src/skf-create-skill/steps-c/step-03-extract.md +379 -0
  93. package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-03d-component-extraction.md +18 -35
  94. package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-04-enrich.md +12 -69
  95. package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-05-compile.md +71 -75
  96. package/src/skf-create-skill/steps-c/step-06-validate.md +267 -0
  97. package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-07-generate-artifacts.md +30 -74
  98. package/src/skf-create-skill/steps-c/step-08-report.md +145 -0
  99. package/src/skf-create-skill/steps-c/step-09-health-check.md +23 -0
  100. package/src/{workflows/create-skill/steps-c → skf-create-skill/steps-c/sub}/step-02b-ccc-discover.md +8 -66
  101. package/src/skf-create-skill/steps-c/sub/step-03b-fetch-temporal.md +229 -0
  102. package/src/{workflows/create-skill/steps-c → skf-create-skill/steps-c/sub}/step-03c-fetch-docs.md +18 -42
  103. package/src/skf-create-stack-skill/SKILL.md +64 -0
  104. package/src/{workflows/create-stack-skill/data → skf-create-stack-skill/assets}/stack-skill-template.md +2 -1
  105. package/src/{workflows/create-stack-skill/data → skf-create-stack-skill/references}/compose-mode-rules.md +19 -5
  106. package/src/{workflows/create-stack-skill/data → skf-create-stack-skill/references}/integration-patterns.md +1 -1
  107. package/src/{workflows/create-stack-skill/data → skf-create-stack-skill/references}/manifest-patterns.md +10 -10
  108. package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-01-init.md +14 -55
  109. package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-02-detect-manifests.md +29 -63
  110. package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-03-rank-and-confirm.md +9 -59
  111. package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-04-parallel-extract.md +29 -64
  112. package/src/skf-create-stack-skill/steps-c/step-05-detect-integrations.md +164 -0
  113. package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-06-compile-stack.md +7 -60
  114. package/src/skf-create-stack-skill/steps-c/step-07-generate-output.md +328 -0
  115. package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-08-validate.md +17 -63
  116. package/src/skf-create-stack-skill/steps-c/step-09-report.md +128 -0
  117. package/src/skf-create-stack-skill/steps-c/step-10-health-check.md +22 -0
  118. package/src/skf-drop-skill/SKILL.md +57 -0
  119. package/src/{workflows/drop-skill → skf-drop-skill}/steps-c/step-01-select.md +9 -69
  120. package/src/{workflows/drop-skill → skf-drop-skill}/steps-c/step-02-execute.md +30 -106
  121. package/src/skf-drop-skill/steps-c/step-03-report.md +83 -0
  122. package/src/skf-drop-skill/steps-c/step-04-health-check.md +22 -0
  123. package/src/skf-export-skill/SKILL.md +57 -0
  124. package/src/skf-export-skill/assets/managed-section-format.md +138 -0
  125. package/src/{workflows/export-skill/data → skf-export-skill/assets}/snippet-format.md +8 -12
  126. package/src/skf-export-skill/steps-c/step-01-load-skill.md +247 -0
  127. package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-02-package.md +5 -58
  128. package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-03-generate-snippet.md +15 -77
  129. package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-04-update-context.md +59 -133
  130. package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-05-token-report.md +4 -58
  131. package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-06-summary.md +20 -64
  132. package/src/skf-export-skill/steps-c/step-07-health-check.md +22 -0
  133. package/src/skf-forger/SKILL.md +110 -0
  134. package/src/skf-forger/bmad-skill-manifest.yaml +11 -0
  135. package/src/skf-quick-skill/SKILL.md +56 -0
  136. package/src/{workflows/quick-skill/data → skf-quick-skill/references}/registry-resolution.md +6 -6
  137. package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-01-resolve-target.md +9 -62
  138. package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-02-ecosystem-check.md +5 -59
  139. package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-03-quick-extract.md +18 -61
  140. package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-04-compile.md +6 -60
  141. package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-05-validate.md +58 -78
  142. package/src/skf-quick-skill/steps-c/step-06-write.md +73 -0
  143. package/src/skf-quick-skill/steps-c/step-07-health-check.md +22 -0
  144. package/src/skf-refine-architecture/SKILL.md +57 -0
  145. package/src/{workflows/refine-architecture/data → skf-refine-architecture/references}/refinement-rules.md +16 -16
  146. package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-01-init.md +6 -63
  147. package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-02-gap-analysis.md +29 -71
  148. package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-03-issue-detection.md +5 -65
  149. package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-04-improvements.md +5 -64
  150. package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-05-compile.md +5 -56
  151. package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-06-report.md +14 -64
  152. package/src/skf-refine-architecture/steps-c/step-07-health-check.md +22 -0
  153. package/src/skf-rename-skill/SKILL.md +58 -0
  154. package/src/{workflows/rename-skill → skf-rename-skill}/steps-c/step-01-select.md +12 -73
  155. package/src/{workflows/rename-skill → skf-rename-skill}/steps-c/step-02-execute.md +32 -113
  156. package/src/skf-rename-skill/steps-c/step-03-report.md +83 -0
  157. package/src/skf-rename-skill/steps-c/step-04-health-check.md +22 -0
  158. package/src/skf-setup/SKILL.md +55 -0
  159. package/src/{workflows/setup-forge → skf-setup}/steps-c/step-01-detect-and-tier.md +6 -62
  160. package/src/{workflows/setup-forge → skf-setup}/steps-c/step-01b-ccc-index.md +9 -65
  161. package/src/{workflows/setup-forge → skf-setup}/steps-c/step-02-write-config.md +15 -60
  162. package/src/{workflows/setup-forge → skf-setup}/steps-c/step-03-auto-index.md +7 -66
  163. package/src/skf-setup/steps-c/step-04-report.md +92 -0
  164. package/src/skf-setup/steps-c/step-05-health-check.md +22 -0
  165. package/src/skf-test-skill/SKILL.md +59 -0
  166. package/src/skf-test-skill/references/migration-section-rules.md +114 -0
  167. package/src/skf-test-skill/references/scoring-rules.md +207 -0
  168. package/src/skf-test-skill/references/source-access-protocol.md +109 -0
  169. package/src/skf-test-skill/scripts/compute-score.py +310 -0
  170. package/src/skf-test-skill/steps-c/step-01-init.md +238 -0
  171. package/src/{workflows/test-skill → skf-test-skill}/steps-c/step-02-detect-mode.md +4 -62
  172. package/src/skf-test-skill/steps-c/step-03-coverage-check.md +347 -0
  173. package/src/skf-test-skill/steps-c/step-04-coherence-check.md +239 -0
  174. package/src/{workflows/test-skill → skf-test-skill}/steps-c/step-04b-external-validators.md +42 -77
  175. package/src/skf-test-skill/steps-c/step-05-score.md +266 -0
  176. package/src/skf-test-skill/steps-c/step-06-report.md +290 -0
  177. package/src/skf-test-skill/steps-c/step-07-health-check.md +25 -0
  178. package/src/skf-test-skill/templates/test-report-template.md +58 -0
  179. package/src/skf-update-skill/SKILL.md +58 -0
  180. package/src/{workflows/update-skill/data → skf-update-skill/references}/manual-section-rules.md +6 -6
  181. package/src/{workflows/update-skill/data → skf-update-skill/references}/merge-conflict-rules.md +5 -5
  182. package/src/skf-update-skill/references/remote-source-resolution.md +94 -0
  183. package/src/{workflows/update-skill → skf-update-skill}/steps-c/step-01-init.md +22 -69
  184. package/src/skf-update-skill/steps-c/step-02-detect-changes.md +255 -0
  185. package/src/skf-update-skill/steps-c/step-03-re-extract.md +336 -0
  186. package/src/{workflows/update-skill → skf-update-skill}/steps-c/step-04-merge.md +60 -72
  187. package/src/{workflows/update-skill → skf-update-skill}/steps-c/step-05-validate.md +5 -62
  188. package/src/skf-update-skill/steps-c/step-06-write.md +278 -0
  189. package/src/{workflows/update-skill → skf-update-skill}/steps-c/step-07-report.md +11 -66
  190. package/src/skf-update-skill/steps-c/step-08-health-check.md +22 -0
  191. package/src/skf-verify-stack/SKILL.md +60 -0
  192. package/src/skf-verify-stack/assets/feasibility-report-template.md +76 -0
  193. package/src/{workflows/verify-stack/data → skf-verify-stack/references}/coverage-patterns.md +12 -4
  194. package/src/skf-verify-stack/references/integration-verification-rules.md +78 -0
  195. package/src/skf-verify-stack/steps-c/step-01-init.md +178 -0
  196. package/src/{workflows/verify-stack → skf-verify-stack}/steps-c/step-02-coverage.md +27 -72
  197. package/src/skf-verify-stack/steps-c/step-03-integrations.md +179 -0
  198. package/src/{workflows/verify-stack → skf-verify-stack}/steps-c/step-04-requirements.md +14 -67
  199. package/src/skf-verify-stack/steps-c/step-05-synthesize.md +147 -0
  200. package/src/skf-verify-stack/steps-c/step-06-report.md +156 -0
  201. package/src/skf-verify-stack/steps-c/step-07-health-check.md +25 -0
  202. package/tools/cli/commands/install.js +1 -1
  203. package/tools/cli/commands/status.js +21 -23
  204. package/tools/cli/commands/uninstall.js +11 -19
  205. package/tools/cli/commands/update.js +2 -2
  206. package/tools/cli/lib/ide-skills.js +216 -0
  207. package/tools/cli/lib/installer.js +29 -52
  208. package/tools/cli/lib/manifest.js +11 -5
  209. package/tools/cli/lib/platform-codes.yaml +223 -0
  210. package/tools/cli/lib/ui.js +76 -47
  211. package/tools/validate-docs-drift.js +193 -0
  212. package/src/agents/forger.agent.yaml +0 -114
  213. package/src/workflows/README.md +0 -174
  214. package/src/workflows/analyze-source/data/skill-brief-schema.md +0 -125
  215. package/src/workflows/analyze-source/data/unit-detection-heuristics.md +0 -124
  216. package/src/workflows/analyze-source/workflow.md +0 -61
  217. package/src/workflows/audit-skill/workflow.md +0 -64
  218. package/src/workflows/brief-skill/data/skill-brief-schema.md +0 -159
  219. package/src/workflows/brief-skill/workflow.md +0 -58
  220. package/src/workflows/create-skill/data/source-resolution-protocols.md +0 -200
  221. package/src/workflows/create-skill/steps-c/step-03-extract.md +0 -301
  222. package/src/workflows/create-skill/steps-c/step-03b-fetch-temporal.md +0 -253
  223. package/src/workflows/create-skill/steps-c/step-06-validate.md +0 -254
  224. package/src/workflows/create-skill/steps-c/step-08-report.md +0 -176
  225. package/src/workflows/create-skill/workflow.md +0 -53
  226. package/src/workflows/create-stack-skill/steps-c/step-05-detect-integrations.md +0 -196
  227. package/src/workflows/create-stack-skill/steps-c/step-07-generate-output.md +0 -270
  228. package/src/workflows/create-stack-skill/steps-c/step-09-report.md +0 -145
  229. package/src/workflows/create-stack-skill/workflow.md +0 -59
  230. package/src/workflows/drop-skill/steps-c/step-03-report.md +0 -135
  231. package/src/workflows/drop-skill/workflow.md +0 -63
  232. package/src/workflows/export-skill/data/managed-section-format.md +0 -103
  233. package/src/workflows/export-skill/steps-c/step-01-load-skill.md +0 -237
  234. package/src/workflows/export-skill/workflow.md +0 -58
  235. package/src/workflows/quick-skill/steps-c/step-06-write.md +0 -179
  236. package/src/workflows/quick-skill/workflow.md +0 -58
  237. package/src/workflows/refine-architecture/workflow.md +0 -61
  238. package/src/workflows/rename-skill/steps-c/step-03-report.md +0 -132
  239. package/src/workflows/rename-skill/workflow.md +0 -64
  240. package/src/workflows/setup-forge/steps-c/step-04-report.md +0 -156
  241. package/src/workflows/setup-forge/workflow.md +0 -51
  242. package/src/workflows/test-skill/data/scoring-rules.md +0 -123
  243. package/src/workflows/test-skill/data/source-access-protocol.md +0 -51
  244. package/src/workflows/test-skill/steps-c/step-01-init.md +0 -217
  245. package/src/workflows/test-skill/steps-c/step-03-coverage-check.md +0 -280
  246. package/src/workflows/test-skill/steps-c/step-04-coherence-check.md +0 -271
  247. package/src/workflows/test-skill/steps-c/step-05-score.md +0 -222
  248. package/src/workflows/test-skill/steps-c/step-06-report.md +0 -207
  249. package/src/workflows/test-skill/templates/test-report-template.md +0 -28
  250. package/src/workflows/test-skill/workflow.md +0 -57
  251. package/src/workflows/update-skill/data/remote-source-resolution.md +0 -57
  252. package/src/workflows/update-skill/steps-c/step-02-detect-changes.md +0 -221
  253. package/src/workflows/update-skill/steps-c/step-03-re-extract.md +0 -256
  254. package/src/workflows/update-skill/steps-c/step-06-write.md +0 -265
  255. package/src/workflows/update-skill/workflow.md +0 -56
  256. package/src/workflows/verify-stack/data/feasibility-report-template.md +0 -63
  257. package/src/workflows/verify-stack/data/integration-verification-rules.md +0 -73
  258. package/src/workflows/verify-stack/steps-c/step-01-init.md +0 -179
  259. package/src/workflows/verify-stack/steps-c/step-03-integrations.md +0 -195
  260. package/src/workflows/verify-stack/steps-c/step-05-synthesize.md +0 -191
  261. package/src/workflows/verify-stack/steps-c/step-06-report.md +0 -197
  262. package/src/workflows/verify-stack/workflow.md +0 -61
  263. package/tools/cli/lib/compiler.js +0 -306
  264. package/tools/cli/lib/ide-commands.js +0 -244
  265. /package/src/{workflows/analyze-source → skf-analyze-source}/templates/analysis-report-template.md +0 -0
  266. /package/src/{workflows/quick-skill/data → skf-quick-skill/assets}/skill-template.md +0 -0
  267. /package/src/{workflows/setup-forge/data → skf-setup/references}/tier-rules.md +0 -0
  268. /package/src/{workflows/test-skill/data → skf-test-skill/assets}/output-section-formats.md +0 -0
@@ -1,9 +1,9 @@
1
1
  ---
2
- name: 'step-04-requirements'
3
- description: 'Pass 3 (OPTIONAL) — if PRD/vision document provided, verify the stack covers stated requirements'
4
-
5
2
  nextStepFile: './step-05-synthesize.md'
6
- outputFile: '{forge_data_folder}/feasibility-report-{project_name}.md'
3
+ feasibilitySchemaRef: 'src/shared/references/feasibility-report-schema.md'
4
+ atomicWriteScript: '{project-root}/src/shared/scripts/skf-atomic-write.py'
5
+ outputFile: '{forge_data_folder}/feasibility-report-{project_slug}-{timestamp}.md'
6
+ outputFileLatest: '{forge_data_folder}/feasibility-report-{project_slug}-latest.md'
7
7
  ---
8
8
 
9
9
  # Step 4: Requirements Coverage
@@ -12,41 +12,11 @@ outputFile: '{forge_data_folder}/feasibility-report-{project_name}.md'
12
12
 
13
13
  If a PRD or vision document was provided in Step 01, verify that the combined capabilities of the generated skills address each stated requirement. If no PRD was provided, skip this pass and auto-proceed. Produce a requirements coverage table with Fulfilled, Partially Fulfilled, or Not Addressed verdicts.
14
14
 
15
- ## MANDATORY EXECUTION RULES (READ FIRST):
16
-
17
- ### Universal Rules:
18
-
19
- - 📖 CRITICAL: Read the complete step file before taking any action
20
- - 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read
21
- - ⚙️ TOOL/SUBPROCESS FALLBACK: If any instruction references a subprocess, subagent, or tool you do not have access to, you MUST still achieve the outcome in your main context thread
22
- - ✅ YOU MUST ALWAYS SPEAK OUTPUT in your Agent communication style with the config `{communication_language}`
23
-
24
- ### Role Reinforcement:
25
-
26
- - ✅ You are a stack verification analyst assessing requirements coverage
27
- - ✅ Every verdict must reason from actual skill capabilities, not assumptions
28
- - ✅ "Not Addressed" is a valid and important finding — do not force-fit skills to requirements
29
-
30
- ### Step-Specific Rules:
31
-
32
- - 🎯 Focus ONLY on requirements-to-skills coverage assessment
33
- - 🚫 FORBIDDEN to re-analyze integrations — that was Step 03
34
- - 🚫 FORBIDDEN to synthesize or produce overall verdicts — that is Step 05
35
- - 💬 If no PRD was provided, skip immediately with a clear message
36
-
37
- ## EXECUTION PROTOCOLS:
38
-
39
- - 🎯 Extract requirements from PRD/vision document and assess skill coverage
40
- - 💾 Append Requirements Coverage section to {outputFile}
41
- - 📖 Auto-proceed to next step after completion or skip
42
- - 🚫 Only requirements coverage — no synthesis, no overall verdict
15
+ ## Rules
43
16
 
44
- ## CONTEXT BOUNDARIES:
45
-
46
- - Available: PRD/vision document (if provided), skill SKILL.md files, metadata.json files
47
- - Focus: Mapping requirements to skill capabilities
48
- - Limits: Do not evaluate skill quality — only whether capabilities match requirements
49
- - Dependencies: Step 01 (PRD availability flag, skill inventory)
17
+ - Focus only on requirements-to-skills coverage assessment
18
+ - Do not re-analyze integrations (Step 03) or synthesize verdicts (Step 05)
19
+ - If no PRD was provided, skip immediately with a clear message
50
20
 
51
21
  ## MANDATORY SEQUENCE
52
22
 
@@ -54,7 +24,7 @@ If a PRD or vision document was provided in Step 01, verify that the combined ca
54
24
 
55
25
  ### 1. Check PRD Availability
56
26
 
57
- **Check `prd_available` from workflow state (set in Step 01). If `prd_available` is false (no PRD/vision document was provided):**
27
+ **Read `prdAvailable` from `{outputFile}` frontmatter (set in Step 01). If `prdAvailable` is false (no PRD/vision document was provided):**
58
28
 
59
29
  "**Pass 3: Requirements Coverage — Skipped**
60
30
 
@@ -64,7 +34,7 @@ To include this pass, re-run **[VS]** with a PRD or vision document path.
64
34
 
65
35
  **Proceeding to synthesis...**"
66
36
 
67
- Update {outputFile} frontmatter: append `'step-04-requirements'` to `stepsCompleted`, set `requirements_pass: "skipped"`.
37
+ Update `{outputFile}` frontmatter: append `'step-04-requirements'` to `stepsCompleted`; set `requirementsPass: "skipped"`. Pipe the updated content through `python3 {atomicWriteScript} write --target {outputFile}` and again with `--target {outputFileLatest}`.
68
38
 
69
39
  Load, read the full file and then execute `{nextStepFile}`. **STOP HERE — do not execute sections 2-6.**
70
40
 
@@ -129,12 +99,13 @@ For each requirement, evaluate whether the combined capabilities of the generate
129
99
 
130
100
  ### 5. Append to Report
131
101
 
132
- Write the **Requirements Coverage** section to `{outputFile}`:
102
+ Write the Requirements Coverage content under the `## Recommendations` section (or as a clearly-titled subsection preceding Recommendations — the shared schema's fixed top-level headings are Executive Summary, Coverage Analysis, Integration Verdicts, Recommendations, Evidence Sources; requirements detail lives under Recommendations):
133
103
  - Include the full requirements coverage table
134
104
  - Include recommendations for Not Addressed and Partially Fulfilled items
135
105
  - Update frontmatter: append `'step-04-requirements'` to `stepsCompleted`
136
- - Set `requirements_pass: "completed"`
137
- - Set `requirements_fulfilled`, `requirements_partial`, `requirements_not_addressed` counts
106
+ - Set `requirementsPass: "completed"`
107
+ - Set `requirementsFulfilled`, `requirementsPartial`, `requirementsNotAddressed` counts
108
+ - Pipe the updated full content through `python3 {atomicWriteScript} write --target {outputFile}` and again with `--target {outputFileLatest}`
138
109
 
139
110
  ### 6. Auto-Proceed to Next Step
140
111
 
@@ -142,27 +113,3 @@ Write the **Requirements Coverage** section to `{outputFile}`:
142
113
 
143
114
  Load, read the full file and then execute `{nextStepFile}`.
144
115
 
145
- ---
146
-
147
- ## 🚨 SYSTEM SUCCESS/FAILURE METRICS
148
-
149
- ### ✅ SUCCESS:
150
-
151
- - PRD availability checked first — skipped cleanly if not provided
152
- - All requirements extracted from PRD with source section citations
153
- - Each requirement assessed against actual skill capabilities (exports, descriptions)
154
- - Verdicts include contributing skill names and specific capabilities
155
- - Not Addressed items have actionable recommendations
156
- - Requirements Coverage section appended to {outputFile}
157
- - Auto-proceeded to step 05
158
-
159
- ### ❌ SYSTEM FAILURE:
160
-
161
- - Fabricating requirements not stated in the PRD document
162
- - Force-fitting skills to requirements they do not address
163
- - Verdicts without evidence from actual skill content
164
- - Not executing the skip path when no PRD was provided
165
- - Producing synthesis or overall verdicts (that is Step 05)
166
- - Hardcoded paths instead of frontmatter variables
167
-
168
- **Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE.
@@ -0,0 +1,147 @@
1
+ ---
2
+ nextStepFile: './step-06-report.md'
3
+ feasibilitySchemaRef: 'src/shared/references/feasibility-report-schema.md'
4
+ atomicWriteScript: '{project-root}/src/shared/scripts/skf-atomic-write.py'
5
+ outputFile: '{forge_data_folder}/feasibility-report-{project_slug}-{timestamp}.md'
6
+ outputFileLatest: '{forge_data_folder}/feasibility-report-{project_slug}-latest.md'
7
+ ---
8
+
9
+ # Step 5: Synthesize Verdict
10
+
11
+ ## STEP GOAL:
12
+
13
+ Calculate the overall feasibility verdict based on all three analysis passes, generate prescriptive recommendations for every non-verified finding, check for a previous feasibility report to produce a delta, and compile the synthesis section of the report.
14
+
15
+ ## Rules
16
+
17
+ - Focus only on synthesizing findings from Steps 02-04 into a verdict — do not discover new findings
18
+ - Recommendations must name specific tools, libraries, or actions
19
+
20
+ ## MANDATORY SEQUENCE
21
+
22
+ **CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise.
23
+
24
+ ### 1. Calculate Overall Verdict
25
+
26
+ **Zero-coverage short-circuit (evaluate before anything else):** Read `coveragePercentage` from `{outputFile}` frontmatter. If `coveragePercentage == 0`, force `overallVerdict: NOT_FEASIBLE` with rationale "no coverage — analysis vacuous: zero generated skills match the architecture's referenced technologies, so integration and requirements verdicts cannot produce meaningful evidence." Skip the remainder of the verdict ladder; proceed directly to section 2 to generate recommendations for the Missing skills surfaced by Step 02.
27
+
28
+ Apply the following decision logic using findings from all completed passes:
29
+
30
+ **Evaluate in order — the first matching condition wins. Do not continue once a verdict is determined.**
31
+
32
+ **NOT_FEASIBLE (evaluate first):**
33
+ - Any integration is **Blocked** → overall verdict is `NOT_FEASIBLE`
34
+ - Rationale: a blocked integration represents a fundamental architectural incompatibility. Also note in the rationale any co-occurring Missing skills or Risky integrations so the user understands the full set of problems
35
+
36
+ **CONDITIONALLY_FEASIBLE (evaluate second):**
37
+ If ANY of the following apply, the verdict is `CONDITIONALLY_FEASIBLE`. Include ALL matching conditions in the rationale:
38
+ - Any technology is **Missing** from coverage (no skill exists)
39
+ - Any integration is **Risky** (but none Blocked)
40
+ - Requirements have any **Not Addressed** items
41
+ - Requirements have any **Partially Fulfilled** items
42
+ - Rationale: the stack can work but has gaps, risks, or unverified assumptions that must be addressed
43
+
44
+ **FEASIBLE (evaluate last):**
45
+ - Coverage is 100% (no Missing skills) AND all integrations are `Verified` AND requirements are all Fulfilled (or requirements pass was skipped) AND no Blocked or Risky integrations AND zero pairs were capped at `Plausible` due to missing Check 4 evidence → overall verdict is `FEASIBLE`
46
+ - If any pair sits at `Plausible` (including Check-4-missing caps), downgrade to `CONDITIONALLY_FEASIBLE`
47
+ - Rationale: {IF requirements pass completed:} the stack can support the architecture as described — all requirements fully fulfilled, every integration pair has a literal cross-reference. {IF requirements pass was skipped:} the stack can support the architecture as described — requirements were not evaluated (no PRD provided)
48
+
49
+ **Post-verdict: Zero integration pairs guard (apply after ANY verdict):**
50
+ If zero integration pairs were extracted (all four integration counts are 0), fire the guard whenever the user continued past the step-02 `[C] Continue anyway` prompt (i.e., any `[C]` continuation from 0% coverage or any other zero-state) — regardless of how many technologies the architecture document references:
51
+ - If the verdict was `FEASIBLE`, override to `CONDITIONALLY_FEASIBLE`
52
+ - Regardless of verdict, append this note to the rationale: "No integration claims were found in the architecture document prose. Manual review recommended to confirm that technology relationships are not documented exclusively in diagrams or implied without explicit co-mention."
53
+
54
+ Store the verdict for use in the report.
55
+
56
+ ### 2. Generate Prescriptive Recommendations
57
+
58
+ For each non-verified finding across all passes, generate an actionable next step:
59
+
60
+ **Missing skill (from Step 02):**
61
+ - "Run **[CS] Create Skill** or **[QS] Quick Skill** for `{library_name}`, then re-run **[VS]** to verify coverage."
62
+
63
+ **Risky integration (from Step 03):**
64
+ - If protocol mismatch → "Consider adding a bridge layer between `{lib_a}` and `{lib_b}` (e.g., HTTP adapter, message queue). Document the bridge in the architecture."
65
+ - If type incompatibility → "Add a serialization/conversion layer between `{lib_a}` and `{lib_b}` to resolve the type mismatch identified in their API surfaces."
66
+ - If weak evidence (Check 4 missing literal cross-reference) → "Run **[SS] Create Stack Skill** to compose `{lib_a}` and `{lib_b}` and surface integration evidence via the stack manifest, then re-run **[VS]** — the stack manifest's `integration_patterns` block will provide the literal cross-references that promote this pair from `Plausible` to `Verified`."
67
+
68
+ **Blocked integration (from Step 03):**
69
+ - If language barrier → "Replace `{lib_a}` with a `{lib_b_language}`-compatible alternative, or introduce an IPC/FFI bridge. Redesign the integration path in the architecture document."
70
+ - If fundamental incompatibility → "Replace `{blocked_lib}` with an alternative that is compatible with `{other_lib}` in the same domain, or redesign the integration path in the architecture document."
71
+ - **Named-candidate requirement:** For every Blocked integration where the recommendation proposes replacement, propose AT LEAST ONE named alternative library with a one-line justification (e.g., "Consider `{candidate_name}` — same domain as `{blocked_lib}`, native {target_language} support, compatible with `{other_lib}` via {mechanism}."). If you cannot name at least one concrete candidate, state explicitly: "No named candidate identified — manual research required" and still include one sentence on the selection criteria the user should apply. A Blocked recommendation without either a named candidate or the explicit no-candidate notice is a schema violation.
72
+
73
+ **Not Addressed requirement (from Step 04):**
74
+ - "No library in the stack covers `{requirement}`. Evaluate `{category}` libraries that provide this capability, generate a skill, then re-run **[VS]**."
75
+
76
+ **Partially Fulfilled requirement (from Step 04):**
77
+ - "Gap in `{requirement}`: {what_is_missing}. Consider extending `{contributing_skill}` or adding a dedicated library."
78
+
79
+ **Zero integration pairs (from Step 03):**
80
+ - If zero integration pairs were found AND the architecture references 2+ technologies: "No integration claims were found in the architecture document prose. Add explicit prose descriptions of how your technologies interact (not only in diagrams), then re-run **[VS]** to verify integrations."
81
+
82
+ ### 3. Check for Previous Report
83
+
84
+ Read `previousReport` from `{outputFile}` frontmatter (set in Step 01). Since the current workflow run overwrites the report starting in Step 01, the delta feature requires the user to have saved a copy before re-running [VS].
85
+
86
+ **Note:** The delta feature is only available when the user has manually backed up a prior report and provided the path. To enable delta comparisons, instruct the user to copy their feasibility report (e.g., `feasibility-report-{projectSlug}-v1.md`) before re-running [VS], then provide the backup path when prompted in Step 01.
87
+
88
+ **If a previous report is found:**
89
+ - Load its verdict, coverage percentage, integration verdicts, and per-skill `confidence_tier` values (if captured in the previous report's inventory block)
90
+ - Generate a delta comparison:
91
+ - **Improved items:** findings that were Risky/Blocked/Missing and are now Verified/Covered
92
+ - **Regressed items:** findings that were Verified/Covered and are now Risky/Blocked/Missing
93
+ - **Tier downgrades (regression):** for each skill present in both runs, compare current `confidence_tier` against previous. A downgrade (e.g., Tier 1 → Tier 2, or T1 → T1-low) is a regression — flag explicitly in the delta section with rationale "skill `{skill_name}` regressed from `{prev_tier}` to `{curr_tier}` — re-extract with [CS] at the prior tier level".
94
+ - **New items:** findings not present in the previous report
95
+ - **Unchanged items:** count of findings with the same verdict
96
+
97
+ **If no previous report found:**
98
+ - Note: "First verification run — no delta available."
99
+
100
+ ### 4. Compile Synthesis Section
101
+
102
+ Assemble the following for the report:
103
+
104
+ **Overall verdict** with rationale citing the decision logic.
105
+
106
+ **Recommendation list** ordered by priority (count total recommendations as `recommendationCount` — persist this count to `{outputFile}` frontmatter for use in step-06):
107
+ 1. Blocked integrations (if any)
108
+ 2. Missing skills
109
+ 3. Risky integrations
110
+ 4. Not Addressed requirements
111
+ 5. Partially Fulfilled requirements
112
+
113
+ **Delta from previous run** (if applicable):
114
+ - Improved, regressed, new, unchanged counts
115
+ - Specific items that changed
116
+
117
+ **Suggested next workflow** (match on case-sensitive `overallVerdict` token):
118
+ - `FEASIBLE` → "Proceed to **[RA] Refine Architecture** to produce an implementation-ready architecture, then **[SS]** to compose your stack skill, then **[TS]** to test and **[EX]** to export."
119
+ - `CONDITIONALLY_FEASIBLE` → "Address the {recommendationCount} recommendations above, then re-run **[VS]**. Once all clear, proceed to **[RA]**."
120
+ - `NOT_FEASIBLE` → "Critical blockers must be resolved before proceeding. Apply the recommendations above and re-run **[VS]**."
121
+
122
+ ### 5. Append to Report
123
+
124
+ Write the **Recommendations** and **Evidence Sources** sections to `{outputFile}` (per the fixed heading order in `{feasibilitySchemaRef}`):
125
+ - Include overall verdict with rationale in the `## Executive Summary` section (replace the placeholder text from the template)
126
+ - Include prioritized recommendation list under `## Recommendations`
127
+ - Include delta from previous run (if applicable) under `## Recommendations` as a subsection
128
+ - Include suggested next workflow at the end of `## Recommendations`
129
+ - Populate `## Evidence Sources` with per-skill citations (SKILL.md path, `metadata_schema_version`, `confidence_tier`, stack manifest if any) and architecture/PRD doc paths
130
+ - Update frontmatter (shared-schema keys):
131
+ - Append `'step-05-synthesize'` to `stepsCompleted`
132
+ - Set `overallVerdict` to one of `FEASIBLE`, `CONDITIONALLY_FEASIBLE`, `NOT_FEASIBLE` (case-sensitive, underscores — NOT spaces)
133
+ - Set `recommendationCount` to the total number of recommendations
134
+ - If delta was computed (section 3), set `deltaImproved`, `deltaRegressed`, `deltaNew`, `deltaUnchanged`
135
+ - Verify that `pairsVerified`, `pairsPlausible`, `pairsRisky`, `pairsBlocked` match the counts from Step 03 (these were set in Step 03). If a discrepancy is found, overwrite the frontmatter counts with the values from Step 03 — the report file is the system of record
136
+ - **Overall verdict enforcement (schema producer obligation):**
137
+ - If any pair has Check 4 missing/weak AND was capped at `Plausible`, that alone does NOT force `NOT_FEASIBLE`, but `FEASIBLE` requires zero such pairs
138
+ - `FEASIBLE` requires 100% coverage AND zero Blocked pairs AND zero Check-4-missing pairs — otherwise downgrade to `CONDITIONALLY_FEASIBLE`
139
+ - `coveragePercentage == 0` forces `NOT_FEASIBLE` (per section 1 short-circuit)
140
+ - Pipe the updated full content through `python3 {atomicWriteScript} write --target {outputFile}` and again with `--target {outputFileLatest}`
141
+
142
+ ### 6. Auto-Proceed to Next Step
143
+
144
+ "**Proceeding to final report presentation...**"
145
+
146
+ Load, read the full file and then execute `{nextStepFile}`.
147
+
@@ -0,0 +1,156 @@
1
+ ---
2
+ outputFile: '{forge_data_folder}/feasibility-report-{project_slug}-{timestamp}.md'
3
+ outputFileLatest: '{forge_data_folder}/feasibility-report-{project_slug}-latest.md'
4
+ feasibilitySchemaRef: 'src/shared/references/feasibility-report-schema.md'
5
+ atomicWriteScript: '{project-root}/src/shared/scripts/skf-atomic-write.py'
6
+ nextStepFile: './step-07-health-check.md'
7
+ ---
8
+
9
+ # Step 6: Present Report
10
+
11
+ ## STEP GOAL:
12
+
13
+ Present the complete feasibility report to the user. Display the overall verdict prominently, walk through key findings from each analysis pass, present actionable next steps based on the verdict, and offer the user options to review the full report or exit.
14
+
15
+ ## Rules
16
+
17
+ - Focus only on presenting the completed report — no new analysis or changes to verdicts
18
+ - Chains to the local health-check step via `{nextStepFile}` after completion — the user-facing report is NOT the terminal step
19
+
20
+ ## MANDATORY SEQUENCE
21
+
22
+ **CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise.
23
+
24
+ ### 1. Load Complete Report
25
+
26
+ Read the entire `{outputFile}` to have all data available for presentation.
27
+
28
+ Verify all expected sections are present in order per `{feasibilitySchemaRef}`: `## Executive Summary`, `## Coverage Analysis`, `## Integration Verdicts`, `## Recommendations`, `## Evidence Sources`. If any section is missing or out of order, HALT and report the schema violation — do not display partial results.
29
+
30
+ **Extract metrics from `{outputFile}` frontmatter** (per shared schema in `{feasibilitySchemaRef}`): `skillsAnalyzed`, `coveragePercentage`, `pairsVerified` (as `verified_count`), `pairsPlausible` (as `plausible_count`), `pairsRisky` (as `risky_count`), `pairsBlocked` (as `blocked_count`), `requirementsFulfilled` (as `fulfilled_count`), `requirementsPartial` (as `partial_count`), `requirementsNotAddressed` (as `not_addressed_count`), `requirementsPass`, `overallVerdict`, and `recommendationCount`. Use these mapped display names in the summary table and next steps below.
31
+
32
+ **Schema guard:** Verify `schemaVersion == "1.0"` in the frontmatter. If mismatched, HALT with "Report frontmatter schemaVersion `{value}` does not match producer schema `1.0` — report was corrupted between steps. Re-run [VS]." (Producer never proceeds past a schema mismatch.)
33
+
34
+ ### 2. Present Summary
35
+
36
+ "**Verify Stack — Feasibility Report**
37
+
38
+ ---
39
+
40
+ **Overall Verdict: {FEASIBLE / CONDITIONALLY_FEASIBLE / NOT_FEASIBLE}** (tokens are case-sensitive and use underscores per `{feasibilitySchemaRef}`; for user-facing prose you may render them as "Feasible", "Conditionally feasible", or "Not feasible")
41
+
42
+ | Metric | Value |
43
+ |--------|-------|
44
+ | **Skills Analyzed** | {skillsAnalyzed} |
45
+ | **Coverage** | {coveragePercentage}% |
46
+ | **Integrations Verified** | {verified_count} |
47
+ | **Integrations Plausible** | {plausible_count} |
48
+ | **Integrations Risky** | {risky_count} |
49
+ | **Integrations Blocked** | {blocked_count} |
50
+ | **Requirements Fulfilled** | {fulfilled_count or 'N/A — no PRD'} |
51
+ | **Requirements Partially Fulfilled** | {partial_count or 'N/A — no PRD'} |
52
+ | **Requirements Not Addressed** | {not_addressed_count or 'N/A — no PRD'} |
53
+
54
+ {IF deltaImproved is not null (delta from previous run exists):}
55
+ **Delta from Previous Run:**
56
+ - Improved: {deltaImproved} items
57
+ - Regressed: {deltaRegressed} items
58
+ - New: {deltaNew} items
59
+ - Unchanged: {deltaUnchanged} items
60
+
61
+ ---"
62
+
63
+ ### 3. Present Detailed Findings
64
+
65
+ Walk through each section briefly, focusing on items that need attention:
66
+
67
+ "**Coverage Highlights:**
68
+ {IF 100% coverage:}
69
+ - All referenced technologies have a matching skill
70
+
71
+ {IF any missing:}
72
+ - **Missing:** {list of missing technology names}
73
+
74
+ **Integration Verdicts:**
75
+ {IF all Verified/Plausible:}
76
+ - All integration pairs verified or plausible — no blockers
77
+
78
+ {IF any Risky:}
79
+ - **Risky:** {list of risky pairs with brief concern}
80
+
81
+ {IF any Blocked:}
82
+ - **Blocked:** {list of blocked pairs with brief incompatibility}
83
+
84
+ {IF requirements pass completed:}
85
+ **Requirements Gaps:**
86
+ {IF all Fulfilled:}
87
+ - All stated requirements addressed by the stack
88
+
89
+ {IF any Partially Fulfilled:}
90
+ - **Partially Fulfilled:** {list of partially covered requirements with gap description}
91
+
92
+ {IF any Not Addressed:}
93
+ - **Not Addressed:** {list of unaddressed requirements}"
94
+
95
+ ### 4. Present Next Steps
96
+
97
+ Based on the overall verdict, present the appropriate recommendation:
98
+
99
+ **IF `overallVerdict == "FEASIBLE"`:**
100
+ "**Your stack is verified.** All technologies are covered, integrations are compatible, and requirements are all fulfilled (or requirements pass was skipped).
101
+
102
+ **Recommended next steps:**
103
+ 1. **[RA] Refine Architecture** — Produce an implementation-ready architecture document enriched with skill-backed API details
104
+ 2. **[SS] Create Stack Skill** — compose your individual skills into a unified stack skill, providing the refined architecture doc when prompted
105
+ 3. **[TS] Test Skill** → **[EX] Export Skill** — Verify completeness and package for distribution"
106
+
107
+ **IF `overallVerdict == "CONDITIONALLY_FEASIBLE"`:**
108
+ "**Your stack is conditionally feasible.** There are {recommendationCount} items to address before proceeding.
109
+
110
+ **Required actions:**
111
+ {List the specific recommendations from Step 05 synthesis}
112
+
113
+ **After addressing these items:** Re-run **[VS] Verify Stack** to confirm resolution, then proceed to **[RA]**."
114
+
115
+ **IF `overallVerdict == "NOT_FEASIBLE"`:**
116
+ "**Critical blockers must be resolved.** The stack cannot support the architecture as described.
117
+
118
+ **Critical actions:**
119
+ {List the blocked integration recommendations and missing skill actions from Step 05}
120
+
121
+ **After resolving blockers:** Re-run **[VS] Verify Stack**. Repeat until verdict improves to FEASIBLE or CONDITIONALLY FEASIBLE."
122
+
123
+ ### 4b. Result Contract
124
+
125
+ Write the result contract per `shared/references/output-contract-schema.md`: the per-run record at `{forge_data_folder}/verify-stack-result-{YYYYMMDD-HHmmss}.json` (UTC timestamp, resolution to seconds) and a copy at `{forge_data_folder}/verify-stack-result-latest.json` (stable path for pipeline consumers — copy, not symlink). Include the feasibility report path (both `{outputFile}` and `{outputFileLatest}`) in `outputs`; include `overallVerdict` (`FEASIBLE` / `CONDITIONALLY_FEASIBLE` / `NOT_FEASIBLE`), `coveragePercentage`, and `recommendationCount` in `summary` — use the case-sensitive schema tokens.
126
+
127
+ Write both JSON files through `python3 {atomicWriteScript} write --target ...` to avoid partial-write corruption.
128
+
129
+ **Result-contract ordering:** The result contract is written exactly once on the first entry to step-06 (the `[X] Exit verification` path). Re-walks of the report via the `[R] Review full report` menu option do NOT regenerate it — the contract captures the run, not the presentation loop. If the user selects `[R]` repeatedly before exiting, the single on-disk contract written on first entry remains authoritative.
130
+
131
+ ### 5. Present Menu
132
+
133
+ Display: "**[R] Review full report** | **[X] Exit verification**"
134
+
135
+ #### Menu Handling Logic:
136
+
137
+ - **IF R:** Walk through the report section by section, presenting each section's content from {outputFile} in a readable format. After completing the walkthrough, redisplay the menu. (Note: the R walkthrough loop terminates only when the user selects X.)
138
+ - **IF X:** "**Feasibility report saved to:** `{outputFile}`
139
+
140
+ Re-run **[VS] Verify Stack** anytime after making changes to your skills or architecture document.
141
+
142
+ **Verification workflow complete.**"
143
+
144
+ Then load, read the full file, and execute `{nextStepFile}` — the health-check step is the true terminal step of this workflow.
145
+
146
+ #### EXECUTION RULES:
147
+
148
+ - ALWAYS halt and wait for user input after presenting the menu
149
+ - **GATE [default: X]** — If `{headless_mode}`: auto-proceed with [X] Exit verification, log: "headless: auto-exit past report menu"
150
+ - R may be selected multiple times — always walk through the full report
151
+ - X triggers the health check, which is the true workflow exit
152
+
153
+ ## CRITICAL STEP COMPLETION NOTE
154
+
155
+ When the user selects X, this step chains to the local health-check step (`{nextStepFile}`), which in turn delegates to `shared/health-check.md`. After the health check completes, the verify-stack workflow is fully done. The feasibility report at `{outputFile}` (and its stable `-latest.md` copy) contains the full analysis under the fixed headings: Executive Summary, Coverage Analysis, Integration Verdicts, Recommendations, Evidence Sources.
156
+
@@ -0,0 +1,25 @@
1
+ ---
2
+ # `shared/health-check.md` resolves relative to the SKF module root
3
+ # (`_bmad/skf/` when installed, `src/` during development), NOT relative
4
+ # to this step file.
5
+ nextStepFile: 'shared/health-check.md'
6
+ ---
7
+
8
+ # Step 7: Workflow Health Check
9
+
10
+ ## STEP GOAL:
11
+
12
+ Chain to the shared workflow self-improvement health check at `{nextStepFile}`. This is the terminal step of verify-stack — after the shared health check completes, the workflow is fully done.
13
+
14
+ ## Rules
15
+
16
+ - No user-facing reports, file writes, or result contracts in this step — those belong in step-06
17
+ - Delegate directly to `{nextStepFile}` with no additional commentary
18
+ - Do not attempt any other action between loading this step and executing `{nextStepFile}`
19
+
20
+ ## MANDATORY SEQUENCE
21
+
22
+ Attempt to load `{nextStepFile}`.
23
+
24
+ - **If `{nextStepFile}` loads successfully:** Read it fully, then execute it.
25
+ - **If `{nextStepFile}` cannot be resolved or loaded** (e.g., running against a partial installation, module root not resolvable, or the file has been removed): log exactly `health-check unavailable at {path}` (substitute the attempted resolved path) to the user-visible output and exit the workflow cleanly. Do NOT HALT with an error — the health check is an optional self-improvement hook, and the feasibility report (written in step-06) is the authoritative workflow output. Exit cleanly so CI and headless runs do not fail on a missing optional hook.
@@ -4,7 +4,7 @@ const { UI } = require('../lib/ui');
4
4
 
5
5
  module.exports = {
6
6
  command: 'install',
7
- description: 'Install SKF agents and workflows into your project',
7
+ description: 'Install SKF skills into your project',
8
8
  options: [],
9
9
  action: async () => {
10
10
  try {
@@ -8,20 +8,18 @@ const path = require('node:path');
8
8
  const fs = require('fs-extra');
9
9
  const yaml = require('js-yaml');
10
10
  const { readManifest } = require('../lib/manifest');
11
+ const { getAvailablePlatforms } = require('../lib/ide-skills');
11
12
 
12
13
  const SKF_FOLDER = '_bmad/skf';
13
14
  const SIDECAR_FOLDER = '_bmad/_memory/forger-sidecar';
14
15
 
15
- const IDE_NAMES = {
16
- 'claude-code': 'Claude Code',
17
- cline: 'Cline',
18
- codex: 'Codex',
19
- cursor: 'Cursor',
20
- 'github-copilot': 'GitHub Copilot',
21
- roo: 'Roo Code',
22
- windsurf: 'Windsurf',
23
- other: 'Other',
24
- };
16
+ function getIdeNames() {
17
+ const names = { other: 'Other' };
18
+ for (const p of getAvailablePlatforms()) {
19
+ names[p.value] = p.label;
20
+ }
21
+ return names;
22
+ }
25
23
 
26
24
  async function readYaml(filePath) {
27
25
  try {
@@ -50,18 +48,17 @@ async function getStatus(projectDir) {
50
48
  // Read preferences
51
49
  const preferences = await readYaml(path.join(sidecarDir, 'preferences.yaml'));
52
50
 
53
- // Check agent file
54
- const agentFile = path.join(skfDir, 'agents', 'forger.md');
55
- const agentCompiled = await fs.pathExists(agentFile);
51
+ // Check agent skill in module dir (always present when installed)
52
+ const agentInstalled = await fs.pathExists(path.join(skfDir, 'skf-forger', 'SKILL.md'));
56
53
 
57
- // Count workflows
58
- const workflowsDir = path.join(skfDir, 'workflows', 'skillforge');
54
+ // Count workflow skills (skf-* directories with SKILL.md, excluding the forger agent)
59
55
  let workflowCount = 0;
60
- if (await fs.pathExists(workflowsDir)) {
61
- const entries = await fs.readdir(workflowsDir);
56
+ if (await fs.pathExists(skfDir)) {
57
+ const entries = await fs.readdir(skfDir);
62
58
  for (const entry of entries) {
63
- const wfPath = path.join(workflowsDir, entry, 'workflow.md');
64
- if (await fs.pathExists(wfPath)) {
59
+ if (!entry.startsWith('skf-') || entry === 'skf-forger') continue;
60
+ const skillPath = path.join(skfDir, entry, 'SKILL.md');
61
+ if (await fs.pathExists(skillPath)) {
65
62
  workflowCount++;
66
63
  }
67
64
  }
@@ -85,7 +82,7 @@ async function getStatus(projectDir) {
85
82
  config,
86
83
  forgeTier,
87
84
  preferences,
88
- agentCompiled,
85
+ agentInstalled,
89
86
  workflowCount,
90
87
  skillsFolder,
91
88
  skillsFolderExists,
@@ -117,8 +114,8 @@ function displayStatus(status, version) {
117
114
  console.log(chalk.white.bold(' Installation'));
118
115
  console.log(` Project: ${chalk.hex('#FBBF24')(config.project_name || '(unknown)')}`);
119
116
  console.log(` SKF folder: ${chalk.dim(SKF_FOLDER + '/')}`);
120
- console.log(` Agent: ${status.agentCompiled ? chalk.green('compiled') : chalk.yellow('not compiled')}`);
121
- console.log(` Workflows: ${chalk.white(status.workflowCount)}`);
117
+ console.log(` Agent: ${status.agentInstalled ? chalk.green('installed') : chalk.yellow('not installed')}`);
118
+ console.log(` Skills: ${chalk.white(status.workflowCount)}`);
122
119
  if (manifest) {
123
120
  console.log(
124
121
  ` Installed: ${chalk.dim(manifest.installed_at ? new Date(manifest.installed_at).toLocaleDateString() : '(unknown)')}`,
@@ -131,10 +128,11 @@ function displayStatus(status, version) {
131
128
 
132
129
  // IDEs
133
130
  const ides = config.ides || [];
131
+ const ideNames = getIdeNames();
134
132
  console.log(chalk.white.bold(' IDEs'));
135
133
  if (ides.length > 0) {
136
134
  for (const ide of ides) {
137
- console.log(` ${chalk.green('●')} ${IDE_NAMES[ide] || ide}`);
135
+ console.log(` ${chalk.green('●')} ${ideNames[ide] || ide}`);
138
136
  }
139
137
  } else {
140
138
  console.log(chalk.dim(' None configured'));
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * SKF Uninstall Command
3
- * Clean removal of SKF files, IDE commands, sidecar, and output folders.
3
+ * Clean removal of SKF files, IDE skill directories, sidecar, and output folders.
4
4
  * Uses the manifest to know exactly what to remove.
5
5
  */
6
6
 
@@ -9,6 +9,7 @@ const path = require('node:path');
9
9
  const fs = require('fs-extra');
10
10
  const { confirm, isCancel, spinner, log, outro } = require('@clack/prompts');
11
11
  const { readManifest, MANIFEST_DIR, MANIFEST_FILE } = require('../lib/manifest');
12
+ const { removeAllSkfSkills } = require('../lib/ide-skills');
12
13
 
13
14
  /**
14
15
  * Count files that still exist on disk from manifest lists.
@@ -17,7 +18,7 @@ async function countExistingFiles(projectDir, manifest) {
17
18
  const allFiles = [
18
19
  ...(manifest.files.skf || []),
19
20
  ...(manifest.files.sidecar || []),
20
- ...(manifest.files.ide_commands || []),
21
+ ...(manifest.files.ide_skills || []),
21
22
  ...(manifest.files.learning || []),
22
23
  ...(manifest.files.output || []),
23
24
  ];
@@ -38,7 +39,7 @@ async function displayRemovalPlan(projectDir, manifest) {
38
39
  const categories = [
39
40
  { key: 'skf', label: 'SKF module files', dir: manifest.skf_folder },
40
41
  { key: 'sidecar', label: 'Agent sidecar state', dir: '_bmad/_memory/forger-sidecar' },
41
- { key: 'ide_commands', label: 'IDE command files' },
42
+ { key: 'ide_skills', label: 'IDE skill directories' },
42
43
  { key: 'learning', label: 'Learning material', dir: '_skf-learn' },
43
44
  { key: 'output', label: 'Output folder scaffolding' },
44
45
  ];
@@ -146,22 +147,13 @@ module.exports = {
146
147
 
147
148
  const s = spinner();
148
149
 
149
- // Remove IDE commands first (scattered across project)
150
- const ideFiles = manifest.files.ide_commands || [];
151
- if (ideFiles.length > 0) {
152
- s.start('Removing IDE commands...');
153
- const ideRemoved = await removeFiles(projectDir, ideFiles);
154
- // Clean empty IDE directories
155
- const cleanedDirs = new Set();
156
- for (const f of ideFiles) {
157
- const dir = path.dirname(f);
158
- if (!cleanedDirs.has(dir)) {
159
- cleanedDirs.add(dir);
160
- await removeEmptyDir(path.join(projectDir, dir));
161
- await removeEmptyDir(path.join(projectDir, path.dirname(dir)));
162
- }
163
- }
164
- s.stop(`Removed ${ideRemoved} IDE command files`);
150
+ // Remove IDE skill directories from all known platforms (skills + legacy command files)
151
+ s.start('Removing IDE skill directories...');
152
+ const removedIdeDirs = await removeAllSkfSkills(projectDir);
153
+ if (removedIdeDirs.length > 0) {
154
+ s.stop(`Cleaned skills from ${removedIdeDirs.length} IDE target(s)`);
155
+ } else {
156
+ s.stop('No IDE skill directories found');
165
157
  }
166
158
 
167
159
  // Remove learning material directory
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * SKF Quick Update Command
3
- * Replaces SKF files and recompiles agents without re-prompting.
3
+ * Replaces SKF files and reinstalls agent skill without re-prompting.
4
4
  * Preserves config.yaml and sidecar state.
5
5
  */
6
6
 
@@ -15,7 +15,7 @@ const SKF_FOLDER = '_bmad/skf';
15
15
 
16
16
  module.exports = {
17
17
  command: 'update',
18
- description: 'Update SKF files and recompile agents (preserves config and sidecar)',
18
+ description: 'Update SKF files and reinstall agent skill (preserves config and sidecar)',
19
19
  options: [],
20
20
  action: async () => {
21
21
  try {