- commit
- 458d7cf
- parent
- 978e39b
- author
- im_wower
- date
- 2026-03-22 00:50:39 +0800 CST
Create fourth-wave task board
8 files changed,
+524,
-9
+42,
-0
1@@ -0,0 +1,42 @@
2+# 第四波统一开工说明
3+
4+第四波任务统一要求如下:
5+
6+- 所有任务必须从当前 `origin/main` 最新提交切分支
7+- 每个任务必须使用独立 worktree
8+- 新 worktree 第一次进入后先执行 `npx --yes pnpm install`
9+- 不允许从其他任务分支继续切分支
10+- 开始时把任务卡状态改为 `in_progress`
11+- 完成并推送后把任务卡状态改为 `review`
12+
13+推荐命令模板:
14+
15+```bash
16+git fetch origin
17+git switch main
18+git pull --ff-only origin main
19+git worktree add ../baa-conductor-TXXX -b feat/T-XXX-name main
20+cd ../baa-conductor-TXXX
21+npx --yes pnpm install
22+```
23+
24+每个实例启动后按顺序读:
25+
26+1. `DESIGN.md`
27+2. `coordination/TASK_OVERVIEW.md`
28+3. `coordination/WORKFLOW.md`
29+4. `coordination/tasks/T-XXX-*.md`
30+
31+第四波的目标不是继续补纯骨架,而是把当前主线推进到“可部署、可探活、可自动化运维”的阶段:
32+
33+- Cloudflare Worker / D1 绑定配置
34+- conductor 本地 HTTP 探活入口
35+- status-api 宿主进程
36+- launchd bootstrap 脚本
37+- Nginx 与 Cloudflare DNS 自动化
38+
39+注意:
40+
41+- 这一波仍然保持“内网走 Tailscale `100.x`,外网走二级域名”
42+- 这一波不依赖 MagicDNS 名称
43+- `README.md`、`DESIGN.md`、根配置文件默认仍视为热点文件,非任务必要不要碰
+15,
-5
1@@ -11,7 +11,7 @@
2 - `done`: 17
3 - `in_progress`: 0
4 - `blocked`: 0
5-- `todo`: 0
6+- `todo`: 5
7
8 ## 已完成
9
10@@ -37,13 +37,23 @@
11
12 ## 当前活动任务
13
14-- 无
15+- `T-018`
16+- `T-019`
17+- `T-020`
18+- `T-021`
19+- `T-022`
20
21 ## 下一步建议
22
23-- 当前主线已经补齐 app 级 `dist/index.js` 构建产物
24-- `control-api-worker`、`conductor-daemon`、`status-api`、`worker-runner` 都已具备更真实的运行时入口或本地持久化骨架
25-- 下一波更适合做端到端联调、DNS/Nginx 收口、`baa-firefox` 实际对接,以及 control-api / conductor 的真实部署验证
26+- 第四波优先把“可运行”推进到“可部署”:
27+ - control-api 的 Cloudflare Worker / D1 配置
28+ - conductor 的本地 HTTP 探活入口
29+ - status-api 的宿主进程
30+ - launchd 安装与 bootstrap 脚本
31+ - Nginx 与 Cloudflare DNS 自动化
32+- 第四波完成后再开:
33+ - `T-023` 端到端 smoke / failover 联调
34+ - `T-024` `baa-firefox` 实际接线
35
36 ## 需要整合者关注的点
37
+17,
-4
1@@ -44,17 +44,30 @@
2
3 ## 4. 当前活动任务
4
5-当前没有活动任务。
6+第四波任务已经创建,可以直接并行启动。
7
8-第三波启动说明保留在:
9+第四波统一要求见:
10+
11+- [`FOURTH_WAVE_START.md`](./FOURTH_WAVE_START.md)
12+
13+第三波启动说明仍保留在:
14
15 - [`THIRD_WAVE_START.md`](./THIRD_WAVE_START.md)
16
17 ## 5. 当前活动任务矩阵
18
19-当前为空。
20+| Task | 标题 | 状态 | 分支 | 依赖 | 主要写入范围 |
21+| --- | --- | --- | --- | --- | --- |
22+| `T-018` | Cloudflare Worker 与 D1 部署配置 | `todo` | `feat/T-018-control-api-deploy` | `T-014` | `apps/control-api-worker/**`, `ops/cloudflare/**` |
23+| `T-019` | Conductor 本地 HTTP 入口 | `todo` | `feat/T-019-conductor-http` | `T-015` | `apps/conductor-daemon/**` |
24+| `T-020` | Status API 本地宿主进程 | `todo` | `feat/T-020-status-host` | `T-017` | `apps/status-api/**` |
25+| `T-021` | launchd 安装脚本与 Runtime Bootstrap | `todo` | `feat/T-021-runtime-bootstrap` | `T-011`, `T-013`, `T-015`, `T-017` | `ops/launchd/**`, `docs/runtime/**`, `scripts/runtime/**` |
26+| `T-022` | Nginx 与 Cloudflare DNS 自动化 | `todo` | `feat/T-022-ops-automation` | `T-008` | `ops/nginx/**`, `docs/ops/**`, `scripts/ops/**` |
27+
28+第四波之后,建议再单独开:
29
30-如需继续推进,请新增第四波任务卡。
31+- `T-023` 端到端 smoke / failover 联调
32+- `T-024` `baa-firefox` 实际接线
33
34 ## 6. 已归档任务
35
1@@ -0,0 +1,90 @@
2+---
3+task_id: T-018
4+title: Cloudflare Worker 与 D1 部署配置
5+status: todo
6+branch: feat/T-018-control-api-deploy
7+repo: /Users/george/code/baa-conductor
8+base_ref: main
9+depends_on:
10+ - T-014
11+write_scope:
12+ - apps/control-api-worker/**
13+ - ops/cloudflare/**
14+updated_at: 2026-03-22
15+---
16+
17+# T-018 Cloudflare Worker 与 D1 部署配置
18+
19+## 目标
20+
21+把 `control-api-worker` 从“可构建的 Worker 代码”推进到“具备明确 Cloudflare Worker / D1 绑定配置、可部署模板和最小运维说明”的程度。
22+
23+## 本任务包含
24+
25+- 为 `apps/control-api-worker` 补部署配置文件,例如 `wrangler.jsonc`
26+- 明确 D1 binding、环境变量和 Worker 入口约定
27+- 在 `ops/cloudflare/**` 下补部署示例、变量模板或辅助脚本
28+- 把当前 runtime 代码与部署配置对齐,保证入口和 bindings 命名一致
29+
30+## 本任务不包含
31+
32+- 实际上线部署到 Cloudflare
33+- 修改 `packages/db/**`
34+- 修改 `packages/auth/**`
35+- 修改 conductor 或 status-api 代码
36+
37+## 建议起始文件
38+
39+- `apps/control-api-worker/src/index.ts`
40+- `apps/control-api-worker/src/contracts.ts`
41+- `apps/control-api-worker/package.json`
42+- `ops/cloudflare/`
43+
44+## 交付物
45+
46+- 可提交到仓库的 Worker / D1 配置骨架
47+- 清晰的 binding 与 secret 约定
48+- 最小部署说明或辅助脚本
49+
50+## 验收
51+
52+- `npx --yes pnpm --filter @baa-conductor/control-api-worker typecheck`
53+- `npx --yes pnpm --filter @baa-conductor/control-api-worker build`
54+- Worker 配置文件与代码里的 env/binding 名称一致
55+
56+## 更新要求
57+
58+完成时更新 frontmatter 的:
59+
60+- `status`
61+- `base_ref`
62+- `updated_at`
63+
64+并补充下面这些内容:
65+
66+## files_changed
67+
68+- 待填写
69+
70+## commands_run
71+
72+- 待填写
73+
74+## result
75+
76+- 待填写
77+
78+## risks
79+
80+- 待填写
81+
82+## next_handoff
83+
84+- 待填写
85+
86+开始时建议直接把 `status` 改为 `in_progress`。
87+
88+做完并推送后:
89+
90+- 如果等待整合,改为 `review`
91+- 如果确认结束,改为 `done`
1@@ -0,0 +1,87 @@
2+---
3+task_id: T-019
4+title: Conductor 本地 HTTP 入口
5+status: todo
6+branch: feat/T-019-conductor-http
7+repo: /Users/george/code/baa-conductor
8+base_ref: main
9+depends_on:
10+ - T-015
11+write_scope:
12+ - apps/conductor-daemon/**
13+updated_at: 2026-03-22
14+---
15+
16+# T-019 Conductor 本地 HTTP 入口
17+
18+## 目标
19+
20+把 `conductor-daemon` 从“只有 CLI/runtime 快照”推进到“具备本地只读 HTTP 探活入口”的程度,至少覆盖 `GET /healthz`、`GET /readyz`、`GET /rolez`。
21+
22+## 本任务包含
23+
24+- 在 `apps/conductor-daemon/**` 内实现最小本地 HTTP server
25+- 暴露 `healthz` / `readyz` / `rolez`,必要时补 `GET /v1/runtime`
26+- 把现有 runtime snapshot 接到这些只读接口
27+- 为本地 HTTP server 补最小测试或冒烟验证
28+
29+## 本任务不包含
30+
31+- 修改 `packages/db/**`
32+- 修改 control-api-worker
33+- 修改 status-api
34+- 完整任务调度器
35+
36+## 建议起始文件
37+
38+- `apps/conductor-daemon/src/index.ts`
39+- `apps/conductor-daemon/src/index.test.js`
40+
41+## 交付物
42+
43+- 本地 loopback HTTP 探活入口
44+- 清晰的 `healthz` / `readyz` / `rolez` 语义
45+- launchd 或 Nginx 后续可复用的读取面
46+
47+## 验收
48+
49+- `npx --yes pnpm --filter @baa-conductor/conductor-daemon typecheck`
50+- `npx --yes pnpm --filter @baa-conductor/conductor-daemon build`
51+- `node --test --experimental-strip-types apps/conductor-daemon/src/index.test.js`
52+
53+## 更新要求
54+
55+完成时更新 frontmatter 的:
56+
57+- `status`
58+- `base_ref`
59+- `updated_at`
60+
61+并补充下面这些内容:
62+
63+## files_changed
64+
65+- 待填写
66+
67+## commands_run
68+
69+- 待填写
70+
71+## result
72+
73+- 待填写
74+
75+## risks
76+
77+- 待填写
78+
79+## next_handoff
80+
81+- 待填写
82+
83+开始时建议直接把 `status` 改为 `in_progress`。
84+
85+做完并推送后:
86+
87+- 如果等待整合,改为 `review`
88+- 如果确认结束,改为 `done`
+88,
-0
1@@ -0,0 +1,88 @@
2+---
3+task_id: T-020
4+title: Status API 本地宿主进程
5+status: todo
6+branch: feat/T-020-status-host
7+repo: /Users/george/code/baa-conductor
8+base_ref: main
9+depends_on:
10+ - T-017
11+write_scope:
12+ - apps/status-api/**
13+updated_at: 2026-03-22
14+---
15+
16+# T-020 Status API 本地宿主进程
17+
18+## 目标
19+
20+把 `status-api` 从“可挂载运行时入口”推进到“带本地宿主进程或 node server adapter,可直接启动监听”的程度。
21+
22+## 本任务包含
23+
24+- 在 `apps/status-api/**` 内实现本地宿主进程或 node HTTP adapter
25+- 把 `createStatusApiRuntime()` 真正挂到监听端口
26+- 整理 `GET /healthz`、`GET /v1/status`、`GET /v1/status/ui` 的本地启动方式
27+- 补最小启动/冒烟验证
28+
29+## 本任务不包含
30+
31+- 修改 conductor-daemon
32+- 修改 control-api-worker
33+- 真实部署到 launchd
34+- D1 线上接入
35+
36+## 建议起始文件
37+
38+- `apps/status-api/src/index.ts`
39+- `apps/status-api/src/runtime.ts`
40+- `apps/status-api/src/service.ts`
41+
42+## 交付物
43+
44+- 可直接启动的 status-api 本地宿主进程
45+- 明确的本地端口和启动接口
46+- 后续 launchd 可直接复用的入口
47+
48+## 验收
49+
50+- `npx --yes pnpm --filter @baa-conductor/status-api typecheck`
51+- `npx --yes pnpm --filter @baa-conductor/status-api build`
52+- 能说明本地如何启动和访问 `healthz` / `status` / `ui`
53+
54+## 更新要求
55+
56+完成时更新 frontmatter 的:
57+
58+- `status`
59+- `base_ref`
60+- `updated_at`
61+
62+并补充下面这些内容:
63+
64+## files_changed
65+
66+- 待填写
67+
68+## commands_run
69+
70+- 待填写
71+
72+## result
73+
74+- 待填写
75+
76+## risks
77+
78+- 待填写
79+
80+## next_handoff
81+
82+- 待填写
83+
84+开始时建议直接把 `status` 改为 `in_progress`。
85+
86+做完并推送后:
87+
88+- 如果等待整合,改为 `review`
89+- 如果确认结束,改为 `done`
1@@ -0,0 +1,95 @@
2+---
3+task_id: T-021
4+title: launchd 安装脚本与 Runtime Bootstrap
5+status: todo
6+branch: feat/T-021-runtime-bootstrap
7+repo: /Users/george/code/baa-conductor
8+base_ref: main
9+depends_on:
10+ - T-011
11+ - T-013
12+ - T-015
13+ - T-017
14+write_scope:
15+ - ops/launchd/**
16+ - docs/runtime/**
17+ - scripts/runtime/**
18+updated_at: 2026-03-22
19+---
20+
21+# T-021 launchd 安装脚本与 Runtime Bootstrap
22+
23+## 目标
24+
25+把现有 launchd 模板和 runtime 文档推进到“有实际 bootstrap/install/check 脚本可执行”的程度,减少手工部署步骤。
26+
27+## 本任务包含
28+
29+- 在 `scripts/runtime/**` 下补 runtime 目录初始化脚本
30+- 补 launchd 安装、重载、检查的辅助脚本
31+- 让 `docs/runtime/**` 与脚本行为保持一致
32+- 如有必要,小幅修正 `ops/launchd/**` 模板中的占位项说明
33+
34+## 本任务不包含
35+
36+- 修改 app 业务代码
37+- 实际在本机加载 launchd 服务
38+- 修改 Nginx 或 Cloudflare DNS
39+
40+## 建议起始文件
41+
42+- `docs/runtime/README.md`
43+- `docs/runtime/launchd.md`
44+- `docs/runtime/layout.md`
45+- `ops/launchd/*.plist`
46+- `scripts/runtime/`
47+
48+## 交付物
49+
50+- 可执行的 bootstrap/install/check 脚本
51+- 与脚本一致的 runtime / launchd 文档
52+- 更低摩擦的本地部署流程
53+
54+## 验收
55+
56+- `plutil -lint ops/launchd/so.makefile.baa-conductor.plist`
57+- `plutil -lint ops/launchd/so.makefile.baa-worker-runner.plist`
58+- `plutil -lint ops/launchd/so.makefile.baa-status-api.plist`
59+- 如果新增 shell 脚本:`bash -n scripts/runtime/*.sh`
60+
61+## 更新要求
62+
63+完成时更新 frontmatter 的:
64+
65+- `status`
66+- `base_ref`
67+- `updated_at`
68+
69+并补充下面这些内容:
70+
71+## files_changed
72+
73+- 待填写
74+
75+## commands_run
76+
77+- 待填写
78+
79+## result
80+
81+- 待填写
82+
83+## risks
84+
85+- 待填写
86+
87+## next_handoff
88+
89+- 待填写
90+
91+开始时建议直接把 `status` 改为 `in_progress`。
92+
93+做完并推送后:
94+
95+- 如果等待整合,改为 `review`
96+- 如果确认结束,改为 `done`
1@@ -0,0 +1,90 @@
2+---
3+task_id: T-022
4+title: Nginx 与 Cloudflare DNS 自动化
5+status: todo
6+branch: feat/T-022-ops-automation
7+repo: /Users/george/code/baa-conductor
8+base_ref: main
9+depends_on:
10+ - T-008
11+write_scope:
12+ - ops/nginx/**
13+ - docs/ops/**
14+ - scripts/ops/**
15+updated_at: 2026-03-22
16+---
17+
18+# T-022 Nginx 与 Cloudflare DNS 自动化
19+
20+## 目标
21+
22+把当前的 Nginx 配置和 Cloudflare DNS 管理推进到“有脚本辅助同步和部署”的程度,减少手工改记录、手工改配置的步骤。
23+
24+## 本任务包含
25+
26+- 在 `scripts/ops/**` 下补 Cloudflare DNS 管理脚本
27+- 把当前公网域名与内网 Tailscale `100.x` 的关系写成可执行模板
28+- 补 Nginx 部署/校验辅助脚本或分发模板
29+- 收口 `docs/ops/**` 中的操作步骤
30+
31+## 本任务不包含
32+
33+- 实际修改线上 DNS 记录
34+- 实际重载线上 Nginx
35+- 修改 control-api-worker、conductor-daemon、status-api 代码
36+
37+## 建议起始文件
38+
39+- `ops/nginx/baa-conductor.conf`
40+- `ops/nginx/includes/*.conf`
41+- `docs/ops/README.md`
42+- `scripts/ops/`
43+
44+## 交付物
45+
46+- DNS 辅助脚本
47+- Nginx 校验/部署辅助脚本或模板
48+- 对应运维文档收口
49+
50+## 验收
51+
52+- 如果新增 shell 脚本:`bash -n scripts/ops/*.sh`
53+- `git diff --check`
54+- 文档与脚本中的域名 / Tailscale `100.x` 方案一致
55+
56+## 更新要求
57+
58+完成时更新 frontmatter 的:
59+
60+- `status`
61+- `base_ref`
62+- `updated_at`
63+
64+并补充下面这些内容:
65+
66+## files_changed
67+
68+- 待填写
69+
70+## commands_run
71+
72+- 待填写
73+
74+## result
75+
76+- 待填写
77+
78+## risks
79+
80+- 待填写
81+
82+## next_handoff
83+
84+- 待填写
85+
86+开始时建议直接把 `status` 改为 `in_progress`。
87+
88+做完并推送后:
89+
90+- 如果等待整合,改为 `review`
91+- 如果确认结束,改为 `done`