Skip to content

fix(npm): let an unproven package name fail without failing the release - #14

Merged
protonspy merged 1 commit into
mainfrom
fix/revert-scc-cli-name
Aug 4, 2026
Merged

fix(npm): let an unproven package name fail without failing the release#14
protonspy merged 1 commit into
mainfrom
fix/revert-scc-cli-name

Conversation

@protonspy

Copy link
Copy Markdown
Owner

Recovery for the failed v0.9.0.

What happened

403 Forbidden - PUT https://registry.npmjs.org/scc-cli
Package name too similar to existing package cp-cli

npm's typosquatting similarity check runs only on a real publish. npm view scc-cli returned 404 and npm publish --dry-run passed — neither exercises it. Both were reported as proof the name was free; neither was.

scc-cli was first in LAUNCHERS, so set -e took @protonspy/scc down with it.

State it left behind

6 platform packages published at 0.9.0, orphaned
@protonspy/scc still 0.8.0 — never published
scc-cli not published
tag / GitHub Release not created

No user-facing breakage: the 0.8.0 path is intact, and nothing resolves the orphans.

The fix

LAUNCHERS entries carry required, and the tiers are directories so publish order and failure policy are visible in the layout:

dist/scc-*/                  FATAL
dist/launchers/              FATAL      @protonspy/scc
dist/launchers-optional/     fail-soft  spec-claude-code-cli

Only a required name may appear in documentation — the entry.md embedded in six binaries included. Pointing an install line at a package that might be refused is the same bug somewhere more expensive. So docs return to @protonspy/scc, and spec-claude-code-cli ships untested and undocumented; the release after the one that proves it publishes can promote it.

Template version stays 9. No v0.9.0 binary is reachable — tag and Release were skipped, and no launcher resolves the orphaned platform packages — so the v9 that named scc-cli never shipped and is corrected in place rather than bumped.

Verified

  • Packaging run against synthetic artifacts: 8 packages, correct tiers, correct order.
  • No scc-cli left anywhere outside the incident write-ups.
  • gofmt, go vet, go test ./..., node --check all clean.

Next release is v0.9.1 — 0.9.0's platform packages are immutable and stay orphaned.

🤖 Generated with Claude Code

https://claude.ai/code/session_01J54qbk8RpC2tZH8LBz6T2b

v0.9.0 died on `403 — Package name too similar to existing package cp-cli`.
npm applies a typosquatting similarity check that runs only on a real publish:
`npm view scc-cli` returned 404 and `npm publish --dry-run` passed, and neither
says anything about it. Because the rejected name published first, `set -e`
took `@protonspy/scc` down with it — six platform packages reached the registry
at 0.9.0 with no launcher that resolves them, and no tag was cut.

LAUNCHERS entries now carry `required`, and the tiers are directories so both
publish order and failure policy are visible in the layout: dist/scc-*/, then
dist/launchers/, then dist/launchers-optional/. A required name is already ours
and a failure there is real; an unproven one is attempted last and warns.

The corollary is the load-bearing half: only a required name may appear in
documentation, the embedded entry.md included. Pointing an install line at a
package that might be refused is the same bug somewhere more expensive, so the
docs go back to @protonspy/scc and `spec-claude-code-cli` ships untested and
undocumented. Promote it in the release after the one that proves it publishes.

Template version stays 9 rather than bumping: no v0.9.0 binary is reachable —
the tag and GitHub Release steps were skipped, and no launcher on the registry
resolves the orphaned platform packages — so the v9 that named scc-cli never
shipped to anyone and is corrected in place.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J54qbk8RpC2tZH8LBz6T2b
@protonspy
protonspy merged commit 6d1e7a8 into main Aug 4, 2026
4 checks passed
@protonspy
protonspy deleted the fix/revert-scc-cli-name branch August 4, 2026 04:25
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