baa-conductor

git clone 

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
M DESIGN.md
+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
M README.md
+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 ## 本机能力层
M plans/STATUS_SUMMARY.md
+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 默认服务集合仍把它当默认安装/启动对象;是否继续保留这个默认位次,尚未收口
A tasks/T-S013.md
+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+- 还有哪些检查仍未被根入口覆盖
A tasks/T-S014.md
+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+- 还有哪些剩余风险
M tasks/TASK_OVERVIEW.md
+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