Skip to content

fix: keep skill sync inside the package and correct install docs - #13

Merged
ADWilkinson merged 1 commit into
mainfrom
grok/v3-a-test
Nov 12, 2026
Merged

ADWilkinson merged 1 commit into
mainfrom
grok/v3-a-test

Conversation

@ADWilkinson

Copy link
Copy Markdown
Owner

Defects

Shared sync followed links

A throwaway package whose skills/ship/scripts/pr-state.mjs was a symlink or a hard link to a file outside the skill: bun scripts/metadata.ts exited 0 and replaced that file with the shared script. Replacing shared/scripts/page-audit.mjs with a symlink to the text SMUGGLED copied that text into skills/discoverability/scripts/page-audit.mjs. validatePackage reported no findings when the symlink target's bytes matched the skill copies. A manifest key ../catalog.json was read, then rejected only after the read. A hard-linked agents/openai.yaml was on the same write path. Running metadata also rewrote every picker file with a trailing space on nested keys (interface: ), so a second run was not idempotent.

Shared sources and copies must now be regular single-link files inside shared/ and the skill. Escaping manifest paths are rejected before they are read. Picker files get the same link check. A failed check writes nothing. Trailing spaces from the YAML emitter are stripped so bun run metadata leaves a clean tree.

oneshot invocation locks were unchecked

Removing disable-model-invocation: true from skills/oneshot/SKILL.md, or setting allow_implicit_invocation: true in its picker metadata, left validatePackage with no oneshot findings. The package check now requires both locks.

Install docs disagreed with the CLI

The README said --scope global installs skills everywhere and that an edited folder is left alone. docs/installation.md said the same, and its --dry-run comment said the command shows what would change. Global scope writes .claude/skills and .agents/skills under the home directory. A differing selected folder returns "Nothing changed" and writes nothing, including under --dry-run. --force --dry-run reports replace and still writes nothing. list accepts only --json. The CLI help omitted the stop-on-difference rule. The README, installation doc, and help text now say this.

Frontmatter that is missing, misnamed, blank, too long, or invalid YAML was already rejected and is now tested. Install tests also lock a file blocking the destination, a symlinked package skill tree, a symlinked skills directory, read-only list and --version, and an executable bit that drifted.

Verification

  • bun test — 77 pass, 0 fail
  • bun run check — package check passed, 54 pass, packed CLI smoke passed
  • node skills/deslop/scripts/slop-scan.mjs README.md docs/installation.md --fail-on high — 0 high

No publishing.

@ADWilkinson
ADWilkinson merged commit 57b134c into main Nov 12, 2026
2 checks passed
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.

1 participant