Files
Alex Verkhovsky e13bbde315 docs(skill-validator): align rule catalog with current repo state (#2815)
The catalog had drifted from the code it describes. Corrections, each
verified against src/ and src/scripts/:

- REF-01 cited a `config.yaml` config source. The central config is
  `_bmad/config.toml` plus its user/custom overlays (config_utils.py).
- REF-01's double-curly exception was stated for all `{{...}}`, which
  contradicted TPL-01. The two forms differ: plain `{{name}}` is an
  artifact placeholder that survives rendering, while dotted `{{.key}}`
  and `{{config.key}}` are compile-time substitutions consumed by
  render_skill.py. Split the exception by form.
- PATH-05 told authors to replace cross-skill file paths with
  `skill:skill-name`, while REF-03 forbade that prefix. Prose uses
  invoke language; `skill:` is the customize.toml value form. Recorded
  the split as a REF-03 exception.
- WF-03 governed workflow.md frontmatter variables. Neither of the two
  workflow.md files carries frontmatter, and no WF-01/WF-02 exist.
  Removed.
- SKILL-04's stated regex rejected the bare name `bmad`, which
  validate_skills.py accepts. Matched it to the implementation.
- Replaced dead example paths (`core/data`, `bmm/data`,
  `core/workflows`) and `{installed_path}` examples already covered by
  PATH-02.

Drop STEP-02 and STEP-03: step goal sections and next-step references
are structure, and the validator no longer takes a position on it.
STEP-04 and STEP-05 stay, being execution safety rather than shape.

Add a Token Forms table and a Skill Layouts section so the token
grammar and the three coexisting step layouts are stated once, and
extend REF-01 to cover `{workflow.key}`, `{agent.key}`, and
`[[bmad-snapshot:]]`. Compile-time tokens are predicated on the skill
actually invoking render_skill.py, which only bmad-build and
bmad-build-auto do.

Details the catalog now states precisely: render_skill.py substitutes
`{workflow.key}` but not `{agent.key}`, whose only source is
resolve_customization.py output; a `[[bmad-snapshot:]]` target must be
a Markdown file other than SKILL.md, which _load_sources excludes;
workflow.md is the renderer's entry point, not a property of any
layout; config keys are declared in module.yaml, which exists in a
checkout, rather than the installed config.toml, which does not; and
`{project-root}` and `{skill-root}` are named as sources so REF-01
does not flag the two most common tokens in the corpus. SKILL-04
claims no character limit, since NAME_REGEX does not bound length and
a passing deterministic rule is skipped by the inference pass.

Drop the Skill Spec Cheatsheet. Its path-resolution notes duplicated
PATH-01 and the rest (loading levels, 500-line tip, discovery
keywords) was read on every run and used by no rule; the intro now
links the specification instead. The How to Use steps no longer
restate the first-pass skip rule, and backslash-escaped backticks
inside code spans are replaced with double-backtick spans so they
render.

Verified across all 50 skills: every `{workflow.*}` and `{agent.*}`
resolves in its own customize.toml, every snapshot target exists, and
no unrendered skill uses a compile-time token.
2026-09-01 21:03:27 -06:00
..
2025-10-22 12:36:39 -05:00