baa-conductor


baa-conductor / tasks / archive
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` 通过