im_wower
·
2026-03-28
T-S031.md
1# Task T-S031:把 live `browser.final_message` 接到 BAA instruction center
2
3## 直接给对话的提示词
4
5读 `/Users/george/code/baa-conductor/tasks/archive/T-S031.md` 任务文档,完成开发任务。
6
7如需补背景,再读:
8
9- `/Users/george/code/baa-conductor/plans/archive/BAA_FINAL_MESSAGE_INGEST_REQUIREMENTS.md`
10- `/Users/george/code/baa-conductor/plans/archive/BAA_BROWSER_FINAL_MESSAGE_RELAY_REQUIREMENTS.md`
11- `/Users/george/code/baa-conductor/plans/archive/BAA_INSTRUCTION_CENTER_REQUIREMENTS.md`
12- `/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/docs/06-integration-with-current-baa-conductor.md`
13
14## 当前基线
15
16- 仓库:`/Users/george/code/baa-conductor`
17- 分支:`main`
18- 提交:`85a27b6`
19- 开工要求:如需新分支,从当前 `main` 新切
20
21## 建议分支名
22
23- `feat/browser-final-message-ingest`
24
25## 目标
26
27把 live `browser.final_message` 直接接到 conductor 侧 `BaaInstructionCenter`,让浏览器最终消息可以进入当前 Phase 1 的解析和执行闭环。
28
29## 背景
30
31`T-S029` 已经把 ChatGPT / Gemini 最终 assistant message relay 到 conductor,`T-S030` 也已经把 `instructions/` Phase 1 跑通。
32
33当前缺口是两者还没真正接线:`browser.final_message` 现在只做最近快照保留,没有直接进入 `processAssistantMessage(...)`。
34
35## 涉及仓库
36
37- `/Users/george/code/baa-conductor`
38
39## 范围
40
41- Firefox WS `browser.final_message` 实时接线
42- instruction center live ingest 路径
43- live message dedupe / fail-closed
44- 最小执行结果观察面
45- 自动化测试与文档回写
46
47## 路径约束
48
49- 首版只接本机精确 target:
50 - `conductor`
51 - `system`
52- 不要在这张卡里顺手做 artifact / manifest / delivery plan
53- 插件侧不加 parser,不改 `final-message.js` 提取逻辑,除非是修这个任务的直接 blocker
54
55## 推荐实现边界
56
57建议新增:
58
59- `apps/conductor-daemon/src/instructions/ingest.ts` 或等价 live ingest 封装
60- 最小执行摘要 / 最近结果快照结构
61
62建议放到:
63
64- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/instructions/`
65- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/`
66
67## 允许修改的目录
68
69- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/`
70- `/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/`
71- `/Users/george/code/baa-conductor/docs/api/`
72- `/Users/george/code/baa-conductor/tasks/`
73- `/Users/george/code/baa-conductor/plans/`
74
75## 尽量不要修改
76
77- `/Users/george/code/baa-conductor/plugins/baa-firefox/`
78- `/Users/george/code/baa-conductor/tests/browser/`
79- `/Users/george/code/baa-conductor/packages/db/`
80- `/Users/george/code/baa-conductor/apps/status-api/`
81
82## 必须完成
83
84### 1. 打通 live final message ingest
85
86- `browser.final_message` 到达后能进入 `BaaInstructionCenter`
87- 无 ` ```baa ` 的消息必须安全忽略
88- replay 同一条 final message 不能重复执行
89
90### 2. 保持 fail-closed 和当前边界
91
92- batch 内任一 unsupported / denied 指令时,不能半执行
93- 当前仍只允许本机精确 target
94- 不要顺手扩到 `browser.*` / `pool.*` / `role.*`
95
96### 3. 补读面或审计摘要
97
98- 至少保留最近一次 ingest / execute 的最小摘要,便于诊断
99- 文档要明确:当前还没有 artifact / upload / inject
100
101## 需要特别注意
102
103- 不要把这张卡扩成“自动注入和自动发送”
104- 不要为了接 live ingest 重新改语法
105- 和 `T-S032` 并行时,这张卡不要去实现 `apps/conductor-daemon/src/artifacts/`
106
107## 验收标准
108
109- live `browser.final_message` 能触发当前 Phase 1 范围内的指令执行
110- 无 ` ```baa ` 的普通消息不会误执行
111- replay 同一条 final message 不会重复执行
112- unsupported / denied batch 会 fail-closed
113- `git diff --check` 通过
114
115## 评测要求
116
117### 1. 正向评测
118
119- live `browser.final_message` 携带 `@conductor::describe` 可成功执行
120- live `browser.final_message` 携带多条合法 ` ```baa ` block` 可按当前 Phase 1 规则执行
121
122### 2. 反向评测
123
124- 普通 Markdown / 普通代码块不能误触发执行
125- replay 相同 `assistant_message_id + raw_text` 不能重复执行
126
127### 3. 边界评测
128
129- batch 中混入 unsupported 指令时必须 fail-closed
130- 缺少 `conversation_id` 但 message identity 其余字段可用时,系统不能崩
131
132## 推荐验证命令
133
134- `pnpm -C /Users/george/code/baa-conductor -F @baa-conductor/conductor-daemon build`
135- `node --test /Users/george/code/baa-conductor/apps/conductor-daemon/src/index.test.js`
136- `node --test /Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`
137- `git -C /Users/george/code/baa-conductor diff --check`
138
139## 交付要求
140
141完成后请说明:
142
143- 修改了哪些文件
144- live ingest 是怎么接到 `BaaInstructionCenter` 的
145- 最近执行摘要放在了哪里
146- 跑了哪些测试
147- 还有哪些剩余风险
148
149## 完成记录(2026-03-27)
150
151- 已完成:
152 - `browser.final_message` 已接到 conductor 侧 live ingest 路径,并进入 `BaaInstructionCenter`
153 - `/v1/browser` 与 Firefox WS `state_snapshot.snapshot.browser.instruction_ingest` 已暴露最近一次 live ingest / execute 摘要
154 - automated test 已覆盖:普通消息忽略、replay 去重、缺少 `conversation_id` 可容忍、live final message 触发执行
155- 后续 `T-S033`、`T-S034` 已继续收口上述缺口;当前统一口径下仍保留的边界是:
156 - live message dedupe 和 instruction dedupe 当前已做成单节点本地持久化,但不做跨节点共享
157 - execution journal 当前只保留最近窗口,不扩成无限历史审计
158 - 当前 live 执行路径仍只覆盖 Phase 1 精确 target `conductor` / `system`,不扩到跨节点或完整 task/run 编排
159- 实际验证:
160 - `pnpm -C /Users/george/code/baa-conductor -F @baa-conductor/conductor-daemon build`:通过
161 - `node --test /Users/george/code/baa-conductor/apps/conductor-daemon/src/index.test.js`:`45/45` 通过
162 - `node --test /Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`:`8/8` 通过