From a93325b312098588b88fcebaf27f215b96bd374b Mon Sep 17 00:00:00 2001 From: arkon Date: Thu, 23 Apr 2026 11:00:10 +0200 Subject: [PATCH] fix: sync package-lock.json to 0.6.0 and document lockfile step in COM workflow package.json has been at 0.6.0 since release, but package-lock.json stayed at 0.3.11 because `npm run version-packages` (changesets) does not regenerate the lockfile. This left `npm ci` broken against the committed state. Also adds step 4 (`npm install --package-lock-only`) to the COM workflow in CLAUDE.md so future releases keep the lockfile in sync automatically. Credit to @Matt2012 (#70) for catching the lockfile drift. Co-Authored-By: Claude Opus 4.7 (1M context) --- CLAUDE.md | 22 +++++++++++++--------- package-lock.json | 4 ++-- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 42bfc70a..be25cd14 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -10,7 +10,8 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co | Type check | `tsc --noEmit` | | Lint | `npm run lint` (fix: `npm run lint:fix`) | | Format | `npm run format` (check: `npm run format:check`) | -| Single test | `npx vitest run test/.test.ts` | +| Single test | `npm test -- test/.test.ts` (or `npx vitest run --config config/vitest.config.ts test/.test.ts`) | +| Build | `npm run build` (esbuild via `scripts/build.mjs`, NOT tsc — `tsc --noEmit` is type-check only) | | Production | `npm run build && systemctl --user restart codeman-web` | ## CRITICAL: Session Safety @@ -48,9 +49,10 @@ When user says "COM": CHANGESET ``` Replace `patch` with `minor` or `major` as needed. Include `"xterm-zerolag-input": patch` on a separate line if that package changed too. -3. **Consume the changeset**: `npm run version-packages` (bumps versions in `package.json` files and updates `CHANGELOG.md`) -4. **Sync CLAUDE.md version**: Update the `**Version**` line below to match the new version from `package.json` -5. **Commit and deploy**: `git add -A && git commit -m "chore: version packages" && git push && npm run build && systemctl --user restart codeman-web` +3. **Consume the changeset**: `npm run version-packages` (auto-bumps versions in `package.json` files and auto-updates `CHANGELOG.md` — never hand-edit `CHANGELOG.md`) +4. **Sync `package-lock.json`**: `npm install --package-lock-only` (changesets does NOT touch the lockfile; skipping this leaves `package-lock.json` stuck on an old version and breaks `npm ci`) +5. **Sync CLAUDE.md version**: Update the `**Version**` line below to match the new version from `package.json` +6. **Commit and deploy**: `git add -A && git commit -m "chore: version packages" && git push && npm run build && systemctl --user restart codeman-web` **Version**: 0.6.0 (must match `package.json`) @@ -113,7 +115,7 @@ Codeman is a Claude Code session manager with web interface and autonomous Ralph | **Frontend** | `src/web/public/app.js` (~2.8K lines, core) + 5 infra modules (`constants.js`, `mobile-handlers.js`, `voice-input.js`, `notification-manager.js`, `keyboard-accessory.js`) + 7 domain modules (`terminal-ui.js`, `respawn-ui.js`, `ralph-panel.js`, `orchestrator-panel.js`, `settings-ui.js`, `panels-ui.js`, `session-ui.js`) + 4 feature modules (`ralph-wizard.js`, `api-client.js`, `subagent-windows.js`, `input-cjk.js`) + `sw.js` | | | **Types** | `src/types/index.ts` → 14 domain files | See `@fileoverview` in index.ts | -★ = Large file (>50KB). All files have `@fileoverview` JSDoc — read that before diving in. +★ = Large file (>50KB). All files have `@fileoverview` JSDoc — read that before diving in. Discovery aid: `grep -l '@fileoverview' src/web/routes/*.ts` lists all route modules; same grep works for `src/types/`, `src/web/public/*.js`. **Local package**: `packages/xterm-zerolag-input/` — local echo overlay for xterm.js; copy embedded in `app.js`. @@ -193,11 +195,13 @@ All in `~/.codeman/`: `state.json` (sessions, settings, respawn), `mux-sessions. **CRITICAL: You are running inside a Codeman-managed tmux session.** Never run `npx vitest run` (full suite) — it spawns/kills tmux sessions and will crash your own session. Only run individual files: ```bash -npx vitest run test/.test.ts # Single file (SAFE) -npx vitest run -t "pattern" # By name (SAFE) -# npx vitest run # DANGEROUS — DON'T DO THIS +npm test -- test/.test.ts # Single file (SAFE, uses config/vitest.config.ts) +npm test -- -t "pattern" # By name (SAFE) +# npm test # DANGEROUS — runs full suite, DON'T DO THIS ``` +Raw `npx vitest` skips `config/vitest.config.ts`; always use `npm test --` or pass `--config config/vitest.config.ts`. + **Config**: Vitest with `globals: true`, `fileParallelism: false`. Timeout 30s, teardown 60s. **Safety**: `test/setup.ts` snapshots pre-existing tmux sessions and never kills them. Only `registerTestTmuxSession()` sessions get cleaned up. @@ -234,7 +238,7 @@ Key: `scripts/tmux-manager.sh` (safe tmux mgmt), `scripts/tunnel.sh` (tunnel sta ## Memory Leak Prevention -24+ hour sessions: use `CleanupManager`, clear Maps in `stop()`, guard async with `if (this.cleanup.isStopped) return`. Frontend: store handler refs, clean in `close*()`. Verify: `npx vitest run test/memory-leak-prevention.test.ts`. +24+ hour sessions: use `CleanupManager`, clear Maps in `stop()`, guard async with `if (this.cleanup.isStopped) return`. Frontend: store handler refs, clean in `close*()`. Verify: `npm test -- test/memory-leak-prevention.test.ts`. ## Common Workflows diff --git a/package-lock.json b/package-lock.json index 260f0212..e4d04a47 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "aicodeman", - "version": "0.3.11", + "version": "0.6.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "aicodeman", - "version": "0.3.11", + "version": "0.6.0", "hasInstallScript": true, "license": "MIT", "workspaces": [