Skip to content

test: plugin-load smoke test + skill-name slug normalization#14

Merged
SchnappAPI merged 1 commit into
mainfrom
claude/dreamy-ptolemy-vITDt
May 30, 2026
Merged

test: plugin-load smoke test + skill-name slug normalization#14
SchnappAPI merged 1 commit into
mainfrom
claude/dreamy-ptolemy-vITDt

Conversation

@SchnappAPI
Copy link
Copy Markdown
Owner

What

Adds an end-to-end functional smoke test that reproduces how Claude Code loads this plugin, and fixes the one real finding it surfaced.

tests/smoke-plugin.sh

Unlike the existing structural validate-*.sh checks, this walks the loader's discovery path and actually fires hooks:

Section Check
A. Manifest .claude-plugin/plugin.json parses and names the plugin
B. Skills all 134 skills discover — frontmatter name+description, name == dir slug, unique
C. Agents all 39 agents discover — frontmatter name+description, unique
D. Commands all 59 commands discover — names unique
E. Hook wiring every ${CLAUDE_PLUGIN_ROOT}/… path in hooks.json resolves (14 paths), .sh executable + shebang'd
F. Hooks fire destructive-guard and no-commit-to-main actually execute with correct block (exit 2) vs allow (exit 0) outcomes

Finding it caught — 7 non-conformant skill names

The skill check flagged 7 vendored plugin-dev skills carrying Title-Case frontmatter names (Agent Development) that didn't match their slug dirs (agent-development). Normalized all 7 to the canonical lowercase-hyphen slug so every skill name == directory. The smoke test now enforces this as a hard check. None of these names were referenced as identifiers anywhere — only as prose/headings — so the change is safe.

Housekeeping

  • Wired smoke-plugin.sh into tests/run-all.sh.
  • Removed two dead find language-packs/... blocks left over from the flatten in validate-frontmatter.sh / validate-rules.sh (that dir no longer exists).

Verification

tests/run-all.sh is green — all five validators pass, including the new smoke test (smoke-plugin: PASS). Repo-wide dangling-reference grep for deleted layer dirs is clean outside the intentionally-historical docs/ archives.

https://claude.ai/code/session_01U6H3oa4GEngboKuc8jvwC3


Generated by Claude Code

…me slugs

Add tests/smoke-plugin.sh — a functional smoke test that reproduces how
Claude Code loads the plugin end-to-end and proves the guard hooks fire:

  A. manifest parses and names the plugin
  B. all 134 skills discover (frontmatter name+description, slug == dir, unique)
  C. all 39 agents discover (frontmatter name+description, unique)
  D. all 59 commands discover (names unique)
  E. every ${CLAUDE_PLUGIN_ROOT}/… path in hooks.json resolves (14 paths)
  F. destructive-guard and no-commit-to-main actually execute with the
     correct block (exit 2) vs allow (exit 0) outcomes

The skill-discovery check surfaced 7 vendored plugin-dev skills carrying
Title-Case frontmatter names ("Agent Development") that did not match their
slug dirs. Normalize all 7 to the canonical lowercase-hyphen slug so every
skill name == its directory; the smoke test now enforces this as a hard check.

Wire smoke-plugin.sh into run-all.sh and drop two dead language-packs find
blocks left over from the flatten in validate-frontmatter.sh / validate-rules.sh.

https://claude.ai/code/session_01U6H3oa4GEngboKuc8jvwC3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants