bmad-module-skill-forge 0.9.0 → 0.10.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. package/.claude-plugin/marketplace.json +39 -0
  2. package/.gitattributes +16 -0
  3. package/README.md +105 -38
  4. package/docs/404.md +13 -10
  5. package/docs/RELEASING.md +185 -0
  6. package/docs/STABILITY.md +123 -0
  7. package/docs/_data/pinned.yaml +98 -0
  8. package/docs/agents.md +16 -11
  9. package/docs/architecture.md +221 -0
  10. package/docs/bmad-synergy.md +11 -13
  11. package/docs/concepts.md +18 -108
  12. package/docs/examples.md +121 -80
  13. package/docs/getting-started.md +85 -147
  14. package/docs/how-it-works.md +25 -536
  15. package/docs/index.md +44 -27
  16. package/docs/skill-model.md +328 -0
  17. package/docs/troubleshooting.md +39 -0
  18. package/docs/verifying-a-skill.md +232 -0
  19. package/docs/why-skf.md +93 -0
  20. package/docs/workflows.md +119 -13
  21. package/package.json +25 -4
  22. package/src/README.md +23 -25
  23. package/src/forger/forge-tier.yaml +4 -2
  24. package/src/forger/preferences.yaml +7 -1
  25. package/src/knowledge/agentskills-spec.md +1 -1
  26. package/src/knowledge/architecture-verification.md +1 -1
  27. package/src/knowledge/ccc-bridge.md +16 -15
  28. package/src/knowledge/overview.md +11 -11
  29. package/src/knowledge/progressive-capability.md +3 -3
  30. package/src/knowledge/provenance-tracking.md +9 -3
  31. package/src/knowledge/qmd-registry.md +8 -8
  32. package/src/knowledge/skf-knowledge-index.csv +2 -2
  33. package/src/knowledge/skill-lifecycle.md +16 -1
  34. package/src/knowledge/split-body-strategy.md +1 -1
  35. package/src/knowledge/version-paths.md +17 -12
  36. package/src/module-help.csv +18 -17
  37. package/src/module.yaml +4 -0
  38. package/src/shared/health-check.md +372 -0
  39. package/src/shared/references/feasibility-report-schema.md +86 -0
  40. package/src/shared/references/headless-gate-convention.md +62 -0
  41. package/src/shared/references/output-contract-schema.md +35 -0
  42. package/src/shared/references/pipeline-contracts.md +102 -0
  43. package/src/shared/scripts/skf-atomic-write.py +370 -0
  44. package/src/shared/scripts/skf-manifest-ops.py +236 -0
  45. package/src/shared/scripts/skf-preflight.py +164 -0
  46. package/src/shared/scripts/skf-rebuild-managed-sections.py +201 -0
  47. package/src/shared/scripts/skf-severity-classify.py +163 -0
  48. package/src/shared/scripts/skf-skill-inventory.py +210 -0
  49. package/src/shared/scripts/skf-structural-diff.py +257 -0
  50. package/src/shared/scripts/skf-validate-frontmatter.py +318 -0
  51. package/src/shared/scripts/skf-validate-output.py +247 -0
  52. package/src/skf-analyze-source/SKILL.md +57 -0
  53. package/src/skf-analyze-source/assets/skill-brief-schema.md +125 -0
  54. package/src/skf-analyze-source/references/unit-detection-heuristics.md +124 -0
  55. package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-01-init.md +6 -66
  56. package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-01b-continue.md +4 -59
  57. package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-02-scan-project.md +7 -68
  58. package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-03-identify-units.md +6 -66
  59. package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-04-map-and-detect.md +7 -68
  60. package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-05-recommend.md +6 -66
  61. package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-06-generate-briefs.md +14 -66
  62. package/src/skf-analyze-source/steps-c/step-07-health-check.md +22 -0
  63. package/src/skf-audit-skill/SKILL.md +59 -0
  64. package/src/{workflows/audit-skill/data → skf-audit-skill/assets}/drift-report-template.md +7 -7
  65. package/src/{workflows/audit-skill/data → skf-audit-skill/references}/severity-rules.md +11 -11
  66. package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-01-init.md +24 -68
  67. package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-02-re-index.md +36 -71
  68. package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-03-structural-diff.md +21 -63
  69. package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-04-semantic-diff.md +6 -65
  70. package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-05-severity-classify.md +5 -63
  71. package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-06-report.md +10 -59
  72. package/src/skf-audit-skill/steps-c/step-07-health-check.md +22 -0
  73. package/src/skf-brief-skill/SKILL.md +53 -0
  74. package/src/{workflows/brief-skill/data → skf-brief-skill/assets}/scope-templates.md +23 -0
  75. package/src/skf-brief-skill/assets/skill-brief-schema.md +206 -0
  76. package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-01-gather-intent.md +6 -67
  77. package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-02-analyze-target.md +6 -66
  78. package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-03-scope-definition.md +12 -68
  79. package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-04-confirm-brief.md +5 -63
  80. package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-05-write-brief.md +10 -69
  81. package/src/skf-brief-skill/steps-c/step-06-health-check.md +22 -0
  82. package/src/skf-create-skill/SKILL.md +63 -0
  83. package/src/{workflows/create-skill/data → skf-create-skill/assets}/compile-assembly-rules.md +60 -0
  84. package/src/{workflows/create-skill/data → skf-create-skill/assets}/skill-sections.md +92 -23
  85. package/src/skf-create-skill/assets/tessl-dismissal-rules.md +102 -0
  86. package/src/{workflows/create-skill/data → skf-create-skill/references}/extraction-patterns-tracing.md +13 -13
  87. package/src/{workflows/create-skill/data → skf-create-skill/references}/extraction-patterns.md +8 -3
  88. package/src/skf-create-skill/references/source-resolution-protocols.md +239 -0
  89. package/src/{workflows/create-skill/data → skf-create-skill/references}/tier-degradation-rules.md +8 -7
  90. package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-01-load-brief.md +25 -63
  91. package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-02-ecosystem-check.md +8 -64
  92. package/src/skf-create-skill/steps-c/step-03-extract.md +379 -0
  93. package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-03d-component-extraction.md +18 -35
  94. package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-04-enrich.md +12 -69
  95. package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-05-compile.md +71 -75
  96. package/src/skf-create-skill/steps-c/step-06-validate.md +267 -0
  97. package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-07-generate-artifacts.md +30 -74
  98. package/src/skf-create-skill/steps-c/step-08-report.md +145 -0
  99. package/src/skf-create-skill/steps-c/step-09-health-check.md +23 -0
  100. package/src/{workflows/create-skill/steps-c → skf-create-skill/steps-c/sub}/step-02b-ccc-discover.md +8 -66
  101. package/src/skf-create-skill/steps-c/sub/step-03b-fetch-temporal.md +229 -0
  102. package/src/{workflows/create-skill/steps-c → skf-create-skill/steps-c/sub}/step-03c-fetch-docs.md +18 -42
  103. package/src/skf-create-stack-skill/SKILL.md +64 -0
  104. package/src/{workflows/create-stack-skill/data → skf-create-stack-skill/assets}/stack-skill-template.md +2 -1
  105. package/src/{workflows/create-stack-skill/data → skf-create-stack-skill/references}/compose-mode-rules.md +19 -5
  106. package/src/{workflows/create-stack-skill/data → skf-create-stack-skill/references}/integration-patterns.md +1 -1
  107. package/src/{workflows/create-stack-skill/data → skf-create-stack-skill/references}/manifest-patterns.md +10 -10
  108. package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-01-init.md +14 -55
  109. package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-02-detect-manifests.md +29 -63
  110. package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-03-rank-and-confirm.md +9 -59
  111. package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-04-parallel-extract.md +29 -64
  112. package/src/skf-create-stack-skill/steps-c/step-05-detect-integrations.md +164 -0
  113. package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-06-compile-stack.md +7 -60
  114. package/src/skf-create-stack-skill/steps-c/step-07-generate-output.md +328 -0
  115. package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-08-validate.md +17 -63
  116. package/src/skf-create-stack-skill/steps-c/step-09-report.md +128 -0
  117. package/src/skf-create-stack-skill/steps-c/step-10-health-check.md +22 -0
  118. package/src/skf-drop-skill/SKILL.md +57 -0
  119. package/src/{workflows/drop-skill → skf-drop-skill}/steps-c/step-01-select.md +9 -69
  120. package/src/{workflows/drop-skill → skf-drop-skill}/steps-c/step-02-execute.md +30 -106
  121. package/src/skf-drop-skill/steps-c/step-03-report.md +83 -0
  122. package/src/skf-drop-skill/steps-c/step-04-health-check.md +22 -0
  123. package/src/skf-export-skill/SKILL.md +57 -0
  124. package/src/skf-export-skill/assets/managed-section-format.md +138 -0
  125. package/src/{workflows/export-skill/data → skf-export-skill/assets}/snippet-format.md +8 -12
  126. package/src/skf-export-skill/steps-c/step-01-load-skill.md +247 -0
  127. package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-02-package.md +5 -58
  128. package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-03-generate-snippet.md +15 -77
  129. package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-04-update-context.md +59 -133
  130. package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-05-token-report.md +4 -58
  131. package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-06-summary.md +20 -64
  132. package/src/skf-export-skill/steps-c/step-07-health-check.md +22 -0
  133. package/src/skf-forger/SKILL.md +110 -0
  134. package/src/skf-forger/bmad-skill-manifest.yaml +11 -0
  135. package/src/skf-quick-skill/SKILL.md +56 -0
  136. package/src/{workflows/quick-skill/data → skf-quick-skill/references}/registry-resolution.md +6 -6
  137. package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-01-resolve-target.md +9 -62
  138. package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-02-ecosystem-check.md +5 -59
  139. package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-03-quick-extract.md +18 -61
  140. package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-04-compile.md +6 -60
  141. package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-05-validate.md +58 -78
  142. package/src/skf-quick-skill/steps-c/step-06-write.md +73 -0
  143. package/src/skf-quick-skill/steps-c/step-07-health-check.md +22 -0
  144. package/src/skf-refine-architecture/SKILL.md +57 -0
  145. package/src/{workflows/refine-architecture/data → skf-refine-architecture/references}/refinement-rules.md +16 -16
  146. package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-01-init.md +6 -63
  147. package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-02-gap-analysis.md +29 -71
  148. package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-03-issue-detection.md +5 -65
  149. package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-04-improvements.md +5 -64
  150. package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-05-compile.md +5 -56
  151. package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-06-report.md +14 -64
  152. package/src/skf-refine-architecture/steps-c/step-07-health-check.md +22 -0
  153. package/src/skf-rename-skill/SKILL.md +58 -0
  154. package/src/{workflows/rename-skill → skf-rename-skill}/steps-c/step-01-select.md +12 -73
  155. package/src/{workflows/rename-skill → skf-rename-skill}/steps-c/step-02-execute.md +32 -113
  156. package/src/skf-rename-skill/steps-c/step-03-report.md +83 -0
  157. package/src/skf-rename-skill/steps-c/step-04-health-check.md +22 -0
  158. package/src/skf-setup/SKILL.md +55 -0
  159. package/src/{workflows/setup-forge → skf-setup}/steps-c/step-01-detect-and-tier.md +6 -62
  160. package/src/{workflows/setup-forge → skf-setup}/steps-c/step-01b-ccc-index.md +9 -65
  161. package/src/{workflows/setup-forge → skf-setup}/steps-c/step-02-write-config.md +15 -60
  162. package/src/{workflows/setup-forge → skf-setup}/steps-c/step-03-auto-index.md +7 -66
  163. package/src/skf-setup/steps-c/step-04-report.md +92 -0
  164. package/src/skf-setup/steps-c/step-05-health-check.md +22 -0
  165. package/src/skf-test-skill/SKILL.md +59 -0
  166. package/src/skf-test-skill/references/migration-section-rules.md +114 -0
  167. package/src/skf-test-skill/references/scoring-rules.md +207 -0
  168. package/src/skf-test-skill/references/source-access-protocol.md +109 -0
  169. package/src/skf-test-skill/scripts/compute-score.py +310 -0
  170. package/src/skf-test-skill/steps-c/step-01-init.md +238 -0
  171. package/src/{workflows/test-skill → skf-test-skill}/steps-c/step-02-detect-mode.md +4 -62
  172. package/src/skf-test-skill/steps-c/step-03-coverage-check.md +347 -0
  173. package/src/skf-test-skill/steps-c/step-04-coherence-check.md +239 -0
  174. package/src/{workflows/test-skill → skf-test-skill}/steps-c/step-04b-external-validators.md +42 -77
  175. package/src/skf-test-skill/steps-c/step-05-score.md +266 -0
  176. package/src/skf-test-skill/steps-c/step-06-report.md +290 -0
  177. package/src/skf-test-skill/steps-c/step-07-health-check.md +25 -0
  178. package/src/skf-test-skill/templates/test-report-template.md +58 -0
  179. package/src/skf-update-skill/SKILL.md +58 -0
  180. package/src/{workflows/update-skill/data → skf-update-skill/references}/manual-section-rules.md +6 -6
  181. package/src/{workflows/update-skill/data → skf-update-skill/references}/merge-conflict-rules.md +5 -5
  182. package/src/skf-update-skill/references/remote-source-resolution.md +94 -0
  183. package/src/{workflows/update-skill → skf-update-skill}/steps-c/step-01-init.md +22 -69
  184. package/src/skf-update-skill/steps-c/step-02-detect-changes.md +255 -0
  185. package/src/skf-update-skill/steps-c/step-03-re-extract.md +336 -0
  186. package/src/{workflows/update-skill → skf-update-skill}/steps-c/step-04-merge.md +60 -72
  187. package/src/{workflows/update-skill → skf-update-skill}/steps-c/step-05-validate.md +5 -62
  188. package/src/skf-update-skill/steps-c/step-06-write.md +278 -0
  189. package/src/{workflows/update-skill → skf-update-skill}/steps-c/step-07-report.md +11 -66
  190. package/src/skf-update-skill/steps-c/step-08-health-check.md +22 -0
  191. package/src/skf-verify-stack/SKILL.md +60 -0
  192. package/src/skf-verify-stack/assets/feasibility-report-template.md +76 -0
  193. package/src/{workflows/verify-stack/data → skf-verify-stack/references}/coverage-patterns.md +12 -4
  194. package/src/skf-verify-stack/references/integration-verification-rules.md +78 -0
  195. package/src/skf-verify-stack/steps-c/step-01-init.md +178 -0
  196. package/src/{workflows/verify-stack → skf-verify-stack}/steps-c/step-02-coverage.md +27 -72
  197. package/src/skf-verify-stack/steps-c/step-03-integrations.md +179 -0
  198. package/src/{workflows/verify-stack → skf-verify-stack}/steps-c/step-04-requirements.md +14 -67
  199. package/src/skf-verify-stack/steps-c/step-05-synthesize.md +147 -0
  200. package/src/skf-verify-stack/steps-c/step-06-report.md +156 -0
  201. package/src/skf-verify-stack/steps-c/step-07-health-check.md +25 -0
  202. package/tools/cli/commands/install.js +1 -1
  203. package/tools/cli/commands/status.js +21 -23
  204. package/tools/cli/commands/uninstall.js +11 -19
  205. package/tools/cli/commands/update.js +2 -2
  206. package/tools/cli/lib/ide-skills.js +216 -0
  207. package/tools/cli/lib/installer.js +29 -52
  208. package/tools/cli/lib/manifest.js +11 -5
  209. package/tools/cli/lib/platform-codes.yaml +223 -0
  210. package/tools/cli/lib/ui.js +76 -47
  211. package/tools/validate-docs-drift.js +193 -0
  212. package/src/agents/forger.agent.yaml +0 -114
  213. package/src/workflows/README.md +0 -174
  214. package/src/workflows/analyze-source/data/skill-brief-schema.md +0 -125
  215. package/src/workflows/analyze-source/data/unit-detection-heuristics.md +0 -124
  216. package/src/workflows/analyze-source/workflow.md +0 -61
  217. package/src/workflows/audit-skill/workflow.md +0 -64
  218. package/src/workflows/brief-skill/data/skill-brief-schema.md +0 -159
  219. package/src/workflows/brief-skill/workflow.md +0 -58
  220. package/src/workflows/create-skill/data/source-resolution-protocols.md +0 -200
  221. package/src/workflows/create-skill/steps-c/step-03-extract.md +0 -301
  222. package/src/workflows/create-skill/steps-c/step-03b-fetch-temporal.md +0 -253
  223. package/src/workflows/create-skill/steps-c/step-06-validate.md +0 -254
  224. package/src/workflows/create-skill/steps-c/step-08-report.md +0 -176
  225. package/src/workflows/create-skill/workflow.md +0 -53
  226. package/src/workflows/create-stack-skill/steps-c/step-05-detect-integrations.md +0 -196
  227. package/src/workflows/create-stack-skill/steps-c/step-07-generate-output.md +0 -270
  228. package/src/workflows/create-stack-skill/steps-c/step-09-report.md +0 -145
  229. package/src/workflows/create-stack-skill/workflow.md +0 -59
  230. package/src/workflows/drop-skill/steps-c/step-03-report.md +0 -135
  231. package/src/workflows/drop-skill/workflow.md +0 -63
  232. package/src/workflows/export-skill/data/managed-section-format.md +0 -103
  233. package/src/workflows/export-skill/steps-c/step-01-load-skill.md +0 -237
  234. package/src/workflows/export-skill/workflow.md +0 -58
  235. package/src/workflows/quick-skill/steps-c/step-06-write.md +0 -179
  236. package/src/workflows/quick-skill/workflow.md +0 -58
  237. package/src/workflows/refine-architecture/workflow.md +0 -61
  238. package/src/workflows/rename-skill/steps-c/step-03-report.md +0 -132
  239. package/src/workflows/rename-skill/workflow.md +0 -64
  240. package/src/workflows/setup-forge/steps-c/step-04-report.md +0 -156
  241. package/src/workflows/setup-forge/workflow.md +0 -51
  242. package/src/workflows/test-skill/data/scoring-rules.md +0 -123
  243. package/src/workflows/test-skill/data/source-access-protocol.md +0 -51
  244. package/src/workflows/test-skill/steps-c/step-01-init.md +0 -217
  245. package/src/workflows/test-skill/steps-c/step-03-coverage-check.md +0 -280
  246. package/src/workflows/test-skill/steps-c/step-04-coherence-check.md +0 -271
  247. package/src/workflows/test-skill/steps-c/step-05-score.md +0 -222
  248. package/src/workflows/test-skill/steps-c/step-06-report.md +0 -207
  249. package/src/workflows/test-skill/templates/test-report-template.md +0 -28
  250. package/src/workflows/test-skill/workflow.md +0 -57
  251. package/src/workflows/update-skill/data/remote-source-resolution.md +0 -57
  252. package/src/workflows/update-skill/steps-c/step-02-detect-changes.md +0 -221
  253. package/src/workflows/update-skill/steps-c/step-03-re-extract.md +0 -256
  254. package/src/workflows/update-skill/steps-c/step-06-write.md +0 -265
  255. package/src/workflows/update-skill/workflow.md +0 -56
  256. package/src/workflows/verify-stack/data/feasibility-report-template.md +0 -63
  257. package/src/workflows/verify-stack/data/integration-verification-rules.md +0 -73
  258. package/src/workflows/verify-stack/steps-c/step-01-init.md +0 -179
  259. package/src/workflows/verify-stack/steps-c/step-03-integrations.md +0 -195
  260. package/src/workflows/verify-stack/steps-c/step-05-synthesize.md +0 -191
  261. package/src/workflows/verify-stack/steps-c/step-06-report.md +0 -197
  262. package/src/workflows/verify-stack/workflow.md +0 -61
  263. package/tools/cli/lib/compiler.js +0 -306
  264. package/tools/cli/lib/ide-commands.js +0 -244
  265. /package/src/{workflows/analyze-source → skf-analyze-source}/templates/analysis-report-template.md +0 -0
  266. /package/src/{workflows/quick-skill/data → skf-quick-skill/assets}/skill-template.md +0 -0
  267. /package/src/{workflows/setup-forge/data → skf-setup/references}/tier-rules.md +0 -0
  268. /package/src/{workflows/test-skill/data → skf-test-skill/assets}/output-section-formats.md +0 -0
@@ -1,8 +1,6 @@
1
1
  ---
2
- name: 'step-05-write-brief'
3
- description: 'Generate and write skill-brief.yaml to the forge data folder'
4
-
5
- briefSchemaFile: '../data/skill-brief-schema.md'
2
+ briefSchemaFile: 'assets/skill-brief-schema.md'
3
+ nextStepFile: './step-06-health-check.md'
6
4
  ---
7
5
 
8
6
  # Step 5: Write Brief
@@ -11,43 +9,12 @@ briefSchemaFile: '../data/skill-brief-schema.md'
11
9
 
12
10
  To generate the complete skill-brief.yaml from the approved brief data and write it to the forge data folder, completing the brief-skill workflow.
13
11
 
14
- ## MANDATORY EXECUTION RULES (READ FIRST):
15
-
16
- ### Universal Rules:
17
-
18
- - 🛑 NEVER generate content without user input
19
- - 📖 CRITICAL: Read the complete step file before taking any action
20
- - 📋 YOU ARE A FACILITATOR, not a content generator
21
- - ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}`
22
- - ⚙️ TOOL/SUBPROCESS FALLBACK: If any instruction references a subprocess, subagent, or tool you do not have access to, you MUST still achieve the outcome in your main context thread
23
-
24
- ### Role Reinforcement:
25
-
26
- - ✅ You are a skill brief generator in Ferris Architect mode
27
- - ✅ If you already have been given a name, communication_style and identity, continue to use those while playing this new role
28
- - ✅ Generate output precisely matching the schema — no creative embellishment
29
- - ✅ This is the final step — deliver clean, validated output
30
-
31
- ### Step-Specific Rules:
32
-
33
- - 🎯 Focus only on writing the file — all decisions have been made
34
- - 🚫 FORBIDDEN to change any field values without user request — the brief was already approved
35
- - 💬 Approach: Prescriptive — generate exact YAML matching the schema template
36
- - 📋 Create the output directory if it doesn't exist
37
-
38
- ## EXECUTION PROTOCOLS:
39
-
40
- - 🎯 Follow the MANDATORY SEQUENCE exactly
41
- - 💾 Write skill-brief.yaml to {forge_data_folder}/{skill-name}/
42
- - 📖 This is the final step — mark workflow complete
43
- - 🚫 FORBIDDEN to modify approved field values
12
+ ## Rules
44
13
 
45
- ## CONTEXT BOUNDARIES:
46
-
47
- - Available context: Complete approved brief data from steps 01-04
48
- - Focus: File generation and writing
49
- - Limits: No field changes — write exactly what was approved
50
- - Dependencies: Explicit user approval from step 04
14
+ - Focus only on writing the file — all decisions have been made
15
+ - Do not change any field values without user request — the brief was already approved
16
+ - Create the output directory if it doesn't exist
17
+ - Chains to the local health-check step via `{nextStepFile}` after completion — the user-facing success summary is NOT the terminal step
51
18
 
52
19
  ## MANDATORY SEQUENCE
53
20
 
@@ -216,37 +183,11 @@ After compilation, you can:
216
183
 
217
184
  **Brief-skill workflow complete.**"
218
185
 
219
- ### 7. End Workflow
186
+ ### 7. Chain to Health Check
220
187
 
221
- This is the final step. No next step file to load. The workflow is complete.
188
+ ONLY WHEN the brief file has been written and the success summary displayed will you then load, read the full file, and execute `{nextStepFile}`. The health-check step is the true terminal step — do not stop here even though the summary reads as final.
222
189
 
223
190
  ## CRITICAL STEP COMPLETION NOTE
224
191
 
225
- This is the FINAL step of the brief-skill workflow. After writing the file and displaying the success summary, the workflow ends.
226
-
227
- ---
228
-
229
- ## 🚨 SYSTEM SUCCESS/FAILURE METRICS
230
-
231
- ### ✅ SUCCESS:
232
-
233
- - Schema loaded for template reference
234
- - Output directory created (or fallback used with notification)
235
- - skill-brief.yaml generated with all required fields matching approved values
236
- - File written successfully to correct location
237
- - Deep tier: QMD collection `{skill-name}-brief` created/updated and registered in forge-tier.yaml
238
- - Non-Deep tier: QMD indexing skipped silently
239
- - Success summary displayed with next steps recommendation
240
- - Workflow marked as complete
241
-
242
- ### ❌ SYSTEM FAILURE:
243
-
244
- - Modifying approved field values without user request
245
- - Writing to wrong location
246
- - Missing required fields in generated YAML
247
- - Not creating output directory before writing
248
- - Not displaying next steps recommendation
249
- - Not handling write failure gracefully
250
- - Failing the workflow due to QMD indexing errors (should degrade gracefully)
192
+ This step chains to the local health-check step (`{nextStepFile}`), which in turn delegates to `shared/health-check.md`. After the health check completes, the brief-skill workflow is fully done.
251
193
 
252
- **Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE. QMD indexing failures never block the workflow.
@@ -0,0 +1,22 @@
1
+ ---
2
+ # `shared/health-check.md` resolves relative to the SKF module root
3
+ # (`_bmad/skf/` when installed, `src/` during development), NOT relative
4
+ # to this step file.
5
+ nextStepFile: 'shared/health-check.md'
6
+ ---
7
+
8
+ # Step 6: Workflow Health Check
9
+
10
+ ## STEP GOAL:
11
+
12
+ Chain to the shared workflow self-improvement health check at `{nextStepFile}`. This is the terminal step of brief-skill — after the shared health check completes, the workflow is fully done.
13
+
14
+ ## Rules
15
+
16
+ - No user-facing reports, file writes, or result contracts in this step — those belong in step-05
17
+ - Delegate directly to `{nextStepFile}` with no additional commentary
18
+ - Do not attempt any other action between loading this step and executing `{nextStepFile}`
19
+
20
+ ## MANDATORY SEQUENCE
21
+
22
+ Load `{nextStepFile}`, read it fully, then execute it.
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: skf-create-skill
3
+ description: Compile a skill from a brief. Supports --batch for multiple briefs. Use when the user requests to "create a skill" or "compile a skill."
4
+ ---
5
+
6
+ # Create Skill
7
+
8
+ ## Overview
9
+
10
+ Compiles a verified agent skill from a skill-brief.yaml and source code, producing an agentskills.io-compliant SKILL.md with provenance map, evidence report, and progressive disclosure references. The workflow is mostly autonomous with three interaction points — after ecosystem check (if match found), after source extraction (to confirm findings), and after content quality review (when tessl produces suggestions). Steps adapt behavior based on forge tier (Quick/Forge/Forge+/Deep). Zero hallucination tolerance: every instruction in the output must trace to source code with a confidence tier citation.
11
+
12
+ ## Role
13
+
14
+ You are operating in Ferris Architect mode — a skill compilation engine performing structural extraction and assembly. Apply zero hallucination tolerance: uncitable content is excluded, not guessed.
15
+
16
+ ## Workflow Rules
17
+
18
+ These rules apply to every step in this workflow:
19
+
20
+ - Never include content in SKILL.md that cannot be cited to source code
21
+ - Read each step file completely before taking any action
22
+ - Follow the mandatory sequence in each step exactly — do not skip, reorder, or optimize
23
+ - Only load one step file at a time — never preload future steps
24
+ - Always communicate in `{communication_language}`
25
+ - If `{headless_mode}` is true, auto-proceed through confirmation gates with their default action and log each auto-decision
26
+
27
+ ## Stages
28
+
29
+ | # | Step | File | Auto-proceed |
30
+ |---|------|------|--------------|
31
+ | 1 | Load Brief | steps-c/step-01-load-brief.md | Yes |
32
+ | 2 | Ecosystem Check | steps-c/step-02-ecosystem-check.md | Conditional |
33
+ | 2b | CCC Discover | steps-c/sub/step-02b-ccc-discover.md | Yes |
34
+ | 3 | Extract | steps-c/step-03-extract.md | No (confirm) |
35
+ | 3b | Fetch Temporal | steps-c/sub/step-03b-fetch-temporal.md | Yes |
36
+ | 3c | Fetch Docs | steps-c/sub/step-03c-fetch-docs.md | Yes |
37
+ | 3d | Component Extraction | steps-c/step-03d-component-extraction.md | Conditional |
38
+ | 4 | Enrich | steps-c/step-04-enrich.md | Yes |
39
+ | 5 | Compile | steps-c/step-05-compile.md | Yes |
40
+ | 6 | Validate | steps-c/step-06-validate.md | Conditional |
41
+ | 7 | Generate Artifacts | steps-c/step-07-generate-artifacts.md | Yes |
42
+ | 8 | Report | steps-c/step-08-report.md | Yes |
43
+ | 9 | Workflow Health Check | steps-c/step-09-health-check.md | Yes |
44
+
45
+ *Sub-steps under `steps-c/sub/` are conditional branches (CCC discovery, temporal/doc enrichment) kept out of the top-level step count so main-line steps 1–9 drive the workflow. Step 3d (Component Extraction) stays top-level as an alternative main step that replaces the standard extraction path when `scope.type: "component-library"`.*
46
+
47
+ ## Invocation Contract
48
+
49
+ | Aspect | Detail |
50
+ |--------|--------|
51
+ | **Inputs** | brief_path (path to skill-brief.yaml) [required], --batch [optional] |
52
+ | **Gates** | step-02: Choice Gate [P] (if match) | step-03: Review Gate [C] |
53
+ | **Outputs** | SKILL.md, context-snippet.md, metadata.json, provenance-map.json, evidence-report.md, references/ |
54
+ | **Headless** | All gates auto-resolve with default action when `{headless_mode}` is true |
55
+
56
+ ## On Activation
57
+
58
+ 1. Load config from `{project-root}/_bmad/skf/config.yaml` and resolve:
59
+ - `output_folder`, `user_name`, `communication_language`, `document_output_language`, `sidecar_path`, `skills_output_folder`, `forge_data_folder`
60
+
61
+ 2. **Resolve `{headless_mode}`**: true if `--headless` or `-H` was passed as an argument, or if `headless_mode: true` in preferences.yaml. Default: false.
62
+
63
+ 3. Load, read the full file, and then execute `./steps-c/step-01-load-brief.md` to begin the workflow.
@@ -16,6 +16,12 @@ description: >
16
16
 
17
17
  - `name`: lowercase alphanumeric + hyphens only, must match the skill output directory name. Prefer gerund form (`processing-pdfs`, `analyzing-spreadsheets`) for clarity.
18
18
  - `description`: non-empty, max 1024 chars, optimized for agent discovery. **MUST use third-person voice** ("Processes Excel files..." not "I can help you..." or "You can use this to..."). Inconsistent point-of-view causes discovery problems since the description is injected into the system prompt.
19
+ - **`description` must NOT contain angle brackets** — neither standalone placeholders like `<name>`, `<component>`, `<path>`, nor inline generics like `` `Array<T>` `` or `` `Meta<typeof X>` ``. Both `skill-check`'s `description_field` validator and `tessl`'s deterministic description check parse the frontmatter description as a raw string and reject any `<` or `>`, regardless of markdown context (backticks do NOT protect content here). A rejected description fails the review with 0% score. When the natural phrasing would use angle brackets:
20
+ - Prefer the curly-brace form in prose: `{name}`, `{component-id}`, `{path}` — readable and tessl-safe.
21
+ - Uppercase placeholders are also acceptable: `NAME`, `COMPONENT_ID`.
22
+ - For code-ish fragments, use curly braces in place of angle brackets inside the backticks: `` `Meta{typeof X}` ``, `` `Array{T}` ``.
23
+
24
+ Authors should not rely on remembering this — step-05 §2a enforces it via a pre-write sanitization pass that unconditionally replaces every `<` with `{` and every `>` with `}` in the frontmatter `description`. See step-05 §2a for the rule and `assets/tessl-dismissal-rules.md` (`description-xml-tags-guarded-upstream`) for the recovery path if a downstream tool rewrites the description after §2a has run.
19
25
  - Only `name` and `description` in frontmatter — `version` and `author` go in metadata.json
20
26
  - No other frontmatter fields for standard skills (only `name`, `description`, `license`, `compatibility`, `metadata`, `allowed-tools` are permitted by spec)
21
27
 
@@ -216,6 +222,55 @@ When `scope.type: "component-library"`, add these fields to `stats`:
216
222
 
217
223
  These are in addition to the standard stats fields (exports_documented, etc.).
218
224
 
225
+ ### Reference-App Assembly Overrides
226
+
227
+ When `scope.type: "reference-app"` in the brief, apply these overrides to the standard assembly. The skill's value is an integration pattern (wiring), not a library surface — the default library-export template would force assemblers to remap wiring onto export slots and produce fuzzy counts. These overrides give that value a first-class home.
228
+
229
+ **Section 4 (Key API Summary) — Pattern Surface override:**
230
+
231
+ Replace the per-function table with an ordered list of wiring steps. Each step names a file, a surface (decorator, build field, lifecycle hook, config key), and a one-line description of what the user does there — not a function signature. The goal is that a reader copying the pattern can follow the list in order.
232
+
233
+ ```markdown
234
+ ## Pattern Surface
235
+
236
+ | # | File | Surface | Purpose |
237
+ |---|------|---------|---------|
238
+ | 1 | {src/main.py} | {@app.startup decorator} | {brief wiring purpose} |
239
+ | 2 | {electron.vite.config.ts} | {build.copy field} | {brief wiring purpose} |
240
+ | … | … | … | … |
241
+ ```
242
+
243
+ Source: the authored pattern surface from extraction + brief `scope.tier_a_include` (when present) or the curated provenance-map entries (when absent). Provenance: cite the originating source files.
244
+
245
+ **Section 3 (Common Workflows) — Adoption Steps override:**
246
+
247
+ Replace the function-call-chain format with copy-this-wiring narrative. Prefer numbered imperative steps that the user can execute in order, not an API-call sequence. Keep each step's code snippet minimal (5–15 lines) — full wiring lives in Tier 2.
248
+
249
+ ```markdown
250
+ ## Adoption Steps
251
+
252
+ 1. **{Step name}** — {one-line description}
253
+ ```{language}
254
+ {minimal wiring snippet}
255
+ ```
256
+ 2. **{Step name}** — {one-line description}
257
+
258
+ ```
259
+
260
+ **Tier 2 (Full API Reference) — pattern-oriented override:**
261
+
262
+ Replace per-function subsections with `references/pattern-*.md` groupings: one reference file per coherent wiring concern (e.g. `pattern-lifecycle.md`, `pattern-build-config.md`, `pattern-ipc.md`). Each reference file covers every file/surface touched by that concern with full code snippets, gotchas, and provenance. Tier 1 (Pattern Surface) stays index-like; Tier 2 carries the copy-paste-able depth.
263
+
264
+ **metadata.json — Reference-App stats semantics:**
265
+
266
+ `stats.exports_documented` is a **library concept** and does not carry over cleanly. When `scope.type: "reference-app"`:
267
+
268
+ - `stats.exports_documented` MAY be set to the Pattern Surface row count as a proxy, but its semantics change: it counts authored pattern surfaces, not public exports. Emit an adjacent `stats.pattern_surfaces_documented` with the same integer so downstream consumers (test-skill, feasibility, discovery) can discriminate.
269
+ - `exports_public_api` / `exports_internal` / `exports_total` are not meaningful for a reference app — omit them, or set all three to the Pattern Surface count with a note in `stats.notes`: `"reference-app: export counts are pattern-surface proxies, not library exports"`.
270
+ - Do NOT fabricate signature / type-coverage data from pattern surfaces. skf-test-skill will skip those categories when metadata flags a reference-app (same skip path as `stackSkill` once that flag is wired — see scoring-rules.md).
271
+
272
+ **When this clause does NOT apply:** `full-library`, `specific-modules`, `public-api`, `component-library`, or `docs-only`. Those scope types have their own assembly semantics and export-count conventions — do not mix.
273
+
219
274
  ### Assembly Rules
220
275
 
221
276
  1. Assemble all Tier 1 sections first — these form the essential standalone body
@@ -250,6 +305,11 @@ These rules apply to all content assembled in SKILL.md and reference files.
250
305
  - **For flexible guidance** (reports, analysis): Provide a sensible default template with "Adjust sections as needed" language.
251
306
  - **Input/output examples:** When output quality depends on seeing examples and concrete pairs exist in source tests or official docs, include 2-3 input/output pairs sourced from those tests or docs. Examples help agents understand desired style and detail more clearly than descriptions alone. If no examples exist in source, note the gap rather than fabricating pairs — zero hallucination applies.
252
307
 
308
+ **Generic-plus-signature code spans:** When documenting a generic class constructor or factory signature, do NOT place the generic brackets and the parameter list inside a single inline code span. `skill-check`'s `links.local_markdown_resolves` validator parses `` `ClassName[T](key: str)` `` as a broken markdown link (`[T]` becomes the link text, `(key: str)` becomes the URL) and emits a `broken local link` warning on the Links axis, regardless of the surrounding backticks. This applies to Tier 1 Key Types, Tier 2 Full API Reference, and reference files. Safe alternatives:
309
+ - Split into two code spans: `` `ClassName[T]` — dataclass with fields `(key: str, value: int)` ``
310
+ - Drop the explicit constructor and describe fields in prose: `` `ClassName[T]` — generic container parameterized by `T`, with field `key: str` ``
311
+ - Use the curly-brace substitution used for frontmatter: `` `ClassName{T}(key: str)` `` (readable, avoids both markdown-link and angle-bracket parsing)
312
+
253
313
  **Workflow checklist pattern:** When a skill includes multi-step workflows, provide a copy-paste checklist that agents can track progress against:
254
314
  ```markdown
255
315
  Copy this checklist and track your progress:
@@ -28,18 +28,18 @@ SKILL.md uses a two-tier structure to ensure actionable content survives `split-
28
28
 
29
29
  #### Tier 1 — Always Inline (survives split-body, target <300 lines)
30
30
 
31
- | # | Section | Budget | Purpose |
32
- |---|---------|--------|---------|
33
- | 1 | **Overview** | ~10 lines | What the library does, source repo, version, tier, export count |
34
- | 2 | **Quick Start** | ~30 lines | 3-5 core functions with one runnable end-to-end example |
35
- | 3 | **Common Workflows** | ~30 lines | 4-5 typical function call sequences for common tasks |
36
- | 4 | **Key API Summary** | ~20 lines | Table of top 10-15 functions (name, purpose, key params) |
37
- | 4b | **Migration & Deprecation Warnings** | ~10 lines | T2-future warnings inline (Deep tier only, skip if none) |
38
- | 5 | **Key Types** | ~20 lines | Most important enum/type values inline |
39
- | 6 | **Architecture at a Glance** | ~10 lines | Bullet list of subsystem categories |
40
- | 7 | **CLI** | ~10 lines | Basic CLI commands (skip if no CLI) |
41
- | 7b | **Scripts & Assets** | ~10 lines | Manifest of included scripts and assets (skip if none detected) |
42
- | 8 | **Manual Sections** | ~5 lines | `<!-- [MANUAL] -->` markers for update-skill |
31
+ | # | Section | Budget | Purpose |
32
+ |----|--------------------------------------|-----------|-----------------------------------------------------------------|
33
+ | 1 | **Overview** | ~10 lines | What the library does, source repo, version, tier, export count |
34
+ | 2 | **Quick Start** | ~30 lines | 3-5 core functions with one runnable end-to-end example |
35
+ | 3 | **Common Workflows** | ~30 lines | 4-5 typical function call sequences for common tasks |
36
+ | 4 | **Key API Summary** | ~20 lines | Table of top 10-15 functions (name, purpose, key params) |
37
+ | 4b | **Migration & Deprecation Warnings** | ~10 lines | T2-future warnings inline (Deep tier only, skip if none) |
38
+ | 5 | **Key Types** | ~20 lines | Most important enum/type values inline |
39
+ | 6 | **Architecture at a Glance** | ~10 lines | Bullet list of subsystem categories |
40
+ | 7 | **CLI** | ~10 lines | Basic CLI commands (skip if no CLI) |
41
+ | 7b | **Scripts & Assets** | ~10 lines | Manifest of included scripts and assets (skip if none detected) |
42
+ | 8 | **Manual Sections** | ~5 lines | `<!-- [MANUAL] -->` markers for update-skill |
43
43
 
44
44
  #### Tier 2 — Reference-Eligible (extracted by split-body into references/)
45
45
 
@@ -137,12 +137,12 @@ When `scope.type: "component-library"`, these section formats replace their stan
137
137
 
138
138
  ### Provenance Citation Format
139
139
 
140
- | Tier | Format | Example |
141
- |------|--------|---------|
142
- | T1 (AST) | `[AST:{file}:L{line}]` | `[AST:src/auth/index.ts:L42]` |
143
- | T1-low (Source) | `[SRC:{file}:L{line}]` | `[SRC:src/auth/index.ts:L42]` |
144
- | T2 (QMD) | `[QMD:{collection}:{doc}]` | `[QMD:project:CHANGELOG.md]` |
145
- | T3 (External) | `[EXT:{url}]` | `[EXT:docs.example.com/api]` |
140
+ | Tier | Format | Example |
141
+ |-----------------|----------------------------|-------------------------------|
142
+ | T1 (AST) | `[AST:{file}:L{line}]` | `[AST:src/auth/index.ts:L42]` |
143
+ | T1-low (Source) | `[SRC:{file}:L{line}]` | `[SRC:src/auth/index.ts:L42]` |
144
+ | T2 (QMD) | `[QMD:{collection}:{doc}]` | `[QMD:project:CHANGELOG.md]` |
145
+ | T3 (External) | `[EXT:{url}]` | `[EXT:docs.example.com/api]` |
146
146
 
147
147
  ### [MANUAL] Section Markers
148
148
 
@@ -224,6 +224,7 @@ Indexed pipe-delimited format for CLAUDE.md managed section (~80-120 tokens per
224
224
  "total_coverage": 0.0,
225
225
  "scripts_count": 0,
226
226
  "assets_count": 0
227
+ // "effective_denominator": 0 // optional — emitted for stratified-scope monorepo packages; test-skill uses this as the coverage denominator when present. See step-05-compile.md §4 emit rules.
227
228
  },
228
229
  // scripts[] and assets[] — include ONLY when inventories are non-empty; omit entirely otherwise
229
230
  // "scripts": [{ "file": "scripts/{name}", "purpose": "{description}", "source_file": "{source-path}", "confidence": "T1-low" }],
@@ -262,15 +263,18 @@ Each reference file includes:
262
263
 
263
264
  ```json
264
265
  {
266
+ "provenance_version": "2.0",
265
267
  "skill_name": "{name}",
266
- "source_repo": "{url}",
267
- "source_commit": "{hash}",
268
+ "skill_type": "single|stack",
269
+ "source_repo": "{url or [urls] for multi-source}",
270
+ "source_commit": "{hash or {repo: hash} for multi-source}",
268
271
  "source_ref": "v0.5.0",
269
272
  "generated_at": "{ISO-8601}",
270
273
  "entries": [
271
274
  {
272
275
  "export_name": "getToken",
273
276
  "export_type": "function",
277
+ "source_library": "{library-name — defaults to skill name for single skills}",
274
278
  "params": ["userId: string", "options?: TokenOptions"],
275
279
  "return_type": "Token",
276
280
  "source_file": "src/auth/index.ts",
@@ -281,6 +285,24 @@ Each reference file includes:
281
285
  "signature_source": "T1"
282
286
  }
283
287
  ],
288
+ "integrations": [
289
+ {
290
+ "libraries": ["lib-a", "lib-b"],
291
+ "pattern_type": "provider-consumer",
292
+ "detection_method": "co-import grep|architecture_co_mention|inferred_from_shared_domain",
293
+ "co_import_files": [{"file": "src/app.ts", "line": 5}],
294
+ "confidence": "T1|T2|T3"
295
+ }
296
+ ],
297
+ "constituents": [
298
+ {
299
+ "skill_name": "{constituent-skill-name}",
300
+ "skill_path": "skills/{skill-dir}/",
301
+ "version": "{version at compose time}",
302
+ "composed_at": "{ISO-8601}",
303
+ "metadata_hash": "sha256:{hash of constituent metadata.json at compose time}"
304
+ }
305
+ ],
284
306
  "file_entries": [
285
307
  {
286
308
  "file_name": "scripts/{name}",
@@ -294,13 +316,40 @@ Each reference file includes:
294
316
  }
295
317
  ```
296
318
 
297
- `scripts` and `assets` arrays in metadata.json are optional — omit entirely (not empty arrays) when no scripts/assets exist. `file_entries` in provenance-map.json is optional omit when no scripts/assets exist.
319
+ - `provenance_version`: Schema version. `"2.0"` enables unified single/stack support. Audit reads both v1 (no version field) and v2.
320
+ - `source_library`: Identifies which library an export belongs to. For single skills, defaults to the skill/package name. For stack skills, identifies the constituent library.
321
+ - `integrations`: Stack-only. Describes cross-library integration patterns with their own schema — NOT shoehorned into entries.
322
+ - `constituents`: Stack-only (compose-mode). Tracks the compose-time snapshot of each source skill for staleness detection. `metadata_hash` enables audit to detect constituent drift without re-reading all constituent files.
323
+ - `file_entries` remains optional — omit when no scripts, assets, or promoted docs exist.
324
+ - Single skills omit `integrations` and `constituents` arrays entirely (not empty arrays).
325
+
326
+ **`file_type` enum — canonical values:**
327
+
328
+ | Value | Source inventory | Copied to skill package? | `extraction_method` | Purpose |
329
+ |---|---|---|---|---|
330
+ | `"script"` | `scripts_inventory` | yes → `scripts/` | `"file-copy"` | Runnable scripts (CLI tools, validation scripts, etc.) bundled into the skill for execution. |
331
+ | `"asset"` | `assets_inventory` | yes → `assets/` | `"file-copy"` | Data files (templates, JSON schemas, config fixtures) bundled for reference. |
332
+ | `"doc"` | `promoted_docs` (from step-03 §2a) | **no** | `"promoted-authoritative"` | Authoritative AI documentation files (`llms.txt`, `AGENTS.md`, etc.) promoted into scope by the Discovered Authoritative Files Protocol. The source file is tracked for drift detection but not bundled into the skill — its content influences compile-time decisions (description, Quick Start) and is watched for upstream changes. |
333
+
334
+ When `file_type: "doc"`:
335
+
336
+ - `source_file` is the relative path from the source root to the authoritative doc.
337
+ - `content_hash` is computed at promotion time (step-03 §2a) and persisted here so update-skill Category D can detect drift via hash comparison.
338
+ - `file_name` convention: use the source-relative path prefixed with `docs/authoritative/` to namespace doc entries away from script/asset filenames in tools that iterate `file_entries[]` by `file_name`. Example: `docs/authoritative/apps/docs/public/llms.txt`. Step-07 does not write this path — it is a synthetic namespace used only within the provenance map.
339
+ - `confidence` is `"T1-low"` (the promotion decision is source-level but the content was not AST-parsed).
298
340
 
299
341
  ---
300
342
 
301
343
  ## evidence-report.md Structure
302
344
 
303
345
  ```markdown
346
+ ---
347
+ skill_name: {skill-name}
348
+ generated: {date}
349
+ forge_tier: {tier}
350
+ t2_future_count: {N}
351
+ ---
352
+
304
353
  # Evidence Report: {skill-name}
305
354
 
306
355
  **Generated:** {date}
@@ -318,9 +367,29 @@ Each reference file includes:
318
367
  - Confidence: T1={n}, T1-low={n}, T2={n}, T3={n}
319
368
 
320
369
  ## Validation Results
321
- - Schema: {pass/fail}
370
+ - Schema: {pass/fail} (quality score: {score}/100)
322
371
  - Frontmatter: {pass/fail}
372
+ - Body: {pass/fail} {split-body applied if applicable}
373
+ - Security: {pass/warn/skipped}
374
+ - Content Quality (tessl): {pass/warn/skipped} (score: {score}%)
375
+ - Metadata: {pass/fail}
376
+
377
+ ## Quality Score Breakdown
378
+ - Frontmatter (30%): {score} | Description (30%): {score} | Body (20%): {score} | Links (10%): {score} | File (10%): {score}
323
379
 
324
- ## Warnings
380
+ ## Description Guard
381
+ - Restored: {true/false}
382
+ - Triggering tool: {tool_name or —}
383
+ - Original description preserved: {true/false}
384
+ - Notes: {one-sentence detail or —}
385
+
386
+ ## Auto-Fixed Issues
387
+ - {list of issues automatically corrected by --fix}
388
+
389
+ ## Remaining Warnings
325
390
  - {any warnings from extraction or validation}
326
391
  ```
392
+
393
+ **Frontmatter — pinned detection contract:** the `t2_future_count` field is the authoritative forward-looking-annotation count for downstream gate checks (e.g. skf-test-skill §2b migration-section rule). Emit **always**, even when 0 — omission is indistinguishable from "no T2-future data" and silently flips the gate into Case 2/3 for a Case-1 skill. `generated` and `forge_tier` mirror the narrative header for consumers that read only the frontmatter. Downstream gate rules MUST parse `t2_future_count` from frontmatter, not grep prose — prose drift (heading renames, alternate phrasings like "forward-looking annotations") silently breaks the detection.
394
+
395
+ **Description Guard slot:** populated by step-06 §0 (create-skill) and §0 (update-skill) when the guard protocol fires. `Restored: true` indicates that an external tool (typically `skill-check --fix` or `split-body`) rewrote the frontmatter `description` and the guard restored the pre-tool value. When `Restored: false`, leave `Triggering tool`, `Original description preserved`, and `Notes` as `—`. When `Restored: true`, fill all four fields: tool name, whether the original was successfully written back, and a one-sentence note describing what the tool had changed (e.g., "replaced with generic summary", "truncated at 80 chars", "angle-bracket tokens re-introduced"). Downstream test-skill assertions can grep for `Restored: true` to detect unintended tool rewrites without parsing free-form warning prose.
@@ -0,0 +1,102 @@
1
+ # tessl Dismissal Rules
2
+
3
+ This file is the **single source of truth** for tessl review findings that Skill Forge expects and must dismiss. Step-06 §6 loads this file, parses the `tessl skill review` JSON output, and cross-references each finding against the rules below. Matches are dismissed with their rationale logged to the evidence report; non-matches surface to the user via §6b.
4
+
5
+ **Why this file exists:** Previously, expected tessl behavior was enumerated as prose in step-06 itself. Each time tessl evolved a scorer or added a new rule, step-06 had to be manually patched and the prose re-read by every execution. This file moves the expected behavior into a structured list with stable rule IDs, rationales, and match criteria — one place to update when tessl changes, one place to audit what SKF expects.
6
+
7
+ ---
8
+
9
+ ## Score Thresholds
10
+
11
+ When parsing tessl output, check these fields against the thresholds below. Violations trigger warnings or errors as specified.
12
+
13
+ | Field | Threshold | Severity on violation | Rationale |
14
+ |---|---|---|---|
15
+ | `review_score` (overall) | `>= 60` | warn | Two-tier SKF skills trade some conciseness score for progressive disclosure. 60 is the floor below which something is genuinely wrong. |
16
+ | `description_score` | `== 100` | **error — recover, then halt** | step-05 §2a unconditionally replaces `<` with `{` and `>` with `}` in the frontmatter description before validation. A score below 100 indicates the sanitizer was bypassed (downstream tool rewrote the description) or a novel tessl rule. Attempt recovery per rule `description-xml-tags-guarded-upstream` (re-apply the §2a substitution in place on the staging SKILL.md frontmatter and re-run tessl). Halt only if recovery fails. |
17
+ | `content_score` | `>= 60` | warn | Two-tier design deliberately duplicates key API data across Tier 1 and Tier 2. Conciseness scorer penalizes this. 60 is the acceptable floor. |
18
+
19
+ If `description_score < 100`, **attempt recovery first** per rule `description-xml-tags-guarded-upstream` below: re-apply step-05 §2a's `<` → `{` / `>` → `}` substitution in place on the staging SKILL.md frontmatter `description`, then re-run `npx -y tessl skill review <staging-skill-dir>` once. If the re-run produces `description_score == 100`, log `description-recovery: applied ({count} substitutions)` in the evidence report and proceed to normal suggestion handling. If recovery fails, halt with: "Description sanitization recovery failed — step-05 §2a's `<`/`>` → `{`/`}` replacement did not resolve the tessl finding. Investigate the staging SKILL.md frontmatter for non-angle-bracket content that tessl is still rejecting, and patch §2a accordingly. Do not edit the description manually." Do NOT proceed to §6b user prompt on an unrecovered failure.
20
+
21
+ ---
22
+
23
+ ## Suggestion Dismissal Rules
24
+
25
+ Each rule below describes a tessl suggestion that Skill Forge expects and dismisses automatically. For each `judge_suggestion` in tessl output, check it against these rules in order. If any rule matches, record the dismissal in the evidence report (`rule_id`, `rationale`) and do NOT apply the suggestion. If no rule matches, the suggestion is novel and must surface to the user in §6b.
26
+
27
+ ### Rule: `remove-manual-markers`
28
+
29
+ - **Scorer:** any
30
+ - **Match criteria (any of):**
31
+ - Suggestion text contains `[MANUAL]` AND one of: `remove`, `delete`, `strip`, `clean up`
32
+ - Suggestion text contains `manual marker` AND one of: `remove`, `delete`, `unnecessary`
33
+ - **Rationale:** `<!-- [MANUAL] -->` markers delineate author-added content that `skf-update-skill` preserves during merge operations. Removing them would cause update-skill to overwrite author edits on the next run. The markers are a load-bearing contract between create-skill, test-skill, and update-skill.
34
+ - **Action:** dismiss.
35
+
36
+ ### Rule: `move-full-api-reference`
37
+
38
+ - **Scorer:** any
39
+ - **Match criteria (all of):**
40
+ - Suggestion text mentions `Full API Reference` OR a `## Full ...` section heading
41
+ - Suggestion text contains one of: `move`, `relocate`, `extract`, `split out`, `separate file`, `external file`
42
+ - **Rationale:** The two-tier design (Tier 1 inline + Tier 2 inline) keeps Tier 2 sections inline by default. `skill-check split-body` relocates Tier 2 to `references/` only when the body exceeds size limits — see step-06 §4. Preemptive relocation destroys the standalone SKILL.md that the cited 100% task accuracy (vs. 79% for on-demand retrieval) depends on.
43
+ - **Action:** dismiss.
44
+
45
+ ### Rule: `consolidate-duplicate-parameters`
46
+
47
+ - **Scorer:** `conciseness` or any
48
+ - **Match criteria (any of):**
49
+ - Suggestion mentions `duplicate parameter`, `redundant parameter`, `consolidate parameter`
50
+ - Suggestion mentions both `Key API` / `Key API Summary` AND `Full API Reference` and suggests merging them
51
+ - **Rationale:** Tier 1 Key API Summary intentionally lists only key parameters for standalone discoverability. Tier 2 Full API Reference provides complete parameter tables, types, defaults, and edge cases. This is progressive disclosure, not duplication. Consolidating would force agents to scroll to Tier 2 for the most common function calls, defeating Tier 1's purpose and breaking the split-body Tier 1 preservation contract in step-06 §4.
52
+ - **Action:** dismiss.
53
+
54
+ ### Rule: `conciseness-redundancy-between-tiers`
55
+
56
+ - **Scorer:** `conciseness`
57
+ - **Match criteria (all of):**
58
+ - Scorer is `conciseness`
59
+ - Suggestion or score rationale references redundancy between Tier 1 and Tier 2 sections (typically `Key API` ↔ `Full API` or `Quick Start` ↔ `Full Reference`)
60
+ - **Expected score:** 2/3 is normal. 3/3 is only achievable by collapsing the two-tier design.
61
+ - **Rationale:** Progressive disclosure is the intentional SKF design. The conciseness scorer has no concept of Tier 1 / Tier 2 and flags the structure as redundancy. Collapsing the two tiers would eliminate standalone discoverability and break split-body behavior.
62
+ - **Action:** dismiss. Do not attempt to raise the score above 2/3.
63
+
64
+ ### Rule: `description-xml-tags-guarded-upstream`
65
+
66
+ - **Scorer:** `description_field` (deterministic validator)
67
+ - **Match criteria (any of):**
68
+ - Finding rule ID is `description_field` AND message mentions `XML tag`, `must not contain`, or angle-bracket-related text
69
+ - **Expected occurrence:** zero. step-05 §2a unconditionally replaces `<` with `{` and `>` with `}` in the frontmatter description before SKILL.md is written.
70
+ - **Action:** **Attempt recovery, then halt if recovery fails.** This is not a dismissal — the finding represents a real sanitizer bypass that step-06 must resolve before proceeding.
71
+ 1. **Re-apply §2a in place.** Read the current `description` from the on-disk staging SKILL.md frontmatter, replace every `<` with `{` and every `>` with `}`, and write the result back to the frontmatter. Re-sync the in-context copy to match. Count the substitutions; if zero, the description is already clean and the tessl finding points at something other than angle brackets — skip to the halt branch below.
72
+ 2. **Re-run tessl once.** Execute `npx -y tessl skill review <staging-skill-dir>` a second time and re-parse the JSON output.
73
+ 3. **On success** (`description_score == 100`): log `description-recovery: applied ({count} substitutions)` in the evidence report under "Dismissed tessl suggestions", then continue §6 with the recovered review result (proceed to normal suggestion handling against the rules below). The rerun's `judge_suggestions[]` replaces the original.
74
+ 4. **On failure** (`description_score` still < 100 after re-sanitization): halt with: "Description sanitization recovery failed — step-05 §2a's `<`/`>` → `{`/`}` replacement did not resolve the tessl finding. Investigate the staging SKILL.md frontmatter for non-angle-bracket content that tessl is still rejecting, and patch §2a accordingly. Do not edit the description manually."
75
+
76
+ The recovery path makes the skill shippable when a downstream tool (`skill-check --fix`, `split-body`, or a future validator) re-introduces angle brackets into the description after §2a has run. The Description Guard Protocol in step-06 §0 is the first line of defense against such rewrites; this rule is the second line, active when the guard also missed.
77
+
78
+ ---
79
+
80
+ ## How Step-06 §6 Uses This File
81
+
82
+ 1. Load this file completely at the start of §6.
83
+ 2. Run `npx -y tessl skill review <staging-skill-dir>` and parse JSON output.
84
+ 3. Check score thresholds. For `description_score < 100`: follow the recovery-then-halt path described in the threshold table above and the `description-xml-tags-guarded-upstream` rule below — re-apply §2a in place, re-run tessl once, and continue on recovery success or halt on recovery failure. For other warns: continue, log warnings to evidence report.
85
+ 4. For each `judge_suggestions[]` entry in the output:
86
+ a. Iterate the rules above in order.
87
+ b. If a rule's match criteria are satisfied, record `{rule_id, rationale, suggestion_text}` in the evidence report under "Dismissed tessl suggestions" and move to the next suggestion.
88
+ c. If no rule matches, add the suggestion to the "Novel tessl suggestions" list that §6b surfaces to the user.
89
+ 5. Proceed to §6b if any novel suggestions exist, or auto-proceed if all suggestions were dismissed.
90
+
91
+ ---
92
+
93
+ ## Evolving This List
94
+
95
+ When tessl introduces new rules, changes scorer behavior, or SKF design decisions change:
96
+
97
+ 1. **Add a new rule section** above with `Rule:`, `Scorer:`, `Match criteria`, `Rationale`, `Action`.
98
+ 2. **Link the rationale** to the concrete SKF design principle it protects (two-tier design, MANUAL markers, sanitization, split-body preservation, etc.). A rationale without a design-principle link is a smell.
99
+ 3. **Keep score thresholds above current production floors.** Do not lower them to suppress real regressions.
100
+ 4. **Never embed dismissal logic in step files.** If step-06 needs updated behavior, update this file first and reference it from step-06.
101
+
102
+ This file is load-bearing: step-06 §6 has no other source of truth for expected tessl behavior.
@@ -57,23 +57,23 @@ Scripts and assets are file-level artifacts, not code exports. They follow the *
57
57
 
58
58
  **Script file signals:**
59
59
 
60
- | Signal | Strength | Pattern |
61
- |--------|----------|---------|
62
- | Entry point declaration | Strong | `package.json` `bin` field, Cargo.toml `[[bin]]`, pyproject.toml `[project.scripts]` |
63
- | Shebang + executable | Strong | `#!/bin/bash`, `#!/usr/bin/env python`, `#!/usr/bin/env node` |
64
- | CLI argument parser | Moderate | `argparse`, `yargs`, `commander`, `cobra`, `clap` imports in file |
65
- | Directory convention | Moderate | File in `scripts/`, `bin/`, `tools/` directory |
66
- | CI/CD reference | Moderate | Script referenced in `.github/workflows/*.yml` |
60
+ | Signal | Strength | Pattern |
61
+ |-------------------------|----------|--------------------------------------------------------------------------------------|
62
+ | Entry point declaration | Strong | `package.json` `bin` field, Cargo.toml `[[bin]]`, pyproject.toml `[project.scripts]` |
63
+ | Shebang + executable | Strong | `#!/bin/bash`, `#!/usr/bin/env python`, `#!/usr/bin/env node` |
64
+ | CLI argument parser | Moderate | `argparse`, `yargs`, `commander`, `cobra`, `clap` imports in file |
65
+ | Directory convention | Moderate | File in `scripts/`, `bin/`, `tools/` directory |
66
+ | CI/CD reference | Moderate | Script referenced in `.github/workflows/*.yml` |
67
67
 
68
68
  **Asset file signals:**
69
69
 
70
- | Signal | Strength | Pattern |
71
- |--------|----------|---------|
72
- | JSON Schema | Strong | `*.schema.json`, file contains `"$schema"` key |
73
- | Config template | Strong | `*.example`, `*.template.*`, `*.sample` extension |
70
+ | Signal | Strength | Pattern |
71
+ |------------------|----------|-----------------------------------------------------|
72
+ | JSON Schema | Strong | `*.schema.json`, file contains `"$schema"` key |
73
+ | Config template | Strong | `*.example`, `*.template.*`, `*.sample` extension |
74
74
  | Official example | Moderate | File in `examples/` directory, referenced in README |
75
- | OpenAPI/GraphQL | Moderate | `openapi.json`, `*.graphql`, `swagger.yaml` |
76
- | Design tokens | Weak | `tokens.json`, `theme.json` in `assets/` |
75
+ | OpenAPI/GraphQL | Moderate | `openapi.json`, `*.graphql`, `swagger.yaml` |
76
+ | Design tokens | Weak | `tokens.json`, `theme.json` in `assets/` |
77
77
 
78
78
  ### Inclusion Rules
79
79