bmad-module-skill-forge 2.2.0 → 4.0.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 (437) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/README.md +49 -49
  3. package/docs/404.md +10 -8
  4. package/docs/_data/pinned.yaml +22 -13
  5. package/docs/_internal/STABILITY.md +58 -35
  6. package/docs/agents.md +39 -53
  7. package/docs/architecture.md +65 -51
  8. package/docs/bmad-synergy.md +53 -51
  9. package/docs/campaign.md +127 -75
  10. package/docs/concepts.md +34 -28
  11. package/docs/examples.md +70 -68
  12. package/docs/forge-auto.md +34 -31
  13. package/docs/getting-started.md +118 -57
  14. package/docs/how-it-works.md +25 -21
  15. package/docs/index.md +15 -15
  16. package/docs/skill-model.md +70 -59
  17. package/docs/troubleshooting.md +143 -18
  18. package/docs/verifying-a-skill.md +87 -57
  19. package/docs/why-skf.md +24 -22
  20. package/docs/workflows.md +274 -110
  21. package/package.json +18 -10
  22. package/src/forger/preferences.yaml +8 -1
  23. package/src/knowledge/agentskills-spec.md +2 -0
  24. package/src/knowledge/ccc-bridge.md +40 -24
  25. package/src/knowledge/confidence-tiers.md +9 -5
  26. package/src/knowledge/overview.md +3 -3
  27. package/src/knowledge/progressive-capability.md +8 -8
  28. package/src/knowledge/provenance-tracking.md +9 -5
  29. package/src/knowledge/qmd-registry.md +3 -3
  30. package/src/knowledge/skf-knowledge-index.csv +2 -2
  31. package/src/knowledge/skill-lifecycle.md +18 -11
  32. package/src/knowledge/split-body-strategy.md +0 -3
  33. package/src/knowledge/tool-resolution.md +4 -2
  34. package/src/knowledge/version-paths.md +101 -15
  35. package/src/module-help.csv +3 -3
  36. package/src/module.yaml +10 -0
  37. package/src/shared/data/ast-grep-recipes.yaml +608 -0
  38. package/src/shared/data/ide-context-files.json +30 -0
  39. package/src/shared/health-check.md +31 -59
  40. package/src/shared/references/description-guard-protocol.md +12 -9
  41. package/src/shared/references/feasibility-report-schema.md +19 -13
  42. package/src/shared/references/headless-gate-convention.md +55 -3
  43. package/src/shared/references/output-contract-schema.md +19 -8
  44. package/src/shared/references/pipeline-contracts.md +94 -29
  45. package/src/shared/references/tessl-review.md +77 -0
  46. package/src/shared/scripts/schemas/skf-analyze-result-envelope.v1.json +194 -0
  47. package/src/shared/scripts/schemas/skf-audit-result-envelope.v1.json +192 -0
  48. package/src/shared/scripts/schemas/skf-brief-result-envelope.v1.json +32 -4
  49. package/src/shared/scripts/schemas/skf-campaign-result-envelope.v1.json +174 -0
  50. package/src/shared/scripts/schemas/skf-create-skill-result-envelope.v1.json +284 -0
  51. package/src/shared/scripts/schemas/skf-drop-skill-result-envelope.v1.json +164 -0
  52. package/src/shared/scripts/schemas/skf-export-result-envelope.v1.json +160 -0
  53. package/src/shared/scripts/schemas/skf-quick-skill-result-envelope.v1.json +261 -0
  54. package/src/shared/scripts/schemas/skf-refine-architecture-result-envelope.v1.json +192 -0
  55. package/src/shared/scripts/schemas/skf-rename-skill-result-envelope.v1.json +179 -0
  56. package/src/shared/scripts/schemas/skf-setup-result-envelope.v1.json +27 -11
  57. package/src/shared/scripts/schemas/skf-stack-result-envelope.v1.json +176 -0
  58. package/src/shared/scripts/schemas/skf-test-result-envelope.v1.json +173 -0
  59. package/src/shared/scripts/schemas/skf-update-result-envelope.v1.json +19 -5
  60. package/src/shared/scripts/schemas/skf-verify-stack-result-envelope.v1.json +180 -0
  61. package/src/shared/scripts/schemas/skill-brief.v1.json +34 -0
  62. package/src/shared/scripts/schemas/workspace-detection.v1.json +1 -1
  63. package/src/shared/scripts/skf-atomic-write.py +233 -64
  64. package/src/shared/scripts/skf-build-change-manifest.py +2753 -28
  65. package/src/shared/scripts/skf-ccc-git-hygiene.py +532 -0
  66. package/src/shared/scripts/skf-check-unit-records.py +184 -0
  67. package/src/shared/scripts/skf-check-workspace-drift.py +538 -9
  68. package/src/shared/scripts/skf-classify-changed-files.py +772 -0
  69. package/src/shared/scripts/skf-comention-pairs.py +1333 -123
  70. package/src/shared/scripts/skf-compare-file-hashes.py +267 -105
  71. package/src/shared/scripts/skf-count-imports.py +1867 -0
  72. package/src/shared/scripts/skf-count-tokens.py +1 -1
  73. package/src/shared/scripts/skf-derive-assembly-shape.py +21 -3
  74. package/src/shared/scripts/skf-description-guard.py +99 -11
  75. package/src/shared/scripts/skf-detect-docs.py +694 -2
  76. package/src/shared/scripts/skf-detect-language.py +486 -107
  77. package/src/shared/scripts/skf-detect-registry.py +887 -0
  78. package/src/shared/scripts/skf-detect-scripts-assets.py +197 -55
  79. package/src/shared/scripts/skf-detect-tools.py +209 -27
  80. package/src/shared/scripts/skf-detect-workspaces.py +506 -30
  81. package/src/shared/scripts/skf-disqualify-candidates.py +821 -182
  82. package/src/shared/scripts/skf-emit-brief-result-envelope.py +69 -191
  83. package/src/shared/scripts/skf-emit-result-envelope.py +1604 -106
  84. package/src/shared/scripts/skf-enumerate-stack-skills.py +986 -117
  85. package/src/shared/scripts/skf-extract-public-api.py +5247 -96
  86. package/src/shared/scripts/skf-extraction-inventory.py +1280 -0
  87. package/src/shared/scripts/skf-extraction-snapshot.py +664 -0
  88. package/src/shared/scripts/skf-fetch-temporal.py +674 -0
  89. package/src/shared/scripts/skf-find-cycles.py +97 -29
  90. package/src/shared/scripts/skf-find-test-report.py +476 -0
  91. package/src/shared/scripts/skf-forge-tier-rw.py +469 -205
  92. package/src/shared/scripts/skf-github-fetch.py +365 -0
  93. package/src/shared/scripts/skf-github-probe.py +700 -0
  94. package/src/shared/scripts/skf-hash-content.py +180 -20
  95. package/src/shared/scripts/skf-language-corpora.py +1 -1
  96. package/src/shared/scripts/skf-load-provenance.py +161 -27
  97. package/src/shared/scripts/skf-manifest-ops.py +1 -1
  98. package/src/shared/scripts/skf-merge-ccc-exclusions.py +2307 -223
  99. package/src/shared/scripts/skf-merge-doc-urls.py +143 -20
  100. package/src/shared/scripts/skf-names-present.py +221 -0
  101. package/src/shared/scripts/skf-pair-intersect.py +119 -28
  102. package/src/shared/scripts/skf-parse-gaps.py +1384 -0
  103. package/src/shared/scripts/skf-preapply.py +1 -1
  104. package/src/shared/scripts/skf-preflight.py +176 -28
  105. package/src/shared/scripts/skf-promote-staged.py +430 -0
  106. package/src/shared/scripts/skf-provenance-gap-dispatch.py +64 -8
  107. package/src/shared/scripts/skf-qmd-classify-collections.py +229 -45
  108. package/src/shared/scripts/skf-quick-batch.py +774 -0
  109. package/src/shared/scripts/skf-rebuild-managed-sections.py +972 -88
  110. package/src/shared/scripts/skf-recommend-scope-type.py +323 -156
  111. package/src/shared/scripts/skf-render-metadata-stats.py +156 -12
  112. package/src/shared/scripts/skf-render-quick-metadata.py +132 -28
  113. package/src/shared/scripts/skf-render-stack-metadata.py +976 -0
  114. package/src/shared/scripts/skf-resolve-authoritative-files.py +155 -14
  115. package/src/shared/scripts/skf-resolve-package.py +523 -106
  116. package/src/shared/scripts/skf-rewrite-skill-name.py +433 -47
  117. package/src/shared/scripts/skf-run-lock.py +577 -0
  118. package/src/shared/scripts/skf-scan-manifests.py +998 -57
  119. package/src/shared/scripts/skf-scan-skill-md-structure.py +1341 -37
  120. package/src/shared/scripts/skf-severity-classify.py +712 -108
  121. package/src/shared/scripts/skf-shape-detect.py +298 -204
  122. package/src/shared/scripts/skf-shard-body.py +9 -8
  123. package/src/shared/scripts/skf-skill-inventory.py +2412 -89
  124. package/src/shared/scripts/skf-skills-module.py +472 -0
  125. package/src/shared/scripts/skf-source-tree.py +1796 -0
  126. package/src/shared/scripts/skf-structural-diff.py +787 -121
  127. package/src/shared/scripts/skf-tessl-review.py +706 -0
  128. package/src/shared/scripts/skf-update-active-symlink.py +120 -67
  129. package/src/shared/scripts/skf-update-run-state.py +624 -0
  130. package/src/shared/scripts/skf-validate-brief-inputs.py +92 -29
  131. package/src/shared/scripts/skf-validate-brief-schema.py +23 -2
  132. package/src/shared/scripts/skf-validate-feasibility-report.py +577 -66
  133. package/src/shared/scripts/skf-validate-frontmatter.py +103 -26
  134. package/src/shared/scripts/skf-validate-output.py +712 -64
  135. package/src/shared/scripts/skf-validate-pins.py +1 -1
  136. package/src/shared/scripts/skf-verify-no-trace.py +116 -10
  137. package/src/shared/scripts/skf-verify-provenance-completeness.py +3945 -152
  138. package/src/shared/scripts/skf-write-skill-brief.py +406 -25
  139. package/src/shared/tool-requirements.yaml +201 -0
  140. package/src/skf-analyze-source/SKILL.md +41 -36
  141. package/src/skf-analyze-source/assets/skill-brief-schema.md +7 -8
  142. package/src/skf-analyze-source/customize.toml +36 -24
  143. package/src/skf-analyze-source/references/auto-docs-only.md +58 -20
  144. package/src/skf-analyze-source/references/continue.md +2 -13
  145. package/src/skf-analyze-source/references/discover-additional-source.md +147 -0
  146. package/src/skf-analyze-source/references/generate-briefs.md +121 -55
  147. package/src/skf-analyze-source/references/headless-contract.md +42 -15
  148. package/src/skf-analyze-source/references/identify-units.md +96 -110
  149. package/src/skf-analyze-source/references/init.md +73 -71
  150. package/src/skf-analyze-source/references/map-and-detect.md +123 -105
  151. package/src/skf-analyze-source/references/map-unit-exports.md +68 -0
  152. package/src/skf-analyze-source/references/recommend.md +51 -70
  153. package/src/skf-analyze-source/references/scan-project.md +60 -84
  154. package/src/skf-analyze-source/references/scan-root.md +39 -0
  155. package/src/skf-analyze-source/references/step-auto-scope-coexistence.md +47 -0
  156. package/src/skf-analyze-source/references/step-auto-scope-corpora.md +53 -0
  157. package/src/skf-analyze-source/references/step-auto-scope-split.md +91 -0
  158. package/src/skf-analyze-source/references/step-auto-scope.md +208 -293
  159. package/src/skf-analyze-source/references/step-shape-detect.md +14 -12
  160. package/src/skf-analyze-source/references/unit-detection-heuristics.md +37 -42
  161. package/src/skf-audit-skill/SKILL.md +43 -51
  162. package/src/skf-audit-skill/assets/drift-report-template.md +28 -3
  163. package/src/skf-audit-skill/customize.toml +41 -20
  164. package/src/skf-audit-skill/references/constituent-freshness.md +91 -0
  165. package/src/skf-audit-skill/references/doc-drift.md +141 -0
  166. package/src/skf-audit-skill/references/headless-contract.md +29 -0
  167. package/src/skf-audit-skill/references/health-check.md +2 -0
  168. package/src/skf-audit-skill/references/init.md +149 -210
  169. package/src/skf-audit-skill/references/re-index.md +103 -110
  170. package/src/skf-audit-skill/references/report.md +96 -33
  171. package/src/skf-audit-skill/references/semantic-diff.md +34 -25
  172. package/src/skf-audit-skill/references/severity-classify.md +79 -65
  173. package/src/skf-audit-skill/references/severity-rules.md +15 -6
  174. package/src/skf-audit-skill/references/structural-diff.md +80 -90
  175. package/src/skf-audit-skill/references/upstream-checkout.md +77 -0
  176. package/src/skf-audit-skill/scripts/render-drift-tables.py +712 -0
  177. package/src/skf-brief-skill/SKILL.md +37 -26
  178. package/src/skf-brief-skill/assets/description-voice-examples.md +1 -1
  179. package/src/skf-brief-skill/assets/scope-templates.md +18 -25
  180. package/src/skf-brief-skill/assets/skill-brief-schema.md +30 -23
  181. package/src/skf-brief-skill/customize.toml +48 -20
  182. package/src/skf-brief-skill/references/analyze-target.md +144 -127
  183. package/src/skf-brief-skill/references/confirm-brief.md +11 -9
  184. package/src/skf-brief-skill/references/draft-checkpoint.md +36 -17
  185. package/src/skf-brief-skill/references/gather-intent-ratify.md +68 -0
  186. package/src/skf-brief-skill/references/gather-intent.md +87 -182
  187. package/src/skf-brief-skill/references/headless-args.md +84 -16
  188. package/src/skf-brief-skill/references/health-check.md +1 -1
  189. package/src/skf-brief-skill/references/invocation-contract.md +18 -13
  190. package/src/skf-brief-skill/references/portfolio-similarity-check.md +1 -1
  191. package/src/skf-brief-skill/references/qmd-collection-registration.md +7 -10
  192. package/src/skf-brief-skill/references/scope-definition.md +123 -47
  193. package/src/skf-brief-skill/references/step-auto-brief.md +26 -100
  194. package/src/skf-brief-skill/references/step-auto-validate.md +20 -121
  195. package/src/skf-brief-skill/references/version-resolution.md +7 -10
  196. package/src/skf-brief-skill/references/write-brief.md +66 -57
  197. package/src/skf-campaign/SKILL.md +31 -34
  198. package/src/skf-campaign/assets/campaign-state-schema.json +25 -4
  199. package/src/skf-campaign/customize.toml +47 -16
  200. package/src/skf-campaign/references/campaign-contracts.md +39 -29
  201. package/src/skf-campaign/references/campaign-directive-spec.md +4 -2
  202. package/src/skf-campaign/references/health-check.md +7 -16
  203. package/src/skf-campaign/references/step-01-setup.md +46 -84
  204. package/src/skf-campaign/references/step-02-strategy.md +31 -30
  205. package/src/skf-campaign/references/step-03-pins.md +26 -18
  206. package/src/skf-campaign/references/step-04-provenance.md +24 -23
  207. package/src/skf-campaign/references/step-05-skill-loop.md +67 -48
  208. package/src/skf-campaign/references/step-06-batch.md +41 -34
  209. package/src/skf-campaign/references/step-07-capstone.md +40 -25
  210. package/src/skf-campaign/references/step-08-verify.md +28 -29
  211. package/src/skf-campaign/references/step-09-refine.md +29 -30
  212. package/src/skf-campaign/references/step-10-export.md +48 -36
  213. package/src/skf-campaign/references/step-11-maintenance.md +31 -34
  214. package/src/skf-campaign/references/step-resume.md +37 -68
  215. package/src/skf-campaign/scripts/campaign-deps.py +57 -18
  216. package/src/skf-campaign/scripts/campaign-parse-manifest.py +361 -54
  217. package/src/skf-campaign/scripts/campaign-provenance.py +96 -53
  218. package/src/skf-campaign/scripts/campaign-quality-gate.py +592 -0
  219. package/src/skf-campaign/scripts/campaign-render-batch.py +257 -49
  220. package/src/skf-campaign/scripts/campaign-render-kickoff.py +343 -50
  221. package/src/skf-campaign/scripts/campaign-report.py +204 -37
  222. package/src/skf-campaign/scripts/campaign-state.py +1128 -0
  223. package/src/skf-campaign/scripts/campaign-status.py +10 -74
  224. package/src/skf-campaign/scripts/campaign-validate-pins.py +30 -3
  225. package/src/skf-campaign/scripts/campaign-validate-state.py +34 -4
  226. package/src/skf-campaign/templates/campaign-brief-template.yaml +4 -5
  227. package/src/skf-campaign/templates/campaign-report-template.md +5 -1
  228. package/src/skf-campaign/templates/kickoff-template.md +0 -14
  229. package/src/skf-create-skill/SKILL.md +27 -20
  230. package/src/skf-create-skill/assets/compile-assembly-rules.md +11 -8
  231. package/src/skf-create-skill/assets/skill-sections.md +21 -11
  232. package/src/skf-create-skill/customize.toml +20 -8
  233. package/src/skf-create-skill/references/authoritative-files-protocol.md +36 -58
  234. package/src/skf-create-skill/references/batch-mode.md +81 -0
  235. package/src/skf-create-skill/references/ccc-index-check.md +27 -0
  236. package/src/skf-create-skill/references/compile.md +119 -70
  237. package/src/skf-create-skill/references/component-extraction.md +113 -91
  238. package/src/skf-create-skill/references/enrich.md +41 -23
  239. package/src/skf-create-skill/references/entry-points-by-hand.md +37 -0
  240. package/src/skf-create-skill/references/extract.md +204 -162
  241. package/src/skf-create-skill/references/extraction-patterns-by-hand.md +141 -0
  242. package/src/skf-create-skill/references/extraction-patterns-tracing.md +11 -11
  243. package/src/skf-create-skill/references/extraction-patterns.md +588 -201
  244. package/src/skf-create-skill/references/generate-artifacts.md +145 -93
  245. package/src/skf-create-skill/references/health-check.md +1 -1
  246. package/src/skf-create-skill/references/load-brief.md +53 -36
  247. package/src/skf-create-skill/references/relabel-rule.md +12 -0
  248. package/src/skf-create-skill/references/report.md +37 -57
  249. package/src/skf-create-skill/references/source-resolution-protocols.md +58 -169
  250. package/src/skf-create-skill/references/step-auto-shard.md +20 -93
  251. package/src/skf-create-skill/references/step-doc-rot.md +44 -60
  252. package/src/skf-create-skill/references/step-doc-sources.md +28 -19
  253. package/src/skf-create-skill/references/sub/ccc-discover.md +18 -7
  254. package/src/skf-create-skill/references/sub/fetch-docs.md +106 -59
  255. package/src/skf-create-skill/references/sub/fetch-temporal.md +53 -166
  256. package/src/skf-create-skill/references/tier-degradation-rules.md +18 -9
  257. package/src/skf-create-skill/references/validate.md +173 -99
  258. package/src/skf-create-skill/scripts/scan-doc-rot.py +232 -99
  259. package/src/skf-create-stack-skill/SKILL.md +29 -56
  260. package/src/skf-create-stack-skill/assets/metadata-contract.md +51 -0
  261. package/src/skf-create-stack-skill/assets/provenance-map-schema.md +15 -15
  262. package/src/skf-create-stack-skill/assets/stack-skill-template.md +23 -57
  263. package/src/skf-create-stack-skill/customize.toml +23 -12
  264. package/src/skf-create-stack-skill/references/compile-stack.md +57 -66
  265. package/src/skf-create-stack-skill/references/compose-mode-rules.md +24 -44
  266. package/src/skf-create-stack-skill/references/detect-integrations.md +92 -95
  267. package/src/skf-create-stack-skill/references/detect-manifests.md +46 -71
  268. package/src/skf-create-stack-skill/references/generate-output.md +138 -128
  269. package/src/skf-create-stack-skill/references/init.md +90 -32
  270. package/src/skf-create-stack-skill/references/integration-patterns.md +1 -17
  271. package/src/skf-create-stack-skill/references/invocation-contract.md +34 -0
  272. package/src/skf-create-stack-skill/references/manifest-patterns.md +32 -20
  273. package/src/skf-create-stack-skill/references/parallel-extract.md +112 -38
  274. package/src/skf-create-stack-skill/references/rank-and-confirm.md +57 -75
  275. package/src/skf-create-stack-skill/references/report.md +39 -33
  276. package/src/skf-create-stack-skill/references/validate.md +20 -39
  277. package/src/skf-drop-skill/SKILL.md +28 -51
  278. package/src/skf-drop-skill/customize.toml +44 -30
  279. package/src/skf-drop-skill/references/execute.md +83 -146
  280. package/src/skf-drop-skill/references/health-check.md +2 -0
  281. package/src/skf-drop-skill/references/invocation-contract.md +64 -0
  282. package/src/skf-drop-skill/references/report.md +46 -30
  283. package/src/skf-drop-skill/references/select.md +122 -124
  284. package/src/skf-drop-skill/scripts/dir-sizes.py +54 -26
  285. package/src/skf-drop-skill/scripts/drop-roster.py +322 -0
  286. package/src/skf-export-skill/SKILL.md +40 -62
  287. package/src/skf-export-skill/assets/managed-section-format.md +14 -50
  288. package/src/skf-export-skill/assets/snippet-format.md +3 -1
  289. package/src/skf-export-skill/customize.toml +42 -13
  290. package/src/skf-export-skill/references/generate-snippet.md +54 -46
  291. package/src/skf-export-skill/references/health-check.md +2 -0
  292. package/src/skf-export-skill/references/invocation-contract.md +15 -0
  293. package/src/skf-export-skill/references/load-skill.md +88 -62
  294. package/src/skf-export-skill/references/manifest-rebuild.md +9 -10
  295. package/src/skf-export-skill/references/multi-skill-mode.md +4 -4
  296. package/src/skf-export-skill/references/orphan-context-detection.md +13 -5
  297. package/src/skf-export-skill/references/orphan-row-detection.md +31 -22
  298. package/src/skf-export-skill/references/package.md +15 -73
  299. package/src/skf-export-skill/references/preflight-snippet-root-probe.md +51 -70
  300. package/src/skf-export-skill/references/result-envelope.md +31 -16
  301. package/src/skf-export-skill/references/summary.md +41 -17
  302. package/src/skf-export-skill/references/token-report.md +4 -12
  303. package/src/skf-export-skill/references/update-context.md +118 -237
  304. package/src/skf-forger/SKILL.md +61 -37
  305. package/src/skf-forger/bmad-skill-manifest.yaml +4 -1
  306. package/src/skf-forger/customize.toml +43 -0
  307. package/src/skf-forger/references/pipeline-mode.md +73 -18
  308. package/src/skf-forger/scripts/forge-status.py +299 -0
  309. package/src/skf-forger/scripts/parse-pipeline.py +322 -54
  310. package/src/skf-forger/scripts/pipeline-gate.py +428 -0
  311. package/src/skf-forger/scripts/pipeline-journal.py +1052 -0
  312. package/src/skf-quick-skill/SKILL.md +54 -53
  313. package/src/skf-quick-skill/assets/skill-template.md +4 -2
  314. package/src/skf-quick-skill/customize.toml +51 -20
  315. package/src/skf-quick-skill/references/batch-mode.md +74 -21
  316. package/src/skf-quick-skill/references/compile.md +30 -31
  317. package/src/skf-quick-skill/references/ecosystem-check.md +7 -57
  318. package/src/skf-quick-skill/references/finalize.md +69 -18
  319. package/src/skf-quick-skill/references/halt-contract.md +41 -29
  320. package/src/skf-quick-skill/references/health-check.md +5 -3
  321. package/src/skf-quick-skill/references/quick-extract.md +114 -45
  322. package/src/skf-quick-skill/references/registry-resolution.md +9 -64
  323. package/src/skf-quick-skill/references/resolve-target.md +116 -66
  324. package/src/skf-quick-skill/references/write-and-validate.md +79 -40
  325. package/src/skf-refine-architecture/SKILL.md +43 -53
  326. package/src/skf-refine-architecture/customize.toml +49 -20
  327. package/src/skf-refine-architecture/references/compile.md +97 -54
  328. package/src/skf-refine-architecture/references/exit-codes.md +30 -0
  329. package/src/skf-refine-architecture/references/finding-storage.md +21 -0
  330. package/src/skf-refine-architecture/references/gap-analysis.md +101 -38
  331. package/src/skf-refine-architecture/references/improvements.md +14 -20
  332. package/src/skf-refine-architecture/references/init.md +98 -57
  333. package/src/skf-refine-architecture/references/issue-detection.md +32 -39
  334. package/src/skf-refine-architecture/references/refinement-rules.md +37 -48
  335. package/src/skf-refine-architecture/references/report.md +65 -54
  336. package/src/skf-refine-architecture/scripts/skf-check-preservation.py +1619 -0
  337. package/src/skf-rename-skill/SKILL.md +19 -54
  338. package/src/skf-rename-skill/customize.toml +32 -26
  339. package/src/skf-rename-skill/references/execute.md +230 -184
  340. package/src/skf-rename-skill/references/exit-codes.md +7 -7
  341. package/src/skf-rename-skill/references/health-check.md +1 -7
  342. package/src/skf-rename-skill/references/invocation-contract.md +25 -0
  343. package/src/skf-rename-skill/references/report.md +63 -52
  344. package/src/skf-rename-skill/references/select.md +197 -115
  345. package/src/skf-rename-skill/scripts/skf-validate-rename-name.py +161 -21
  346. package/src/skf-setup/SKILL.md +26 -26
  347. package/src/skf-setup/customize.toml +14 -10
  348. package/src/skf-setup/references/auto-index.md +50 -63
  349. package/src/skf-setup/references/ccc-index.md +29 -90
  350. package/src/skf-setup/references/detect-and-tier.md +58 -67
  351. package/src/skf-setup/references/health-check.md +2 -0
  352. package/src/skf-setup/references/invocation-contract.md +14 -0
  353. package/src/skf-setup/references/report.md +43 -166
  354. package/src/skf-setup/references/tier-rules.md +5 -5
  355. package/src/skf-setup/references/write-config.md +34 -57
  356. package/src/skf-test-skill/SKILL.md +17 -57
  357. package/src/skf-test-skill/assets/output-section-formats.md +33 -34
  358. package/src/skf-test-skill/customize.toml +27 -13
  359. package/src/skf-test-skill/references/coherence-check.md +134 -62
  360. package/src/skf-test-skill/references/coverage-check-tiers.md +35 -0
  361. package/src/skf-test-skill/references/coverage-check.md +209 -264
  362. package/src/skf-test-skill/references/detect-mode.md +5 -5
  363. package/src/skf-test-skill/references/external-validators.md +94 -82
  364. package/src/skf-test-skill/references/health-check.md +6 -7
  365. package/src/skf-test-skill/references/init.md +164 -91
  366. package/src/skf-test-skill/references/invocation-contract.md +66 -0
  367. package/src/skf-test-skill/references/migration-section-rules.md +5 -2
  368. package/src/skf-test-skill/references/report.md +164 -142
  369. package/src/skf-test-skill/references/score.md +80 -107
  370. package/src/skf-test-skill/references/scoring-rules.md +42 -155
  371. package/src/skf-test-skill/references/source-access-protocol.md +18 -94
  372. package/src/skf-test-skill/references/step-hard-gate.md +51 -33
  373. package/src/skf-test-skill/scripts/aggregate-coherence.py +218 -30
  374. package/src/skf-test-skill/scripts/build-result-context.py +380 -0
  375. package/src/skf-test-skill/scripts/check-metadata-coherence.py +37 -4
  376. package/src/skf-test-skill/scripts/combine-external-scores.py +23 -6
  377. package/src/skf-test-skill/scripts/compute-score.py +223 -45
  378. package/src/skf-test-skill/scripts/gap-ledger.py +1666 -0
  379. package/src/skf-test-skill/scripts/hard-gate.py +203 -0
  380. package/src/skf-test-skill/scripts/load-coverage-inputs.py +1198 -0
  381. package/src/skf-test-skill/scripts/locate-export-segments.py +835 -0
  382. package/src/skf-test-skill/scripts/reconcile-coverage.py +547 -79
  383. package/src/skf-test-skill/scripts/score-signatures.py +479 -0
  384. package/src/skf-test-skill/scripts/stage-helper-payload.py +148 -0
  385. package/src/skf-test-skill/scripts/validate-inventory.py +311 -16
  386. package/src/skf-test-skill/scripts/verify-declared-numerator.py +133 -56
  387. package/src/skf-test-skill/templates/test-report-template.md +21 -15
  388. package/src/skf-update-skill/SKILL.md +38 -25
  389. package/src/skf-update-skill/customize.toml +27 -12
  390. package/src/skf-update-skill/references/detect-changes.md +253 -223
  391. package/src/skf-update-skill/references/gap-driven.md +336 -0
  392. package/src/skf-update-skill/references/health-check.md +31 -5
  393. package/src/skf-update-skill/references/init.md +254 -84
  394. package/src/skf-update-skill/references/invocation-contract.md +12 -0
  395. package/src/skf-update-skill/references/manual-section-rules.md +6 -23
  396. package/src/skf-update-skill/references/merge.md +182 -49
  397. package/src/skf-update-skill/references/re-extract.md +53 -262
  398. package/src/skf-update-skill/references/report.md +102 -35
  399. package/src/skf-update-skill/references/write.md +357 -155
  400. package/src/skf-update-skill/scripts/skf-new-file-diff.py +183 -46
  401. package/src/skf-verify-stack/SKILL.md +23 -42
  402. package/src/skf-verify-stack/assets/feasibility-report-template.md +11 -5
  403. package/src/skf-verify-stack/customize.toml +55 -22
  404. package/src/skf-verify-stack/references/coverage-patterns.md +17 -8
  405. package/src/skf-verify-stack/references/coverage.md +67 -64
  406. package/src/skf-verify-stack/references/exit-codes.md +21 -8
  407. package/src/skf-verify-stack/references/init.md +107 -62
  408. package/src/skf-verify-stack/references/integration-verification-rules.md +12 -13
  409. package/src/skf-verify-stack/references/integrations.md +106 -65
  410. package/src/skf-verify-stack/references/report.md +59 -42
  411. package/src/skf-verify-stack/references/requirements.md +32 -9
  412. package/src/skf-verify-stack/references/synthesize.md +53 -39
  413. package/src/skf-verify-stack/scripts/skf-coverage-tally.py +398 -52
  414. package/src/skf-verify-stack/scripts/skf-previous-report.py +330 -0
  415. package/src/skf-verify-stack/scripts/skf-report-delta.py +453 -49
  416. package/src/skf-verify-stack/scripts/skf-verdict-rollup.py +240 -27
  417. package/tools/cli/commands/install.js +11 -4
  418. package/tools/cli/commands/status.js +15 -3
  419. package/tools/cli/commands/update.js +11 -4
  420. package/tools/cli/lib/tool-check.js +320 -0
  421. package/tools/cli/lib/version-check.js +22 -9
  422. package/tools/cli/skf-cli.js +4 -1
  423. package/.gitattributes +0 -16
  424. package/.nvmrc +0 -1
  425. package/docs/_internal/RELEASING.md +0 -679
  426. package/release-audits/v1.0.0-launch-audit.md +0 -728
  427. package/src/skf-audit-skill/references/step-doc-drift.md +0 -177
  428. package/src/skf-brief-skill/references/headless-source-authority-detection.md +0 -26
  429. package/src/skf-campaign/manifest.yaml +0 -15
  430. package/src/skf-create-skill/assets/tessl-dismissal-rules.md +0 -106
  431. package/src/skf-create-skill/references/ecosystem-check.md +0 -74
  432. package/src/skf-drop-skill/references/headless-contract.md +0 -18
  433. package/src/skf-update-skill/references/merge-conflict-rules.md +0 -15
  434. package/src/skf-update-skill/references/remote-source-resolution.md +0 -98
  435. package/src/skf-update-skill/references/validate.md +0 -124
  436. package/tools/validate-docs-drift.js +0 -233
  437. package/tools/validate-docs-links.js +0 -665
@@ -30,7 +30,7 @@
30
30
  "name": "skill-forge",
31
31
  "source": "./",
32
32
  "description": "Evidence-based agent skills compiler with progressive capability tiers (Quick/Forge/Forge+/Deep).",
33
- "version": "2.2.0",
33
+ "version": "4.0.0",
34
34
  "author": {
35
35
  "name": "Armel"
36
36
  },
package/README.md CHANGED
@@ -12,16 +12,16 @@
12
12
  [![npm](https://img.shields.io/npm/v/bmad-module-skill-forge)](https://www.npmjs.com/package/bmad-module-skill-forge)
13
13
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
14
14
  [![BMAD Module](https://img.shields.io/badge/BMAD-module-blue)](https://github.com/bmad-code-org/BMAD-METHOD)
15
- [![Python Version](https://img.shields.io/badge/python-%3E%3D3.10-blue?logo=python&logoColor=white)](https://www.python.org)
15
+ [![Python Version](https://img.shields.io/badge/python-%3E%3D3.11-blue?logo=python&logoColor=white)](https://www.python.org)
16
16
  [![uv](https://img.shields.io/badge/uv-package%20manager-blueviolet?logo=uv)](https://docs.astral.sh/uv/)
17
17
  [![Docs](https://img.shields.io/badge/docs-online-green)](https://armelhbobdad.github.io/bmad-module-skill-forge/)
18
18
  [![Discord](https://img.shields.io/badge/Discord-Join%20Community-7289da?logo=discord&logoColor=white)](https://discord.gg/gk8jAdXWmj)
19
19
  [![GitHub stars](https://img.shields.io/github/stars/armelhbobdad/bmad-module-skill-forge?style=social)](https://github.com/armelhbobdad/bmad-module-skill-forge/stargazers)
20
20
 
21
- _Skill Forge analyzes your code repositories, documentation, and developer discourse to build verified instruction files for AI agents. Every instruction links back to its upstream — a specific `file:line` at a pinned commit when source is available, or a documentation URL when it isn't._
21
+ _Skill Forge analyzes your code repositories, documentation, and developer discourse to build verified instruction files for AI agents. Every instruction links back to its upstream: a specific `file:line` at a pinned commit when source is available, or a documentation URL when it isn't._
22
22
 
23
- **If SKF fixes your agent's API guesses, give it a ⭐ — it helps others find this tool.**
24
- **If it saved you an afternoon, [grab me a coffee ☕](https://buymeacoffee.com/armelhbobdad) — it helps me keep forging.**
23
+ **If SKF fixes your agent's API guesses, give it a ⭐. It helps others find this tool.**
24
+ **If it saved you an afternoon, [grab me a coffee ☕](https://buymeacoffee.com/armelhbobdad). It helps me keep forging.**
25
25
 
26
26
  </div>
27
27
 
@@ -29,7 +29,7 @@ _Skill Forge analyzes your code repositories, documentation, and developer disco
29
29
 
30
30
  ## The Problem
31
31
 
32
- You ask an AI agent to use a library. It invents function names that don't exist. It guesses parameter types. You paste documentation into the context — it still gets details wrong. You write instructions by hand — they go stale the moment the code changes.
32
+ You ask an AI agent to use a library. It invents function names that don't exist. It guesses parameter types. You paste documentation into the context, and it still gets details wrong. You write instructions by hand, and they go stale the moment the code changes.
33
33
 
34
34
  This isn't an edge case. It's the default experience.
35
35
 
@@ -37,7 +37,7 @@ For the full story behind SKF, read [_Hallucination has a line number_](https://
37
37
 
38
38
  ## Before vs After
39
39
 
40
- **Without SKF** — your agent guesses:
40
+ **Without SKF**, your agent guesses:
41
41
 
42
42
  ```python
43
43
  import cognee
@@ -46,7 +46,7 @@ import cognee
46
46
  results = cognee.search("What does Cognee do?", mode="graph")
47
47
  ```
48
48
 
49
- **With SKF** — your agent reads the verified skill:
49
+ **With SKF**, your agent reads the verified skill:
50
50
 
51
51
  ```python
52
52
  import cognee
@@ -60,24 +60,24 @@ results = await cognee.search(
60
60
  )
61
61
  ```
62
62
 
63
- The skill told the agent the real function name, the real parameters, and that the call is async — all traced to the exact source line. This example is from the real [`oms-cognee`](https://github.com/armelhbobdad/oh-my-skills/blob/main/skills/oms-cognee/1.0.0/oms-cognee/SKILL.md) skill in [**oh-my-skills**](https://github.com/armelhbobdad/oh-my-skills) — SKF's reference output. The [**Verifying a Skill**](#verifying-a-skill) section below shows how to walk the citation chain yourself.
63
+ The skill told the agent the real function name, the real parameters, and that the call is async, all traced to the exact source line. This example is from the real [`oms-cognee`](https://github.com/armelhbobdad/oh-my-skills/blob/main/skills/oms-cognee/1.0.0/oms-cognee/SKILL.md) skill in [**oh-my-skills**](https://github.com/armelhbobdad/oh-my-skills), SKF's reference output. That skill predates provenance labels that follow the tool: its provenance map records `search` as read by eye, which SKF 3.0.0 cites as `[SRC:...]`, keeping `[AST:...]` for a definition an ast-grep rule matched. The [**Verifying a Skill**](#verifying-a-skill) section below shows how to walk the citation chain yourself.
64
64
 
65
65
  ## Install
66
66
 
67
- Linux, Windows, and macOS supported ([platform details](https://armelhbobdad.github.io/bmad-module-skill-forge/getting-started/#platform-support)). Requires [Node.js](https://nodejs.org/) >= 22, [Python](https://www.python.org/) >= 3.10, and [uv](https://docs.astral.sh/uv/) (Python package runner).
67
+ Linux, Windows, and macOS supported ([platform details](https://armelhbobdad.github.io/bmad-module-skill-forge/getting-started/#platform-support)). Requires [Node.js](https://nodejs.org/) >= 22, [Python](https://www.python.org/) >= 3.11, and [uv](https://docs.astral.sh/uv/) (Python package runner).
68
68
 
69
69
  ```bash
70
70
  npx bmad-module-skill-forge install
71
71
  ```
72
72
 
73
- You'll be prompted for project name, output folders, and IDE configuration. When the install completes, open your IDE and invoke `@Ferris SF` to confirm Ferris is reachable. Ferris reports your detected tools and capability tier. See the [docs](https://armelhbobdad.github.io/bmad-module-skill-forge/getting-started/) for other install methods.
73
+ You'll be asked for a project name, where to save skills and workspace files, which IDEs you use, and whether to install learning material. When the install completes, open your IDE and start Ferris, the SKF agent. Type `/skf-forger` in Claude Code, Cursor and most other IDEs, or `$skf-forger` in Codex. IDEs that load skills on their own, such as GitHub Copilot, start Ferris when you ask for him. The installer prints the exact command for each IDE you picked. Then give Ferris the menu code `SF`; this page writes that step as `@Ferris SF`. Ferris reports the tools it found and your capability tier, which is how much analysis those tools allow. See the [docs](https://armelhbobdad.github.io/bmad-module-skill-forge/getting-started/) for other install methods.
74
74
 
75
75
  ## Quick Start
76
76
 
77
- 1. **Set up your environment:** `@Ferris SF` _(Setup Forge)_ — detects your tools and sets your capability tier
78
- 2. **Zero-ceremony path:** `@Ferris forge-auto <repo-or-doc-url>` _(Forge-Auto)_ — one command turns a repo or doc URL into a verified skill (auto-scope, auto-brief, 90% quality gate, export)
79
- 3. **Fast path:** `@Ferris QS <package-name>` _(Quick Skill)_ — creates a verified skill in under a minute
80
- 4. **Full quality path:** `@Ferris forge <your-library>` chains Brief → Create → Test → Export automatically — or run manually: `@Ferris BS` _(Brief Skill)_ → clear session → `@Ferris CS` _(Create Skill)_ for maximum control
77
+ 1. **Set up your environment:** `@Ferris SF` _(Setup Forge)_ detects your tools and sets your capability tier
78
+ 2. **Zero-ceremony path:** `@Ferris forge-auto <repo-or-doc-url>` _(Forge-Auto)_ turns a repo or doc URL into a verified skill in one command. It scopes, briefs, compiles, tests and exports on its own. The test aims for a 90% score but still passes a skill that scores 80% or more, and records the shortfall in an evidence report.
79
+ 3. **Fast path:** `@Ferris QS <package-name-or-github-url>` _(Quick Skill)_ writes a best-effort skill with no brief and no provenance map. `@Ferris forge-quick <package-name>` also tests and exports it.
80
+ 4. **Full quality path:** `@Ferris forge <repo-url> <skill-name>` chains Brief → Create → Test → Export automatically. For maximum control, run the same steps one at a time and start a fresh session before each: `@Ferris BS` _(Brief Skill)_, `@Ferris CS` _(Create Skill)_, `@Ferris TS` _(Test Skill)_, `@Ferris EX` _(Export Skill)_.
81
81
 
82
82
  For producing **many coordinated skills** across sessions, `@Ferris campaign` _(Campaign)_ orchestrates the whole set with dependency tracking and resume.
83
83
 
@@ -90,8 +90,8 @@ See the [workflows docs](https://armelhbobdad.github.io/bmad-module-skill-forge/
90
90
  - **You use AI agents to write code** and they keep guessing API calls wrong
91
91
  - **You maintain a library** and want to ship official, verified instruction files so AI agents use your API correctly
92
92
  - **You manage a codebase with many dependencies** and want a consolidated "stack skill" that teaches your agent how all the pieces fit together
93
- - **You use a SaaS API or closed-source tool** with no public code — SKF can generate skills from documentation alone
94
- - **You need different skills for different use cases** from the same target — compile multiple skills with different scopes from one repo or doc set (e.g., a core API skill and a migration guide skill)
93
+ - **You use a SaaS API or closed-source tool** with no public code: SKF can generate skills from documentation alone
94
+ - **You need different skills for different use cases** from the same target: compile multiple skills with different scopes from one repo or doc set (e.g., a core API skill and a migration guide skill)
95
95
 
96
96
  ## How SKF Compares
97
97
 
@@ -100,68 +100,68 @@ A skeptical reader is probably already considering one of these alternatives:
100
100
  | | **Skill Forge** | MCP doc servers | Hand-edited `.cursorrules` | awesome-\* lists |
101
101
  | -------------------------- | ----------------------------------------- | ----------------- | -------------------------- | ---------------- |
102
102
  | Reproducible from upstream | AST + pinned commit (or pinned doc URL) | varies; opaque | whatever you wrote | none |
103
- | Version-pinned & immutable | yes — per-version directories | runtime-dependent | rots silently | no |
103
+ | Version-pinned & immutable | yes, per-version directories | runtime-dependent | rots silently | no |
104
104
  | Audit trail | `provenance-map.json` + test + evidence | depends on server | none | none |
105
105
  | Runtime cost | zero (markdown + JSON) | a running process | zero | zero |
106
106
  | Lifecycle tooling | rename, drop, update, export transactions | varies | file surgery | none |
107
- | Falsifiable | yes — three steps, 60 seconds | rarely | no | no |
107
+ | Falsifiable | yes, three steps, 60 seconds | rarely | no | no |
108
108
 
109
109
  The others aren't bad. They solve different problems. **SKF solves exactly one: the claim your agent is reading about a library was true at a specific commit on a specific day, and you can prove it in under a minute.**
110
110
 
111
111
  ## How Skill Forge Fixes This
112
112
 
113
- SKF extracts real function signatures, types, and patterns from code, docs, and developer discourse — every instruction links to the exact file and line it came from. On top of that foundation:
113
+ SKF extracts real function signatures, types, and patterns from code, docs, and developer discourse. Every instruction cites where it came from: the exact file and line for code, or the source document for docs and discussions. On top of that foundation:
114
114
 
115
- 1. **Version-pinned** — skills are stored per-version, so updating to v2.0 doesn't replace your v1.x skill. Compatible with [skills.sh](https://skills.sh) and [npx skills](https://www.npmjs.com/package/skills)
116
- 2. **Lifecycle tooling** — rename skills and drop deprecated versions without manual file surgery. Destructive operations are transactional.
117
- 3. **Follows an open standard** — skills comply with the [agentskills.io](https://agentskills.io) spec and work across Claude, Cursor, Copilot, and other AI agents
115
+ 1. **Version-pinned:** skills are stored per-version, so updating to v2.0 doesn't replace your v1.x skill. Compatible with [skills.sh](https://skills.sh) and [npx skills](https://www.npmjs.com/package/skills)
116
+ 2. **Lifecycle tooling:** rename a skill, or deprecate or delete one version or the whole skill, without manual file surgery. Destructive operations are transactional.
117
+ 3. **Follows an open standard:** skills comply with the [agentskills.io](https://agentskills.io) spec and work across Claude, Cursor, Copilot, and other AI agents
118
118
 
119
- > **Every skill ships two files — `SKILL.md` (the full instruction set, loaded on trigger) and `context-snippet.md` (an 80–120 token always-on index that the export step injects into `CLAUDE.md` / `AGENTS.md` / `.cursorrules`). Why both?** Per Vercel's agent evals, passive context achieves a **100% pass rate vs. 79% for active skills loaded alone** (see [Skill Model → Dual-Output Strategy](https://armelhbobdad.github.io/bmad-module-skill-forge/skill-model/#dual-output-strategy)).
119
+ > **Every skill ships two files: `SKILL.md` (the full instruction set, loaded on trigger) and `context-snippet.md` (an 80–120 token always-on index that the export step injects into `CLAUDE.md` / `AGENTS.md` / `.cursorrules`). Why both?** Per Vercel's agent evals, a docs index in passive context reached a **100% pass rate**, while skills reached **79%** only when the agent was told to use them, and 53% when it decided on its own (see [Skill Model → Dual-Output Strategy](https://armelhbobdad.github.io/bmad-module-skill-forge/skill-model/#dual-output-strategy)).
120
120
 
121
121
  ## Verifying a Skill
122
122
 
123
- You can falsify any citation in an SKF-compiled skill in under a minute:
123
+ You can falsify any citation in an SKF-compiled skill in under a minute. Quick Skill output is the exception: it keeps no provenance map, so this audit does not apply to it.
124
124
 
125
- 1. **Open the skill's `provenance-map.json`** — find your symbol; read its `source_file` and `source_line`.
126
- 2. **Open the skill's `metadata.json`** — read `source_commit` and `source_repo`.
125
+ 1. **Open the skill's `provenance-map.json`** in the forge workspace (`forge-data/<skill>/<version>/` by default, not the skill folder). Find your symbol under `export_name` and read its `source_file` and `source_line`.
126
+ 2. **Open the skill's `metadata.json`** (next to its `SKILL.md`) and read `source_commit` and `source_repo`.
127
127
  3. **Jump to the upstream repo at that commit**, open that file, find that line. The signature in `SKILL.md` should match the one you're reading.
128
128
 
129
- For docs-only skills, the audit shape is the same — `provenance-map.json` still lists every symbol — but entries cite `[EXT:{url}]` instead of `file:line@SHA`, and step 3 becomes "open the doc URL and confirm the signature matches."
129
+ For docs-only skills, the audit shape is the same: `provenance-map.json` still lists every symbol, but entries cite `[EXT:{url}]` instead of `file:line@SHA`, and step 3 becomes "open the doc URL and confirm the signature matches."
130
130
 
131
- If it doesn't, that's a bug — open an issue and SKF will republish the skill with a fresh provenance map (a new commit SHA for source skills, a fresh fetch for docs-only). Falsifiability isn't a feature; it's the whole deal.
131
+ If it doesn't, that's a bug. Open an issue and SKF will republish the skill with a fresh provenance map (a new commit SHA for source skills, a fresh fetch for docs-only). Falsifiability isn't a feature; it's the whole deal.
132
132
 
133
- **Reference output: [oh-my-skills](https://github.com/armelhbobdad/oh-my-skills)** — four Deep-tier skills compiled by SKF (cocoindex, cognee, Storybook v10, uitripled), each shipping its full audit trail in-repo. Scores range from 99.0% to 99.49%. Every claim walks to an upstream line in under 60 seconds. Serves as both the worked example for this section and ongoing proof that the pipeline does what it says.
133
+ **Reference output: [oh-my-skills](https://github.com/armelhbobdad/oh-my-skills).** It holds four Deep-tier skills compiled by SKF (cocoindex, cognee, Storybook v10, uitripled), each shipping its full audit trail in-repo. Scores range from 99.0% to 99.49%. Every claim walks to an upstream line in under 60 seconds. Serves as both the worked example for this section and ongoing proof that the pipeline does what it says.
134
134
 
135
135
  ## Help SKF Improve
136
136
 
137
- Workflows end with a health check that files bug reports as GitHub issues (auto-deduped by fingerprint — re-reporting is safe); friction notes go to a local queue you can opt in to submit live. **Please let workflows run to completion**, or [open an issue](https://github.com/armelhbobdad/bmad-module-skill-forge/issues/new/choose) directly. [Full details →](https://armelhbobdad.github.io/bmad-module-skill-forge/workflows/#terminal-step-health-check)
137
+ Every workflow ends with a health check. If it finds a problem in SKF's own instructions, it shows you the findings and, only if you approve, files bug reports as GitHub issues. Duplicates are detected, so reporting a known problem again is safe. Friction notes and gaps go to a local queue unless you choose to submit them too. **Please let workflows run to completion**, or [open an issue](https://github.com/armelhbobdad/bmad-module-skill-forge/issues/new/choose) directly. [Full details →](https://armelhbobdad.github.io/bmad-module-skill-forge/workflows/#terminal-step-health-check)
138
138
 
139
139
  ## Learn More
140
140
 
141
- The docs are organized into three buckets — **Why** (start here), **Try** (do stuff), and **Reference** (look things up):
141
+ The docs are organized into three buckets: **Why** (start here), **Try** (do stuff), and **Reference** (look things up):
142
142
 
143
143
  **Why**
144
144
 
145
- - **[Why Skill Forge?](https://armelhbobdad.github.io/bmad-module-skill-forge/why-skf/)** — The JTBD pitch, persona router, and the honest anti-pitch
146
- - **[Verifying a Skill](https://armelhbobdad.github.io/bmad-module-skill-forge/verifying-a-skill/)** — The 60-second audit recipe and scoring formula
145
+ - **[Why Skill Forge?](https://armelhbobdad.github.io/bmad-module-skill-forge/why-skf/)**: What SKF is for, who it suits, and when it is the wrong tool
146
+ - **[Verifying a Skill](https://armelhbobdad.github.io/bmad-module-skill-forge/verifying-a-skill/)**: The 60-second audit recipe and scoring formula
147
147
 
148
148
  **Try**
149
149
 
150
- - **[Getting Started](https://armelhbobdad.github.io/bmad-module-skill-forge/getting-started/)** — Install, first skill, prereqs, and config
151
- - **[Forge-Auto](https://armelhbobdad.github.io/bmad-module-skill-forge/forge-auto/)** — The zero-ceremony path: one command from a repo or doc URL to a verified skill
152
- - **[Campaign](https://armelhbobdad.github.io/bmad-module-skill-forge/campaign/)** — Orchestrate many coordinated skills across sessions with dependency tracking and resume
153
- - **[How It Works](https://armelhbobdad.github.io/bmad-module-skill-forge/how-it-works/)** — Plain-English walkthrough of one skill being built, end to end
154
- - **[Examples](https://armelhbobdad.github.io/bmad-module-skill-forge/examples/)** — Real-world scenarios with full command transcripts
155
- - **[Workflows](https://armelhbobdad.github.io/bmad-module-skill-forge/workflows/)** — All 15 workflows with commands and connection diagrams
150
+ - **[Getting Started](https://armelhbobdad.github.io/bmad-module-skill-forge/getting-started/)**: Install, first skill, prereqs, and config
151
+ - **[Forge-Auto](https://armelhbobdad.github.io/bmad-module-skill-forge/forge-auto/)**: The zero-ceremony path, one command from a repo or doc URL to a verified skill
152
+ - **[Campaign](https://armelhbobdad.github.io/bmad-module-skill-forge/campaign/)**: Orchestrate many coordinated skills across sessions with dependency tracking and resume
153
+ - **[How It Works](https://armelhbobdad.github.io/bmad-module-skill-forge/how-it-works/)**: Plain-English walkthrough of one skill being built, end to end
154
+ - **[Examples](https://armelhbobdad.github.io/bmad-module-skill-forge/examples/)**: Real-world scenarios with full command transcripts
155
+ - **[Workflows](https://armelhbobdad.github.io/bmad-module-skill-forge/workflows/)**: All 15 workflows with commands and connection diagrams
156
156
 
157
157
  **Reference**
158
158
 
159
- - **[Concepts](https://armelhbobdad.github.io/bmad-module-skill-forge/concepts/)** — Seven load-bearing terms: provenance, confidence tiers, drift, and more
160
- - **[Architecture](https://armelhbobdad.github.io/bmad-module-skill-forge/architecture/)** — Runtime flow, 7 tools, workspace artifacts, security, and the design decisions behind them
161
- - **[Skill Model](https://armelhbobdad.github.io/bmad-module-skill-forge/skill-model/)** — Capability tiers, confidence tiers, output format, dual-output strategy, ownership model
162
- - **[Agents](https://armelhbobdad.github.io/bmad-module-skill-forge/agents/)** — Ferris: the single AI agent that runs every SKF workflow
163
- - **[BMAD Synergy](https://armelhbobdad.github.io/bmad-module-skill-forge/bmad-synergy/)** — How SKF pairs with BMAD CORE phases and optional modules (TEA, BMB, GDS, CIS)
164
- - **[Troubleshooting](https://armelhbobdad.github.io/bmad-module-skill-forge/troubleshooting/)** — Common errors (forge setup, ecosystem checks, tier confidence) and how to resolve them
159
+ - **[Concepts](https://armelhbobdad.github.io/bmad-module-skill-forge/concepts/)**: Seven key terms, including provenance, confidence tiers and drift
160
+ - **[Architecture](https://armelhbobdad.github.io/bmad-module-skill-forge/architecture/)**: Runtime flow, 7 tools, workspace artifacts, security, and the design decisions behind them
161
+ - **[Skill Model](https://armelhbobdad.github.io/bmad-module-skill-forge/skill-model/)**: Capability tiers, confidence tiers, output format, dual-output strategy, ownership model
162
+ - **[Agents](https://armelhbobdad.github.io/bmad-module-skill-forge/agents/)**: Ferris, the single AI agent that runs every SKF workflow
163
+ - **[BMAD Synergy](https://armelhbobdad.github.io/bmad-module-skill-forge/bmad-synergy/)**: How SKF pairs with the BMAD Method's four phases and its optional modules: Test Architect (TEA), BMAD Builder (BMB), Game Dev Studio (GDS) and Creative Intelligence Suite (CIS)
164
+ - **[Troubleshooting](https://armelhbobdad.github.io/bmad-module-skill-forge/troubleshooting/)**: Common errors (forge setup, skill briefs, tier confidence, run locks, campaigns) and how to resolve them
165
165
 
166
166
  ## Acknowledgements
167
167
 
@@ -173,11 +173,11 @@ SKF builds on these excellent open-source tools:
173
173
  | [GitHub CLI](https://cli.github.com/) | Source code access and repository intelligence (all tiers) |
174
174
  | [ast-grep](https://github.com/ast-grep/ast-grep) | AST-based structural code extraction (Forge/Forge+/Deep tiers) |
175
175
  | [ast-grep MCP](https://github.com/ast-grep/ast-grep-mcp) | MCP server for memory-efficient AST queries (recommended) |
176
- | [cocoindex-code](https://github.com/cocoindex-io/cocoindex-code) | Semantic code search and file discovery pre-ranking (Forge+ tier) |
176
+ | [cocoindex-code](https://github.com/cocoindex-io/cocoindex-code) | Semantic code search and file pre-ranking (Forge+; optional on Deep) |
177
177
  | [QMD](https://github.com/tobi/qmd) | Local hybrid search engine for knowledge indexing (Deep tier) |
178
178
  | [skill-check](https://github.com/thedaviddias/skill-check) | Skill validation, auto-fix, quality scoring, and security scanning |
179
179
  | [Snyk Agent Scan](https://github.com/snyk/agent-scan) | Security scanning for prompt injection and data exposure (optional) |
180
- | [tessl](https://tessl.io) | Content quality review, actionability scoring, and AI judge evaluation |
180
+ | [tessl](https://tessl.io) | Opt-in Tessl Review: AI-judge scoring of description and content |
181
181
  | [BMAD Method](https://github.com/bmad-code-org/BMAD-METHOD) | Agent-workflow framework that SKF extends as a module |
182
182
 
183
183
  ## Contributing
@@ -190,11 +190,11 @@ Past releases are documented in [CHANGELOG.md](CHANGELOG.md).
190
190
 
191
191
  ## License
192
192
 
193
- MIT License — see [LICENSE](LICENSE) for details.
193
+ MIT License. See [LICENSE](LICENSE) for details.
194
194
 
195
195
  ---
196
196
 
197
- **Skill Forge (SKF)** — A standalone [BMAD](https://github.com/bmad-code-org/BMAD-METHOD) module for agent skill compilation.
197
+ **Skill Forge (SKF)**: a standalone [BMAD](https://github.com/bmad-code-org/BMAD-METHOD) module for agent skill compilation.
198
198
 
199
199
  [![Contributors](https://contrib.rocks/image?repo=armelhbobdad/bmad-module-skill-forge)](https://github.com/armelhbobdad/bmad-module-skill-forge/graphs/contributors)
200
200
 
package/docs/404.md CHANGED
@@ -1,23 +1,25 @@
1
1
  ---
2
2
  title: Page Not Found
3
- description: The URL you tried didn't resolve. Use the search or the links below to continue.
3
+ description: There is no page at this address. Use search or the links below to find what you need.
4
4
  template: splash
5
5
  ---
6
6
 
7
- ## 404 — no source cited
7
+ ## 404: no page at this address
8
8
 
9
- No page resolves to that URL. In keeping with the rest of this site, if a claim can't cite a source, we don't fake it — even for our own docs.
9
+ There is no page at this address. This site has one rule for every claim: if it can't cite a source, we don't make it up. That goes for our own pages too, so we won't guess where you meant to go.
10
10
 
11
- Try one of these cited sources instead, or use the **search bar** at the top of the page:
11
+ Try one of these pages instead, or use **Search** at the top of the page:
12
12
 
13
- **Why** — [Why Skill Forge?](/docs/why-skf.md) · [Verifying a Skill](/docs/verifying-a-skill.md)
13
+ **Why:** [Why Skill Forge?](/docs/why-skf.md) · [Verifying a Skill](/docs/verifying-a-skill.md)
14
14
 
15
- **Try** — [Getting Started](/docs/getting-started.md) · [How It Works](/docs/how-it-works.md) · [Examples](/docs/examples.md) · [Workflows](/docs/workflows.md)
15
+ **Try:** [Getting Started](/docs/getting-started.md) · [Forge-Auto](/docs/forge-auto.md) · [Campaign](/docs/campaign.md) · [How It Works](/docs/how-it-works.md) · [Examples](/docs/examples.md) · [Workflows](/docs/workflows.md)
16
16
 
17
- **Reference** — [Concepts](/docs/concepts.md) · [Architecture](/docs/architecture.md) · [Skill Model](/docs/skill-model.md) · [Agents](/docs/agents.md) · [BMAD Synergy](/docs/bmad-synergy.md) · [Troubleshooting](/docs/troubleshooting.md)
17
+ **Reference:** [Concepts](/docs/concepts.md) · [Architecture](/docs/architecture.md) · [Skill Model](/docs/skill-model.md) · [Agents](/docs/agents.md) · [BMAD Synergy](/docs/bmad-synergy.md) · [Troubleshooting](/docs/troubleshooting.md)
18
+
19
+ Or start over from the [home page](/docs/index.md).
18
20
 
19
21
  ---
20
22
 
21
23
  ### Think this page should exist?
22
24
 
23
- A missing page is drift — a citation the docs site made to itself that no longer resolves. [Open an issue](https://github.com/armelhbobdad/bmad-module-skill-forge/issues/new/choose) with the URL you tried. SKF's docs ship a [drift validator](/docs/verifying-a-skill.md#build-time-drift-detection-for-docs-themselves) that catches exactly this pattern — if one slipped through, it's a bug we want to know about.
25
+ If a link on this site sent you here, that is a bug. Every change to these docs goes through a check that builds the site and confirms each link between our own pages leads to a real page, so a broken link should never ship. If one did, [open a bug report](https://github.com/armelhbobdad/bmad-module-skill-forge/issues/new/choose) with the URL you tried and the page that linked you here. If you typed the address, or followed a bookmark or a link from another site, the page may have moved or been renamed: search is the quickest way to find it.
@@ -1,4 +1,4 @@
1
- # Skill Forge — Pinned Canonical Anchors
1
+ # Skill Forge: Pinned Canonical Anchors
2
2
  #
3
3
  # This file is the SINGLE SOURCE OF TRUTH for every version number, commit
4
4
  # SHA, and library reference that the docs cite about oh-my-skills, the
@@ -8,8 +8,11 @@
8
8
  # entry here and then run `npm run docs:validate-drift` from the SKF repo
9
9
  # root. The script will:
10
10
  #
11
- # 1. Verify every skill below actually exists at the claimed version and
12
- # commit in $OMS/skills/<name>/<version>/<name>/metadata.json
11
+ # 1. Verify every skill below exists at the claimed version in
12
+ # $OMS/skills/<name>/<version>/<name>/metadata.json, and that its
13
+ # version, source_commit, confidence_tier and source_authority match.
14
+ # The other fields (source_repo, source_ref, upstream_commit_date,
15
+ # test_score, test_mode, language) are not checked.
13
16
  # 2. Grep every docs/*.md for stale version strings and flag any that
14
17
  # disagree with the anchors
15
18
  #
@@ -17,25 +20,29 @@
17
20
  # then fix the docs until the check is clean.
18
21
  #
19
22
  # Do NOT edit docs/*.md version references without updating this file
20
- # first — the drift check will catch you. That's the point.
23
+ # first. The drift check catches the mismatch when you run it. That's the point.
21
24
  #
22
25
  # File ignored by Astro/Starlight content collections because the parent
23
- # directory starts with `_`. It is purely a build-time / CI-time anchor.
26
+ # directory starts with `_`. Nothing reads it at build time: only
27
+ # tools/validate-docs-drift.js checks it, and release.yaml rewrites
28
+ # skf_version. CI does not run the drift check, and the check needs a local
29
+ # oh-my-skills checkout, so run `npm run docs:validate-drift` yourself.
24
30
 
25
- # SKF package version — matches the `version` field in package.json.
31
+ # SKF package version: matches the `version` field in package.json.
26
32
  # Enforced two ways: (1) release.yaml bumps this line in the same commit
27
33
  # as package.json + marketplace.json on every release; (2) validate-docs-drift.js
28
34
  # cross-checks this value against package.json.version and fails on mismatch.
29
- skf_version: "2.2.0"
35
+ skf_version: "4.0.0"
30
36
 
31
37
  # Path to the oh-my-skills repo, resolved relative to this repo's root.
32
38
  # Override at runtime with the OMS environment variable if oh-my-skills
33
39
  # lives elsewhere on your machine.
34
40
  oh_my_skills_path: "../oh-my-skills"
35
41
 
36
- # Every oms-* skill currently shipped in oh-my-skills. The library key
37
- # (e.g. cognee) is the user-facing library name; the entry key is the
38
- # skill package name (oms-<library>).
42
+ # Every oms-* skill currently shipped in oh-my-skills. The `library` field
43
+ # (e.g. cognee) is the library name the docs use, and the drift check
44
+ # searches docs/*.md for it. The entry key is the skill package name, usually
45
+ # oms-<library>; oms-storybook-react-vite covers the storybook library.
39
46
  skills:
40
47
  oms-cognee:
41
48
  library: cognee
@@ -90,9 +97,11 @@ skills:
90
97
  language: "typescript"
91
98
 
92
99
  # Libraries that are mentioned in docs as illustrative examples but don't
93
- # have a corresponding oms-* skill. The drift check IGNORES version
94
- # mentions for these libraries — they're allowed to drift because they're
95
- # illustration, not canonical.
100
+ # have a corresponding oms-* skill. Their versions are allowed to drift
101
+ # because they're illustration, not canonical. The drift check only searches
102
+ # for the `library` names under skills, so it already ignores every other
103
+ # library. This list matters only if one of these gains a skill: it then
104
+ # hides that library's drift until you remove it here.
96
105
  illustrative_libraries:
97
106
  - better-auth
98
107
  - hono
@@ -1,15 +1,17 @@
1
1
  ---
2
2
  title: SKF Stability & Public API Contract
3
- description: What SemVer covers at v1.0.0 — the surfaces downstream consumers may pin against, and the surfaces explicitly excluded.
3
+ description: Which SKF surfaces SemVer covers, so that downstream consumers can pin against them, and which surfaces it excludes.
4
4
  ---
5
5
 
6
- > **Status:** STABLE — locked at v1.0.0. Amendments follow the "Changes to This Contract" section below.
6
+ > **Status:** Stable. This contract took effect at v1.0.0 and was last amended at v3.0.0. Amendments follow [§ Changes to This Contract](#changes-to-this-contract), which also records what each one changed.
7
7
 
8
- This document is the public API contract for `bmad-module-skill-forge` at v1.0.0. It enumerates exactly which SKF surfaces [Semantic Versioning 2.0.0](https://semver.org/) covers and which are explicitly `@internal`. The goal is that a downstream consumer pinning `"bmad-module-skill-forge": "^1.0.0"` can identify — unambiguously — whether a given SKF change is breaking, additive, or internal. Breaking changes to covered surfaces require a major-version bump; additive changes to covered surfaces are minor bumps; changes to `@internal` surfaces are free to land in any release.
8
+ This document is the public API contract for `bmad-module-skill-forge`. It enumerates exactly which SKF surfaces [Semantic Versioning 2.0.0](https://semver.org/) covers and which are explicitly `@internal`. The goal is that a downstream consumer pinning `"bmad-module-skill-forge": "^3.0.0"` can identify, unambiguously, whether a given SKF change is breaking, additive, or internal. Breaking changes to covered surfaces require a major-version bump; additive changes to covered surfaces are minor bumps; changes to `@internal` surfaces are free to land in any release, apart from the parts the release check reviews (see [§ @internal: Not Covered by SemVer](#internal--not-covered-by-semver)).
9
+
10
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 ([RFC 2119](https://www.rfc-editor.org/rfc/rfc2119), [RFC 8174](https://www.rfc-editor.org/rfc/rfc8174)) when, and only when, they appear in all capitals, as shown here.
9
11
 
10
12
  ## Covered Surfaces
11
13
 
12
- The five buckets below are the entirety of the v1.0.0 public surface. Anything not explicitly listed here is `@internal` (see [§ @internal — Not Covered by SemVer](#internal--not-covered-by-semver)).
14
+ The buckets below are the entirety of the public surface. Anything not explicitly listed here is `@internal` (see [§ @internal: Not Covered by SemVer](#internal--not-covered-by-semver)).
13
15
 
14
16
  ### CLI Command Surface
15
17
 
@@ -17,19 +19,19 @@ The CLI is invoked via `npx bmad-module-skill-forge <subcommand>` (one-shot) or
17
19
 
18
20
  - **Subcommands**: `install`, `update`, `status`, `uninstall`. Renaming, removing, or changing the semantics of any subcommand is breaking.
19
21
  - **Options**: `-V, --version` (top-level; prints the installed package version), `-h, --help` (top-level and per-subcommand; prints help output — commander-provided). Both are covered.
20
- - **Per-subcommand flags (other than `-h/--help`)**: none are currently part of the v1.0.0 surface. Adding a new flag is additive (minor); removing or renaming a flag once added would be breaking.
22
+ - **Per-subcommand flags (other than `-h/--help`)**: none are currently part of this contract. Adding a new flag is additive (minor); removing or renaming a flag once added would be breaking.
21
23
  - **Exit codes**: `0` on success — including user-cancel of `install` (Ctrl-C at a prompt or explicit decline at a confirm step) and "nothing to do" paths on `uninstall`; `1` on unhandled failure. Only `0` and `1` are reserved today; introducing additional exit-code values in the future is additive (minor) and will be called out in `CHANGELOG.md`.
22
- - **`npm run skf:*` script aliases**: `skf:install`, `skf:update`, `skf:status`, `skf:uninstall` in `package.json` are the post-install convenience entry points. Renaming or removing any `skf:*` script is breaking. (Note: `release:*` scripts are NOT part of this contract — they are internal-to-maintainers and are being retired across Epic 4 and Epic 6.)
24
+ - **`npm run skf:*` script aliases**: `skf:install`, `skf:update`, `skf:status`, `skf:uninstall` in `package.json` are the post-install convenience entry points. Renaming or removing any `skf:*` script is breaking.
23
25
 
24
26
  ### Programmatic API of `tools/cli/skf-cli.js`
25
27
 
26
- `tools/cli/skf-cli.js` is the CLI logic for `npx bmad-module-skill-forge` (invoked via a thin `bin` wrapper at `tools/skf-npx-wrapper.js` that execs `skf-cli.js`) and for `npm run skf:<subcommand>`. Though `package.json`'s `main` field points at `skf-cli.js`, it has **no programmatic export surface**. The file runs commander setup and calls `program.parse(process.argv)` as top-level side effects; it has no `module.exports` block. A `require('bmad-module-skill-forge')` from Node runs the CLI parser against the caller's `process.argv` — not a supported usage.
28
+ `tools/cli/skf-cli.js` is the CLI logic for `npx bmad-module-skill-forge` (invoked through a thin `bin` wrapper at `tools/skf-npx-wrapper.js` that runs `skf-cli.js`) and for `npm run skf:<subcommand>`. It has **no programmatic export surface**: the file runs commander setup and calls `program.parse(process.argv)` as top-level side effects, and it has no `module.exports` block. `package.json` declares no `main` field, so a `require('bmad-module-skill-forge')` from Node finds no entry point and throws `MODULE_NOT_FOUND`; requiring the package is not a supported usage.
27
29
 
28
- Programmatic embedding of SKF is explicitly `@internal` at v1.0.0. If a programmatic API is ever added, it will be introduced via an explicit `module.exports` block and a minor version bump (additive).
30
+ Programmatic embedding of SKF is explicitly `@internal`. If a programmatic API is ever added, it will be introduced through an explicit entry point in `package.json` and a `module.exports` block, with a minor version bump (additive).
29
31
 
30
32
  ### Skill Manifest & Frontmatter Contract
31
33
 
32
- **`SKILL.md` frontmatter.** SKF-shipped `SKILL.md` files conform to the [agentskills.io minimal frontmatter spec](https://github.com/agentskills/agentskills). Required fields are `name` (kebab-case) and `description` (one-line natural-language summary that terminates with an explicit trigger phrase — see the `src/skf-*/SKILL.md` files in this repo for live examples). SKF does NOT extend the agentskills.io spec; there are no SKF-specific frontmatter fields. If the agentskills.io spec evolves, SKF tracks upstream rather than forking.
34
+ **`SKILL.md` frontmatter.** SKF-shipped `SKILL.md` files conform to the [agentskills.io minimal frontmatter spec](https://github.com/agentskills/agentskills). Required fields are `name` (kebab-case) and `description`, a natural-language summary of at most 1024 characters that contains a `Use when` or `Use if` trigger clause, anywhere in the text and in any letter case, in which every quoted trigger names its object (`"drop a skill"`, never a bare verb such as `"drop"` or `"set up"`). Rule `SKILL-06` of [`tools/validate-skills.js`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/tools/validate-skills.js) checks the length, the clause and the triggers; the `src/skf-*/SKILL.md` files in this repository are live examples. SKF does not extend the agentskills.io spec; there are no SKF-specific frontmatter fields. If the agentskills.io spec evolves, SKF tracks upstream rather than forking.
33
35
 
34
36
  **`bmad-skill-manifest.yaml` schema.** The agent-type skill manifest shape SKF uses is validated by a zod schema. A simplified transcription (see the live source on GitHub for exact error-map options and inline comments):
35
37
 
@@ -57,67 +59,88 @@ The schema is strict — unknown keys are rejected. Renaming or removing a requi
57
59
 
58
60
  When a consumer runs `skf install` in a project, SKF creates or modifies the following on-disk paths (some names are configurable at install time; defaults are shown). Renaming any path, changing a path's semantics, or removing a path from this list is breaking.
59
61
 
60
- - `_bmad/skf/` — SKF module files.
61
- - `_bmad/_config/skf-manifest.yaml` — install manifest. Format per `tools/cli/lib/manifest.js`; covered top-level keys: `version` (equals the SKF package version at install time — downstream tooling may read it to detect the installed SKF version), `installed_at`, `action`, `module`, `skf_folder`, `ides`, `skills_output_folder`, `forge_data_folder`, `directories[]`, `files.{skf,sidecar,ide_skills,learning,output}`. Downstream tooling that introspects an SKF install (e.g. to detect installed IDEs or list installed skills) reads this file; its top-level shape is the v1.0.0 contract.
62
- - `_bmad/_memory/forger-sidecar/` — Ferris agent runtime state directory. The directory's existence and location are covered. File formats inside are `@internal` (not a downstream-consumable schema); `skf update` round-trips sidecar state between SKF versions — see `skf update` in [§ User-Facing Command Output Formats](#user-facing-command-output-formats) for the state-preservation commitment.
63
- - `_skf-learn/` — optional learning material; created only when the user opts into learning at install time.
64
- - `{skills_output_folder}/` — default `skills/`, configurable via install prompt and persisted to `skf-manifest.yaml`.
65
- - `{forge_data_folder}/` — default `forge-data/`, configurable via install prompt and persisted to `skf-manifest.yaml`.
66
- - `.gitignore` at project root — SKF appends `_bmad/_memory/` as an ignore entry (or creates the file if absent). Existing content is preserved; if the entry is already present, the file is left untouched. The appended entry name is part of the contract.
67
- - **Per-IDE skill directories.** SKF installs skills to each configured IDE's conventional skills directory. The IDE → directory mapping is enumerated in `tools/cli/lib/platform-codes.yaml` under `platforms.<ide>.installer.target_dir`; the `platforms.<ide>.installer.target_dir` mapping is part of the v1.0.0 contract (other keys in that file are `@internal`). Renaming `platforms.*` or `installer.target_dir` is breaking; removing a platform's `target_dir` is breaking for consumers of that IDE; adding a new platform entry is additive (minor).
62
+ - `_bmad/skf/`: SKF module files.
63
+ - `_bmad/_config/skf-manifest.yaml`: install manifest. Format per `tools/cli/lib/manifest.js`; covered top-level keys: `version` (equals the SKF package version at install time; downstream tooling MAY read it to detect the installed SKF version), `installed_at`, `action`, `module`, `skf_folder`, `ides`, `skills_output_folder`, `forge_data_folder`, `directories[]`, `files.{skf,sidecar,ide_skills,learning,output}`. Downstream tooling that introspects an SKF install (e.g. to detect installed IDEs or list installed skills) reads this file; its top-level shape is part of this contract.
64
+ - `_bmad/_memory/forger-sidecar/`: Ferris agent runtime state directory. The directory's existence and location are covered. File formats inside are `@internal` (not a downstream-consumable schema); `skf update` round-trips sidecar state between SKF versions (see `skf update` in [§ User-Facing Command Output Formats](#user-facing-command-output-formats) for the state-preservation commitment).
65
+ - `_skf-learn/`: optional learning material; created only when the user opts into learning at install time.
66
+ - `{skills_output_folder}/`: default `skills/`, configurable via install prompt and persisted to `skf-manifest.yaml`.
67
+ - `{forge_data_folder}/`: default `forge-data/`, configurable via install prompt and persisted to `skf-manifest.yaml`.
68
+ - `.gitignore` at project root: SKF appends `_bmad/_memory/` as an ignore entry (or creates the file if absent). Existing content is preserved; if the entry is already present, the file is left untouched. The appended entry name is part of the contract.
69
+ - **Per-IDE skill directories.** SKF installs skills to each configured IDE's conventional skills directory. The IDE → directory mapping is enumerated in `tools/cli/lib/platform-codes.yaml` under `platforms.<ide>.installer.target_dir`; the `platforms.<ide>.installer.target_dir` mapping is part of this contract (other keys in that file are `@internal`). Renaming `platforms.*` or `installer.target_dir` is breaking; removing a platform's `target_dir` is breaking for consumers of that IDE; adding a new platform entry is additive (minor).
68
70
 
69
71
  ### User-Facing Command Output Formats
70
72
 
71
- The v1.0.0 contract commits to the **information each command outputs** and to **exit-code semantics**, not to exact human-readable wording, ANSI color choices, or console layout. Downstream tooling that needs structured introspection of an install should read `_bmad/_config/skf-manifest.yaml` directly (see [§ Installation Layout](#installation-layout)), which IS committed verbatim.
73
+ This contract commits to the **information each command outputs** and to **exit-code semantics**, not to exact human-readable wording, ANSI color choices, or console layout. Downstream tooling that needs structured introspection of an install SHOULD read `_bmad/_config/skf-manifest.yaml` directly (see [§ Installation Layout](#installation-layout)), which is committed verbatim.
72
74
 
73
75
  - **`skf status`** SHALL convey: installation-present boolean, installed version string, forge-tier name (or a "not detected" equivalent), configured IDE list, workflow-skill count, sidecar state, and output-folder paths. Exit `0` on success; `1` on unhandled failure.
74
76
  - **`skf install`** SHALL exit `0` on successful install and on user-cancel (Ctrl-C at a prompt or explicit decline at a confirm step); `1` on unhandled failure. The success path SHALL emit a success confirmation.
75
77
  - **`skf update`** SHALL exit `0` on successful update and on "nothing to do" (no prior install detected); `1` on unhandled failure. `skf update` aims to preserve existing config and sidecar state across SKF versions; breaking migrations, when needed, will be called out in `CHANGELOG.md`.
76
78
  - **`skf uninstall`** SHALL exit `0` on successful removal, on "nothing to do" (no prior install detected), and on user-declined confirmation. Exit `1` on unhandled failure.
77
79
 
78
- Explicit non-commitments: ANSI color choices, exact prose wording, precise layout of tables or lists, and i18n prose variations are `@internal` and may change in minor releases.
80
+ Explicit non-commitments: ANSI color choices, exact prose wording, precise layout of tables or lists, and i18n prose variations are `@internal` and MAY change in minor releases.
79
81
 
80
82
  ### Engine & Platform Compatibility
81
83
 
82
84
  SKF supports the Node.js major versions declared in `package.json` `engines.node` (currently `>=22.0.0`). Dropping a supported major is breaking; adding support for a new major is additive. Linux, macOS, and Windows are supported runtime platforms; dropping OS support is breaking. Adding support for a new platform is additive.
83
85
 
84
- ## @internal — Not Covered by SemVer
86
+ The external tools SKF runs have minimum versions too, in `src/shared/tool-requirements.yaml` (installed as `_bmad/skf/shared/tool-requirements.yaml`), such as ast-grep >= 0.45.3 and git >= 2.15; a tool whose `minimum` is null has none. `skf install`, `skf update` and `skf status` report each tool against its minimum, and `skf-setup` counts no tier tool below its minimum toward the capability tier. Raising a tool's minimum, or giving a tool a minimum it did not have, is breaking. Lowering or removing a minimum is additive. Changing a tool's `tested` versions is neither. The release check compares these minimums with the last stable release, as it does the items of [§ Workflow Contract Surfaces](#workflow-contract-surfaces): a raised or new minimum needs a major release and a breaking change fragment that names the tool.
87
+
88
+ ### Workflow Contract Surfaces
85
89
 
86
- The following surfaces are explicitly excluded from the v1.0.0 contract. Changes to any of these may land in any release — patch, minor, or major — without constituting a "breaking change" from a SemVer perspective. Downstream consumers SHOULD NOT pin against these surfaces.
90
+ These are the parts of SKF's workflows that pipelines, scripts and saved Ferris commands depend on by name. Removing or renaming any item below is breaking (major), and adding one is additive (minor); for a flag, removing it means what the **Workflow flags** entry says:
87
91
 
88
- - **`tools/cli/lib/*` internal helper modules** — implementation detail of the CLI; not a library. Any refactor that preserves the observable CLI surface and install layout above is allowed.
89
- - **Internal structure of workflow step files under `src/skf-*/references/`** — the workflow authoring format is an SKF-internal authoring surface; step numbering, file names, and prose can change.
90
- - **`_bmad/_memory/forger-sidecar/*.yaml` file schemas** — Ferris sidecar state. Stable as a runtime contract between SKF versions during one install's lifetime (so `skf update` works), but not a downstream-consumable schema.
91
- - **Ferris agent persona prose and menu wording** — the in-product agent persona can be rephrased or restructured at any time.
92
- - **Exact chalk styling / ANSI color choices in command output** — stylistic; see the output-format bucket above for what IS committed.
93
- - **Internal logic of the `Installer` class in `tools/cli/lib/installer.js`** — private implementation; what's covered is the observable install layout, not how the files get there.
94
- - **Workflow `{communication_language}` / `{document_output_language}` template substitution** — an authoring convenience for workflow prose; the mechanism is internal.
95
- - **Knowledge-base contents under `src/knowledge/` and `src/skf-*/references/`** — evolving reference material, not a schema.
96
- - **Test fixtures and test file layout under `test/`** — test organization is internal (except `test/schema/**`, which defines schemas covered by [§ Skill Manifest & Frontmatter Contract](#skill-manifest--frontmatter-contract)).
97
- - **Build and docs tooling (`tools/build-docs.js`, `website/`)** — internal build pipeline for the Starlight docs site; not a consumer surface.
98
- - **`_bmad-output/` planning-artifact layout** — gitignored and never distributed; not shipped in the npm package.
92
+ - **Schema enum values and properties.** Every enum value and every property in the JSON schemas directly under `src/shared/scripts/schemas/` (installed under `_bmad/skf/shared/scripts/schemas/`): the skill brief, workspace detection, and the headless result envelope of every workflow, covered from 3.0.0 with its `status`, `exit_code` and `halt_reason` values and its properties: `skf-analyze-source` (`skf-analyze-result-envelope.v1.json`), `skf-audit-skill` (`skf-audit-result-envelope.v1.json`, whose `halt_reason` values include `helper-missing`, `provenance-invalid`, `source-unreadable` and `no-baseline`, and whose properties include `upstream_moved` and `upstream_ref`), `skf-brief-skill` (`skf-brief-result-envelope.v1.json`), `skf-campaign` (`skf-campaign-result-envelope.v1.json`), `skf-create-skill` (`skf-create-skill-result-envelope.v1.json`), `skf-create-stack-skill` (`skf-stack-result-envelope.v1.json`, whose `halt_reason` values include `helper-missing`, and whose properties include `run_id`, `result_path`, `headless_decisions` and `warnings`), `skf-drop-skill` (`skf-drop-skill-result-envelope.v1.json`), `skf-export-skill` (`skf-export-result-envelope.v1.json`), `skf-quick-skill` (`skf-quick-skill-result-envelope.v1.json`), `skf-refine-architecture` (`skf-refine-architecture-result-envelope.v1.json`), `skf-rename-skill` (`skf-rename-skill-result-envelope.v1.json`), `skf-setup` (`skf-setup-result-envelope.v1.json`), `skf-test-skill` (`skf-test-result-envelope.v1.json`), `skf-update-skill` (`skf-update-result-envelope.v1.json`) and `skf-verify-stack` (`skf-verify-stack-result-envelope.v1.json`). For example, the `status` values of `skf-setup-result-envelope.v1.json`.
93
+ - **Ferris menu codes.** The codes in the Code column of the Capabilities table in `src/skf-forger/SKILL.md`, such as `SF`, `CS` and `CA`. The descriptions beside them stay `@internal`.
94
+ - **Pipeline aliases.** The aliases in the alias table of `src/shared/references/pipeline-contracts.md`, such as `forge-auto` and `maintain`. An alias named on a "Deprecated alias:" line there still works and stays covered, so deprecating one is not breaking; removing it is. The rest of that file stays `@internal`.
95
+ - **Workflow flags.** Every flag, such as `--headless` and `--dry-run`, written in the Flags, Inputs, Headless inputs, Headless flag or Overrides row of a workflow's `SKILL.md` (`src/skf-<name>/SKILL.md`) or of its `references/invocation-contract.md` (where a headless contract moved out of `SKILL.md` keeps its rows), per workflow. A row moved from one of these files to the other moves no flag. A flag counts when it opens a backticked span, such as `--tier=<Quick>`, or is a long flag written without backticks, such as `--batch`. A flag written only elsewhere in those files, or only inside a longer backticked command such as `campaign resume [--from=<skill>]`, is not covered. A flag that enters a flag row is added, even when the workflow's files named it before. A covered flag is removed, and so breaking, when the Markdown of its workflow (`SKILL.md`, `references/`, `templates/` and `assets/`) no longer names it; a mention in a command that runs another program, in an argument the workflow hands to a helper script, or in a note that the flag was renamed or removed does not count. A flag that leaves every flag row while that Markdown still names it is listed for review at release time instead, unless a flag the workflow never named before enters its rows in the same release: that may be a rename, so it counts as a removal.
96
+
97
+ Each release checks this bucket mechanically: [`tools/covered-surfaces.js`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/tools/covered-surfaces.js) compares these items with the last stable release, and the release workflow refuses a release that removes one unless it is a major release whose notes name the item. The same check also reports the workflow exit codes and the `halt_reason` and `error.phase` values written in the step files, required schema fields, preference keys and install config keys: a new exit code or preference key raises the minimum bump to minor, and the other changes are listed for review at release time. None of these is part of this contract beyond the `exit_code` and `halt_reason` values a result envelope schema lists (**Schema enum values and properties**, above), and promoting one later is an additive change.
98
+
99
+ ## @internal — Not Covered by SemVer
100
+
101
+ The following surfaces are explicitly excluded from this contract. Changes to any of these MAY land in any release (patch, minor, or major) without constituting a "breaking change" from a SemVer perspective, except the parts that entries below name as reviewed by the release check. Downstream consumers SHOULD NOT pin against these surfaces.
102
+
103
+ - **`tools/cli/lib/*` internal helper modules**: implementation detail of the CLI; not a library. Any refactor that preserves the observable CLI surface and install layout above is allowed.
104
+ - **Workflow step files and reference material under `src/skf-*/references/`**: the workflow authoring format is an SKF-internal authoring surface; step numbering, file names, prose and reference material can change. The exit-code tables and the `halt_reason` and `error.phase` values these files define are the exception: the release check reviews every change to them at each release, and a new workflow exit code needs at least a minor bump, while an `exit_code` or `halt_reason` value a result envelope schema lists is covered surface (see [§ Workflow Contract Surfaces](#workflow-contract-surfaces)).
105
+ - **`_bmad/_memory/forger-sidecar/*.yaml` file schemas**: Ferris sidecar state. Stable as a runtime contract between SKF versions during one install's lifetime (so `skf update` works), but not a downstream-consumable schema. The preference keys of `preferences.yaml` are the exception: the release check reviews every change to them at each release, and a new preference key needs at least a minor bump (see [§ Workflow Contract Surfaces](#workflow-contract-surfaces)).
106
+ - **Ferris agent persona prose and menu wording**: the in-product agent persona can be rephrased or restructured at any time.
107
+ The menu codes themselves are covered: see [§ Workflow Contract Surfaces](#workflow-contract-surfaces).
108
+ - **Exact chalk styling / ANSI color choices in command output**: stylistic; see the output-format bucket above for what is committed.
109
+ - **Internal logic of the `Installer` class in `tools/cli/lib/installer.js`**: private implementation; what's covered is the observable install layout, not how the files get there.
110
+ - **Workflow `{communication_language}` / `{document_output_language}` template substitution**: an authoring convenience for workflow prose; the mechanism is internal.
111
+ - **Knowledge-base contents under `src/knowledge/`**: evolving reference material, not a schema.
112
+ - **Test fixtures and test file layout under `test/`**: test organization is internal (except `test/schema/**`, which defines schemas covered by [§ Skill Manifest & Frontmatter Contract](#skill-manifest--frontmatter-contract)).
113
+ - **Build and docs tooling (`tools/build-docs.js`, `website/`)**: internal build pipeline for the Starlight docs site; not a consumer surface.
114
+ - **`_bmad-output/` planning-artifact layout**: gitignored and never distributed; not shipped in the npm package.
99
115
 
100
116
  ## How to Use This Contract
101
117
 
102
118
  Pin SKF as a dependency with caret-range major-version pinning to get minor and patch updates automatically:
103
119
 
104
120
  ```json
105
- "bmad-module-skill-forge": "^1.0.0"
121
+ "bmad-module-skill-forge": "^3.0.0"
106
122
  ```
107
123
 
108
124
  The caret range covers additive changes and internal refactors on covered surfaces, and any change on `@internal` surfaces. If you find that an SKF release broke a covered surface listed in this document, please open an issue at <https://github.com/armelhbobdad/bmad-module-skill-forge/issues> citing the relevant section — it is either a bug in SKF that needs reverting or a missed major-version bump.
109
125
 
110
- If a surface you depend on is NOT explicitly enumerated in [§ Covered Surfaces](#covered-surfaces), treat it as `@internal` — if in doubt, it is `@internal`. If you believe a surface should be promoted from `@internal` to covered, open an issue with a use-case description; promotion is additive and can land in a minor release.
126
+ If a surface you depend on is not explicitly enumerated in [§ Covered Surfaces](#covered-surfaces), treat it as `@internal`: if in doubt, it is `@internal`. If you believe a surface should be promoted from `@internal` to covered, open an issue with a use-case description; promotion is additive and can land in a minor release.
111
127
 
112
128
  ## Changes to This Contract
113
129
 
114
130
  Shrinking the covered surface (removing a commitment) is a breaking change and requires a major-version bump. Expanding the covered surface (promoting an `@internal` surface to covered, or adding a new commitment) is additive and ships in a minor release. This document is versioned alongside the package; historical versions are visible via `git log -- docs/STABILITY.md docs/_internal/STABILITY.md`.
115
131
 
132
+ What each version changed in this contract:
133
+
134
+ - **v1.0.0**: the contract took effect, with the first six buckets of [§ Covered Surfaces](#covered-surfaces).
135
+ - **v3.0.0**: added [§ Workflow Contract Surfaces](#workflow-contract-surfaces), which widens what the contract covers and removes nothing from it, so it is an additive change. It also adopted the BCP 14 keywords, stopped counting the workflow exit codes, `halt_reason` and `error.phase` values and preference keys that the release check reviews among the `@internal` surfaces free to change in any release, restated the `SKILL.md` description rule as rule `SKILL-06` checks it, trigger phrases that name their object included, named the headless result envelope schema of every workflow among the covered schemas, and recorded that `package.json` declares no `main` field, so requiring the package throws `MODULE_NOT_FOUND`. It also added the tool minimums of `tool-requirements.yaml` to [§ Engine & Platform Compatibility](#engine--platform-compatibility), so raising or adding one is breaking.
136
+
116
137
  ## References
117
138
 
118
139
  - [agentskills.io spec](https://github.com/agentskills/agentskills) — external canonical source for the `SKILL.md` frontmatter grammar.
119
140
  - [Semantic Versioning 2.0.0](https://semver.org/) — the SemVer semantics this contract commits to.
141
+ - [BCP 14](https://www.rfc-editor.org/info/bcp14) ([RFC 2119](https://www.rfc-editor.org/rfc/rfc2119) and [RFC 8174](https://www.rfc-editor.org/rfc/rfc8174)): the meaning of the requirement words this document writes in capitals.
120
142
  - [`CHANGELOG.md`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/CHANGELOG.md) — release-by-release history; breaking changes are called out there.
121
- - [`docs/_internal/RELEASING.md`](RELEASING.md) — maintainer reference for the release pipeline (companion document: this file is about what ships, `RELEASING.md` is about how).
143
+ - [`docs/_internal/RELEASING.md`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/docs/_internal/RELEASING.md) — maintainer reference for the release pipeline (companion document: this file is about what ships, `RELEASING.md` is about how). Linked by URL, not relatively: `RELEASING.md` is maintainer-only and excluded from the published npm tarball, while this file ships as the public API contract, so a relative link would dangle for anyone reading the installed package.
144
+ - [`tools/covered-surfaces.js`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/tools/covered-surfaces.js) and [`changes/README.md`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/changes/README.md): the release check for [§ Workflow Contract Surfaces](#workflow-contract-surfaces) and the change-fragment format the release notes are written in. Linked by URL: neither ships in the npm package.
122
145
  - [`tools/cli/lib/platform-codes.yaml`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/tools/cli/lib/platform-codes.yaml) — source of truth for the IDE → skills-directory mapping covered under [§ Installation Layout](#installation-layout).
123
146
  - [`test/schema/agent.js`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/test/schema/agent.js) — zod schema definitions for `bmad-skill-manifest.yaml` covered under [§ Skill Manifest & Frontmatter Contract](#skill-manifest--frontmatter-contract).