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- 还有哪些剩余风险