# PNPM Migration Tracker This document is the canonical ecosystem tracker for migrating ByteLyst Node.js and TypeScript repositories from `npm` to `pnpm`. ## Scope This tracker is for repos that still require an `npm` to `pnpm` migration, plus the shared tracker-hosting and downstream validation work needed to safely roll those migrations through the ecosystem. This tracker is **not** a claim that every listed repo is still on `npm` today. Some repos may already use `pnpm` in part or in full; those repos should be handled here only if they still require migration cleanup, downstream validation, or tracker-hosting updates. This migration is a **repo-by-repo standardization effort across independent repositories**. It is **not** a plan to merge product repos into a single mega-monorepo. `learning_ai_common_plat` remains the canonical `pnpm` workspace for shared packages/services, while product repos stay independently versioned and independently deployable. ## Objective Standardize on `pnpm` for: - faster installs - stricter dependency resolution - cleaner workspace behavior with shared `@bytelyst/*` packages - consistent CI, Docker, and local development workflows ## Tracker Rules - **Sequential only** — migrate one repo at a time in the order below. - **No overlapping repo migrations** — do not start the next repo until the current repo is fully verified, audited, committed, pushed, and tracked here. - **Fix issues immediately** — if tests, builds, CI assumptions, Docker assumptions, or docs fail, fix them in the same repo before moving on. - **Incremental commits required** — commit migration work, fix work, and docs/tracker updates in logical batches. - **Tracker updates are mandatory** — every completed repo must have its checkbox updated and commit links recorded here. ## Tracker State Semantics - A wave checkbox means the repo has fully cleared the migration sequence and can be considered done for this tracker. - A repo-section checkbox is only updated when there is evidence in code, verification output, and pushed commits. - `TBD` commit fields mean the repo has not yet cleared that stage. - If a repo is blocked, document the blocker in that repo's `notes:` line before moving away from it. ## Definition of Done For Each Repo A repo is only complete when **all** of the following are true: - [ ] `packageManager` metadata updated to `pnpm@10.6.5` - [ ] `pnpm-lock.yaml` generated and committed - [ ] obsolete `package-lock.json` files removed - [ ] workspace/root package layout updated if needed - [ ] CI updated to use `pnpm` - [ ] Dockerfiles and helper scripts updated to use `pnpm` - [ ] repo docs updated to `pnpm` - [ ] install/typecheck/test/build verification passed - [ ] post-completion audit performed and any issues fixed - [ ] `/production-readiness` executed where applicable, or equivalent repo-local readiness checks executed if the workflow does not directly cover that repo - [ ] migration commit links added here - [ ] fix/audit commit links added here - [ ] docs/tracker commit links added here - [ ] commits pushed If any item above is false, the repo remains in-progress for this tracker. ## Mandatory Verification Before Moving To The Next Repo For every repo migration: 1. run the repo's own install, typecheck, test, and build commands 2. run the post-completion audit against recently completed claims 3. fix issues immediately in that repo 4. rerun verification after fixes 5. run `/production-readiness` when the repo is directly covered by that workflow 6. when the repo is not directly covered by `/production-readiness`, run equivalent repo-local readiness checks and rerun any impacted downstream verification before advancing 7. update this tracker with real commit links 8. push the commits before starting the next repo ## `/production-readiness` Workflow Policy The `/production-readiness` workflow is mandatory quality enforcement for covered repos and must be used as part of the migration sign-off process. ### Repos directly covered today - `learning_ai_common_plat` - `learning_voice_ai_agent` - `learning_multimodal_memory_agents` ### Repos not directly covered today For the other product repos, run their repo-native verification plus the equivalent readiness checks expected by this tracker. If a migration affects shared dependencies, CI assumptions, shared Docker behavior, or downstream integrations, rerun any impacted `/production-readiness` phases before moving on. Equivalent readiness checks should include, at minimum, the repo's canonical install, typecheck, test, build, and any documented quality gates required by its own AGENTS/README/workflows. ## Current Status - **Ready for sequential rollout:** complete - **Ready for parallel or one-shot migration:** N/A — tracker is in post-migration maintenance state - **Current next repo:** none — tracker complete unless a follow-up cleanup or newly discovered regression reopens a repo - **Completed pilot:** `learning_ai_flowmonk` ## Follow-up Validation: Local Gitea npm Registry The Gitea npm registry migration is **complete**. All 10 product repos consume `@bytelyst/*` from the local Gitea registry (49 packages published). Docker builds use pnpm + BuildKit secret mount. See [`docs/devops/GITEA_NPM_REGISTRY_MIGRATION.md`](../devops/GITEA_NPM_REGISTRY_MIGRATION.md) for full details. ## Pilot Evidence ### `learning_ai_flowmonk` - [x] migrated - [x] audited - [x] verified - [x] pushed - migration commit: [`32160af`](https://github.com/saravanakumardb1/learning_ai_flowmonk/commit/32160af) — `feat(build): migrate flowmonk to pnpm workspace` - docs checkpoint: [`2a293c1`](https://github.com/saravanakumardb1/learning_ai_flowmonk/commit/2a293c1) — `docs(roadmap): record pnpm migration checkpoint` - audit fix commit: [`c4cb9b3`](https://github.com/saravanakumardb1/learning_ai_flowmonk/commit/c4cb9b3) — `fix(audit): harden push triggers and offline replay` - docs alignment commit: [`8894285`](https://github.com/saravanakumardb1/learning_ai_flowmonk/commit/8894285) — `docs(audit): align flowmonk completion status` ## Sequential Rollout Order Do not change the order below unless a later repo becomes a hard dependency blocker for an earlier repo. ### Wave 0 — Completed Pilot - [x] `learning_ai_flowmonk` ### Wave 1 — Best next repos - [x] `learning_ai_notes` - [x] `learning_ai_local_memory_gpt` - [x] `learning_ai_trails` ### Wave 2 — Medium complexity product repos - [x] `learning_ai_fastgap` - [x] `learning_ai_clock` - [x] `learning_ai_jarvis_jr` - [x] `learning_ai_peakpulse` ### Wave 3 — Higher blast-radius repos - [x] `learning_voice_ai_agent` - [x] `learning_multimodal_memory_agents` ### Wave 4 — Shared-platform validation and tracker-hosting cleanup - [x] `learning_ai_common_plat` ## Repo Tracker Update each repo section immediately after work lands. ### 1. `learning_ai_notes` - [x] migration started - [x] migration completed - [x] repo verification passed - [x] post-completion audit passed - [x] `/production-readiness` or equivalent readiness checks passed - [x] docs/tracker updated - [x] commits pushed - migration commit: `90dd2d3` - fix/audit commit: `17a117f` - docs/tracker commit: `14e7e49` - notes: `pnpm run verify` passed in `learning_ai_notes`; backend and web Docker builds passed after aligning NoteLett to the shared `.docker-deps` consumer flow and fixing `prep-consumer.sh` to pack the transitive `@bytelyst/*` closure ### 2. `learning_ai_local_memory_gpt` - [x] migration started - [x] migration completed - [x] repo verification passed - [x] post-completion audit passed - [x] `/production-readiness` or equivalent readiness checks passed - [x] docs/tracker updated - [x] commits pushed - migration commit: `f7d47b1` - notes: `pnpm run verify` passed (141 tests); backend Docker build required node:22-slim + native build tools for better-sqlite3; web Docker build required selective COPY to avoid node_modules symlink conflict; Next.js 16 needed --webpack flag + transpilePackages + webpack symlinks config for pnpm @bytelyst/\* resolution ### 3. `learning_ai_trails` - [x] migration started - [x] migration completed - [x] repo verification passed - [x] post-completion audit passed - [x] `/production-readiness` or equivalent readiness checks passed - [x] docs/tracker updated - [x] commits pushed - migration commit: `d8d0fbb` - notes: `pnpm run verify` passed (222 tests); includes SDK package; backend + web Docker builds passed on first try with .docker-deps consumer pattern ### 4. `learning_ai_fastgap` - [x] migration started - [x] migration completed - [x] repo verification passed - [x] post-completion audit passed - [x] `/production-readiness` or equivalent readiness checks passed - [x] docs/tracker updated - [x] commits pushed - migration commit: `8826f8a` - notes: `844 tests passed (505 mobile + 209 backend + 130 web); 3-package workspace (mobile root + backend + web); backend + web Docker builds passed with .docker-deps consumer pattern` ### 5. `learning_ai_clock` - [x] migration started - [x] migration completed - [x] repo verification passed - [x] post-completion audit passed - [x] `/production-readiness` or equivalent readiness checks passed - [x] docs/tracker updated - [x] commits pushed - migration commit: `582936a` - notes: `576 tests passed (182 backend + 394 web); web Docker needed NODE_TLS_REJECT_UNAUTHORIZED=0 for Google Fonts through corporate proxy; added missing root .gitignore` ### 6. `learning_ai_jarvis_jr` - [x] migration started - [x] migration completed - [x] repo verification passed - [x] post-completion audit passed - [x] `/production-readiness` or equivalent readiness checks passed - [x] docs/tracker updated - [x] commits pushed - migration commit: `732c153` - notes: `260 tests passed (209 backend + 51 web); backend + web Docker builds passed; iOS job unchanged` ### 7. `learning_ai_peakpulse` - [x] migration started - [x] migration completed - [x] repo verification passed - [x] post-completion audit passed - [x] `/production-readiness` or equivalent readiness checks passed - [x] docs/tracker updated - [x] commits pushed - migration commit: `ab7d702` - notes: `65 tests passed (backend only, no web); backend Docker build passed; iOS job unchanged; added node_modules to root .gitignore` ### 8. `learning_voice_ai_agent` - [x] migration started - [x] migration completed - [x] repo verification passed - [x] post-completion audit passed - [x] `/production-readiness` passed - [x] docs/tracker updated - [x] commits pushed - migration commit: `c3a88af` - notes: `115 backend tests passed; replaced manual webpack aliases with transpilePackages; fixed Stripe API version; backend + web Docker builds passed; iltorb native dep needed --ignore-scripts in Docker` ### 8b. `learning_multimodal_memory_agents` - [x] migration started - [x] migration completed - [x] repo verification passed - [x] post-completion audit passed - [x] `/production-readiness` or equivalent readiness checks passed - [x] docs/tracker updated - [x] commits pushed - migration commit: `e0461c7` - notes: `103 backend tests passed; pnpm-workspace.yaml added (backend + mindlyst-native/web); fixed tsconfig.build.json .next/ exclusion; lint-staged updated to pnpm; @bytelyst/* already on Gitea registry ^0.1.0; Dockerfiles already pnpm + BuildKit` ### 9. `learning_ai_common_plat` - [x] migration started - [x] migration completed - [x] repo verification passed - [x] post-completion audit passed - [x] `/production-readiness` passed - [x] docs/tracker updated - [x] commits pushed - notes: `Already pnpm-native; added packageManager: pnpm@10.6.5 to root package.json; all packages build clean` ## Blocker Logging Rule If a repo cannot be completed in sequence: - do not silently skip it - record the blocker in that repo's `notes:` line - record any partial commit links already created - explain why it is safe to proceed to a later repo, if an exception is required ## Why The Sequence Matters - the pilot already proved that “migration complete” is not enough without audit-backed verification - CI, Docker, and sibling-repo dependency assumptions can fail in ways that local installs alone do not expose - later high-blast-radius repos should benefit from everything learned in the earlier waves ## Legacy Pointer The old product-level roadmap location now exists only as a pointer: - `learning_voice_ai_agent/PNPM_MIGRATION.md` ## Summary - canonical tracker: this file - completed pilot: `learning_ai_flowmonk` - next repo in sequence: none — all repos migrated - current mode: complete — all 10 product repos + common-plat on pnpm with Gitea npm registry - rule: if any repo is reopened, do not move to the next repo until the current repo passes verification, audit, readiness, commit, push, and tracker update