Repository navigation
fix(cli): init never touches installed skills and no command removes one - #6168
Conversation
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
There was a problem hiding this comment.
Verdict: APPROVE · 0 blocker · 1 important · 0 nits · head a65b3c1b
Ownership check and --skip-skills restore read right; foreign names are excluded before the diff, so neither the refresh, the core-set install nor the retired-name prune can reach them. ↓ one inline on the named-update message.
Not mergeable as is: skills-manifest.json conflicts with main (regenerate the hashes on rebase), and no Actions run exists for this head, so the rebased head needs CI and a fresh approval.
Scope
Read the full diff plus updateSkills / skills update prune in commands/skills.ts. Ran skillsManifest, init, skills suites: 162/163 pass; the one failure (pruneOrphanedLockEntries … preserves the file mode, 384 vs 416) fails identically on main in this sandbox (umask), unrelated.
| isFromOtherSource(lock?.skills?.[name], latest.source), | ||
| ) | ||
| : []; | ||
| const ours = skillNames.filter((name) => !foreign.includes(name)); |
There was a problem hiding this comment.
important — dropping a foreign name from the manifest set also turns an explicit hyperframes skills update hyperframes-cli (or the router's skills update <workflow>) into Unknown skill(s): hyperframes-cli. Available: … and, under strict, exit 1 — the skill does exist; another publisher owns that folder. Safe, but the message sends the user/agent hunting for a typo. Suggest surfacing foreign in updateSkills and saying so (e.g. "hyperframes-cli is installed from someone/else; left untouched").
a65b3c1 to
94afa82
Compare
Edit accuracy: accurate 271 (base branch 271), smooth 141 of thoseThe gate passes. Quarantined, measured but not gated (0) Unstable (1)
|
94afa82 to
c46c3a3
Compare
What changes for you
initno longer refreshes, replaces or removes skills you already have. It installs the core set only when it is missing. No command removes a skill any more:skills updaterefreshes the HyperFrames skills you already have (or the ones you name) and never deletes one.--skip-skillsworks again, andHYPERFRAMES_SKIP_SKILLS=1still does the same. The stale-skills notice now reaches agents too: it prints to stderr afterrender,lintandvalidateeven without a terminal and under--json, and stays off in CI, in dev, withHYPERFRAMES_NO_UPDATE_CHECK=1and withHYPERFRAMES_SKIP_SKILLS=1.init <name> --example blank --non-interactivewithout the flag keeps working with no prompt.Why
Setup and update changed and deleted skills nobody had asked it to touch. A skill the user had installed under one of our names could be overwritten, and the "no longer published" purge removed skills on its own.
--skip-skillswas ignored on purpose while the skills.sh registry lagged; that reason is gone.How
initinstalls missing core skills only (updateSkills({ onlyMissing: true })); outdated installed skills are left as they are.skills removecall, the lock-entry cleanup, the "removed" status and count incheck, the nudge count, andupdate's--dirand--sourceflags (they only scoped the purge).--jsonstdout is unchanged; the notice only writes stderr, and the CLI's own update notices stay off under--json.skill-lifecycle.md,init-and-scaffold.md,docs/packages/cli.mdx, README) say the above.Tests
New tests fail on
mainand pass here:updatenever spawns a removal,init's install leaves an outdated skill alone, a dropped skill is not an update, a run without a terminal prints the stale-skills notice and has its background check due, a same-named skill from another source is not compared, andinit --skip-skillswithout the env var skips skills. The skills, manifest, init and nudge suites pass 3 runs in a row (163 tests). About 880 lines are deleted net.