fix(session): merge-time fixes for the dead-pane resume pin (#467)

- test/setup.ts strips CLAUDE_CONFIG_DIR (pinned in test-env-isolation), so
  transcript-fixture tests such as session-custom-model-restart no longer go
  red on a machine that exports it for a separate Claude account (#255).
- The vanished-tmux-session branch of _setupOrAttachMuxSession() relaunches
  the CLI through createSession() just like a failed respawn, so it now takes
  the same resume pin. A genuinely new session is unaffected.
- After a dead-pane respawn of a fallback-chain CLI, _claudeSessionId names
  the conversation the walk actually pinned instead of the chain tail, which
  the walk may have passed over for lack of a transcript.
- _claudeConfigDir() trims the override like claudeProjectsDir() does.
- The remote-reattach test is labelled as documentation, since the pin
  builder's own remote guard would make it pass either way.
- CLAUDE.md: the create-path pin persists through toState() as
  resumeSessionId, and the end of the walk adds no pin rather than clearing
  the launch seed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Codeman maintainer
2026-09-23 11:40:27 +02:00
parent f4d1ee8027
commit 43d4be8eeb
5 changed files with 130 additions and 14 deletions
+6
View File
@@ -45,6 +45,12 @@ delete process.env.CODEMAN_GESTURE;
// operator who exports it (exactly who the feature is for) would otherwise see the
// root-install byte-identity assertions fail.
delete process.env.CODEMAN_BASE_URL;
// CLAUDE_CONFIG_DIR (#255) relocates Claude's whole tree, transcripts included, and
// `claudeProjectsDir()` reads it before it ever looks at `homedir()`. A developer who runs
// Codeman against a separate Claude account exports exactly this, and every test that writes
// a transcript fixture under the temp HOME's `~/.claude/projects` then reads "no transcript"
// (found at merge of #467: test/session-custom-model-restart.test.ts went red).
delete process.env.CLAUDE_CONFIG_DIR;
// Instance selection is PROCESS-WIDE and is what `src/config/instance.ts` derives
// both the data dir and the tmux socket from, so a shell that exports any of these