bmad-module-skill-forge 1.4.1 → 1.5.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 +1 -1
- package/README.md +0 -8
- package/docs/_data/pinned.yaml +1 -1
- package/docs/_internal/STABILITY.md +1 -1
- package/docs/architecture.md +2 -2
- package/docs/examples.md +1 -1
- package/docs/workflows.md +5 -5
- package/package.json +2 -2
- package/src/README.md +1 -1
- package/src/knowledge/ccc-bridge.md +12 -12
- package/src/knowledge/qmd-registry.md +5 -5
- package/src/shared/health-check.md +5 -5
- package/src/shared/references/description-guard-protocol.md +100 -0
- package/src/shared/references/output-contract-schema.md +1 -1
- package/src/shared/scripts/schemas/skf-brief-result-envelope.v1.json +6 -6
- package/src/shared/scripts/schemas/skf-setup-result-envelope.v1.json +9 -3
- package/src/shared/scripts/schemas/skf-update-result-envelope.v1.json +149 -0
- package/src/shared/scripts/schemas/skill-brief.v1.json +22 -2
- package/src/shared/scripts/skf-build-change-manifest.py +420 -0
- package/src/shared/scripts/skf-check-workspace-drift.py +321 -0
- package/src/shared/scripts/skf-compare-file-hashes.py +357 -0
- package/src/shared/scripts/skf-description-guard.py +359 -0
- package/src/shared/scripts/skf-detect-language.py +2 -2
- package/src/shared/scripts/skf-detect-scripts-assets.py +613 -0
- package/src/shared/scripts/skf-detect-tools.py +97 -8
- package/src/shared/scripts/skf-detect-workspaces.py +1 -1
- package/src/shared/scripts/skf-disqualify-candidates.py +576 -0
- package/src/shared/scripts/skf-emit-brief-result-envelope.py +3 -3
- package/src/shared/scripts/skf-emit-result-envelope.py +93 -9
- package/src/shared/scripts/skf-enumerate-stack-skills.py +514 -0
- package/src/shared/scripts/skf-forge-tier-rw.py +11 -11
- package/src/shared/scripts/skf-hash-content.py +284 -0
- package/src/shared/scripts/skf-load-provenance.py +295 -0
- package/src/shared/scripts/skf-merge-ccc-exclusions.py +34 -4
- package/src/shared/scripts/skf-pair-intersect.py +250 -0
- package/src/shared/scripts/skf-provenance-gap-dispatch.py +433 -0
- package/src/shared/scripts/skf-qmd-classify-collections.py +42 -8
- package/src/shared/scripts/skf-recommend-scope-type.py +2 -2
- package/src/shared/scripts/skf-render-quick-metadata.py +2 -2
- package/src/shared/scripts/skf-resolve-authoritative-files.py +504 -0
- package/src/shared/scripts/skf-scan-manifests.py +738 -0
- package/src/shared/scripts/skf-scan-skill-md-structure.py +375 -0
- package/src/shared/scripts/skf-update-active-symlink.py +315 -0
- package/src/shared/scripts/skf-validate-brief-inputs.py +5 -5
- package/src/shared/scripts/skf-validate-brief-schema.py +348 -0
- package/src/shared/scripts/skf-write-skill-brief.py +61 -5
- package/src/skf-analyze-source/SKILL.md +69 -16
- package/src/skf-analyze-source/assets/skill-brief-schema.md +1 -1
- package/src/skf-analyze-source/customize.toml +55 -0
- package/src/skf-analyze-source/{steps-c/step-01b-continue.md → references/continue.md} +12 -12
- package/src/skf-analyze-source/{steps-c/step-06-generate-briefs.md → references/generate-briefs.md} +29 -10
- package/src/skf-analyze-source/{steps-c/step-07-health-check.md → references/health-check.md} +5 -3
- package/src/skf-analyze-source/{steps-c/step-03-identify-units.md → references/identify-units.md} +44 -14
- package/src/skf-analyze-source/{steps-c/step-01-init.md → references/init.md} +27 -6
- package/src/skf-analyze-source/{steps-c/step-04-map-and-detect.md → references/map-and-detect.md} +52 -25
- package/src/skf-analyze-source/{steps-c/step-05-recommend.md → references/recommend.md} +15 -8
- package/src/skf-analyze-source/{steps-c/step-02-scan-project.md → references/scan-project.md} +12 -10
- package/src/skf-analyze-source/references/unit-detection-heuristics.md +2 -0
- package/src/skf-analyze-source/templates/analysis-report-template.md +6 -6
- package/src/skf-audit-skill/SKILL.md +66 -15
- package/src/skf-audit-skill/assets/drift-report-template.md +6 -5
- package/src/skf-audit-skill/customize.toml +49 -0
- package/src/skf-audit-skill/{steps-c/step-07-health-check.md → references/health-check.md} +5 -3
- package/src/skf-audit-skill/{steps-c/step-01-init.md → references/init.md} +57 -19
- package/src/skf-audit-skill/{steps-c/step-02-re-index.md → references/re-index.md} +11 -11
- package/src/skf-audit-skill/{steps-c/step-06-report.md → references/report.md} +25 -7
- package/src/skf-audit-skill/{steps-c/step-04-semantic-diff.md → references/semantic-diff.md} +6 -6
- package/src/skf-audit-skill/{steps-c/step-05-severity-classify.md → references/severity-classify.md} +5 -5
- package/src/skf-audit-skill/references/severity-rules.md +2 -0
- package/src/skf-audit-skill/{steps-c/step-03-structural-diff.md → references/structural-diff.md} +29 -17
- package/src/skf-brief-skill/SKILL.md +48 -18
- package/src/skf-brief-skill/assets/description-voice-examples.md +1 -1
- package/src/skf-brief-skill/assets/skill-brief-schema.md +32 -2
- package/src/skf-brief-skill/customize.toml +44 -0
- package/src/skf-brief-skill/{steps-c/step-02-analyze-target.md → references/analyze-target.md} +5 -5
- package/src/skf-brief-skill/{steps-c/step-04-confirm-brief.md → references/confirm-brief.md} +13 -10
- package/src/skf-brief-skill/references/draft-checkpoint.md +4 -4
- package/src/skf-brief-skill/{steps-c/step-01-gather-intent.md → references/gather-intent.md} +24 -24
- package/src/skf-brief-skill/references/headless-args.md +9 -9
- package/src/skf-brief-skill/references/headless-source-authority-detection.md +1 -1
- package/src/skf-brief-skill/{steps-c/step-06-health-check.md → references/health-check.md} +4 -2
- package/src/skf-brief-skill/references/portfolio-similarity-check.md +2 -2
- package/src/skf-brief-skill/references/qmd-collection-registration.md +1 -1
- package/src/skf-brief-skill/{steps-c/step-03-scope-definition.md → references/scope-definition.md} +19 -16
- package/src/skf-brief-skill/references/version-resolution.md +2 -2
- package/src/skf-brief-skill/{steps-c/step-05-write-brief.md → references/write-brief.md} +11 -10
- package/src/skf-create-skill/SKILL.md +25 -19
- package/src/skf-create-skill/assets/compile-assembly-rules.md +3 -3
- package/src/skf-create-skill/assets/skill-sections.md +5 -5
- package/src/skf-create-skill/assets/tessl-dismissal-rules.md +11 -11
- package/src/skf-create-skill/customize.toml +35 -0
- package/src/skf-create-skill/references/authoritative-files-protocol.md +142 -0
- package/src/skf-create-skill/{steps-c/step-05-compile.md → references/compile.md} +16 -16
- package/src/skf-create-skill/{steps-c/step-03d-component-extraction.md → references/component-extraction.md} +16 -16
- package/src/skf-create-skill/{steps-c/step-02-ecosystem-check.md → references/ecosystem-check.md} +4 -4
- package/src/skf-create-skill/{steps-c/step-04-enrich.md → references/enrich.md} +3 -3
- package/src/skf-create-skill/{steps-c/step-03-extract.md → references/extract.md} +52 -120
- package/src/skf-create-skill/references/extraction-patterns.md +8 -8
- package/src/skf-create-skill/{steps-c/step-07-generate-artifacts.md → references/generate-artifacts.md} +11 -11
- package/src/skf-create-skill/{steps-c/step-09-health-check.md → references/health-check.md} +4 -2
- package/src/skf-create-skill/{steps-c/step-01-load-brief.md → references/load-brief.md} +40 -32
- package/src/skf-create-skill/{steps-c/step-08-report.md → references/report.md} +8 -8
- package/src/skf-create-skill/references/source-resolution-protocols.md +6 -6
- package/src/skf-create-skill/{steps-c/sub/step-02b-ccc-discover.md → references/sub/ccc-discover.md} +5 -5
- package/src/skf-create-skill/{steps-c/sub/step-03c-fetch-docs.md → references/sub/fetch-docs.md} +28 -12
- package/src/skf-create-skill/{steps-c/sub/step-03b-fetch-temporal.md → references/sub/fetch-temporal.md} +81 -50
- package/src/skf-create-skill/{steps-c/step-06-validate.md → references/validate.md} +46 -26
- package/src/skf-create-stack-skill/SKILL.md +76 -17
- package/src/skf-create-stack-skill/assets/provenance-map-schema.md +102 -0
- package/src/skf-create-stack-skill/assets/stack-skill-template.md +1 -1
- package/src/skf-create-stack-skill/customize.toml +46 -0
- package/src/skf-create-stack-skill/{steps-c/step-06-compile-stack.md → references/compile-stack.md} +6 -5
- package/src/skf-create-stack-skill/references/compose-mode-rules.md +3 -1
- package/src/skf-create-stack-skill/{steps-c/step-05-detect-integrations.md → references/detect-integrations.md} +32 -11
- package/src/skf-create-stack-skill/{steps-c/step-02-detect-manifests.md → references/detect-manifests.md} +28 -28
- package/src/skf-create-stack-skill/{steps-c/step-07-generate-output.md → references/generate-output.md} +11 -85
- package/src/skf-create-stack-skill/{steps-c/step-10-health-check.md → references/health-check.md} +4 -2
- package/src/skf-create-stack-skill/{steps-c/step-01-init.md → references/init.md} +70 -4
- package/src/skf-create-stack-skill/references/integration-patterns.md +2 -0
- package/src/skf-create-stack-skill/references/manifest-patterns.md +2 -0
- package/src/skf-create-stack-skill/{steps-c/step-04-parallel-extract.md → references/parallel-extract.md} +40 -17
- package/src/skf-create-stack-skill/{steps-c/step-03-rank-and-confirm.md → references/rank-and-confirm.md} +5 -4
- package/src/skf-create-stack-skill/{steps-c/step-09-report.md → references/report.md} +3 -3
- package/src/skf-create-stack-skill/{steps-c/step-08-validate.md → references/validate.md} +6 -6
- package/src/skf-drop-skill/SKILL.md +84 -12
- package/src/skf-drop-skill/customize.toml +57 -0
- package/src/skf-drop-skill/{steps-c/step-02-execute.md → references/execute.md} +49 -34
- package/src/skf-drop-skill/{steps-c/step-04-health-check.md → references/health-check.md} +6 -4
- package/src/skf-drop-skill/{steps-c/step-03-report.md → references/report.md} +13 -5
- package/src/skf-drop-skill/{steps-c/step-01-select.md → references/select.md} +63 -15
- package/src/skf-export-skill/SKILL.md +85 -16
- package/src/skf-export-skill/assets/managed-section-format.md +3 -3
- package/src/skf-export-skill/assets/snippet-format.md +2 -2
- package/src/skf-export-skill/customize.toml +49 -0
- package/src/skf-export-skill/{steps-c/step-03-generate-snippet.md → references/generate-snippet.md} +11 -11
- package/src/skf-export-skill/{steps-c/step-07-health-check.md → references/health-check.md} +6 -4
- package/src/skf-export-skill/{steps-c/step-01-load-skill.md → references/load-skill.md} +11 -49
- package/src/skf-export-skill/references/manifest-rebuild.md +68 -0
- package/src/skf-export-skill/references/multi-skill-mode.md +38 -0
- package/src/skf-export-skill/references/orphan-context-detection.md +75 -0
- package/src/skf-export-skill/references/orphan-row-detection.md +102 -0
- package/src/skf-export-skill/{steps-c/step-02-package.md → references/package.md} +7 -7
- package/src/skf-export-skill/references/preflight-snippet-root-probe.md +74 -0
- package/src/skf-export-skill/{steps-c/step-06-summary.md → references/summary.md} +20 -8
- package/src/skf-export-skill/{steps-c/step-05-token-report.md → references/token-report.md} +5 -5
- package/src/skf-export-skill/{steps-c/step-04-update-context.md → references/update-context.md} +109 -113
- package/src/skf-quick-skill/SKILL.md +63 -123
- package/src/skf-quick-skill/customize.toml +44 -0
- package/src/skf-quick-skill/references/batch-mode.md +102 -0
- package/src/skf-quick-skill/{steps-c/step-04-compile.md → references/compile.md} +10 -10
- package/src/skf-quick-skill/{steps-c/step-02-ecosystem-check.md → references/ecosystem-check.md} +5 -5
- package/src/skf-quick-skill/{steps-c/step-06-finalize.md → references/finalize.md} +7 -7
- package/src/skf-quick-skill/{steps-c/step-07-health-check.md → references/health-check.md} +3 -3
- package/src/skf-quick-skill/{steps-c/step-03-quick-extract.md → references/quick-extract.md} +5 -5
- package/src/skf-quick-skill/references/registry-resolution.md +2 -0
- package/src/skf-quick-skill/{steps-c/step-01-resolve-target.md → references/resolve-target.md} +14 -10
- package/src/skf-quick-skill/{steps-c/step-05-write-and-validate.md → references/write-and-validate.md} +4 -4
- package/src/skf-refine-architecture/SKILL.md +86 -16
- package/src/skf-refine-architecture/customize.toml +49 -0
- package/src/skf-refine-architecture/{steps-c/step-05-compile.md → references/compile.md} +4 -4
- package/src/skf-refine-architecture/{steps-c/step-02-gap-analysis.md → references/gap-analysis.md} +5 -5
- package/src/skf-refine-architecture/{steps-c/step-07-health-check.md → references/health-check.md} +6 -4
- package/src/skf-refine-architecture/{steps-c/step-04-improvements.md → references/improvements.md} +5 -5
- package/src/skf-refine-architecture/references/init.md +144 -0
- package/src/skf-refine-architecture/{steps-c/step-03-issue-detection.md → references/issue-detection.md} +5 -5
- package/src/skf-refine-architecture/references/refinement-rules.md +2 -0
- package/src/skf-refine-architecture/{steps-c/step-06-report.md → references/report.md} +14 -5
- package/src/skf-rename-skill/SKILL.md +82 -12
- package/src/skf-rename-skill/customize.toml +52 -0
- package/src/skf-rename-skill/{steps-c/step-02-execute.md → references/execute.md} +94 -99
- package/src/skf-rename-skill/references/health-check.md +30 -0
- package/src/skf-rename-skill/references/rebuild-context.md +110 -0
- package/src/skf-rename-skill/{steps-c/step-03-report.md → references/report.md} +13 -5
- package/src/skf-rename-skill/{steps-c/step-01-select.md → references/select.md} +59 -20
- package/src/skf-setup/SKILL.md +35 -35
- package/src/skf-setup/customize.toml +33 -0
- package/src/skf-setup/{steps-c/step-03-auto-index.md → references/auto-index.md} +10 -18
- package/src/skf-setup/{steps-c/step-01b-ccc-index.md → references/ccc-index.md} +16 -31
- package/src/skf-setup/{steps-c/step-01-detect-and-tier.md → references/detect-and-tier.md} +23 -10
- package/src/skf-setup/{steps-c/step-05-health-check.md → references/health-check.md} +1 -1
- package/src/skf-setup/{steps-c/step-04-report.md → references/report.md} +21 -19
- package/src/skf-setup/references/tier-rules.md +1 -1
- package/src/skf-setup/{steps-c/step-02-write-config.md → references/write-config.md} +14 -13
- package/src/skf-test-skill/SKILL.md +77 -15
- package/src/skf-test-skill/customize.toml +54 -0
- package/src/skf-test-skill/{steps-c/step-04-coherence-check.md → references/coherence-check.md} +28 -71
- package/src/skf-test-skill/{steps-c/step-03-coverage-check.md → references/coverage-check.md} +16 -39
- package/src/skf-test-skill/{steps-c/step-02-detect-mode.md → references/detect-mode.md} +4 -26
- package/src/skf-test-skill/{steps-c/step-04b-external-validators.md → references/external-validators.md} +6 -28
- package/src/skf-test-skill/references/health-check.md +14 -0
- package/src/skf-test-skill/{steps-c/step-01-init.md → references/init.md} +21 -37
- package/src/skf-test-skill/references/migration-section-rules.md +4 -2
- package/src/skf-test-skill/{steps-c/step-06-report.md → references/report.md} +41 -51
- package/src/skf-test-skill/{steps-c/step-05-score.md → references/score.md} +26 -43
- package/src/skf-test-skill/references/scoring-rules.md +8 -6
- package/src/skf-test-skill/references/source-access-protocol.md +7 -5
- package/src/skf-test-skill/scripts/compute-score.py +88 -17
- package/src/skf-test-skill/templates/test-report-template.md +13 -13
- package/src/skf-update-skill/SKILL.md +23 -14
- package/src/skf-update-skill/customize.toml +44 -0
- package/src/skf-update-skill/{steps-c/step-02-detect-changes.md → references/detect-changes.md} +176 -68
- package/src/skf-update-skill/references/health-check.md +32 -0
- package/src/skf-update-skill/{steps-c/step-01-init.md → references/init.md} +56 -8
- package/src/skf-update-skill/references/manual-section-rules.md +4 -0
- package/src/skf-update-skill/references/merge-conflict-rules.md +4 -0
- package/src/skf-update-skill/{steps-c/step-04-merge.md → references/merge.md} +8 -8
- package/src/skf-update-skill/{steps-c/step-03-re-extract.md → references/re-extract.md} +53 -44
- package/src/skf-update-skill/references/remote-source-resolution.md +5 -1
- package/src/skf-update-skill/references/report.md +214 -0
- package/src/skf-update-skill/{steps-c/step-05-validate.md → references/validate.md} +5 -5
- package/src/skf-update-skill/{steps-c/step-06-write.md → references/write.md} +73 -51
- package/src/skf-verify-stack/SKILL.md +89 -17
- package/src/skf-verify-stack/assets/feasibility-report-template.md +4 -4
- package/src/skf-verify-stack/customize.toml +50 -0
- package/src/skf-verify-stack/references/coverage-patterns.md +2 -2
- package/src/skf-verify-stack/{steps-c/step-02-coverage.md → references/coverage.md} +7 -7
- package/src/skf-verify-stack/{steps-c/step-07-health-check.md → references/health-check.md} +7 -5
- package/src/skf-verify-stack/references/init.md +166 -0
- package/src/skf-verify-stack/references/integration-verification-rules.md +1 -1
- package/src/skf-verify-stack/{steps-c/step-03-integrations.md → references/integrations.md} +12 -12
- package/src/skf-verify-stack/{steps-c/step-06-report.md → references/report.md} +22 -41
- package/src/skf-verify-stack/{steps-c/step-04-requirements.md → references/requirements.md} +7 -7
- package/src/skf-verify-stack/{steps-c/step-05-synthesize.md → references/synthesize.md} +8 -8
- package/tools/validate-docs-drift.js +1 -1
- package/src/skf-refine-architecture/steps-c/step-01-init.md +0 -136
- package/src/skf-rename-skill/steps-c/step-04-health-check.md +0 -22
- package/src/skf-test-skill/steps-c/step-07-health-check.md +0 -25
- package/src/skf-update-skill/steps-c/step-07-report.md +0 -148
- package/src/skf-update-skill/steps-c/step-08-health-check.md +0 -22
- package/src/skf-verify-stack/steps-c/step-01-init.md +0 -178
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
# `{nextStepFile}` is resolved by probing both candidate roots in order.
|
|
3
|
-
# HALT if neither exists — step-06 §7 should have caught this already, but
|
|
4
|
-
# this step re-asserts the invariant at dispatch time.
|
|
5
|
-
nextStepFileProbeOrder:
|
|
6
|
-
- '{project-root}/_bmad/skf/shared/health-check.md'
|
|
7
|
-
- '{project-root}/src/shared/health-check.md'
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Step 7: Workflow Health Check
|
|
11
|
-
|
|
12
|
-
## STEP GOAL:
|
|
13
|
-
|
|
14
|
-
Chain to the shared workflow self-improvement health check. This is the terminal step of test-skill — after the shared health check completes, the workflow is fully done.
|
|
15
|
-
|
|
16
|
-
## Rules
|
|
17
|
-
|
|
18
|
-
- No user-facing reports, file writes, or result contracts in this step — those belong in step-06
|
|
19
|
-
- Delegate directly to the resolved health-check path with no additional commentary
|
|
20
|
-
- Do not attempt any other action between loading this step and executing the resolved file
|
|
21
|
-
|
|
22
|
-
## MANDATORY SEQUENCE
|
|
23
|
-
|
|
24
|
-
1. Probe `{nextStepFileProbeOrder}` in order. Use the FIRST path that exists as `{nextStepFile}`. HALT with the diagnostic from step-06 §7 if neither exists.
|
|
25
|
-
2. Load `{nextStepFile}`, read it fully, then execute it.
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
nextStepFile: './step-08-health-check.md'
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Step 7: Report
|
|
6
|
-
|
|
7
|
-
## STEP GOAL:
|
|
8
|
-
|
|
9
|
-
Present a comprehensive change summary showing what was updated, [MANUAL] sections preserved, confidence tier breakdown, and recommend next workflow actions in the SKF chain.
|
|
10
|
-
|
|
11
|
-
## Rules
|
|
12
|
-
|
|
13
|
-
- Focus only on reporting — all operations are complete; do not modify any files
|
|
14
|
-
- Present clear, actionable summary with next step recommendations
|
|
15
|
-
- Chains to the local health-check step via `{nextStepFile}` after completion — the user-facing summary is NOT the terminal step
|
|
16
|
-
|
|
17
|
-
## MANDATORY SEQUENCE
|
|
18
|
-
|
|
19
|
-
**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change.
|
|
20
|
-
|
|
21
|
-
### 1. Handle No-Change Shortcut
|
|
22
|
-
|
|
23
|
-
**If routed here from step 02 with no changes detected:**
|
|
24
|
-
|
|
25
|
-
"**Update Skill Report: {skill_name}**
|
|
26
|
-
|
|
27
|
-
**Status:** No changes detected
|
|
28
|
-
|
|
29
|
-
Source code matches provenance map exactly. The skill `{skill_name}` is current — no update was needed.
|
|
30
|
-
|
|
31
|
-
**Provenance age:** {days} days since last extraction
|
|
32
|
-
**Forge tier:** {tier}
|
|
33
|
-
|
|
34
|
-
**Recommendation:** No action required. Run audit-skill periodically to monitor for drift."
|
|
35
|
-
|
|
36
|
-
→ Load, read the full file, and execute `{nextStepFile}` — the health-check step is the true terminal step of this workflow.
|
|
37
|
-
|
|
38
|
-
### 2. Present Change Summary
|
|
39
|
-
|
|
40
|
-
"**Update Skill Report: {skill_name}**
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
### Operation Summary
|
|
45
|
-
|
|
46
|
-
| Metric | Value |
|
|
47
|
-
|--------|-------|
|
|
48
|
-
| **Skill** | {skill_name} ({single/stack}) |
|
|
49
|
-
| **Forge Tier** | {tier} |
|
|
50
|
-
| **Mode** | {normal/degraded} |
|
|
51
|
-
| **Duration** | {step count} steps |
|
|
52
|
-
|
|
53
|
-
### Changes Applied
|
|
54
|
-
|
|
55
|
-
| Category | Count |
|
|
56
|
-
|----------|-------|
|
|
57
|
-
| Files modified | {count} |
|
|
58
|
-
| Files added | {count} |
|
|
59
|
-
| Files deleted | {count} |
|
|
60
|
-
| Files moved/renamed | {count} |
|
|
61
|
-
| **Total exports affected** | {count} |
|
|
62
|
-
|
|
63
|
-
### Export Changes
|
|
64
|
-
|
|
65
|
-
| Change Type | Count |
|
|
66
|
-
|-------------|-------|
|
|
67
|
-
| Updated (signature/type change) | {count} |
|
|
68
|
-
| Added (new exports) | {count} |
|
|
69
|
-
| Removed (deleted exports) | {count} |
|
|
70
|
-
| Moved (file relocated) | {count} |
|
|
71
|
-
| Renamed (identifier changed) | {count} |
|
|
72
|
-
|
|
73
|
-
### Confidence Tier Breakdown
|
|
74
|
-
|
|
75
|
-
| Tier | Count | Description |
|
|
76
|
-
|------|-------|-------------|
|
|
77
|
-
| T1 | {count} | AST-verified structural extraction |
|
|
78
|
-
| T1-low | {count} | Pattern-matched (Quick tier or degraded) |
|
|
79
|
-
| T2 | {count} | QMD-enriched semantic context |
|
|
80
|
-
|
|
81
|
-
### [MANUAL] Section Preservation
|
|
82
|
-
|
|
83
|
-
| Metric | Count |
|
|
84
|
-
|--------|-------|
|
|
85
|
-
| Sections preserved | {count} |
|
|
86
|
-
| Conflicts resolved | {count} |
|
|
87
|
-
| Orphans kept | {count} |
|
|
88
|
-
| Orphans removed | {count} |
|
|
89
|
-
| **Integrity** | {VERIFIED / count issues} |"
|
|
90
|
-
|
|
91
|
-
### 3. Present Validation Findings (If Any)
|
|
92
|
-
|
|
93
|
-
**If validation findings exist from step 05:**
|
|
94
|
-
|
|
95
|
-
"### Validation Findings
|
|
96
|
-
|
|
97
|
-
| Check | Status | Issues |
|
|
98
|
-
|-------|--------|--------|
|
|
99
|
-
| Spec compliance | {PASS/WARN/FAIL} | {count} |
|
|
100
|
-
| [MANUAL] integrity | {PASS/WARN/FAIL} | {count} |
|
|
101
|
-
| Confidence tiers | {PASS/WARN/FAIL} | {count} |
|
|
102
|
-
| Provenance | {PASS/WARN/FAIL} | {count} |
|
|
103
|
-
|
|
104
|
-
{List specific findings if WARN or FAIL}"
|
|
105
|
-
|
|
106
|
-
**If all validations passed:** "### Validation: All checks passed."
|
|
107
|
-
|
|
108
|
-
### 4. Show Files Updated
|
|
109
|
-
|
|
110
|
-
"### Files Written
|
|
111
|
-
|
|
112
|
-
| File | Status |
|
|
113
|
-
|------|--------|
|
|
114
|
-
| `{resolved_skill_package}/SKILL.md` | Updated |
|
|
115
|
-
| `{resolved_skill_package}/metadata.json` | Updated |
|
|
116
|
-
| `{forge_version}/provenance-map.json` | Updated |
|
|
117
|
-
| `{forge_version}/evidence-report.md` | Appended |
|
|
118
|
-
| {stack reference files if applicable} | Updated |
|
|
119
|
-
|
|
120
|
-
Where `{resolved_skill_package}` = `{skills_output_folder}/{skill_name}/{version}/{skill_name}/` and `{forge_version}` = `{forge_data_folder}/{skill_name}/{version}/` — see `knowledge/version-paths.md`."
|
|
121
|
-
|
|
122
|
-
### 5. Workflow Chaining Recommendations
|
|
123
|
-
|
|
124
|
-
"### Next Steps
|
|
125
|
-
|
|
126
|
-
Based on the update results:"
|
|
127
|
-
|
|
128
|
-
**If all validations passed:**
|
|
129
|
-
"- **audit-skill** — Run to verify the update resolved known drift
|
|
130
|
-
- **export-skill** — Package the updated skill for distribution
|
|
131
|
-
- **test-skill** — Run test suite against the updated skill"
|
|
132
|
-
|
|
133
|
-
**If validation warnings/failures exist:**
|
|
134
|
-
"- **audit-skill** — Run to identify remaining issues
|
|
135
|
-
- Review validation findings above before exporting"
|
|
136
|
-
|
|
137
|
-
**If triggered by audit-skill chain:**
|
|
138
|
-
"- **audit-skill** — Re-run to verify CRITICAL/HIGH drift resolved
|
|
139
|
-
- **export-skill** — Package once audit confirms clean state"
|
|
140
|
-
|
|
141
|
-
### 5b. Result Contract
|
|
142
|
-
|
|
143
|
-
Write the result contract per `shared/references/output-contract-schema.md`: the per-run record at `{forge_version}/update-skill-result-{YYYYMMDD-HHmmss}.json` (UTC timestamp, resolution to seconds) and a copy at `{forge_version}/update-skill-result-latest.json` (stable path for pipeline consumers — copy, not symlink). Include all modified file paths in `outputs`; include `exports_affected`, `files_modified`, and `validation_status` (passed/warnings/failures) in `summary`.
|
|
144
|
-
|
|
145
|
-
### 6. Chain to Health Check
|
|
146
|
-
|
|
147
|
-
ONLY WHEN the change summary has been presented, files-written list displayed, and result contract saved 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 report reads as final.
|
|
148
|
-
|
|
@@ -1,22 +0,0 @@
|
|
|
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 8: 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 update-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-07
|
|
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.
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
nextStepFile: './step-02-coverage.md'
|
|
3
|
-
reportTemplate: 'assets/feasibility-report-template.md'
|
|
4
|
-
feasibilitySchemaRef: 'src/shared/references/feasibility-report-schema.md'
|
|
5
|
-
atomicWriteScript: '{project-root}/src/shared/scripts/skf-atomic-write.py'
|
|
6
|
-
outputFile: '{forge_data_folder}/feasibility-report-{project_slug}-{timestamp}.md'
|
|
7
|
-
outputFileLatest: '{forge_data_folder}/feasibility-report-{project_slug}-latest.md'
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Step 1: Initialize Verification
|
|
11
|
-
|
|
12
|
-
## STEP GOAL:
|
|
13
|
-
|
|
14
|
-
Load all generated skills from the skills output folder, accept the architecture document path (required) and optional PRD/vision document path from the user, validate that all inputs exist and are readable, create the feasibility report document, and present an initialization summary before auto-proceeding.
|
|
15
|
-
|
|
16
|
-
## Rules
|
|
17
|
-
|
|
18
|
-
- Focus only on loading inputs, scanning skills, and creating the report skeleton — do not perform analysis
|
|
19
|
-
- Auto-proceed — halts only on validation errors
|
|
20
|
-
|
|
21
|
-
## MANDATORY SEQUENCE
|
|
22
|
-
|
|
23
|
-
**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise.
|
|
24
|
-
|
|
25
|
-
### 1. Accept Input Documents
|
|
26
|
-
|
|
27
|
-
"**Verify Stack — Feasibility Analysis**
|
|
28
|
-
|
|
29
|
-
Please provide the following:
|
|
30
|
-
1. **Architecture document path** (REQUIRED) — your project's architecture doc
|
|
31
|
-
2. **PRD or vision document path** (OPTIONAL) — for requirements coverage analysis
|
|
32
|
-
3. **Previous feasibility report path** (OPTIONAL) — for delta comparison with a prior run (provide a backup copy)"
|
|
33
|
-
|
|
34
|
-
Wait for user input. **GATE [default: use args]** — If `{headless_mode}` and architecture doc path was provided as argument: use that path and auto-proceed, log: "headless: using provided architecture path".
|
|
35
|
-
|
|
36
|
-
**Validate architecture document:**
|
|
37
|
-
- Confirm the file exists and is readable
|
|
38
|
-
- If missing or unreadable → "Architecture document not found at `{path}`. Provide a valid path."
|
|
39
|
-
- HALT until a valid architecture document is provided
|
|
40
|
-
|
|
41
|
-
**Validate PRD document (if provided):**
|
|
42
|
-
- Confirm the file exists and is readable
|
|
43
|
-
- If missing → "PRD document not found at `{path}`. Proceeding without PRD — requirements pass will be skipped."
|
|
44
|
-
- Store PRD availability as `prdAvailable: true|false`
|
|
45
|
-
|
|
46
|
-
**Validate previous report (if provided):**
|
|
47
|
-
- Confirm the file exists and is readable
|
|
48
|
-
- **Collision check:** Compare both the provided path and `{outputFile}` via `(st_dev, st_ino)` tuples obtained from `stat(2)` on each path (do not rely on absolute-path string equality — symlinks, bind mounts, and case-insensitive filesystems can defeat string comparison; the `(st_dev, st_ino)` comparison is the canonical kernel-level equivalent of `os.path.realpath`-based equality and is strictly stronger because it also catches hardlinks). If `{outputFile}` does not yet exist, resolve its parent via `realpath`, stat that directory, and combine `(st_dev, parent_ino, basename)` for comparison. If the two paths resolve to the same inode, warn: "The previous report path points to the same inode as the new report. This file will be overwritten during this run. Provide a path to a backup copy, or leave empty to skip delta comparison." HALT until resolved.
|
|
49
|
-
- If missing → "Previous report not found at `{path}`. Proceeding without delta comparison."
|
|
50
|
-
- Store as `previousReport: {path}` (or empty string if not provided)
|
|
51
|
-
|
|
52
|
-
### 2. Scan Skills Folder
|
|
53
|
-
|
|
54
|
-
**Pre-flight — skills folder existence:**
|
|
55
|
-
- If `{skills_output_folder}` does not exist on disk: HALT with "**Cannot proceed.** `{skills_output_folder}` does not exist — run **[SF] Setup Forge** to initialize the forge, then generate skills with [CS] or [QS]."
|
|
56
|
-
- If `{skills_output_folder}` exists but is empty (no subdirectories at all): HALT with "**Cannot proceed.** `{skills_output_folder}` contains 0 skills. Generate skills with [CS] Create Skill or [QS] Quick Skill, then re-run [VS]."
|
|
57
|
-
|
|
58
|
-
Read the `{skills_output_folder}` directory. Skills use a version-nested directory structure (see `knowledge/version-paths.md`).
|
|
59
|
-
|
|
60
|
-
**Version-aware skill discovery:**
|
|
61
|
-
1. Read `{skills_output_folder}/.export-manifest.json` if it exists. For each skill in `exports`, use `active_version` to resolve `{skill_package}` = `{skills_output_folder}/{skill-name}/{active_version}/{skill-name}/`
|
|
62
|
-
2. For any subdirectory not covered by the manifest, check for an `active` symlink at `{skills_output_folder}/{dir_name}/active` — resolve to `{skill_group}/active/{dir_name}/`
|
|
63
|
-
3. Fall back to flat path `{skills_output_folder}/{dir_name}/` for unmigrated skills
|
|
64
|
-
|
|
65
|
-
For each resolved skill package, check for the presence of `SKILL.md`, `metadata.json`, and `bmad-skill-manifest.yaml`. If `bmad-skill-manifest.yaml` is missing in the resolved package, log "Skipping `{dir_name}` — missing bmad-skill-manifest.yaml" and exclude from inventory (do not spawn a subagent).
|
|
66
|
-
|
|
67
|
-
**Non-symlink `active` check:** When resolving via the `active` symlink pattern (case 2 above), perform an explicit `is_symlink` check on `{skills_output_folder}/{dir_name}/active`. If the path exists but is NOT a symlink, log "Skipping `{dir_name}` — `active` is not a symlink (repair with [SKF-update-skill])" and treat as missing.
|
|
68
|
-
|
|
69
|
-
**Orphan-versions detection:** For any `{skills_output_folder}/{dir_name}/` that contains subdirectories matching semver (`^\d+\.\d+\.\d+`) but has no `active` symlink at all, emit: "**Error:** Skill `{dir_name}` has versions `{list_of_version_dirs}` but no `active` symlink — run [SKF-update-skill] to repair before re-running [VS]." Exclude the skill from inventory; count it toward the failure budget for the run summary.
|
|
70
|
-
|
|
71
|
-
<!-- Subagent delegation: read metadata.json files in parallel, return compact JSON -->
|
|
72
|
-
|
|
73
|
-
**Read all metadata.json files in parallel using subagents.** Launch up to **8 subagents concurrently** (batch larger inventories in rounds of 8 — the 8-way cap keeps the aggregate token window for the parent manageable while still parallelizing most typical stack sizes; tune in a future minor if inventories routinely exceed ~40 skills). Each subagent receives one resolved skill package path and MUST:
|
|
74
|
-
1. Read `{skill_package}/metadata.json`
|
|
75
|
-
2. ONLY return this compact JSON — no prose, no extra commentary:
|
|
76
|
-
|
|
77
|
-
```json
|
|
78
|
-
{
|
|
79
|
-
"skill_name": "...",
|
|
80
|
-
"language": "...",
|
|
81
|
-
"confidence_tier": "...",
|
|
82
|
-
"exports_documented": 0,
|
|
83
|
-
"source_repo": "...",
|
|
84
|
-
"source_root": "..."
|
|
85
|
-
}
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
Parent collects all subagent JSON summaries. Fields map directly from metadata.json:
|
|
89
|
-
- `skill_name` ← `name`
|
|
90
|
-
- `language` ← `language`
|
|
91
|
-
- `confidence_tier` ← `confidence_tier`
|
|
92
|
-
- `exports_documented` ← `stats.exports_documented`
|
|
93
|
-
- `source_repo` ← `source_repo` (or empty string if absent)
|
|
94
|
-
- `source_root` ← `source_root` (or empty string if absent)
|
|
95
|
-
|
|
96
|
-
**Subagent JSON schema validation:** For each subagent response, require keys `skill_name`, `language`, and an integer `exports_documented`. Wrap each JSON parse in try/catch. On parse failure or missing required key, log "Skipping `{dir_name}` — metadata.json unparseable (skill may be under active modification)" and exclude from the inventory. If more than **20%** (the failure-budget threshold — chosen so a single malformed skill in a small 3-5 skill inventory does not trip the halt, while larger inventories still halt before evidence quality collapses) of subagent calls fail schema validation, HALT the workflow with: "Inventory scan unreliable — {failed_count}/{total_count} skills returned malformed metadata. Re-run [VS] after skills stabilize."
|
|
97
|
-
|
|
98
|
-
**Capture mtime:** For each accepted skill, also record `metadata.json`'s mtime (via `stat`) into the inventory as `metadata_mtime`. Step-03 will re-verify this to detect mid-run modifications.
|
|
99
|
-
|
|
100
|
-
**metadata_schema_version check:** For each accepted skill, read `metadata_schema_version` from `metadata.json`. If missing or below minimum (`1.0`), log "Skipping `{dir_name}` — metadata_schema_version `{value}` below minimum `1.0`. Re-run [SKF-update-skill] to migrate." and exclude from the inventory.
|
|
101
|
-
|
|
102
|
-
**Build a skill inventory** as an internal list of all loaded skills with the fields above.
|
|
103
|
-
|
|
104
|
-
**If a resolved skill package lacks SKILL.md or metadata.json:**
|
|
105
|
-
- Log: "Skipping `{dir_name}` — missing SKILL.md or metadata.json"
|
|
106
|
-
- Do not include in inventory
|
|
107
|
-
|
|
108
|
-
### 3. Validate Minimum Requirements
|
|
109
|
-
|
|
110
|
-
**Check skill count:**
|
|
111
|
-
- At least 2 valid skills must exist (a stack requires multiple libraries)
|
|
112
|
-
- If fewer than 2 → "**Cannot proceed.** Only {count} skill(s) found in `{skills_output_folder}`. A stack requires at least 2 skills. Generate more skills with [CS] Create Skill or [QS] Quick Skill, then re-run [VS]."
|
|
113
|
-
- HALT workflow
|
|
114
|
-
|
|
115
|
-
**Check forge_data_folder:**
|
|
116
|
-
- Verify `forge_data_folder` was resolved from config.yaml and is non-empty
|
|
117
|
-
- If undefined or empty → "**Cannot proceed.** `forge_data_folder` is not configured in config.yaml. Re-run [SF] Setup Forge to initialize."
|
|
118
|
-
- HALT workflow
|
|
119
|
-
|
|
120
|
-
**Check architecture document:**
|
|
121
|
-
- Confirm it was loaded successfully in section 1
|
|
122
|
-
- If not → HALT with error (should not reach here if section 1 validation passed)
|
|
123
|
-
|
|
124
|
-
### 4. Create Feasibility Report
|
|
125
|
-
|
|
126
|
-
This skill is the PRODUCER of the feasibility report schema defined in `{feasibilitySchemaRef}`. All outputs MUST conform to that schema — in particular: `schemaVersion: "1.0"`, the defined verdict token set (`Verified|Plausible|Risky|Blocked`; overall `FEASIBLE|CONDITIONALLY_FEASIBLE|NOT_FEASIBLE`), the filename pattern, and the section-heading order.
|
|
127
|
-
|
|
128
|
-
**Compute filename variables:**
|
|
129
|
-
- `project_slug`: slugify `project_name` (lowercase, hyphens only, no unicode, no whitespace)
|
|
130
|
-
- `timestamp`: UTC `YYYYMMDD-HHmmss` captured at step-01 start
|
|
131
|
-
- `outputFile` resolves to `{forge_data_folder}/feasibility-report-{project_slug}-{timestamp}.md`
|
|
132
|
-
- `outputFileLatest` resolves to `{forge_data_folder}/feasibility-report-{project_slug}-latest.md` (a copy, not a symlink — per schema)
|
|
133
|
-
|
|
134
|
-
**Load** `{reportTemplate}` and stage the initial content.
|
|
135
|
-
|
|
136
|
-
**Populate frontmatter (per shared schema — required keys):**
|
|
137
|
-
- `schemaVersion: "1.0"`
|
|
138
|
-
- `reportType: feasibility`
|
|
139
|
-
- `projectName: "{project_name}"`
|
|
140
|
-
- `projectSlug: "{project_slug}"`
|
|
141
|
-
- `generatedAt: "{ISO-8601 UTC}"`
|
|
142
|
-
- `generatedBy: skf-verify-stack`
|
|
143
|
-
- `overallVerdict: "CONDITIONALLY_FEASIBLE"` (provisional until step-05 finalizes)
|
|
144
|
-
- `coveragePercentage: 0`
|
|
145
|
-
- `pairsVerified: 0`, `pairsPlausible: 0`, `pairsRisky: 0`, `pairsBlocked: 0`
|
|
146
|
-
- `recommendationCount: 0`
|
|
147
|
-
- `prdAvailable: true|false` (from section 1 validation)
|
|
148
|
-
|
|
149
|
-
**Populate producer-local bookkeeping keys (not part of the consumer contract):**
|
|
150
|
-
- `architectureDoc`, `prdDoc` (or "none"), `previousReport` (or empty string)
|
|
151
|
-
- `skillsAnalyzed: {count}`
|
|
152
|
-
- `stepsCompleted: ['step-01-init']`
|
|
153
|
-
|
|
154
|
-
**Atomic write:** Pipe the staged content through `python3 {atomicWriteScript} write --target {outputFile}` and then again with `--target {outputFileLatest}`. Both writes use the same staged content. Do NOT use `rm`+rewrite; do NOT create a symlink for the `-latest` copy.
|
|
155
|
-
|
|
156
|
-
### 5. Display Initialization Summary
|
|
157
|
-
|
|
158
|
-
"**Stack Verification Initialized**
|
|
159
|
-
|
|
160
|
-
| Field | Value |
|
|
161
|
-
|-------|-------|
|
|
162
|
-
| **Skills Loaded** | {count} |
|
|
163
|
-
| **Architecture Doc** | {architecture_doc} |
|
|
164
|
-
| **PRD Document** | {prd_doc or 'Not provided — requirements pass will be skipped'} |
|
|
165
|
-
| **Previous Report** | {previousReport or 'Not provided — no delta comparison'} |
|
|
166
|
-
|
|
167
|
-
**Skill Inventory:**
|
|
168
|
-
|
|
169
|
-
| Skill | Language | Tier | Exports |
|
|
170
|
-
|-------|----------|------|---------|
|
|
171
|
-
| {skill_name} | {language} | {confidence_tier} | {exports_documented} |
|
|
172
|
-
|
|
173
|
-
**Proceeding to coverage analysis...**"
|
|
174
|
-
|
|
175
|
-
### 6. Auto-Proceed to Next Step
|
|
176
|
-
|
|
177
|
-
Load, read the full file and then execute `{nextStepFile}`.
|
|
178
|
-
|