bmad-module-skill-forge 0.10.0 → 1.0.0-rc.3

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 (269) hide show
  1. package/.claude-plugin/marketplace.json +56 -0
  2. package/.gitattributes +16 -0
  3. package/README.md +105 -38
  4. package/docs/404.md +13 -10
  5. package/docs/RELEASING.md +616 -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 +30 -9
  22. package/release-audits/v1.0.0-launch-audit.md +207 -0
  23. package/src/README.md +23 -25
  24. package/src/forger/forge-tier.yaml +4 -2
  25. package/src/forger/preferences.yaml +7 -1
  26. package/src/knowledge/agentskills-spec.md +1 -1
  27. package/src/knowledge/architecture-verification.md +1 -1
  28. package/src/knowledge/ccc-bridge.md +16 -15
  29. package/src/knowledge/overview.md +11 -11
  30. package/src/knowledge/progressive-capability.md +3 -3
  31. package/src/knowledge/provenance-tracking.md +9 -3
  32. package/src/knowledge/qmd-registry.md +8 -8
  33. package/src/knowledge/skf-knowledge-index.csv +2 -2
  34. package/src/knowledge/skill-lifecycle.md +16 -1
  35. package/src/knowledge/split-body-strategy.md +1 -1
  36. package/src/knowledge/version-paths.md +17 -12
  37. package/src/module-help.csv +18 -17
  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 -71
  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 -64
  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 -70
  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 +16 -68
  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 +11 -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 -69
  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 +4 -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 +6 -4
  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 -179
  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 -150
  229. package/src/workflows/create-stack-skill/workflow.md +0 -59
  230. package/src/workflows/drop-skill/steps-c/step-03-report.md +0 -136
  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 -178
  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 -133
  239. package/src/workflows/rename-skill/workflow.md +0 -64
  240. package/src/workflows/setup-forge/steps-c/step-04-report.md +0 -159
  241. package/src/workflows/setup-forge/workflow.md +0 -51
  242. package/src/workflows/shared/health-check.md +0 -231
  243. package/src/workflows/test-skill/data/scoring-rules.md +0 -123
  244. package/src/workflows/test-skill/data/source-access-protocol.md +0 -51
  245. package/src/workflows/test-skill/steps-c/step-01-init.md +0 -217
  246. package/src/workflows/test-skill/steps-c/step-03-coverage-check.md +0 -280
  247. package/src/workflows/test-skill/steps-c/step-04-coherence-check.md +0 -271
  248. package/src/workflows/test-skill/steps-c/step-05-score.md +0 -222
  249. package/src/workflows/test-skill/steps-c/step-06-report.md +0 -208
  250. package/src/workflows/test-skill/templates/test-report-template.md +0 -28
  251. package/src/workflows/test-skill/workflow.md +0 -57
  252. package/src/workflows/update-skill/data/remote-source-resolution.md +0 -57
  253. package/src/workflows/update-skill/steps-c/step-02-detect-changes.md +0 -221
  254. package/src/workflows/update-skill/steps-c/step-03-re-extract.md +0 -256
  255. package/src/workflows/update-skill/steps-c/step-06-write.md +0 -265
  256. package/src/workflows/update-skill/workflow.md +0 -56
  257. package/src/workflows/verify-stack/data/feasibility-report-template.md +0 -63
  258. package/src/workflows/verify-stack/data/integration-verification-rules.md +0 -73
  259. package/src/workflows/verify-stack/steps-c/step-01-init.md +0 -179
  260. package/src/workflows/verify-stack/steps-c/step-03-integrations.md +0 -195
  261. package/src/workflows/verify-stack/steps-c/step-05-synthesize.md +0 -191
  262. package/src/workflows/verify-stack/steps-c/step-06-report.md +0 -200
  263. package/src/workflows/verify-stack/workflow.md +0 -61
  264. package/tools/cli/lib/compiler.js +0 -306
  265. package/tools/cli/lib/ide-commands.js +0 -244
  266. /package/src/{workflows/analyze-source → skf-analyze-source}/templates/analysis-report-template.md +0 -0
  267. /package/src/{workflows/quick-skill/data → skf-quick-skill/assets}/skill-template.md +0 -0
  268. /package/src/{workflows/setup-forge/data → skf-setup/references}/tier-rules.md +0 -0
  269. /package/src/{workflows/test-skill/data → skf-test-skill/assets}/output-section-formats.md +0 -0
@@ -6,7 +6,7 @@ QMD collections in the Skill Forge follow a **progressive registry architecture*
6
6
 
7
7
  ## Rationale
8
8
 
9
- Early SKF versions used a blind auto-index strategy: setup-forge would scan all project directories and index them into QMD collections. This created three problems:
9
+ Early SKF versions used a blind auto-index strategy: setup would scan all project directories and index them into QMD collections. This created three problems:
10
10
 
11
11
  - On fresh workspaces, auto-indexing found nothing — wasted work
12
12
  - Raw source code indexing produced low signal-to-noise search results
@@ -22,7 +22,7 @@ The progressive registry solves all three by indexing **curated workflow artifac
22
22
  | --- | --- | --- |
23
23
  | **Producer** | brief-skill, create-skill | Creates QMD collections from workflow artifacts and registers them in forge-tier.yaml |
24
24
  | **Consumer** | audit-skill, update-skill, create-stack-skill | Reads the registry, discovers collections by skill name and type, queries via qmd_bridge (see [tool-resolution.md](tool-resolution.md) for concrete resolution) |
25
- | **Janitor** | setup-forge | Cross-references live QMD collections against the registry, cleans orphans and stale entries |
25
+ | **Janitor** | setup | Cross-references live QMD collections against the registry, cleans orphans and stale entries |
26
26
 
27
27
  ### Registry Schema
28
28
 
@@ -45,7 +45,7 @@ qmd_collections:
45
45
 
46
46
  **Optional field: `status`**
47
47
 
48
- The `status` field is only present when QMD embed verification fails during collection creation. When `status: "pending"` is set, the collection exists in QMD but vector embeddings may be incomplete — only BM25 keyword `search` is reliable. `vector_search` and `deep_search` may return no results until re-embedded. Collections without a `status` field are fully operational. The setup-forge janitor should flag `"pending"` collections for re-embedding.
48
+ The `status` field is only present when QMD embed verification fails during collection creation. When `status: "pending"` is set, the collection exists in QMD but vector embeddings may be incomplete — only BM25 keyword `search` is reliable. `vector_search` and `deep_search` may return no results until re-embedded. Collections without a `status` field are fully operational. The setup janitor should flag `"pending"` collections for re-embedding.
49
49
 
50
50
  ### Collection Types
51
51
 
@@ -70,7 +70,7 @@ create-skill compiles skill → indexes {name}-extraction → registers in forge
70
70
  audit-skill reads registry → queries {name}-extraction for drift baseline
71
71
  update-skill reads registry → queries {name}-extraction for T2 enrichment
72
72
 
73
- setup-forge reads registry + QMD state → cleans orphans, removes stale entries
73
+ setup reads registry + QMD state → cleans orphans, removes stale entries
74
74
  ```
75
75
 
76
76
  ## Collection Gate
@@ -111,8 +111,8 @@ The `ccc_index_registry` array in forge-tier.yaml is a **parallel but separate**
111
111
  |--------|----------------|-------------------|
112
112
  | **What is indexed** | Curated workflow artifacts (SKILL.md, briefs, temporal data) | Source code (the actual codebase) |
113
113
  | **Index engine** | QMD (BM25 + optional vector search) | cocoindex-code (AST + vector embeddings) |
114
- | **Lifecycle** | Per-skill: created by create-skill, consumed by audit/update-skill | Per-project: created by setup-forge, verified by create-skill |
115
- | **Janitor** | setup-forge step-03 (orphan/stale QMD collection cleanup) | setup-forge step-03 section 5b (stale path cleanup) |
114
+ | **Lifecycle** | Per-skill: created by create-skill, consumed by audit/update-skill | Per-project: created by setup, verified by create-skill |
115
+ | **Janitor** | setup step-03 (orphan/stale QMD collection cleanup) | setup step-03 section 5b (stale path cleanup) |
116
116
  | **Availability** | Deep tier only | Forge+ and Deep tiers |
117
117
 
118
118
  These registries are orthogonal — they never reference each other, and their janitor sections operate independently.
@@ -139,7 +139,7 @@ Then append/replace the registry entry in forge-tier.yaml. Failures never block
139
139
 
140
140
  **Implementation:** Read `qmd_collections` from forge-tier.yaml. Find entry where `skill_name` matches AND `type` is `"extraction"`. If found, query via qmd_bridge. If not found, log and continue without T2 enrichment — not an error.
141
141
 
142
- ### Example 3: Janitor Hygiene (setup-forge)
142
+ ### Example 3: Janitor Hygiene (setup)
143
143
 
144
144
  **Context:** Setup-forge verifies QMD health on every run.
145
145
 
@@ -151,4 +151,4 @@ Then append/replace the registry entry in forge-tier.yaml. Failures never block
151
151
  - [skill-lifecycle.md](skill-lifecycle.md) — end-to-end pipeline showing where producers and consumers sit
152
152
  - [provenance-tracking.md](provenance-tracking.md) — provenance map that provides file:line context without QMD
153
153
 
154
- _Source: progressive QMD registry architecture implemented across setup-forge, brief-skill, create-skill, audit-skill, and update-skill workflows_
154
+ _Source: progressive QMD registry architecture implemented across setup, brief-skill, create-skill, audit-skill, and update-skill workflows_
@@ -1,11 +1,11 @@
1
1
  id,name,description,tags,tier,fragment_file
2
- overview,Knowledge Overview,"Entry point — knowledge map, JiT loading protocol, relationship to workflow data/ files","knowledge,navigation,jit-loading",core,knowledge/overview.md
2
+ overview,Knowledge Overview,"Entry point — knowledge map, JiT loading protocol, relationship to workflow references/ and assets/ files","knowledge,navigation,jit-loading",core,knowledge/overview.md
3
3
  zero-hallucination,Zero Hallucination Principle,"Foundational principle — uncitable content is excluded not guessed, every claim traces to source","integrity,provenance,extraction",core,knowledge/zero-hallucination.md
4
4
  confidence-tiers,Confidence Tiers,"Trust model — T1/T1-low/T2/T3 labels, citation formats, tier interaction rules","confidence,citations,evidence,tiers",core,knowledge/confidence-tiers.md
5
5
  progressive-capability,Progressive Capability,"Quick/Forge/Forge+/Deep philosophy — every tier is legitimate, positive framing, graceful degradation","tiers,quick,forge,forge+,deep,capability",core,knowledge/progressive-capability.md
6
6
  ccc-bridge,CCC Bridge,"cocoindex-code semantic discovery — ccc_bridge interface, indexing lifecycle, Forge+ tier, discovery-before-extraction principle","ccc,cocoindex,semantic,discovery,forge+,bridge",core,knowledge/ccc-bridge.md
7
7
  agentskills-spec,agentskills.io Specification,"Format principles — frontmatter, progressive disclosure, directory structure, compliance rules, MCP tool naming, script quality, development methodology","agentskills,format,compliance,output,mcp,scripts,methodology",core,knowledge/agentskills-spec.md
8
- skill-lifecycle,Skill Lifecycle,"End-to-end pipeline — workflow connections, artifact flow, decision rules for workflow selection","lifecycle,pipeline,workflows,artifacts",core,knowledge/skill-lifecycle.md
8
+ skill-lifecycle,Skill Lifecycle,"End-to-end pipeline — workflow connections, artifact flow, decision rules for workflow selection, pipeline invocation syntax and aliases","lifecycle,pipeline,workflows,artifacts,chaining,headless",core,knowledge/skill-lifecycle.md
9
9
  provenance-tracking,Provenance Tracking,"Provenance mechanism — provenance-map.json entries and file_entries, evidence reports, claim traceability","provenance,evidence,traceability,citations,file-entries",core,knowledge/provenance-tracking.md
10
10
  manual-section-integrity,Manual Section Integrity,"[MANUAL] preservation — marker format, merge algorithm, orphan detection","manual,preservation,merge,markers",core,knowledge/manual-section-integrity.md
11
11
  qmd-registry,QMD Collection Registry,"Progressive registry architecture — producer/consumer/janitor roles, collection gate principle, forge-tier.yaml registry schema","qmd,registry,collections,deep,indexing",core,knowledge/qmd-registry.md
@@ -167,6 +167,21 @@ SS (compose) → SKILL.md (stack skill synthesized from individual skills + arch
167
167
  - SS detects integration patterns (e.g., "express + passport always used together for auth routes")
168
168
  - Individual skills track per-library provenance; stack skills track inter-library relationships
169
169
 
170
+ ## Pipeline Invocation
171
+
172
+ Users can chain workflows by providing multiple codes to Ferris:
173
+
174
+ ```
175
+ BS CS TS EX — space-separated
176
+ forge — alias for BS CS TS EX
177
+ forge-quick — alias for QS TS EX
178
+ onboard — alias for AN CS TS EX
179
+ maintain — alias for AS US TS EX
180
+ CS[cocoindex] TS[min:80] EX — with arguments and circuit breakers
181
+ ```
182
+
183
+ Pipelines automatically activate headless mode. The forger passes data between workflows using the artifact flow described above. Circuit breakers halt the pipeline when output quality falls below a threshold (e.g., TS score < 60 blocks EX). See `shared/references/pipeline-contracts.md` for the full specification.
184
+
170
185
  ## Integration Points
171
186
 
172
187
  - **Setup Forge** must run before any other workflow — it establishes the tier
@@ -183,4 +198,4 @@ SS (compose) → SKILL.md (stack skill synthesized from individual skills + arch
183
198
  - [provenance-tracking.md](provenance-tracking.md) — how provenance flows through the pipeline
184
199
  - [version-paths.md](version-paths.md) — version-aware storage layout, path templates, and migration rules
185
200
 
186
- _Source: synthesized from all 12 workflow.md files (including VS, RA) and module-help.csv_
201
+ _Source: synthesized from all 14 SKILL.md files (including VS, RA, RS, DS) and module-help.csv_
@@ -50,6 +50,6 @@ Split-body affects only SKILL.md content movement to `references/`. The `scripts
50
50
 
51
51
  - [agentskills-spec.md](agentskills-spec.md) — 500-line guideline for SKILL.md body size and the `references/` directory structure
52
52
  - [skill-lifecycle.md](skill-lifecycle.md) — where split-body decisions fit in the compilation pipeline
53
- - `test-skill/data/scoring-rules.md` — tessl/split-body interaction and the pre-split baseline recommendation during test reporting
53
+ - `test-skill/references/scoring-rules.md` — tessl/split-body interaction and the pre-split baseline recommendation during test reporting
54
54
 
55
55
  _Source: derived from agentskills.io split-body guidance and Vercel agent accuracy research (inline vs on-demand retrieval)_
@@ -35,16 +35,21 @@ All workflows MUST use these templates when constructing paths. Never hardcode p
35
35
  | `{forge_version}` | `{forge_data_folder}/{skill-name}/{version}/` | Version-specific workspace artifacts — provenance-map.json, evidence-report.md, extraction-rules.yaml, test-report |
36
36
  | `{forge_group}` | `{forge_data_folder}/{skill-name}/` | Parent directory — contains skill-brief.yaml (version-independent) and version subdirectories |
37
37
 
38
- ### Platform Paths (Unchanged — Flat)
38
+ ### IDE Skill Root Paths (Unchanged — Flat)
39
39
 
40
- | Platform | Root Path |
41
- |----------|-----------|
42
- | `claude` | `.claude/skills/{skill-name}/` |
40
+ Each IDE has its own skill root path derived from its `target_dir` in `platform-codes.yaml`. The snippet `root:` line uses this path. Examples:
41
+
42
+ | IDE | Root Path |
43
+ |-----|-----------|
44
+ | `claude-code` | `.claude/skills/{skill-name}/` |
43
45
  | `cursor` | `.cursor/skills/{skill-name}/` |
44
- | `copilot` | `.agents/skills/{skill-name}/` |
45
- | _(legacy)_ | `skills/{skill-name}/` |
46
+ | `github-copilot` | `.github/skills/{skill-name}/` |
47
+ | `windsurf` | `.windsurf/skills/{skill-name}/` |
48
+ | _(draft/legacy)_ | `skills/{skill-name}/` |
49
+
50
+ See `skf-export-skill/assets/managed-section-format.md` for the complete IDE → Context File Mapping table with all 23 IDE root paths.
46
51
 
47
- Platform paths are **not versioned**. The export workflow resolves the active version from the manifest and references its `{skill_package}` when building the managed section. The snippet `root:` always uses the flat platform path.
52
+ IDE skill root paths are **not versioned**. The export workflow resolves the active version from the manifest and references its `{skill_package}` when building the managed section. The snippet `root:` always uses the flat IDE skill root path.
48
53
 
49
54
  ## Directory Structure
50
55
 
@@ -139,12 +144,12 @@ The export manifest gains version awareness:
139
144
  "active_version": "0.6.0",
140
145
  "versions": {
141
146
  "0.5.0": {
142
- "platforms": ["claude"],
147
+ "ides": ["claude-code"],
143
148
  "last_exported": "2026-03-15",
144
149
  "status": "archived"
145
150
  },
146
151
  "0.6.0": {
147
- "platforms": ["claude", "copilot"],
152
+ "ides": ["claude-code", "github-copilot"],
148
153
  "last_exported": "2026-04-04",
149
154
  "status": "active"
150
155
  }
@@ -158,7 +163,7 @@ The export manifest gains version awareness:
158
163
  - `schema_version`: `"2"` — enables v1-to-v2 migration detection
159
164
  - `active_version`: The version whose `{skill_package}` supplies the context snippet for the managed section. Must match exactly one version with `status: "active"`
160
165
  - `versions.{v}.status`: `"active"` (currently exported), `"archived"` (previously exported, retained on disk), `"deprecated"` (dropped via drop-skill workflow, excluded from all exports), `"draft"` (created but never exported)
161
- - `versions.{v}.platforms`: Array of platforms this version was last exported to
166
+ - `versions.{v}.ides`: Array of IDE identifiers from `config.yaml.ides` whose context file this version was last exported to (e.g. `["claude-code", "cursor"]`). NOT context file names, NOT skill root paths — the canonical IDE identifier used by the installer. Pre-rename manifests used `platforms` for this field; `skf-manifest-ops.py` silently upgrades them on read
162
167
  - `versions.{v}.last_exported`: ISO date of the last export
163
168
 
164
169
  **Only one version per skill can have `status: "active"` at any time.**
@@ -180,7 +185,7 @@ Renames a skill across all versions. Because the agentskills.io spec requires `n
180
185
  8. Export manifest: remove old key, add new key with same version data
181
186
  9. Platform context files (CLAUDE.md, AGENTS.md, .cursorrules): rebuild managed sections
182
187
 
183
- Rename is transactional — copy-verify-delete pattern. If any step fails, old skill remains intact. See `workflows/rename-skill/`.
188
+ Rename is transactional — copy-verify-delete pattern. If any step fails, old skill remains intact. See `skf-rename-skill/`.
184
189
 
185
190
  ### Drop (DS - Drop Skill)
186
191
 
@@ -194,7 +199,7 @@ Drops a specific version or the entire skill with two modes:
194
199
 
195
200
  **Skill-level drop:** Removes the entire `{skill_group}` from the manifest. If purge, also deletes `{skill_group}` and `{forge_group}` directories.
196
201
 
197
- See `workflows/drop-skill/`.
202
+ See `skf-drop-skill/`.
198
203
 
199
204
  ## Version Sanitization
200
205
 
@@ -1,17 +1,18 @@
1
- module,phase,name,code,sequence,workflow-file,command,required,agent,options,description,output-location,outputs,
2
- skf,anytime,Setup Forge,SF,,_bmad/skf/workflows/skillforge/setup-forge/workflow.md,skf_setup_forge,false,ferris,Create Mode,"Initialize forge environmentdetect tools and set capability tier (Quick/Forge/Forge+/Deep)",,forge-tier.yaml,
3
- skf,anytime,Analyze Source,AN,,_bmad/skf/workflows/skillforge/analyze-source/workflow.md,skf_analyze_source,false,ferris,Create Mode,"Discover what to skill in a large repo produces recommended skill briefs",forge_data_folder,skill-brief.yaml,
4
- skf,anytime,Brief Skill,BS,,_bmad/skf/workflows/skillforge/brief-skill/workflow.md,skf_brief_skill,false,ferris,Create Mode,"Design a skill scope through guided discovery",forge_data_folder,skill-brief.yaml,
5
- skf,anytime,Create Skill,CS,,_bmad/skf/workflows/skillforge/create-skill/workflow.md,skf_create_skill,false,ferris,Create Mode,"Compile a skill from a brief — supports --batch for multiple briefs",skills_output_folder,SKILL.md,
6
- skf,anytime,Quick Skill,QS,,_bmad/skf/workflows/skillforge/quick-skill/workflow.md,skf_quick_skill,false,ferris,Create Mode,"Fast skill from a package name or GitHub URL no brief needed",skills_output_folder,SKILL.md,
7
- skf,anytime,Stack Skill,SS,,_bmad/skf/workflows/skillforge/create-stack-skill/workflow.md,skf_create_stack_skill,false,ferris,Create Mode,"Consolidated project stack skill with integration patterns code-mode (analyzes manifests) or compose-mode (synthesizes from existing skills + architecture doc)",skills_output_folder,SKILL.md,
8
- skf,anytime,Update Skill,US,,_bmad/skf/workflows/skillforge/update-skill/workflow.md,skf_update_skill,false,ferris,Surgeon Mode,"Smart regeneration preserving [MANUAL] sections after source changes",skills_output_folder,SKILL.md,
9
- skf,anytime,Audit Skill,AS,,_bmad/skf/workflows/skillforge/audit-skill/workflow.md,skf_audit_skill,false,ferris,Audit Mode,"Drift detection between skill and current source code",,"drift report",
10
- skf,anytime,Test Skill,TS,,_bmad/skf/workflows/skillforge/test-skill/workflow.md,skf_test_skill,false,ferris,Audit Mode,"Cognitive completeness verification quality gate before export",,"completeness score",
11
- skf,anytime,Export Skill,EX,,_bmad/skf/workflows/skillforge/export-skill/workflow.md,skf_export_skill,false,ferris,Delivery Mode,"Package for distribution and inject context into CLAUDE.md/AGENTS.md/.cursorrules",skills_output_folder,"agentskills.io package",
12
- skf,anytime,Rename Skill,RS,,_bmad/skf/workflows/skillforge/rename-skill/workflow.md,skf_rename_skill,false,ferris,Management Mode,"Rename a skill across all its versions transactional copy-verify-delete with platform context rebuild",skills_output_folder,"renamed skill group",
13
- skf,anytime,Drop Skill,DS,,_bmad/skf/workflows/skillforge/drop-skill/workflow.md,skf_drop_skill,false,ferris,Management Mode,"Drop a specific skill version or an entire skill soft (deprecate) or hard (purge) with platform context rebuild",skills_output_folder,"updated manifest",
14
- skf,anytime,Verify Stack,VS,,_bmad/skf/workflows/skillforge/verify-stack/workflow.md,skf_verify_stack,false,ferris,Audit Mode,"Pre-code stack feasibility verification against architecture and PRD documents",forge_data_folder,"feasibility-report-{project_name}.md",
15
- skf,anytime,Refine Architecture,RA,,_bmad/skf/workflows/skillforge/refine-architecture/workflow.md,skf_refine_architecture,false,ferris,Architect Mode,"Improve architecture doc using verified skill data and VS feasibility findings",output_folder,"refined-architecture-{project_name}.md",
16
- skf,anytime,Workflow Status,WS,,,skf_workflow_status,false,ferris,Reference,"Show current lifecycle position, active skill briefs, and forge tier status",,lifecycle status,
17
- skf,anytime,Knowledge Index,KI,,_bmad/skf/knowledge/skf-knowledge-index.csv,skf_knowledge_index,false,ferris,Reference,"Cross-cutting principles and patterns — JiT loaded by workflows via index lookup",,"knowledge fragments",
1
+ module,skill,display-name,menu-code,description,action,args,phase,after,before,required,output-location,outputs
2
+ skf,skf-forger,Ferris — Skill Forge Agent,FF,"Skill compilation specialistthe forge master. Invoke to access all SKF workflows via guided menu.",,,anytime,,,false,,
3
+ skf,skf-setup,Setup Forge,SF,"Initialize forge environment detect tools and set capability tier (Quick/Forge/Forge+/Deep)",,,anytime,,"skf-analyze-source,skf-brief-skill,skf-quick-skill,skf-verify-stack",false,,forge-tier.yaml
4
+ skf,skf-analyze-source,Analyze Source,AN,"Discover what to skill in a large repo — produces recommended skill briefs",,,anytime,skf-setup,skf-brief-skill,false,forge_data_folder,skill-brief.yaml
5
+ skf,skf-brief-skill,Brief Skill,BS,"Design a skill scope through guided discovery",,,anytime,"skf-setup,skf-analyze-source",skf-create-skill,false,forge_data_folder,skill-brief.yaml
6
+ skf,skf-create-skill,Create Skill,CS,"Compile a skill from a brief supports --batch for multiple briefs",,--batch,anytime,skf-brief-skill,"skf-test-skill,skf-create-stack-skill",false,skills_output_folder,SKILL.md
7
+ skf,skf-quick-skill,Quick Skill,QS,"Fast skill from a package name or GitHub URL no brief needed",,<package-name | github-url>,anytime,skf-setup,skf-test-skill,false,skills_output_folder,SKILL.md
8
+ skf,skf-create-stack-skill,Stack Skill,SS,"Consolidated project stack skill with integration patterns — code-mode or compose-mode",,,anytime,skf-create-skill,skf-test-skill,false,skills_output_folder,SKILL.md
9
+ skf,skf-update-skill,Update Skill,US,"Smart regeneration preserving [MANUAL] sections after source changes",,,anytime,skf-export-skill,,false,skills_output_folder,SKILL.md
10
+ skf,skf-audit-skill,Audit Skill,AS,"Drift detection between skill and current source code",,,anytime,skf-export-skill,,false,,drift report
11
+ skf,skf-verify-stack,Verify Stack,VS,"Pre-code stack feasibility verification against architecture and PRD documents",,,anytime,skf-setup,skf-refine-architecture,false,forge_data_folder,feasibility-report-{project_name}.md
12
+ skf,skf-refine-architecture,Refine Architecture,RA,"Improve architecture doc using verified skill data and VS feasibility findings",,,anytime,skf-verify-stack,,false,output_folder,refined-architecture-{project_name}.md
13
+ skf,skf-test-skill,Test Skill,TS,"Cognitive completeness verificationquality gate before export",,,anytime,"skf-create-skill,skf-create-stack-skill,skf-quick-skill",skf-export-skill,false,,completeness score
14
+ skf,skf-export-skill,Export Skill,EX,"Package for distribution and inject context into CLAUDE.md/AGENTS.md/.cursorrules",,,anytime,skf-test-skill,"skf-update-skill,skf-audit-skill,skf-rename-skill,skf-drop-skill",false,skills_output_folder,agentskills.io package
15
+ skf,skf-rename-skill,Rename Skill,RS,"Rename a skill across all its versions transactional copy-verify-delete with platform context rebuild",,,anytime,skf-export-skill,,false,skills_output_folder,renamed skill group
16
+ skf,skf-drop-skill,Drop Skill,DS,"Drop a specific skill version or an entire skill soft (deprecate) or hard (purge) with platform context rebuild",,,anytime,skf-export-skill,,false,skills_output_folder,updated manifest
17
+ skf,skf-forger,Knowledge Index,KI,"Cross-cutting principles and patterns — JiT loaded by workflows via index lookup",,,anytime,,,false,,knowledge fragments
18
+ skf,skf-forger,Workflow Status,WS,"Show current lifecycle position, active skill briefs, and forge tier status",,,anytime,,,false,,lifecycle status
@@ -0,0 +1,372 @@
1
+ ---
2
+ name: 'health-check'
3
+ description: 'Workflow self-improvement health check — captures real friction as GitHub issues'
4
+ # No nextStepFile — this is always the terminal step
5
+ healthCheckRepo: '{health_check_repo}'
6
+ localFallbackFolder: '{output_folder}/improvement-queue'
7
+ seenCachePath: '$HOME/.skf/health-check-seen.json'
8
+ liveSubmitSeverities: ['bug'] # friction/gap go local-queue-default with explicit opt-in
9
+ ---
10
+
11
+ # Health Check: Workflow Self-Improvement
12
+
13
+ > **Path convention:** This file is referenced as `shared/health-check.md` from workflow step frontmatter. All `shared/` paths resolve relative to the SKF module root (`_bmad/skf/` when installed, `src/` during development), not relative to the calling step file.
14
+
15
+ ## STEP GOAL:
16
+
17
+ Reflect on the workflow that just completed. If real friction, bugs, or gaps were encountered in the SKF workflow instructions, capture them as structured findings for the user to review and optionally submit as GitHub issues.
18
+
19
+ **Zero overhead for clean runs.** If nothing went wrong, say so and exit immediately.
20
+
21
+ ## MANDATORY EXECUTION RULES:
22
+
23
+ ### Universal Rules:
24
+ - Read the complete step file before taking any action
25
+ - Speak in `{communication_language}`
26
+
27
+ ### Role Reinforcement:
28
+ - You are a **self-improvement auditor** — honest, precise, evidence-based
29
+ - You report ONLY what you actually experienced during THIS session
30
+ - You are NOT a creative writer looking for things to say
31
+
32
+ ### Anti-Hallucination Rules:
33
+ - **DO NOT FABRICATE ISSUES.** If the workflow ran smoothly, say so and exit. Inventing issues to appear thorough is a SYSTEM FAILURE.
34
+ - Only report issues you **ACTUALLY encountered** during THIS workflow execution
35
+ - Every finding MUST cite the **specific step file path and section** where the issue occurred
36
+ - If you are unsure whether something was a real issue or your own confusion, DO NOT report it
37
+ - Reporting zero issues is the EXPECTED outcome for a well-designed workflow
38
+
39
+ ---
40
+
41
+ ## MANDATORY SEQUENCE
42
+
43
+ ### 0. Announce Arrival
44
+
45
+ **Display in `{communication_language}`:**
46
+
47
+ "**Running a quick self-improvement check on this workflow.** If nothing rough came up, I'll close out immediately."
48
+
49
+ **GATE [default: skip]** — If `{headless_mode}`: skip the display entirely, log: "headless: skipped health-check arrival announcement".
50
+
51
+ **If interactive:** display the line above, then proceed to step 1 (Read Workflow Context) without waiting. The line is informational, not a commitment gate — the user's commitment to continuing was already captured upstream (either via an explicit menu in the calling step or by auto-chain). This announcement just tells them what is about to happen.
52
+
53
+ ### 1. Read Workflow Context
54
+
55
+ From the current session context, identify:
56
+ - **Workflow name** — which workflow just completed
57
+ - **Steps executed** — which step files were loaded and followed
58
+ - **Any friction points** — moments where instructions were unclear, wrong, contradictory, or missing
59
+
60
+ ### 2. Reflect on Execution
61
+
62
+ Silently review the workflow execution. Ask yourself:
63
+
64
+ - Did any step instruction lead me astray or cause unnecessary back-and-forth with the user?
65
+ - Was any step ambiguous, causing me to guess rather than follow clear guidance?
66
+ - Did I encounter a scenario the workflow didn't account for?
67
+ - Were any step instructions wrong or contradictory?
68
+
69
+ **If the answer to ALL of these is "no":**
70
+
71
+ Display:
72
+
73
+ "**Health Check: Clean run.** No workflow issues to report.
74
+
75
+ Workflow complete."
76
+
77
+ **STOP HERE. Do not proceed further. The workflow is done.**
78
+
79
+ ### 3. Present Findings (Only If Issues Exist)
80
+
81
+ For each genuine finding, present it in this format:
82
+
83
+ "**Workflow Health Check — {N} finding(s)**
84
+
85
+ ---
86
+
87
+ **Finding {i}:**
88
+
89
+ | Field | Value |
90
+ |-------|-------|
91
+ | **Severity** | `bug` / `friction` / `gap` |
92
+ | **Workflow** | {workflow name} |
93
+ | **Step File** | `src/skf-{workflow}/steps-c/{step-file-path}` |
94
+ | **Section** | {the specific section or instruction number — use a stable section heading slug, not line numbers} |
95
+ | **Fingerprint** | `fp-{7-hex}` — first 7 hex chars of `sha1("{severity}|{workflow}|{step_file}|{section-slug}")` |
96
+
97
+ **What happened:**
98
+ {Description of the actual issue encountered during execution}
99
+
100
+ **Evidence:**
101
+ {What specifically went wrong — error, confusion, user friction, missing guidance}
102
+
103
+ **Suggested improvement:**
104
+ {Concrete, actionable change to the step file or data}
105
+
106
+ ---"
107
+
108
+ **Severity definitions:**
109
+ - **`bug`** — Step instructions were wrong or contradictory
110
+ - **`friction`** — Step worked but was unclear, ambiguous, or caused unnecessary back-and-forth
111
+ - **`gap`** — A scenario arose that the workflow didn't account for at all
112
+
113
+ ### 4. User Review Gate
114
+
115
+ After presenting all findings, ask:
116
+
117
+ "**Submit these findings?**
118
+
119
+ - **[Y]** Yes — submit all findings
120
+ - **[N]** No — discard all findings
121
+ - **[E]** Edit — let me revise before submitting
122
+
123
+ _You are the final filter. Reject any finding that doesn't reflect a real issue you observed._"
124
+
125
+ **HALT and wait for user input.**
126
+
127
+ #### Menu Handling:
128
+
129
+ - **IF Y:** Proceed to step 5
130
+ - **IF N:** Display "Findings discarded. Workflow complete." — STOP
131
+ - **IF E:** Let user specify which findings to keep, modify, or remove. Then re-present the revised list and ask again.
132
+
133
+ ### 5. Route Each Finding by Severity
134
+
135
+ Before any submission, route each confirmed finding by severity:
136
+
137
+ - **`bug`** → live-submit path (step 5a below). High signal, priority for maintainers.
138
+ - **`friction`** / **`gap`** → local-queue by default (step 5c below). These are the most subjective categories and produce the most near-duplicates. Ask the user once per session: *"Also submit the {N} friction/gap finding(s) as GitHub issues? \[y/N]"* — only if the user affirms explicitly, route them through 5a.
139
+
140
+ ### 5a. Live-Submit Path: Compute Fingerprint and Dedup
141
+
142
+ For each finding routed to live-submit:
143
+
144
+ **1. Compute the fingerprint** — a deterministic 7-hex dedup key:
145
+
146
+ ```
147
+ fp="fp-$(printf '%s|%s|%s|%s' "{severity}" "{workflow}" "{step_file}" "{section-slug}" | sha1sum | cut -c1-7)"
148
+ ```
149
+
150
+ The `section-slug` is a kebab-case normalized section heading (e.g. `missing-staging-path`). Never include line numbers — they drift when files are edited.
151
+
152
+ **2. Check the local seen-cache** at `{seenCachePath}`:
153
+
154
+ If the cache exists and already contains this fingerprint for this user, skip submission silently and log: `"fp-{hash}: already submitted from this machine on {date}, issue {url} — skipping"`. This prevents the same user from re-reporting the same defect across sessions.
155
+
156
+ **3. Check GitHub CLI availability** with `gh auth status`. If `gh` is unavailable, fall through to step 5c (local fallback).
157
+
158
+ **4. Remote dedup search** — one deterministic call:
159
+
160
+ ```
161
+ gh search issues --repo {healthCheckRepo} --state open "{fp} in:title" --json number,url,title --limit 1
162
+ ```
163
+
164
+ **5a-i. If a matching open issue exists:**
165
+
166
+ Present to user:
167
+
168
+ > "**Matching report found:** #{N} — {title}
169
+ >
170
+ > Your finding has the same fingerprint `{fp}`. Options:
171
+ > - **\[R]** React (👍) on the existing issue — silent upvote, adds no comment
172
+ > - **\[C]** React + comment with YOUR environment/evidence delta (use only if it materially differs from the original)
173
+ > - **\[N]** Create a new issue anyway — only if you're certain this is a distinct defect
174
+ > - **\[S]** Skip — don't submit this finding"
175
+
176
+ Execute the chosen action:
177
+
178
+ - **R:** `gh api -X POST /repos/{repo}/issues/{N}/reactions -f content='+1'`
179
+ - **C:** Same reaction call, then `gh issue comment {N} --body "{minimal env+delta body}"`. The delta body is the Environment table plus ONE sentence describing what's different from the original. No session narrative.
180
+ - **N:** Proceed to step 5a-ii.
181
+ - **S:** Record nothing.
182
+
183
+ Record the outcome to the seen-cache under the fingerprint with fields `{action, issue_url, date}`.
184
+
185
+ **5a-ii. If no matching open issue exists** — create a new issue:
186
+
187
+ For each confirmed finding, create a GitHub issue:
188
+
189
+ **First, ensure the `{fp}` label exists** — it is per-fingerprint, so the first reporter of any defect is always creating a brand-new label. `gh issue create --label fp-XXXX` hard-fails if the label is missing, so guard it:
190
+
191
+ ```
192
+ gh label create "{fp}" --repo {healthCheckRepo} \
193
+ --color "ededed" \
194
+ --description "Health-check fingerprint dedup key" 2>/dev/null || true
195
+ ```
196
+
197
+ The `|| true` makes this idempotent: if the label already exists (second reporter of the same defect whose prior issue was closed, racing a parallel submission, etc.), `gh label create` exits non-zero and we proceed unharmed. The other labels in the command below (`health-check`, `workflow-improvement`, `bug`/`friction`/`gap`) are pre-created repo labels and do not need this guard.
198
+
199
+ **Then create the issue:**
200
+ ```
201
+ gh issue create \
202
+ --repo {healthCheckRepo} \
203
+ --title "[health-check][{severity}][{fp}] {workflow}: {short description}" \
204
+ --label "health-check,workflow-improvement,{severity},{fp}" \
205
+ --body "{formatted body using issue template structure}"
206
+ ```
207
+
208
+ The fingerprint `{fp}` appears in both title (human-readable) and label (server-side filterable). Maintainers can query all reports for a defect via the `fp-*` label without relying on title text.
209
+
210
+ After the issue is created, write the fingerprint → issue-url mapping to the seen-cache at `{seenCachePath}` so this user never re-reports the same fingerprint.
211
+
212
+ **Writing rules — non-negotiable:**
213
+
214
+ - **One issue per finding.** If you observed two independent problems, submit two issues.
215
+ - **Respect the length budgets.** Finding, Expected, Actual, Impact are each ONE sentence. Evidence is 2-5 bullets, not prose. Suggested Fix is 1-3 sentences with ONE recommendation — multiple options go in the `Alternatives considered` collapsible or (better) not at all.
216
+ - **Quote, don't paraphrase.** In Evidence, cite the exact `file:line` and put the quoted text in quotes. Link the convention to the instruction that caused it.
217
+ - **Never narrate the session.** The reader wants the defect, not the story. If a sentence starts with "During my run..." or "I was trying to...", delete it.
218
+ - **If unsure whether it's a real issue, do not submit it.** Reporting zero findings is a healthy outcome.
219
+
220
+ **Issue body format:**
221
+ ```markdown
222
+ ## Workflow
223
+ {workflow name, e.g. `skf-create-skill`}
224
+
225
+ ## Step File
226
+ `src/skf-{workflow}/steps-c/step-NN-name.md`
227
+
228
+ ## Severity
229
+ `{bug | friction | gap}`
230
+ <!-- bug: instructions were wrong or contradictory -->
231
+ <!-- friction: instructions worked but caused back-and-forth or guessing -->
232
+ <!-- gap: a scenario arose that wasn't covered at all -->
233
+
234
+ ## Fingerprint
235
+ `{fp}`
236
+ <!-- Deterministic dedup key: sha1(severity|workflow|step_file|section-slug)[:7]. -->
237
+ <!-- Also applied as a label so maintainers can filter all variants server-side. -->
238
+
239
+ ## Finding
240
+ <!-- ONE sentence. What is the problem? Do not explain why yet. -->
241
+ {e.g. Step-05 forbids writes to `skills/` but does not name a staging directory.}
242
+
243
+ ## Expected
244
+ <!-- ONE sentence. What did the step instruct or imply should happen? -->
245
+ {e.g. The step should name the staging directory between assembly and final write.}
246
+
247
+ ## Actual
248
+ <!-- ONE sentence. What did you observe instead? -->
249
+ {e.g. No staging path specified, so artifacts were written to `skills/{name}/` and step-07 had to reorganize them.}
250
+
251
+ ## Evidence
252
+ <!-- Bulleted `file:line` citations. 2-5 bullets. No narrative prose. -->
253
+ - `path/to/file.md:17` — "quoted text from the file"
254
+ - `path/to/other.md:62` — brief note on what it shows
255
+
256
+ ## Impact
257
+ <!-- ONE sentence. What did this cost in THIS session? -->
258
+ {e.g. 50KB of artifacts written to the wrong path; step-07 required a file-move pass.}
259
+
260
+ ## Suggested Fix
261
+ <!-- ONE recommended change. 1-3 sentences. Do NOT list multiple options here. -->
262
+ {e.g. Add a rule to step-05 naming `_bmad-output/{skill-name}/` as the staging directory used by step-06 validation.}
263
+
264
+ <details>
265
+ <summary>Alternatives considered (optional)</summary>
266
+
267
+ <!-- Only fill this if you seriously considered 2+ approaches. Keep under 100 words total. -->
268
+
269
+ </details>
270
+
271
+ ## Environment
272
+ | Field | Value |
273
+ |-------|-------|
274
+ | Date | {ISO date} |
275
+ | OS | {e.g. macOS 15.2, Ubuntu 24.04, Windows 11} |
276
+ | AI Editor | {e.g. Claude Code, Cursor, Windsurf} |
277
+ | Model | {e.g. Claude Opus 4.6, Claude Sonnet 4.6} |
278
+ | Forge Tier | {Quick/Forge/Forge+/Deep, else N/A} |
279
+ | SKF Version | {from `{project-root}/_bmad/skf/VERSION`, else N/A} |
280
+ ```
281
+
282
+ After creating all issues, display:
283
+
284
+ "**{N} issue(s) created on {healthCheckRepo}:**
285
+ {list each issue URL}
286
+
287
+ Workflow complete."
288
+
289
+ ### 5b. On success, update the seen-cache
290
+
291
+ After each successful `gh issue create`, append to `{seenCachePath}`:
292
+
293
+ ```json
294
+ {
295
+ "fp-XXXXXXX": {
296
+ "issue_url": "https://github.com/.../issues/123",
297
+ "action": "created",
298
+ "date": "YYYY-MM-DD"
299
+ }
300
+ }
301
+ ```
302
+
303
+ Ensure the parent directory exists. This file is global across the user's machine — not per-project — so the same defect is never re-reported across different repos the user works in.
304
+
305
+ ### 5c. Local-Queue Path (gh unavailable OR friction/gap default)
306
+
307
+ For findings that didn't go live (gh unavailable, user declined the friction/gap opt-in, or user chose **\[S]** at the dedup gate), write a local file to `{localFallbackFolder}/`:
308
+
309
+ **Filename:** `hc-{workflow}-{timestamp}.md` (one file per finding, timestamp as YYYYMMDD-HHmmss)
310
+
311
+ **File content:** Same structured format as the issue body above, with YAML frontmatter:
312
+
313
+ ```yaml
314
+ ---
315
+ type: workflow-health-finding
316
+ workflow: {workflow name}
317
+ step_file: {step file path}
318
+ severity: {bug | friction | gap}
319
+ fingerprint: {fp-XXXXXXX}
320
+ date: {ISO date}
321
+ ---
322
+ ```
323
+
324
+ After writing all files, display:
325
+
326
+ "**{N} finding(s) saved locally:**
327
+ {list each file path}
328
+
329
+ GitHub CLI is not available. To submit these as issues, run:
330
+ `gh issue create --repo {healthCheckRepo} --title \"[title]\" --body-file {file-path}`
331
+
332
+ Or open them manually at: <https://github.com/{healthCheckRepo}/issues/new/choose>
333
+
334
+ Workflow complete."
335
+
336
+ ---
337
+
338
+ ## CRITICAL STEP COMPLETION NOTE
339
+
340
+ This is the TERMINAL step — shared across all SKF workflows. After the health check completes (clean run or findings submitted/discarded), the workflow is fully done. No further steps to load.
341
+
342
+ ---
343
+
344
+ ## SYSTEM SUCCESS/FAILURE METRICS
345
+
346
+ ### SUCCESS:
347
+
348
+ - Clean runs exit immediately with no findings (most common outcome)
349
+ - Findings cite specific step files and sections with real evidence
350
+ - User review gate presented before any submission
351
+ - Severity gate respected: only `bug` submits live by default; `friction`/`gap` require explicit opt-in
352
+ - Fingerprint computed deterministically and applied to both title prefix and `fp-*` label
353
+ - `fp-*` label is ensured idempotently (`gh label create ... || true`) before `gh issue create`, so a first reporter of a defect never hard-fails
354
+ - Remote dedup search performed before every live submission; existing issues get reactions/delta-comments rather than duplicates
355
+ - Seen-cache at `{seenCachePath}` updated after every submission/reaction and consulted before every search
356
+ - Local fallback files written with clear manual submission instructions (when `gh` unavailable)
357
+ - Workflow ends cleanly
358
+
359
+ ### SYSTEM FAILURE:
360
+
361
+ - Fabricating issues that were not actually encountered during the session
362
+ - Reporting vague issues without step file citations ("the workflow was confusing")
363
+ - Skipping the user review gate
364
+ - Creating issues without user confirmation
365
+ - Creating a new issue when a matching `fp-*` open issue already exists (without explicit user \[N] override)
366
+ - Submitting `friction` or `gap` findings live without the explicit severity-gate opt-in
367
+ - Using LLM-judged "similarity" in place of the deterministic fingerprint
368
+ - Not updating the seen-cache, causing the same user to re-report identical fingerprints
369
+ - Not providing the local fallback when `gh` is unavailable
370
+ - Continuing to load steps after this one (this is terminal)
371
+
372
+ **Master Rule:** Honesty is the only policy. Zero findings is the expected, healthy outcome. Fabricating issues to appear thorough undermines the entire self-improvement system and constitutes SYSTEM FAILURE.