im_wower
·
2026-03-29
T-BUG-026.md
1# Task T-BUG-026:修复 conductor-daemon 测试中 localApiBase undefined 错误
2
3## 状态
4
5- 当前状态:`已完成`
6- 规模预估:`S`
7- 依赖任务:无
8- 建议执行者:`Claude`(需要理解 conductor-daemon 测试初始化流程,定位 config 注入缺失)
9
10## 直接给对话的提示词
11
12读 `/Users/george/code/baa-conductor/tasks/T-BUG-026.md` 任务文档,完成开发任务。
13
14## 当前基线
15
16- 仓库:`/Users/george/code/baa-conductor`
17- 分支基线:`main`
18- 提交:`ee40b9a`
19
20## 分支与 worktree(强制)
21
22每个任务必须使用独立的分支和 worktree,禁止直接在 main 上修改,禁止多个任务共用同一个 worktree。
23
24- 分支名:`bug/fix-daemon-test-localApiBase`
25- worktree 路径:`/Users/george/code/baa-conductor-fix-daemon-test-localApiBase`
26
27开工步骤:
28
291. `cd /Users/george/code/baa-conductor`
302. `git worktree add ../baa-conductor-fix-daemon-test-localApiBase -b bug/fix-daemon-test-localApiBase main`
313. `cd ../baa-conductor-fix-daemon-test-localApiBase`
324. 在这个 worktree 目录里开发,不要回到主仓库目录
33
34完成后提交与推送(由执行者完成,不要合并):
35
361. 在 worktree 里提交所有变更(包括更新后的任务文档)
372. `git push -u origin bug/fix-daemon-test-localApiBase`
38
39## 目标
40
41修复 conductor-daemon 测试中多个 `handleConductorHttpRequest` 相关的 `TypeError: Cannot read properties of undefined (reading 'localApiBase')` 错误,让所有测试通过。
42
43## 背景
44
45多个任务(T-S042、T-S045)执行过程中报告 conductor-daemon 测试有预存的 `localApiBase` undefined 失败。这些失败在 main 分支上已存在,不是某个任务引入的回归。根本原因是测试中构造 HTTP request context 时缺少必要的 config 字段。
46
47## 涉及仓库
48
49- `/Users/george/code/baa-conductor`
50
51## 范围
52
53- 定位所有 `localApiBase` 相关的测试失败
54- 修复测试中的 config/context 初始化
55- 确保所有 conductor-daemon 测试通过
56
57## 允许修改的目录
58
59- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/` (测试文件和被测代码)
60
61## 尽量不要修改
62
63- `/Users/george/code/baa-conductor/packages/`
64- `/Users/george/code/baa-conductor/plugins/`
65- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/instructions/` (除非是 context 初始化问题)
66
67## 必须完成
68
69### 1. 复现并定位
70
71- 运行 `pnpm -F @baa-conductor/conductor-daemon test`
72- 收集所有失败的测试用例
73- 定位 `localApiBase` 在哪个 context/config 对象中缺失
74
75### 2. 修复
76
77- 补全测试中缺失的 config 字段
78- 如果是被测代码缺少默认值保护,补上合理的默认值
79- 不要通过跳过测试来"修复"
80
81### 3. 验证
82
83- 所有 conductor-daemon 测试通过
84- 其他 package 的测试不受影响
85
86## 验收标准
87
88- `pnpm -F @baa-conductor/conductor-daemon test` 全部通过,0 failures
89- `pnpm test` 全部通过
90- 没有通过跳过测试来解决问题
91
92## 推荐验证命令
93
94- `cd /Users/george/code/baa-conductor-fix-daemon-test-localApiBase && pnpm build`
95- `cd /Users/george/code/baa-conductor-fix-daemon-test-localApiBase && pnpm -F @baa-conductor/conductor-daemon test`
96- `cd /Users/george/code/baa-conductor-fix-daemon-test-localApiBase && pnpm test`
97
98## 执行记录
99
100> 以下内容由执行任务的 AI 填写,创建任务时留空。
101
102### 开始执行
103
104- 执行者:`Codex`
105- 开始时间:`2026-03-29 01:30:13 CST`
106- 状态变更:`待开始` → `进行中`
107
108### 完成摘要
109
110- 完成时间:`2026-03-29 01:34:40 CST`
111- 状态变更:`进行中` → `已完成`
112- 修改了哪些文件:
113 - `apps/conductor-daemon/src/local-api.ts`
114 - `apps/conductor-daemon/src/index.test.js`
115 - `tasks/T-BUG-026.md`
116- 核心实现思路:
117 - 给 `handleConductorHttpRequest` 及 codexd/claude-coded 代理读取增加快照空值保护,避免缺失可选 backend snapshot 字段时直接抛出 `TypeError`
118 - 补全 `index.test.js` 里的本地 API 测试夹具与持久化重启场景快照,显式提供 `claudeCoded.localApiBase: null`
119 - 保持测试语义不变,只修正 context/snapshot 初始化缺失与运行时代码的默认值保护
120- 跑了哪些测试:
121 - `pnpm build`
122 - `pnpm -F @baa-conductor/conductor-daemon test`
123 - `pnpm test`
124
125### 执行过程中遇到的问题
126
127> 记录执行过程中遇到的阻塞、环境问题、临时绕过方案等。合并时由合并者判断是否需要修复或建新任务。
128
129- 新 worktree 初始没有安装依赖,首次运行 `pnpm -F @baa-conductor/conductor-daemon test` 因 `pnpm exec tsc` 找不到命令失败;在 worktree 内执行 `pnpm install` 后完成复现与修复验证。
130
131### 剩余风险
132
133- 当前修复覆盖了测试夹具缺失 `claudeCoded.localApiBase` 的场景,并为 local-api 增加了缺省保护;若后续引入新的最小快照夹具,仍建议保持与 `ConductorRuntimeApiSnapshot` 一致的结构。