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