bmad-module-skill-forge 1.5.0 → 1.6.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 (38) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/docs/_data/pinned.yaml +1 -1
  3. package/package.json +1 -1
  4. package/src/shared/scripts/skf-description-guard.py +33 -80
  5. package/src/shared/scripts/skf-detect-tools.py +50 -8
  6. package/src/shared/scripts/skf-manifest-ops.py +22 -6
  7. package/src/skf-analyze-source/references/continue.md +3 -1
  8. package/src/skf-analyze-source/references/identify-units.md +8 -4
  9. package/src/skf-analyze-source/references/init.md +6 -4
  10. package/src/skf-analyze-source/references/scan-project.md +6 -2
  11. package/src/skf-audit-skill/references/init.md +9 -3
  12. package/src/skf-audit-skill/references/structural-diff.md +9 -3
  13. package/src/skf-brief-skill/SKILL.md +3 -1
  14. package/src/skf-brief-skill/references/analyze-target.md +22 -10
  15. package/src/skf-brief-skill/references/gather-intent.md +71 -6
  16. package/src/skf-brief-skill/references/headless-args.md +1 -1
  17. package/src/skf-brief-skill/references/qmd-collection-registration.md +1 -1
  18. package/src/skf-brief-skill/references/scope-definition.md +8 -4
  19. package/src/skf-brief-skill/references/write-brief.md +24 -8
  20. package/src/skf-create-skill/assets/compile-assembly-rules.md +1 -1
  21. package/src/skf-create-skill/assets/skill-sections.md +1 -1
  22. package/src/skf-create-skill/references/extraction-patterns.md +2 -0
  23. package/src/skf-create-skill/references/validate.md +2 -2
  24. package/src/skf-create-stack-skill/references/detect-integrations.md +7 -2
  25. package/src/skf-create-stack-skill/references/detect-manifests.md +6 -2
  26. package/src/skf-create-stack-skill/references/parallel-extract.md +6 -2
  27. package/src/skf-export-skill/references/preflight-snippet-root-probe.md +6 -1
  28. package/src/skf-export-skill/references/summary.md +4 -4
  29. package/src/skf-export-skill/references/update-context.md +2 -2
  30. package/src/skf-test-skill/SKILL.md +1 -1
  31. package/src/skf-test-skill/references/coherence-check.md +14 -7
  32. package/src/skf-update-skill/references/init.md +8 -1
  33. package/src/skf-verify-stack/references/coverage.md +6 -2
  34. package/src/skf-verify-stack/references/init.md +6 -2
  35. package/src/skf-verify-stack/references/integrations.md +6 -2
  36. package/src/skf-verify-stack/references/report.md +6 -2
  37. package/src/skf-verify-stack/references/requirements.md +7 -3
  38. package/src/skf-verify-stack/references/synthesize.md +6 -2
@@ -3,7 +3,9 @@ nextStepFile: 'requirements.md'
3
3
  integrationRulesData: '{integrationRulesPath}'
4
4
  coveragePatternsData: '{coveragePatternsPath}'
5
5
  feasibilitySchemaRef: 'src/shared/references/feasibility-report-schema.md'
6
- atomicWriteScript: '{project-root}/src/shared/scripts/skf-atomic-write.py'
6
+ atomicWriteProbeOrder:
7
+ - '{project-root}/_bmad/skf/shared/scripts/skf-atomic-write.py'
8
+ - '{project-root}/src/shared/scripts/skf-atomic-write.py'
7
9
  outputFile: '{outputFolderPath}/feasibility-report-{project_slug}-{timestamp}.md'
8
10
  outputFileLatest: '{outputFolderPath}/feasibility-report-{project_slug}-latest.md'
9
11
  ---
@@ -160,12 +162,14 @@ For each integration pair `{library_a, library_b}`, apply the verification proto
160
162
 
161
163
  ### 6. Append to Report
162
164
 
165
+ **Resolve `{atomicWriteHelper}`** from `{atomicWriteProbeOrder}`; first existing path wins. HALT if no candidate exists.
166
+
163
167
  Write the **Integration Verdicts** section to `{outputFile}` (heading is fixed — consumers grep for `## Integration Verdicts`; the table header MUST be the canonical `| lib_a | lib_b | verdict | rationale |` per `{feasibilitySchemaRef}`; the skill-local display table with the extra Context/Source/Evidence columns can be rendered beneath it for human readers):
164
168
  - Emit the canonical `| lib_a | lib_b | verdict | rationale |` table first (verdict tokens MUST be one of `Verified`, `Plausible`, `Risky`, `Blocked` — case-sensitive)
165
169
  - Include the extended table with Context, Source, and Evidence columns below it
166
170
  - Include recommendations for Risky and Blocked pairs (Blocked recommendations MUST cite a named candidate per step 5 H6, or the explicit no-candidate notice)
167
171
  - Update frontmatter: append `'integrations'` to `stepsCompleted`; set `pairsVerified`, `pairsPlausible`, `pairsRisky`, `pairsBlocked` counts
168
- - Pipe the updated full content through `python3 {atomicWriteScript} write --target {outputFile}` and again with `--target {outputFileLatest}`
172
+ - Pipe the updated full content through `python3 {atomicWriteHelper} write --target {outputFile}` and again with `--target {outputFileLatest}`
169
173
 
170
174
  ### 7. Auto-Proceed to Next Step
171
175
 
@@ -6,7 +6,9 @@
6
6
  outputFile: '{outputFolderPath}/feasibility-report-{project_slug}-{timestamp}.md'
7
7
  outputFileLatest: '{outputFolderPath}/feasibility-report-{project_slug}-latest.md'
8
8
  feasibilitySchemaRef: 'src/shared/references/feasibility-report-schema.md'
9
- atomicWriteScript: '{project-root}/src/shared/scripts/skf-atomic-write.py'
9
+ atomicWriteProbeOrder:
10
+ - '{project-root}/_bmad/skf/shared/scripts/skf-atomic-write.py'
11
+ - '{project-root}/src/shared/scripts/skf-atomic-write.py'
10
12
  nextStepFile: 'health-check.md'
11
13
  ---
12
14
 
@@ -98,9 +100,11 @@ Based on the overall verdict, present the appropriate recommendation:
98
100
 
99
101
  ### 4b. Result Contract
100
102
 
103
+ **Resolve `{atomicWriteHelper}`** from `{atomicWriteProbeOrder}`; first existing path wins. HALT if no candidate exists.
104
+
101
105
  Write the result contract per `shared/references/output-contract-schema.md`: the per-run record at `{forge_data_folder}/verify-stack-result-{YYYYMMDD-HHmmss}.json` (UTC timestamp, resolution to seconds) and a copy at `{forge_data_folder}/verify-stack-result-latest.json` (stable path for pipeline consumers — copy, not symlink). Include the feasibility report path (both `{outputFile}` and `{outputFileLatest}`) in `outputs`; include `overallVerdict` (`FEASIBLE` / `CONDITIONALLY_FEASIBLE` / `NOT_FEASIBLE`), `coveragePercentage`, and `recommendationCount` in `summary` — use the case-sensitive schema tokens.
102
106
 
103
- Write both JSON files through `python3 {atomicWriteScript} write --target ...` to avoid partial-write corruption. On any non-zero exit: HALT (exit code 4, `halt_reason: "write-failed"`) and emit the error envelope.
107
+ Write both JSON files through `python3 {atomicWriteHelper} write --target ...` to avoid partial-write corruption. On any non-zero exit: HALT (exit code 4, `halt_reason: "write-failed"`) and emit the error envelope.
104
108
 
105
109
  When `{headless_mode}` is true, also emit the single-line envelope on **stdout** before chaining to step 7 (matches the SKILL.md "Result Contract (Headless)" shape):
106
110
 
@@ -1,7 +1,9 @@
1
1
  ---
2
2
  nextStepFile: 'synthesize.md'
3
3
  feasibilitySchemaRef: 'src/shared/references/feasibility-report-schema.md'
4
- atomicWriteScript: '{project-root}/src/shared/scripts/skf-atomic-write.py'
4
+ atomicWriteProbeOrder:
5
+ - '{project-root}/_bmad/skf/shared/scripts/skf-atomic-write.py'
6
+ - '{project-root}/src/shared/scripts/skf-atomic-write.py'
5
7
  outputFile: '{outputFolderPath}/feasibility-report-{project_slug}-{timestamp}.md'
6
8
  outputFileLatest: '{outputFolderPath}/feasibility-report-{project_slug}-latest.md'
7
9
  ---
@@ -24,6 +26,8 @@ If a PRD or vision document was provided in Step 01, verify that the combined ca
24
26
 
25
27
  ### 1. Check PRD Availability
26
28
 
29
+ **Resolve `{atomicWriteHelper}`** from `{atomicWriteProbeOrder}`; first existing path wins. HALT if no candidate exists.
30
+
27
31
  **Read `prdAvailable` from `{outputFile}` frontmatter (set in Step 01). If `prdAvailable` is false (no PRD/vision document was provided):**
28
32
 
29
33
  "**Pass 3: Requirements Coverage — Skipped**
@@ -34,7 +38,7 @@ To include this pass, re-run **[VS]** with a PRD or vision document path.
34
38
 
35
39
  **Proceeding to synthesis...**"
36
40
 
37
- Update `{outputFile}` frontmatter: append `'requirements'` to `stepsCompleted`; set `requirementsPass: "skipped"`. Pipe the updated content through `python3 {atomicWriteScript} write --target {outputFile}` and again with `--target {outputFileLatest}`.
41
+ Update `{outputFile}` frontmatter: append `'requirements'` to `stepsCompleted`; set `requirementsPass: "skipped"`. Pipe the updated content through `python3 {atomicWriteHelper} write --target {outputFile}` and again with `--target {outputFileLatest}`.
38
42
 
39
43
  Load, read the full file and then execute `{nextStepFile}`. **STOP HERE — do not execute sections 2-6.**
40
44
 
@@ -105,7 +109,7 @@ Write the Requirements Coverage content under the `## Recommendations` section (
105
109
  - Update frontmatter: append `'requirements'` to `stepsCompleted`
106
110
  - Set `requirementsPass: "completed"`
107
111
  - Set `requirementsFulfilled`, `requirementsPartial`, `requirementsNotAddressed` counts
108
- - Pipe the updated full content through `python3 {atomicWriteScript} write --target {outputFile}` and again with `--target {outputFileLatest}`
112
+ - Pipe the updated full content through `python3 {atomicWriteHelper} write --target {outputFile}` and again with `--target {outputFileLatest}`
109
113
 
110
114
  ### 6. Auto-Proceed to Next Step
111
115
 
@@ -1,7 +1,9 @@
1
1
  ---
2
2
  nextStepFile: 'report.md'
3
3
  feasibilitySchemaRef: 'src/shared/references/feasibility-report-schema.md'
4
- atomicWriteScript: '{project-root}/src/shared/scripts/skf-atomic-write.py'
4
+ atomicWriteProbeOrder:
5
+ - '{project-root}/_bmad/skf/shared/scripts/skf-atomic-write.py'
6
+ - '{project-root}/src/shared/scripts/skf-atomic-write.py'
5
7
  outputFile: '{outputFolderPath}/feasibility-report-{project_slug}-{timestamp}.md'
6
8
  outputFileLatest: '{outputFolderPath}/feasibility-report-{project_slug}-latest.md'
7
9
  ---
@@ -121,6 +123,8 @@ Assemble the following for the report:
121
123
 
122
124
  ### 5. Append to Report
123
125
 
126
+ **Resolve `{atomicWriteHelper}`** from `{atomicWriteProbeOrder}`; first existing path wins. HALT if no candidate exists.
127
+
124
128
  Write the **Recommendations** and **Evidence Sources** sections to `{outputFile}` (per the fixed heading order in `{feasibilitySchemaRef}`):
125
129
  - Include overall verdict with rationale in the `## Executive Summary` section (replace the placeholder text from the template)
126
130
  - Include prioritized recommendation list under `## Recommendations`
@@ -137,7 +141,7 @@ Write the **Recommendations** and **Evidence Sources** sections to `{outputFile}
137
141
  - If any pair has Check 4 missing/weak AND was capped at `Plausible`, that alone does NOT force `NOT_FEASIBLE`, but `FEASIBLE` requires zero such pairs
138
142
  - `FEASIBLE` requires 100% coverage AND zero Blocked pairs AND zero Check-4-missing pairs — otherwise downgrade to `CONDITIONALLY_FEASIBLE`
139
143
  - `coveragePercentage == 0` forces `NOT_FEASIBLE` (per section 1 short-circuit)
140
- - Pipe the updated full content through `python3 {atomicWriteScript} write --target {outputFile}` and again with `--target {outputFileLatest}`
144
+ - Pipe the updated full content through `python3 {atomicWriteHelper} write --target {outputFile}` and again with `--target {outputFileLatest}`
141
145
 
142
146
  ### 6. Auto-Proceed to Next Step
143
147