im_wower
·
2026-03-28
BAA_EXECUTION_PERSISTENCE_REQUIREMENTS.md
1# BAA 执行持久化与去重状态需求
2
3## 状态
4
5- `已落地(T-S033 已实现)`
6- 优先级:`high`
7- 记录时间:`2026-03-27`
8
9## 关联文档
10
11- [BAA_FINAL_MESSAGE_INGEST_REQUIREMENTS.md](/Users/george/code/baa-conductor/plans/archive/BAA_FINAL_MESSAGE_INGEST_REQUIREMENTS.md)
12- [BAA_INSTRUCTION_CENTER_REQUIREMENTS.md](/Users/george/code/baa-conductor/plans/archive/BAA_INSTRUCTION_CENTER_REQUIREMENTS.md)
13- [BAA_INSTRUCTION_SYSTEM.md](/Users/george/code/baa-conductor/plans/BAA_INSTRUCTION_SYSTEM.md)
14- [04-execution-loop-state-machine.md](/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/docs/04-execution-loop-state-machine.md)
15
16## 背景
17
18当前 repo 已经完成:
19
20- `browser.final_message` live ingest
21- `BaaInstructionCenter` Phase 1 最小闭环
22- `/v1/browser` 最近一次 `instruction_ingest` 摘要
23
24但在立项前还保留 2 个直接影响稳定性的缺口:
25
26- live message dedupe 和 instruction dedupe 仍是进程内内存态
27- 最近摘要只保留最近一次 live ingest / execute,不落库
28
29这意味着重启后:
30
31- 同一条 final message 可能再次执行
32- 最近执行历史和诊断摘要会丢失
33
34## 核心结论
35
36- 首版先补单节点持久化,不讨论多节点一致性
37- dedupe 状态和 execution journal 都应持久化到 conductor 可恢复的存储
38- `/v1/browser` 读面不应再只保留“最后一次”,至少要能读取最近若干条审计摘要
39- 首版不要求把 execution journal 扩成完整任务系统或共识层
40
41## 首版范围
42
43- live message dedupe 持久化
44- instruction dedupe 持久化
45- execution / ingest journal 持久化
46- `/v1/browser` 最近摘要历史读面
47- 重启恢复与回归测试
48
49## 当前明确不要求
50
51- 不要求本需求里做多节点 dedupe 共享
52- 不要求本需求里做 artifact upload / inject / send
53- 不要求本需求里把 journal 扩成 task/run 模型
54
55## 验收条件
56
57- conductor 重启后,同一条已执行过的 final message 不会再次执行
58- 最近摘要不再只依赖进程内内存态;重启后仍可读
59- `/v1/browser` 或等价读面能稳定读取最近若干条 ingest / execute 审计摘要
60- 文档已同步到 `plans/`、`tasks/` 和必要的 `docs/`
61
62## 当前预期残余边界
63
64- 首版仍可以只做单节点持久化,不要求跨节点共享
65- journal 首版可以先保留有限条数,不要求无限历史
66
67## 已落地结果
68
69- `browser.final_message` dedupe 已写入 control-plane sqlite,重启后仍可识别同一条 final message
70- instruction-level dedupe 已写入 control-plane sqlite,重启后不会重复执行同一 `dedupe_key`
71- ingest / execute 摘要已写入有界 journal,启动时会恢复到 live ingest snapshot
72- `GET /v1/browser` 与 Firefox WS `state_snapshot.snapshot.browser.instruction_ingest` 现在同时暴露:
73 - `last_ingest`
74 - `last_execute`
75 - `recent_ingests`
76 - `recent_executes`
77
78## 首版实现约束
79
80- 持久化范围仍是单节点;状态落在 conductor 本地 control-plane sqlite
81- dedupe 表和 journal 都做了固定上限淘汰,按最老记录稳定清理
82- 首版仍未扩展到 artifact task/run 系统,也不做跨节点共享 dedupe