- commit
- d7a83fd
- parent
- 7b27e5a
- author
- im_wower
- date
- 2026-03-26 00:46:18 +0800 CST
chore: add next-wave task docs
6 files changed,
+265,
-15
+2,
-1
1@@ -220,7 +220,8 @@
2
3 - `conductor-daemon` 和 runtime 脚本已经有 canonical 名字 `BAA_CONDUCTOR_PUBLIC_API_BASE` / `--public-api-base`,但仍保留 legacy 别名 `BAA_CONTROL_API_BASE` / `--control-api-base`
4 - `status-api` 仍是独立的本地只读观察面,是否并入 `conductor-daemon` 尚未定案
5-- 根验证入口已经落到 `pnpm lint` / `pnpm test`,但 `status-api`、`worker-runner` 和 runtime / e2e 检查还没全部接进去
6+- 根验证入口已经落到 `pnpm lint` / `pnpm test`,但 `worker-runner` 和 runtime / e2e 检查还没全部接进去
7+- runtime 默认服务集合仍包含 `status-api`;是否继续维持默认安装/启动,尚未定案
8 - `conductor.makefile.so` 目前只回源 `conductor-daemon` 已有路由,尚未承接完整业务 API
9 - 线上和历史文档里仍可能残留 `control-api.makefile.so`、Cloudflare / D1 相关资产或表述
10 - 如果后续再次出现 app-server 未发出合法 `turn/completed` 就提前断流,应视为新的 child / transport 故障,而不是 reopen 已修复的 BUG-008 / BUG-010
+3,
-3
1@@ -121,12 +121,12 @@ legacy 兼容说明:
2 - 保持 `mini` launchd、自启动和本地探针稳定
3 - 保持 `conductor.makefile.so -> 100.71.210.78:4317` 的链路稳定
4 - 把剩余测试入口继续收口到仓库根
5-- 清理 repo 里最后一批 legacy 模板和删旧残留
6+- 决定 `status-api` 是否还应该留在默认 runtime 服务集合里
7
8 ## 当前已知 gap
9
10-- `status-api` 已有测试文件,但还没接入根 `pnpm test`
11-- repo 模板和辅助文件里还留着少量 legacy 残留,例如 `ops/launchd/` 模板、`install-mini.sh` 的旧 secrets fallback 文件名,以及 `pnpm-lock.yaml` 里的已删除 importer
12+- `worker-runner` 还没有稳定包级 `test`,所以根 `pnpm test` 仍未覆盖它
13+- `status-api` 仍是独立的本地只读观察服务,而且仍在默认 runtime 安装/启动/检查集合里;是否继续保留这个默认位次,仍待后续任务决定
14 - `status-api` 已经默认读取 `conductor-daemon` 的 `/v1/system/state`,但仍是单独的本地只读观察服务;是否继续保留还是并入主接口,仍待后续任务决定
15
16 ## 本机能力层
+8,
-6
1@@ -6,10 +6,10 @@
2
3 ## 当前代码基线
4
5-- 主线基线:`main@097621a`
6+- 主线基线:`main@7b27e5a`
7 - 任务文档已统一收口到 `tasks/`
8 - 当前活动任务见 `tasks/TASK_OVERVIEW.md`
9-- `T-S001` 到 `T-S010` 已经合入主线
10+- `T-S001` 到 `T-S012` 已经合入主线
11
12 ## 当前状态
13
14@@ -54,11 +54,13 @@
15 - `T-S008`:`codexd` 现在会把“未收到合法 completed 就提前断流”单独归类成新的 child / transport 故障,并写入 reopen 规则
16 - `T-S009`:`conductor-daemon` 和 runtime 脚本已经引入 `BAA_CONDUCTOR_PUBLIC_API_BASE` / `--public-api-base`,legacy `BAA_CONTROL_API_BASE` / `--control-api-base` 降为兼容别名
17 - `T-S010`:仓库根 `pnpm lint` / `pnpm test` 已变成真实入口,并新增 repo verification 文档
18+- `T-S011`:`status-api` 已补包级 `test` 入口,并接入根 `pnpm test`
19+- `T-S012`:repo 模板、`install-mini.sh` 帮助文本、`pnpm-lock.yaml` 与 legacy smoke 已进一步收口到当前主线口径
20
21 ## 下一步任务
22
23-- `T-S011`:把 `status-api` 测试接入根验证入口
24-- `T-S012`:清理 repo 中最后一批 legacy 模板与残留 importer
25+- `T-S013`:给 `worker-runner` 补包级测试并接入根验证入口
26+- `T-S014`:把 `status-api` 从默认 runtime 服务集合里降为显式 opt-in
27
28 ## 当前仍需关注
29
30@@ -67,5 +69,5 @@
31 - 仍保留的 `control-api` 命名已经限定在历史任务卡、legacy 测试路径、兼容变量名和外部残留资产说明里;如果未来要继续删旧,需要单独评估文件名和兼容面
32 - 如果未来新增 runtime 测试绕开 `withRuntimeFixture(...)`,同类 listener 泄漏仍可能重新出现
33 - 这次没有改 `ConductorRuntime.stop()` 内部逻辑;如果未来关闭路径本身阻塞,还需要单独补运行时层测试
34-- 根 `pnpm test` 目前还没有覆盖 `status-api`、`worker-runner` 和 runtime / e2e 检查
35-- repo 模板和辅助文件里还留着少量删旧残留,例如 `ops/launchd/` 模板、`install-mini.sh` 的 legacy secrets fallback 和 `pnpm-lock.yaml` 里的已删除 importer
36+- 根 `pnpm test` 目前还没有覆盖 `worker-runner` 和 runtime / e2e 检查
37+- `status-api` 虽然已经退回本地只读观察面,但 runtime 默认服务集合仍把它当默认安装/启动对象;是否继续保留这个默认位次,尚未收口
+118,
-0
1@@ -0,0 +1,118 @@
2+# Task T-S013:给 `worker-runner` 补包级测试并接入根验证入口
3+
4+## 直接给对话的提示词
5+
6+读 `/Users/george/code/baa-conductor/tasks/T-S013.md` 任务文档,完成开发任务。
7+
8+如需补背景,再读:
9+
10+- `/Users/george/code/baa-conductor/apps/worker-runner/package.json`
11+- `/Users/george/code/baa-conductor/apps/worker-runner/src/index.ts`
12+- `/Users/george/code/baa-conductor/apps/worker-runner/src/runner.ts`
13+- `/Users/george/code/baa-conductor/package.json`
14+- `/Users/george/code/baa-conductor/scripts/verify-workspace.mjs`
15+- `/Users/george/code/baa-conductor/docs/ops/repo-verification.md`
16+
17+## 当前基线
18+
19+- 仓库:`/Users/george/code/baa-conductor`
20+- 分支:`main`
21+- 提交:`7b27e5a`
22+- 开工要求:不要从其他任务分支切出;如需新分支,从当前 `main` 新切
23+
24+## 建议分支名
25+
26+- `chore/add-worker-runner-root-test`
27+
28+## 目标
29+
30+给 `worker-runner` 增加稳定包级测试,并把它接入根 `pnpm test`。
31+
32+## 背景
33+
34+- 根 `pnpm test` 现在已经覆盖 `db`、`host-ops`、`codex-app-server`、`codex-exec`、`status-api`、`conductor-daemon`、`codexd`。
35+- `worker-runner` 仍然只有 `build` / `typecheck`,没有包级 `test`,因此主线验证对它还是空白。
36+- 这块代码负责本地 step 执行、日志落盘和 checkpoint 编排,值得至少有一层稳定回归。
37+
38+## 涉及仓库
39+
40+- `/Users/george/code/baa-conductor`
41+
42+## 范围
43+
44+- 给 `@baa-conductor/worker-runner` 增加稳定 `test` 入口
45+- 为当前可稳定验证的能力补最小测试集
46+- 把它接入根 `pnpm test`
47+- 更新 repo verification 文档
48+
49+## 路径约束
50+
51+- 优先测纯函数、准备阶段、合同映射和落盘前后的稳定行为
52+- 不要把任务扩展成真实外部 worker 进程集成测试
53+- 不要顺手改 `conductor-daemon` 或 `codexd`
54+
55+## 推荐实现边界
56+
57+建议优先做:
58+
59+- 为 `apps/worker-runner/package.json` 增加 `test`
60+- 新增最小 `src/index.test.js` 或等价测试入口
61+- 更新根验证脚本和文档覆盖范围
62+
63+## 允许修改的目录
64+
65+- `/Users/george/code/baa-conductor/apps/worker-runner/`
66+- `/Users/george/code/baa-conductor/package.json`
67+- `/Users/george/code/baa-conductor/scripts/`
68+- `/Users/george/code/baa-conductor/docs/ops/`
69+
70+## 尽量不要修改
71+
72+- `/Users/george/code/baa-conductor/apps/conductor-daemon/`
73+- `/Users/george/code/baa-conductor/apps/codexd/`
74+- `/Users/george/code/baa-conductor/tasks/`
75+
76+## 必须完成
77+
78+### 1. 给 `worker-runner` 增加稳定测试入口
79+
80+- 包级 `pnpm --filter @baa-conductor/worker-runner test` 应可执行
81+- 测试不依赖人工交互或线上环境
82+
83+### 2. 覆盖最小关键行为
84+
85+- 至少覆盖一个或多个当前稳定的 runner / checkpoint / contract 行为
86+- 测试结果要能直接定位失败点
87+
88+### 3. 接入根验证入口
89+
90+- 根 `pnpm test` 应覆盖 `worker-runner`
91+- 文档要同步说明新增覆盖范围
92+
93+## 需要特别注意
94+
95+- 不要为了凑覆盖率写脆弱的实现细节快照
96+- 如果测试需要 build 前置,文档里要写清楚
97+- 与 runtime 默认服务集合任务并行时,避免同时改同一段 repo verification 文档
98+
99+## 验收标准
100+
101+- `@baa-conductor/worker-runner` 有稳定 `test` 入口
102+- 根 `pnpm test` 覆盖 `worker-runner`
103+- repo verification 文档已同步更新
104+- `git diff --check` 通过
105+
106+## 推荐验证命令
107+
108+- `npx --yes pnpm -C /Users/george/code/baa-conductor -F @baa-conductor/worker-runner test`
109+- `npx --yes pnpm -C /Users/george/code/baa-conductor test`
110+- `git -C /Users/george/code/baa-conductor diff --check`
111+
112+## 交付要求
113+
114+完成后请说明:
115+
116+- 修改了哪些文件
117+- `worker-runner` 的测试入口最终怎么组织
118+- 根 `pnpm test` 现在新增覆盖了什么
119+- 还有哪些检查仍未被根入口覆盖
+127,
-0
1@@ -0,0 +1,127 @@
2+# Task T-S014:把 `status-api` 从默认 runtime 服务集合里降为显式 opt-in
3+
4+## 直接给对话的提示词
5+
6+读 `/Users/george/code/baa-conductor/tasks/T-S014.md` 任务文档,完成开发任务。
7+
8+如需补背景,再读:
9+
10+- `/Users/george/code/baa-conductor/scripts/runtime/install-mini.sh`
11+- `/Users/george/code/baa-conductor/scripts/runtime/install-launchd.sh`
12+- `/Users/george/code/baa-conductor/scripts/runtime/start-launchd.sh`
13+- `/Users/george/code/baa-conductor/scripts/runtime/stop-launchd.sh`
14+- `/Users/george/code/baa-conductor/scripts/runtime/restart-launchd.sh`
15+- `/Users/george/code/baa-conductor/scripts/runtime/status-launchd.sh`
16+- `/Users/george/code/baa-conductor/scripts/runtime/check-launchd.sh`
17+- `/Users/george/code/baa-conductor/scripts/runtime/check-node.sh`
18+- `/Users/george/code/baa-conductor/docs/runtime/README.md`
19+- `/Users/george/code/baa-conductor/docs/runtime/launchd.md`
20+- `/Users/george/code/baa-conductor/README.md`
21+
22+## 当前基线
23+
24+- 仓库:`/Users/george/code/baa-conductor`
25+- 分支:`main`
26+- 提交:`7b27e5a`
27+- 开工要求:不要从其他任务分支切出;如需新分支,从当前 `main` 新切
28+
29+## 建议分支名
30+
31+- `chore/demote-status-api-default-runtime`
32+
33+## 目标
34+
35+把 `status-api` 从默认 runtime 安装/启动/检查集合里降为显式 opt-in 服务,同时保留手工安装和管理能力。
36+
37+## 背景
38+
39+- 当前主线已经明确 `status-api` 只是本地只读观察面,不是默认对外接口。
40+- 但 runtime 脚本和文档仍把它放在默认安装/启动/检查集合里,和它的辅助定位不完全一致。
41+- 如果它继续保留,最好是“可选观察服务”,而不是默认 runtime 套件的一部分。
42+
43+## 涉及仓库
44+
45+- `/Users/george/code/baa-conductor`
46+
47+## 范围
48+
49+- 调整 runtime 脚本的默认服务集合
50+- 让 `status-api` 仍可通过显式 `--service status-api` 或等价开关安装/管理
51+- 回写 runtime / README 文档
52+
53+## 路径约束
54+
55+- 不要删除 `apps/status-api`
56+- 不要改 `status-api` 本身的 HTTP 合同
57+- 不要把任务扩展成“把 status-api 并入 conductor-daemon”这类大改
58+
59+## 推荐实现边界
60+
61+建议优先做:
62+
63+- 修改 `install-mini.sh` 和常用 launchd 管理脚本的默认服务集合
64+- 保持显式选择 `status-api` 时行为不变
65+- 同步更新 runtime 文档、帮助文本和 README
66+
67+## 允许修改的目录
68+
69+- `/Users/george/code/baa-conductor/scripts/runtime/`
70+- `/Users/george/code/baa-conductor/docs/runtime/`
71+- `/Users/george/code/baa-conductor/docs/api/README.md`
72+- `/Users/george/code/baa-conductor/README.md`
73+- `/Users/george/code/baa-conductor/DESIGN.md`
74+- `/Users/george/code/baa-conductor/ops/launchd/`
75+
76+## 尽量不要修改
77+
78+- `/Users/george/code/baa-conductor/apps/status-api/`
79+- `/Users/george/code/baa-conductor/apps/conductor-daemon/`
80+- `/Users/george/code/baa-conductor/tasks/`
81+
82+## 必须完成
83+
84+### 1. 调整默认服务集合
85+
86+- 默认 install/start/stop/restart/status/check 集合不再强制包含 `status-api`
87+- 仍然可以显式选择 `status-api`
88+
89+### 2. 保持观察服务可用
90+
91+- `status-api` 的安装和检查能力不能被删掉
92+- 帮助文本和脚本说明要清楚写出 opt-in 方式
93+
94+### 3. 回写文档
95+
96+- runtime 文档和 README 要反映新的默认服务集合
97+- 写清 `status-api` 现在的定位和启用方式
98+
99+## 需要特别注意
100+
101+- 不要破坏 `codexd` 和 `conductor` 现有默认安装链路
102+- 如果某些检查脚本仍默认依赖 `status-api`,要同步调整
103+- 与 `worker-runner` 测试任务并行时,避免同时改同一段 repo verification 文档
104+
105+## 验收标准
106+
107+- 默认 runtime 服务集合不再包含 `status-api`
108+- 显式启用 `status-api` 仍可安装和检查
109+- 文档、帮助文本和模板口径一致
110+- `git diff --check` 通过
111+
112+## 推荐验证命令
113+
114+- `bash -n /Users/george/code/baa-conductor/scripts/runtime/install-mini.sh`
115+- `bash -n /Users/george/code/baa-conductor/scripts/runtime/install-launchd.sh`
116+- `bash -n /Users/george/code/baa-conductor/scripts/runtime/check-launchd.sh`
117+- `bash -n /Users/george/code/baa-conductor/scripts/runtime/check-node.sh`
118+- `npx --yes pnpm -C /Users/george/code/baa-conductor lint`
119+- `git -C /Users/george/code/baa-conductor diff --check`
120+
121+## 交付要求
122+
123+完成后请说明:
124+
125+- 默认服务集合现在是什么
126+- `status-api` 现在如何显式启用
127+- 修改了哪些脚本/文档
128+- 还有哪些剩余风险
+7,
-5
1@@ -9,7 +9,7 @@
2 - `control-api.makefile.so`、Cloudflare Worker、D1 只剩迁移期 legacy 兼容残留和依赖盘点用途
3 - `baa-hand` / `baa-shell` 只保留为接口语义参考,不再作为主系统维护
4 - 当前任务卡都放在本目录
5-- 当前任务基线:`main@097621a`
6+- 当前任务基线:`main@7b27e5a`
7
8 ## 最近完成任务
9
10@@ -25,6 +25,8 @@
11 8. [`T-S008.md`](./T-S008.md):补 codexd child / transport 断流诊断与 reopen 规则
12 9. [`T-S009.md`](./T-S009.md):把 conductor upstream/public API base 从 legacy 名字里解耦
13 10. [`T-S010.md`](./T-S010.md):补仓库根验证入口
14+11. [`T-S011.md`](./T-S011.md):把 `status-api` 测试接入根验证入口
15+12. [`T-S012.md`](./T-S012.md):清理 repo 中最后一批 legacy 模板与残留 importer
16
17 说明:
18
19@@ -34,13 +36,13 @@
20
21 围绕剩余技术债,当前建议继续推进这 2 张任务卡:
22
23-1. [`T-S011.md`](./T-S011.md):把 `status-api` 测试接入根验证入口
24-2. [`T-S012.md`](./T-S012.md):清理 repo 中最后一批 legacy 模板与残留 importer
25+1. [`T-S013.md`](./T-S013.md):给 `worker-runner` 补包级测试并接入根验证入口
26+2. [`T-S014.md`](./T-S014.md):把 `status-api` 从默认 runtime 服务集合里降为显式 opt-in
27
28 说明:
29
30-- `T-S011` 主要改 `apps/status-api/`、根验证脚本和验证文档
31-- `T-S012` 主要改 `ops/launchd/`、`scripts/runtime/install-mini.sh`、`pnpm-lock.yaml` 和少量 runtime 文档
32+- `T-S013` 主要改 `apps/worker-runner/`、根验证脚本和 repo verification 文档
33+- `T-S014` 主要改 `scripts/runtime/**`、`docs/runtime/**`、`README` 和少量 launchd 模板
34
35 ## 任务文档约定
36