baa-conductor


baa-conductor / tasks / archive
im_wower  ·  2026-03-28

T-BUG-014.md

  1# Task T-BUG-014:修正 ws_reconnect 的 completed 语义
  2
  3## 直接给对话的提示词
  4
  5`/Users/george/code/baa-conductor/tasks/archive/T-BUG-014.md` 任务文档,完成开发任务。
  6
  7如需补背景,再读:
  8
  9- `/Users/george/code/baa-conductor/bugs/README.md`
 10- `/Users/george/code/baa-conductor/bugs/BUG-014-ws-reconnect-premature-completed.md`
 11- `/Users/george/code/baa-conductor/bugs/FIX-BUG-014.md`
 12
 13## 建议分支名
 14
 15- `fix/bug-014-ws-reconnect-completed`
 16
 17## 当前状态
 18
 19- 已完成(2026-03-27,当前代码已修复并通过自动化验证)
 20
 21## 目标
 22
 23`ws_reconnect``action_result.completed` 语义与真实执行时序一致,不再在真正重连前就回 `completed: true` 24
 25## 背景
 26
 27当前 Firefox 插件里的 `ws_reconnect` 是通过 `setTimeout(...)` 异步触发断开与重连,但上层 action_result 在函数返回后立即发送,导致 conductor 过早认为动作已经完成。
 28
 29## 涉及仓库
 30
 31- `/Users/george/code/baa-conductor`
 32
 33## 范围
 34
 35- 修正 Firefox 插件侧 `ws_reconnect` 的返回语义
 36- 保证其他 plugin action 的完成语义不被回归
 37- 增加最小但有效的验证
 38
 39## 路径约束
 40
 41优先在插件侧修复,尽量不要改 conductor 的 action 协议;除非现有协议无法表达延迟完成,才允许做最小配套改动。
 42
 43## 推荐实现边界
 44
 45建议新增:
 46
 47- 一个显式的 deferred / pending 完成标记,或等价的最小机制
 48
 49建议放到:
 50
 51- `/Users/george/code/baa-conductor/plugins/baa-firefox/controller.js`
 52
 53如需补自动化验证,可修改:
 54
 55- `/Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`
 56
 57## 允许修改的目录
 58
 59- `/Users/george/code/baa-conductor/plugins/baa-firefox/controller.js`
 60- `/Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`
 61
 62## 尽量不要修改
 63
 64- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/local-api.ts`
 65- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/firefox-bridge.ts`
 66- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/index.ts`
 67
 68## 必须完成
 69
 70### 1. 修正 ws_reconnect 返回语义
 71
 72- `ws_reconnect` 在真正完成前不能回 `completed: true`
 73- conductor 侧仍能收到可用于追踪动作的结果
 74
 75### 2. 保证其他动作不回归
 76
 77- `plugin_status`、`tab_open`、`tab_focus`、`tab_reload` 等现有 action 保持原有语义
 78
 79### 3. 补验证
 80
 81- 至少覆盖 `ws_reconnect` 的结果语义
 82- 如果已有 smoke 测试可复用,优先补到现有测试里
 83
 84## 需要特别注意
 85
 86- 不要把这个任务扩成完整的 reconnect 生命周期重构
 87- 不要破坏现有 `hello` / 状态同步链路
 88- 如果采用 deferred 标记,确保发送 `action_result` 的公共路径能正确识别
 89
 90## 验收标准
 91
 92- `ws_reconnect` 不会在实际重连前回 `completed: true`
 93- 其他 plugin action 行为不回归
 94- 相关自动化测试通过
 95
 96## 推荐验证命令
 97
 98- `pnpm -C /Users/george/code/baa-conductor -F @baa-conductor/conductor-daemon build`
 99- `node --test /Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`
100
101## 完成记录
102
103- 实际修改文件:
104  - `/Users/george/code/baa-conductor/plugins/baa-firefox/controller.js`
105  - `/Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`
106- 实际结果:
107  - `ws_reconnect` 现在会返回 `deferred: true`
108  - `action_result` 发送路径会把 deferred 结果转成 `completed: false`
109  - smoke 已覆盖 `plugin_status.completed === true``ws_reconnect.completed === false`
110- 实际验证:
111  - `pnpm -C /Users/george/code/baa-conductor -F @baa-conductor/conductor-daemon build`
112  - `node --test /Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`(`3/3`)
113- 剩余风险:
114  - 当前自动化验证覆盖的是 conductor 侧语义透传,不是 Firefox 扩展真实运行环境里的 reconnect 生命周期
115  - 真实浏览器里的“已重连完成”仍依赖后续 `hello` / 状态同步
116
117## 交付要求
118
119完成后请说明:
120
121- 修改了哪些文件
122- 核心实现思路是什么
123- 跑了哪些测试
124- 还有哪些剩余风险