bmad-module-skill-forge 0.5.0 → 0.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 (149) hide show
  1. package/README.md +4 -3
  2. package/docs/agents.md +12 -5
  3. package/docs/concepts.md +37 -15
  4. package/docs/examples.md +49 -5
  5. package/docs/getting-started.md +43 -17
  6. package/docs/how-it-works.md +115 -90
  7. package/docs/index.md +2 -2
  8. package/docs/workflows.md +89 -41
  9. package/package.json +2 -2
  10. package/src/agents/forger.agent.yaml +18 -6
  11. package/src/forger/README.md +1 -1
  12. package/src/forger/forge-tier.yaml +18 -1
  13. package/src/forger/preferences.yaml +6 -8
  14. package/src/knowledge/agentskills-spec.md +1 -1
  15. package/src/knowledge/architecture-verification.md +102 -0
  16. package/src/knowledge/ccc-bridge.md +110 -0
  17. package/src/knowledge/confidence-tiers.md +14 -3
  18. package/src/knowledge/doc-fetcher.md +1 -1
  19. package/src/knowledge/manual-section-integrity.md +2 -2
  20. package/src/knowledge/overview.md +10 -6
  21. package/src/knowledge/progressive-capability.md +15 -6
  22. package/src/knowledge/qmd-registry.md +18 -1
  23. package/src/knowledge/skf-knowledge-index.csv +3 -1
  24. package/src/knowledge/skill-lifecycle.md +26 -2
  25. package/src/knowledge/split-body-strategy.md +16 -2
  26. package/src/knowledge/zero-hallucination.md +11 -8
  27. package/src/module-help.csv +9 -6
  28. package/src/module.yaml +4 -1
  29. package/src/workflows/README.md +36 -18
  30. package/src/workflows/analyze-source/data/skill-brief-schema.md +18 -5
  31. package/src/workflows/analyze-source/data/unit-detection-heuristics.md +1 -0
  32. package/src/workflows/analyze-source/steps-c/step-01-init.md +4 -4
  33. package/src/workflows/analyze-source/steps-c/step-01b-continue.md +1 -1
  34. package/src/workflows/analyze-source/steps-c/step-02-scan-project.md +1 -1
  35. package/src/workflows/analyze-source/steps-c/step-03-identify-units.md +1 -1
  36. package/src/workflows/analyze-source/steps-c/step-04-map-and-detect.md +8 -4
  37. package/src/workflows/analyze-source/steps-c/step-05-recommend.md +1 -1
  38. package/src/workflows/analyze-source/steps-c/step-06-generate-briefs.md +2 -2
  39. package/src/workflows/analyze-source/workflow.md +2 -2
  40. package/src/workflows/audit-skill/data/drift-report-template.md +6 -6
  41. package/src/workflows/audit-skill/data/severity-rules.md +1 -1
  42. package/src/workflows/audit-skill/steps-c/step-01-init.md +3 -2
  43. package/src/workflows/audit-skill/steps-c/step-02-re-index.md +23 -1
  44. package/src/workflows/audit-skill/steps-c/step-04-semantic-diff.md +6 -6
  45. package/src/workflows/audit-skill/workflow.md +3 -2
  46. package/src/workflows/brief-skill/data/scope-templates.md +10 -0
  47. package/src/workflows/brief-skill/data/skill-brief-schema.md +25 -23
  48. package/src/workflows/brief-skill/steps-c/step-01-gather-intent.md +4 -4
  49. package/src/workflows/brief-skill/steps-c/step-02-analyze-target.md +15 -0
  50. package/src/workflows/brief-skill/steps-c/step-05-write-brief.md +3 -0
  51. package/src/workflows/create-skill/data/extraction-patterns.md +37 -1
  52. package/src/workflows/create-skill/data/skill-sections.md +14 -13
  53. package/src/workflows/create-skill/data/source-resolution-protocols.md +1 -1
  54. package/src/workflows/create-skill/steps-c/step-01-load-brief.md +18 -12
  55. package/src/workflows/create-skill/steps-c/step-02-ecosystem-check.md +2 -2
  56. package/src/workflows/create-skill/steps-c/step-02b-ccc-discover.md +157 -0
  57. package/src/workflows/create-skill/steps-c/step-03-extract.md +25 -20
  58. package/src/workflows/create-skill/steps-c/step-03b-fetch-temporal.md +8 -8
  59. package/src/workflows/create-skill/steps-c/step-03c-fetch-docs.md +3 -1
  60. package/src/workflows/create-skill/steps-c/step-04-enrich.md +9 -9
  61. package/src/workflows/create-skill/steps-c/step-05-compile.md +4 -3
  62. package/src/workflows/create-skill/steps-c/step-06-validate.md +3 -3
  63. package/src/workflows/create-skill/steps-c/step-07-generate-artifacts.md +60 -39
  64. package/src/workflows/create-skill/steps-c/step-08-report.md +26 -11
  65. package/src/workflows/create-skill/workflow.md +3 -3
  66. package/src/workflows/create-stack-skill/data/compose-mode-rules.md +65 -0
  67. package/src/workflows/create-stack-skill/data/stack-skill-template.md +29 -7
  68. package/src/workflows/create-stack-skill/steps-c/step-01-init.md +25 -8
  69. package/src/workflows/create-stack-skill/steps-c/step-02-detect-manifests.md +35 -2
  70. package/src/workflows/create-stack-skill/steps-c/step-03-rank-and-confirm.md +26 -2
  71. package/src/workflows/create-stack-skill/steps-c/step-04-parallel-extract.md +24 -0
  72. package/src/workflows/create-stack-skill/steps-c/step-05-detect-integrations.md +40 -2
  73. package/src/workflows/create-stack-skill/steps-c/step-06-compile-stack.md +5 -1
  74. package/src/workflows/create-stack-skill/steps-c/step-07-generate-output.md +53 -5
  75. package/src/workflows/create-stack-skill/steps-c/step-08-validate.md +4 -4
  76. package/src/workflows/create-stack-skill/steps-c/step-09-report.md +8 -2
  77. package/src/workflows/create-stack-skill/workflow.md +3 -3
  78. package/src/workflows/export-skill/data/managed-section-format.md +8 -1
  79. package/src/workflows/export-skill/data/snippet-format.md +1 -1
  80. package/src/workflows/export-skill/steps-c/step-01-load-skill.md +1 -1
  81. package/src/workflows/export-skill/steps-c/step-02-package.md +1 -1
  82. package/src/workflows/export-skill/steps-c/step-04-update-context.md +7 -2
  83. package/src/workflows/export-skill/steps-c/step-05-token-report.md +1 -1
  84. package/src/workflows/export-skill/workflow.md +3 -1
  85. package/src/workflows/quick-skill/data/skill-template.md +24 -4
  86. package/src/workflows/quick-skill/steps-c/step-02-ecosystem-check.md +1 -3
  87. package/src/workflows/quick-skill/steps-c/step-04-compile.md +26 -6
  88. package/src/workflows/quick-skill/steps-c/step-05-validate.md +1 -1
  89. package/src/workflows/quick-skill/steps-c/step-06-write.md +3 -0
  90. package/src/workflows/quick-skill/workflow.md +1 -1
  91. package/src/workflows/refine-architecture/data/refinement-rules.md +102 -0
  92. package/src/workflows/refine-architecture/steps-c/step-01-init.md +188 -0
  93. package/src/workflows/refine-architecture/steps-c/step-02-gap-analysis.md +179 -0
  94. package/src/workflows/refine-architecture/steps-c/step-03-issue-detection.md +182 -0
  95. package/src/workflows/refine-architecture/steps-c/step-04-improvements.md +169 -0
  96. package/src/workflows/refine-architecture/steps-c/step-05-compile.md +200 -0
  97. package/src/workflows/refine-architecture/steps-c/step-06-report.md +147 -0
  98. package/src/workflows/refine-architecture/workflow.md +61 -0
  99. package/src/workflows/setup-forge/data/tier-rules.md +16 -6
  100. package/src/workflows/setup-forge/steps-c/step-01-detect-and-tier.md +33 -15
  101. package/src/workflows/setup-forge/steps-c/step-01b-ccc-index.md +148 -0
  102. package/src/workflows/setup-forge/steps-c/step-02-write-config.md +29 -12
  103. package/src/workflows/setup-forge/steps-c/step-03-auto-index.md +29 -6
  104. package/src/workflows/setup-forge/steps-c/step-04-report.md +16 -4
  105. package/src/workflows/setup-forge/workflow.md +4 -3
  106. package/src/workflows/test-skill/data/scoring-rules.md +8 -0
  107. package/src/workflows/test-skill/data/source-access-protocol.md +1 -1
  108. package/src/workflows/test-skill/steps-c/step-01-init.md +3 -2
  109. package/src/workflows/test-skill/steps-c/step-02-detect-mode.md +2 -0
  110. package/src/workflows/test-skill/templates/test-report-template.md +3 -0
  111. package/src/workflows/test-skill/workflow.md +2 -2
  112. package/src/workflows/update-skill/steps-c/step-01-init.md +3 -2
  113. package/src/workflows/update-skill/steps-c/step-02-detect-changes.md +2 -2
  114. package/src/workflows/update-skill/steps-c/step-03-re-extract.md +24 -4
  115. package/src/workflows/update-skill/steps-c/step-05-validate.md +7 -11
  116. package/src/workflows/update-skill/steps-c/step-06-write.md +7 -4
  117. package/src/workflows/update-skill/workflow.md +1 -1
  118. package/src/workflows/verify-stack/data/coverage-patterns.md +45 -0
  119. package/src/workflows/verify-stack/data/feasibility-report-template.md +63 -0
  120. package/src/workflows/verify-stack/data/integration-verification-rules.md +73 -0
  121. package/src/workflows/verify-stack/steps-c/step-01-init.md +174 -0
  122. package/src/workflows/verify-stack/steps-c/step-02-coverage.md +181 -0
  123. package/src/workflows/verify-stack/steps-c/step-03-integrations.md +195 -0
  124. package/src/workflows/verify-stack/steps-c/step-04-requirements.md +168 -0
  125. package/src/workflows/verify-stack/steps-c/step-05-synthesize.md +191 -0
  126. package/src/workflows/verify-stack/steps-c/step-06-report.md +197 -0
  127. package/src/workflows/verify-stack/workflow.md +61 -0
  128. package/tools/cli/commands/status.js +2 -1
  129. package/src/workflows/analyze-source/validation-report.md +0 -657
  130. package/src/workflows/analyze-source/workflow-plan-analyze-source.md +0 -385
  131. package/src/workflows/audit-skill/validation-report.md +0 -545
  132. package/src/workflows/audit-skill/workflow-plan-audit-skill.md +0 -318
  133. package/src/workflows/brief-skill/validation-report.md +0 -630
  134. package/src/workflows/brief-skill/workflow-plan-brief-skill.md +0 -360
  135. package/src/workflows/create-skill/validation-report.md +0 -189
  136. package/src/workflows/create-skill/workflow-plan-create-skill.md +0 -523
  137. package/src/workflows/create-stack-skill/validation-report.md +0 -401
  138. package/src/workflows/create-stack-skill/workflow-plan-create-stack-skill.md +0 -481
  139. package/src/workflows/export-skill/validation-report.md +0 -263
  140. package/src/workflows/export-skill/workflow-plan-export-skill.md +0 -369
  141. package/src/workflows/quick-skill/validation-report.md +0 -543
  142. package/src/workflows/quick-skill/workflow-plan-quick-skill.md +0 -405
  143. package/src/workflows/setup-forge/validation-report.md +0 -504
  144. package/src/workflows/setup-forge/workflow-plan-setup-forge.md +0 -428
  145. package/src/workflows/test-skill/validation-report.md +0 -390
  146. package/src/workflows/test-skill/workflow-plan-test-skill.md +0 -292
  147. package/src/workflows/update-skill/data/tier-degradation-rules.md +0 -46
  148. package/src/workflows/update-skill/validation-report.md +0 -559
  149. package/src/workflows/update-skill/workflow-plan-update-skill.md +0 -441
@@ -46,7 +46,7 @@ To extract all public exports, function signatures, type definitions, and co-imp
46
46
 
47
47
  ## CONTEXT BOUNDARIES:
48
48
 
49
- - Available: brief_data, tier, source_location, file_tree from step-01; ecosystem_status from step-02
49
+ - Available: brief_data, tier, source_location, file_tree from step-01; ecosystem check outcome from step-02 (proceed/halt decision — no named variable stored)
50
50
  - Focus: Source code extraction and inventory building
51
51
  - Limits: Do NOT compile, assemble, or write any output
52
52
  - Dependencies: Source code must be accessible (resolved in step-01)
@@ -75,7 +75,7 @@ Build the filtered file list from the source tree resolved in step-01. Record th
75
75
 
76
76
  "**Docs-only mode:** No source code to extract. Documentation content will be fetched from `doc_urls` in step-03c."
77
77
 
78
- Build an empty extraction inventory with zero exports. Set `extraction_mode: "docs-only"` in context. Auto-proceed through Gate 2 (section 5) — display the empty inventory and note that T3 content will be produced by the doc-fetcher step.
78
+ Build an empty extraction inventory with zero exports. Set `extraction_mode: "docs-only"` in context. Auto-proceed through Gate 2 (section 6) — display the empty inventory and note that T3 content will be produced by the doc-fetcher step.
79
79
 
80
80
  **If `source_type: "source"` (default):** Continue with extraction below.
81
81
 
@@ -92,7 +92,16 @@ Load `{sourceResolutionData}` completely. Follow the **Remote Source Resolution*
92
92
  5. Infer types from JSDoc, docstrings, type annotations
93
93
  6. Confidence: All results T1-low — `[SRC:{file}:L{line}]`
94
94
 
95
- **Forge/Deep Tier (AST available):**
95
+ **Forge/Forge+/Deep Tier (AST available):**
96
+
97
+ **CCC Discovery Integration (Forge+ and Deep with ccc only):**
98
+
99
+ If `{ccc_discovery}` is in context and non-empty (populated by step-02b):
100
+ - Sort the filtered file list by CCC relevance score: files appearing in `{ccc_discovery}` results move to the front of the extraction queue, sorted by their relevance score descending
101
+ - Files NOT in CCC results remain in the queue after ranked files — they are not excluded, only deprioritized
102
+ - Display: "**CCC discovery: {N} files pre-ranked by semantic relevance** — extraction will prioritize these first."
103
+
104
+ If `{ccc_discovery}` is empty or not in context: proceed with existing file ordering (no change to current behavior).
96
105
 
97
106
  ⚠️ **CRITICAL:** Before executing AST extraction, load the **AST Extraction Protocol** section from `{extractionPatternsData}`. Follow the decision tree based on the file count from step-01's file tree. This determines whether to use the MCP tool, scoped YAML rules, or CLI streaming. Never use `ast-grep --json` (without `=stream`) — it loads the entire result set into memory and will fail on large codebases.
98
107
 
@@ -117,24 +126,21 @@ Degrade to Quick tier extraction. Note the degradation reason in context for the
117
126
  - If a file cannot be read: log warning, skip file, continue with remaining files
118
127
  - If AST parsing fails on a file: fall back to source reading for that file, continue
119
128
 
120
- **Re-export tracing (Forge/Deep only):**
121
-
122
- After the initial AST scan, check for public exports from the entry point (`__init__.py`, `index.ts`, `lib.rs`) that were NOT found by AST extraction. These are likely module-level re-exports. Follow the **Re-Export Tracing** protocol in `{extractionPatternsTracingData}` to resolve them to their actual definition files. This ensures module re-export patterns (common in Python libraries with clean public APIs) do not create gaps in the extraction inventory.
129
+ **Re-export tracing (Forge/Deep only):** After the initial AST scan, check for unresolved public exports from entry points (`__init__.py`, `index.ts`, `lib.rs`). Follow the **Re-Export Tracing** protocol in `{extractionPatternsTracingData}` to resolve them to their definition files.
123
130
 
124
131
  ### 4b. Validate Exports Against Package Entry Point
125
132
 
126
133
  After extraction, validate the collected exports against the package's actual public API surface:
127
134
 
128
- - **Python:** Read `{source_root}/__init__.py` — extract all import statements to build the actual public export list. Compare against AST-extracted exports:
129
- - In AST results but not in `__init__.py` → mark as internal (exclude from `metadata.json` exports, keep in provenance-map with a note)
130
- - In `__init__.py` but not in AST results → flag as extraction gap (add to inventory, trace via re-export protocol)
131
- - **TypeScript/JavaScript:** Read `index.ts`/`index.js` — extract named exports. Same comparison logic.
132
- - **Rust:** Read `lib.rs` — extract `pub use` items. Same comparison logic.
133
- - **Go:** Scan package-level files for exported (capitalized) identifiers.
135
+ - **Python:** Read `{source_root}/__init__.py` — extract imports to build the public export list. Compare against AST results:
136
+ - In AST but not entry point → mark as internal (exclude from `metadata.json` exports)
137
+ - In entry point but not AST → flag as extraction gap (trace via re-export protocol)
138
+ - **TypeScript/JS:** Read `index.ts`/`index.js` — same comparison logic.
139
+ - **Rust:** Read `lib.rs` — extract `pub use` items. Same logic. **Go:** Scan for exported (capitalized) identifiers.
134
140
 
135
- Use the entry point as the authoritative source for `metadata.json`'s `exports[]` array. This prevents internal symbols from inflating the exports list and ensures all public API items are captured.
141
+ Use the entry point as the authoritative source for `metadata.json`'s `exports[]` array.
136
142
 
137
- **If entry point is missing or unreadable:** Skip validation with a warning. Use the AST-extracted list as-is.
143
+ **If entry point is missing or unreadable:** Skip validation with a warning.
138
144
 
139
145
  ### 4c. Detect and Inventory Scripts/Assets
140
146
 
@@ -143,10 +149,8 @@ Use the entry point as the authoritative source for `metadata.json`'s `exports[]
143
149
  After export extraction, scan the source for scripts and assets using the detection patterns in `{extractionPatternsTracingData}`:
144
150
 
145
151
  1. Scan source tree for directories/files matching detection heuristics (scripts/, bin/, tools/, cli/ for scripts; assets/, templates/, schemas/, configs/, examples/ for assets)
146
- 2. For each candidate: verify file exists, check size (flag if >500 lines for user confirmation), exclude binary files
147
- 3. Compute SHA-256 content hash for each included file
148
- 4. Extract purpose from file header comments, shebang, README references, or schema `title`/`description` fields. If no purpose found, use filename.
149
- 5. Record: file_path, purpose, source_path, language (for scripts), type (for assets), content_hash, confidence (T1-low)
152
+ 2. For each candidate: verify existence, check size (flag >500 lines), exclude binaries, compute SHA-256 hash
153
+ 3. Extract purpose from header comments, shebang, README references, or schema fields. Record: file_path, purpose, source_path, language/type, content_hash, confidence (T1-low)
150
154
 
151
155
  Add results to `scripts_inventory[]` and `assets_inventory[]` alongside the existing export inventory.
152
156
 
@@ -205,8 +209,9 @@ Display: "**Extraction Summary — Select an Option:** [C] Continue to compilati
205
209
 
206
210
  #### EXECUTION RULES:
207
211
 
208
- - ALWAYS halt and wait for user input after presenting the extraction summary
209
- - This is Gate 2 user must confirm before compilation proceeds
212
+ - IF docs-only mode (`extraction_mode: "docs-only"`): Auto-proceed immediately to `{nextStepFile}` no user interaction required
213
+ - OTHERWISE: ALWAYS halt and wait for user input after presenting the extraction summary
214
+ - This is Gate 2 — user must confirm before compilation proceeds (except docs-only mode)
210
215
  - User may ask questions about the extraction results before continuing
211
216
 
212
217
  #### Menu Handling Logic:
@@ -27,7 +27,7 @@ To fetch temporal context (issues, PRs, changelogs, release notes) from the sour
27
27
 
28
28
  ### Step-Specific Rules:
29
29
 
30
- - 🎯 Deep tier only — Quick and Forge tiers skip this step entirely and silently
30
+ - 🎯 Deep tier only — Quick, Forge, and Forge+ tiers skip this step entirely and silently
31
31
  - 🎯 GitHub repositories only — other source types degrade gracefully
32
32
  - 🚫 FORBIDDEN to halt the workflow if fetching or indexing fails
33
33
  - 🚫 FORBIDDEN to modify extraction data from step-03 — this step only creates QMD collections
@@ -43,7 +43,7 @@ To fetch temporal context (issues, PRs, changelogs, release notes) from the sour
43
43
  ## CONTEXT BOUNDARIES:
44
44
 
45
45
  - Available: brief_data, tier, source_location from step-01; extraction_inventory from step-03
46
- - **Used from extraction_inventory:** `top_exports[]` — the list of top-level public API function names (typically 10-20). Used for targeted GitHub searches (section 3b).
46
+ - **Used from extraction_inventory:** `top_exports[]` — the list of top-level public API function names (typically 10-20). Used for targeted GitHub searches (section 3b). If `extraction_mode: "docs-only"` or `top_exports` is absent/empty, skip targeted searches silently.
47
47
  - Focus: Creating a QMD temporal collection for the source repository
48
48
  - Limits: Do NOT modify extraction data, begin enrichment, or compile content
49
49
  - Dependencies: Extraction must be complete from step-03
@@ -56,7 +56,7 @@ To fetch temporal context (issues, PRs, changelogs, release notes) from the sour
56
56
 
57
57
  Evaluate the following conditions sequentially. **If ANY condition fails, skip silently to section 5 (auto-proceed) with no output:**
58
58
 
59
- 1. **Tier is Deep:** If tier is Quick or Forge, skip silently.
59
+ 1. **Tier is Deep:** If tier is Quick, Forge, or Forge+, skip silently.
60
60
  2. **Source is GitHub:** Verify `source_repo` is a GitHub URL (`https://github.com/...`) or `owner/repo` format. If the source is a local path, a non-GitHub URL, or any other format, skip silently.
61
61
  3. **`gh` CLI is available:** Run `gh auth status` to verify the CLI is installed and authenticated. If it fails, skip silently.
62
62
 
@@ -200,7 +200,7 @@ After temporal context is fetched and indexed (or skipped for any reason), immed
200
200
  #### EXECUTION RULES:
201
201
 
202
202
  - This is an auto-proceed step with no user choices
203
- - Quick/Forge tiers skip directly to next step with no output
203
+ - Quick/Forge/Forge+ tiers skip directly to next step with no output
204
204
  - Non-GitHub sources skip directly to next step with no output
205
205
  - Cached collections (< 7 days old) skip with brief cache-hit message
206
206
  - Deep tier with fresh fetch displays brief confirmation then auto-proceeds
@@ -208,7 +208,7 @@ After temporal context is fetched and indexed (or skipped for any reason), immed
208
208
 
209
209
  ## CRITICAL STEP COMPLETION NOTE
210
210
 
211
- ONLY WHEN temporal context is indexed into QMD (or the step is skipped due to eligibility, cache, or failure) will you proceed to load `{nextStepFile}` for QMD enrichment.
211
+ ONLY WHEN temporal context is indexed into QMD (or the step is skipped due to eligibility, cache, or failure) will you proceed to load `{nextStepFile}` for documentation fetch.
212
212
 
213
213
  ---
214
214
 
@@ -216,7 +216,7 @@ ONLY WHEN temporal context is indexed into QMD (or the step is skipped due to el
216
216
 
217
217
  ### ✅ SUCCESS:
218
218
 
219
- - Non-eligible scenarios (Quick/Forge tier, non-GitHub source, no `gh` CLI) skipped silently
219
+ - Non-eligible scenarios (Quick/Forge/Forge+ tier, non-GitHub source, no `gh` CLI) skipped silently
220
220
  - Cached collections (< 7 days old) detected and re-fetch skipped
221
221
  - Temporal data fetched via `gh` CLI into staging directory (generic + targeted)
222
222
  - Targeted searches performed for up to 10 top_exports function names
@@ -224,14 +224,14 @@ ONLY WHEN temporal context is indexed into QMD (or the step is skipped due to el
224
224
  - Collection `{skill-name}-temporal` indexed into QMD
225
225
  - Registry entry added/updated in forge-tier.yaml with type `"temporal"`
226
226
  - Staging directory cleaned up after indexing
227
- - Auto-proceeded to step-04
227
+ - Auto-proceeded to step-03c
228
228
 
229
229
  ### ❌ SYSTEM FAILURE:
230
230
 
231
231
  - Halting the workflow due to a `gh` CLI, QMD, or network failure
232
232
  - Leaving staging files on disk after indexing (must clean up)
233
233
  - Overwriting or modifying extraction data from step-03
234
- - Displaying skip messages for Quick/Forge tiers (should be silent)
234
+ - Displaying skip messages for Quick/Forge/Forge+ tiers (should be silent)
235
235
  - Attempting to fetch temporal data from non-GitHub sources
236
236
  - Not registering the collection in forge-tier.yaml after successful indexing
237
237
 
@@ -85,7 +85,9 @@ Content fetched from external URLs is classified as **T3** (external, untrusted)
85
85
 
86
86
  After fetching a URL, apply the following heuristic to detect documentation root pages that contain no useful API content. This is common with modern documentation sites (Mintlify, Docusaurus, ReadTheDocs, GitBook) that render API content on subpages.
87
87
 
88
- **Root page detection heuristic — a page is a root if BOTH conditions are true:**
88
+ **Root page detection heuristic — apply only when the URL path ends in `/`, `/index`, `/index.html`, has no path component (bare domain), or has 1 path segment (e.g., `/docs`). For deeper URL paths (2+ segments like `/api/reference`), skip this heuristic and keep the content as-is.**
89
+
90
+ **A page is classified as a root if BOTH conditions are true:**
89
91
 
90
92
  1. **Zero API content indicators:** The fetched markdown contains none of: fenced code blocks (`` ``` ``), parameter tables (`|---|`), or function signature patterns (`def `, `function `, `fn `, `func `, `export `).
91
93
  2. **High link density:** More than 70% of non-empty lines are markdown links (matching `[text](url)` with no other substantive content on the line).
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: 'step-04-enrich'
3
- description: 'QMD knowledge enrichment for extracted functions — Deep tier only, skip for Quick/Forge'
3
+ description: 'QMD knowledge enrichment for extracted functions — Deep tier only, skip for Quick/Forge/Forge+'
4
4
  nextStepFile: './step-05-compile.md'
5
5
  ---
6
6
 
@@ -8,7 +8,7 @@ nextStepFile: './step-05-compile.md'
8
8
 
9
9
  ## STEP GOAL:
10
10
 
11
- To enrich the extraction inventory with temporal context from QMD knowledge searches — issues, PRs, changelogs, and migration notes that add T2-confidence annotations to extracted functions. Deep tier only; Quick and Forge tiers skip this step entirely.
11
+ To enrich the extraction inventory with temporal context from QMD knowledge searches — issues, PRs, changelogs, and migration notes that add T2-confidence annotations to extracted functions. Deep tier only; Quick, Forge, and Forge+ tiers skip this step entirely.
12
12
 
13
13
  ## MANDATORY EXECUTION RULES (READ FIRST):
14
14
 
@@ -31,7 +31,7 @@ To enrich the extraction inventory with temporal context from QMD knowledge sear
31
31
  - 🚫 FORBIDDEN to modify extraction results — enrichment is additive only
32
32
  - 🚫 FORBIDDEN to begin compilation — that's step-05
33
33
  - 💬 QMD failures degrade gracefully — continue without enrichment
34
- - ⏱️ Quick and Forge tiers: skip this step entirely, auto-proceed
34
+ - ⏱️ Quick, Forge, and Forge+ tiers: skip this step entirely, auto-proceed
35
35
 
36
36
  ## EXECUTION PROTOCOLS:
37
37
 
@@ -53,7 +53,7 @@ To enrich the extraction inventory with temporal context from QMD knowledge sear
53
53
 
54
54
  ### 1. Check Tier Eligibility
55
55
 
56
- **If tier is Quick or Forge:**
56
+ **If tier is Quick, Forge, or Forge+:**
57
57
 
58
58
  Auto-proceed silently. Display no message. Immediately load, read entire file, then execute `{nextStepFile}`.
59
59
 
@@ -70,7 +70,7 @@ Before searching, check which QMD collections are available:
70
70
  3. **If no enrichment collections exist** (no `"temporal"` or `"docs"` type collections): report this and auto-proceed. Display:
71
71
 
72
72
  "**Enrichment: no enrichment collections available.**
73
- Only brief-type or extraction-type QMD collections found — no temporal context (issues, PRs, changelogs) or docs collections indexed. Enrichment skipped (expected for first-run skill creation). Enrichment becomes available when temporal or docs context is indexed into QMD collections.
73
+ Only brief-type or extraction-type QMD collections found — no temporal context (issues, PRs, changelogs) or docs collections indexed. {IF extraction_mode is 'docs-only' AND T3 items exist in extraction_inventory: 'T3 documentation content is available in extraction inventory — enrichment via QMD is skipped but T3 content will be compiled.'} {ELSE: 'Enrichment skipped (expected for first-run skill creation). Enrichment becomes available when temporal or docs context is indexed into QMD collections.'}
74
74
 
75
75
  Proceeding to compilation..."
76
76
 
@@ -145,13 +145,13 @@ After enrichment is complete (or skipped for non-Deep tiers), immediately load,
145
145
  #### EXECUTION RULES:
146
146
 
147
147
  - This is an auto-proceed step with no user choices
148
- - Quick/Forge tiers skip directly to next step with no output
148
+ - Quick/Forge/Forge+ tiers skip directly to next step with no output
149
149
  - Deep tier displays brief enrichment summary then auto-proceeds
150
150
  - QMD failures do not halt — degrade and proceed
151
151
 
152
152
  ## CRITICAL STEP COMPLETION NOTE
153
153
 
154
- ONLY WHEN enrichment is complete (Deep tier) or the step is skipped (Quick/Forge) will you proceed to load `{nextStepFile}` for SKILL.md compilation.
154
+ ONLY WHEN enrichment is complete (Deep tier) or the step is skipped (Quick/Forge/Forge+) will you proceed to load `{nextStepFile}` for SKILL.md compilation.
155
155
 
156
156
  ---
157
157
 
@@ -159,7 +159,7 @@ ONLY WHEN enrichment is complete (Deep tier) or the step is skipped (Quick/Forge
159
159
 
160
160
  ### ✅ SUCCESS:
161
161
 
162
- - Quick/Forge tiers: skipped silently with no output, auto-proceeded
162
+ - Quick/Forge/Forge+ tiers: skipped silently with no output, auto-proceeded
163
163
  - Deep tier: collection inventory checked before searching
164
164
  - Deep tier: no temporal collections → reported and auto-proceeded (not silently skipped)
165
165
  - Deep tier: temporal collections exist → QMD searches performed per public API function (10-20, not all exports) with module context derived from extraction inventory source paths
@@ -172,7 +172,7 @@ ONLY WHEN enrichment is complete (Deep tier) or the step is skipped (Quick/Forge
172
172
 
173
173
  - Halting on QMD unavailability or search failures
174
174
  - Modifying T1 extraction results with QMD data
175
- - Displaying skip messages for Quick/Forge tiers (should be silent)
175
+ - Displaying skip messages for Quick/Forge/Forge+ tiers (should be silent)
176
176
  - Pre-emptively skipping all searches without checking the collection inventory
177
177
  - Searching all 800+ exports instead of scoping to public API surface (10-20)
178
178
  - Using bare function names without module context when source path is available in extraction inventory
@@ -39,7 +39,7 @@ To assemble the complete skill content from the extraction inventory and enrichm
39
39
  ## EXECUTION PROTOCOLS:
40
40
 
41
41
  - 🎯 Follow MANDATORY SEQUENCE exactly
42
- - 💾 Build all content in context or write to a staging directory (`_bmad-output/{name}/`)
42
+ - 💾 Build all content in context AND write to the staging directory (`_bmad-output/{name}/`) — staging write is mandatory for step-06 validation
43
43
  - 📖 Follow agentskills.io section structure from data file
44
44
  - 🚫 Do not promote any output files to final `skills/` or `forge-data/` directories — that's step-07
45
45
 
@@ -100,7 +100,8 @@ Following the structure from the skill-sections data file:
100
100
  - Set `description` from the SKILL.md frontmatter `description` field (already assembled in section 2)
101
101
  - Set `language` from source analysis (e.g., `"typescript"`, `"python"`) — use the primary language of the entry point file
102
102
  - Set `ast_node_count` from extraction stats if ast-grep was used (Forge/Deep tier), otherwise omit
103
- - Set `tool_versions` based on tier and available tools. Resolve `{skf_version}` from the SKF module's `package.json` `version` field (run `node -p "require('./node_modules/bmad-module-skill-forge/package.json').version"` or read the installed module's `package.json`). If unresolvable, fall back to `git describe --tags --abbrev=0` in the SKF module root. Never hardcode the version.
103
+ - Set `tool_versions` based on tier and available tools. Resolve `{skf_version}` from the installed module's `package.json` at `{project-root}/_bmad/skf/package.json`. If unresolvable there, fall back to `node -p "require('./node_modules/bmad-module-skill-forge/package.json').version"`. If still unresolvable, use `"unknown"` and add a warning to the evidence report. Never hardcode the version.
104
+ - Store `commit_short` = first 8 characters of `source_commit` (or `"unknown"` if unavailable) for use in step-08 report.
104
105
  - If `scripts_inventory` is non-empty, populate `scripts[]` array and set `stats.scripts_count`. If `assets_inventory` is non-empty, populate `assets[]` array and set `stats.assets_count`. Omit these fields entirely when inventories are empty.
105
106
 
106
107
  ### 5. Build references/ Content
@@ -119,7 +120,7 @@ One entry per extracted export: export_name, export_type, params[] (typed string
119
120
 
120
121
  ### 7. Build evidence-report.md Content
121
122
 
122
- Compilation audit trail: generation date, forge tier, source info, tool versions, extraction summary (files/exports/confidence), validation results (populated in step-06), warnings. See `{skillSectionsData}` for full template. Use the same `{skf_version}` value resolved in section 4 when populating the Tool Versions block.
123
+ Compilation audit trail: generation date, forge tier, source info, tool versions, extraction summary (files/exports/confidence), warnings. For validation-specific fields (Schema, Body, Security, Content Quality, tessl, Metadata), insert the placeholder text `[PENDING — populated by step-06]`. Step-06 will replace these placeholders with actual results. See `{skillSectionsData}` for full template. Use the same `{skf_version}` value resolved in section 4 when populating the Tool Versions block.
123
124
 
124
125
  ### 8. Menu Handling Logic
125
126
 
@@ -101,7 +101,7 @@ If fails: auto-fix (deterministic), re-validate once, record result. If passes:
101
101
 
102
102
  **If step 2 reported `body.max_lines` failure:**
103
103
 
104
- **Preferred approach — selective split:** Rather than a full `split-body`, identify which Tier 2 section(s) are largest (usually `## Full API Reference`) and manually extract only those to `references/`. Keep all Tier 1 content and smaller Tier 2 sections inline. This preserves agent accuracy — inline passive context achieves 100% task accuracy vs 79% for on-demand retrieval (per Vercel research). See `knowledge/split-body-strategy.md` for the full rationale.
104
+ **Preferred approach — selective split:** Rather than a full `split-body`, identify which Tier 2 section(s) are largest (usually `## Full API Reference`) and manually extract only those to `references/`. Keep all Tier 1 content and smaller Tier 2 sections inline. This preserves agent accuracy — inline passive context achieves 100% task accuracy vs 79% for on-demand retrieval (per Vercel research). The rationale: inline passive context achieves 100% task accuracy vs 79% for on-demand retrieval (per Vercel research).
105
105
 
106
106
  **If manual selective split is not feasible**, fall back to the automated full split:
107
107
 
@@ -125,7 +125,7 @@ npx skill-check check <staging-skill-dir> --format json
125
125
 
126
126
  (Security scan enabled by default when `--no-security-scan` omitted. The scan uses [Snyk Agent Scan](https://github.com/snyk/agent-scan) to check for prompt injection risks, sensitive data exposure, and unsafe tool permissions.)
127
127
 
128
- Record any security warnings in evidence-report. Security findings are advisory — they do not block artifact generation.
128
+ Record any security warnings in evidence-report. Security findings are advisory — they do not block artifact generation. If the full validation re-run produces a different quality score than section 2, update the evidence-report with the newer score.
129
129
 
130
130
  **If security scan fails due to missing SNYK_TOKEN:**
131
131
 
@@ -181,7 +181,7 @@ tessl suggestions:
181
181
  Cross-check metadata.json against extraction inventory:
182
182
  - `stats.exports_documented` / `stats.exports_public_api` / `stats.exports_internal` / `stats.exports_total` are accurate
183
183
  - `stats.public_api_coverage` and `stats.total_coverage` are correctly computed (null when denominator is 0)
184
- - `confidence_t1`, `confidence_t2`, `confidence_t3` match actual counts
184
+ - `confidence_distribution.t1`, `confidence_distribution.t1_low`, `confidence_distribution.t2`, `confidence_distribution.t3` match actual counts
185
185
  - `spec_version` is "1.3"
186
186
  - If `scripts[]` or `assets[]` arrays present: verify `stats.scripts_count`/`stats.assets_count` match array lengths; verify `file_entries` count in provenance-map.json matches
187
187
 
@@ -9,7 +9,7 @@ forgeTierConfig: '{sidecar_path}/forge-tier.yaml'
9
9
 
10
10
  ## STEP GOAL:
11
11
 
12
- To write all compiled content to disk — 4 deliverable files to `skills/{name}/` and 3 workspace artifacts to `forge-data/{name}/`, creating directories as needed.
12
+ To write all compiled content to disk — 4 deliverable files to `{skills_output_folder}/{name}/` and 3 workspace artifacts to `{forge_data_folder}/{name}/`, creating directories as needed.
13
13
 
14
14
  ## MANDATORY EXECUTION RULES (READ FIRST):
15
15
 
@@ -30,7 +30,7 @@ To write all compiled content to disk — 4 deliverable files to `skills/{name}/
30
30
 
31
31
  - 🎯 Focus ONLY on writing files from the compiled content in context
32
32
  - 🚫 FORBIDDEN to modify content during writing — write exactly what was compiled
33
- - 🚫 FORBIDDEN to skip any artifact — all 7 files must be written
33
+ - 🚫 FORBIDDEN to skip any artifact — all base artifact types must be written (4 deliverables + 3 workspace files + N reference files)
34
34
  - 💬 Report each file written with its path
35
35
  - 📁 Create directories before writing files
36
36
 
@@ -54,65 +54,66 @@ To write all compiled content to disk — 4 deliverable files to `skills/{name}/
54
54
 
55
55
  ### 1. Create Directory Structure
56
56
 
57
- Create the following directories at `{project-root}/`:
57
+ Create the following directories:
58
58
 
59
59
  ```
60
- skills/{name}/
61
- skills/{name}/references/
62
- forge-data/{name}/
60
+ {skills_output_folder}/{name}/
61
+ {skills_output_folder}/{name}/references/
62
+ {forge_data_folder}/{name}/
63
63
  ```
64
64
 
65
- If `scripts_inventory` is non-empty, also create: `skills/{name}/scripts/`
66
- If `assets_inventory` is non-empty, also create: `skills/{name}/assets/`
65
+ If `scripts_inventory` is non-empty, also create: `{skills_output_folder}/{name}/scripts/`
66
+ If `assets_inventory` is non-empty, also create: `{skills_output_folder}/{name}/assets/`
67
67
 
68
68
  Where `{name}` is the skill name from the brief (kebab-case).
69
69
 
70
70
  If directories already exist, do not error — proceed with file writing (overwrites existing files).
71
71
 
72
- ### 2. Write Deliverables to skills/{name}/
72
+ ### 2. Write Deliverables to {skills_output_folder}/{name}/
73
73
 
74
74
  Write these 4 files from the compiled content:
75
75
 
76
- **File 1:** `skills/{name}/SKILL.md`
76
+ **File 1:** `{skills_output_folder}/{name}/SKILL.md`
77
77
  - The complete compiled skill document
78
78
  - agentskills.io-compliant format with all sections
79
79
  - [MANUAL] markers seeded
80
80
 
81
- **File 2:** `skills/{name}/context-snippet.md`
81
+ **File 2:** `{skills_output_folder}/{name}/context-snippet.md`
82
82
  - Compressed 2-line format for CLAUDE.md integration
83
83
 
84
- **File 3:** `skills/{name}/metadata.json`
84
+ **File 3:** `{skills_output_folder}/{name}/metadata.json`
85
85
  - Machine-readable birth certificate with stats and provenance
86
86
 
87
- **File 4:** `skills/{name}/references/*.md`
87
+ **File 4:** `{skills_output_folder}/{name}/references/*.md`
88
88
  - One file per function group or type
89
89
  - Progressive disclosure detail files
90
90
 
91
- **Files 4b (conditional):** `skills/{name}/scripts/*`
91
+ **Files 4b (conditional):** `{skills_output_folder}/{name}/scripts/*`
92
92
  - One file per detected script, copied from source with content preserved
93
93
  - Only created when `scripts_inventory` is non-empty
94
94
 
95
- **Files 4c (conditional):** `skills/{name}/assets/*`
95
+ **Files 4c (conditional):** `{skills_output_folder}/{name}/assets/*`
96
96
  - One file per detected asset, copied from source with content preserved
97
97
  - Only created when `assets_inventory` is non-empty
98
98
 
99
- ### 3. Write Workspace Artifacts to forge-data/{name}/
99
+ ### 3. Write Workspace Artifacts to {forge_data_folder}/{name}/
100
100
 
101
101
  Write these 3 files from the compiled content:
102
102
 
103
- **File 5:** `forge-data/{name}/provenance-map.json`
103
+ **File 5:** `{forge_data_folder}/{name}/provenance-map.json`
104
104
  - Per-claim source map with AST bindings and confidence tiers
105
105
 
106
- **File 6:** `forge-data/{name}/evidence-report.md`
106
+ **File 6:** `{forge_data_folder}/{name}/evidence-report.md`
107
107
  - Build artifact with extraction summary, validation results, warnings
108
108
 
109
- **File 7:** `forge-data/{name}/extraction-rules.yaml`
109
+ **File 7:** `{forge_data_folder}/{name}/extraction-rules.yaml`
110
110
  - Language and ast-grep schema used for this extraction (for reproducibility)
111
111
 
112
112
  ### 4. Verify Write Completion
113
113
 
114
114
  After all files are written, verify:
115
- - All 7 base files exist at their expected paths, plus scripts/ and assets/ files when inventories are non-empty
115
+ - All 4 deliverable artifact types exist (SKILL.md, context-snippet.md, metadata.json, at least one file in references/), all 3 workspace artifacts exist (provenance-map.json, evidence-report.md, extraction-rules.yaml), plus scripts/ and assets/ files when inventories are non-empty
116
+ - Store `ref_count` = count of files written to `references/` for use in step-08 report
116
117
  - List each file with its path and size
117
118
 
118
119
  **If any write failed:**
@@ -123,7 +124,7 @@ Display brief confirmation:
123
124
 
124
125
  "**Artifacts generated.**
125
126
 
126
- **Deliverables (skills/{name}/):**
127
+ **Deliverables ({skills_output_folder}/{name}/):**
127
128
  - SKILL.md
128
129
  - context-snippet.md
129
130
  - metadata.json
@@ -131,7 +132,7 @@ Display brief confirmation:
131
132
  {if assets: - assets/ ({assets_count} files)}
132
133
  - references/ ({reference_count} files)
133
134
 
134
- **Workspace (forge-data/{name}/):**
135
+ **Workspace ({forge_data_folder}/{name}/):**
135
136
  - provenance-map.json
136
137
  - evidence-report.md
137
138
  - extraction-rules.yaml
@@ -144,23 +145,13 @@ Proceeding to compilation report..."
144
145
 
145
146
  Index the generated skill artifacts into a QMD collection so that audit-skill and update-skill can perform high-signal searches against curated extraction data instead of raw source files.
146
147
 
147
- **Collection creation:**
148
-
149
- Create a QMD collection from both artifact directories:
150
- ```bash
151
- qmd collection add {project-root}/skills/{name} --name {name}-extraction --mask "**/*"
152
- qmd embed
153
- ```
154
-
155
- If collection already exists (re-run): remove and recreate for atomic replace:
148
+ **Collection creation:** Create (or replace) a QMD collection from the skill artifacts:
156
149
  ```bash
157
- qmd collection remove {name}-extraction
158
- qmd collection add {project-root}/skills/{name} --name {name}-extraction --mask "**/*"
159
- qmd embed
150
+ qmd collection remove {name}-extraction 2>/dev/null # no-op if new
151
+ qmd collection add {skills_output_folder}/{name} --name {name}-extraction --mask "**/*"
152
+ qmd embed # generates vector embeddings for vector_search/deep_search
160
153
  ```
161
154
 
162
- **Note:** `qmd embed` generates vector embeddings required for `vector_search` and `deep_search`. Without it, only BM25 keyword `search` works.
163
-
164
155
  **Registry update:**
165
156
 
166
157
  Read `{forgeTierConfig}` and update the `qmd_collections` array.
@@ -183,6 +174,36 @@ Write the updated forge-tier.yaml.
183
174
 
184
175
  **IF forge tier is NOT Deep:** Skip this section silently. No messaging.
185
176
 
177
+ ### 5b. CCC Index Registry Registration (Forge+ and Deep with ccc)
178
+
179
+ **IF `tools.ccc` is true in forge-tier.yaml (Forge+ or Deep with ccc available):**
180
+
181
+ Ensure the source path used for extraction is indexed by ccc and registered in the `ccc_index_registry` array.
182
+
183
+ **Index verification:**
184
+
185
+ Dispatch to ccc CLI (`ccc index {source_root}`) or ccc MCP tool — `ccc_bridge.ensure_index` is a conceptual interface, not a callable function. This is a no-op if the source was already indexed during setup-forge or step-02b.
186
+
187
+ **Registry update:**
188
+
189
+ Read `{forgeTierConfig}` and update the `ccc_index_registry` array.
190
+
191
+ Deduplicate by `source_repo` + `skill_name` (NOT local `path`, which may be ephemeral). Replace existing match or append:
192
+
193
+ ```yaml
194
+ - source_repo: "{brief.source_repo}"
195
+ path: "{source_root}"
196
+ skill_name: "{name}"
197
+ indexed_at: "{current ISO date}"
198
+ source_workflow: "create-skill"
199
+ ```
200
+
201
+ Write the updated forge-tier.yaml.
202
+
203
+ **Error handling:** If ccc indexing or registry update fails, log and continue — do NOT fail the workflow.
204
+
205
+ **IF `tools.ccc` is false:** Skip this section silently.
206
+
186
207
  ### 6. Menu Handling Logic
187
208
 
188
209
  **Auto-proceed step — no user interaction.**
@@ -207,9 +228,9 @@ ONLY WHEN all 7 artifact files are written and verified will you proceed to load
207
228
 
208
229
  ### ✅ SUCCESS:
209
230
 
210
- - Directory structure created (skills/{name}/, forge-data/{name}/)
211
- - All 4 deliverable files written to skills/{name}/
212
- - All 3 workspace artifact files written to forge-data/{name}/
231
+ - Directory structure created ({skills_output_folder}/{name}/, {forge_data_folder}/{name}/)
232
+ - All 4 deliverable files written to {skills_output_folder}/{name}/
233
+ - All 3 workspace artifact files written to {forge_data_folder}/{name}/
213
234
  - Write completion verified — all 7 files exist
214
235
  - Deep tier: QMD collection `{name}-extraction` created/updated and registered in forge-tier.yaml
215
236
  - Non-Deep tier: QMD indexing skipped silently
@@ -73,16 +73,17 @@ Where `{primary_confidence}` is the predominant confidence tier (T1 if Forge/Dee
73
73
  |------|-------|-------------|
74
74
  | T1 (AST) | {t1_count} | Structurally verified via ast-grep |
75
75
  | T1-low (Source) | {t1_low_count} | Inferred from source reading |
76
- | T2 (QMD) | {t2_count} | Enriched with temporal context |
76
+ | T2 (QMD) | {t2_count} | QMD-enriched semantic context |
77
+ | T3 (External) | {t3_count} | Sourced from external documentation URLs |
77
78
 
78
79
  **Output Files:**
79
- - `skills/{name}/SKILL.md` — Active skill with trigger-based usage
80
- - `skills/{name}/context-snippet.md` — Passive context for CLAUDE.md
81
- - `skills/{name}/metadata.json` — Machine-readable birth certificate
82
- - `skills/{name}/references/` — Progressive disclosure ({ref_count} files)
83
- - `forge-data/{name}/provenance-map.json` — Source map with AST bindings
84
- - `forge-data/{name}/evidence-report.md` — Build audit trail
85
- - `forge-data/{name}/extraction-rules.yaml` — Reproducible extraction schema"
80
+ - `{skills_output_folder}/{name}/SKILL.md` — Active skill with trigger-based usage
81
+ - `{skills_output_folder}/{name}/context-snippet.md` — Passive context for CLAUDE.md
82
+ - `{skills_output_folder}/{name}/metadata.json` — Machine-readable birth certificate
83
+ - `{skills_output_folder}/{name}/references/` — Progressive disclosure ({ref_count} files)
84
+ - `{forge_data_folder}/{name}/provenance-map.json` — Source map with AST bindings
85
+ - `{forge_data_folder}/{name}/evidence-report.md` — Build audit trail
86
+ - `{forge_data_folder}/{name}/extraction-rules.yaml` — Reproducible extraction schema"
86
87
 
87
88
  ### 3. Display Warnings (If Any)
88
89
 
@@ -99,7 +100,7 @@ If no warnings, omit this section entirely.
99
100
 
100
101
  "**Recommended next steps:**
101
102
  - **[TS] Test Skill** — verify completeness and accuracy before export
102
- - **[ES] Export Skill** — publish to your skill library or agentskills.io
103
+ - **[EX] Export Skill** — publish to your skill library or agentskills.io
103
104
  - **[US] Update Skill** — edit specific sections or add manual content
104
105
 
105
106
  To use this skill immediately, add the context snippet to your CLAUDE.md:
@@ -115,9 +116,23 @@ To use this skill immediately, add the context snippet to your CLAUDE.md:
115
116
 
116
117
  {If more remaining:} Proceeding to next brief: {next_skill_name}..."
117
118
 
118
- Update sidecar checkpoint with batch progress, then loop back to step-01 for the next brief.
119
+ Update the batch checkpoint in `{sidecar_path}/batch-state.yaml` with:
119
120
 
120
- **If not batch mode or all batch briefs complete:**
121
+ ```yaml
122
+ batch_active: true
123
+ brief_list: [{full list of brief paths}]
124
+ current_index: {index of next brief to process, 0-based}
125
+ completed: [{list of completed skill names}]
126
+ last_updated: {ISO timestamp}
127
+ ```
128
+
129
+ Then loop back to step-01 for the next brief. Step-01 detects an active batch via `batch-state.yaml` and loads the brief at `current_index`.
130
+
131
+ **If all batch briefs complete:**
132
+
133
+ Set `batch_active: false` in `{sidecar_path}/batch-state.yaml` to prevent stale state. Display: "Batch complete. {completed_count} skills compiled."
134
+
135
+ **If not batch mode:**
121
136
 
122
137
  End workflow. No further steps.
123
138
 
@@ -9,16 +9,16 @@ installed_path: '{project-root}/_bmad/skf/workflows/skillforge/create-skill'
9
9
 
10
10
  **Goal:** Compile a verified agent skill from a skill-brief.yaml and source code, producing an agentskills.io-compliant SKILL.md with provenance map, evidence report, and progressive disclosure references.
11
11
 
12
- **Your Role:** You are a skill compilation engine performing structural extraction and assembly. This workflow is mostly autonomous with three interaction points — one after ecosystem check (if a match is found), one after source extraction (to confirm findings before compilation), and one after content quality review (when tessl produces suggestions). All other steps auto-proceed. Apply zero hallucination tolerance: every instruction in the output must trace to source code with a confidence tier citation.
12
+ **Your Role:** You are operating in **Ferris Architect mode** — a skill compilation engine performing structural extraction and assembly. This workflow is mostly autonomous with three interaction points — one after ecosystem check (if a match is found), one after source extraction (to confirm findings before compilation), and one after content quality review (when tessl produces suggestions). All other steps auto-proceed. Apply zero hallucination tolerance: every instruction in the output must trace to source code with a confidence tier citation.
13
13
 
14
14
  ## WORKFLOW ARCHITECTURE
15
15
 
16
16
  ### Core Principles
17
17
 
18
- - **Micro-file Design**: Each step of the overall goal is a self contained instruction file that you will adhere too 1 file as directed at a time
18
+ - **Micro-file Design**: Each step of the overall goal is a self contained instruction file that you will adhere to 1 file as directed at a time
19
19
  - **Just-In-Time Loading**: Only 1 current step file will be loaded, read, and executed to completion - never load future step files until told to do so
20
20
  - **Sequential Enforcement**: Sequence within the step files must be completed in order, no skipping or optimization allowed
21
- - **Tier-Aware Execution**: Steps adapt behavior based on forge tier (Quick/Forge/Deep) loaded from sidecar at init
21
+ - **Tier-Aware Execution**: Steps adapt behavior based on forge tier (Quick/Forge/Forge+/Deep) loaded from sidecar at init
22
22
  - **Zero Hallucination**: Every claim requires a provenance citation — uncitable content is excluded, not guessed
23
23
 
24
24
  ### Step Processing Rules