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.
- package/.claude-plugin/marketplace.json +1 -1
- package/docs/_data/pinned.yaml +1 -1
- package/package.json +1 -1
- package/src/shared/scripts/skf-description-guard.py +33 -80
- package/src/shared/scripts/skf-detect-tools.py +50 -8
- package/src/shared/scripts/skf-manifest-ops.py +22 -6
- package/src/skf-analyze-source/references/continue.md +3 -1
- package/src/skf-analyze-source/references/identify-units.md +8 -4
- package/src/skf-analyze-source/references/init.md +6 -4
- package/src/skf-analyze-source/references/scan-project.md +6 -2
- package/src/skf-audit-skill/references/init.md +9 -3
- package/src/skf-audit-skill/references/structural-diff.md +9 -3
- package/src/skf-brief-skill/SKILL.md +3 -1
- package/src/skf-brief-skill/references/analyze-target.md +22 -10
- package/src/skf-brief-skill/references/gather-intent.md +71 -6
- package/src/skf-brief-skill/references/headless-args.md +1 -1
- package/src/skf-brief-skill/references/qmd-collection-registration.md +1 -1
- package/src/skf-brief-skill/references/scope-definition.md +8 -4
- package/src/skf-brief-skill/references/write-brief.md +24 -8
- package/src/skf-create-skill/assets/compile-assembly-rules.md +1 -1
- package/src/skf-create-skill/assets/skill-sections.md +1 -1
- package/src/skf-create-skill/references/extraction-patterns.md +2 -0
- package/src/skf-create-skill/references/validate.md +2 -2
- package/src/skf-create-stack-skill/references/detect-integrations.md +7 -2
- package/src/skf-create-stack-skill/references/detect-manifests.md +6 -2
- package/src/skf-create-stack-skill/references/parallel-extract.md +6 -2
- package/src/skf-export-skill/references/preflight-snippet-root-probe.md +6 -1
- package/src/skf-export-skill/references/summary.md +4 -4
- package/src/skf-export-skill/references/update-context.md +2 -2
- package/src/skf-test-skill/SKILL.md +1 -1
- package/src/skf-test-skill/references/coherence-check.md +14 -7
- package/src/skf-update-skill/references/init.md +8 -1
- package/src/skf-verify-stack/references/coverage.md +6 -2
- package/src/skf-verify-stack/references/init.md +6 -2
- package/src/skf-verify-stack/references/integrations.md +6 -2
- package/src/skf-verify-stack/references/report.md +6 -2
- package/src/skf-verify-stack/references/requirements.md +7 -3
- 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
|
-
|
|
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 {
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
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 {
|
|
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 {
|
|
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
|
-
|
|
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 {
|
|
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
|
|