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 本身可拿到该信息。