Skip to content

fix(release): republish types as 1.0.1 — 1.0.0 is permanently unavailable on npm - #113

Merged
ABB65 merged 1 commit into
mainfrom
fix/types-1-0-1-republish
Aug 13, 2026
Merged

fix(release): republish types as 1.0.1 — 1.0.0 is permanently unavailable on npm#113
ABB65 merged 1 commit into
mainfrom
fix/types-1-0-1-republish

Conversation

@ABB65

@ABB65 ABB65 commented Aug 13, 2026

Copy link
Copy Markdown
Member

Three packages are broken on npm right now

@contentrain/mcp@3.0.0, @contentrain/query@7.0.2 and contentrain@0.9.0
cannot be installed:

$ npm i @contentrain/mcp@3.0.0
npm error code ETARGET
npm error notarget No matching version found for @contentrain/types@1.0.0.

Verified against the live registry, not inferred.

Why

@contentrain/types@1.0.0 was published on 2025-01-04 and later
unpublished — npm view @contentrain/types versions lists only 0.7.0, 0.8.0,
0.9.0, but npm view … time still carries a 1.0.0 entry. npm reserves an
unpublished version number permanently, so when the release sequence climbed
back to 1.0.0 the registry refused it:

npm error 400 Bad Request - PUT .../@contentrain%2ftypes
  - Cannot publish over previously published version "1.0.0".

Five of the six packages published; types did not. workspace:* resolves to an
exact version at publish time, so the three packages that depend on types went
out pinned to 1.0.0 — a version that does not exist and cannot be created.

@contentrain/rules@0.7.0 and @contentrain/skills@0.8.0 are unaffected; they
do not depend on types.

The fix

One changeset bumping types to patch. updateInternalDependencies: "patch"
carries the dependents:

@contentrain/types 1.0.0 → 1.0.1
@contentrain/mcp 3.0.0 → 3.0.1
@contentrain/query 7.0.2 → 7.0.3
contentrain 0.9.0 → 0.9.1

No code changes. 1.0.0 never reached anyone, so skipping it costs nothing.

The broken versions are left published rather than unpublished — unpublishing
is what created this situation, and doing it again would burn three more
version numbers permanently. The new releases become latest.

Also: a timeout I dropped

Unrelated, but it has to land before main is green.

Converting tools/content.test.ts to the template+clone pattern replaced its
header and took vi.setConfig({ testTimeout: 120000 }) with it. The file fell
back to the 30s package default, and a test that runs in 2.1s alone took over
30s with all six packages competing for the machine — reported as a test
failure rather than as contention. It passed both PR CI runs, which is what a
load-dependent flake does.

Declaration restored, and the package floor raised 30s → 60s: relying on each
file to remember is exactly what just failed. Files doing heavy git work still
declare their own 120s. A genuine hang now costs 60s once rather than 30s,
which is the cheaper mistake.

Follow-up worth considering

workspace:^ instead of workspace:* would have published ^1.0.0 rather
than 1.0.0, and this would have healed itself the moment 1.0.1 landed —
without republishing the dependents at all. Not changed here; it affects every
package and belongs in its own PR.

pnpm lint, typecheck, build, 1650 tests, plugin:build, release:check
— all green.

🤖 Generated with Claude Code

Two unrelated things that both have to land before the registry is healthy.

**types 1.0.1.** `@contentrain/types@1.0.0` was published on 2025-01-04 and
later unpublished. npm reserves an unpublished version number permanently, so
when the release sequence reached 1.0.0 again the registry refused it with a
400. Five of six packages published; types did not.

`workspace:*` resolves to an exact version at publish time, so mcp@3.0.0,
query@7.0.2 and contentrain@0.9.0 all shipped pinned to a version that does
not exist and cannot be created. All three fail to install with ETARGET —
verified against the live registry.

The changeset bumps types to patch; `updateInternalDependencies: "patch"`
carries the three dependents. Nothing about the code changes, and 1.0.0 never
reached anyone.

Worth doing later: `workspace:^` instead of `workspace:*` would have published
`^1.0.0` and healed itself the moment 1.0.1 landed, without republishing the
dependents at all.

**A timeout I dropped.** Converting tools/content.test.ts to the template+clone
pattern replaced its header, and took `vi.setConfig({ testTimeout: 120000 })`
with it. The file fell back to the 30s package default and a test that runs in
2.1s alone took over 30s with all six packages competing for the machine —
reported as a test failure rather than as contention. It survived both PR CI
runs, which is what a load-dependent flake does.

Declaration restored, and the package floor raised 30s -> 60s, because relying
on each file to remember is precisely what just failed. Files doing heavy git
work still declare their own 120s. A genuine hang now costs 60s once instead
of 30s, which is a cheaper mistake than a false red.
@netlify

netlify Bot commented Aug 13, 2026

Copy link
Copy Markdown

Deploy Preview for contentrain-ai ready!

Name Link
🔨 Latest commit 0430ce2
🔍 Latest deploy log https://app.netlify.com/projects/contentrain-ai/deploys/6a7e2bd35173db000890ddfe
😎 Deploy Preview https://deploy-preview-113--contentrain-ai.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@ABB65
ABB65 merged commit 33a30a1 into main Aug 13, 2026
6 checks passed
@ABB65
ABB65 deleted the fix/types-1-0-1-republish branch August 13, 2026 20:43
@github-actions github-actions Bot locked and limited conversation to collaborators Aug 13, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant