ultra-builder-pro-cli 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/.ultra-template/delivery-report.json +9 -0
  2. package/.ultra-template/docs/research/README.md +53 -0
  3. package/.ultra-template/specs/architecture.md +250 -0
  4. package/.ultra-template/specs/discovery.md +248 -0
  5. package/.ultra-template/specs/product.md +223 -0
  6. package/.ultra-template/tasks/contexts/TEMPLATE.md +57 -0
  7. package/.ultra-template/tasks/tasks.json +33 -0
  8. package/.ultra-template/test-report.json +8 -0
  9. package/CHANGELOG.md +194 -0
  10. package/LICENSE +21 -0
  11. package/README.md +187 -0
  12. package/adapters/_shared/codex-assets.cjs +1128 -0
  13. package/adapters/_shared/codex-ultra-tools-entry.cjs +11 -0
  14. package/adapters/_shared/file-ops.cjs +115 -0
  15. package/adapters/_shared/frontmatter.cjs +52 -0
  16. package/adapters/_shared/handbook.cjs +144 -0
  17. package/adapters/_shared/md-to-toml.cjs +54 -0
  18. package/adapters/_shared/path-rewrite.cjs +79 -0
  19. package/adapters/_shared/rtk-detect.cjs +86 -0
  20. package/adapters/_shared/runtime-assets.cjs +70 -0
  21. package/adapters/_shared/settings-merge.cjs +76 -0
  22. package/adapters/_shared/tests/file-ops.test.cjs +54 -0
  23. package/adapters/_shared/tests/frontmatter.test.cjs +47 -0
  24. package/adapters/_shared/tests/handbook.test.cjs +86 -0
  25. package/adapters/_shared/tests/md-to-toml.test.cjs +48 -0
  26. package/adapters/_shared/tests/path-rewrite.test.cjs +60 -0
  27. package/adapters/_shared/tests/resolve-target.test.cjs +85 -0
  28. package/adapters/_shared/tests/rtk-detect.test.cjs +116 -0
  29. package/adapters/_shared/tests/runtime-assets.test.cjs +107 -0
  30. package/adapters/_shared/tests/settings-merge.test.cjs +85 -0
  31. package/adapters/_shared/tests/validate.test.cjs +30 -0
  32. package/adapters/_shared/validate.cjs +24 -0
  33. package/adapters/claude.js +182 -0
  34. package/adapters/codex.js +385 -0
  35. package/adapters/gemini.js +204 -0
  36. package/adapters/opencode.js +506 -0
  37. package/adapters/tests/claude.test.cjs +117 -0
  38. package/adapters/tests/codex-hook.test.cjs +90 -0
  39. package/adapters/tests/codex.test.cjs +356 -0
  40. package/adapters/tests/gemini.test.cjs +112 -0
  41. package/adapters/tests/opencode.test.cjs +246 -0
  42. package/agents/code-reviewer.md +102 -0
  43. package/agents/debugger.md +127 -0
  44. package/agents/review-code.md +125 -0
  45. package/agents/review-comments.md +98 -0
  46. package/agents/review-coordinator.md +146 -0
  47. package/agents/review-design.md +133 -0
  48. package/agents/review-errors.md +87 -0
  49. package/agents/review-tests.md +93 -0
  50. package/agents/tdd-runner.md +92 -0
  51. package/bin/handbook.js +54 -0
  52. package/bin/install.js +254 -0
  53. package/bin/orchestrator.js +214 -0
  54. package/commands/learn.md +41 -0
  55. package/commands/ultra-deliver.md +45 -0
  56. package/commands/ultra-dev.md +50 -0
  57. package/commands/ultra-init.md +51 -0
  58. package/commands/ultra-plan.md +49 -0
  59. package/commands/ultra-research.md +59 -0
  60. package/commands/ultra-status.md +46 -0
  61. package/commands/ultra-test.md +48 -0
  62. package/commands/ultra-think.md +45 -0
  63. package/docs/AGENT-CONTEXT.md +143 -0
  64. package/docs/ARCHITECTURE.md +197 -0
  65. package/docs/COMMIT-HASH-BACKFILL.md +101 -0
  66. package/docs/LEGACY-HERMES.md +1175 -0
  67. package/docs/PLAN.zh-CN.md +1683 -0
  68. package/docs/ROADMAP.md +102 -0
  69. package/docs/RUNTIME-COMPAT-MATRIX.md +98 -0
  70. package/docs/STATE-DB-ACCESS-POLICY.md +109 -0
  71. package/docs/USER-HANDBOOK-CONTRACT.md +61 -0
  72. package/hooks/README.md +24 -0
  73. package/hooks/active_task_context.py +44 -0
  74. package/hooks/adapters/codex.py +302 -0
  75. package/hooks/health_check.py +61 -0
  76. package/hooks/pre_stop_check.py +56 -0
  77. package/hooks/subagent_tracker.py +116 -0
  78. package/hooks/workflow_checkpoint.py +56 -0
  79. package/hooks/workflow_context.py +63 -0
  80. package/hooks/workflow_resume.py +50 -0
  81. package/mcp-server/lib/init-project.cjs +162 -0
  82. package/mcp-server/lib/llm-client.cjs +157 -0
  83. package/mcp-server/lib/llm-client.test.cjs +156 -0
  84. package/mcp-server/lib/plan-store.cjs +96 -0
  85. package/mcp-server/lib/plan-store.test.cjs +132 -0
  86. package/mcp-server/lib/prd-parser.cjs +110 -0
  87. package/mcp-server/lib/prd-parser.test.cjs +171 -0
  88. package/mcp-server/lib/pricing.cjs +53 -0
  89. package/mcp-server/lib/projector.cjs +158 -0
  90. package/mcp-server/lib/state-db.cjs +113 -0
  91. package/mcp-server/lib/state-db.test.cjs +116 -0
  92. package/mcp-server/lib/state-ops.cjs +725 -0
  93. package/mcp-server/lib/task-expander.cjs +123 -0
  94. package/mcp-server/lib/task-expander.test.cjs +253 -0
  95. package/mcp-server/lib/telemetry.cjs +72 -0
  96. package/mcp-server/lib/topo.cjs +131 -0
  97. package/mcp-server/lib/topo.test.cjs +158 -0
  98. package/mcp-server/server.cjs +482 -0
  99. package/mcp-server/tests/circuit-breaker.test.cjs +125 -0
  100. package/mcp-server/tests/commit-hash-flow.test.cjs +117 -0
  101. package/mcp-server/tests/concurrency-update.test.cjs +96 -0
  102. package/mcp-server/tests/concurrency.test.cjs +112 -0
  103. package/mcp-server/tests/db-ops.test.cjs +117 -0
  104. package/mcp-server/tests/init-project.test.cjs +141 -0
  105. package/mcp-server/tests/migrate.test.cjs +144 -0
  106. package/mcp-server/tests/projector.test.cjs +130 -0
  107. package/mcp-server/tests/server-contract.test.cjs +750 -0
  108. package/mcp-server/tests/staleness.test.cjs +190 -0
  109. package/mcp-server/tests/state-ops.test.cjs +286 -0
  110. package/mcp-server/tests/tagged-tasks.test.cjs +163 -0
  111. package/mcp-server/tests/telemetry.test.cjs +205 -0
  112. package/orchestrator/auto-merge.cjs +109 -0
  113. package/orchestrator/code-graph-watcher.cjs +121 -0
  114. package/orchestrator/daemon.cjs +112 -0
  115. package/orchestrator/dispatch-rules.cjs +93 -0
  116. package/orchestrator/parallel-orchestrator.cjs +195 -0
  117. package/orchestrator/planner/expand-prompt.cjs +62 -0
  118. package/orchestrator/planner/expand-prompt.test.cjs +52 -0
  119. package/orchestrator/planner/plan-builder.cjs +116 -0
  120. package/orchestrator/planner/plan-builder.test.cjs +165 -0
  121. package/orchestrator/planner/prd-prompt.cjs +44 -0
  122. package/orchestrator/planner/prd-prompt.test.cjs +30 -0
  123. package/orchestrator/recovery.cjs +70 -0
  124. package/orchestrator/session-runner.cjs +224 -0
  125. package/orchestrator/skill-miner.cjs +133 -0
  126. package/orchestrator/tests/auto-merge.test.cjs +216 -0
  127. package/orchestrator/tests/code-graph-watcher.test.cjs +183 -0
  128. package/orchestrator/tests/daemon.test.cjs +260 -0
  129. package/orchestrator/tests/dispatch-rules.test.cjs +122 -0
  130. package/orchestrator/tests/parallel-orchestrator.test.cjs +233 -0
  131. package/orchestrator/tests/phase-8b-gate.test.cjs +183 -0
  132. package/orchestrator/tests/recovery.test.cjs +190 -0
  133. package/orchestrator/tests/session-runner.test.cjs +314 -0
  134. package/orchestrator/tests/skill-miner.test.cjs +147 -0
  135. package/orchestrator/tests/worktree-manager.test.cjs +148 -0
  136. package/orchestrator/worktree-manager.cjs +131 -0
  137. package/output-styles/coding-vibes.md +67 -0
  138. package/output-styles/structural-thinking.md +61 -0
  139. package/package.json +109 -0
  140. package/settings.json +8 -0
  141. package/skills/cc-collab/SKILL.md +41 -0
  142. package/skills/code-review-expert/SKILL.md +118 -0
  143. package/skills/code-review-expert/references/code-quality-checklist.md +112 -0
  144. package/skills/code-review-expert/references/integration-checklist.md +46 -0
  145. package/skills/code-review-expert/references/removal-plan.md +52 -0
  146. package/skills/code-review-expert/references/security-checklist.md +100 -0
  147. package/skills/code-review-expert/references/solid-checklist.md +65 -0
  148. package/skills/codex-collab/SKILL.md +52 -0
  149. package/skills/codex-collab/evals/evals.json +40 -0
  150. package/skills/gemini-collab/SKILL.md +51 -0
  151. package/skills/gemini-collab/evals/evals.json +42 -0
  152. package/skills/integration-rules/SKILL.md +71 -0
  153. package/skills/learn/SKILL.md +117 -0
  154. package/skills/security-rules/SKILL.md +60 -0
  155. package/skills/testing-rules/SKILL.md +56 -0
  156. package/skills/ultra-deliver/SKILL.md +171 -0
  157. package/skills/ultra-dev/SKILL.md +324 -0
  158. package/skills/ultra-init/SKILL.md +148 -0
  159. package/skills/ultra-plan/SKILL.md +314 -0
  160. package/skills/ultra-research/SKILL.md +156 -0
  161. package/skills/ultra-research/steps/step-00-problem-validation.md +154 -0
  162. package/skills/ultra-research/steps/step-01-opportunity-discovery.md +172 -0
  163. package/skills/ultra-research/steps/step-02-market-assessment.md +195 -0
  164. package/skills/ultra-research/steps/step-03-competitive-landscape.md +197 -0
  165. package/skills/ultra-research/steps/step-04-product-strategy.md +196 -0
  166. package/skills/ultra-research/steps/step-05-assumptions-validation.md +234 -0
  167. package/skills/ultra-research/steps/step-10-user-personas.md +169 -0
  168. package/skills/ultra-research/steps/step-11-user-scenarios.md +181 -0
  169. package/skills/ultra-research/steps/step-20-user-stories.md +156 -0
  170. package/skills/ultra-research/steps/step-21-features-scope.md +157 -0
  171. package/skills/ultra-research/steps/step-22-success-metrics.md +195 -0
  172. package/skills/ultra-research/steps/step-30-architecture-context.md +154 -0
  173. package/skills/ultra-research/steps/step-31-solution-strategy.md +172 -0
  174. package/skills/ultra-research/steps/step-32-building-blocks.md +188 -0
  175. package/skills/ultra-research/steps/step-40-deployment.md +123 -0
  176. package/skills/ultra-research/steps/step-41-quality-risks.md +135 -0
  177. package/skills/ultra-research/steps/step-99-synthesis.md +188 -0
  178. package/skills/ultra-review/SKILL.md +437 -0
  179. package/skills/ultra-review/references/unified-schema.md +127 -0
  180. package/skills/ultra-review/scripts/review_verdict_update.py +99 -0
  181. package/skills/ultra-review/scripts/review_wait.py +120 -0
  182. package/skills/ultra-status/SKILL.md +162 -0
  183. package/skills/ultra-test/SKILL.md +195 -0
  184. package/skills/ultra-think/SKILL.md +109 -0
  185. package/skills/ultra-verify/SKILL.md +111 -0
  186. package/skills/ultra-verify/evals/evals.json +51 -0
  187. package/skills/ultra-verify/references/confidence-system.md +38 -0
  188. package/skills/ultra-verify/references/cross-verify-modes.md +73 -0
  189. package/skills/ultra-verify/scripts/verify_wait.py +131 -0
  190. package/spec/cli-protocol.md +118 -0
  191. package/spec/mcp-tools.yaml +658 -0
  192. package/spec/schemas/command-manifest.schema.json +47 -0
  193. package/spec/schemas/context-file.v4.5.schema.json +54 -0
  194. package/spec/schemas/mcp-tools.schema.json +136 -0
  195. package/spec/schemas/skill-manifest.schema.json +94 -0
  196. package/spec/schemas/state-db.sql +154 -0
  197. package/spec/schemas/tasks.v4.5.schema.json +66 -0
  198. package/ultra-tools/cli.cjs +121 -0
  199. package/ultra-tools/commands/db.cjs +175 -0
  200. package/ultra-tools/commands/legacy-memory.cjs +159 -0
  201. package/ultra-tools/commands/migrate.cjs +354 -0
  202. package/ultra-tools/commands/session.cjs +180 -0
  203. package/ultra-tools/commands/status.cjs +158 -0
  204. package/ultra-tools/commands/task.cjs +95 -0
  205. package/ultra-tools/legacy-memory.test.cjs +80 -0
  206. package/ultra-tools/status-command.test.cjs +132 -0
@@ -0,0 +1,1683 @@
1
+ # ultra-builder-pro-cli — 执行计划 v0.3.1
2
+
3
+ > **2026-07-15 当前生效边界(D50,覆盖下文旧 Phase 7 / D25 / D46 的 memory 设计)**:
4
+ > Ultra Builder Pro 不再拥有 `memory.*`、recall、prompt/transcript/observation/summary
5
+ > 收集 hook 或私有 agent memory。跨会话记忆全部交给独立安装的 cloud-mem/claude-mem。
6
+ > 插件只保留 10 个 Ultra 公共 workflow、4 个 agent-only 规则 skill、宿主专属 collab
7
+ > companion、工作流 hook 与 `.ultra/state.db` 任务权威。Claude Code、Codex、OpenCode
8
+ > 采用各自 native plugin 呈现;Gemini 仅保留 compatibility extension。下文所有与此冲突的
9
+ > memory/hindsight 章节仅作为历史实施记录,不再是当前需求或运行时契约。
10
+
11
+ **状态**:Phase 0-8B 完成(D48 `8224159` 2026-04-18)· v0.3 ready(planner + executor 合线)· 397 tests 全绿 · Phase 9 发布待启动
12
+ **版本**:0.3.1-plan · 2026-04-17 Codex 第二轮评审收尾(v0.3.0-plan 的修订)
13
+ **范围**:最终目标 = 可落地的"跨 runtime coding 自动化工厂"。12 个 Phase 渐进交付。
14
+ **整体置信度**:**86%**(同 v0.3;Phase 2 下调被 4.5/8A/8B 上调抵消)
15
+ **关键变更**(vs v0.3,基于 Codex 第二轮 R1-R7):
16
+ - **清除旧模型残留**(R1):4 处(§4.2、§4.3 数据流、§4.4 组件一览、§11 时间线)
17
+ - **`skill.*` 收缩为只读**(R2 + D29):`skill.resolve` / `skill.manifest`,删 `invoke/list`
18
+ - **Phase 4.5 加 single-active-lease admission control**(R3 + D33):takeover/resume/abandon
19
+ - **state.db 补 5 类**(R4 + D30-D32/D37):schema_version / migration_history / events.id 游标 / 多进程访问策略 / 运维四子命令 / 消除 lease 文件双源
20
+ - **Phase 8A 加 execution-plan.json artifact**(R5 + D34):waves + ownership 预测 + conflict
21
+ - **Phase 8A 依赖 Phase 7 软化**(R5 + D36):memory/complexity 是加分项不是前置
22
+ - **Phase 4.6 拆 a/b**(R6 + D35):v0.1 只跑 smoke flow,full conformance 推 v0.2
23
+ - **Codex 第二轮结论**:"小改后开工"(tl;dr);本版已完成小改
24
+
25
+ **总决策数**:D1-D50(当前边界以 D50 为准)
26
+ **总风险数**:R1-R32(v0.3.1 新增 R25-R32 共 8 条)
27
+
28
+ ---
29
+
30
+ > **本文件为唯一权威**。范围 / 置信度 / 时间线 / 架构的任何变更,必须先在 §14
31
+ > 决策日志写明理由和日期,再落代码。所有外部事实追溯到 §14 D11 + D12 的文档
32
+ > URL 证据。
33
+
34
+ ---
35
+
36
+ ## 0. TL;DR
37
+
38
+ **我们要做什么**:把 Ultra Builder Pro 从 "Claude Code 的命令包" 进化成 **三层
39
+ 跨 runtime 框架**(skill 说明书 + MCP 状态操作 + CLI 兜底)。再在规则层之上
40
+ 加一个**执行层**:session 隔离、事件循环、并发调度、监控与智能层,最终形成
41
+ **自动化 coding 工厂**。
42
+
43
+ **最终形态**(v1.0):
44
+ - 任何一个 coding agent CLI(Claude / OpenCode / Codex / Gemini / Cursor /
45
+ Windsurf)都能消费同一套 Hermes 规则。
46
+ - 独立 session 执行独立 task,无对话污染;失败自动重试带熔断。
47
+ - 跨 session 的记忆、代码图、token 监控通过 MCP 共享。
48
+ - PRD → task → 独立 agent 并行执行 → 合并 → 审查 → 交付,无人值守可跑。
49
+
50
+ **分阶段**:
51
+ - **v0.1** = Phase 0-4.5(规则层 + execution-lite:会话隔离已可用) → 8 周
52
+ - **v0.2** = Phase 5-6(执行层进阶 + 监控 + 实时图谱) → +3 周
53
+ - **v0.3** = Phase 7-8A-8B(智能层 + 计划自动化 + 执行自动化) → +5-6 周
54
+ - **v1.0** = Phase 9(三渠道发布) → +1 周
55
+
56
+ **总工期**:14-18 周 AI 协助(Codex 评审后上调,原 11-13 周)。
57
+
58
+ ---
59
+
60
+ ## 1. 问题陈述
61
+
62
+ ### 1.1 起点
63
+
64
+ Hermes(Ultra Builder Pro)是一套成熟的 agent 工程系统:
65
+ `init → research → plan → dev → test → deliver` 六命令 + `tasks.json` 任务
66
+ 注册表 + `tasks/contexts/task-{id}.md` 独立上下文。它在 Claude Code 上跑得
67
+ 很顺。
68
+
69
+ ### 1.2 三重痛
70
+
71
+ **A. Claude 独占工具钉死**:`TaskCreate/Update/List`、`AskUserQuestion`、`Skill`、
72
+ `Agent(subagent)`、`TeamCreate/SendMessage`、`/compact` 这 6 类 API 让 Hermes
73
+ 离开 Claude Code 寸步难行。其它 3 大 runtime(OpenCode / Codex / Gemini)各
74
+ 有原生等价或兼容层,但今天无人对接。
75
+
76
+ **B. 单会话污染与状态不原子**:
77
+ - `tasks.json` 读-改-写无锁,两个 agent 并发会丢更新。
78
+ - `tasks.json` 与 `contexts/task-{id}.md` 状态**双写**,易半途错乱。
79
+ - `workflow-state.json` 单文件单会话——两个 agent 同跑就互相覆盖。
80
+ - 长对话积累噪音 → 决策质量下降;想独立会话交接却没机制。
81
+ - 总共识别到 12 个痛点(详见 §5)。
82
+
83
+ **C. 缺乏执行层**:
84
+ - 没有任务分派器 → agent 启动靠人工 `/ultra-dev 5`。
85
+ - 没有事件流 → agent A 完成 task B 不知道。
86
+ - 没有崩溃恢复 → agent 挂了状态永久漂移。
87
+ - 没有监控 → token / 成本 / tool call 全都黑盒。
88
+ - 这些都是 "coding 工厂" 的基础设施,今天一片空白。
89
+
90
+ ### 1.3 我们追求的终点
91
+
92
+ > 一个开发者 PRD 进来,自动拆成 10 个带依赖的 task;orchestrator 按依赖
93
+ > 顺序或并行分派给 4 个不同 runtime 的 agent,每 agent 独立 session 执行
94
+ > 一个 task,共享项目记忆与代码图;agent 完成后 commit 并广播事件,触发
95
+ > 下一批;全程 token 压缩监控;失败自动熔断。开发者只需审核最后的 PR。
96
+
97
+ **非魔法**:GSD-2 的 `ctx.newSession()` + `activity-log.json` + `DISPATCH_RULES`
98
+ 已证明这套架构可行。我们做的是**把它嫁接到 Hermes 的规则层上**。
99
+
100
+ ---
101
+
102
+ ## 2. 目标
103
+
104
+ | # | 目标 | 可验证条件 | 归属 Phase |
105
+ |---|------|-----------|----------|
106
+ | G1 | Hermes 在 Claude / OpenCode / Codex / Gemini 四 runtime 原生可用 | 每 runtime 能跑完整 `init→research→plan→dev→test` | 4 |
107
+ | G2 | 状态权威源单一、并发安全 | SQLite + WAL;20 worker 并发 updateTaskStatus 无丢失 | 2 |
108
+ | G3 | `tasks.json` / context md 降级为投影,state.db 权威 | 所有写入走 state-db;JSON/MD 自动再生成(D18) | 2 |
109
+ | G4 | 每 task 独立会话(新进程 + 独立 worktree + lease),对话不污染 | 2 并发 session 各独立 worktree;kill -9 后 lease 过期可清理 | **4.5** |
110
+ | G5 | 跨 session 事件可订阅 | MCP `session.subscribe_events` 从 state-db events 表实时推 | **4.5** |
111
+ | G6 | 崩溃自动恢复,失败有熔断 | kill -9 agent 后 orchestrator 重启能续;同 task 重试 ≥3 次自动停 | 5 |
112
+ | G7 | RTK / code-review-graph / hindsight 作为 MCP tool 跨 runtime 共享;图谱实时增量 | 4 runtime 下都能调 `impact.*` / `memory.*`;editor save → 图谱 ≤3s 更新(D24) | 6, 7 |
113
+ | G8 | PRD 自动拆 task + 并行分派(8A + 8B) | 10 task 的 PRD 一键触发,≤3 失败项,其余自动完成并合入 | **8A, 8B** |
114
+ | G9 | 三渠道可装(npm / Homebrew / pip) | 干净 macOS / Ubuntu 60 秒装好 | 9 |
115
+ | G10 | 0 私人数据泄漏 | npm tarball / brew bottle / pip wheel 审计干净 | 9 |
116
+ | **G11** | Runtime capability matrix + conformance tests | 4 runtime × 5+ 能力点的 E2E 测试全绿(D23) | **4** |
117
+ | **G12** | v0.1 = 规则层 + execution-lite 可用 | 用户能在 4 runtime 下并发跑任务,会话独立 | **4.5** |
118
+
119
+ ---
120
+
121
+ ## 3. 非目标
122
+
123
+ - 重写 Hermes 为独立 coding agent(那是 gsd-2 的产品线,不是我们的)。
124
+ - 抽象 LLM 提供商。runtime 自己管。
125
+ - 做 TUI / web 仪表盘。CLI 是工具,不是宿主。
126
+ - 支持 Copilot / Cursor / Windsurf / Augment / Trae / Qwen / CodeBuddy /
127
+ Cline / Antigravity / Kilo。v0.2+ 再谈,每家 2-3 天。
128
+ - 重新设计 Hermes 的 `init→research→plan→dev→test` 业务流。这套工作流
129
+ 本身是对的,我们只换骨架。
130
+
131
+ ---
132
+
133
+ ## 4. 架构
134
+
135
+ ### 4.1 三层模型(skill + MCP + CLI)
136
+
137
+ ```
138
+ ┌────────────────────────────────────────────────────────────────┐
139
+ │ Skill 层 (知识 / 说明书) │
140
+ │ runtime 原生发现 │
141
+ │ Claude: ~/.claude/skills/ OpenCode: ~/.config/opencode │
142
+ │ Codex: ~/.agents/skills/ Gemini: extension/skills/ │
143
+ │ │
144
+ │ ┌─ SKILL.md ──────────────────────────────┐ │
145
+ │ │ - 何时使用 │ │
146
+ │ │ - workflow 步骤(调 MCP tool × 调 CLI) │ │
147
+ │ │ - 降级路径(MCP 不可用 → CLI;CLI 没 │ │
148
+ │ │ → 人工) │ │
149
+ │ │ - 引用的 references/ 详细文档 │ │
150
+ │ └──────────────────────────────────────────┘ │
151
+ └────────────────────────────────────────────────────────────────┘
152
+ │ agent 读 skill 决定调什么
153
+ ▼
154
+ ┌────────────────────────────────────────────────────────────────┐
155
+ │ MCP 层 (结构化操作 — 主路径) │
156
+ │ 独立进程,各 runtime 通过 MCP protocol 调用 │
157
+ │ │
158
+ │ ultra-builder-mcp-server │
159
+ │ ├─ task.* (create/update/list/get/delete/expand/dispatch) │
160
+ │ ├─ memory.* (retain/recall/reflect) ← hindsight │
161
+ │ ├─ review.* (run/verdict) ← 替代 Claude 独占 subagent pool │
162
+ │ ├─ impact.* (radius/changes) ← code-review-graph │
163
+ │ ├─ skill.* (invoke/list) ← 跨 runtime 统一 skill 入口 │
164
+ │ ├─ session.* (new/current/activity_log) ← GSD-2 模式 │
165
+ │ └─ ask.* (question/menu) ← AskUserQuestion 跨 runtime │
166
+ └────────────────────────────────────────────────────────────────┘
167
+ │ Bash hook / prompt shell-out
168
+ ▼
169
+ ┌────────────────────────────────────────────────────────────────┐
170
+ │ CLI 层 (兜底 / hook / 无 MCP 环境) │
171
+ │ ultra-tools Bash 可调,~/.local/bin │
172
+ │ │
173
+ │ ├─ ultra-tools task list --json │
174
+ │ ├─ ultra-tools memory search "X" --limit 5 │
175
+ │ ├─ ultra-tools ask --question "…" --options "A|B" │
176
+ │ ├─ ultra-tools subagent run review --prompt "…" │
177
+ │ └─ ultra-tools session new --task 5 │
178
+ └────────────────────────────────────────────────────────────────┘
179
+ ```
180
+
181
+ **三层职责(防重复)**:
182
+
183
+ | 层 | 承载 | 写在哪 | 谁调 | 典型场景 |
184
+ |---|---|---|---|---|
185
+ | Skill | workflow 知识、步骤、降级约定 | `SKILL.md` + `references/` | agent 自主阅读 | 做 research 前先读 `skills/ultra-research/SKILL.md` |
186
+ | MCP | 状态 CRUD、事件、跨 runtime 共享 tool | `mcp-server/tools/*.ts` | agent 通过 MCP protocol 调 | 创建 task、读 memory、发 review 请求 |
187
+ | CLI | Bash 兜底、hook 专用、CI 脚本 | `ultra-tools/commands/*.cjs` | Bash / prompt `!{cmd}` / hook | 没 MCP 的 runtime、PostToolUse hook、发布脚本 |
188
+
189
+ **单源同步**:三层共用一份 schema(`spec/schemas/*.json` + `spec/mcp-tools.yaml`),
190
+ Phase 1 的首要产物。skill 引用 MCP tool ID,MCP tool ID 对应 CLI 子命令名。
191
+
192
+ ### 4.2 规则层 vs 执行层(双时间线)
193
+
194
+ | 维度 | 规则层(静态声明) | 执行层(运行时动态) |
195
+ |---|---|---|
196
+ | 形态 | md / JSON schema / TypeScript 类型 | Node daemon / orchestrator / watcher |
197
+ | 负责 | 数据形状、步骤、约束、降级 | session 生命周期、分派、事件、监控、恢复 |
198
+ | 本 PLAN | Phase 1-4 | Phase 4.5-8 |
199
+ | 能否脱离对方跑 | ✅ 可以(手工执行) | ❌ 不能(需要规则层做输入) |
200
+
201
+ **关键原则**:**规则层完整后,执行层才能上**。执行层是"把规则层跑起来",
202
+ 不是"重新发明规则"。跑路线:v0.1 交付**规则层 + execution-lite**(session
203
+ 隔离 + 事件订阅 + 活跃会话可见)→ 用户跨 runtime 并发跑命令且会话独立 →
204
+ v0.2 加执行层进阶(recovery + 监控 + 实时图谱)→ 半自动 → v0.3 加智能层 +
205
+ 工厂 → 全自动。
206
+
207
+ ### 4.3 数据流(端到端)
208
+
209
+ ```
210
+ 开发者 规则层 执行层
211
+ ───── ───────────────── ────────────────
212
+ │
213
+ │ /ultra-init "我的 SaaS"
214
+ ├──────────────▶ Skill: ultra-init/SKILL.md
215
+ │ │
216
+ │ ▼ 调用
217
+ │ MCP: task.init_project
218
+ │ │
219
+ │ ▼ 写 .ultra/specs/*.md (空模板)
220
+ │ ▼ 写 .ultra/tasks/tasks.json (空)
221
+ │ ▼ append state.db events 表(type: project_init)
222
+ │
223
+ │ /ultra-research "市场、架构、产品"
224
+ ├──────────────▶ Skill: ultra-research/steps/...
225
+ │ │
226
+ │ ▼ 17 step × 每步调 memory.recall + WebSearch
227
+ │ │ │
228
+ │ │ ▼ (Phase 7)
229
+ │ │ hindsight MCP
230
+ │ │
231
+ │ ▼ 产出 specs/*.md + research-distillate.md
232
+ │ ▼ activity-log: research_complete
233
+ │
234
+ │ /ultra-plan [HOLD] ← Phase 8 加 human gate
235
+ ├──────────────▶ Skill: ultra-plan/SKILL.md
236
+ │ │
237
+ │ ▼ 调 task.parse_specs + task.expand (PRD 自动拆)
238
+ │ │ │
239
+ │ │ ▼ (Phase 8) DISPATCH_RULES 声明分派
240
+ │ │
241
+ │ ▼ 写 tasks.json + contexts/task-*.md
242
+ │ ▼ activity-log: plan_approved
243
+ │ │
244
+ │ ▼ (Phase 5) orchestrator 订阅
245
+ │ ▼ spawn agent(runtime=X, task=1)
246
+ │ │
247
+ │ ▼ ctx.newSession() + worktree
248
+ │ │
249
+ │ /ultra-dev 1 (可手动;也可 orch 自动) ▼ executor
250
+ ├────────── or automatic ──▶ Skill: ultra-dev/SKILL.md
251
+ │ │
252
+ │ ▼ TDD RED/GREEN/REFACTOR (调 impact.radius + memory.recall)
253
+ │ ▼ review: MCP review.run → 5 个 subagent 并行
254
+ │ │ │
255
+ │ │ ▼ (Phase 6) RTK 压缩 + telemetry
256
+ │ │
257
+ │ ▼ task.update_status completed + commit
258
+ │ ▼ activity-log: task_complete(id=1, commit=abc)
259
+ │ │
260
+ │ ▼ 订阅方:trigger next pending
261
+ ```
262
+
263
+ ### 4.4 组件一览(v1.0 完工形态)
264
+
265
+ ```
266
+ ultra-builder-pro-cli/
267
+ ├── spec/ # 单源 schema (Phase 1)
268
+ │ ├── schemas/
269
+ │ │ ├── state-db.sql # SQLite 权威源 schema (Phase 2)
270
+ │ │ ├── state-db.migrations/ # migration 脚本目录
271
+ │ │ ├── tasks.v4.5.schema.json # 投影视图 schema(tasks.json 导出格式)
272
+ │ │ └── context-file.v4.5.schema.json
273
+ │ ├── mcp-tools.yaml # MCP tool 接口定义(openapi 风格)
274
+ │ ├── skill-manifest.schema.json
275
+ │ └── cli-protocol.md
276
+ ├── mcp-server/ # Phase 3+4
277
+ │ ├── server.ts # stdio MCP server 入口
278
+ │ ├── tools/
279
+ │ │ ├── task/ # task.* 家族
280
+ │ │ ├── memory/ # memory.* 家族 (Phase 7 接 hindsight)
281
+ │ │ ├── review/ # review.* 家族
282
+ │ │ ├── impact/ # impact.* 家族 (Phase 7 接 code-review-graph)
283
+ │ │ ├── skill/
284
+ │ │ ├── session/ # Phase 5
285
+ │ │ └── ask/
286
+ │ └── lib/
287
+ │ ├── state-machine.ts # Phase 2 (lockable RMW)
288
+ │ ├── atomic-write.ts # Phase 2
289
+ │ └── event-log.ts # Phase 2
290
+ ├── ultra-tools/ # CLI 兜底 (Phase 3)
291
+ │ ├── cli.cjs
292
+ │ └── commands/ # task/memory/ask/skill/subagent/session
293
+ ├── skills/ # Phase 3 规则层 (18+ skill)
294
+ │ ├── ultra-init/
295
+ │ ├── ultra-research/
296
+ │ ├── ultra-plan/
297
+ │ ├── ultra-dev/
298
+ │ ├── ultra-test/
299
+ │ ├── ultra-deliver/
300
+ │ ├── ultra-review/
301
+ │ └── ... (既有 18 个保留 + 新增)
302
+ ├── orchestrator/ # Phase 5+8 执行层
303
+ │ ├── daemon.ts # 常驻进程
304
+ │ ├── session-manager.ts # ctx.newSession() 模式
305
+ │ ├── dispatch-rules.ts # Phase 8 声明式分派表
306
+ │ ├── parallel-orchestrator.ts # Phase 8
307
+ │ ├── event-watcher.ts # Phase 5 fs-watch activity-log
308
+ │ └── recovery.ts # Phase 5 circuit-breaker
309
+ ├── telemetry/ # Phase 6
310
+ │ ├── collectors/ # token / tool_call / cost
311
+ │ └── rtk-integration.ts
312
+ ├── adapters/ # Phase 4 跨 runtime 分发
313
+ │ ├── claude.ts
314
+ │ ├── opencode.ts
315
+ │ ├── codex.ts
316
+ │ ├── gemini.ts
317
+ │ └── _shared/
318
+ ├── hooks/ # Python hooks 沿用
319
+ │ ├── *.py (15)
320
+ │ └── core/ adapters/ # Phase 3 三分拆
321
+ ├── agents/ # 9 subagent md (保留)
322
+ ├── commands/ # 9 薄壳命令 (Phase 3 重写为三层调用)
323
+ ├── bin/
324
+ │ └── install.js # Phase 4 完善
325
+ ├── docs/
326
+ │ ├── ROADMAP.md
327
+ │ ├── PLAN.zh-CN.md # 本文件
328
+ │ ├── ARCHITECTURE.md # Phase 1 产物
329
+ │ └── RUNTIME-COMPAT-MATRIX.md # Phase 4 产物
330
+ └── package.json
331
+ ```
332
+
333
+ ### 4.5 关键设计决策
334
+
335
+ | # | 决策 | 理由 |
336
+ |---|------|------|
337
+ | A1 | 三层分离(skill/MCP/CLI)而非单层 | skill 只能"软指导";MCP 提供强类型契约;CLI 做最低公约数兜底。单层满足不了 "knowledge + state + hook 兜底" 三类需求 |
338
+ | A2 | MCP server stdio 而非 HTTP | 4 runtime 全支持 stdio MCP;零端口、零防火墙问题 |
339
+ | A3 | 单源 schema(spec/)驱动三层 | 避免 "skill 说的 tool" 与 "MCP 实际的 tool" 不一致 |
340
+ | **A4** | **权威状态层 = SQLite + WAL**(`.ultra/state.db`);tasks.json / context md / activity-log.json / workflow-state 全部降级为投影 | Codex Q1:多文件多主写入最易炸;SQLite 提供事务 + 并发读;D18 |
341
+ | **A5** | **Session 标准单元 = 新进程 + 独立 worktree + lease/heartbeat + artifact dir**;`ctx.newSession()` 仅作 Claude/GSD-2 适配优化 | Codex Q7:跨 4 runtime 通用;systemd/launchd 过重;D20 |
342
+ | A6 | 事件流 = state-db `events` 表(append-only)+ MCP subscribe | 取代 activity-log.json 文件;state-db 统一权威源(D18) |
343
+ | A7 | Python hooks 沿用,Node shell out | 15 hook 重写 Node 要 2-3 周纯折腾;零价值 |
344
+ | A8 | orchestrator 是可选的常驻 Node daemon | 规则层可不依赖执行层独立跑;半自动 → 全自动平滑升级 |
345
+ | A9 | RTK / code-review-graph / hindsight 全部作为 **MCP tool** 暴露 | 不自建等价功能;它们都是 MIT + MCP 友好 |
346
+ | **A10** | **v0.1 = 规则层 + execution-lite**(非裸规则层) | Codex Q3:用户核心诉求是"独立会话",无执行层 v0.1 不够用;D19 |
347
+ | **A11** | **Schema v4.4 → v4.5 过渡(不直接 v5 breaking)** | Codex Q5:tasks.json 成 authoritative view,context status 降级派生,停止手写保留兼容;等命令全迁完再 v5;D21 |
348
+ | **A12** | **Runtime capability matrix + conformance tests** 代替纸面 parity | Codex Q8:4 runtime 在 hook / subagent / 权限 / usage 统计不等价;D23 |
349
+ | **A13** | **code-review-graph 实时增量**(fs-watch + tree-sitter),不是启动 build | Codex Q6:实时反馈给 agent 才有价值;D24 |
350
+ | **A14** | **hindsight wrapper 式自动记忆**(session 结束自动 retain;session 启动自动 recall),不仅是显式 API | Codex Q6:hindsight 强项是 wrapper 而非显式 CRUD;D25 |
351
+
352
+ ---
353
+
354
+ ## 5. 痛点 × 能力 × Phase 矩阵
355
+
356
+ ### 5.1 12 个痛点 → 解决 Phase
357
+
358
+ | # | 痛点 | 来源证据 | 解决方案 | Phase |
359
+ |---|------|----------|---------|-------|
360
+ | P1 | tasks.json 读-改-写无原子 | ultra-dev.md Step 1.5 / Step 5 | **SQLite 事务(A4/D18)** | **2** |
361
+ | P2 | workflow-state.json 单会话 | ultra-dev.md Step 0/3.3/4.5/6 | 按 session_id 存 state-db sessions 表;orchestrator 管多 session | **4.5** |
362
+ | P3 | tasks.json 与 context 双写 | ultra-dev.md Step 1.5 + 5 明写 BOTH | **v4.5 过渡:state-db 权威,tasks.json/context 降级为投影**(A11/D21) | **2** |
363
+ | P4 | Git 分支硬绑 task_id → 并发冲突 | ultra-dev.md Step 2 | worktree 隔离 + files_modified 重叠检测(GSD) | **8B** |
364
+ | P5 | /compact + compact-snapshot.md Claude 专属 | ultra-dev.md Step 4.4 | 不依赖 /compact;用 Session 标准单元(A5)代替 | **4.5** |
365
+ | P6 | /ultra-review 5 subagent Claude 独占 | ultra-dev.md Step 4.5 | MCP `review.run`;跨 runtime 并行(CTM 模式) | 3 |
366
+ | P7 | Dual-Write Mode spec 改后不 invalidate | ultra-dev.md Dual-Write | events 表 `spec_changed` + task staleness 字段 | 5 |
367
+ | P8 | 无 task 间事件通知 | 整个体系 | state-db `events` 表 append-only + MCP subscribe | **4.5** |
368
+ | P9 | status 字段 tasks.json 与 context 重复 | plan + dev 都要求同步 | 同 P3(schema v4.5 过渡) | **2** |
369
+ | P10 | 无项目级事件流 | 仅 workflow-state.json 单点 | 同 P8 | **4.5** |
370
+ | P11 | commit hash 回填 amend 链非原子 | ultra-dev.md Step 6.3 | 先 commit → 读 hash → 写 context → 第二次 commit(不 amend) | 3 |
371
+ | P12 | ultra-test/deliver 顺序假设 | 命令本身结构 | DISPATCH_RULES + parallel-orch(GSD-2) | **8B** |
372
+
373
+ ### 5.2 能力升级(非痛点,来自参考项目)→ Phase
374
+
375
+ | 能力 | 来源 | 加到哪 | Phase | 工时 |
376
+ |------|------|-------|-------|-----:|
377
+ | RTK Bash 命令压缩(60-90%) | RTK | `rtk init -g` + hook 注册 | 6 | 0.5d |
378
+ | 爆炸半径分析(8x 减少) | code-review-graph | MCP `impact.*` tool | 7 | 2d |
379
+ | 长期记忆(retain/recall/reflect) | hindsight | MCP `memory.*` tool | 7 | 5d |
380
+ | Skill 自动萃取 + 注入 | OMC | `/learn` 扩展;dev 起步读匹配 skill | 7 | 2d |
381
+ | Model 自适应路由(Haiku/Opus) | OMC | 每 skill frontmatter 声明 complexity | 7 | 1d |
382
+ | Human gate in /ultra-plan | OMX | plan Step 6 加 approval | 8 | 0.5d |
383
+ | AGENTS.md scope guard | OMX | 合并 CLAUDE.md → 统一注入 | 3 | 1d |
384
+ | PRD 自动解析 → task | CTM | MCP `task.parse_prd` | 8 | 2d |
385
+ | Task dependency graph + auto-expand | CTM | tasks.json v5 + MCP `task.expand` | 2, 8 | 2d |
386
+ | DISPATCH_RULES 声明式分派 | GSD-2 | orchestrator Phase 8 | 8 | 3d |
387
+ | Worktree 并发 + files_modified 重叠检测 | GSD | orchestrator Phase 8 | 8 | 2d |
388
+ | Crash 恢复 + circuit breaker | GSD-2 | orchestrator Phase 5 | 5 | 2d |
389
+
390
+ ---
391
+
392
+ ## 6. Phase 分解
393
+
394
+ 每个 Phase 含:**目标 · 前置依赖 · 任务列表(含 AC)· 工时 · 置信度**。
395
+
396
+ > 约定:AC = Acceptance Criterion(可独立复跑的验收准则)。工时 = AI 协助下
397
+ > 单开发者。Phase 内同级任务可并行;跨 Phase 严格串行(有依赖)。
398
+
399
+ ---
400
+
401
+ ### Phase 0 — 骨架(✅ 完成,commit `da69a7a`)
402
+
403
+ **目标**:最小可跑的 CLI + 4 adapter stub + ultra-tools 骨架 + 3 份文档。
404
+
405
+ | ID | 任务 | AC | 完成 |
406
+ |----|------|-----|------|
407
+ | 0.1 | 销毁旧 .git,main 重建 + bundle 备份 | 3 commit 在 main 上 | ✅ |
408
+ | 0.2 | package.json + bin/install.js | `--help / --all --local` 正确 | ✅ |
409
+ | 0.3 | 4 adapter stub | resolveTarget 返回正确路径 | ✅ |
410
+ | 0.4 | ultra-tools/cli.cjs 骨架 | 5 子命令 stub 打印 | ✅ |
411
+ | 0.5 | docs/ROADMAP + PLAN.zh-CN + 隐私净化 | npm pack --dry-run 无泄漏 | ✅ |
412
+
413
+ **gate**:`node bin/install.js --help` + `--all --local` 都输出预期 stub 错误。
414
+
415
+ ---
416
+
417
+ ### Phase 1 — 三层接口定义(规则层基础)✅ 完成,commit `926cd74`
418
+
419
+ **目标**:把 skill / MCP tool / CLI 三层的**schema 锁死**。后续所有 Phase 只
420
+ 引用 spec/,不再定义新 schema。接口先行是避免"写到一半发现 schema 不兼容"
421
+ 最大的保险。
422
+
423
+ **前置**:Phase 0
424
+
425
+ **置信度**:95%(纯设计工作,风险低)
426
+
427
+ **工时**:3-4 天
428
+
429
+ **完成清单**(D38):
430
+ - 1.1 ✅ `spec/mcp-tools.yaml` — 8 族 / 30 tool,meta-schema 校验,13 sample
431
+ fixture 全绿;CLI 子命令唯一映射
432
+ - 1.2a ✅ `spec/schemas/state-db.sql` — 7 表(含 schema_version /
433
+ migration_history / telemetry / specs_refs),WAL/foreign_keys 已开;
434
+ 8 valid INSERT + 8 invalid INSERT(type/priority/complexity/status/NOT NULL/
435
+ FK/runtime/direction CHECK)全绿
436
+ - 1.2b ✅ `spec/schemas/tasks.v4.5.schema.json` + `context-file.v4.5.schema.json`
437
+ — `x-derived` 标记到 status/deps/session_id;body 禁止出现 Status section;
438
+ 4 valid + 5 invalid fixture 全绿
439
+ - 1.3 ✅ `spec/schemas/skill-manifest.schema.json` — 现有 17/17 skill 100% 通
440
+ 过(`skills/learned/` 是元目录无 SKILL.md);不一致时落 `spec/migration-
441
+ notes.md`
442
+ - 1.4 ✅ `spec/cli-protocol.md` — 输入/输出/退出码三段约束,30-行
443
+ tool↔CLI 映射表;`spec/scripts/check-cli-mapping.cjs` 0 漂移
444
+ - 1.5 ✅ `docs/ARCHITECTURE.md` — 三层数据流图 + state.db 七表 + session
445
+ 标准单元 + 双时间线
446
+ - gate ✅ `npm run test:spec` → 5 validator 全绿(json-schema / mcp-tools /
447
+ state-db / skills / cli-mapping)
448
+
449
+ #### 任务清单
450
+
451
+ **1.1 MCP tool schema**(1 天)
452
+ - 新建 `spec/mcp-tools.yaml`(openapi 3 风格)。
453
+ - 定义 7 族 tool 的 input/output schema:`task.*` / `memory.*` / `review.*`
454
+ / `impact.*` / `skill.*` / `session.*` / `ask.*`
455
+ - `skill.*` **只含只读接口**:`skill.resolve(name) → {path, manifest}` /
456
+ `skill.manifest(name) → frontmatter`(D29:Codex 第二轮 R2;skill 是
457
+ 知识载体不做业务 RPC,删除 skill.invoke/list)
458
+ - 每个 tool 含:name, description, input JSON Schema, output JSON Schema,
459
+ errors, 对应的 CLI subcommand 名。
460
+ - **AC**:pnpm `ajv validate` 所有 sample input/output 通过。
461
+
462
+ **1.2 数据 schema**(1 天)
463
+ - `spec/schemas/state-db.sql` — SQLite 权威源 schema(详见 §7.1),五表
464
+ 结构 + index + migration_history + schema_version。
465
+ - `spec/schemas/tasks.v4.5.schema.json` — tasks.json **投影视图** schema
466
+ (仅用于 export/调试;权威仍是 state-db):
467
+ - status 字段存在但标 "derived";context file header 也标 "derived"
468
+ - 新增 `dependencies: [taskId]`、`files_modified: [path]`、`session_id`
469
+ - `spec/schemas/context-file.v4.5.schema.json` — body 部分不嵌 status;
470
+ 由投影器再生成 header。
471
+ - **AC**:每 schema 配一份合法 + 一份非法 fixture,`ajv` / sqlite3 分别返
472
+ 回 pass / fail。
473
+
474
+ **1.3 Skill manifest 规范**(0.5 天)
475
+ - `spec/skill-manifest.schema.json` — 所有 skill 的 frontmatter 规范:
476
+ - name / description / runtime(Claude/OpenCode/Codex/Gemini/all)/
477
+ mcp_tools_required / cli_fallback / complexity_hint(Haiku/Sonnet/Opus)
478
+ - **AC**:现有 18 skill 的 frontmatter 校验通过(≥90%,其余写 migration note)。
479
+
480
+ **1.4 CLI 协议文档**(0.5 天)
481
+ - `spec/cli-protocol.md` — ultra-tools 的约定:
482
+ - 输入:flag + positional
483
+ - 输出:最后一行 `{ok: true/false, data/error}` JSON
484
+ - 退出码表
485
+ - **AC**:与 MCP tool 的 output schema 一一对应(每个 CLI 子命令匹配一个 MCP tool)。
486
+
487
+ **1.5 架构文档**(0.5 天)
488
+ - `docs/ARCHITECTURE.md` — 本 §4 内容扩写;图示 skill/MCP/CLI 三层数据流。
489
+ - **AC**:reviewer 能独立从 ARCHITECTURE 理解整个系统。
490
+
491
+ #### Phase 1 gate
492
+
493
+ - 所有 spec/ 文件通过 ajv 校验
494
+ - `spec/mcp-tools.yaml` 列出每个 tool 名与 CLI 子命令的映射表
495
+ - ARCHITECTURE.md reviewer 批准
496
+
497
+ ---
498
+
499
+ ### Phase 2 — 权威状态层(SQLite + WAL)✅ 完成,commit `e286e41`
500
+
501
+ **目标**:建立 `.ultra/state.db` 为**唯一权威状态源**,解决 P1/P3/P8/P9/P10
502
+ 五大架构级痛点。tasks.json / context md 的 status / activity-log.json /
503
+ workflow-state 全部降级为**投影(projection)**或**导出视图**。一次写,
504
+ 多处派生。
505
+
506
+ **依据**:Codex Q1 评审(状态权威源不明是最大风险)+ D18 + A4 决策。
507
+
508
+ **前置**:Phase 1(schema 已定)
509
+
510
+ **置信度**:92%(下调自 95%;SQLite 工程成熟,但权威源切换 + 投影器是新工作)
511
+
512
+ **工时**:5-6 天
513
+
514
+ **完成清单**(D39):
515
+ - 2.1 ✅ `mcp-server/lib/state-db.cjs` + `ultra-tools db init` — 7 表 +
516
+ WAL/synchronous/busy_timeout/foreign_keys + schema_version='4.5';
517
+ 幂等 init;4 unit tests
518
+ - 2.2 ✅ `docs/STATE-DB-ACCESS-POLICY.md` — 三角色矩阵 + BEGIN
519
+ IMMEDIATE + 3-retry + WAL fallback;3 worker × 100 events 并发压测
520
+ 无 'database is locked' / events.id 单调
521
+ - 2.3 ✅ `mcp-server/lib/state-ops.cjs` — 完整 API(tx / readTask /
522
+ listTasks / createTask / patchTask / updateTaskStatus / deleteTask /
523
+ appendEvent / subscribeEventsSince / createSession / updateSession /
524
+ listActiveSessions / listStaleTasks)+ status 状态机;decorrelated
525
+ jitter backoff;20 worker × 50 task × 2 transition = 2000 写事务无
526
+ 丢失;14 + 1 contract tests
527
+ - 2.4 ✅ `ultra-tools migrate --from=4.4 --to=4.5` + `--dry` +
528
+ `--rollback`;`spec/fixtures/v4.4-project/` 最小 v4.4 项目;
529
+ tasks.json 优先(context md status 冲突时 warning);migration_history
530
+ 含 forward+rollback;5 tests
531
+ - 2.5 ✅ `ultra-tools db checkpoint/vacuum/integrity/backup` 4 子命令;
532
+ backup 用 wal_checkpoint + fs.copyFileSync 产生独立可打开文件;5 tests
533
+ - 2.6 ✅ `mcp-server/lib/projector.cjs` — `projectTasks` /
534
+ `projectContext` / `projectAll`;atomic write;`generated_at` 来自
535
+ `MAX(updated_at, ts, applied_at)` 保证 idempotent;30 task ≤1s;ajv
536
+ v4.5 schema 校验;5 tests
537
+ - 2.7 ✅ `mcp-server/server.cjs` — `@modelcontextprotocol/sdk` low-level
538
+ Server + StdioServerTransport;7 task.* tool 注册(input/output 都过
539
+ ajv);mutating tool 触发 projector;7 contract tests(spawn 子进程 +
540
+ StdioClientTransport)
541
+ - 2.8 ✅ `docs/COMMIT-HASH-BACKFILL.md` 描述 feat→projector→chore 两
542
+ commit 流程;2 tests with real git repo
543
+
544
+ **测试**:`npm run test:state` 44/44 全绿;`npm run test:spec` 5/5 全绿。
545
+
546
+ #### 任务清单
547
+
548
+ **2.1 SQLite schema 设计**(1 天)
549
+ - `.ultra/state.db` 七张核心表(详见 §7.1):
550
+ - `tasks` / `events` / `sessions` / `telemetry` / `specs_refs`
551
+ - **`schema_version`**(D30/R4):当前 schema 版本号 + migration
552
+ timestamp,避免跨版本误读
553
+ - **`migration_history`**(D30/R4):每次迁移的 from→to + ts + status
554
+ 审计
555
+ - `events` 表主键 **`id INTEGER PRIMARY KEY AUTOINCREMENT`**(D31/R4):
556
+ 订阅游标走单调递增 id,不用 `max(ts)`,避免同 ms 多事件丢失
557
+ - WAL 模式:`PRAGMA journal_mode=WAL` + `PRAGMA synchronous=NORMAL` +
558
+ `PRAGMA busy_timeout=5000`(R4 多进程访问)
559
+ - 产物:`spec/schemas/state-db.sql`(CREATE 语句 + `spec/schemas/
560
+ state-db.migrations/` 目录)
561
+ - **AC**:schema 通过 sqlite3 解析;7 表 + 索引全部创建;`schema_version`
562
+ 初始写入。
563
+
564
+ **2.2 多进程访问策略**(0.5 天,**新增 R4.1**)
565
+ - `docs/STATE-DB-ACCESS-POLICY.md`:定义谁能写哪些表
566
+ - MCP server(单 writer 角色):写 tasks / events / sessions / telemetry
567
+ - CLI(读多写少):仅写 events(append-only);其它 table 调 MCP
568
+ - orchestrator daemon:写 sessions / events;读全部
569
+ - 所有写操作用 `BEGIN IMMEDIATE` + `busy_timeout=5000` + 最多 3 次重试
570
+ - **AC**:3 进程(MCP / CLI / daemon)同时写压测 → 无 `database is locked`
571
+ 报错、无丢失
572
+
573
+ **2.3 state-ops 库**(1.5 天)
574
+ - `mcp-server/lib/state-db.ts`:基于 `better-sqlite3`(同步,零依赖编译)
575
+ - 暴露:`tx(fn)` 事务 / `readTask(id)` / `updateTaskStatus(id, status)`
576
+ / `appendEvent(event) → {id}` / `subscribeEventsSince(cursorId)` /
577
+ `createSession({task_id, runtime, ...})` / `updateSession(sid, patch)`
578
+ / `listActiveSessions()` / `listStaleTasks()` / ...
579
+ - 所有写入在事务里;events append 原子(返回新 id 作订阅游标)
580
+ - **AC**:20 worker 并发 `updateTaskStatus` 压测无丢失;事务回滚无部分
581
+ 写入;订阅按 events.id 单调递增无漏事件
582
+
583
+ **2.4 Migration v4.4 → v4.5**(0.5 天)
584
+ - CLI 工具 `ultra-tools migrate --from=4.4 --to=4.5`:
585
+ - 读现有 `.ultra/tasks/tasks.json` → insert into `tasks` 表
586
+ - 读 `contexts/task-*.md` header 中的 status → merge 进 tasks(冲突时
587
+ tasks.json 为准)
588
+ - 读 `.ultra/activity-log.json`(若有)→ insert into `events` 表
589
+ - 产出 backup:`.ultra/backup-v4.4/`;写 `migration_history`
590
+ - Dry-run 模式:`--dry` 打印变更计划不落盘
591
+ - **AC**:v4.4 项目跑 migration → state.db 完整;`rollback` 可还原;
592
+ `migration_history` 含两条记录(forward + rollback)
593
+
594
+ **2.5 DB 运维例行**(0.5 天,**新增 R4.2**)
595
+ - `ultra-tools db checkpoint`:手动 `PRAGMA wal_checkpoint(TRUNCATE)`
596
+ - `ultra-tools db vacuum`:定期 VACUUM
597
+ - `ultra-tools db integrity`:`PRAGMA integrity_check`
598
+ - `ultra-tools db backup [--to <path>]`:在线 `.backup` API
599
+ - orchestrator 定时任务:每 24h 自动 checkpoint + 每 7d 自动 backup 到
600
+ `.ultra/backups/state-db-{ts}.db`
601
+ - **AC**:四个子命令都能跑;备份文件可单独 sqlite3 打开
602
+
603
+ **2.6 投影器(projection)**(1 天)
604
+ - 每次 state.db 变更 trigger 重写 **投影文件**:
605
+ - `.ultra/tasks/tasks.json` — 从 `tasks` 表再生成
606
+ - `.ultra/tasks/contexts/task-*.md` 的 status header — 从 `tasks.status`
607
+ 派生;context md 的其它 body 部分不动
608
+ - 投影是**只读视图**:Phase 3+ 代码禁止手写(读走 state-db API;写走
609
+ MCP task.* tool)
610
+ - **AC**:改 state.db 后 ≤1s 内投影同步;手改投影 → 下次 state-db 写入
611
+ 覆盖
612
+
613
+ **2.7 MCP `task.*` 实装**(1 天)
614
+ - `task.create` / `task.update` / `task.list` / `task.get` /
615
+ `task.delete` / `task.append_event` / `task.subscribe_events`
616
+ - 全部走 state-db(不碰文件)
617
+ - `subscribe_events(since_id=N)` 走 `events.id` cursor(D31/R4)
618
+ - **AC**:契约测试全绿
619
+
620
+ **2.8 Commit hash 回填重构**(0.5 天)
621
+ - 旧:commit → read hash → edit context → `git commit --amend`(非原子)
622
+ - 新:commit(空 hash context)→ read hash → update state-db tasks
623
+ `completion_commit` → 投影器更新 context → **第二次 commit** "chore:
624
+ record task-N completion hash"
625
+ - 修改 `skills/ultra-dev/SKILL.md` Step 6 描述;Phase 3 落地
626
+ - **AC**:`git log --oneline` 看到 "feat: …" + "chore: record hash" 两
627
+ commit 并列
628
+
629
+ #### Phase 2 gate
630
+
631
+ - 20 worker 并发 `updateTaskStatus` + 3 进程(MCP/CLI/daemon)同时写压测过
632
+ - migration 可逆测试过;dry-run 预览准确
633
+ - DB 运维四子命令可用
634
+ - 投影器响应 ≤1s
635
+ - 所有 `task.*` MCP tool 契约测试全绿
636
+ - events subscribe 按 id cursor 无漏事件
637
+
638
+ ---
639
+
640
+ ### Phase 3 — 命令规则化(三层迁移)
641
+
642
+ **目标**:把 9 个 `/ultra-*` 命令的"厚 md 脚本"重构为"薄壳 + skill + MCP +
643
+ CLI"。消除对 Claude 独占工具的硬依赖。
644
+
645
+ **前置**:Phase 2(状态机可用)
646
+
647
+ **置信度**:90%(工作量大但模式确定;9 命令 × 0.5-1d)
648
+
649
+ **工时**:5-7 天
650
+
651
+ #### 任务清单
652
+
653
+ **3.0 命令重构模板**(0.5 天)
654
+ - 定一份"薄壳命令模板":新 `/ultra-X` 命令文件 ≤ 80 行:
655
+ - frontmatter(description / allowed-tools)
656
+ - 一句话目标
657
+ - 一个 `<workflow>` 引用对应 skill:`@skills/ultra-X/SKILL.md`
658
+ - 一段 args 传递说明
659
+ - **AC**:模板以 `/ultra-init` 为样板走通(见 3.1)。
660
+
661
+ **3.1 `/ultra-init` 迁移**(0.5 天)
662
+ - `skills/ultra-init/SKILL.md`:workflow 从现有 ultra-init.md 迁来,其中
663
+ 所有 `TaskCreate` → 调 MCP `task.create`;`AskUserQuestion` → 调
664
+ MCP `ask.question`;`Bash mkdir` 保留。
665
+ - `mcp-server/tools/task/init-project.ts`:新 MCP tool `task.init_project`
666
+ 做目录搭建 + 空 tasks.json 写入。
667
+ - `ultra-tools/commands/init.cjs`:CLI 兜底做同样事情。
668
+ - 三层都能完成 init → AC 对齐 CLAUDE 下今天的 init 行为。
669
+ - **AC**:在 Claude / OpenCode / Codex / Gemini 任一 runtime 下跑 init,
670
+ 产出的 `.ultra/` 目录与当前 Hermes 的 init 输出 diff-equal。
671
+
672
+ **3.2 `/ultra-research` 迁移**(1 天)
673
+ - `skills/ultra-research/SKILL.md` + 17 个 step 文件继承。
674
+ - 每步的"WebSearch + 结构化输出"保持不变;状态推进改调 `task.update`。
675
+ - 新增:每步完成后调 `memory.retain`(Phase 7 落地前是 no-op placeholder,
676
+ 先留接口)。
677
+ - **AC**:17 步跑完产出的 specs/*.md 与现有行为 diff-equal。
678
+
679
+ **3.3 `/ultra-plan` 迁移**(0.5 天)
680
+ - `skills/ultra-plan/SKILL.md`:workflow 保留;所有 tasks.json 写入改调
681
+ MCP `task.create_batch`;scope mode 选择改调 MCP `ask.question`。
682
+ - **AC**:给一份完整 specs,生成的 tasks.json + contexts 与当前行为一致。
683
+
684
+ **3.4 `/ultra-dev` 迁移**(1.5 天,最大头)
685
+ - `skills/ultra-dev/SKILL.md`:7 大 step 的 workflow 保留。
686
+ - 双写消除:Step 1.5 / Step 5 只调 `task.update_status`,不再手改 context
687
+ header。
688
+ - 子 agent 调用改 MCP `review.run` → 后端 Phase 3 用 MCP pool 跑;无 MCP 的
689
+ runtime 退回 CLI `ultra-tools subagent run`(串行)。
690
+ - Step 4.4 `/compact` 依赖**移除**;改为 session.checkpoint 存状态(Phase 5
691
+ 实装;此处先留接口)。
692
+ - **AC**:单 task 完整 TDD 周期在 4 runtime 上都能跑通(跑不通的记入
693
+ Phase 4 runtime-specific issue)。
694
+
695
+ **3.5 `/ultra-test` + `/ultra-deliver` 迁移**(1 天)
696
+ - 类似 3.3,workflow 保留,状态写入和工具调用改 MCP/CLI。
697
+ - **AC**:两命令在 Claude 下端到端跑通。
698
+
699
+ **3.6 `/ultra-status` + `/ultra-think` + `/learn` 迁移**(1 天)
700
+ - 辅助命令,逻辑简单,批量迁。
701
+ - **AC**:全 9 命令迁完。
702
+
703
+ **3.7 AGENTS.md 统一上下文**(1 天)
704
+ - 合并 `CLAUDE.md` / `AGENTS.md` / `GEMINI.md` 为统一 **规则注入文件**
705
+ (命名:每 runtime 的原生 context 文件,但内容相同)。
706
+ - 内容:三层架构说明 + 关键 MCP tool 清单 + CLI 命令表 + skill 发现路径。
707
+ - 这是 OMX "scope guard" 能力(§5.2)。
708
+ - **AC**:新装的项目自动生成对应 runtime 的 context 文件,内容一致。
709
+
710
+ **3.8 Python hooks 三分拆**(1 天)
711
+ - 按原 PLAN v0.1 的 Phase 3 做:core/ + adapters/(claude / opencode /
712
+ codex / gemini.py)
713
+ - **AC**:Claude hooks 行为字节级一致;OpenCode/Codex 只接 2 个可达事件
714
+ (§5.4);Gemini 降级 prompt guard(文档化)。
715
+
716
+ #### Phase 3 gate
717
+
718
+ - 全 9 命令在 Claude 下行为 diff-equal 对照 pre-Phase-3 基线
719
+ - 命令 .md 文件平均长度从当前 300+ 行降到 ≤ 80 行(薄壳)
720
+ - MCP 7 族 tool 全部有 ≥1 个命令实际调用
721
+
722
+ ---
723
+
724
+ ### Phase 4 — 跨 runtime 分发
725
+
726
+ **目标**:让 skill/MCP/CLI 三层正确安装到 Claude / OpenCode / Codex / Gemini
727
+ 四 runtime。包含 MCP server 注册、skill 拷贝、CLI PATH、runtime-specific 转换。
728
+
729
+ **前置**:Phase 3(三层可用)
730
+
731
+ **置信度**:88%(runtime 细节风险:hook schema 未完全公开,见 R10-R14)
732
+
733
+ **工时**:6-8 天
734
+
735
+ #### 任务清单
736
+
737
+ **4.1 共享 adapter 工具**(1 天)
738
+ - `adapters/_shared/file-ops.ts` / `frontmatter.ts` / `settings-merge.ts` /
739
+ `path-rewrite.ts` / `md-to-toml.ts` — 从 v0.1 PLAN §6.2.1 继承。
740
+ - **AC**:5 模块共 15 单元测试,覆盖率 ≥85%。
741
+
742
+ **4.2 Claude adapter**(1 天)
743
+ - `~/.claude/{skills,commands,agents,hooks}` 直接拷贝。
744
+ - `settings.json` 注入 hook 配置 + MCP server 注册(`claudeSettingsMcpServers`
745
+ 字段)。
746
+ - **AC**:diff-equal 门槛(对 pre-Phase-4 基线)。
747
+
748
+ **4.3 OpenCode adapter**(1.5 天)
749
+ - 目标:`~/.config/opencode/{skills,agents,commands}` + `opencode.json` 注
750
+ 入 `mcp` 字段。
751
+ - agent frontmatter 小写化(PLAN §5 已核验)。
752
+ - hook 降级到 2 可达事件。
753
+ - **AC**:opencode.json 合法;跑 `/ultra-init` 烟测成功。
754
+
755
+ **4.4 Codex adapter**(2 天,含 0.5 天 spike)
756
+ - spike:抓 `hooks.json` 实际 wire format(under development,见 R11)。
757
+ - agent 拆成 `agents/<name>.toml` + 主 config 引用。
758
+ - skill 装到 `~/.agents/skills/`(open agent skills standard)。
759
+ - 命令转 `prompts/*.md`(或 AGENTS.md 语境内联,待 spike)。
760
+ - MCP server 注册到 `config.toml [mcp_servers]`。
761
+ - **AC**:config.toml 合法;`codex exec "run /ultra-init"` 成功。
762
+
763
+ **4.5 Gemini adapter**(2 天,含 0.5 天 spike)
764
+ - spike:抓 `hooks/hooks.json` + subagent frontmatter。
765
+ - **整体打包成 Gemini extension**(`~/.gemini/extensions/ultra-builder-pro/`)。
766
+ - 命令 md → toml(`md-to-toml.ts`)。
767
+ - MCP server 在 extension manifest 里声明。
768
+ - **AC**:extension 目录合法;gemini 启动识别;`gemini --prompt` 烟测成功。
769
+
770
+ **4.6a Runtime capability matrix + v0.1 smoke flow**(1 天,**D33 收敛**)
771
+ - `docs/RUNTIME-COMPAT-MATRIX.md`:列 4 runtime × ~25 能力点:
772
+ - 问答:AskUserQuestion / CLI menu / MCP `ask.question`
773
+ - Hook 事件:每 runtime 的可用事件名单 + payload 形状
774
+ - Subagent:Claude Task / Codex spawn_agent / Gemini preview / OpenCode @mention
775
+ - Usage 统计:token / cost 能否拿到
776
+ - MCP:stdio 稳定性 / HTTP 支持
777
+ - Skill 发现路径
778
+ - Worktree 兼容性
779
+ - 权限/审批模型
780
+ - `tests/conformance/<runtime>/` v0.1 基线:**每 runtime 1-2 条 smoke flow**
781
+ - Flow 1: `install → /ultra-init → task.create → 读投影 tasks.json → uninstall`
782
+ - Flow 2: `/ultra-dev 1` 通过 session.spawn 起 session → 关
783
+ - **AC**:matrix 文档完整;4 runtime × 2 smoke = 8 testcase 全绿
784
+
785
+ **4.6b Full conformance suite**(1 天,**D45 2026-04-17 完成**)
786
+ - ✅ 每 runtime 5 capability 完整测试 = 20 testcase(+ 8 原 smoke 保留 = 28)
787
+ - ✅ `tests/conformance/_capabilities.cjs` 共享 assertion;各 runtime `conformance.test.cjs` 注入 runtime-specific config
788
+ - ✅ `resolveTarget()` contract test(21 tests,4 runtime × 5 scenario)
789
+ - ✅ Phase 4 review backlog 全清(6 P2 + 5 P3 → D45)— 含 `_source` 搬到 sibling `_ubp` 的 env 泄漏修复
790
+
791
+ **4.7 install.js 真实装配**(0.5 天)
792
+ - 从 Phase 0 stub 升级为真调用 adapter。
793
+ - `--claude/--opencode/--codex/--gemini/--all` + `--local/--global` + `--uninstall`。
794
+ - 幂等:跑两次 install diff = 空。
795
+ - **AC**:4 runtime × 2 scope = 8 条安装路径全绿;uninstall 后目录干净。
796
+
797
+ #### Phase 4 gate
798
+
799
+ - 4 runtime 下 `/ultra-init` 都能跑通
800
+ - Claude diff-equal 基线通过
801
+ - runtime-compat-matrix 20 conformance testcase 全绿
802
+ - `docs/RUNTIME-COMPAT-MATRIX.md` 完整产出
803
+
804
+ ---
805
+
806
+ ### Phase 4.5 — Execution-lite(新增;Codex Q3)
807
+
808
+ **目标**:让 **v0.1 带最小执行层**,解决用户核心诉求"独立会话不污染"。
809
+ 不等 Phase 5 全量执行层;先把 Session 标准单元(D20)+ 事件订阅 + 活跃
810
+ 会话可见这三件最核心的能力落地。
811
+
812
+ **依据**:Codex Q3 + D19 + A10。
813
+
814
+ **前置**:Phase 4(规则层完整)
815
+
816
+ **置信度**:82%(session 进程化是新抽象;不复用 Claude `/compact`)
817
+
818
+ **工时**:5-6 天
819
+
820
+ #### 任务清单
821
+
822
+ **4.5.1 Session 标准单元**(2 天)
823
+ - `orchestrator/session-runner.ts`:session = 新进程 + 独立 worktree +
824
+ **state-db `sessions` 表作为 lease/heartbeat 权威**(R4/R1:不再有
825
+ `.ultra/sessions/<sid>/lease.json` 文件)
826
+ - 架构原则(**D32**):lease/heartbeat 存**state.db `sessions` 表字段**,
827
+ `.ultra/sessions/<sid>/` 只放 artifact(不含 lease 文件);消除文件+表
828
+ 双源
829
+ - API:
830
+ - `spawn({task_id, runtime})` → 创建 worktree `.ultra/worktrees/<sid>/`
831
+ + 写 `sessions` 表 + 启动 runtime CLI 子进程
832
+ - 子进程每 30s 调 MCP `session.heartbeat(sid)` → 更新 `sessions.
833
+ heartbeat_at`
834
+ - `closeSession(sid)` 合并 artifact(Phase 8B 强化冲突检测)
835
+ - **AC**:
836
+ - spawn 一个 `/ultra-dev 1`,进程隔离、worktree 独立、artifact 写入
837
+ `.ultra/sessions/<sid>/`
838
+ - kill -9 子进程 → lease_expires_at 过期(无 heartbeat 更新)可被识别
839
+
840
+ **4.5.2 Single-active-lease admission control**(1 天,**新增 R3**)
841
+ - spawn 前先查 `sessions` 表:同 task_id 已有 status=running + lease 未
842
+ 过期 → 三选一策略:
843
+ - `--takeover`:强杀老 session + 新 session 接管
844
+ - `--resume`:复用老 session(若 heartbeat 新鲜)
845
+ - `--abandon`:放弃 spawn 报错
846
+ - 默认策略可配(`workflow.admission_policy`),默认 abandon 保守
847
+ - MCP tool `session.admission_check(task_id) → {has_active, lease_info}`
848
+ - **AC**:
849
+ - 同 task 已有 active session 时,spawn 默认被拒
850
+ - `--takeover` 能清掉旧 session 启动新的
851
+ - 并发 spawn 同 task → 只有 1 个成功
852
+
853
+ **4.5.3 Event subscribe 接口**(0.5 天)
854
+ - MCP tool `session.subscribe_events(since_id=N, filter)` → 走 `events.id`
855
+ cursor(D31;不用 `max(ts)`)
856
+ - 实时推送:polling + id cursor,≤1s latency
857
+ - **AC**:session A 调 `task.update_status completed` → session B 按
858
+ events.id 订阅回调 ≤1s 收到;跨 ms 多事件无漏
859
+
860
+ **4.5.4 `/ultra-status` 基础版**(1 天)
861
+ - 读 state-db `sessions` + `events`(按 id DESC limit 20)→ 文本面板:
862
+ 活跃 session 列表 + 最近事件 + 疑似 orphan 警告
863
+ - **AC**:status 输出 "2 active sessions: sid-abc (task 1, claude), sid-def
864
+ (task 3, codex); last event: task-1 completed 2min ago"
865
+
866
+ **4.5.5 `/ultra-dev` session 化**(1 天)
867
+ - 改 `skills/ultra-dev/SKILL.md`:开始调 `session.admission_check` + `
868
+ session.spawn`,结束调 `session.close`
869
+ - 移除对 `/compact` 依赖(D19);用 artifact dir 暂存代替
870
+ - **AC**:两 user 同机并发 `/ultra-dev 1` + `/ultra-dev 2` 独立 worktree
871
+ / session,commit 分别记录
872
+
873
+ **4.5.6 Orphan lease 清理**(0.5 天)
874
+ - 启动时 / 定时扫 `sessions` 表:status=running + `lease_expires_at < now()`
875
+ + `heartbeat_at` 过期 → 标记 `status=orphan`(不删;Phase 5 接管 recovery)
876
+ - **AC**:orphan 被打标;不被误当成 active
877
+
878
+ #### Phase 4.5 gate
879
+
880
+ - 2 并发 session 隔离测试过
881
+ - 同 task 并发 spawn → 单活 admission 测试过
882
+ - kill -9 → lease 过期识别测试过
883
+ - event subscribe 按 id cursor latency ≤1s
884
+ - 无文件+表双源(grep 代码无 `lease.json`)
885
+
886
+ **▶ v0.1 发布就绪点**:Phase 0-4.5 完工 → 用户 `npx ultra-builder-pro-cli
887
+ --claude --global` 装上,即可跨 4 runtime 手动并发跑任务、会话独立、事件
888
+ 订阅、活跃会话可见。真·可用的最小单元。
889
+
890
+ ---
891
+
892
+ ### Phase 5 — 执行层进阶(recovery + staleness + 自动分派)
893
+
894
+ **目标**:在 Phase 4.5 的基础单元上加 recovery + 熔断 + staleness +
895
+ runtime 自动路由。
896
+
897
+ **前置**:Phase 4.5
898
+
899
+ **置信度**:85%
900
+
901
+ **工时**:4-5 天
902
+
903
+ #### 任务清单
904
+
905
+ **5.1 Recovery**(2 天)
906
+ - `orchestrator/recovery.ts`:
907
+ - 启动时扫 `sessions` 表:status=running + lease 过期 + 无 heartbeat
908
+ → 标记 crashed → 决策重试 / 熔断
909
+ - 从 GSD-2 `recovery.ts` 移植策略
910
+ - **AC**:`kill -9` 跑 dev 的 session,orchestrator 重启后能续(或按策略熔断)
911
+
912
+ **5.2 Circuit breaker**(0.5 天)
913
+ - `circuit-breaker` 表:per task 连续失败 ≥3 次 → 熔断 → 事件 + 警告
914
+ - **AC**:故意 make test 必失败,跑 3 次自动停止
915
+
916
+ **5.3 Task staleness**(0.5 天)
917
+ - events 表收到 `spec_changed(sections: [X])`:扫 tasks.trace_to 命中的
918
+ pending task → 设 `stale=true`
919
+ - 投影器更新 context md header 显示 "⚠️ stale since <ts>"
920
+ - **AC**:手动改 specs/product.md 后,pending task 被正确标 stale
921
+
922
+ **5.4 Runtime 自动路由(orchestrator daemon)**(1.5 天)
923
+ - `orchestrator/daemon.ts`:常驻监听 events 流,pending task 出现时按
924
+ `complexity_hint` + runtime 可用性分派
925
+ - 注意:**不是 dispatch rules**(那是 Phase 8B),只是最简单的按 tag /
926
+ runtime 选择
927
+ - **AC**:tasks.json 新增 pending → daemon 1s 内 spawn 对应 session
928
+
929
+ #### Phase 5 gate
930
+
931
+ - ✅ kill -9 恢复 + 熔断 + staleness 三组测试过
932
+ - ✅ daemon 自动分派可开关(opt-in via `settings.json` `orchestrator.auto_dispatch`)
933
+ - ✅ **Phase 5 完成 — D43**(2026-04-17)
934
+
935
+ **▶ v0.2 发布就绪点**:Phase 5 完工 → 半自动协作可能。用户可以起多个
936
+ agent 并行,orchestrator 负责 session 隔离和状态一致。
937
+
938
+ ---
939
+
940
+ ### Phase 6 — 监控与优化
941
+
942
+ **目标**:token 压缩、成本埋点、可观测性。让 agent 的"黑盒行为"变可见。
943
+
944
+ **前置**:Phase 5(session 是监控的归属单位)
945
+
946
+ **置信度**:93%(RTK 成熟;埋点是标准工程)
947
+
948
+ **工时**:3-4 天
949
+
950
+ #### 任务清单
951
+
952
+ **6.1 RTK 集成**(0.5 天)
953
+ - install.js 完工时检测 rtk 二进制 → 调 `rtk init -g` 注册 PreToolUse hook。
954
+ - 无 rtk → 提示安装 + 跳过(不硬依赖)。
955
+ - **AC**:Claude 下 `cargo test` 输出 token 压缩 60%+。
956
+
957
+ **6.2 Telemetry collectors**(1.5 天)
958
+ - `telemetry/collectors/token.ts`:从 activity-log + session log 抽 token
959
+ 使用量;按 task / session / runtime 聚合。
960
+ - `telemetry/collectors/tool-call.ts`:每次 MCP tool 调用 + 每次 CLI 调用
961
+ 打点。
962
+ - `telemetry/collectors/cost.ts`:按 runtime 的 pricing 推算。
963
+ - 写 `.ultra/telemetry/{date}.jsonl`。
964
+ - **AC**:跑一个完整 task 后,telemetry 含该 task 的 token / cost / tool
965
+ count。
966
+
967
+ **6.3 /ultra-status 深化**(1 天)
968
+ - 读 telemetry → 展示 "本周 token 消耗"、"每 runtime 成本分布"、"最贵的
969
+ task top 3"。
970
+ - **AC**:status 输出含 cost 面板。
971
+
972
+ **6.4 code-review-graph 实时增量 watcher**(2 天,**新增 D24**)
973
+ - 不是 "Phase 启动时 build";而是 daemon 模式:
974
+ - `orchestrator/code-graph-watcher.ts`:fs-watch 项目代码路径 +
975
+ debounce 500ms
976
+ - 每次 editor save / git commit → 增量 tree-sitter 解析 → 更新
977
+ `.code-review-graph/graph.db`
978
+ - 大改(>50 文件)触发后台 full rebuild,不阻塞 agent
979
+ - MCP tool `impact.*`(`impact.radius` / `impact.changes` /
980
+ `impact.dependents`)从最新 graph.db 查询
981
+ - agent session 启动时调 `impact.radius(target_files)` 获得最小必读集
982
+ - **AC**:editor save → graph.db ≤3s 更新(小改 ≤1s);impact.radius
983
+ 返回准确依赖集(10 文件项目的命中率 ≥95%)
984
+
985
+ **6.5 Runtime stdout 拦截(可选)**(1 天)
986
+ - orchestrator spawn agent 时拦截 stdout,解析 Anthropic/OpenAI/Gemini
987
+ SDK 的 usage 字段(若可达)。
988
+ - 更精准的 token 统计(不依赖 rtk 推测)。
989
+ - **AC**:对一个已知 token 数的 task 做 E2E,telemetry 与官方 usage 误差 <5%。
990
+
991
+ #### Phase 6 gate
992
+
993
+ - ✅ telemetry 覆盖率:每 MCP tool 调用 100% 有埋点(state.db.telemetry + jsonl 双写)
994
+ - ✅ `/ultra-status --cost` panel 数字可信(token → pricing 表 → cost_usd 推算;SDK usage 精确对账推迟 6.5)
995
+ - ✅ code-review-graph watcher 实时增量测试过(debounce + exclude + large_batch 6 tests)
996
+ - ⤼ 6.5 Runtime stdout 拦截按 PLAN 原文"可选"skip 至 v0.3+(YAGNI:RTK + pricing 估算对大多数场景已够)
997
+ - ✅ **Phase 6 完成 — D44**(2026-04-17)
998
+
999
+ ---
1000
+
1001
+ ### Phase 7 — 智能层(记忆 + tagged + skill 学习)
1002
+
1003
+ **目标**:引入**wrapper 式自动记忆 + tagged task 分区 + skill 自动萃取**,
1004
+ 让每 task 起步即有上下文,分支并发无混乱。
1005
+
1006
+ > 变更:原 Phase 7.1(code-review-graph)已移至 Phase 6.4(实时增量 watcher)。
1007
+ > 原 Phase 7.4(模型自适应路由)后移到 v0.2+(D27)。
1008
+ > 新增 Phase 7.2(Task Master tagged lists)(D26)。
1009
+ > hindsight 升级为 wrapper 式(D25)。
1010
+
1011
+ **前置**:Phase 6(监控 + 实时图谱)
1012
+
1013
+ **置信度**:80%(hindsight wrapper 自定义实现;tagged 迁移 schema)
1014
+
1015
+ **工时**:7-8 天
1016
+
1017
+ #### 任务清单
1018
+
1019
+ **7.1 Hindsight wrapper 式自动记忆**(3 天,**D25**)
1020
+ - 不仅暴露 `memory.retain` / `memory.recall` / `memory.reflect` 三个 MCP tool。
1021
+ - **Wrapper 自动化**:
1022
+ - session 结束 hook:自动从 session 的 events + transcript 中提取结构化
1023
+ 事实 → 自动 `memory.retain` 到 bank=project
1024
+ - session 启动前:自动 `memory.recall(query=当前 task title + 上下文)`
1025
+ → prefetch 到 session prompt 注入
1026
+ - 内嵌 hindsight-server(`HindsightServer` context manager),避免 Docker
1027
+ - **AC**:
1028
+ - 跑 3 个相关 task 后,第 4 个 task 起步自动 prefetch ≥2 条相关历史
1029
+ - MCP 显式调用也能用(兜底)
1030
+
1031
+ **7.2 Task Master tagged task lists**(2 天,**D26**)
1032
+ - tasks 表新增 `tag` 字段 + index
1033
+ - `/ultra-plan` 支持 `--tag <name>`;`/ultra-dev --tag` 限定任务列表
1034
+ - 分支并发场景:每 git branch 自动关联一个 tag(首次进入该分支时交互
1035
+ 创建)
1036
+ - MCP `task.list --tag X` / `task.switch_tag`
1037
+ - **AC**:在 branch `feat/auth` 下运行 `/ultra-dev` 只看到 auth tag 的任务
1038
+ 列表,切到 `feat/billing` 立刻切上下文
1039
+
1040
+ **7.3 Skill 自动萃取(OMC 模式)**(2 天)
1041
+ - session 结束 hook:分析 transcript → 提取"解决了什么非平凡问题" →
1042
+ 草稿为 `skills/learned/<id>_unverified.md`
1043
+ - 人审通过后去掉 `_unverified` 后缀
1044
+ - **AC**:跑 5 个包含 debugging 的 task 后,skills/learned/ 下生成 ≥3 个
1045
+ unverified skill
1046
+
1047
+ #### Phase 7 gate
1048
+
1049
+ - ✅ wrapper 自动 retain + prefetch smoke test 通过(AC:3 session → 第 4 个 prefetch ≥2 hit)
1050
+ - ✅ tagged task list 分支切换测试通过(branchScoped daemon + createTask 自动推导)
1051
+ - ✅ skill 萃取至少 3 条 unverified 产出(AC:5 mock session 里 3 signal + 2 empty → ≥3 draft)
1052
+ - ✅ **Phase 7 完成 — D46**(2026-04-17)
1053
+
1054
+ ---
1055
+
1056
+ ### Phase 8A — 计划自动化(planner 线)
1057
+
1058
+ **目标**:PRD → task 分解 → 依赖拓扑 → 自动 expand → **execution plan
1059
+ artifact** → human gate 批准。这是 "coding 工厂" 的**前端**(决定做什么 /
1060
+ 做的顺序 / 谁跟谁冲突 / 哪些能并行)。
1061
+
1062
+ **依据**:Codex Q4 + D22(拆分)+ Codex 第二轮 R5(artifact + 依赖软化)
1063
+
1064
+ **前置**:Phase 4.5(session 标准单元) + Phase 6(监控) — **Phase 7
1065
+ 是可选增强**(memory / complexity_hint 是加分项,不是正确性前置 **D34**)
1066
+
1067
+ **置信度**:88%(PRD 解析成熟;human gate 简单;依赖拓扑算法标准)
1068
+
1069
+ **工时**:4-5 天(原 3-4 天 + artifact 1 天)
1070
+
1071
+ #### 任务清单
1072
+
1073
+ **8A.1 PRD 自动拆 task(CTM 模式)**(2 天)
1074
+ - 新 MCP tool `task.parse_prd(prd_text)` → 返回 task[](ID、title、deps、
1075
+ complexity 预估、files_modified 预测)
1076
+ - 后端:调 Anthropic/OpenAI LLM(model 可配)
1077
+ - skill `ultra-plan` 新分支:"从 PRD 自动拆"
1078
+ - **AC**:给一份 2 KB PRD,产出的 tasks.json ≥80% 与人工拆分语义等价
1079
+
1080
+ **8A.2 Dependency graph + 拓扑**(1 天)
1081
+ - `task.dependency_topo` MCP tool:返回拓扑排序 + 可并行的 wave 分组
1082
+ - 循环检测:若有 cycle 直接报错
1083
+ - **AC**:环任务被拒绝;无环 tasks 输出正确 wave 分组
1084
+
1085
+ **8A.3 Auto-expand**(1 天)
1086
+ - `task.expand(task_id)` MCP tool:用 LLM 把 complexity ≥7 的 task 自动
1087
+ 拆 subtasks
1088
+ - 输出保留原 task 为 "parent",新增 subtasks 插入 tasks 表
1089
+ - Phase 7 的 `complexity_hint` 存在时精度更高;**不存在也能跑**(fallback
1090
+ 到 LLM 直接估)
1091
+ - **AC**:complexity=9 的 task 自动拆成 3-4 subtask;parent status 变
1092
+ "expanded"
1093
+
1094
+ **8A.4 Execution Plan artifact**(1 天,**新增 Codex R5**)
1095
+ - 生成 `.ultra/execution-plan.json`:
1096
+ ```jsonc
1097
+ {
1098
+ "waves": [
1099
+ { "id": 1, "tasks": [...], "parallel": true },
1100
+ { "id": 2, "tasks": [...], "parallel": false, "reason": "shared file X" }
1101
+ ],
1102
+ "ownership_forecast": { "task_1": ["src/auth.ts"], ... },
1103
+ "conflict_surface": [
1104
+ { "files": ["src/utils.ts"], "tasks": ["3", "7"], "recommend": "sequentialize" }
1105
+ ],
1106
+ "estimated_cost_usd": 2.4,
1107
+ "estimated_duration_min": 90
1108
+ }
1109
+ ```
1110
+ - 8B orchestrator 读此 artifact 做分派,不在运行时才判并发
1111
+ - MCP tool `plan.export` / `plan.get`
1112
+ - **AC**:一个有 5 task 的 tasks.json → artifact 含完整 waves + conflict
1113
+ 分析;人工审阅 ownership 预测与实际代码改动 ≥70% 一致
1114
+
1115
+ **8A.5 Human gate in /ultra-plan(OMX 模式)**(0.5 天)
1116
+ - 生成 execution-plan.json 后调 MCP `ask.question` 展示 plan 摘要 +
1117
+ estimated cost → 等用户 approve 才 commit 到 state-db
1118
+ - **AC**:plan 产出一个 `ask` 对话;用户 reject 时不写 state-db
1119
+
1120
+ #### Phase 8A gate
1121
+
1122
+ - PRD 解析准确率 ≥80%
1123
+ - 拓扑算法正确性(5 组 fixture 测试)
1124
+ - auto-expand 可开关
1125
+ - human gate 强制 gate
1126
+
1127
+ ---
1128
+
1129
+ ### Phase 8B — 执行自动化(executor 线)
1130
+
1131
+ **目标**:dispatch rules + 并行 orchestrator + worktree 并发 +
1132
+ files_modified 重叠检测 + 自动合并。这是 "coding 工厂" 的**后端**
1133
+ (怎么把 8A 的任务跑完)。
1134
+
1135
+ **依据**:Codex Q4 + D22
1136
+
1137
+ **前置**:Phase 8A(计划自动化提供队列输入)+ Phase 4.5(session 标准单元)
1138
+
1139
+ **置信度**:78%(GSD-2 模式移植量大;并发 worktree + merge back 是最高
1140
+ 风险点)
1141
+
1142
+ **工时**:5-6 天
1143
+
1144
+ #### 任务清单
1145
+
1146
+ **8B.1 DISPATCH_RULES 声明表(GSD-2 模式)**(2 天)
1147
+ - `orchestrator/dispatch-rules.ts`:数组化规则:
1148
+ ```ts
1149
+ {
1150
+ when: (ctx) => ctx.task.status === 'pending' && deps_ready(ctx),
1151
+ action: 'spawn_agent',
1152
+ runtime: select_runtime(ctx.complexity),
1153
+ }
1154
+ ```
1155
+ - 从 `gsd-2/src/resources/extensions/gsd/auto-dispatch.ts` 移植
1156
+ - 比 Phase 5.4 的"最简路由"强:规则可组合、可观测、可回放
1157
+ - **AC**:规则表能在不改代码的情况下调整分派行为;10 规则 fixture 测试
1158
+ 全绿
1159
+
1160
+ **8B.2 Parallel orchestrator**(2 天)
1161
+ - `orchestrator/parallel-orchestrator.ts`:多 session 并行,slice 级并发
1162
+ - 每 slice 检测 `files_modified` 重叠 → 重叠则串行(GSD 算法)
1163
+ - **AC**:10 个独立文件的 task 全部并行跑;2 个改同一文件的 task 自动
1164
+ 串行化
1165
+
1166
+ **8B.3 Worktree 并发管理**(1 天)
1167
+ - `orchestrator/worktree-manager.ts`:每并发 slice 创建独立 git worktree
1168
+ (Phase 4.5 已有单 session worktree;此处是 N 并发 worktree 调度)
1169
+ - session 结束后清理 worktree
1170
+ - **AC**:3 slice 并发独立 worktree;`git branch` 互不干扰;`.git/config.lock`
1171
+ 不竞争
1172
+
1173
+ **8B.4 Auto-merge back**(1 天)
1174
+ - session.close 时:
1175
+ - 检查 files_modified 与主分支最新状态是否冲突
1176
+ - 无冲突 → 自动 merge;有冲突 → 标记事件 `merge_conflict` 等人
1177
+ - **AC**:3 slice 各改独立文件 → 自动全部 merge;2 slice 改同文件 →
1178
+ 一个 merge 一个等
1179
+
1180
+ #### Phase 8B gate
1181
+
1182
+ - 跑一个 10-task PRD(8A 产出)→ 8B 自动完成率 ≥80%
1183
+ - 并发 worktree 压力测试:5 slice 同时跑无 git 锁冲突
1184
+ - merge back 冲突被正确识别
1185
+
1186
+ **▶ v0.3 完工 = 自动化 coding 工厂可用**(8A+8B 合并里程碑)。
1187
+
1188
+ ---
1189
+
1190
+ ### Phase 9 — 发布
1191
+
1192
+ **目标**:三渠道上架;CI 矩阵绿;README 重写。
1193
+
1194
+ **前置**:Phase 8
1195
+
1196
+ **置信度**:97%(发布流水线是标准工程)
1197
+
1198
+ **工时**:2-3 天
1199
+
1200
+ #### 任务清单
1201
+
1202
+ **9.1 CI 矩阵**(1 天)
1203
+ - GitHub Actions:`{claude, opencode, codex, gemini} × {local, global}`
1204
+ = 8 jobs + `rtk / code-review-graph / hindsight` 可选集成测试。
1205
+ - **AC**:所有矩阵单元绿,每周定时跑一次(catch runtime 上游变更)。
1206
+
1207
+ **9.2 README 重写**(0.5 天)
1208
+ - 从 57 KB 旧 Hermes 文档 → 8 KB CLI README:
1209
+ - 一张 30 秒 demo gif
1210
+ - 四 runtime quickstart
1211
+ - skill/MCP/CLI 三层速查表
1212
+ - 功能矩阵(哪 runtime 支持什么)
1213
+ - troubleshooting
1214
+ - 旧内容搬 `docs/LEGACY-HERMES.md`。
1215
+
1216
+ **9.3 发布流水线**(1 天)
1217
+ - **npm**:tag 触发 `npm publish`。
1218
+ - **Homebrew**:`rocky2431/homebrew-tap`,formula + action 自动同步。
1219
+ - **pip**:瘦 wrapper 包 `ultra-builder-pro` on PyPI;shell out 到 npx。
1220
+ - **AC**:三渠道安装同一 commit SHA;新 macOS 60 秒装完。
1221
+
1222
+ **9.4 CHANGELOG + release notes**(0.5 天)
1223
+ - v0.1.0 / v0.2.0 / v0.3.0 / v1.0.0 分别记录 Phase 0-4 / 5-6 / 7-8 / 9 的
1224
+ 增量。
1225
+ - 每版写"known issues"清单。
1226
+
1227
+ #### Phase 9 gate
1228
+
1229
+ - 三渠道 live;`brew install rocky2431/tap/ultra-builder-pro-cli` 能装
1230
+ - `pip install ultra-builder-pro` 能装
1231
+ - `npx ultra-builder-pro-cli@latest` 能装
1232
+
1233
+ ---
1234
+
1235
+ ## 7. 跨 Phase 契约(核心接口)
1236
+
1237
+ ### 7.1 `.ultra/state.db` SQLite schema(Phase 2 权威源)
1238
+
1239
+ ```sql
1240
+ -- tasks 表(权威 task 状态)
1241
+ CREATE TABLE tasks (
1242
+ id TEXT PRIMARY KEY,
1243
+ title TEXT NOT NULL,
1244
+ type TEXT, -- architecture|feature|bugfix
1245
+ priority TEXT, -- P0-P3
1246
+ complexity INTEGER, -- 1-10
1247
+ status TEXT NOT NULL, -- pending|in_progress|completed|blocked|expanded
1248
+ deps JSON, -- [task_id]
1249
+ files_modified JSON, -- [path] (Phase 8B 并发检测)
1250
+ session_id TEXT, -- 当前执行方(Phase 4.5)
1251
+ stale BOOLEAN DEFAULT 0, -- spec 改动标记(Phase 5.3)
1252
+ complexity_hint TEXT, -- low|medium|high(Phase 7)
1253
+ tag TEXT, -- Phase 7.2 分支分区
1254
+ trace_to TEXT, -- spec 引用
1255
+ context_file TEXT, -- 投影文件路径
1256
+ completion_commit TEXT, -- Phase 2.6 hash 回填
1257
+ created_at TIMESTAMP,
1258
+ updated_at TIMESTAMP
1259
+ );
1260
+
1261
+ -- events 表(append-only 事件流;id 作为 subscribe 游标,D31)
1262
+ CREATE TABLE events (
1263
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- 单调递增,订阅用 since_id=N
1264
+ ts TIMESTAMP NOT NULL,
1265
+ type TEXT NOT NULL, -- task_started|task_completed|spec_changed|...
1266
+ task_id TEXT,
1267
+ session_id TEXT,
1268
+ runtime TEXT,
1269
+ payload_json JSON
1270
+ );
1271
+ CREATE INDEX events_ts_type ON events(ts, type);
1272
+ CREATE INDEX events_task ON events(task_id, id);
1273
+
1274
+ -- sessions 表(执行单元 — 权威 lease/heartbeat,D32;不再有 lease.json 文件)
1275
+ CREATE TABLE sessions (
1276
+ sid TEXT PRIMARY KEY,
1277
+ task_id TEXT,
1278
+ runtime TEXT, -- claude|opencode|codex|gemini
1279
+ pid INTEGER,
1280
+ worktree_path TEXT,
1281
+ artifact_dir TEXT,
1282
+ status TEXT, -- running|completed|crashed|orphan
1283
+ lease_expires_at TIMESTAMP,
1284
+ heartbeat_at TIMESTAMP,
1285
+ started_at TIMESTAMP
1286
+ );
1287
+ CREATE INDEX sessions_active ON sessions(status, task_id);
1288
+
1289
+ -- schema_version 表(D30/R4:跨版本误读防护)
1290
+ CREATE TABLE schema_version (
1291
+ version TEXT PRIMARY KEY, -- '4.5', '5.0', ...
1292
+ applied_at TIMESTAMP NOT NULL,
1293
+ description TEXT
1294
+ );
1295
+
1296
+ -- migration_history 表(D30/R4:迁移审计)
1297
+ CREATE TABLE migration_history (
1298
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
1299
+ from_version TEXT,
1300
+ to_version TEXT,
1301
+ direction TEXT, -- forward|rollback
1302
+ ts TIMESTAMP NOT NULL,
1303
+ status TEXT, -- success|failed|dry_run
1304
+ notes TEXT
1305
+ );
1306
+
1307
+ -- telemetry 表(监控)
1308
+ CREATE TABLE telemetry (
1309
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
1310
+ session_id TEXT,
1311
+ event_type TEXT, -- tool_call|token_usage|cost
1312
+ tokens_input INTEGER,
1313
+ tokens_output INTEGER,
1314
+ tool_name TEXT,
1315
+ cost_usd REAL,
1316
+ ts TIMESTAMP
1317
+ );
1318
+
1319
+ -- specs_refs 表(spec 变更追踪)
1320
+ CREATE TABLE specs_refs (
1321
+ spec_file TEXT,
1322
+ section TEXT,
1323
+ anchor TEXT,
1324
+ last_modified_at TIMESTAMP,
1325
+ PRIMARY KEY (spec_file, section)
1326
+ );
1327
+
1328
+ PRAGMA journal_mode=WAL;
1329
+ PRAGMA synchronous=NORMAL;
1330
+ PRAGMA busy_timeout=5000; -- 多进程访问容忍(R4.1)
1331
+ ```
1332
+
1333
+ **投影(projection)**:
1334
+ - `.ultra/tasks/tasks.json` 由 `tasks` 表再生成(v4.5 过渡保留;Codex 第二
1335
+ 轮 R1 指出:v4.5 是过渡期名称,不是 v5)
1336
+ - `.ultra/tasks/contexts/task-*.md` 的 Status header 由 `tasks.status` 派生
1337
+ - `.ultra/activity-log.json`(可选 JSONL 导出)由 `events` 表 dump
1338
+
1339
+ **权威路径**:所有读写走 MCP `task.*` / `session.*` / `memory.*` tool →
1340
+ state-db。手工改 JSON/MD **不生效**(投影覆盖)。
1341
+
1342
+ **无双源原则(D32)**:
1343
+ - lease / heartbeat **只在 `sessions` 表**(不再有 `lease.json` 文件)
1344
+ - activity-log **只在 `events` 表**(JSONL 导出是只读 snapshot)
1345
+ - 任何新模块引入 `.ultra/` 下新文件前,先检查是否可用既有表 + 字段表达
1346
+
1347
+ ### 7.2 `events` 表事件类型枚举
1348
+
1349
+ ```
1350
+ -- 状态生命周期
1351
+ task_created / task_started / task_completed / task_failed / task_blocked
1352
+ task_expanded / task_stale_marked
1353
+
1354
+ -- 会话生命周期
1355
+ session_spawned / session_closed / session_crashed / session_orphaned
1356
+ session_heartbeat_lost
1357
+
1358
+ -- spec / 内容变更
1359
+ spec_changed / context_updated / plan_approved
1360
+
1361
+ -- 外部动作
1362
+ commit_pushed / review_verdict / merge_conflict / auto_merged
1363
+
1364
+ -- 监控
1365
+ cost_alert / token_alert / circuit_open
1366
+ ```
1367
+
1368
+ ### 7.3 MCP tool 命名约定(Phase 1 `spec/mcp-tools.yaml`)
1369
+
1370
+ `{family}.{verb}`:
1371
+ - `task.create / update / list / get / delete / expand / parse_prd / dependency_topo / append_event / subscribe_events`
1372
+ - `memory.retain / recall / reflect`
1373
+ - `review.run / verdict`
1374
+ - `impact.radius / changes / dependents`
1375
+ - `skill.resolve / skill.manifest`(**只读**;Codex 第二轮 R2/D29 —
1376
+ 删除 `skill.invoke / list`,skill 由命令薄壳 + agent 读 SKILL.md
1377
+ 完成,不做业务 RPC)
1378
+ - `session.spawn / close / get / admission_check / heartbeat / subscribe_events`
1379
+ - `ask.question / menu`
1380
+ - `plan.export / plan.get`(8A 新增,execution-plan artifact)
1381
+
1382
+ ### 7.4 Phase 依赖显式图(v0.3)
1383
+
1384
+ ```
1385
+ Phase 0 (done)
1386
+ │
1387
+ ▼
1388
+ Phase 1 (三层接口定义)
1389
+ │
1390
+ ▼
1391
+ Phase 2 (权威状态层 SQLite)
1392
+ │
1393
+ ▼
1394
+ Phase 3 (命令规则化)
1395
+ │
1396
+ ▼
1397
+ Phase 4 (跨 runtime 分发 + 4.6 capability matrix)
1398
+ │
1399
+ ▼
1400
+ Phase 4.5 (execution-lite: session + event subscribe + status)
1401
+ │
1402
+ └─────────────────────────▶ v0.1 RELEASE(规则层 + execution-lite)
1403
+ │
1404
+ ▼
1405
+ Phase 5 (执行层进阶: recovery + staleness + 自动路由)
1406
+ │
1407
+ ▼
1408
+ Phase 6 (监控 + code-review-graph 实时 watcher)
1409
+ │
1410
+ └─────────────────────────▶ v0.2 RELEASE(半自动 + 监控)
1411
+ │
1412
+ ▼
1413
+ Phase 7 (hindsight wrapper + tagged lists + skill 萃取)
1414
+ │
1415
+ ▼
1416
+ Phase 8A (计划自动化: PRD → topo → expand → human gate)
1417
+ │
1418
+ ▼
1419
+ Phase 8B (执行自动化: dispatch rules + parallel worktree + merge)
1420
+ │
1421
+ └─────────────────────────▶ v0.3 RELEASE(自动化 coding 工厂)
1422
+ │
1423
+ ▼
1424
+ Phase 9 (发布: npm + Homebrew + pip)
1425
+ │
1426
+ └─────────────────────────▶ v1.0 RELEASE
1427
+ ```
1428
+
1429
+ **依赖性**:
1430
+ - 同 Phase 内任务可并行
1431
+ - 跨 Phase 严格串行
1432
+ - **例外**:Phase 8B 依赖 **Phase 8A + Phase 4.5**(两个前置)
1433
+
1434
+ ---
1435
+
1436
+ ## 8. 测试策略
1437
+
1438
+ | 层 | 框架 | 覆盖目标 | Phase |
1439
+ |---|---|---|---|
1440
+ | spec schema fixtures | `ajv` + sqlite CLI | 合法 + 非法 fixture 各 ≥1 | 1 |
1441
+ | SQLite 并发写 | node:test + 20-worker 压力脚本 | 并发无丢失、事务回滚正确 | 2 |
1442
+ | migration v4.4→v4.5→rollback | node:test + tmp fixture 项目 | 双向无损 | 2 |
1443
+ | 投影器响应时间 | fs-watch + 时间采样 | ≤1s | 2 |
1444
+ | MCP tool 契约 | fixture → tool → 期望 state-db 变化 | 100% tool 契约测试 | 3 |
1445
+ | adapter install / uninstall | shell E2E with tmp dir | 每 runtime diff-equal | 4 |
1446
+ | **conformance tests** | **per-runtime E2E (mocked CLI binary 兜底)** | **4 runtime × 5 能力全绿** | **4.6** |
1447
+ | session isolation | kill -9 lease 过期测试 + 2 并发独立 worktree | 无数据腐败 | 4.5 |
1448
+ | event subscribe latency | fixture 发事件 + 订阅端时间采样 | ≤1s | 4.5 |
1449
+ | recovery + circuit breaker | 故意 kill / 故意 fail 3 次 | 正确续 / 正确熔断 | 5 |
1450
+ | telemetry 准确性 | 对照官方 SDK usage | 误差 <5% | 6 |
1451
+ | code-review-graph 增量 | editor save 时间采样 | ≤3s 更新 | 6.4 |
1452
+ | hindsight wrapper 自动化 | 跑 3 task → 第 4 task 起步 prefetch | ≥2 条相关 | 7.1 |
1453
+ | tagged task list 切换 | git branch 切换 + task.list | 上下文隔离 | 7.2 |
1454
+ | PRD 拆 task | 人工 vs 自动语义对比 | ≥80% 一致 | 8A |
1455
+ | 并发 worktree | 5 slice 并发 | 无 git 锁冲突 | 8B |
1456
+ | merge back 冲突检测 | 2 slice 改同文件 | 一 merge 一 等 | 8B |
1457
+ | 发布矩阵 | GHA 8-job 矩阵 | 全绿 | 9 |
1458
+
1459
+ ---
1460
+
1461
+ ## 9. 风险与对策
1462
+
1463
+ 继承 v0.2 PLAN 的 R1-R20(见 git 历史),v0.3 新增 R21-R24:
1464
+
1465
+ | ID | 风险 | 概率 | 影响 | 对策 | Owner |
1466
+ |----|------|------|------|------|-------|
1467
+ | R15 | MCP server stdio 在部分 runtime 有 buffer 问题(Windows/WSL) | 中 | 中 | 首版仅 macOS/Linux;Windows 加明确警告 | Phase 4 |
1468
+ | R16 | hindsight 内嵌 server 启动慢 → orchestrator 首次延迟 | 中 | 低 | 首次启动后 fork 常驻;健康检查 + 预热 | Phase 7 |
1469
+ | R17 | code-review-graph 大仓库首次 build > 2min | 中 | 低 | 后台构建 + UI "构建中" 提示;Phase 8 并发前必 build 完 | Phase 6 |
1470
+ | R18 | orchestrator daemon 崩溃但 session 还在跑 | 低 | 高 | session 自带 heartbeat;lease 过期 5 min 无心跳 → 自动清理 + 标记 orphan | Phase 5 |
1471
+ | R19 | 三层 schema 不同步(Phase 1 后各 Phase 漂移) | 中 | 高 | 单源生成脚本:`spec/mcp-tools.yaml` → TypeScript 类型 + skill frontmatter 校验 + CLI 参数解析 | Phase 1 |
1472
+ | R20 | v0.2 执行层复杂度爆炸 → v0.1 发布延迟 | 高 | 高 | 严格分阶段发布:Phase 0-4.5 完就发 v0.1 | 整体 |
1473
+ | **R21** | **SQLite WAL 模式在 NFS / SMB / Docker mount 不可靠** | 中 | 高 | 首版仅本地文件系统;`.ultra` 在网络盘时给警告;fallback 到 DELETE 模式(降级并发能力)| Phase 2 |
1474
+ | **R22** | **v4.4 → v4.5 migration 在异常项目上失败**(已有 context 文件手改过 / 字段缺失 / 编码问题) | 中 | 中 | migration 前自动备份;跑 dry-run 模式;手动修复 path 可选;跑错可 rollback | Phase 2.3 |
1475
+ | **R23** | **conformance tests 基础设施投入过重** | 中 | 中 | 用 mock runtime 二进制覆盖 CI;真 runtime 只在 release 前跑一次;不阻塞日常 PR | Phase 4.6 |
1476
+ | **R24** | **Phase 4.5 execution-lite 把 v0.1 工期从 5 周推到 8 周** | **高** | **中** | 接受(D19 已决);作为 v0.1 的最大价值点;任何 Phase 5+ 的滑动不影响 v0.1 | Phase 4.5 |
1477
+ | **R25** | **多进程(MCP/CLI/orchestrator)同时写 state.db 引发 `database is locked`**(Codex R2 第二轮 R4.1) | 中 | 高 | `docs/STATE-DB-ACCESS-POLICY.md` 定义单 writer 角色;`BEGIN IMMEDIATE` + `busy_timeout=5000` + 3 次重试;3 进程并发压测 | Phase 2.2 |
1478
+ | **R26** | **events 订阅用 `max(ts)` 在同 ms 多事件下漏事件**(Codex R4) | 中 | 高 | 改用 `events.id AUTOINCREMENT` 单调游标;`subscribe_events(since_id=N)` 接口;D31 | Phase 2.3 |
1479
+ | **R27** | **缺 schema_version / migration_history → 跨版本误读 / 迁移无审计**(Codex R4) | 低 | 高 | Phase 2.1 schema 直接含两表;每次 migration 写一条记录;D30 | Phase 2.1 |
1480
+ | **R28** | **缺 WAL checkpoint / VACUUM / integrity_check / 在线备份**(Codex R4) | 中 | 中 | `ultra-tools db checkpoint/vacuum/integrity/backup` 四子命令;orchestrator 定时任务每 24h/7d | Phase 2.5 |
1481
+ | **R29** | **sessions 表 + lease.json/heartbeat 文件双源**(Codex R1 / R4) | 中 | 高 | lease/heartbeat 只在 `sessions` 表字段;`.ultra/sessions/<sid>/` 只存 artifact;D32 | Phase 4.5.1 |
1482
+ | **R30** | **同 task 并发 spawn → 双开**(Codex R3) | 中 | 高 | `session.admission_check` 强制前置;三策略 takeover/resume/abandon;D33 single-active-lease | Phase 4.5.2 |
1483
+ | **R31** | **8A 未产出可审计 artifact,8B 运行时才判并发 → 决策过晚**(Codex R5) | 中 | 中 | 8A.4 产 `.ultra/execution-plan.json`(waves + ownership + conflict);8B 读此文件分派;D34 | Phase 8A.4 |
1484
+ | **R32** | **4.6 full conformance 作为 v0.1 gate → runtime 兼容实验室先于核心价值**(Codex R6) | 中 | 中 | 拆 4.6a(v0.1:smoke flow 每 runtime 1-2 条)+ 4.6b(v0.2:full 20 testcase + 周跑);D35 | Phase 4.6a/b |
1485
+
1486
+ ---
1487
+
1488
+ ## 10. 置信度拆分
1489
+
1490
+ | Phase | 工作 | 置信度 | 降低原因 |
1491
+ |-------|------|-------:|---------|
1492
+ | 0 | 骨架 | 100% | 已完成 |
1493
+ | 1 | 三层接口定义 | 95% | 纯设计;R19 单源生成减分 |
1494
+ | 2 | **权威状态层(SQLite + WAL + 多进程策略 + migration + 运维)** | **90%** | 下调自 92%;R25/R26/R27/R28 加五类新投入 |
1495
+ | 3 | 命令规则化(9 命令薄壳化) | 90% | 状态源统一后反而简化 |
1496
+ | 4 | 跨 runtime 分发 | 86% | hook schema 不公开(R1/R10-R14) |
1497
+ | **4.5** | **Execution-lite(session + admission + event + status)** | **84%** | 上调自 82%;admission control(R30)降低并发歧义;lease 权威单源化(R29) |
1498
+ | 4.6a | v0.1 smoke flow + capability matrix | 92% | gate 降级;仅 8 testcase |
1499
+ | 4.6b | Full conformance suite(v0.2) | 85% | 完整 20 testcase + 周跑 |
1500
+ | 5 | 执行层进阶(recovery + staleness + 自动路由) | 85% | 规模减小;R18 心跳 |
1501
+ | 6 | 监控 + code-review-graph 实时增量 | 88% | fs-watch 增量比启动 build 复杂 |
1502
+ | 7 | 智能层(hindsight wrapper + tagged + skill 萃取) | 80% | hindsight wrapper 自定义;tagged schema 迁移 |
1503
+ | 8A | 计划自动化(parse/topo/expand + **artifact** + human gate) | 86% | 下调自 88%;新增 artifact +1 天;但 8B 并发更稳 |
1504
+ | 8B | 执行自动化(dispatch/parallel/worktree/merge) | 80% | 上调自 78%;8A 的 artifact 降低运行时决策歧义 |
1505
+ | 9 | 发布 | 97% | 三渠道标准 |
1506
+ | **综合** | | **86%** | v0.3.1 与 v0.3 综合持平;Phase 2 下调被 4.5 + 8A/8B 上调抵消 |
1507
+
1508
+ **残差 14%**(加权):
1509
+ - 4% = 4 runtime hook schema 不公开(Phase 4/R1/R10-R14)
1510
+ - 3% = session 管理生产稳定性(Phase 4.5/5 / R18/R29/R30)
1511
+ - 3% = SQLite 运维(R21/R25/R28)
1512
+ - 2% = hindsight wrapper 召回质量(Phase 7.1)
1513
+ - 3% = 并发 merge back 复杂度(Phase 8B)
1514
+
1515
+ ---
1516
+
1517
+ ## 11. 时间线(14-18 周,Codex 第一轮 Q9 + 第二轮 R6 修订)
1518
+
1519
+ ```
1520
+ Week 1 Phase 1 三层接口定义(含 skill.resolve/manifest 精简 D29)
1521
+ Week 2-3 Phase 2 权威状态层
1522
+ (SQLite + schema_version + migration + 运维四子命令)
1523
+ Week 4-5 Phase 3 命令规则化(9 命令薄壳化)
1524
+ Week 6-7 Phase 4 跨 runtime 分发 + 4.6a v0.1 smoke flow
1525
+ Week 8 Phase 4.5 execution-lite(含 admission control D33)
1526
+ ──────────── v0.1 RELEASE ────────────
1527
+ Week 9-10 Phase 5 执行层进阶
1528
+ Week 10 Phase 4.6b full conformance suite(并行跑)
1529
+ Week 11 Phase 6 监控 + code-review-graph 实时 watcher
1530
+ ──────────── v0.2 RELEASE ────────────
1531
+ Week 12-13 Phase 7 智能层(hindsight wrapper + tagged + skill 萃取)
1532
+ Week 14 Phase 8A 计划自动化(含 execution-plan artifact D34)
1533
+ Week 15-16 Phase 8B 执行自动化
1534
+ ──────────── v0.3 RELEASE ────────────
1535
+ Week 17 Phase 9 发布流水线(npm + Homebrew + pip)
1536
+ ──────────── v1.0 RELEASE ────────────
1537
+ Week 18 buffer(ship 中任何 Phase 的 25% 滑动吃掉)
1538
+ ```
1539
+
1540
+ **关键里程碑**(可独立对外交付):
1541
+ - **Week 8 · v0.1**:规则层 + 独立会话隔离 + single-active-lease +
1542
+ 活跃会话可见(用户最核心诉求完整落地)
1543
+ - **Week 11 · v0.2**:自动恢复 + 监控 + 实时图谱 + full conformance
1544
+ (半自动协作)
1545
+ - **Week 16 · v0.3**:PRD → execution-plan artifact → 自动并行分派 /
1546
+ 合并(coding 工厂)
1547
+ - **Week 17-18 · v1.0**:三渠道发布
1548
+
1549
+ **总工时**:14-18 周 AI 协助,~300-400 工时。
1550
+
1551
+ **关键里程碑**:
1552
+ - v0.1(Week 5):规则层可用 — 跨 runtime 手动跑
1553
+ - v0.2(Week 8):半自动 — session 隔离 + 监控
1554
+ - v0.3(Week 12):自动工厂 — PRD → task → 并行
1555
+ - v1.0(Week 13):三渠道发布
1556
+
1557
+ **slack buffer**:Phase 5 / 7 / 8 各 25% 保险;如 hook spike 失败追加 2-3
1558
+ 天。
1559
+
1560
+ ---
1561
+
1562
+ ## 12. 成功度量(v1.0 发布时核查)
1563
+
1564
+ 1. **多 runtime 可用**:4 runtime × 2 scope = 8 安装路径全绿。
1565
+ 2. **并发无损**:20-worker 压力测试对 tasks.json 无丢更新。
1566
+ 3. **独立会话**:两 agent 同跑 `/ultra-dev 1` 和 `/ultra-dev 2`,互不污染,
1567
+ 最终 commit 独立。
1568
+ 4. **事件传播**:agent A 完成 task 1 后,≤1s 内 agent B 通过 MCP 看到。
1569
+ 5. **崩溃恢复**:kill -9 跑 dev 的 agent,重启后能续或熔断。
1570
+ 6. **Token 压缩**:RTK 启用后 Bash 命令 token 减少 ≥60%。
1571
+ 7. **记忆召回**:跨 session retain → recall 命中率 ≥90%。
1572
+ 8. **PRD 自动拆**:2KB PRD 自动拆与人工 ≥80% 一致。
1573
+ 9. **并行工厂**:10 task PRD 自动完成率 ≥80%。
1574
+ 10. **隐私**:三渠道 tarball / bottle / wheel 无私人数据。
1575
+
1576
+ ---
1577
+
1578
+ ## 13. v0.2+ 范围外
1579
+
1580
+ | 条目 | 工时 | 延后理由 |
1581
+ |------|------|----------|
1582
+ | Copilot / Cursor / Windsurf / Augment / Trae / Qwen / CodeBuddy / Cline / Antigravity / Kilo 10 个 runtime | 各 2-3 天 | 长尾;v1.0 后按用户需求加 |
1583
+ | Web 仪表盘 / TUI | 2+ 周 | CLI 是分发工具不是宿主 |
1584
+ | LLM provider 抽象层 | 1 周 | runtime 自己管;我们不重造 |
1585
+ | 团队协作服务端(共享 memory/graph) | 3-4 周 | 单机 pgvector 够用;服务端是 enterprise SKU |
1586
+ | Plugin 市场 / marketplace 集成 | 1 周 | Claude 特色;等其它 runtime 做了再跟 |
1587
+
1588
+ ---
1589
+
1590
+ ## 14. 决策日志
1591
+
1592
+ | # | 日期 | 决策 | 证据 |
1593
+ |---|------|------|------|
1594
+ | D1 | 2026-04-17 | 分发-adapter 路线(不自建 agent) | 用户选;get-shit-done 14 runtime 验证 |
1595
+ | D2 | 2026-04-17 | 首发 runtime:Claude + OpenCode + Codex + Gemini | 用户选 |
1596
+ | D3 | 2026-04-17 | 包名 `ultra-builder-pro-cli`,短名 `ubp` | 用户选 |
1597
+ | D4 | 2026-04-17 | 发布渠道:npm + Homebrew + pip | 用户选 |
1598
+ | D5 | 2026-04-17 | 销毁旧 git,main 重建 | 用户选;历史存 bundle |
1599
+ | D6 | 2026-04-17 | hook 沿用 Python,Node shell out | 重写 Node 无价值 |
1600
+ | D7 | 2026-04-17 | 配置合并用哨兵块 + manifest | 比文本重写安全 |
1601
+ | D8 | 2026-04-17 | settings.json 精简为最小合并模板 | 隐私安全 |
1602
+ | D9 | 2026-04-17 | README 改写延 Phase 9 | 不阻塞开发 |
1603
+ | D10 | 2026-04-17 | `hooks/tests/` 不入 npm tarball | 包体精简 |
1604
+ | D11 | 2026-04-17 | 基于官方文档重做 §5 + Phase 2/3 + §9 + §10 | [OpenCode Commands](https://opencode.ai/docs/commands/) · [OpenCode Agents](https://opencode.ai/docs/agents/) · [OpenCode Config](https://opencode.ai/docs/config/) · [Codex Config Reference](https://developers.openai.com/codex/config-reference) · [Codex Agent Skills](https://developers.openai.com/codex/skills) · [Gemini Custom Commands](https://github.com/google-gemini/gemini-cli/blob/main/docs/cli/custom-commands.md) · [Gemini Extensions](https://github.com/google-gemini/gemini-cli/blob/main/docs/extensions/reference.md) · [Claude Code Hooks](https://code.claude.com/docs/en/hooks) · [Claude Code Sub-agents](https://code.claude.com/docs/en/sub-agents) |
1605
+ | **D12** | **2026-04-17** | **采用 skill + MCP + CLI 三层架构**,skill=说明书、MCP=状态操作主路径、CLI=Bash 兜底 | 参考 CTM(MCP 模式)+ OMC/OMX(skill 模式)+ get-shit-done(CLI 模式);三层分工覆盖 "knowledge / state / hook" 三类需求 |
1606
+ | **D13** | **2026-04-17** | **规则层 / 执行层双时间线交付**(Phase 1-4 规则层 → v0.1;Phase 5-8 执行层 → v0.2-v0.3) | 用户明确"规则 vs 自动化执行"的维度;降低单次发布复杂度;早让用户拿到可用价值 |
1607
+ | **D14** | **2026-04-17** | **范围从"分发器"扩展到"自动化 coding 工厂"**,总工时从 4-5 周扩到 11-13 周 | 用户诉求:跨 agent 上下文共享 + 独立对话避污染 + 监控 + 实时代码图 + 记忆系统;不只是 distribution tool |
1608
+ | **D15** | **2026-04-17** | 集成 RTK / code-review-graph / hindsight 作为 **MCP tool 包装**(不自建等价) | 三者都 MIT + MCP 友好;自建等价 = 4-8 周纯折腾无价值 |
1609
+ | **D16** | **2026-04-17** | GSD / GSD-2 的 **atomic-write / state-machine / ctx.newSession / DISPATCH_RULES** 直接移植(不自建) | 已在 14 runtime 实战;用户确认"可以先集成,混合" |
1610
+ | **D17** | **2026-04-17** | Phase 3 消除 **tasks.json 与 context 的 status 双写**(原 v4.4 → v5.0,**后被 D21 覆盖为 v4.5 过渡**) | 用户指痛点"异步效果不好"根因之一 |
1611
+ | **D18** | **2026-04-17** | **权威状态层 = `.ultra/state.db` SQLite + WAL**,md/json 降级为投影/导出视图 | Codex Q1:多主写入是最大架构风险;SQLite 提供事务 + 并发读;tasks.json/activity-log/sessions/workflow-state 多文件各管一摊易炸 |
1612
+ | **D19** | **2026-04-17** | **v0.1 带 execution-lite**(session + event subscribe + 活跃会话可见),不裸发规则层 | Codex Q3:用户核心诉求是"独立会话不污染",规则层没 session 不算解决问题;新增 Phase 4.5 |
1613
+ | **D20** | **2026-04-17** | **Session 标准单元 = 新进程 + 独立 worktree + lease/heartbeat + artifact dir**;`ctx.newSession()` 仅作 Claude/GSD-2 适配优化 | Codex Q7:跨 4 runtime 通用定义;systemd/launchd 过重;单纯复用 Claude 会话切换不够 |
1614
+ | **D21** | **2026-04-17** | **Schema v4.4 → v4.5 过渡**(tasks.json 成 authoritative view + context status 降级派生 + 停止手写保留读兼容),不直接 v5 breaking(覆盖 D17) | Codex Q5:直接 breaking 迁移风险大;过渡期让老代码还能读;等命令全迁完再物理删除字段 |
1615
+ | **D22** | **2026-04-17** | **Phase 8 拆 8A(计划自动化)+ 8B(执行自动化)** | Codex Q4:现在绑太死;分开后 8A 可先交付 v0.3 早期内测,8B 晚些跟上 |
1616
+ | **D23** | **2026-04-17** | **Phase 4 新增 4.6 Runtime capability matrix + conformance tests** | Codex Q8:同一 skill 文本 + 同名 MCP tool ≠ 一致行为;4 runtime 在权限 / hook / subagent / usage 不等价 |
1617
+ | **D24** | **2026-04-17** | **code-review-graph 实时增量 watcher**(fs-watch + tree-sitter),不是启动时 build;移到 Phase 6.4 | Codex Q6:实时反馈给 agent 才有价值;用户原话"需要做到实时的变更,能够及时的反馈给到 agent,而不是改完填坑" |
1618
+ | **D25** | **2026-04-17** | **hindsight 用法升级为 wrapper 式自动记忆**(session 结束自动 retain + session 启动自动 prefetch),不仅是显式 MCP retain/recall | Codex Q6:hindsight 强项是 wrapper,agent 不需要手工调 |
1619
+ | **D26** | **2026-04-17** | **Phase 7 新增 Task Master tagged task lists**(per git branch 上下文分区) | Codex Q6:分支并发场景没有 tagged 会 context 混乱 |
1620
+ | **D27** | **2026-04-17** | **模型自适应路由(原 Phase 7.4)后移到 v0.2+** | Codex Q10:v0.3 前不紧;Phase 7 已经重 |
1621
+ | **D28** | **2026-04-17** | **总工期 11-13 周 → 14-18 周** | Codex Q9:4 runtime 兼容 + session/recovery + 并发 worktree + 外部工具整合会吞大量集成调试时间 |
1622
+ | **D29** | **2026-04-17** | **`skill.*` 收缩为只读 `skill.resolve` / `skill.manifest`**,删除 `skill.invoke / list` | Codex 第二轮 R2:skill 是知识载体不做业务 RPC;保留三层但砍凑层接口;用户批准 |
1623
+ | **D30** | **2026-04-17** | **state.db 新增 `schema_version` + `migration_history` 表** | Codex 第二轮 R4:跨版本误读防护 + migration 审计;R27 |
1624
+ | **D31** | **2026-04-17** | **events 订阅用 `events.id` AUTOINCREMENT 单调游标**,不用 `max(ts)` | Codex 第二轮 R4:同 ms 多事件会漏事件;R26 |
1625
+ | **D32** | **2026-04-17** | **lease / heartbeat 只在 `sessions` 表**(不再有 lease.json 文件);`.ultra/sessions/<sid>/` 只存 artifact | Codex 第二轮 R1 + R4:file + db 双源是新风险;R29 |
1626
+ | **D33** | **2026-04-17** | **Phase 4.5 新增 single-active-lease admission control**(takeover/resume/abandon 三策略) | Codex 第二轮 R3:spawn 时未检查 active lease → 同 task 双开;admission 不该延到 Phase 5;R30 |
1627
+ | **D34** | **2026-04-17** | **Phase 8A 新增 `.ultra/execution-plan.json` artifact**(waves + ownership 预测 + conflict 面) | Codex 第二轮 R5:8B 不应运行时才判并发;artifact 可审计;用户批准;R31 |
1628
+ | **D35** | **2026-04-17** | **Phase 4.6 拆 4.6a(v0.1 smoke flow)+ 4.6b(v0.2 full conformance)** | Codex 第二轮 R6:v0.1 先交付核心价值,full conformance 推迟到 v0.2;R32 |
1629
+ | **D36** | **2026-04-17** | **Phase 8A 对 Phase 7 的依赖从"强前置"软化为"加分项"** | Codex 第二轮 R5:memory/complexity 是 enhancement,不是正确性前置;8A 可单独跑 |
1630
+ | **D37** | **2026-04-17** | **新增多进程访问策略文档 `docs/STATE-DB-ACCESS-POLICY.md`** | Codex 第二轮 R4:MCP / CLI / orchestrator 同时写谁写哪;R25 |
1631
+ | **D38** | **2026-04-17** | **Phase 1 完成** — `spec/` 锁死三层契约:30 个 MCP tool / 7 表 SQLite schema / tasks 与 context 投影 schema / skill manifest / CLI 协议 + 映射表;`npm run test:spec` 5 validator 全绿;新增 `docs/ARCHITECTURE.md` | Phase 1 gate 全过;后续 Phase 只引用 spec/,不再发明 schema |
1632
+ | **D39** | **2026-04-17** | **Phase 2 完成** — 权威状态层落地:`.ultra/state.db` (7 表 WAL+busy_timeout)、`mcp-server/lib/{state-db,state-ops,projector}.cjs`、`mcp-server/server.cjs`(@modelcontextprotocol/sdk stdio + 7 task.*)、`ultra-tools {db,migrate}` 子命令、`STATE-DB-ACCESS-POLICY.md` + `COMMIT-HASH-BACKFILL.md`;6 gate 全过(20 worker / 3 进程并发 / migration 可逆 / DB 运维 4 子命令 / 投影 ≤1s / task.* MCP 契约 + events.id 无漏);`npm run test:state` 44/44 + `npm run test:spec` 5/5 | Phase 2 gate 全过;spec → state-ops → MCP 写路径成形,Phase 3 命令薄壳化可以基于 task.* MCP tool 重写 |
1633
+ | **D40** | **2026-04-17** | **Phase 3 完成** — 命令规则化三层迁移:9/9 命令薄壳化(36-54 行,平均 41 行)+ 7 个新 skill (`skills/ultra-{init,plan,dev,test,deliver,status,think,learn}/SKILL.md` 148-340 行) + `skills/ultra-research/SKILL.md` frontmatter 升级;新 MCP tool `task.init_project` + 内置 `templates/.ultra/` 骨架 + `ultra-tools task init-project` CLI;`spec/command-template.md` + `command-manifest.schema.json` + `validate-commands.cjs`(UBP_COMMAND_STRICT=1 9/9 通过);`docs/AGENT-CONTEXT.md` canonical runtime 规则源;`hooks/{adapters,core}/` 骨架 + 4 个 runtime adapter stub;`test:state` 54/54 (+10) + `test:spec` 6/6 (+1) + strict-mode command gate 9/9 migrated 0 failed | Phase 3 gate 全过;skill+MCP+CLI 三层模式在 9 命令全部闭环;Phase 4 adapter 阶段可以直接基于 `docs/AGENT-CONTEXT.md` canonical + hooks/adapters/ stub 展开 |
1634
+ | **D41** | **2026-04-17** | **Phase 4 完成(4.6b 推迟 v0.2)** — 跨 runtime 分发落地:`adapters/_shared/` 5 模块(file-ops / frontmatter / settings-merge / path-rewrite / md-to-toml)+ 15 单测 99%/89.9%/100% 覆盖率;4 个 adapter 从 Phase 0 stub 升级到完整装配(Claude:`settings.json` 哨兵 `_ubp_manifest` + `mcpServers.ultra-builder-pro` + `_source:ubp` tag 剥离;OpenCode:`opencode.json.mcp` + 小写化 frontmatter;Codex:`config.toml` marker-block append + prompts/ 命令 + hooks 降级到 2 event stub;Gemini:`extensions/ultra-builder-pro/` 打包 + md→toml + GEMINI.md canonical + 无 hook prompt-guard 降级);`docs/RUNTIME-COMPAT-MATRIX.md` 10 section 能力矩阵;`tests/conformance/<runtime>/smoke.test.cjs` 4×2=8 smoke 全绿(install → MCP round-trip → projector 投影 → uninstall 链路完整);`bin/install.js` Phase 0 stub 升级为真 adapter 调用 + 7 集成测试(4×install/uninstall round-trip + --all 扇出 + 幂等 + 参数解析错误);Phase 4.6b 按 D35 推迟 v0.2;43 条新测试全绿,0 回归(state 54 + spec 6) | Phase 4 gate 核心项通过:Claude diff-equal + 4 runtime matrix 完整 + 8 smoke 全绿 + install 幂等;未装 opencode/codex/gemini CLI 的 runtime-native smoke 待用户环境验 |
1635
+ | **D46** | **2026-04-17** | **Phase 7 完成 — 智能层落地** — 偏离原 PLAN:**不内嵌 hindsight-server(Python/Docker),改自建 SQLite FTS5 memory store**(理由:PLAN 自己说"避免 Docker"已承认痛点;Node 内嵌 Python 要 subprocess/HTTP 胶水,成本高于直接用 state.db)。**7.1 Memory store**:schema 升 5.2 → 7.1,新增 `memory_entries` 表(task_id/session_id/tag/kind/content/source/ts;kind CHECK `fact/decision/error_fix/pattern/note`)+ `memory_fts` FTS5 虚表 + 3 trigger(ai/ad/au 同步);`mcp-server/lib/memory-store.cjs` retain/recall/reflect 三函数(FTS5 MATCH 构造 escape 用 quote-wrap 防注入;空 query → 近期条目 fallback;bm25 ranking);3 MCP tool `memory.retain/recall/reflect`(spec/mcp-tools.yaml 老 schema 用 scope/ttl_days 方案 → 替换为 kind 方案,更贴事件自动提取);`orchestrator/memory-wrapper.cjs` autoRecallOnSpawn(task.title+trace_to → recall → prefetch.md)+ autoRetainOnClose(event-type heuristic 映射 task_completed→decision / task_circuit_broken→error_fix / session_crashed→pattern / task_stale_marked→fact;**不调 LLM**);session-runner opt-in `autoMemory: true`。**7.2 Tagged task lists**:`deriveBranchTag(cwd)` 用 `spawnSync`(非 throw, 状态码判断) 读 git symbolic-ref + `sanitizeTag`(slash→hyphen, @→dot, 非 `\w.-` 剥离, ≤100 chars);`switchTaskTag` + `task_tag_changed` event;`createTask` 接 `_cwd` 字段自动推导 tag 不覆盖显式传入;MCP `task.switch_tag` + spec/cli-protocol.md 加 33rd mapping;daemon `branchScoped: true` 过滤 pending by current branch tag。**7.3 Skill 萃取(heuristic, 0 LLM cost)**:`orchestrator/skill-miner.cjs` mineSession 扫 session events → 3 signal 触发(`task_completed` → task-completion / `task_circuit_broken` → debug-pattern / `session_crashed` → recovery-pattern)→ 写 `skills/learned/<ts>_<sid>_unverified.md` 含 YAML frontmatter + Problem/Signal/Evidence/Suggested reuse 4 section;idempotent(同 sid 再跑检到已有 draft 则 skip);session-runner opt-in `mineSkill: true` + `skillsRoot`。**聚合**:Phase 7 新增 38 tests(memory-store 11 + memory-wrapper 7 + tagged-tasks 11 + skill-miner 7 + server-contract 1 memory roundtrip + daemon 1 branchScoped),D45 基线 232 → **270 tests 全绿**,0 回归。schema_version 升到 7.1(第三个 seed 行),RequiredTables 加 `memory_entries` | v0.3 准备期:用户现在每 task 起步自动拿到相关历史 prefetch;branch 切换自动过滤任务;debug / crash / 完成自动生成 skill draft;所有 opt-in 默认关,不破坏现有集成 |
1636
+ | **D45** | **2026-04-17** | **Phase 4 backlog 全清 + Phase 4.6b full conformance 完工** — v0.1 publish 前技术债清零:**9 条 review backlog** 全修(P2 #4 TOML escape 补 `\n/\r/\t/\b/\f/control`;P2 #5 Codex `spawn(argv)` tripwire 注释;P2 #7 `readJsonSafe({rescue:true})` 坏 JSON 备份到 `.bak-<ts>`;**P2 #9 `_source` env 泄漏修复** — 4 adapter 全改为 sibling `_ubp: {source}`,Codex 用 MARKER_BEGIN/END fence 做识别,Gemini manifest 顶层 + mcpServers 项目级双份 `_ubp` + uninstall check 改 `manifest._ubp.source`;P3 #10 writeAtomic 改 `crypto.randomUUID`;P3 #11 Claude env shallow key-wise merge;P3 #12 Gemini `loadPkgVersion` catch 加 stderr 提示;P3 #13 抽 `adapters/_shared/validate.cjs#validateConfigDir` NUL-byte 检查;P3 #14 Codex `_internal` export 加 justification 注释)。**Phase 4.6b full conformance**:`tests/conformance/_capabilities.cjs` 共享 5 assertion(command / skills / hooks / MCP+无 env._source / install-idempotency);4 runtime × 5 capability = 20 新 conformance tests(Matrix N/A 项显式 skip —— Gemini hooks 是 graceful no-op;Codex MCP 用 marker-fence 识别 instead of sibling field,因为 TOML 不适合 nested object);现有 8 smoke test 保留(端到端 MCP round-trip)。**Reviewer suggestion**:`adapters/_shared/tests/resolve-target.test.cjs` table-driven 21 tests 覆盖 `configDir > env > home/cwd` 优先级 + Gemini extensionRoot 追加;总计 +46 新测试(adapter +1 tomlEscape / settings-merge +1 rescue / validate +4 / rtk-detect 既有 / resolve-target +21 / conformance +20);Phase 6 基线 186+ → **232 tests 全绿**,0 回归 | v0.1 publish 前的稳定性底线达成;4 runtime 全 capability 都有自动化防护网 |
1637
+ | **D44** | **2026-04-17** | **Phase 6 完成** — 监控与优化落地:(6.1) `adapters/_shared/rtk-detect.cjs` soft-dependency hook — `detectRtk` / `initRtk` / `installHook` 三入口 + install.js `--skip-rtk` flag + 缺失时打印安装 hint 不炸(测试用 `PATH=<iso-dir>:/usr/bin:/bin` 屏蔽真实 rtk,8 tests);(6.2) `mcp-server/lib/{pricing,telemetry}.cjs` — pricing 表(claude/codex/opencode/gemini × opus/sonnet/haiku/default,2026-04 per-token 定价)+ `appendTelemetry` 双写 state.db.telemetry 表 + `.ultra/telemetry/{YYYY-MM-DD}.jsonl`(jsonl 保留 task_id + payload 全量,表只存聚合键)+ auto-computeCost(tokens + runtime → usd)+ state-ops 三聚合 `aggregateTelemetryByRuntime / byTask / bySession`(LEFT JOIN sessions 让 CLI 的 null session 落 'unknown' 桶);MCP server.cjs handler wrap:每 tool call best-effort 埋点(error / UNKNOWN_TOOL / VALIDATION_ERROR 也记录);CLI cli.cjs dispatch 入口 `emitCliTelemetry(sub, rest)` 自开 db best-effort 不阻塞主流程(12 tests);(6.3) `ultra-tools/commands/status.cjs` + subcommand `ultra-tools status --cost [--json] [--since 7d] [--limit N]` — buildCostPanel 返回 `{period, by_runtime, top_tasks, total_cost_usd}`;human 渲染成表格 / --json 走 envelope;`parseSince` 支持 `7d/24h/30m/ISO-8601`;skills/ultra-status SKILL.md cli_fallback 升级为 `status --cost --json` + 加 Cost panel section(7 tests);(6.4) `orchestrator/code-graph-watcher.cjs` — chokidar 3.6 + debounceMs=500 默认 + largeBatchThreshold=50 默认 + `includeExt` 白名单(.js/.ts/.py/.go/.rs/.java…)+ `excludeGlobs`(node_modules/.git/.ultra/dist/build/coverage/.next/.code-review-graph)+ awaitWriteFinish 稳定窗口 + `ready()` promise(解决 ignoreInitial=true 下仍漏初始 add event 的问题);bin/orchestrator.js `run` 子命令加 `--with-graph-watcher` CLI flag + settings.json `orchestrator.graph_watcher: true` 自动挂载;batch 写入 `.ultra/code-graph-events.jsonl`,外部 MCP (build_or_update_graph_tool) 消费(6 tests + 端到端 jsonl 写入);(6.5) stdout 拦截 skip → 留 v0.3+;总计 +33 Phase 6 tests(state 76→88 +12 telemetry / orch 26→32 +6 watcher / shared 15→23 +8 rtk / ultra-tools 0→7 status + cli 埋点),原 Phase 5 基线 153 → Phase 6 186+,0 回归 | v0.2 监控就绪;用户可在 daemon 开着的时候看实时 token/cost 分布,editor save 触发 graph 增量更新 |
1638
+ | **D43** | **2026-04-17** | **Phase 5 完成** — 执行层进阶四件套落地:(5.1) `orchestrator/recovery.cjs` `recoverOnBoot` 扫 orphan 用 `process.kill(pid,0)` 探测 pid 存活,死的 → crashed + `task_failure` event(5 tests 含 kill -9 真实集成);(5.2) `circuit_breaker` 表(schema_version 升 4.5 → 5.2,`ensureSchemaVersion` 从 "latest row" 改 "exact match" 解决同 ms seed 排序不稳)+ `recordTaskFailure` 计数器(连续 ≥3 → `tripped_at` + `task_circuit_broken` 一次性 event)+ `resetCircuitBreaker` + `admissionCheck` 短路 `blocked_by_breaker` + `spawnSession` 抛 `CIRCUIT_TRIPPED`(7 tests,含 takeover 不可越过熔断);(5.3) `markTasksStaleBySpecSections` + `consumeSpecChangedEvents` 游标消费 + projector `⚠️ STALE` banner(只对 pending + 幂等,10 tests);(5.4) `orchestrator/daemon.cjs` 轮询 + `routeTask` 按 complexity_hint(haiku/sonnet/opus) 最简路由 + `bin/orchestrator.js` 四子命令 `run/start/stop/status` + `settings.json` `orchestrator.auto_dispatch` opt-in gate(11 tests + 手测 opt-in 拒启/pidfile 生命周期);Recovery 明确不自动 retry(retry 留给 Phase 8B),仅计失败交给熔断;总计 108 tests 全绿(state 76 + orch 26 + spec 6),原 118 基线 +35 无回归 | v0.2 执行层进阶完工;可起 daemon 自动捡 pending task,熔断+恢复+staleness 闭环 |
1639
+ | **D42** | **2026-04-17** | **Phase 4.5 完成 — v0.1 发布就绪点** — execution-lite 落地:MCP 新增 7 个 session.* tool(spawn/close/get/list/admission_check/heartbeat/subscribe_events;spec 新增 session.list + meta-schema errors minItems 兼容);state-ops 新增 readSession / heartbeatSession / admissionCheck / reapOrphanSessions(D32/D33);`orchestrator/session-runner.cjs` 真 git worktree + child_process + state.db sessions 表 lease/heartbeat(替代 lease.json 文件 — grep 证代码零出现);`ultra-tools session {list,admission,reap,get,heartbeat,close,subscribe}` 7 verb CLI;skills/ultra-status 升级读 session.list + session.subscribe_events;Phase 4.5 gate 全过(2 并发 session 隔离 / 并发 spawn 单活 / kill -9 → orphan 识别 / event subscribe ≤1s latency / 无文件+表双源);总计 118 tests 全绿(state 59 + orch 8 + spec 6 + adapter/conformance/install 45);0 回归 | v0.1 发布就绪点达成:用户装上即可跨 4 runtime 手动并发跑任务、会话独立、事件订阅、活跃会话可见。真·可用最小单元 |
1640
+ | **D47** | **2026-04-17** | **Phase 8A 完成 — planner 线就绪** — PRD → task graph → execution-plan 全链 MCP:(8A.0) schema 升 7.1 → 8A.1,tasks.parent_id TEXT REFERENCES tasks(id) ON DELETE SET NULL + `tasks_parent` 部分索引;EXPECTED_VERSION bump。(8A.1) `lib/llm-client.cjs` 官方 SDK 双 provider(`@anthropic-ai/sdk` + `openai`,+2 devDeps,用户选 D)按 model 前缀推(claude|opus|sonnet|haiku → anthropic;gpt|o1|o3 → openai),统一 `completeJson({system, user, maxTokens})`;`lib/prd-parser.cjs` Test Double 注入;`orchestrator/planner/prd-prompt.cjs` 模板;`task.parse_prd` input 加 `dry_run`(默认 false)实现 human-gate preview→approve;server.cjs dispatchTool 改 async。(8A.2) `lib/topo.cjs` Kahn + Tarjan SCC — 外部 dep 视已满足;有环返 CYCLE_DETECTED + `err.details.cycles`;errorResponse 扩展 optional `details`。(8A.3) `lib/task-expander.cjs` LLM prompt(sub_count 默认 3)→ 原子 tx(createTask children with parent_id + patchTask parent.status='expanded' → 自动 emit task_expanded);server 前置 parent 检查避免无谓 LLM client 构造。(8A.4a) `orchestrator/planner/plan-builder.cjs` Functional Core;`listWaveConflicts` pair-wise files_modified 交集;parallel wave 取 max(complexity),serial sum;cost 用 `pricing.computeCost`。(8A.4b) `lib/plan-store.cjs` `writeAtomic` 原子落 `.ultra/execution-plan.json`;`loadPlanArtifact` corrupt→null;`selectSection` 投影 tasks/topo/conflicts/all;emit plan_approved。(8A.5) `skills/ultra-plan` PRD Direct workflow — dry_run=true parse → buildPlan → ask.question → approve 走 dry_run=false + plan.export / reject 0 写入;frontmatter mcp_tools_required +5 tool。**spec 扩展**:task.create input 加 `files_modified` + `parent_id`;task.parse_prd input 加 `dry_run`。D46 基线 270 → **361 tests 全绿**(+91:state +71 / orch +20 / spec +5);0 回归 | v0.3 planner 里程碑就绪;execution-plan.json 是 Phase 8B 的权威输入;dry_run 是 human-gate 最小扩展 |
1641
+ | **D48** | **2026-04-18** | **Phase 8B 完成 — executor 线就绪,v0.3 coding 工厂可用** — (8B.0) schema 不动(tasks.files_modified/session_id/parent_id 齐备);events 新增 5 type(wave_started / wave_completed / plan_completed / merged_back / merge_conflict),利用 events.type 无 CHECK 约束向后兼容。(8B.1) `orchestrator/dispatch-rules.cjs` 声明式规则数组(GSD-2 模式):`evaluate(ctx, rules)` 按 priority 取首个 match 返 `{rule_id, action, runtime}`;3 action(`spawn_agent`/`defer`/`block`);6 DEFAULT_RULES(breaker-blocked / deps-not-ready / no-runtimes / wave-conflict / by-preference / fallback-first-available);ROUTE_PREFERENCES 从 daemon.cjs 移过来;daemon.routeTask 改为 `evaluate` 的 thin wrapper,Phase 5.4 daemon 6 routeTask 测试 0 回归。(8B.2) `orchestrator/parallel-orchestrator.cjs` 读 plan waves → wave.parallel=true 批 `Promise.all` / parallel=false await 串行;前置 dispatch-rules.evaluate;`STATUS_TRANSITIONS` 约束要求 spawn 后 patchTask(in_progress),exit 后 patchTask(completed|pending);失败 task 不短路同 wave 其他任务;`finalizeSession` 调 `closeSession` 统一 session+worktree+可选 autoMerge 生命周期;runPlan 加 `autoMerge`/`mergeBaseBranch` opt-in(默认关,Phase 4/5/6/7/8A 0 回归)。(8B.3) `orchestrator/worktree-manager.cjs` N 并发 git worktree 注册簿:allocate/release/listActive/releaseAll;`listActive` 用 `git worktree list --porcelain` + realpath 规范化(macOS `/var`↔`/private/var` 符号链接坑)+ `.ultra/worktrees/` 域过滤;`releaseAll` 兼作崩溃恢复(git-tracked 清理 + 文件系统孤儿 sweep);Node 单线程 execFileSync 天然序列化避免 `.git/config.lock` 竞争。(8B.4) `orchestrator/auto-merge.cjs` — autoMerge 三出口(no_changes / merged_back / merge_conflict);冲突路径用 `git diff --name-only --diff-filter=U` 在 abort 之前收集;closeSession 加 `autoMerge`/`mergeBaseBranch` opt-in,conflict 时强制 `remove_worktree=false` 保留 worktree 给人。(8B.5 gate) `orchestrator/tests/phase-8b-gate.test.cjs` 三条 gate 全过:10-task PRD 端到端完成率 100%(要求 ≥80%);5 slice 压力 0 git lock 错误;merge 冲突正确识别 + conflict_paths 准确。**总计 +36 tests**(dispatch-rules +12 / worktree-manager +8 / parallel-orchestrator +7 / auto-merge +6 / gate +3),D47 基线 361 → **397 tests 全绿**(state 182 / orch 103 / spec 6 / rest 106),0 回归 | **v0.3 = 自动化 coding 工厂**:8A plan → 8B 执行 → 冲突人审 全链打通;autoMerge 默认关保留手动控制;worktree 全生命周期可观测可恢复 |
1642
+ | **D50** | **2026-07-15** | **重划插件与记忆边界**:Claude Code、Codex、OpenCode 改为各自 native plugin;只打包 10 个 Ultra 公共 workflow、4 个 agent-only 规则 skill 与宿主专属 collab companion;删除 6 个外部 skill、recall、Impeccable 残留、Ultra memory MCP/store/wrapper/capture hooks;持久记忆由独立 cloud-mem/claude-mem 负责;用户 handbook 通过可预览、可备份的 managed block 显式同步 | 用户确认最终方案;运行时 allowlist、conformance、hook 与 handbook 回归测试共同锁定边界 |
1643
+
1644
+ ---
1645
+
1646
+ ## 15. 术语表
1647
+
1648
+ - **Adapter**:`adapters/` 下按 runtime 实装的模块,Phase 4 的主产物。
1649
+ - **Admission Control**:spawn 新 session 前的前置检查,保证同 task 只有
1650
+ 一个 active lease;三策略 takeover/resume/abandon;Phase 4.5.2 / D33。
1651
+ - **activity-log**:**state.db `events` 表**(v0.3 起不再是文件);append-
1652
+ only 事件流;Phase 2 建立,全程消费;`.ultra/activity-log.json` 是可选
1653
+ 只读导出。
1654
+ - **AGENTS.md**:各 runtime 原生的项目上下文文件(Claude 叫 CLAUDE.md,
1655
+ Gemini 叫 GEMINI.md);Phase 3.7 统一注入。
1656
+ - **DISPATCH_RULES**:GSD-2 的声明式分派规则表,Phase 8B 移植。
1657
+ - **Execution-lite**:v0.1 发布的最小执行层 = session 标准单元 + admission
1658
+ + event subscribe + 活跃会话可见;Phase 4.5 / D19。
1659
+ - **execution-plan.json**:8A 产出的可审计规划 artifact(waves + ownership
1660
+ + conflict),驱动 8B 分派;D34。
1661
+ - **Orchestrator**:Phase 5+ 引入的 Node daemon,负责 session 生命周期 +
1662
+ 事件循环 + 分派。
1663
+ - **规则层 / 执行层**:§4.2;Phase 1-4 / Phase 4.5-8。
1664
+ - **Session**:GSD-2 模式升级版(D20):新进程 + 独立 worktree + lease/
1665
+ heartbeat(存 sessions 表) + artifact dir;Phase 4.5 实装。
1666
+ - **state.db**:`.ultra/state.db` SQLite + WAL 数据库,所有状态的权威源;
1667
+ 七表(tasks/events/sessions/telemetry/specs_refs/schema_version/
1668
+ migration_history);Phase 2 建立。
1669
+ - **三层架构**:§4.1;skill(知识,只读发现)+ MCP(状态操作主路径)+
1670
+ CLI(兜底)。
1671
+ - **staleness**:task 的 spec 被改后,未开工的 pending task 自动标记
1672
+ "需要重读 spec";Phase 5.3。
1673
+ - **投影(projection)**:tasks.json / context md 的 status header 从 state.db
1674
+ 派生的只读视图;手改不生效;Phase 2.6。
1675
+ - **Walking Skeleton**:Hermes 概念,总是 Task #1 的 E2E 最小路径,贯穿所有
1676
+ 架构层。
1677
+ - **${UBP_CONFIG_DIR}**:skill / 命令 md 内的路径占位符,adapter 在 install
1678
+ 时按 runtime 展开。
1679
+
1680
+ ---
1681
+
1682
+ *计划结束。范围 / 置信度 / 时间线 / 架构的任何改动必须先在 §14 打日期写明、
1683
+ 再落代码。*