引擎锁_一条会话锁死一个runner dev-agent claude-code 运行中 · 步骤 6/7
今天 · 15:41
会话绑定的 runner 换过之后记忆串了。把引擎锁扩到所有已绑原生会话——换引擎就当成新记忆, 检测到不一致时强制回正,并在会话头给用户一条看得见的提示。
过程 4 步 · 1m 12s
Readservices/orchestrator/server.mjs
842 lines · runner 绑定逻辑在 L318–L377
Bashrg "runner_locked" apps/web services
6 matches in 2 files
Bashnpm run cc:test:runner-default
FAIL adopt-native: 已绑原生会话换引擎后仍复用旧记忆 1 failing · 12 passing exit code 1
services/orchestrator/server.mjs +19 −6
341 if (session.adopted_native) return session.runner;
341+ const locked = session.runner_locked ?? session.runner;
342+ if (requested && requested !== locked) {
343+ return { runner: locked, notice: "engine_locked" };
344344 }
Bashnpm run cc:test:runner-default
13 passing (2.1s)
Ran 4 commands · Edited 2 files

引擎锁已经从「新建会话」扩到所有已绑原生会话。现在一条会话只认它第一次绑定的 runner:

  • 请求里带的 runner 与锁定值不符时,服务端不再切换,而是回正到锁定值并带上 notice: "engine_locked"
  • 前端会话头收到该 notice 时渲染一条常驻提示:已锁定 claude-code,换引擎会开新记忆
  • 确需换引擎的走「新建会话」,旧会话记忆保持完整、不被污染。

回归里补了一条用例,覆盖「已绑会话 + 异引擎请求」这条之前漏掉的路径。

Changed files
M services/orchestrator/server.mjs +19 −6
M apps/web/index.html +42 −11
A scripts/cc-test-runner-default.mjs +133
PASS 13/13 cc:verify 绿 · 未部署,等你验收
run_4f8a · 1m 12s
给 dev-agent 派下一步…
@ 上下文 3 引擎 claude-code 分支 session/sess_39f7
引擎已锁定 claude-code — 换引擎需新建会话,当前会话记忆不受影响。