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.
- package/.claude-plugin/marketplace.json +39 -0
- package/.gitattributes +16 -0
- package/README.md +105 -38
- package/docs/404.md +13 -10
- package/docs/RELEASING.md +185 -0
- package/docs/STABILITY.md +123 -0
- package/docs/_data/pinned.yaml +98 -0
- package/docs/agents.md +16 -11
- package/docs/architecture.md +221 -0
- package/docs/bmad-synergy.md +11 -13
- package/docs/concepts.md +18 -108
- package/docs/examples.md +121 -80
- package/docs/getting-started.md +85 -147
- package/docs/how-it-works.md +25 -536
- package/docs/index.md +44 -27
- package/docs/skill-model.md +328 -0
- package/docs/troubleshooting.md +39 -0
- package/docs/verifying-a-skill.md +232 -0
- package/docs/why-skf.md +93 -0
- package/docs/workflows.md +119 -13
- package/package.json +25 -4
- package/src/README.md +23 -25
- package/src/forger/forge-tier.yaml +4 -2
- package/src/forger/preferences.yaml +7 -1
- package/src/knowledge/agentskills-spec.md +1 -1
- package/src/knowledge/architecture-verification.md +1 -1
- package/src/knowledge/ccc-bridge.md +16 -15
- package/src/knowledge/overview.md +11 -11
- package/src/knowledge/progressive-capability.md +3 -3
- package/src/knowledge/provenance-tracking.md +9 -3
- package/src/knowledge/qmd-registry.md +8 -8
- package/src/knowledge/skf-knowledge-index.csv +2 -2
- package/src/knowledge/skill-lifecycle.md +16 -1
- package/src/knowledge/split-body-strategy.md +1 -1
- package/src/knowledge/version-paths.md +17 -12
- package/src/module-help.csv +18 -17
- package/src/module.yaml +4 -0
- package/src/shared/health-check.md +372 -0
- package/src/shared/references/feasibility-report-schema.md +86 -0
- package/src/shared/references/headless-gate-convention.md +62 -0
- package/src/shared/references/output-contract-schema.md +35 -0
- package/src/shared/references/pipeline-contracts.md +102 -0
- package/src/shared/scripts/skf-atomic-write.py +370 -0
- package/src/shared/scripts/skf-manifest-ops.py +236 -0
- package/src/shared/scripts/skf-preflight.py +164 -0
- package/src/shared/scripts/skf-rebuild-managed-sections.py +201 -0
- package/src/shared/scripts/skf-severity-classify.py +163 -0
- package/src/shared/scripts/skf-skill-inventory.py +210 -0
- package/src/shared/scripts/skf-structural-diff.py +257 -0
- package/src/shared/scripts/skf-validate-frontmatter.py +318 -0
- package/src/shared/scripts/skf-validate-output.py +247 -0
- package/src/skf-analyze-source/SKILL.md +57 -0
- package/src/skf-analyze-source/assets/skill-brief-schema.md +125 -0
- package/src/skf-analyze-source/references/unit-detection-heuristics.md +124 -0
- package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-01-init.md +6 -66
- package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-01b-continue.md +4 -59
- package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-02-scan-project.md +7 -68
- package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-03-identify-units.md +6 -66
- package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-04-map-and-detect.md +7 -68
- package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-05-recommend.md +6 -66
- package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-06-generate-briefs.md +14 -66
- package/src/skf-analyze-source/steps-c/step-07-health-check.md +22 -0
- package/src/skf-audit-skill/SKILL.md +59 -0
- package/src/{workflows/audit-skill/data → skf-audit-skill/assets}/drift-report-template.md +7 -7
- package/src/{workflows/audit-skill/data → skf-audit-skill/references}/severity-rules.md +11 -11
- package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-01-init.md +24 -68
- package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-02-re-index.md +36 -71
- package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-03-structural-diff.md +21 -63
- package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-04-semantic-diff.md +6 -65
- package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-05-severity-classify.md +5 -63
- package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-06-report.md +10 -59
- package/src/skf-audit-skill/steps-c/step-07-health-check.md +22 -0
- package/src/skf-brief-skill/SKILL.md +53 -0
- package/src/{workflows/brief-skill/data → skf-brief-skill/assets}/scope-templates.md +23 -0
- package/src/skf-brief-skill/assets/skill-brief-schema.md +206 -0
- package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-01-gather-intent.md +6 -67
- package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-02-analyze-target.md +6 -66
- package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-03-scope-definition.md +12 -68
- package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-04-confirm-brief.md +5 -63
- package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-05-write-brief.md +10 -69
- package/src/skf-brief-skill/steps-c/step-06-health-check.md +22 -0
- package/src/skf-create-skill/SKILL.md +63 -0
- package/src/{workflows/create-skill/data → skf-create-skill/assets}/compile-assembly-rules.md +60 -0
- package/src/{workflows/create-skill/data → skf-create-skill/assets}/skill-sections.md +92 -23
- package/src/skf-create-skill/assets/tessl-dismissal-rules.md +102 -0
- package/src/{workflows/create-skill/data → skf-create-skill/references}/extraction-patterns-tracing.md +13 -13
- package/src/{workflows/create-skill/data → skf-create-skill/references}/extraction-patterns.md +8 -3
- package/src/skf-create-skill/references/source-resolution-protocols.md +239 -0
- package/src/{workflows/create-skill/data → skf-create-skill/references}/tier-degradation-rules.md +8 -7
- package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-01-load-brief.md +25 -63
- package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-02-ecosystem-check.md +8 -64
- package/src/skf-create-skill/steps-c/step-03-extract.md +379 -0
- package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-03d-component-extraction.md +18 -35
- package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-04-enrich.md +12 -69
- package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-05-compile.md +71 -75
- package/src/skf-create-skill/steps-c/step-06-validate.md +267 -0
- package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-07-generate-artifacts.md +30 -74
- package/src/skf-create-skill/steps-c/step-08-report.md +145 -0
- package/src/skf-create-skill/steps-c/step-09-health-check.md +23 -0
- package/src/{workflows/create-skill/steps-c → skf-create-skill/steps-c/sub}/step-02b-ccc-discover.md +8 -66
- package/src/skf-create-skill/steps-c/sub/step-03b-fetch-temporal.md +229 -0
- package/src/{workflows/create-skill/steps-c → skf-create-skill/steps-c/sub}/step-03c-fetch-docs.md +18 -42
- package/src/skf-create-stack-skill/SKILL.md +64 -0
- package/src/{workflows/create-stack-skill/data → skf-create-stack-skill/assets}/stack-skill-template.md +2 -1
- package/src/{workflows/create-stack-skill/data → skf-create-stack-skill/references}/compose-mode-rules.md +19 -5
- package/src/{workflows/create-stack-skill/data → skf-create-stack-skill/references}/integration-patterns.md +1 -1
- package/src/{workflows/create-stack-skill/data → skf-create-stack-skill/references}/manifest-patterns.md +10 -10
- package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-01-init.md +14 -55
- package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-02-detect-manifests.md +29 -63
- package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-03-rank-and-confirm.md +9 -59
- package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-04-parallel-extract.md +29 -64
- package/src/skf-create-stack-skill/steps-c/step-05-detect-integrations.md +164 -0
- package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-06-compile-stack.md +7 -60
- package/src/skf-create-stack-skill/steps-c/step-07-generate-output.md +328 -0
- package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-08-validate.md +17 -63
- package/src/skf-create-stack-skill/steps-c/step-09-report.md +128 -0
- package/src/skf-create-stack-skill/steps-c/step-10-health-check.md +22 -0
- package/src/skf-drop-skill/SKILL.md +57 -0
- package/src/{workflows/drop-skill → skf-drop-skill}/steps-c/step-01-select.md +9 -69
- package/src/{workflows/drop-skill → skf-drop-skill}/steps-c/step-02-execute.md +30 -106
- package/src/skf-drop-skill/steps-c/step-03-report.md +83 -0
- package/src/skf-drop-skill/steps-c/step-04-health-check.md +22 -0
- package/src/skf-export-skill/SKILL.md +57 -0
- package/src/skf-export-skill/assets/managed-section-format.md +138 -0
- package/src/{workflows/export-skill/data → skf-export-skill/assets}/snippet-format.md +8 -12
- package/src/skf-export-skill/steps-c/step-01-load-skill.md +247 -0
- package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-02-package.md +5 -58
- package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-03-generate-snippet.md +15 -77
- package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-04-update-context.md +59 -133
- package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-05-token-report.md +4 -58
- package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-06-summary.md +20 -64
- package/src/skf-export-skill/steps-c/step-07-health-check.md +22 -0
- package/src/skf-forger/SKILL.md +110 -0
- package/src/skf-forger/bmad-skill-manifest.yaml +11 -0
- package/src/skf-quick-skill/SKILL.md +56 -0
- package/src/{workflows/quick-skill/data → skf-quick-skill/references}/registry-resolution.md +6 -6
- package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-01-resolve-target.md +9 -62
- package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-02-ecosystem-check.md +5 -59
- package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-03-quick-extract.md +18 -61
- package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-04-compile.md +6 -60
- package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-05-validate.md +58 -78
- package/src/skf-quick-skill/steps-c/step-06-write.md +73 -0
- package/src/skf-quick-skill/steps-c/step-07-health-check.md +22 -0
- package/src/skf-refine-architecture/SKILL.md +57 -0
- package/src/{workflows/refine-architecture/data → skf-refine-architecture/references}/refinement-rules.md +16 -16
- package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-01-init.md +6 -63
- package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-02-gap-analysis.md +29 -71
- package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-03-issue-detection.md +5 -65
- package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-04-improvements.md +5 -64
- package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-05-compile.md +5 -56
- package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-06-report.md +14 -64
- package/src/skf-refine-architecture/steps-c/step-07-health-check.md +22 -0
- package/src/skf-rename-skill/SKILL.md +58 -0
- package/src/{workflows/rename-skill → skf-rename-skill}/steps-c/step-01-select.md +12 -73
- package/src/{workflows/rename-skill → skf-rename-skill}/steps-c/step-02-execute.md +32 -113
- package/src/skf-rename-skill/steps-c/step-03-report.md +83 -0
- package/src/skf-rename-skill/steps-c/step-04-health-check.md +22 -0
- package/src/skf-setup/SKILL.md +55 -0
- package/src/{workflows/setup-forge → skf-setup}/steps-c/step-01-detect-and-tier.md +6 -62
- package/src/{workflows/setup-forge → skf-setup}/steps-c/step-01b-ccc-index.md +9 -65
- package/src/{workflows/setup-forge → skf-setup}/steps-c/step-02-write-config.md +15 -60
- package/src/{workflows/setup-forge → skf-setup}/steps-c/step-03-auto-index.md +7 -66
- package/src/skf-setup/steps-c/step-04-report.md +92 -0
- package/src/skf-setup/steps-c/step-05-health-check.md +22 -0
- package/src/skf-test-skill/SKILL.md +59 -0
- package/src/skf-test-skill/references/migration-section-rules.md +114 -0
- package/src/skf-test-skill/references/scoring-rules.md +207 -0
- package/src/skf-test-skill/references/source-access-protocol.md +109 -0
- package/src/skf-test-skill/scripts/compute-score.py +310 -0
- package/src/skf-test-skill/steps-c/step-01-init.md +238 -0
- package/src/{workflows/test-skill → skf-test-skill}/steps-c/step-02-detect-mode.md +4 -62
- package/src/skf-test-skill/steps-c/step-03-coverage-check.md +347 -0
- package/src/skf-test-skill/steps-c/step-04-coherence-check.md +239 -0
- package/src/{workflows/test-skill → skf-test-skill}/steps-c/step-04b-external-validators.md +42 -77
- package/src/skf-test-skill/steps-c/step-05-score.md +266 -0
- package/src/skf-test-skill/steps-c/step-06-report.md +290 -0
- package/src/skf-test-skill/steps-c/step-07-health-check.md +25 -0
- package/src/skf-test-skill/templates/test-report-template.md +58 -0
- package/src/skf-update-skill/SKILL.md +58 -0
- package/src/{workflows/update-skill/data → skf-update-skill/references}/manual-section-rules.md +6 -6
- package/src/{workflows/update-skill/data → skf-update-skill/references}/merge-conflict-rules.md +5 -5
- package/src/skf-update-skill/references/remote-source-resolution.md +94 -0
- package/src/{workflows/update-skill → skf-update-skill}/steps-c/step-01-init.md +22 -69
- package/src/skf-update-skill/steps-c/step-02-detect-changes.md +255 -0
- package/src/skf-update-skill/steps-c/step-03-re-extract.md +336 -0
- package/src/{workflows/update-skill → skf-update-skill}/steps-c/step-04-merge.md +60 -72
- package/src/{workflows/update-skill → skf-update-skill}/steps-c/step-05-validate.md +5 -62
- package/src/skf-update-skill/steps-c/step-06-write.md +278 -0
- package/src/{workflows/update-skill → skf-update-skill}/steps-c/step-07-report.md +11 -66
- package/src/skf-update-skill/steps-c/step-08-health-check.md +22 -0
- package/src/skf-verify-stack/SKILL.md +60 -0
- package/src/skf-verify-stack/assets/feasibility-report-template.md +76 -0
- package/src/{workflows/verify-stack/data → skf-verify-stack/references}/coverage-patterns.md +12 -4
- package/src/skf-verify-stack/references/integration-verification-rules.md +78 -0
- package/src/skf-verify-stack/steps-c/step-01-init.md +178 -0
- package/src/{workflows/verify-stack → skf-verify-stack}/steps-c/step-02-coverage.md +27 -72
- package/src/skf-verify-stack/steps-c/step-03-integrations.md +179 -0
- package/src/{workflows/verify-stack → skf-verify-stack}/steps-c/step-04-requirements.md +14 -67
- package/src/skf-verify-stack/steps-c/step-05-synthesize.md +147 -0
- package/src/skf-verify-stack/steps-c/step-06-report.md +156 -0
- package/src/skf-verify-stack/steps-c/step-07-health-check.md +25 -0
- package/tools/cli/commands/install.js +1 -1
- package/tools/cli/commands/status.js +21 -23
- package/tools/cli/commands/uninstall.js +11 -19
- package/tools/cli/commands/update.js +2 -2
- package/tools/cli/lib/ide-skills.js +216 -0
- package/tools/cli/lib/installer.js +29 -52
- package/tools/cli/lib/manifest.js +11 -5
- package/tools/cli/lib/platform-codes.yaml +223 -0
- package/tools/cli/lib/ui.js +76 -47
- package/tools/validate-docs-drift.js +193 -0
- package/src/agents/forger.agent.yaml +0 -114
- package/src/workflows/README.md +0 -174
- package/src/workflows/analyze-source/data/skill-brief-schema.md +0 -125
- package/src/workflows/analyze-source/data/unit-detection-heuristics.md +0 -124
- package/src/workflows/analyze-source/workflow.md +0 -61
- package/src/workflows/audit-skill/workflow.md +0 -64
- package/src/workflows/brief-skill/data/skill-brief-schema.md +0 -159
- package/src/workflows/brief-skill/workflow.md +0 -58
- package/src/workflows/create-skill/data/source-resolution-protocols.md +0 -200
- package/src/workflows/create-skill/steps-c/step-03-extract.md +0 -301
- package/src/workflows/create-skill/steps-c/step-03b-fetch-temporal.md +0 -253
- package/src/workflows/create-skill/steps-c/step-06-validate.md +0 -254
- package/src/workflows/create-skill/steps-c/step-08-report.md +0 -176
- package/src/workflows/create-skill/workflow.md +0 -53
- package/src/workflows/create-stack-skill/steps-c/step-05-detect-integrations.md +0 -196
- package/src/workflows/create-stack-skill/steps-c/step-07-generate-output.md +0 -270
- package/src/workflows/create-stack-skill/steps-c/step-09-report.md +0 -145
- package/src/workflows/create-stack-skill/workflow.md +0 -59
- package/src/workflows/drop-skill/steps-c/step-03-report.md +0 -135
- package/src/workflows/drop-skill/workflow.md +0 -63
- package/src/workflows/export-skill/data/managed-section-format.md +0 -103
- package/src/workflows/export-skill/steps-c/step-01-load-skill.md +0 -237
- package/src/workflows/export-skill/workflow.md +0 -58
- package/src/workflows/quick-skill/steps-c/step-06-write.md +0 -179
- package/src/workflows/quick-skill/workflow.md +0 -58
- package/src/workflows/refine-architecture/workflow.md +0 -61
- package/src/workflows/rename-skill/steps-c/step-03-report.md +0 -132
- package/src/workflows/rename-skill/workflow.md +0 -64
- package/src/workflows/setup-forge/steps-c/step-04-report.md +0 -156
- package/src/workflows/setup-forge/workflow.md +0 -51
- package/src/workflows/test-skill/data/scoring-rules.md +0 -123
- package/src/workflows/test-skill/data/source-access-protocol.md +0 -51
- package/src/workflows/test-skill/steps-c/step-01-init.md +0 -217
- package/src/workflows/test-skill/steps-c/step-03-coverage-check.md +0 -280
- package/src/workflows/test-skill/steps-c/step-04-coherence-check.md +0 -271
- package/src/workflows/test-skill/steps-c/step-05-score.md +0 -222
- package/src/workflows/test-skill/steps-c/step-06-report.md +0 -207
- package/src/workflows/test-skill/templates/test-report-template.md +0 -28
- package/src/workflows/test-skill/workflow.md +0 -57
- package/src/workflows/update-skill/data/remote-source-resolution.md +0 -57
- package/src/workflows/update-skill/steps-c/step-02-detect-changes.md +0 -221
- package/src/workflows/update-skill/steps-c/step-03-re-extract.md +0 -256
- package/src/workflows/update-skill/steps-c/step-06-write.md +0 -265
- package/src/workflows/update-skill/workflow.md +0 -56
- package/src/workflows/verify-stack/data/feasibility-report-template.md +0 -63
- package/src/workflows/verify-stack/data/integration-verification-rules.md +0 -73
- package/src/workflows/verify-stack/steps-c/step-01-init.md +0 -179
- package/src/workflows/verify-stack/steps-c/step-03-integrations.md +0 -195
- package/src/workflows/verify-stack/steps-c/step-05-synthesize.md +0 -191
- package/src/workflows/verify-stack/steps-c/step-06-report.md +0 -197
- package/src/workflows/verify-stack/workflow.md +0 -61
- package/tools/cli/lib/compiler.js +0 -306
- package/tools/cli/lib/ide-commands.js +0 -244
- /package/src/{workflows/analyze-source → skf-analyze-source}/templates/analysis-report-template.md +0 -0
- /package/src/{workflows/quick-skill/data → skf-quick-skill/assets}/skill-template.md +0 -0
- /package/src/{workflows/setup-forge/data → skf-setup/references}/tier-rules.md +0 -0
- /package/src/{workflows/test-skill/data → skf-test-skill/assets}/output-section-formats.md +0 -0
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
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.
|
|
186
|
+
### 7. Chain to Health Check
|
|
220
187
|
|
|
221
|
-
|
|
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
|
|
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.
|
package/src/{workflows/create-skill/data → skf-create-skill/assets}/compile-assembly-rules.md
RENAMED
|
@@ -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
|
-
| #
|
|
32
|
-
|
|
33
|
-
| 1
|
|
34
|
-
| 2
|
|
35
|
-
| 3
|
|
36
|
-
| 4
|
|
37
|
-
| 4b | **Migration & Deprecation Warnings** | ~10 lines | T2-future warnings inline (Deep tier only, skip if none)
|
|
38
|
-
| 5
|
|
39
|
-
| 6
|
|
40
|
-
| 7
|
|
41
|
-
| 7b | **Scripts & Assets**
|
|
42
|
-
| 8
|
|
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
|
|
141
|
-
|
|
142
|
-
| T1 (AST)
|
|
143
|
-
| T1-low (Source) | `[SRC:{file}:L{line}]`
|
|
144
|
-
| T2 (QMD)
|
|
145
|
-
| T3 (External)
|
|
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
|
-
"
|
|
267
|
-
"
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
|
61
|
-
|
|
62
|
-
| Entry point declaration | Strong
|
|
63
|
-
| Shebang + executable
|
|
64
|
-
| CLI argument parser
|
|
65
|
-
| Directory convention
|
|
66
|
-
| CI/CD reference
|
|
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
|
|
71
|
-
|
|
72
|
-
| JSON Schema
|
|
73
|
-
| Config template
|
|
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
|
|
76
|
-
| Design tokens
|
|
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
|
|