Repository navigation
skills.sh: pin the npx skills add path for the muster-setup skill - #387
Merged
Merged
Conversation
`npx skills add ZacxDev/muster` already installs the plugin's own plugins/muster/skills/muster-setup/SKILL.md: the skills CLI (1.7.4, getPluginSkillPaths) searches each marketplace plugin's skills/ directory. Measured: --list finds exactly muster-setup; an install into a throwaway project wrote a byte-identical copy. So no second SKILL.md is added. The README now gives the full command (`--skill muster-setup`) and says this is muster by ZacxDev: other repositories publish unrelated skills named `muster`. tests/claude_plugin_test.py pins, for the skills CLI: - the plugin's SKILL.md is the only one in the repo (drift guard: a copy in skills/ is searched first and, measured, replaces it for skills.sh users while Claude Code keeps the original); - the marketplace entry leads the CLI to the plugin's skills/ directory; - the frontmatter's name/description stay plain YAML strings (measured: a ": " in the description makes the CLI skip the skill, 0 found); - the README's skills command names a skill the plugin ships. Red at origin/main: only the README test (the other three are invariant guards; main already satisfies them). Each new guard was mutated and failed on its own assertion. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Owner
Author
|
Round 0 (requirements & deletion) — verdict: deletion candidates (D1, D2) + premise Q1. Operator decision on Q1: keep the PR, trimmed. D1 deleted, D2 cut to the description check. Kept: README disambiguation + the only-one-SKILL.md drift guard + the README-names-a-shipped-skill test. |
Drop test_the_cli_searches_the_plugins_skill_directory and its helper skills_cli_plugin_dirs(): it re-implemented the skills CLI's private search logic, and the existing source/skill-set tests already pin the layout it depends on. Cut the YAML frontmatter check to the description only (the name is pinned by test_frontmatter's regex; the metadata assertion is gone). The only-one-SKILL.md drift guard already counts untracked files that are not ignored (git ls-files --others --exclude-standard); an untracked skills/muster-setup/SKILL.md fails it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
ZacxDev
marked this pull request as ready for review
November 1, 2026 05:52
Owner
Author
|
Operator's answer to round 0's Q1, given in the coordinating Claude session on 2026-11-01 (the operator picked "Keep, trimmed" when asked; transcribed here by the coordinator): |
ZacxDev
added a commit
that referenced
this pull request
Nov 2, 2026
…bleWhereAgentsAreListed (#398) * test(api): preflightStore.NameExists answers from its rows (fix 1-in-256 flake) TestAPoolWorkerIsVisibleWhereAgentsAreListed failed once in CI (PR #387, run 41274534531 attempt 1): "/agents/spry-newt carries 1 pool chips, want 0". Root cause is the fixture, not production: preflightStore.NameExists returned false unconditionally, so BuildUniqueAgentName never redrew. The name pool is 16 adjectives x 16 nouns = 256, so the test's two dispatches shared a name about once per 256 runs, and pageablePreflight.GetByName then resolved the pool-less control's page to the first (pooled) row. PGStore.NameExists consults live rows, so production redraws; the fixture now does the same. Matrix (go test ./internal/api -run '^TestAPoolWorkerIsVisibleWhereAgentsAreListed$'): - natural rate, origin/main, -count=3000: 9 FAIL / 2991 PASS - natural rate, HEAD, -count=3000: 0 FAIL / 3000 PASS - forced collision (generateName pinned to one name, uncommitted), old fixture -count=200: 200 FAIL; new fixture -count=200: 0 FAIL - HEAD, -race -cpu 1,4 -count=500: 1000 PASS / 0 FAIL Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * test(api): tidy the NameExists fixture comment (audit r1 nit) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
npx skills add ZacxDev/musterinstalls the samemuster-setupskill the Claude Code plugin ships. It already did onmain; this PR pins it with tests and makes the README command name the repo and the skill unambiguously. Trimmed after the round 0 review.Layout decision: no new file
The skills CLI's docs (
docs/creating-skills.md, skills 1.7.4):The CLI source (
getPluginSkillPaths) adds<plugin source>/skillsfor every plugin whosesourcestarts with./. Soplugins/muster/skills/muster-setup/SKILL.mdis found where it already lives, and both tools read one file.Measured with the CLI run from its npm tarball, with a throwaway HOME, config dirs and project dir, and telemetry off:
--listfound exactlymuster-setup, both on a local checkout and onZacxDev/muster.SKILL.mdthatcmpshows byte-identical to the plugin's file.README
Shows the full command,
npx skills add ZacxDev/muster --skill muster-setup, and says "This is muster by ZacxDev".skills find musterreturns unrelated skills namedmusterfrom other repositories.Tests (
tests/claude_plugin_test.py, already a CI step; 11 tests)git ls-files --cached --others --exclude-standard). Measured: a copy atskills/muster-setup/SKILL.mdis searched first and replaces the plugin's skill for skills users, while Claude Code keeps installing the original.descriptionstays a plain YAML string. Measured: a": "in it makes the CLI skip the skill with a YAML parse error, so it finds 0 skills.Red/green: at
origin/mainonly the README test fails. The other two pass onmain, so they are invariant guards and not regression tests.Mutations (each test failed on its own assertion):
skills/muster-setup/SKILL.mdfailed the drift guard.": "added to the description failed the description test.Leak scan:
tests/leakscan.pyreports 0 findings locally. That run had no key, so the denylist check was skipped; CI runs it with the key.🤖 Generated with Claude Code