π― Goal
Standardize every Node repo in the MIND-Studio org on pnpm β one package manager, one lockfile format, one CI install path. Today the fleet is split (mostly npm, a few pnpm, one repo with no committed lockfile at all), which causes drift, mismatched lockfiles, and per-repo special-casing during cross-fleet work (e.g. the recent @mind-studio/ui 0.7.0 rollout, where two PRs shipped the wrong lockfile type).
π Current state (survey 2026-06-21)
| Repo |
Pkg mgr |
CI |
Action |
| ui |
pnpm |
β
|
β reference β already standard |
| compass |
pnpm |
β no ci.yml |
keep pnpm Β· β add CI |
| mind-maps |
pnpm |
β no ci.yml |
keep pnpm Β· β add CI |
| product |
pnpm |
β no ci.yml |
keep pnpm Β· β add CI |
| builder |
npm |
β
|
π convert β pnpm |
| calendar |
npm |
β
|
π convert β pnpm |
| chat |
npm |
β
|
π convert β pnpm |
| codespaces |
npm |
β
|
π convert β pnpm |
| contacts |
npm |
β
|
π convert β pnpm |
| dock |
npm |
β
|
π convert β pnpm |
| drive |
npm |
β
|
π convert β pnpm |
| landing |
npm |
β
|
π convert β pnpm |
| mind-cli |
npm |
β
|
π convert β pnpm |
| notes |
npm |
β
|
π convert β pnpm |
| photos |
npm |
β
|
π convert β pnpm |
| projects |
npm |
β
|
π convert β pnpm |
| shell |
npm |
β
|
π convert β pnpm |
| slides |
npm |
β
|
π convert β pnpm |
| videos |
npm |
β
|
π convert β pnpm |
| whiteboard |
npm |
β
|
π convert β pnpm |
| core |
β οΈ none |
β
|
π adopt pnpm (no lockfile committed today) |
Totals: 4 already pnpm Β· 16 npm to convert Β· 1 (core) with no committed lockfile Β· 3 pnpm repos missing CI.
π§ Per-repo conversion recipe
Use ui as the reference for .npmrc, packageManager pin, and CI shape.
- Generate the pnpm lockfile from the existing npm one (preserves resolved versions):
pnpm import β then pnpm install to materialize. For core (no lockfile), just pnpm install.
- Remove npm lockfile:
git rm package-lock.json.
- Pin the toolchain: add
"packageManager": "pnpm@<version>" to package.json (match ui's pinned version) so Corepack uses one pnpm everywhere. (No repo sets this today.)
- Keep
.npmrc pointing @mind-studio at GitHub Packages β unchanged; pnpm reads the same ${NODE_AUTH_TOKEN}.
- Update CI (
.github/workflows/*.yml): add pnpm/action-setup (or corepack enable), set actions/setup-node cache: pnpm, and swap commands:
npm ci β pnpm install --frozen-lockfile
npm run <x> β pnpm <x> Β· npx <x> β pnpm dlx <x> (or pnpm exec)
- keep the
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN || secrets.GITHUB_TOKEN }} env on install/build steps.
- Sweep other npm call sites: Dockerfiles,
release.yml/release-please.yml, husky hooks (lint-staged), README/CONTRIBUTING, and any scripts/* that shell out to npm/npx.
- Verify:
pnpm install --frozen-lockfile && pnpm typecheck && pnpm build (and pnpm test where present) green.
- Conventional Commit per repo, e.g.
build: standardize on pnpm (no JIRA id).
β Add CI to the pnpm repos that lack it
compass, mind-maps, product have no ci.yml. Add the standard pnpm CI (lint + typecheck + test + build) as part of this effort so "pnpm everywhere" also means "verified everywhere."
ποΈ Make it the org standard
Update the org standards in MIND-Studio/.github to mandate pnpm (pinned via packageManager + Corepack) for all Node repos, so new repos start compliant and reviews can enforce it.
β οΈ Sequencing note β coordinate with the ui 0.7.0 rollout
The @mind-studio/ui 0.7.0 brand refresh (ui#29) currently has open PRs touching package.json + lockfiles in 15 repos. To avoid churn/conflicts, convert each repo to pnpm AFTER its brand-refresh bump PR merges (or fold the conversion into that PR where it's still open). Do not run both passes on the same repo simultaneously.
β
Acceptance criteria
π Related
π― Goal
Standardize every Node repo in the MIND-Studio org on pnpm β one package manager, one lockfile format, one CI install path. Today the fleet is split (mostly npm, a few pnpm, one repo with no committed lockfile at all), which causes drift, mismatched lockfiles, and per-repo special-casing during cross-fleet work (e.g. the recent
@mind-studio/ui0.7.0 rollout, where two PRs shipped the wrong lockfile type).π Current state (survey 2026-06-21)
Totals: 4 already pnpm Β· 16 npm to convert Β· 1 (core) with no committed lockfile Β· 3 pnpm repos missing CI.
π§ Per-repo conversion recipe
Use
uias the reference for.npmrc,packageManagerpin, and CI shape.pnpm importβ thenpnpm installto materialize. Forcore(no lockfile), justpnpm install.git rm package-lock.json."packageManager": "pnpm@<version>"topackage.json(match ui's pinned version) so Corepack uses one pnpm everywhere. (No repo sets this today.).npmrcpointing@mind-studioat GitHub Packages β unchanged; pnpm reads the same${NODE_AUTH_TOKEN}..github/workflows/*.yml): addpnpm/action-setup(orcorepack enable), setactions/setup-nodecache: pnpm, and swap commands:npm ciβpnpm install --frozen-lockfilenpm run <x>βpnpm <x>Β·npx <x>βpnpm dlx <x>(orpnpm exec)NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN || secrets.GITHUB_TOKEN }}env on install/build steps.release.yml/release-please.yml, husky hooks (lint-staged), README/CONTRIBUTING, and anyscripts/*that shell out tonpm/npx.pnpm install --frozen-lockfile && pnpm typecheck && pnpm build(andpnpm testwhere present) green.build: standardize on pnpm(no JIRA id).β Add CI to the pnpm repos that lack it
compass,mind-maps,producthave noci.yml. Add the standard pnpm CI (lint + typecheck + test + build) as part of this effort so "pnpm everywhere" also means "verified everywhere."ποΈ Make it the org standard
Update the org standards in MIND-Studio/.github to mandate pnpm (pinned via
packageManager+ Corepack) for all Node repos, so new repos start compliant and reviews can enforce it.The
@mind-studio/ui0.7.0 brand refresh (ui#29) currently has open PRs touchingpackage.json+ lockfiles in 15 repos. To avoid churn/conflicts, convert each repo to pnpm AFTER its brand-refresh bump PR merges (or fold the conversion into that PR where it's still open). Do not run both passes on the same repo simultaneously.β Acceptance criteria
pnpm-lock.yaml, nopackage-lock.json/yarn.lock, and apackageManager: pnpm@<v>pin.pnpm install --frozen-lockfileand runpnpm-prefixed scripts;NODE_AUTH_TOKENstill wired for GitHub Packages.npm/npxinvocations in Dockerfiles, scripts, hooks, or docs.compass,mind-maps,producthave a working CI workflow.pnpm install --frozen-lockfile && pnpm build(+ typecheck/test where present).π Related