Problem
skills/repo-sweep/scripts/skill-version.sh lines 23-25 print <name>@builtin for any argument without a plugin: prefix. It records no version and never checks that the skill exists:
skill-version.sh no-such-skill-xyz prints no-such-skill-xyz@builtin. SKILL.md line 39 says a skill that is not installed gets @unknown.
- An unprefixed name also resolves to a project or personal skill, and a same-named skill replaces the bundled one (skills docs: "Your skill replaces the bundled command, but not its aliases."). A repo with its own
claude-api skill is still recorded as claude-api@builtin.
history.sh line 76 treats @builtin as not comparable, so a bundled-skill entry is rerun-optional forever, and the Playbook-Step trailer carries no version to compare later.
Root cause in the docs: SKILL.md line 52 says a catalog - skill: line takes plugin:skill names, but catalogs/hygiene.md line 135 uses bare claude-api and catalog.sh does not check the format. SKILL.md line 38's "missing skill" wording for exit 1 means an entry with no skill line, not a skill that is not installed.
Evidence
melodic-software/.github#153, step prompt-audit: checklist line and trailer recorded claude-api@builtin. The bundled skill was loaded from /tmp/claude-1000/bundled-skills/2.1.283/...; claude --version printed 2.1.283 (Claude Code).
Fix
Cheapest first:
- Correct SKILL.md lines 38, 39 and 52 and the script header: bare names are allowed for bundled skills, and say what exit 1 means.
- Before stamping
@builtin, probe .claude/skills/<name>/ in the repo and ~/.claude/skills/<name>/; a hit is a project or personal skill, not a bundled one.
- Stamp bundled skills with the Claude Code version, for example
claude-api@builtin-2.1.283, and compare it in history.sh line 76. Existing @builtin records then compare unequal, so each bundled-skill entry reports rerun once after the change. Update the tests that assert the current form: skill-version.test.sh lines 51 and 55, history.test.sh lines 37, 41, 68 and 84, render.test.sh line 35.
Unverified: that a bundled skill's version always equals the Claude Code version. It is inferred from the bundled-skills path; no docs page states it.
Problem
skills/repo-sweep/scripts/skill-version.shlines 23-25 print<name>@builtinfor any argument without aplugin:prefix. It records no version and never checks that the skill exists:skill-version.sh no-such-skill-xyzprintsno-such-skill-xyz@builtin. SKILL.md line 39 says a skill that is not installed gets@unknown.claude-apiskill is still recorded asclaude-api@builtin.history.shline 76 treats@builtinas not comparable, so a bundled-skill entry isrerun-optionalforever, and thePlaybook-Steptrailer carries no version to compare later.Root cause in the docs: SKILL.md line 52 says a catalog
- skill:line takesplugin:skillnames, butcatalogs/hygiene.mdline 135 uses bareclaude-apiandcatalog.shdoes not check the format. SKILL.md line 38's "missing skill" wording for exit 1 means an entry with no skill line, not a skill that is not installed.Evidence
melodic-software/.github#153, step
prompt-audit: checklist line and trailer recordedclaude-api@builtin. The bundled skill was loaded from/tmp/claude-1000/bundled-skills/2.1.283/...;claude --versionprinted2.1.283 (Claude Code).Fix
Cheapest first:
@builtin, probe.claude/skills/<name>/in the repo and~/.claude/skills/<name>/; a hit is a project or personal skill, not a bundled one.claude-api@builtin-2.1.283, and compare it inhistory.shline 76. Existing@builtinrecords then compare unequal, so each bundled-skill entry reportsrerunonce after the change. Update the tests that assert the current form:skill-version.test.shlines 51 and 55,history.test.shlines 37, 41, 68 and 84,render.test.shline 35.Unverified: that a bundled skill's version always equals the Claude Code version. It is inferred from the bundled-skills path; no docs page states it.