bmad-method 6.1.1-next.25 → 6.1.1-next.27

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "bmad-method",
4
- "version": "6.1.1-next.25",
4
+ "version": "6.1.1-next.27",
5
5
  "description": "Breakthrough Method of Agile AI-driven Development",
6
6
  "keywords": [
7
7
  "agile",
@@ -1,10 +1,5 @@
1
1
  ---
2
- name: 'step-01-document-discovery'
3
- description: 'Discover and inventory all project documents, handling duplicates and organizing file structure'
4
-
5
- nextStepFile: './step-02-prd-analysis.md'
6
2
  outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md'
7
- templateFile: '../templates/readiness-report-template.md'
8
3
  ---
9
4
 
10
5
  # Step 1: Document Discovery
@@ -122,7 +117,7 @@ If required documents not found:
122
117
 
123
118
  ### 5. Add Initial Report Section
124
119
 
125
- Initialize {outputFile} with {templateFile}.
120
+ Initialize {outputFile} with ../templates/readiness-report-template.md.
126
121
 
127
122
  ### 6. Present Findings and Get Confirmation
128
123
 
@@ -156,12 +151,12 @@ Display: **Select an Option:** [C] Continue to File Validation
156
151
 
157
152
  #### Menu Handling Logic:
158
153
 
159
- - IF C: Save document inventory to {outputFile}, update frontmatter with completed step and files being included, and then read fully and follow: {nextStepFile}
154
+ - IF C: Save document inventory to {outputFile}, update frontmatter with completed step and files being included, and then read fully and follow: ./step-02-prd-analysis.md
160
155
  - IF Any other comments or queries: help user respond then redisplay menu
161
156
 
162
157
  ## CRITICAL STEP COMPLETION NOTE
163
158
 
164
- ONLY WHEN C is selected and document inventory is saved will you load {nextStepFile} to begin file validation.
159
+ ONLY WHEN C is selected and document inventory is saved will you load ./step-02-prd-analysis.md to begin file validation.
165
160
 
166
161
  ---
167
162
 
@@ -1,8 +1,4 @@
1
1
  ---
2
- name: 'step-02-prd-analysis'
3
- description: 'Read and analyze PRD to extract all FRs and NFRs for coverage validation'
4
-
5
- nextStepFile: './step-03-epic-coverage-validation.md'
6
2
  outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md'
7
3
  epicsFile: '{planning_artifacts}/*epic*.md' # Will be resolved to actual file
8
4
  ---
@@ -149,7 +145,7 @@ After PRD analysis complete, immediately load next step for epic coverage valida
149
145
 
150
146
  ## PROCEEDING TO EPIC COVERAGE VALIDATION
151
147
 
152
- PRD analysis complete. Loading next step to validate epic coverage.
148
+ PRD analysis complete. Read fully and follow: `./step-03-epic-coverage-validation.md`
153
149
 
154
150
  ---
155
151
 
@@ -1,8 +1,4 @@
1
1
  ---
2
- name: 'step-03-epic-coverage-validation'
3
- description: 'Validate that all PRD FRs are covered in epics and stories'
4
-
5
- nextStepFile: './step-04-ux-alignment.md'
6
2
  outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md'
7
3
  ---
8
4
 
@@ -150,7 +146,7 @@ After coverage validation complete, immediately load next step.
150
146
 
151
147
  ## PROCEEDING TO UX ALIGNMENT
152
148
 
153
- Epic coverage validation complete. Loading next step for UX alignment.
149
+ Epic coverage validation complete. Read fully and follow: `./step-04-ux-alignment.md`
154
150
 
155
151
  ---
156
152
 
@@ -1,8 +1,4 @@
1
1
  ---
2
- name: 'step-04-ux-alignment'
3
- description: 'Check for UX document and validate alignment with PRD and Architecture'
4
-
5
- nextStepFile: './step-05-epic-quality-review.md'
6
2
  outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md'
7
3
  ---
8
4
 
@@ -113,7 +109,7 @@ After UX assessment complete, immediately load next step.
113
109
 
114
110
  ## PROCEEDING TO EPIC QUALITY REVIEW
115
111
 
116
- UX alignment assessment complete. Loading next step for epic quality review.
112
+ UX alignment assessment complete. Read fully and follow: `./step-05-epic-quality-review.md`
117
113
 
118
114
  ---
119
115
 
@@ -1,8 +1,4 @@
1
1
  ---
2
- name: 'step-05-epic-quality-review'
3
- description: 'Validate epics and stories against create-epics-and-stories best practices'
4
-
5
- nextStepFile: './step-06-final-assessment.md'
6
2
  outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md'
7
3
  ---
8
4
 
@@ -217,11 +213,11 @@ After completing epic quality review:
217
213
  - Update {outputFile} with all quality findings
218
214
  - Document specific best practices violations
219
215
  - Provide actionable recommendations
220
- - Load {nextStepFile} for final readiness assessment
216
+ - Load ./step-06-final-assessment.md for final readiness assessment
221
217
 
222
218
  ## CRITICAL STEP COMPLETION NOTE
223
219
 
224
- This step executes autonomously. Load {nextStepFile} only after complete epic quality review is documented.
220
+ This step executes autonomously. Load ./step-06-final-assessment.md only after complete epic quality review is documented.
225
221
 
226
222
  ---
227
223
 
@@ -1,7 +1,4 @@
1
1
  ---
2
- name: 'step-06-final-assessment'
3
- description: 'Compile final assessment and polish the readiness report'
4
-
5
2
  outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md'
6
3
  ---
7
4
 
@@ -57,8 +57,8 @@ If no document exists or no `stepsCompleted` in frontmatter:
57
57
  Discover and load context documents using smart discovery. Documents can be in the following locations:
58
58
  - {planning_artifacts}/**
59
59
  - {output_folder}/**
60
- - {product_knowledge}/**
61
- - docs/**
60
+ - {project_knowledge}/**
61
+ - {project-root}/docs/**
62
62
 
63
63
  Also - when searching - documents can be a single markdown file, or a folder with an index and multiple files. For Example, if searching for `*foo*.md` and not found, also search for a folder called *foo*/index.md (which indicates sharded content)
64
64
 
@@ -67,7 +67,7 @@ Try to discover the following:
67
67
  - Product Requirements Document (`*prd*.md`)
68
68
  - UX Design (`*ux-design*.md`) and other
69
69
  - Research Documents (`*research*.md`)
70
- - Project Documentation (generally multiple documents might be found for this in the `{product_knowledge}` or `docs` folder.)
70
+ - Project Documentation (generally multiple documents might be found for this in the `{project_knowledge}` or `{project-root}/docs` folder.)
71
71
  - Project Context (`**/project-context.md`)
72
72
 
73
73
  <critical>Confirm what you have found with the user, along with asking if the user wants to provide anything else. Only after this confirmation will you proceed to follow the loading rules</critical>
@@ -95,7 +95,7 @@ Before proceeding, verify we have the essential inputs:
95
95
 
96
96
  #### C. Create Initial Document
97
97
 
98
- Copy the template from `{installed_path}/architecture-decision-template.md` to `{planning_artifacts}/architecture.md`
98
+ Copy the template from `../architecture-decision-template.md` to `{planning_artifacts}/architecture.md`
99
99
 
100
100
  #### D. Complete Initialization and Report
101
101
 
@@ -29,12 +29,6 @@ Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
29
29
  - `date` as system-generated current datetime
30
30
  - ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}`
31
31
 
32
- ### Paths
33
-
34
- - `installed_path` = `.`
35
- - `template_path` = `{installed_path}/architecture-decision-template.md`
36
- - `data_files_path` = `{installed_path}/data/`
37
-
38
32
  ---
39
33
 
40
34
  ## EXECUTION
@@ -0,0 +1,300 @@
1
+ # Skill Validator — Inference-Based
2
+
3
+ An LLM-readable validation prompt for skills following the Agent Skills open standard.
4
+
5
+ ## How to Use
6
+
7
+ 1. You are given a **skill directory path** to validate.
8
+ 2. Read every file in the skill directory recursively.
9
+ 3. Apply every rule in the catalog below to every applicable file.
10
+ 4. Produce a findings report using the report template at the end.
11
+
12
+ If no findings are generated, the skill passes validation.
13
+
14
+ ---
15
+
16
+ ## Definitions
17
+
18
+ - **Skill directory**: the folder containing `SKILL.md` and all supporting files.
19
+ - **Internal reference**: a file path from one file in the skill to another file in the same skill.
20
+ - **External reference**: a file path from a skill file to a file outside the skill directory.
21
+ - **Originating file**: the file that contains the reference (path resolution is relative to this file's location).
22
+ - **Config variable**: a name-value pair whose value comes from the project config file (e.g., `planning_artifacts`, `implementation_artifacts`, `communication_language`).
23
+ - **Runtime variable**: a name-value pair whose value is set during workflow execution (e.g., `spec_file`, `date`, `status`).
24
+ - **Intra-skill path variable**: a frontmatter variable whose value is a path to another file within the same skill — this is an anti-pattern.
25
+
26
+ ---
27
+
28
+ ## Rule Catalog
29
+
30
+ ### SKILL-01 — SKILL.md Must Exist
31
+
32
+ - **Severity:** CRITICAL
33
+ - **Applies to:** skill directory
34
+ - **Rule:** The skill directory must contain a file named `SKILL.md` (exact case).
35
+ - **Detection:** Check for the file's existence.
36
+ - **Fix:** Create `SKILL.md` as the skill entrypoint.
37
+
38
+ ### SKILL-02 — SKILL.md Must Have `name` in Frontmatter
39
+
40
+ - **Severity:** CRITICAL
41
+ - **Applies to:** `SKILL.md`
42
+ - **Rule:** The YAML frontmatter must contain a `name` field.
43
+ - **Detection:** Parse the `---` delimited frontmatter block and check for `name:`.
44
+ - **Fix:** Add `name: <skill-name>` to the frontmatter.
45
+
46
+ ### SKILL-03 — SKILL.md Must Have `description` in Frontmatter
47
+
48
+ - **Severity:** CRITICAL
49
+ - **Applies to:** `SKILL.md`
50
+ - **Rule:** The YAML frontmatter must contain a `description` field.
51
+ - **Detection:** Parse the `---` delimited frontmatter block and check for `description:`.
52
+ - **Fix:** Add `description: '<what it does and when to use it>'` to the frontmatter.
53
+
54
+ ### SKILL-04 — `name` Format
55
+
56
+ - **Severity:** HIGH
57
+ - **Applies to:** `SKILL.md`
58
+ - **Rule:** The `name` value must use only lowercase letters, numbers, and hyphens. Max 64 characters. Must not contain "anthropic" or "claude".
59
+ - **Detection:** Regex test: `^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$`. String search for forbidden substrings.
60
+ - **Fix:** Rename to comply with the format.
61
+
62
+ ### SKILL-05 — `name` Must Match Directory Name
63
+
64
+ - **Severity:** HIGH
65
+ - **Applies to:** `SKILL.md`
66
+ - **Rule:** The `name` value in SKILL.md frontmatter must exactly match the skill directory name. The directory name is the canonical identifier used by installers, manifests, and `skill:` references throughout the project.
67
+ - **Detection:** Compare the `name:` frontmatter value against the basename of the skill directory (i.e., the immediate parent directory of `SKILL.md`).
68
+ - **Fix:** Change the `name:` value to match the directory name, or rename the directory to match — prefer changing `name:` unless other references depend on the current value.
69
+
70
+ ### SKILL-06 — `description` Quality
71
+
72
+ - **Severity:** MEDIUM
73
+ - **Applies to:** `SKILL.md`
74
+ - **Rule:** The `description` must state both what the skill does AND when to use it. Max 1024 characters.
75
+ - **Detection:** Check length. Look for trigger phrases like "Use when" or "Use if" — their absence suggests the description only says _what_ but not _when_.
76
+ - **Fix:** Append a "Use when..." clause to the description.
77
+
78
+ ---
79
+
80
+ ### WF-01 — workflow.md Must NOT Have `name` in Frontmatter
81
+
82
+ - **Severity:** HIGH
83
+ - **Applies to:** `workflow.md` (if it exists)
84
+ - **Rule:** The `name` field belongs only in `SKILL.md`. If `workflow.md` has YAML frontmatter, it must not contain `name:`.
85
+ - **Detection:** Parse frontmatter and check for `name:` key.
86
+ - **Fix:** Remove the `name:` line from workflow.md frontmatter.
87
+
88
+ ### WF-02 — workflow.md Must NOT Have `description` in Frontmatter
89
+
90
+ - **Severity:** HIGH
91
+ - **Applies to:** `workflow.md` (if it exists)
92
+ - **Rule:** The `description` field belongs only in `SKILL.md`. If `workflow.md` has YAML frontmatter, it must not contain `description:`.
93
+ - **Detection:** Parse frontmatter and check for `description:` key.
94
+ - **Fix:** Remove the `description:` line from workflow.md frontmatter.
95
+
96
+ ### WF-03 — workflow.md Frontmatter Variables Must Be Config or Runtime Only
97
+
98
+ - **Severity:** HIGH
99
+ - **Applies to:** `workflow.md` frontmatter
100
+ - **Rule:** Every variable defined in workflow.md frontmatter must be either:
101
+ - A config variable (value references `{project-root}` or a config-derived variable like `{planning_artifacts}`)
102
+ - A runtime variable (value is empty, a placeholder, or set during execution)
103
+ - A legitimate external path expression
104
+
105
+ It must NOT be a path to a file within the skill directory.
106
+ - **Detection:** For each frontmatter variable, check if its value resolves to a file inside the skill (e.g., starts with `./`, `{installed_path}`, or is a bare relative path to a sibling file). If so, it is an intra-skill path variable.
107
+ - **Fix:** Remove the variable. Use a hardcoded relative path inline where the file is referenced.
108
+
109
+ ---
110
+
111
+ ### PATH-01 — Internal References Must Be Relative From Originating File
112
+
113
+ - **Severity:** CRITICAL
114
+ - **Applies to:** all files in the skill
115
+ - **Rule:** Any reference from one file in the skill to another file in the same skill must be a relative path resolved from the directory of the originating file. Use `./` prefix for siblings or children, `../` for parent traversal. Bare relative filenames in markdown links (e.g., `[text](sibling.md)`) are also acceptable.
116
+ - **Detection:** Scan for file path references (in markdown links, frontmatter values, inline backtick paths, and prose instructions like "Read fully and follow"). Verify each internal reference uses relative notation (`./`, `../`, or bare filename). Always resolve the path from the originating file's directory — a reference to `./steps/step-01.md` from a file already inside `steps/` would resolve to `steps/steps/step-01.md`, which is wrong.
117
+ - **Examples:**
118
+ - CORRECT: `./steps/step-01-init.md` (from workflow.md at skill root to a step)
119
+ - CORRECT: `./template.md` (from workflow.md to a sibling)
120
+ - CORRECT: `../template.md` (from steps/step-01.md to a skill-root file)
121
+ - CORRECT: `[workflow.md](workflow.md)` (markdown link to sibling — bare relative)
122
+ - CORRECT: `./step-02-plan.md` (from steps/step-01.md to a sibling step)
123
+ - WRONG: `./steps/step-02-plan.md` (from a file already inside steps/ — resolves to steps/steps/)
124
+ - WRONG: `{installed_path}/template.md`
125
+ - WRONG: `{project-root}/.claude/skills/my-skill/template.md`
126
+ - WRONG: `/Users/someone/.claude/skills/my-skill/steps/step-01.md`
127
+ - WRONG: `~/.claude/skills/my-skill/file.md`
128
+
129
+ ### PATH-02 — No `installed_path` Variable
130
+
131
+ - **Severity:** HIGH
132
+ - **Applies to:** all files in the skill
133
+ - **Rule:** The `installed_path` variable is an anti-pattern from the pre-skill workflow era. It must not be defined in any frontmatter, and `{installed_path}` must not appear anywhere in any file.
134
+ - **Detection:** Search all files for:
135
+ - Frontmatter key `installed_path:`
136
+ - String `{installed_path}` anywhere in content
137
+ - Markdown/prose assigning `installed_path` (e.g., `` `installed_path` = `.` ``)
138
+ - **Fix:** Remove all `installed_path` definitions. Replace every `{installed_path}/path` with `./path` (relative from the file that contains the reference). If the reference is in a step file and points to a skill-root file, use `../path` instead.
139
+
140
+ ### PATH-03 — External References Must Use `{project-root}` or Config Variables
141
+
142
+ - **Severity:** HIGH
143
+ - **Applies to:** all files in the skill
144
+ - **Rule:** References to files outside the skill directory must use `{project-root}/...` or a config-derived variable path (e.g., `{planning_artifacts}/...`, `{implementation_artifacts}/...`).
145
+ - **Detection:** Identify file references that point outside the skill. Verify they start with `{project-root}` or a known config variable. Flag absolute paths, home-relative paths (`~/`), or bare paths that resolve outside the skill.
146
+ - **Fix:** Replace with `{project-root}/...` or the appropriate config variable.
147
+
148
+ ### PATH-04 — No Intra-Skill Path Variables
149
+
150
+ - **Severity:** MEDIUM
151
+ - **Applies to:** all files (frontmatter AND body content)
152
+ - **Rule:** Variables must not store paths to files within the same skill. These paths should be hardcoded as relative paths inline where used. This applies to YAML frontmatter variables AND markdown body variable assignments (e.g., `` `template` = `./template.md` `` under a `### Paths` section).
153
+ - **Detection:** For each variable with a path-like value — whether defined in frontmatter or in body text — determine if the target is inside the skill directory. Indicators: value starts with `./`, `../`, `{installed_path}`, or is a bare filename of a file that exists in the skill. Exclude variables whose values are prefixed with a config variable like `{planning_artifacts}`, `{implementation_artifacts}`, `{project-root}`, or other config-derived paths — these are external references and are legitimate.
154
+ - **Fix:** Remove the variable. Replace each `{variable_name}` usage with the direct relative path.
155
+ - **Exception:** If a path variable is used in 4+ locations across multiple files and the path is non-trivial, a variable MAY be acceptable. Flag it as LOW instead and note the exception.
156
+
157
+ ---
158
+
159
+ ### STEP-01 — Step File Naming
160
+
161
+ - **Severity:** MEDIUM
162
+ - **Applies to:** files in `steps/` directory
163
+ - **Rule:** Step files must be named `step-NN-description.md` where NN is a zero-padded two-digit number. An optional single-letter variant suffix is allowed for branching steps (e.g., `step-01b-continue.md`).
164
+ - **Detection:** Regex: `^step-\d{2}[a-z]?-[a-z0-9-]+\.md$`
165
+ - **Fix:** Rename to match the pattern.
166
+
167
+ ### STEP-02 — Step Must Have a Goal Section
168
+
169
+ - **Severity:** HIGH
170
+ - **Applies to:** step files
171
+ - **Rule:** Each step must clearly state its goal. Look for a heading like `## YOUR TASK`, `## STEP GOAL`, `## INSTRUCTIONS`, `## INITIALIZATION`, `## EXECUTION`, `# Step N:`, or a frontmatter `goal:` field.
172
+ - **Detection:** Scan for goal-indicating headings (including `# Step N: Title` as a top-level heading that names the step's purpose) or frontmatter.
173
+ - **Fix:** Add a clear goal section.
174
+
175
+ ### STEP-03 — Step Must Reference Next Step
176
+
177
+ - **Severity:** MEDIUM
178
+ - **Applies to:** step files (except the final step)
179
+ - **Rule:** Each non-terminal step must contain a reference to the next step file for sequential execution.
180
+ - **Detection:** Look for `## NEXT` section or inline reference to a next step file. Remember to resolve the reference from the originating file's directory (PATH-01 applies here too).
181
+ - **Fix:** Add a `## NEXT` section with the relative path to the next step.
182
+ - **Note:** A terminal step is one that has no next-step reference and either contains completion/finalization language or is the highest-numbered step. If a workflow branches, there may be multiple terminal steps.
183
+
184
+ ### STEP-04 — Halt Before Menu
185
+
186
+ - **Severity:** HIGH
187
+ - **Applies to:** step files
188
+ - **Rule:** Any step that presents a user menu (e.g., `[C] Continue`, `[A] Approve`, `[S] Split`) must explicitly HALT and wait for user response before proceeding.
189
+ - **Detection:** Find menu patterns (bracketed letter options). Check that text within the same section (under the same heading) includes "HALT", "wait", "stop", "FORBIDDEN to proceed", or equivalent.
190
+ - **Fix:** Add an explicit HALT instruction before or after the menu.
191
+
192
+ ### STEP-05 — No Forward Loading
193
+
194
+ - **Severity:** HIGH
195
+ - **Applies to:** step files
196
+ - **Rule:** A step must not load or read future step files until the current step is complete. Just-in-time loading only.
197
+ - **Detection:** Look for instructions to read multiple step files simultaneously, or unconditional references to step files with higher numbers than the current step. Exempt locations: `## NEXT` sections, navigation/dispatch sections that list valid resumption targets, and conditional routing branches.
198
+ - **Fix:** Remove premature step loading. Ensure only the current step is active.
199
+
200
+ ### STEP-06 — Step File Frontmatter: No `name` or `description`
201
+
202
+ - **Severity:** MEDIUM
203
+ - **Applies to:** step files
204
+ - **Rule:** Step files should not have `name:` or `description:` in their YAML frontmatter. These are metadata noise — the step's purpose is conveyed by its goal section and filename.
205
+ - **Detection:** Parse step file frontmatter for `name:` or `description:` keys.
206
+ - **Fix:** Remove `name:` and `description:` from step file frontmatter.
207
+
208
+ ### STEP-07 — Step Count
209
+
210
+ - **Severity:** LOW
211
+ - **Applies to:** workflow as a whole
212
+ - **Rule:** A sharded workflow should have between 2 and 10 step files. More than 10 risks LLM context degradation.
213
+ - **Detection:** Count files matching `step-*.md` in the `steps/` directory.
214
+ - **Fix:** Consider consolidating steps if over 10.
215
+
216
+ ---
217
+
218
+ ### SEQ-01 — No Skip Instructions
219
+
220
+ - **Severity:** HIGH
221
+ - **Applies to:** all files
222
+ - **Rule:** No file should instruct the agent to skip steps or optimize step order. Sequential execution is mandatory.
223
+ - **Detection:** Scan for phrases like "skip to step", "jump to step", "skip ahead", "optimize the order", "you may skip". Exclude negation context (e.g., "do NOT skip steps", "NEVER skip") — these are enforcement instructions, not skip instructions.
224
+ - **Exception:** Conditional routing (e.g., "if X, go to step N; otherwise step M") is valid workflow branching, not skipping.
225
+
226
+ ### SEQ-02 — No Time Estimates
227
+
228
+ - **Severity:** LOW
229
+ - **Applies to:** all files
230
+ - **Rule:** Workflow files should not include time estimates. AI execution speed varies too much for estimates to be meaningful.
231
+ - **Detection:** Scan for patterns like "takes X minutes", "~N min", "estimated time", "ETA".
232
+ - **Fix:** Remove time estimates.
233
+
234
+ ---
235
+
236
+ ### REF-01 — Variable References Must Be Defined
237
+
238
+ - **Severity:** HIGH
239
+ - **Applies to:** all files
240
+ - **Rule:** Every `{variable_name}` reference in any file (body text, frontmatter values, inline instructions) must resolve to a defined source. Valid sources are:
241
+ 1. A frontmatter variable in the same file
242
+ 2. A frontmatter variable in the skill's `workflow.md` (workflow-level variables are available to all steps)
243
+ 3. A known config variable from the project config (e.g., `project-root`, `planning_artifacts`, `implementation_artifacts`, `communication_language`)
244
+ 4. A known runtime variable set during execution (e.g., `date`, `status`, `project_name`, user-provided input variables)
245
+ - **Detection:** Collect all `{...}` tokens in the file. For each, check whether it is defined in the file's own frontmatter, in `workflow.md` frontmatter, or is a recognized config/runtime variable. Flag any token that cannot be traced to a source. Use the config variable list from the project's `config.yaml` as the reference for recognized config variables. Runtime variables are those explicitly described as user-provided or set during execution in the workflow instructions.
246
+ - **Exceptions:**
247
+ - Double-curly `{{variable}}` — these are template placeholders intended to survive into generated output (e.g., `{{project_name}}` in a template file). Do not flag these.
248
+ - Variables inside fenced code blocks that are clearly illustrative examples.
249
+ - **Fix:** Either define the variable in the appropriate frontmatter, or replace the reference with a literal value. If the variable is a config variable that was misspelled, correct the spelling.
250
+
251
+ ### REF-02 — File References Must Resolve
252
+
253
+ - **Severity:** HIGH
254
+ - **Applies to:** all files
255
+ - **Rule:** All file path references within the skill (markdown links, backtick paths, frontmatter values) should point to files that plausibly exist.
256
+ - **Detection:** For internal references, verify the target file exists in the skill directory. For external references using config variables, verify the path structure is plausible (you cannot resolve config variables, but you can check that the path after the variable looks reasonable — e.g., `{planning_artifacts}/*.md` is plausible, `{planning_artifacts}/../../etc/passwd` is not).
257
+ - **Fix:** Correct the path or remove the dead reference.
258
+
259
+ ---
260
+
261
+ ## Report Template
262
+
263
+ When reporting findings, use this format:
264
+
265
+ ```markdown
266
+ # Skill Validation Report: {skill-name}
267
+
268
+ **Directory:** {path}
269
+ **Date:** {date}
270
+ **Files scanned:** {count}
271
+
272
+ ## Summary
273
+
274
+ | Severity | Count |
275
+ |----------|-------|
276
+ | CRITICAL | N |
277
+ | HIGH | N |
278
+ | MEDIUM | N |
279
+ | LOW | N |
280
+
281
+ ## Findings
282
+
283
+ ### {RULE-ID} — {Rule Title}
284
+
285
+ - **Severity:** {severity}
286
+ - **File:** `{relative-path-within-skill}`
287
+ - **Line:** {line number or range, if identifiable}
288
+ - **Detail:** {what was found}
289
+ - **Fix:** {specific fix for this instance}
290
+
291
+ ---
292
+
293
+ (repeat for each finding, grouped by rule ID)
294
+
295
+ ## Passed Rules
296
+
297
+ (list rule IDs that produced no findings)
298
+ ```
299
+
300
+ If zero findings: report "All {N} rules passed. No findings." and list all passed rule IDs.