baa-conductor

git clone 

baa-conductor / tasks
codex@macbookpro  ·  2026-04-01

T-S060.md

  1# Task T-S060:自动化仲裁与自动熔断基础
  2
  3## 状态
  4
  5- 当前状态:`已完成`
  6- 规模预估:`L`
  7- 依赖任务:`T-S056`、`T-S058`、`T-S059`
  8- 建议执行者:`Codex`(涉及 conductor 指令链路、renewal 调度和状态模型联动)
  9
 10## 直接给对话的提示词
 11
 12`/Users/george/code/baa-conductor/tasks/T-S060.md` 任务文档,完成开发任务。
 13
 14如需补背景,再读:
 15
 16- `/Users/george/code/baa-conductor/plans/AUTOMATION_ARBITRATION_REQUIREMENTS.md`
 17- `/Users/george/code/baa-conductor/plans/UNIFIED_OVERLAY_AUTOMATION_CONTROL.md`
 18- `/Users/george/code/baa-conductor/plans/SYSTEM_LEVEL_PAUSE_REQUIREMENTS.md`
 19
 20## 当前基线
 21
 22- 仓库:`/Users/george/code/baa-conductor`
 23- 分支基线:`main`
 24- 提交:`64d122e`
 25
 26## 分支与 worktree(强制)
 27
 28- 分支名:`feat/automation-arbitration-core`
 29- worktree 路径:`/Users/george/code/baa-conductor-automation-arbitration-core`
 30
 31开工步骤:
 32
 331. `cd /Users/george/code/baa-conductor`
 342. `git worktree add ../baa-conductor-automation-arbitration-core -b feat/automation-arbitration-core main`
 353. `cd ../baa-conductor-automation-arbitration-core`
 364. 在这个 worktree 目录里开发,不要回到主仓库目录
 37
 38完成后提交与推送:
 39
 401. 在 worktree 里提交所有变更(包括更新后的任务文档)
 412. `git push -u origin feat/automation-arbitration-core`
 42
 43合并步骤(由合并者执行):
 44
 451. `cd /Users/george/code/baa-conductor`
 462. `git fetch origin`
 473. `git merge origin/feat/automation-arbitration-core`
 484. `git push`
 495. `git worktree remove ../baa-conductor-automation-arbitration-core`(如果 worktree 还在)
 50
 51合并冲突处理:
 52
 531. 如果 `git merge` 报冲突,先 `git diff` 查看冲突文件
 542. 手动解决冲突后 `git add` 冲突文件
 553. `git merge --continue` 完成合并
 564. 不要用 `git merge --abort` 然后 force 覆盖
 57
 58命名规则:
 59
 60- 功能任务分支名以 `feat/` 开头
 61- 缺陷任务分支名以 `bug/` 开头
 62
 63## 目标
 64
 65把 BAA 指令系统和续命系统的执行顺序、互斥规则、自动熔断和 `pause_reason` 基础能力落到代码里,形成统一的 automation arbitration core。
 66
 67## 背景
 68
 69当前 BAA 指令和 renewal 都会在 final-message 结束后开始工作。如果没有统一仲裁,同一对话会出现:
 70
 71- 指令执行和续命发送同时争抢出站机会
 72- 连续失败、重复消息和重复续命时没有自动停机
 73- AI 想显式暂停当前对话时,没有稳定的基础状态模型
 74
 75## 涉及仓库
 76
 77- `/Users/george/code/baa-conductor`
 78
 79## 范围
 80
 81- 落地 control > instruction > renewal 的处理顺序
 82- 落地同一对话的自动化执行锁
 83- 落地 `pause_reason` 和自动熔断基础能力
 84- 落地最小显式控制指令或等价内部控制入口
 85
 86## 路径约束
 87
 88- 首版重点在 conductor 后端,不要求同时完成浮层 UI
 89- 不把系统级暂停和页面级控制混成一个总状态机
 90- 自动熔断必须以结构化行为信号为主,文本信号为辅
 91
 92## 推荐实现边界
 93
 94建议优先做:
 95
 96- `apps/conductor-daemon/src/instructions/`
 97- `apps/conductor-daemon/src/renewal/`
 98- `apps/conductor-daemon/src/firefox-ws.ts`
 99- `apps/conductor-daemon/src/local-api.ts`
100- `packages/artifact-db/`
101
102## 允许修改的目录
103
104- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/instructions/`
105- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/renewal/`
106- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/firefox-ws.ts`
107- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/local-api.ts`
108- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/index.test.js`
109- `/Users/george/code/baa-conductor/packages/artifact-db/`
110
111## 尽量不要修改
112
113- `/Users/george/code/baa-conductor/plugins/baa-firefox/`
114- `/Users/george/code/baa-conductor/apps/codexd/`
115
116## 必须完成
117
118### 1. 自动化仲裁顺序
119
120- 明确实现:控制类指令 > 普通 BAA 指令 > renewal 判断
121- 同一条 final-message 不会同时触发普通 BAA 执行和续命发送
122- 同一对话同一时刻只能有一个自动化出站者
123
124### 2. 对话级状态基础
125
126- 为 local conversation 落地 `pause_reason`
127- 落地最小执行锁:`idle / instruction_running / renewal_running`
128- 系统恢复不会覆盖对话原有状态
129
130### 3. 自动熔断
131
132- 至少接入重复消息、重复续命、连续失败、超时/429/5xx、route unavailable 等结构化信号
133- 命中后自动切到 `paused``rescue_wait`
134- 记录暂停原因、触发时间和最近错误
135
136## 需要特别注意
137
138- 自动熔断是基础要求,不是可选优化
139- 文本模式匹配只能作为辅助信号,不能作为唯一熔断依据
140- 不要把 UI 交互逻辑混进本任务;浮层统一控制由后续任务完成
141- 所有开发必须在 worktree 中进行,不要在主仓库目录修改代码
142
143## 验收标准
144
145- 同一条 final-message 不会同时触发普通 BAA 执行和 renewal 发送
146- 自动化命中死循环/连续失败信号后会自动停机
147- 对话状态会写明 `pause_reason`
148- 系统恢复和对话恢复不会互相覆盖
149
150## 推荐验证命令
151
152- `cd /Users/george/code/baa-conductor-automation-arbitration-core && pnpm -C apps/conductor-daemon test`
153- `cd /Users/george/code/baa-conductor-automation-arbitration-core && pnpm -C packages/artifact-db test`
154- `cd /Users/george/code/baa-conductor-automation-arbitration-core && pnpm build`
155
156## 执行记录
157
158> 以下内容由执行任务的 AI 填写,创建任务时留空。
159
160### 开始执行
161
162- 执行者:`Codex`
163- 开始时间:`2026-04-01 10:47:41 CST`
164- 状态变更:`待开始` → `进行中`
165
166### 完成摘要
167
168- 完成时间:`2026-04-01 11:26:37 CST`
169- 状态变更:`进行中` → `已完成`
170- 修改了哪些文件:
171  - `apps/conductor-daemon/src/renewal/automation.ts`
172  - `apps/conductor-daemon/src/renewal/conversations.ts`
173  - `apps/conductor-daemon/src/renewal/projector.ts`
174  - `apps/conductor-daemon/src/renewal/dispatcher.ts`
175  - `apps/conductor-daemon/src/firefox-ws.ts`
176  - `apps/conductor-daemon/src/local-api.ts`
177  - `apps/conductor-daemon/src/instructions/types.ts`
178  - `apps/conductor-daemon/src/instructions/ingest.ts`
179  - `apps/conductor-daemon/src/instructions/loop.ts`
180  - `apps/conductor-daemon/src/instructions/router.ts`
181  - `apps/conductor-daemon/src/instructions/policy.ts`
182  - `apps/conductor-daemon/src/index.ts`
183  - `apps/conductor-daemon/src/index.test.js`
184  - `packages/artifact-db/src/types.ts`
185  - `packages/artifact-db/src/schema.ts`
186  - `packages/artifact-db/src/store.ts`
187  - `packages/artifact-db/src/index.ts`
188  - `packages/artifact-db/src/index.test.js`
189  - `docs/api/control-interfaces.md`
190  - `docs/api/business-interfaces.md`
191  - `tasks/T-S060.md`
192  - `tasks/TASK_OVERVIEW.md`
193- 核心实现思路:
194  -`artifact-db``local_conversations` 模型补齐 `pause_reason`、`last_error`、执行锁和重复/失败计数字段,并加入迁移与 CAS 风格执行锁接口,保证恢复时不覆盖既有状态
195  - 在 final-message 链路实现 `control > instruction > renewal` 仲裁:控制类 BAA 指令优先于普通指令,普通指令执行时阻止 renewal 并串行执行,同一对话同一时刻只允许一个自动化出站者
196  - 新增自动化信号模块,按重复消息、重复续命、连续失败、route unavailable 等结构化信号触发自动熔断,落库 `pause_reason`、最近错误和计数
197  - 在本地 API 补最小内部控制入口,支持当前对话 `pause/resume/mode` 控制,并把新增状态字段和控制语法写入文档
198- 跑了哪些测试:
199  - `cd /Users/george/code/baa-conductor-automation-arbitration-core && pnpm install`
200  - `cd /Users/george/code/baa-conductor-automation-arbitration-core && pnpm -C packages/artifact-db test`
201  - `cd /Users/george/code/baa-conductor-automation-arbitration-core && pnpm -C apps/conductor-daemon test`
202  - `cd /Users/george/code/baa-conductor-automation-arbitration-core && pnpm build`
203
204### 执行过程中遇到的问题
205
206- `artifact-db` 补新列后,直写 SQL 的存储层测试没有同步更新插入列集,先暴露了 schema mismatch;补齐测试数据后恢复通过
207- 控制类指令接入后,运行态测试先暴露出 policy allowlist 缺口,以及执行锁释放时机与旧断言不一致;随后把控制工具加入 allowlist,并把测试改为验证暂停状态而不是假设锁会立刻回到 `idle`
208
209### 剩余风险
210
211- 自动熔断阈值目前仍是代码内常量(重复消息 / 重复续命 / 连续失败均为 `3`);如果后续要按页面、模型或租户差异化调参,需要继续推进 `T-S065` 的 policy 配置化