bmad-module-skill-forge 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/docs/_data/pinned.yaml +1 -1
  3. package/docs/workflows.md +1 -1
  4. package/package.json +2 -2
  5. package/src/knowledge/version-paths.md +4 -3
  6. package/src/shared/health-check.md +1 -1
  7. package/src/shared/scripts/schemas/skill-brief.v1.json +5 -0
  8. package/src/shared/scripts/skf-atomic-write.py +4 -1
  9. package/src/shared/scripts/skf-detect-language.py +34 -0
  10. package/src/shared/scripts/skf-detect-workspaces.py +54 -0
  11. package/src/shared/scripts/skf-enumerate-stack-skills.py +107 -16
  12. package/src/shared/scripts/skf-forge-tier-rw.py +4 -1
  13. package/src/shared/scripts/skf-manifest-ops.py +8 -4
  14. package/src/shared/scripts/skf-merge-ccc-exclusions.py +4 -1
  15. package/src/shared/scripts/skf-qmd-classify-collections.py +29 -3
  16. package/src/shared/scripts/skf-rebuild-managed-sections.py +72 -7
  17. package/src/shared/scripts/skf-scan-skill-md-structure.py +13 -3
  18. package/src/shared/scripts/skf-validate-brief-inputs.py +79 -18
  19. package/src/shared/scripts/skf-validate-brief-schema.py +47 -1
  20. package/src/shared/scripts/skf-validate-frontmatter.py +60 -2
  21. package/src/shared/scripts/skf-write-skill-brief.py +97 -17
  22. package/src/skf-analyze-source/assets/skill-brief-schema.md +10 -2
  23. package/src/skf-analyze-source/references/generate-briefs.md +30 -9
  24. package/src/skf-analyze-source/references/recommend.md +1 -1
  25. package/src/skf-brief-skill/SKILL.md +3 -3
  26. package/src/skf-brief-skill/assets/skill-brief-schema.md +6 -1
  27. package/src/skf-brief-skill/references/analyze-target.md +22 -6
  28. package/src/skf-brief-skill/references/confirm-brief.md +4 -0
  29. package/src/skf-brief-skill/references/gather-intent.md +14 -4
  30. package/src/skf-brief-skill/references/headless-args.md +3 -2
  31. package/src/skf-brief-skill/references/portfolio-similarity-check.md +16 -8
  32. package/src/skf-brief-skill/references/scope-definition.md +20 -2
  33. package/src/skf-brief-skill/references/version-resolution.md +1 -1
  34. package/src/skf-brief-skill/references/write-brief.md +8 -2
  35. package/src/skf-create-skill/assets/compile-assembly-rules.md +19 -0
  36. package/src/skf-create-skill/assets/skill-sections.md +1 -0
  37. package/src/skf-create-skill/assets/tessl-dismissal-rules.md +18 -5
  38. package/src/skf-create-skill/references/compile.md +5 -2
  39. package/src/skf-create-skill/references/extract.md +8 -3
  40. package/src/skf-create-skill/references/extraction-patterns.md +14 -5
  41. package/src/skf-create-skill/references/generate-artifacts.md +5 -1
  42. package/src/skf-create-skill/references/source-resolution-protocols.md +5 -2
  43. package/src/skf-create-skill/references/validate.md +4 -3
  44. package/src/skf-create-stack-skill/assets/provenance-map-schema.md +3 -3
  45. package/src/skf-create-stack-skill/assets/stack-skill-template.md +56 -0
  46. package/src/skf-create-stack-skill/references/compile-stack.md +13 -2
  47. package/src/skf-create-stack-skill/references/compose-mode-rules.md +2 -0
  48. package/src/skf-create-stack-skill/references/detect-integrations.md +5 -2
  49. package/src/skf-create-stack-skill/references/generate-output.md +49 -9
  50. package/src/skf-create-stack-skill/references/validate.md +8 -5
  51. package/src/skf-export-skill/references/load-skill.md +5 -4
  52. package/src/skf-export-skill/references/manifest-rebuild.md +1 -1
  53. package/src/skf-export-skill/references/token-report.md +2 -2
  54. package/src/skf-export-skill/references/update-context.md +25 -11
  55. package/src/skf-quick-skill/assets/skill-template.md +2 -2
  56. package/src/skf-quick-skill/references/compile.md +4 -2
  57. package/src/skf-quick-skill/references/write-and-validate.md +2 -2
  58. package/src/skf-refine-architecture/SKILL.md +1 -1
  59. package/src/skf-refine-architecture/references/gap-analysis.md +30 -4
  60. package/src/skf-refine-architecture/references/init.md +2 -0
  61. package/src/skf-refine-architecture/references/issue-detection.md +8 -3
  62. package/src/skf-test-skill/references/coherence-check.md +4 -4
  63. package/src/skf-test-skill/references/coverage-check.md +58 -16
  64. package/src/skf-test-skill/references/external-validators.md +7 -7
  65. package/src/skf-test-skill/references/init.md +5 -4
  66. package/src/skf-test-skill/references/score.md +6 -3
  67. package/src/skf-test-skill/references/scoring-rules.md +12 -0
  68. package/src/skf-test-skill/references/source-access-protocol.md +19 -3
  69. package/src/skf-test-skill/scripts/compute-score.py +4 -1
  70. package/src/skf-update-skill/references/detect-changes.md +15 -2
  71. package/src/skf-update-skill/references/merge.md +22 -0
  72. package/src/skf-update-skill/references/re-extract.md +19 -7
  73. package/src/skf-update-skill/references/write.md +3 -0
  74. package/src/skf-verify-stack/SKILL.md +2 -2
  75. package/src/skf-verify-stack/assets/feasibility-report-template.md +1 -1
  76. package/src/skf-verify-stack/references/coverage.md +35 -6
  77. package/src/skf-verify-stack/references/init.md +6 -2
  78. package/src/skf-verify-stack/references/integration-verification-rules.md +1 -1
  79. package/src/skf-verify-stack/references/integrations.md +7 -3
  80. package/src/skf-verify-stack/references/report.md +5 -1
  81. package/src/skf-verify-stack/references/requirements.md +3 -1
  82. package/src/skf-verify-stack/references/synthesize.md +11 -3
  83. package/tools/cli/lib/installer.js +1 -0
@@ -5,7 +5,9 @@
5
5
  # so every stage sees the same path.
6
6
  outputFile: '{outputFolderPath}/feasibility-report-{project_slug}-{timestamp}.md'
7
7
  outputFileLatest: '{outputFolderPath}/feasibility-report-{project_slug}-latest.md'
8
- feasibilitySchemaRef: 'src/shared/references/feasibility-report-schema.md'
8
+ feasibilitySchemaProbeOrder:
9
+ - '{project-root}/_bmad/skf/shared/references/feasibility-report-schema.md'
10
+ - '{project-root}/src/shared/references/feasibility-report-schema.md'
9
11
  atomicWriteProbeOrder:
10
12
  - '{project-root}/_bmad/skf/shared/scripts/skf-atomic-write.py'
11
13
  - '{project-root}/src/shared/scripts/skf-atomic-write.py'
@@ -31,6 +33,8 @@ Present the complete feasibility report to the user. Display the overall verdict
31
33
 
32
34
  Read the entire `{outputFile}` to have all data available for presentation.
33
35
 
36
+ **Resolve `{feasibilitySchemaRef}`** from `{feasibilitySchemaProbeOrder}`; first existing path wins (installed SKF module path first, dev-checkout `src/` fallback).
37
+
34
38
  Verify all expected sections are present in order per `{feasibilitySchemaRef}`: `## Executive Summary`, `## Coverage Analysis`, `## Integration Verdicts`, `## Recommendations`, `## Evidence Sources`. If any section is missing or out of order, HALT (exit code 5, `halt_reason: "schema-violation"`) and report the schema violation — do not display partial results. In headless, emit the error envelope per SKILL.md "Result Contract (Headless)" with `report_path: "{outputFile}"`, `overall_verdict: null`.
35
39
 
36
40
  **Extract metrics from `{outputFile}` frontmatter** (per shared schema in `{feasibilitySchemaRef}`): `skillsAnalyzed`, `coveragePercentage`, `pairsVerified` (as `verified_count`), `pairsPlausible` (as `plausible_count`), `pairsRisky` (as `risky_count`), `pairsBlocked` (as `blocked_count`), `requirementsFulfilled` (as `fulfilled_count`), `requirementsPartial` (as `partial_count`), `requirementsNotAddressed` (as `not_addressed_count`), `requirementsPass`, `overallVerdict`, and `recommendationCount`. Use these mapped display names in the summary table and next steps below.
@@ -1,6 +1,8 @@
1
1
  ---
2
2
  nextStepFile: 'synthesize.md'
3
- feasibilitySchemaRef: 'src/shared/references/feasibility-report-schema.md'
3
+ feasibilitySchemaProbeOrder:
4
+ - '{project-root}/_bmad/skf/shared/references/feasibility-report-schema.md'
5
+ - '{project-root}/src/shared/references/feasibility-report-schema.md'
4
6
  atomicWriteProbeOrder:
5
7
  - '{project-root}/_bmad/skf/shared/scripts/skf-atomic-write.py'
6
8
  - '{project-root}/src/shared/scripts/skf-atomic-write.py'
@@ -1,6 +1,8 @@
1
1
  ---
2
2
  nextStepFile: 'report.md'
3
- feasibilitySchemaRef: 'src/shared/references/feasibility-report-schema.md'
3
+ feasibilitySchemaProbeOrder:
4
+ - '{project-root}/_bmad/skf/shared/references/feasibility-report-schema.md'
5
+ - '{project-root}/src/shared/references/feasibility-report-schema.md'
4
6
  atomicWriteProbeOrder:
5
7
  - '{project-root}/_bmad/skf/shared/scripts/skf-atomic-write.py'
6
8
  - '{project-root}/src/shared/scripts/skf-atomic-write.py'
@@ -25,7 +27,7 @@ Calculate the overall feasibility verdict based on all three analysis passes, ge
25
27
 
26
28
  ### 1. Calculate Overall Verdict
27
29
 
28
- **Zero-coverage short-circuit (evaluate before anything else):** Read `coveragePercentage` from `{outputFile}` frontmatter. If `coveragePercentage == 0`, force `overallVerdict: NOT_FEASIBLE` with rationale "no coverage — analysis vacuous: zero generated skills match the architecture's referenced technologies, so integration and requirements verdicts cannot produce meaningful evidence." Skip the remainder of the verdict ladder; proceed directly to section 2 to generate recommendations for the Missing skills surfaced by Step 02.
30
+ **Zero-coverage short-circuit (evaluate before anything else):** Read `coveragePercentage` from `{outputFile}` frontmatter. If `coveragePercentage == 0`, force `overallVerdict: NOT_FEASIBLE` with rationale "no coverage — analysis vacuous: zero generated skills match the architecture's referenced technologies, so integration and requirements verdicts cannot produce meaningful evidence." Skip the remainder of the verdict ladder; proceed directly to section 2 to generate recommendations for the Missing and/or Replaced technologies surfaced by Step 02.
29
31
 
30
32
  Apply the following decision logic using findings from all completed passes:
31
33
 
@@ -37,7 +39,7 @@ Apply the following decision logic using findings from all completed passes:
37
39
 
38
40
  **CONDITIONALLY_FEASIBLE (evaluate second):**
39
41
  If ANY of the following apply, the verdict is `CONDITIONALLY_FEASIBLE`. Include ALL matching conditions in the rationale:
40
- - Any technology is **Missing** from coverage (no skill exists)
42
+ - Any technology is **Missing** from coverage (no skill exists). Technologies marked **Replaced** in Step 02 are intentionally being removed and do NOT count as Missing — they never trigger CONDITIONALLY_FEASIBLE or a [CS]/[QS] recommendation.
41
43
  - Any integration is **Risky** (but none Blocked)
42
44
  - Requirements have any **Not Addressed** items
43
45
  - Requirements have any **Partially Fulfilled** items
@@ -62,6 +64,10 @@ For each non-verified finding across all passes, generate an actionable next ste
62
64
  **Missing skill (from Step 02):**
63
65
  - "Run **[CS] Create Skill** or **[QS] Quick Skill** for `{library_name}`, then re-run **[VS]** to verify coverage."
64
66
 
67
+ **Replaced / being-removed technology (from Step 02):**
68
+ - "`{library_name}` is marked for removal/replacement in the architecture document — no skill is needed. Remove it from the architecture document (or, if it is in fact staying, correct the document to drop the removal marker), then re-run **[VS]**."
69
+ - Do NOT emit a [CS]/[QS] recommendation for a Replaced technology — forging a skill for a technology that is being deleted is exactly the misfire this category prevents.
70
+
65
71
  **Risky integration (from Step 03):**
66
72
  - If protocol mismatch → "Consider adding a bridge layer between `{lib_a}` and `{lib_b}` (e.g., HTTP adapter, message queue). Document the bridge in the architecture."
67
73
  - If type incompatibility → "Add a serialization/conversion layer between `{lib_a}` and `{lib_b}` to resolve the type mismatch identified in their API surfaces."
@@ -125,6 +131,8 @@ Assemble the following for the report:
125
131
 
126
132
  **Resolve `{atomicWriteHelper}`** from `{atomicWriteProbeOrder}`; first existing path wins. HALT if no candidate exists.
127
133
 
134
+ **Resolve `{feasibilitySchemaRef}`** from `{feasibilitySchemaProbeOrder}`; first existing path wins (installed SKF module path first, dev-checkout `src/` fallback).
135
+
128
136
  Write the **Recommendations** and **Evidence Sources** sections to `{outputFile}` (per the fixed heading order in `{feasibilitySchemaRef}`):
129
137
  - Include overall verdict with rationale in the `## Executive Summary` section (replace the placeholder text from the template)
130
138
  - Include prioritized recommendation list under `## Recommendations`
@@ -227,6 +227,7 @@ class Installer {
227
227
  project_name: config.project_name || 'Untitled Project',
228
228
  communication_language: 'en',
229
229
  document_output_language: 'en',
230
+ output_folder: config.output_folder || '_bmad-output',
230
231
  skills_output_folder: config.skills_output_folder || 'skills',
231
232
  forge_data_folder: config.forge_data_folder || 'forge-data',
232
233
  sidecar_path: '_bmad/_memory/forger-sidecar',