bmad-module-skill-forge 1.4.0 → 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 +45 -1
- 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/references/init.md +305 -0
- 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 -16
- 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} +17 -9
- 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} +18 -12
- 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} +21 -51
- 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} +30 -6
- 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} +116 -91
- 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} +14 -22
- 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-audit-skill/steps-c/step-01-init.md +0 -221
- 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,221 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
nextStepFile: './step-02-re-index.md'
|
|
3
|
-
outputFile: '{forge_version}/drift-report-{timestamp}.md'
|
|
4
|
-
templateFile: 'assets/drift-report-template.md'
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Step 1: Initialize Audit
|
|
8
|
-
|
|
9
|
-
## STEP GOAL:
|
|
10
|
-
|
|
11
|
-
Load the existing skill artifacts, provenance map, and forge tier configuration to establish the baseline for drift detection. Create the drift report document and present a baseline summary for user confirmation before proceeding with analysis.
|
|
12
|
-
|
|
13
|
-
## Rules
|
|
14
|
-
|
|
15
|
-
- Focus only on loading skill artifacts and establishing the baseline — do not perform any diff or analysis
|
|
16
|
-
- Do not proceed if skill path is invalid or SKILL.md not found
|
|
17
|
-
- Present baseline summary clearly so user can confirm before analysis begins
|
|
18
|
-
- Docs-only limitation: If `metadata.json` indicates `source_type: "docs-only"` or `confidence_tier: "Quick"` with all T3 citations, inform user: "**This is a docs-only skill.** Drift detection compares against upstream documentation, not source code. Re-run `@Ferris US` to re-fetch documentation URLs and detect content changes." Recommend update-skill instead.
|
|
19
|
-
|
|
20
|
-
## MANDATORY SEQUENCE
|
|
21
|
-
|
|
22
|
-
**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change.
|
|
23
|
-
|
|
24
|
-
### 1. Get Skill Path
|
|
25
|
-
|
|
26
|
-
"**Audit Skill — Drift Detection**
|
|
27
|
-
|
|
28
|
-
Which skill would you like to audit? Please provide the skill name or path."
|
|
29
|
-
|
|
30
|
-
**If user provides skill name (not full path) — version-aware path resolution (see `knowledge/version-paths.md`):**
|
|
31
|
-
1. Read `{skills_output_folder}/.export-manifest.json` and look up the skill name in `exports` to get `active_version`
|
|
32
|
-
2. If found: resolve to `{skill_package}` = `{skills_output_folder}/{skill_name}/{active_version}/{skill_name}/`
|
|
33
|
-
3. If not in manifest: check for `active` symlink at `{skills_output_folder}/{skill_name}/active` — resolve to `{skill_group}/active/{skill_name}/`
|
|
34
|
-
4. If neither: fall back to flat path `{skills_output_folder}/{skill_name}/`. If SKILL.md exists at the flat path, auto-migrate per `knowledge/version-paths.md` migration rules
|
|
35
|
-
5. Store the resolved path as `{resolved_skill_package}`
|
|
36
|
-
|
|
37
|
-
**If user provides full path:**
|
|
38
|
-
- Use as provided
|
|
39
|
-
|
|
40
|
-
**Validate:** Check that `SKILL.md` exists at the resolved path.
|
|
41
|
-
- If missing → "Skill not found at `{resolved_skill_package}`. Check the path and try again."
|
|
42
|
-
- If found → Continue
|
|
43
|
-
|
|
44
|
-
### 2. Load Forge Tier
|
|
45
|
-
|
|
46
|
-
Load `{sidecar_path}/forge-tier.yaml` to detect available tools.
|
|
47
|
-
|
|
48
|
-
**If file missing:**
|
|
49
|
-
- "Setup-forge has not been run. Cannot determine tool availability. Run `[SF] Setup Forge` first."
|
|
50
|
-
- HALT workflow
|
|
51
|
-
|
|
52
|
-
**If found:**
|
|
53
|
-
- Extract tier level: Quick / Forge / Forge+ / Deep
|
|
54
|
-
- Extract available tools: gh_bridge, ast_bridge, qmd_bridge — see `knowledge/tool-resolution.md` for concrete tool resolution per IDE
|
|
55
|
-
|
|
56
|
-
**Apply tier override:** Read `{sidecar_path}/preferences.yaml`. If `tier_override` is set and is a valid tier value (Quick, Forge, Forge+, or Deep), use it instead of the detected tier.
|
|
57
|
-
|
|
58
|
-
### 3. Load Skill Artifacts
|
|
59
|
-
|
|
60
|
-
Load the following from the skill directory:
|
|
61
|
-
|
|
62
|
-
**Required:**
|
|
63
|
-
- `SKILL.md` — The skill document to audit
|
|
64
|
-
- `metadata.json` — Skill metadata (version, created date, export count)
|
|
65
|
-
|
|
66
|
-
**Extract from metadata.json:**
|
|
67
|
-
- `name`, `version`, `generation_date`, `confidence_tier` used during creation
|
|
68
|
-
- `source_root` — Resolved source code path used during extraction
|
|
69
|
-
|
|
70
|
-
**Detect split-body state:** If a `references/` directory exists and SKILL.md's `## Full` headings are absent or stubs, this is a split-body skill. Flag `split_body: true` in the baseline so downstream steps (especially semantic diff in step-04) know to also read `references/*.md` for complete content comparison.
|
|
71
|
-
|
|
72
|
-
### 4. Load Provenance Map
|
|
73
|
-
|
|
74
|
-
Search for provenance map at `{forge_data_folder}/{skill_name}/{active_version}/provenance-map.json` (i.e., `{forge_version}/provenance-map.json`). If not found at the versioned path, fall back to `{forge_data_folder}/{skill_name}/provenance-map.json`:
|
|
75
|
-
|
|
76
|
-
**If found:**
|
|
77
|
-
- Load and extract: export list, file mappings, extraction timestamps, confidence tiers
|
|
78
|
-
- Record provenance map age (days since last extraction)
|
|
79
|
-
|
|
80
|
-
**If missing at both paths:**
|
|
81
|
-
- "No provenance map found for `{skill_name}`. This skill may not have been created by create-skill."
|
|
82
|
-
- "**Degraded mode available:** I can perform text-based comparison without provenance data. Findings will have T1-low confidence."
|
|
83
|
-
- "**[D]egraded mode** — proceed with text-diff only"
|
|
84
|
-
- "**[X]** — abort audit"
|
|
85
|
-
- Wait for user selection. If D, set `degraded_mode: true`. If X, halt workflow.
|
|
86
|
-
|
|
87
|
-
### Stack Skill Detection
|
|
88
|
-
|
|
89
|
-
After loading provenance-map.json, detect skill type:
|
|
90
|
-
- If `provenance_version` is `"2.0"` and `skill_type` is `"stack"`: set `{is_stack_skill}` = true
|
|
91
|
-
- If provenance-map has top-level `libraries` key (v1 stack format): set `{is_stack_skill}` = true, `{legacy_stack_provenance}` = true
|
|
92
|
-
- Otherwise: `{is_stack_skill}` = false
|
|
93
|
-
|
|
94
|
-
If `{is_stack_skill}` is true and `constituents` array is present (compose-mode stack):
|
|
95
|
-
- For each constituent, compute the current metadata hash: read `{constituent.skill_path}/active/{constituent.skill_name}/metadata.json` and compute SHA-256
|
|
96
|
-
- Compare against `constituent.metadata_hash`
|
|
97
|
-
- Flag any mismatches as **constituent drift** with severity HIGH
|
|
98
|
-
- Record constituent freshness results for the report
|
|
99
|
-
|
|
100
|
-
If `{legacy_stack_provenance}` is true: log a note that this stack uses v1 provenance format with reduced audit depth (library-level only, no per-export verification).
|
|
101
|
-
|
|
102
|
-
### 5. Resolve Source Path
|
|
103
|
-
|
|
104
|
-
**If provenance map loaded:**
|
|
105
|
-
- Use `source_root` from provenance map as source code path
|
|
106
|
-
- Verify source path still exists and is accessible
|
|
107
|
-
- Extract `baseline_commit` = `provenance-map.source_commit` (fall back to `metadata.source_commit` if absent from the provenance map)
|
|
108
|
-
- Extract `baseline_ref` = `metadata.source_ref` (may be a tag, branch, `HEAD`, or `"local"`)
|
|
109
|
-
|
|
110
|
-
**If degraded mode:**
|
|
111
|
-
- Ask user: "Please provide the path to the current source code."
|
|
112
|
-
- `baseline_commit` and `baseline_ref` are unavailable — §5b will short-circuit
|
|
113
|
-
|
|
114
|
-
**Validate:** Confirm source directory exists and contains expected files.
|
|
115
|
-
|
|
116
|
-
### 5b. Detect Upstream Drift
|
|
117
|
-
|
|
118
|
-
Upstream drift detection is the primary use case of this workflow. If the local clone is still pinned to the baseline commit while upstream has shipped newer tags, auditing against the unchanged tree will misleadingly report CLEAN even after a major release.
|
|
119
|
-
|
|
120
|
-
**Skip this section** if any of the following hold:
|
|
121
|
-
- `baseline_ref` is `"local"`, `null`, or unset (non-git source)
|
|
122
|
-
- `{source_root}` is not a git worktree (`git -C {source_root} rev-parse --git-dir` fails)
|
|
123
|
-
- `baseline_commit` is unavailable
|
|
124
|
-
- Degraded mode is active (no provenance map)
|
|
125
|
-
|
|
126
|
-
When skipping, log the reason, then set the audit-ref context variables to baseline values so step-06 renders a coherent Provenance row: `audit_ref = baseline_ref or "(unknown)"`, `audit_ref_source = "baseline"` (or `"unavailable"` if both `baseline_ref` and `baseline_commit` are unset), `audit_commit = baseline_commit or "(unknown)"`, `latest_tag = null`, `remote_head = null`. Continue to §6.
|
|
127
|
-
|
|
128
|
-
**Otherwise:**
|
|
129
|
-
|
|
130
|
-
1. **Fetch upstream refs** (read-only, no working-tree mutation):
|
|
131
|
-
|
|
132
|
-
```bash
|
|
133
|
-
git -C {source_root} fetch --tags --quiet origin
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
If fetch fails (no network, no remote, detached clone), log the reason, record `upstream_fetch: "failed:{reason}"` in context, set `audit_ref = baseline_ref`, `audit_ref_source = "baseline"`, `audit_commit = baseline_commit`, `latest_tag = null`, `remote_head = null`, and continue to §6 without gating.
|
|
137
|
-
|
|
138
|
-
2. **Find latest remote ref:**
|
|
139
|
-
- Remote default-branch HEAD: `git -C {source_root} rev-parse origin/HEAD` (fall back to `origin/main` or `origin/master` if the symbolic ref is unavailable) — record as `remote_head`.
|
|
140
|
-
- Newest semver tag: `git -C {source_root} for-each-ref --sort=-v:refname --format='%(refname:short)' 'refs/tags/v*' | head -1` — record as `latest_tag`.
|
|
141
|
-
|
|
142
|
-
3. **Compare to baseline:**
|
|
143
|
-
- If `baseline_commit` equals the commit that `remote_head` resolves to AND (`latest_tag` is empty OR semver-equals `baseline_ref` OR is older than `baseline_ref`), upstream has not moved. Set `audit_ref = baseline_ref`, `audit_ref_source = "baseline"`, `audit_commit = baseline_commit`. Continue to §6.
|
|
144
|
-
- Otherwise upstream has moved — proceed to the gate.
|
|
145
|
-
|
|
146
|
-
4. **User gate — Upstream drift detected:**
|
|
147
|
-
|
|
148
|
-
"**Upstream has moved since this skill was created.**
|
|
149
|
-
|
|
150
|
-
| | Baseline | Upstream |
|
|
151
|
-
|---|---|---|
|
|
152
|
-
| Ref | `{baseline_ref}` | `{latest_tag}` (newest tag) / `{remote_head}` (default HEAD) |
|
|
153
|
-
| Commit | `{baseline_commit_short}` | `{latest_tag_commit_short}` / `{remote_head_short}` |
|
|
154
|
-
|
|
155
|
-
Auditing against the baseline clone will report little-to-no structural drift even if the upstream API has changed. Options:
|
|
156
|
-
|
|
157
|
-
- **[C] Checkout-and-audit-against-latest** — checkout `{latest_tag}` (or `{remote_head}` if no newer tag) in `{source_root}` and audit against that. Re-extraction will reflect the current upstream surface.
|
|
158
|
-
- **[S] Stay-on-baseline** — keep `{source_root}` at `{baseline_ref}` and audit structural drift against the unchanged tree. The report will note `audit_ref = baseline`.
|
|
159
|
-
- **[X] Abort** — halt the workflow without producing a report.
|
|
160
|
-
|
|
161
|
-
**Select:** [C] / [S] / [X]"
|
|
162
|
-
|
|
163
|
-
**Gate handling:**
|
|
164
|
-
- **[C]:** Acquire an exclusive lock on `{source_root}/.skf-workspace.lock` (`flock -x` or `fcntl.flock(LOCK_EX)`) before mutating the working tree — matches the concurrency discipline in `src/skf-create-skill/references/source-resolution-protocols.md` and avoids racing with a concurrent create-skill / test-skill run against the same workspace clone. If `flock` is unavailable, emit a warning and proceed. Then `git -C {source_root} checkout {chosen_ref}` (prefer `latest_tag` when present, else `remote_head`). Set `audit_ref = {chosen_ref}`, `audit_ref_source = "checkout-latest"`, `audit_commit = git rev-parse HEAD`. Hold the lock through step-02 re-extraction and release only after the extraction snapshot is complete.
|
|
165
|
-
- **[S]:** Keep baseline. Set `audit_ref = baseline_ref`, `audit_ref_source = "baseline"`, `audit_commit = baseline_commit`.
|
|
166
|
-
- **[X]:** HALT workflow — do not create drift report.
|
|
167
|
-
- **Other input:** help user, redisplay gate.
|
|
168
|
-
|
|
169
|
-
**Headless default** (when `{headless_mode}`): auto-select **[S]** and emit a loud log line: `"headless: upstream drift detected ({baseline_ref} → {latest_tag or remote_head}); staying on baseline. Re-run interactively to audit against latest."` Do not check out in headless mode — silent ref changes under automation would mutate the user's working tree without consent.
|
|
170
|
-
|
|
171
|
-
5. **Record for report:** store `audit_ref`, `audit_ref_source`, `audit_commit`, `latest_tag`, `remote_head`, and `baseline_commit` in context. Step-06 surfaces them in the Provenance section so readers can tell which comparison actually ran.
|
|
172
|
-
|
|
173
|
-
### 6. Create Drift Report
|
|
174
|
-
|
|
175
|
-
Create `{outputFile}` from `{templateFile}`:
|
|
176
|
-
|
|
177
|
-
- Populate frontmatter: skill_name, skill_path, source_path, forge_tier, date, user_name
|
|
178
|
-
- Set `stepsCompleted: ['step-01-init']`
|
|
179
|
-
- Fill Audit Summary skeleton with loaded baseline data
|
|
180
|
-
|
|
181
|
-
### 7. Present Baseline Summary (User Gate)
|
|
182
|
-
|
|
183
|
-
"**Audit Baseline Loaded**
|
|
184
|
-
|
|
185
|
-
| Field | Value |
|
|
186
|
-
|-------|-------|
|
|
187
|
-
| **Skill** | {skill_name} v{version} |
|
|
188
|
-
| **Created** | {generation_date} |
|
|
189
|
-
| **Source** | {source_path} |
|
|
190
|
-
| **Forge Tier** | {current_tier} (created at {original_tier}) |
|
|
191
|
-
| **Provenance Age** | {days} days since last extraction |
|
|
192
|
-
| **Export Count** | {count} exports in provenance map |
|
|
193
|
-
| **Mode** | {normal / degraded} |
|
|
194
|
-
|
|
195
|
-
**Analysis plan based on tier:**
|
|
196
|
-
- {Quick: text-diff comparison (T1-low confidence)}
|
|
197
|
-
- {Forge: AST structural comparison (T1 confidence)}
|
|
198
|
-
- {Forge+: AST structural comparison + CCC-assisted rename detection (T1 confidence)}
|
|
199
|
-
- {Deep: AST structural + QMD semantic comparison (T1 + T2 confidence)}
|
|
200
|
-
|
|
201
|
-
**Ready to begin drift analysis?**"
|
|
202
|
-
|
|
203
|
-
### 8. Present MENU OPTIONS
|
|
204
|
-
|
|
205
|
-
Display: "**Select:** [C] Continue to Analysis"
|
|
206
|
-
|
|
207
|
-
#### Menu Handling Logic:
|
|
208
|
-
|
|
209
|
-
- IF C: Save baseline to {outputFile}, update frontmatter stepsCompleted, then load, read entire file, then execute {nextStepFile}
|
|
210
|
-
- IF Any other: help user, then [Redisplay Menu Options](#8-present-menu-options)
|
|
211
|
-
|
|
212
|
-
#### EXECUTION RULES:
|
|
213
|
-
|
|
214
|
-
- ALWAYS halt and wait for user input after presenting menu
|
|
215
|
-
- **GATE [default: C]** — If `{headless_mode}`: auto-proceed with [C] Continue, log: "headless: auto-continue past baseline confirmation"
|
|
216
|
-
- ONLY proceed to next step when user selects 'C'
|
|
217
|
-
|
|
218
|
-
## CRITICAL STEP COMPLETION NOTE
|
|
219
|
-
|
|
220
|
-
ONLY WHEN C is selected and the drift report has been created with baseline data populated, will you then load and read fully `{nextStepFile}` to execute and begin source re-indexing.
|
|
221
|
-
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
nextStepFile: './step-02-gap-analysis.md'
|
|
3
|
-
refinementRulesData: 'references/refinement-rules.md'
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Step 1: Initialize Refinement
|
|
7
|
-
|
|
8
|
-
## STEP GOAL:
|
|
9
|
-
|
|
10
|
-
Load the architecture document (required), scan the skills folder to build a skill inventory with metadata, load the optional VS feasibility report for context, validate that all inputs exist and meet minimum requirements, and present an initialization summary before auto-proceeding.
|
|
11
|
-
|
|
12
|
-
## Rules
|
|
13
|
-
|
|
14
|
-
- Focus only on loading inputs, scanning skills, and validating prerequisites — do not perform analysis
|
|
15
|
-
- Present a clear initialization summary so downstream steps have validated inputs
|
|
16
|
-
|
|
17
|
-
## MANDATORY SEQUENCE
|
|
18
|
-
|
|
19
|
-
**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise.
|
|
20
|
-
|
|
21
|
-
### 1. Accept Input Documents
|
|
22
|
-
|
|
23
|
-
"**Refine Architecture — Evidence-Backed Refinement**
|
|
24
|
-
|
|
25
|
-
Please provide the following:
|
|
26
|
-
1. **Architecture document path** (REQUIRED) — your project's architecture doc to refine
|
|
27
|
-
2. **VS feasibility report path** (OPTIONAL) — from a previous [VS] Verify Stack run, for additional context"
|
|
28
|
-
|
|
29
|
-
Wait for user input. Store the validated architecture document path as `architecture_doc`. **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".
|
|
30
|
-
|
|
31
|
-
**Validate architecture document:**
|
|
32
|
-
- Confirm the file exists and is readable
|
|
33
|
-
- If missing or unreadable: "Architecture document not found at `{path}`. Provide a valid path."
|
|
34
|
-
- HALT until a valid architecture document is provided
|
|
35
|
-
|
|
36
|
-
**Validate VS report (if provided):**
|
|
37
|
-
- Confirm the file exists and is readable
|
|
38
|
-
- If missing at user-provided path: attempt auto-probe (below) before giving up
|
|
39
|
-
- Store VS report availability as `vs_report_available: true|false` and `vs_report_path`
|
|
40
|
-
|
|
41
|
-
### 2. Scan Skills Folder
|
|
42
|
-
|
|
43
|
-
Read the `{skills_output_folder}` directory. Skills use a version-nested directory structure (see `knowledge/version-paths.md`).
|
|
44
|
-
|
|
45
|
-
**Version-aware skill discovery:**
|
|
46
|
-
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}/`
|
|
47
|
-
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}/`
|
|
48
|
-
3. Fall back to flat path `{skills_output_folder}/{dir_name}/` for unmigrated skills
|
|
49
|
-
|
|
50
|
-
For each resolved skill package, check for the presence of `SKILL.md` and `metadata.json`.
|
|
51
|
-
|
|
52
|
-
**For each valid skill directory, extract from metadata.json:**
|
|
53
|
-
- `name` — skill name
|
|
54
|
-
- `language` — primary language
|
|
55
|
-
- `confidence_tier` — Quick, Forge, Forge+, or Deep
|
|
56
|
-
- `exports_documented` — read from `stats.exports_documented` in metadata.json (count of documented exports)
|
|
57
|
-
- `source_repo` or `source_root` — original source repository
|
|
58
|
-
|
|
59
|
-
**Build a skill inventory** as an internal list of all loaded skills with the fields above.
|
|
60
|
-
|
|
61
|
-
**If a resolved skill package lacks SKILL.md or metadata.json:**
|
|
62
|
-
- Log: "Skipping `{dir_name}` — missing SKILL.md or metadata.json"
|
|
63
|
-
- Do not include in inventory
|
|
64
|
-
|
|
65
|
-
### 3. Validate Minimum Requirements
|
|
66
|
-
|
|
67
|
-
**Check skill count:**
|
|
68
|
-
- At least 1 valid skill must exist
|
|
69
|
-
- If no skills found: "**Cannot proceed.** No skills found in `{skills_output_folder}`. Generate skills with [CS] Create Skill or [QS] Quick Skill, then re-run [RA]."
|
|
70
|
-
- HALT workflow
|
|
71
|
-
- If exactly 1 valid skill found: "⚠️ Proceeding with 1 skill. Note: gap analysis will find no gaps — pairwise analysis requires at least 2 skills. Step 02 will still execute and issue an appropriate notice. Issue detection and improvement detection will proceed normally."
|
|
72
|
-
|
|
73
|
-
**Check output_folder:**
|
|
74
|
-
- Verify `output_folder` was resolved from config.yaml and is non-empty
|
|
75
|
-
- If undefined or empty: "**Cannot proceed.** `output_folder` is not configured in config.yaml. Add an `output_folder` path and re-run [RA]."
|
|
76
|
-
- HALT workflow
|
|
77
|
-
- Verify the `output_folder` directory exists. If it does not exist, create it. HALT with error if creation fails.
|
|
78
|
-
|
|
79
|
-
**Check forge_data_folder:**
|
|
80
|
-
- Verify `forge_data_folder` was resolved from config.yaml and is non-empty
|
|
81
|
-
- If undefined or empty: "**Cannot proceed.** `forge_data_folder` is not configured in config.yaml. Add a `forge_data_folder` path to your config.yaml and re-run [RA]."
|
|
82
|
-
- HALT workflow
|
|
83
|
-
- Verify the `forge_data_folder` directory exists. If it does not exist, attempt to create it. If creation fails: "**Cannot proceed.** `forge_data_folder` at `{forge_data_folder}` does not exist and could not be created. Create the directory manually and re-run [RA]."
|
|
84
|
-
- HALT workflow on creation failure
|
|
85
|
-
|
|
86
|
-
**Check architecture document:**
|
|
87
|
-
- Confirm it was loaded successfully in section 1
|
|
88
|
-
- If not: HALT with error (should not reach here if section 1 validation passed)
|
|
89
|
-
|
|
90
|
-
### 3b. Auto-Probe VS Report
|
|
91
|
-
|
|
92
|
-
**Auto-probe VS report (if not provided by user in section 1, OR if user-provided path was invalid):**
|
|
93
|
-
- Only attempt if `forge_data_folder` is non-empty and the directory exists (validated above); otherwise skip probe and set `vs_report_available: false`
|
|
94
|
-
- Check for `{forge_data_folder}/feasibility-report-{project_name}.md`
|
|
95
|
-
- If found: "Auto-discovered VS report at `{path}`. Loading for additional context."
|
|
96
|
-
- Store `vs_report_available: true` and `vs_report_path`
|
|
97
|
-
- If not found: `vs_report_available: false` — "Proceeding without VS report — issue detection will rely on skill data only."
|
|
98
|
-
|
|
99
|
-
### 3c. Reset RA State File
|
|
100
|
-
|
|
101
|
-
Create (or overwrite) `{forge_data_folder}/ra-state-{project_name}.md` with a fresh header:
|
|
102
|
-
|
|
103
|
-
```markdown
|
|
104
|
-
<!-- RA state for {project_name} — generated {current_date} -->
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
This ensures steps 02-04 append to a clean slate and context recovery in step-05 never loads stale findings from a prior run.
|
|
108
|
-
|
|
109
|
-
### 4. Load Refinement Rules
|
|
110
|
-
|
|
111
|
-
Load `{refinementRulesData}` for reference by downstream steps.
|
|
112
|
-
|
|
113
|
-
Extract: gap detection rules, issue detection rules, improvement detection rules, citation format, and preservation rules.
|
|
114
|
-
|
|
115
|
-
### 5. Display Initialization Summary
|
|
116
|
-
|
|
117
|
-
"**Architecture Refinement Initialized**
|
|
118
|
-
|
|
119
|
-
| Field | Value |
|
|
120
|
-
|-------|-------|
|
|
121
|
-
| **Architecture Doc** | {architecture_doc} |
|
|
122
|
-
| **VS Report** | {vs_report_path or 'Not provided — issue detection will use skill data only'} |
|
|
123
|
-
| **Skills Loaded** | {skill_count} |
|
|
124
|
-
|
|
125
|
-
**Skill Inventory:**
|
|
126
|
-
|
|
127
|
-
| Skill | Language | Tier | Exports |
|
|
128
|
-
|-------|----------|------|---------|
|
|
129
|
-
| {skill_name} | {language} | {confidence_tier} | {exports_documented} |
|
|
130
|
-
|
|
131
|
-
**Proceeding to gap analysis...**"
|
|
132
|
-
|
|
133
|
-
### 6. Auto-Proceed to Next Step
|
|
134
|
-
|
|
135
|
-
Load, read the full file and then execute `{nextStepFile}`.
|
|
136
|
-
|
|
@@ -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 4: 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 rename-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-03
|
|
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,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.
|