From workflow-skills
Run deterministic lifecycle checks over the backlog/ structure — frontmatter validity, status enums, depends-on integrity and cycles, README-table ↔ frontmatter consistency, done-implies-verification.md, and epic-criteria referential integrity. A ~200-line node script, not an agent — the invariants hold even when a skill copy is stale or a tool is missing.
How this skill is triggered — by the user, by Claude, or both
Slash command
/workflow-skills:backlog-lintThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Mechanically verify the backlog lifecycle invariants the workflow skills otherwise enforce through prose. Prose enforcement fails open (a missing tool, a stale skill copy, an agent that skipped a step); this script fails closed and is identical in every environment.
Mechanically verify the backlog lifecycle invariants the workflow skills otherwise enforce through prose. Prose enforcement fails open (a missing tool, a stale skill copy, an agent that skipped a step); this script fails closed and is identical in every environment.
/backlog-lint # lint the repo's backlog_root (default: backlog/)
/backlog-lint <path> # lint a specific backlog root
lint.js the standard way — probe which exists, once: ~/.claude/skills/backlog-lint/lint.js (local personal copy), else the workflow-skills plugin's …/skills/backlog-lint/lint.js (Glob for **/workflow-skills/skills/backlog-lint/lint.js under ~/.claude/ if the plugin root isn't obvious).node <resolved-lint.js-path> [backlog-root]. It reads backlog_root from .claude/repo-conventions.yaml when no argument is given.depends-on to silence a dangling reference — resolve why it dangles).| # | Check | Severity |
|---|---|---|
| E1–E2 | proposal.md frontmatter present; status ∈ not-started/in-progress/ready/blocked/done/archived; priority ∈ P0/P1/P2; name/effort/owner non-placeholder | error |
| E3–E4 | depends-on entries resolve to real feature folders; no cycles | error |
| E5 | status: done with a FAIL row in verification.md | error |
| E6 | epic-criteria IDs match EC-n bullets in the epic README | error |
| E7–E8 | epic README features-table rows match real folders and their frontmatter status | error |
| W1 | feature folder missing from its epic's features table | warning |
| W2 | status: done with no verification.md (predates the verification contract) | warning |
| W3 | epic has features but no EC-n exit criteria | warning |
node <path>/lint.js to the repo's pre-push checks so a broken lifecycle state never reaches a PR.backlog/** — this makes the done-before-verified defect class structurally impossible regardless of which agent or human edited the backlog:- name: backlog-lint
if: ${{ hashFiles('backlog/**') != '' }}
run: node .claude/skills/backlog-lint/lint.js # or the plugin-installed path
done, comments "run /epic-review <epic> --completion" — mechanically closing the trigger gap that suggestions-in-reports leave open.Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub ajmaher2-dev/claude-skills --plugin workflow-skills