# Skill: Publish @uncaged/nerve packages to npm ## When to use When releasing a new version of any `@uncaged/nerve-*` package to npm. ## Prerequisites - npm login with an account that has **owner** access to the `@uncaged` org - All tests pass: `pnpm -r run test` - Clean working tree (no uncommitted changes) ## Packages | Package | Path | npm | |---------|------|-----| | `@uncaged/nerve-core` | `packages/core` | [link](https://www.npmjs.com/package/@uncaged/nerve-core) | | `@uncaged/nerve-daemon` | `packages/daemon` | [link](https://www.npmjs.com/package/@uncaged/nerve-daemon) | | `@uncaged/nerve-cli` | `packages/cli` | [link](https://www.npmjs.com/package/@uncaged/nerve-cli) | ## Dependency order `core` → `daemon` → `cli` Always publish in this order. If `core` has changes, bump and publish it first, then update dependents. ## Steps ### 1. Ensure clean state ```bash git checkout main && git pull origin main pnpm install pnpm -r run build pnpm -r run test ``` ### 2. Bump versions Manually update `version` in each changed package's `package.json`. Follow semver: - **patch** (0.1.x): bug fixes, refactors - **minor** (0.x.0): new features, non-breaking API additions - **major** (x.0.0): breaking changes If bumping `core`, also update the `@uncaged/nerve-core` dependency version in `daemon` and `cli` package.json. Same for `daemon` → `cli`. ### 3. Build ```bash pnpm -r run build ``` ### 4. Publish (in order) ```bash # Only publish packages that have version bumps # MUST use pnpm publish (not npm) — pnpm converts workspace:* to real versions cd packages/core && pnpm publish --access public --no-git-checks cd packages/daemon && pnpm publish --access public --no-git-checks cd packages/cli && pnpm publish --access public --no-git-checks ``` ### 5. Commit & tag ```bash git add -A git commit -m "release: @uncaged/nerve-core@X.Y.Z, @uncaged/nerve-daemon@X.Y.Z, @uncaged/nerve-cli@X.Y.Z" git tag -a vX.Y.Z -m "Release vX.Y.Z" git push origin main --tags ``` ## Pitfalls - **Don't publish without building first** — `tsup` output in `dist/` is what npm ships - **Dependency order matters** — if you publish `daemon` before `core`, npm may resolve the old `core` version - **`--access public`** is required for scoped packages on first publish; safe to always include - **Check `npm whoami`** to confirm you're logged in as the right account - **No changeset tool** — this project uses manual version bumps (no changesets/lerna)