Skip to content

fix(dashboard): 修复 master build 红——ls 唤醒对齐通用远程后端守卫 - #957

Closed
deepcoldy wants to merge 1 commit into
masterfrom
fix/dashboard-ipc-riff-import
Closed

fix(dashboard): 修复 master build 红——ls 唤醒对齐通用远程后端守卫#957
deepcoldy wants to merge 1 commit into
masterfrom
fix/dashboard-ipc-riff-import

Conversation

@deepcoldy

Copy link
Copy Markdown
Owner

改了什么

修复 master build 恒红:#912(ls 自动唤醒休眠会话)在 src/core/dashboard-ipc-server.tsPOST /api/sessions/:id/wake 路由里调用了 isRiffBackendSession(ds),但该文件只 importisRemoteBackendSession,漏了这个符号 → tscTS2552: Cannot find name 'isRiffBackendSession'pnpm build 恒挂。

master CI 当前就是红的(bd5d5b95a / 101ffc67b 的 CI 均 failure),挡住所有 PR 的绿。

为什么这么修(不是补 import)

补上 import 能让它编译,但会留下一个语义回归:wakerestart / cd 同属"销毁本地 pane 再 fork 恢复"语义,而远程后端(riff 和 mojo)的 lineage 不在本地 pane 里,都不该被 botmux ls 唤醒 fork。用 riff-only 谓词正是 test/worker-remote-retirement-protocol.test.ts 守卫测试专门盯防的回归类——mojo 会从 riff-only 守卫溜过去(该测试注释:"a copied riff-only guard ... goes red here instead of waiting for a reviewer")。

所以对齐本仓既有约定:

  • 谓词改为通用 isRemoteBackendSession(ds)(与 restart 路由 dashboard-ipc-server.ts:1223、cd 路由 :1786 一致)。
  • 错误码对齐兄弟路由 remote_<verb>_unsupported 命名 → remote_wake_unsupported(原 riff_wake_unsupported 无任何外部消费方:CLI ls 客户端 cli.ts:5460 只透传 body.error,不 switch,重命名安全)。
  • 补中英 i18n cmd.wake.remote_unsupported,与 cmd.{restart,cd,takeover}.remote_unsupported 同风格。

影响面

  • 动的是 daemon dashboard IPC 的 ls-wake 路由一处。
  • 语义上只收紧不放宽:riff → riff+mojo;非远程(本地 pty/tmux)会话的 wake 行为完全不变。
  • 不涉及跨平台 / 跨 CLI 适配器 / 其它后端。

测试验证

  • pnpm build 干净(tsc + typecheck:scripts + dashboard bundle + audit);此前恒红,现绿。
  • test/worker-remote-retirement-protocol.test.ts 守卫测试转绿(12/12;此前该文件 1 红,正卡在 dashboard-ipc-server 的 riff-only 调用)。
  • test/dashboard-ipc.test.ts 新增用例:remote 后端(riff/mojo)会话 wake → 409 remote_wake_unsupported 且不 forkWorker;反向变异(去掉该守卫)用例转红(expected 200 to be 409),确认有牙。
  • i18n 相关 + dashboard-ipc 全量:445 + 154 绿。

本 PR 是给 master 止血的独立小修复(类似 #949 之于 #917),与 #947(工作流开关)无关。合入后 #947 rebase 即可让其 CI 转绿。

🤖 Generated with Claude Code

#912 在 dashboard-ipc-server.ts 的 `/api/sessions/:id/wake` 路由用了
`isRiffBackendSession(ds)` 但未 import 该符号(文件只 import 了
`isRemoteBackendSession`)→ tsc 报错 TS2552,pnpm build 恒挂,master
CI build 一直红,挡住所有 PR。

修法不是补 import,而是对齐本仓既有约定:wake 与 restart/cd 一样是
"销毁本地 pane 再 fork 恢复"语义,远程后端(riff **和** mojo)的 lineage
不在本地 pane 里,都不该被 ls 唤醒 fork。#912 用 riff-only 谓词正是
`worker-remote-retirement-protocol` 守卫测试专门防的回归类(mojo 会从
riff-only 守卫溜过去)。改为通用 `isRemoteBackendSession`,错误码对齐
兄弟路由的 `remote_<verb>_unsupported` 命名(`remote_wake_unsupported`),
并补中英 i18n 文案 `cmd.wake.remote_unsupported`(与 restart/cd/takeover
同风格)。原 `riff_wake_unsupported` 错误码无任何外部消费方(CLI ls 客户端
只透传 body.error,不 switch),重命名安全。

影响面:daemon dashboard IPC 的 ls-wake 路由;只收紧(riff→riff+mojo),
不放宽;非远程(本地 pty/tmux)会话行为不变。

验证:
- tsc --noEmit 干净;pnpm build 干净(此前恒红,现绿)。
- worker-remote-retirement-protocol 守卫测试转绿(12/12,此前该文件
  1 红卡在 dashboard-ipc-server 的 riff-only 调用)。
- dashboard-ipc wake 测试新增用例:remote 后端会话 wake 返回 409
  remote_wake_unsupported 且不 forkWorker;反向变异(去掉守卫)该用例
  转红(200 to be 409)。
- i18n 相关 + dashboard-ipc 全量 445+154 绿。

Co-Authored-By: Claude <noreply@anthropic.com>
@deepcoldy

Copy link
Copy Markdown
Owner Author

关闭:master 3db351d(fix(daemon): /wake 守卫对齐 isRemoteBackendSession + 补测)已用同样的正解落地本 PR 的修复(/wake 改通用 isRemoteBackendSession + remote_wake_unsupported + picker fixture 补 0600),两处测试红已在 master 修绿。本 PR 冗余,关闭。

@deepcoldy deepcoldy closed this Aug 20, 2026
@deepcoldy
deepcoldy deleted the fix/dashboard-ipc-riff-import branch August 20, 2026 13:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant