baa-conductor

git clone 

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

T-S063.md

  1# Task T-S063:normalize / parse 错误隔离
  2
  3## 状态
  4
  5- 当前状态:`已完成`
  6- 规模预估:`S`
  7- 依赖任务:无
  8- 建议执行者:`Codex`
  9
 10## 直接给对话的提示词
 11
 12`/Users/george/code/baa-conductor/tasks/T-S063.md` 任务文档,完成开发任务。
 13
 14如需补背景,再读:
 15
 16- `/Users/george/code/baa-conductor/bugs/OPT-005-normalize-parse-error-isolation.md`
 17- `/Users/george/code/baa-conductor/plans/STATUS_SUMMARY.md`
 18
 19## 当前基线
 20
 21- 仓库:`/Users/george/code/baa-conductor`
 22- 分支基线:`main`
 23- 提交:`64d122e`
 24
 25## 分支与 worktree(强制)
 26
 27- 分支名:`feat/normalize-parse-error-isolation`
 28- worktree 路径:`/Users/george/code/baa-conductor-normalize-parse-error-isolation`
 29
 30开工步骤:
 31
 321. `cd /Users/george/code/baa-conductor`
 332. `git worktree add ../baa-conductor-normalize-parse-error-isolation -b feat/normalize-parse-error-isolation main`
 343. `cd ../baa-conductor-normalize-parse-error-isolation`
 354. 在这个 worktree 目录里开发,不要回到主仓库目录
 36
 37完成后提交与推送:
 38
 391. 在 worktree 里提交所有变更(包括更新后的任务文档)
 402. `git push -u origin feat/normalize-parse-error-isolation`
 41
 42合并步骤(由合并者执行):
 43
 441. `cd /Users/george/code/baa-conductor`
 452. `git fetch origin`
 463. `git merge origin/feat/normalize-parse-error-isolation`
 474. `git push`
 485. `git worktree remove ../baa-conductor-normalize-parse-error-isolation`(如果 worktree 还在)
 49
 50合并冲突处理:
 51
 521. 如果 `git merge` 报冲突,先 `git diff` 查看冲突文件
 532. 手动解决冲突后 `git add` 冲突文件
 543. `git merge --continue` 完成合并
 554. 不要用 `git merge --abort` 然后 force 覆盖
 56
 57命名规则:
 58
 59- 功能任务分支名以 `feat/` 开头
 60- 缺陷任务分支名以 `bug/` 开头
 61
 62## 目标
 63
 64让 normalize / parse 阶段对单个坏 block 失败隔离,不再中断整批 BAA 指令。
 65
 66## 背景
 67
 68当前单个 block parse 失败仍可能影响后续合法 block 处理。这已经不是一般优化,而是指令链路健壮性问题。
 69
 70## 涉及仓库
 71
 72- `/Users/george/code/baa-conductor`
 73
 74## 范围
 75
 76- normalize / parse 错误隔离
 77- parseErrors 记录
 78- 对应测试
 79
 80## 允许修改的目录
 81
 82- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/instructions/`
 83- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/index.test.js`
 84
 85## 必须完成
 86
 87### 1. 错误隔离
 88
 89- 单个坏 block 解析失败不影响后续合法 block
 90- normalize 结果能带出 parseErrors 或等价错误摘要
 91
 92### 2. 测试
 93
 94- 覆盖“前一个 block 坏、后一个 block 好”的场景
 95- 保持现有合法解析路径不回退
 96
 97## 验收标准
 98
 99- 单个 parse 失败不会中断整批
100- 合法 block 仍能继续执行
101- 测试覆盖该链路
102
103## 推荐验证命令
104
105- `cd /Users/george/code/baa-conductor-normalize-parse-error-isolation && pnpm -C apps/conductor-daemon test`
106
107## 执行记录
108
109> 以下内容由执行任务的 AI 填写,创建任务时留空。
110
111### 开始执行
112
113- 执行者:`Codex`
114- 开始时间:`2026-04-01 10:50:00 CST`
115- 状态变更:`待开始` → `进行中`
116
117### 完成摘要
118
119- 完成时间:`2026-04-01 11:09:33 CST`
120- 状态变更:`进行中` → `已完成`
121- 修改了哪些文件:
122  - `apps/conductor-daemon/src/instructions/types.ts`
123  - `apps/conductor-daemon/src/instructions/normalize.ts`
124  - `apps/conductor-daemon/src/instructions/loop.ts`
125  - `apps/conductor-daemon/src/instructions/ingest.ts`
126  - `apps/conductor-daemon/src/instructions/store.ts`
127  - `apps/conductor-daemon/src/index.test.js`
128  - `tasks/T-S063.md`
129- 核心实现思路:
130  - `normalize` 改为逐 block `try/catch`,单个坏 block 只记入 `parseErrors`,不再中断后续合法 block。
131  - `processResult` 与 live ingest summary 新增 parse error 摘要,保留整批失败时原有 `error_*` 语义。
132  - 持久化 snapshot 读取兼容旧 journal,没有新字段时会自动回填默认值。
133- 跑了哪些测试:
134  - `pnpm -C /Users/george/code/baa-conductor-normalize-parse-error-isolation install --frozen-lockfile`
135  - `pnpm -C /Users/george/code/baa-conductor-normalize-parse-error-isolation/apps/conductor-daemon typecheck`
136  - `pnpm -C /Users/george/code/baa-conductor-normalize-parse-error-isolation/apps/conductor-daemon test`
137
138### 执行过程中遇到的问题
139
140- 新建 worktree 后缺少 `node_modules`,先执行 `pnpm install --frozen-lockfile` 再继续 `typecheck` 和测试。
141
142### 剩余风险
143
144- `/v1/browser` 当前仍沿用旧的 summary serializer,尚未把新增 parse error 摘要字段对外透出;本次任务范围内已保证 `processResult` 与 ingest summary 本身可拿到该信息。