baa-conductor

git clone 

baa-conductor / coordination / tasks / done
im_wower  ·  2026-03-22

T-013-build-runtime.md

  1---
  2task_id: T-013
  3title: Build 与 dist 产物
  4status: done
  5branch: feat/T-013-build-runtime
  6repo: /Users/george/code/baa-conductor
  7base_ref: main@c5e007b
  8depends_on:
  9  - T-011
 10write_scope:
 11  - package.json
 12  - tsconfig.base.json
 13  - apps/conductor-daemon/package.json
 14  - apps/conductor-daemon/tsconfig.json
 15  - apps/control-api-worker/package.json
 16  - apps/control-api-worker/tsconfig.json
 17  - apps/status-api/package.json
 18  - apps/status-api/tsconfig.json
 19  - apps/worker-runner/package.json
 20  - apps/worker-runner/tsconfig.json
 21  - docs/runtime/**
 22updated_at: 2026-03-22
 23---
 24
 25# T-013 Build 与 dist 产物
 26
 27## 目标
 28
 29把当前仓库从“只有 typecheck,没有真实产物”推进到“至少 apps 能产出 `dist/index.js`”,让 launchd 模板不再只是静态占位。
 30
 31## 统一开工要求
 32
 33- 必须从当前最新 `origin/main` 切出该分支
 34- 新 worktree 进入后先执行 `npx --yes pnpm install`
 35- 不允许从其他任务分支切分支
 36
 37## 本任务包含
 38
 39- 修正根 `build` 脚本
 40-`apps/*``build` 真正输出 JS
 41- 调整必要的 tsconfig,使 `dist/` 可生成
 42- 如果需要,补最小的 build 使用说明到 `docs/runtime/**`
 43
 44## 本任务不包含
 45
 46- 真正运行 launchd
 47- 真实业务逻辑接线
 48- 包级发布配置
 49
 50## 建议起始文件
 51
 52- `package.json`
 53- `tsconfig.base.json`
 54- `apps/*/package.json`
 55- `apps/*/tsconfig.json`
 56- `docs/runtime/launchd.md`
 57
 58## 交付物
 59
 60- `pnpm -r build` 可用
 61- apps 产出 `dist/index.js`
 62
 63## 验收
 64
 65- `npx --yes pnpm -r build` 通过
 66- `apps/conductor-daemon/dist/index.js` 存在
 67- `apps/worker-runner/dist/index.js` 存在
 68- `apps/status-api/dist/index.js` 存在
 69
 70## files_changed
 71
 72- `coordination/tasks/T-013-build-runtime.md`
 73- `package.json`
 74- `apps/conductor-daemon/package.json`
 75- `apps/control-api-worker/package.json`
 76- `apps/status-api/package.json`
 77- `apps/worker-runner/package.json`
 78- `docs/runtime/README.md`
 79- `docs/runtime/launchd.md`
 80
 81## commands_run
 82
 83- `git worktree add /Users/george/code/baa-conductor-T013 -b feat/T-013-build-runtime c5e007b082772d085a030217691f6b88da9b3ee4`
 84- `npx --yes pnpm install`
 85- `npx --yes pnpm -r build`
 86- `node --input-type=module -e "await import('./apps/conductor-daemon/dist/index.js'); console.log('ok conductor-daemon');"`
 87- `node --input-type=module -e "await import('./apps/control-api-worker/dist/index.js'); console.log('ok control-api-worker');"`
 88- `node --input-type=module -e "await import('./apps/status-api/dist/index.js'); console.log('ok status-api');"`
 89- `node --input-type=module -e "await import('./apps/worker-runner/dist/index.js'); console.log('ok worker-runner');"`
 90
 91## result
 92
 93- 四个 app 的 `build` 已从 `tsc --noEmit` 改成真实 emit,其中 `conductor-daemon` 直接输出 `dist/index.js`
 94-`control-api-worker`、`status-api`、`worker-runner` 增加了统一 postbuild 处理:固定根入口到 `dist/index.js`,并在需要时改写编译后 import specifier
 95- `control-api-worker``worker-runner` 的编译产物已改写为引用同一 `dist/` 下同步生成的 package JS 文件,`worker-runner` 产物里的相对 import 也已补齐 `.js` 扩展
 96- `npx --yes pnpm -r build` 通过,四个 `apps/*/dist/index.js` 均存在,且可被 `node` 直接 `import(...)`
 97- `docs/runtime` 已更新为“先 build 再 launchd bootstrap”的当前约定,不再声明仓库缺少 `dist/index.js`
 98
 99## risks
100
101- 目前 package 自身仍然只做 typecheck,没有形成独立发布级 `dist/`;`control-api-worker` 与 `worker-runner` 依赖 app build 阶段的产物改写
102-`package.json` 中的 postbuild helper 目前以内联脚本维护,后续如果构建规则继续变复杂,最好拆成独立脚本文件
103- 本任务解决的是“产物路径稳定且可加载”,不是“服务运行时逻辑全部接好”;`T-014`、`T-015`、`T-017` 仍需补真正启动流程
104
105## next_handoff
106
107- `T-014` 可以直接把 `apps/control-api-worker/dist/index.js` 当作稳定入口做运行时接线,不必再解决 bare workspace import 问题
108- `T-015` 可以基于 `apps/conductor-daemon/dist/index.js` 继续补 CLI/daemon 启动逻辑,并复用文档里“先 build 再 bootstrap”的流程
109- `T-017` 可以直接围绕 `apps/status-api/dist/index.js` 挂 HTTP 启动入口;若后续需要 package 级独立 dist,可另拆构建任务
110
111## notes
112
113- `2026-03-21`: 创建第三波任务卡