ultra-builder-pro-cli 0.5.3 → 0.7.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 (91) hide show
  1. package/.ultra-template/changes/active/.gitkeep +1 -0
  2. package/.ultra-template/changes/archive/.gitkeep +1 -0
  3. package/CHANGELOG.md +90 -14
  4. package/README.md +38 -32
  5. package/adapters/_shared/codex-assets.cjs +32 -151
  6. package/adapters/_shared/frontmatter.cjs +2 -2
  7. package/adapters/_shared/handbook.cjs +10 -10
  8. package/adapters/_shared/path-rewrite.cjs +0 -3
  9. package/adapters/_shared/runtime-assets.cjs +13 -4
  10. package/adapters/_shared/tests/handbook.test.cjs +4 -1
  11. package/adapters/_shared/tests/path-rewrite.test.cjs +1 -3
  12. package/adapters/_shared/tests/resolve-target.test.cjs +1 -11
  13. package/adapters/_shared/tests/runtime-assets.test.cjs +7 -6
  14. package/adapters/opencode.js +82 -26
  15. package/adapters/tests/claude.test.cjs +1 -4
  16. package/adapters/tests/codex.test.cjs +9 -8
  17. package/adapters/tests/opencode.test.cjs +17 -11
  18. package/bin/install.js +6 -28
  19. package/bin/orchestrator.js +12 -30
  20. package/commands/ultra-change.md +47 -0
  21. package/commands/ultra-deliver.md +14 -7
  22. package/commands/ultra-dev.md +6 -3
  23. package/commands/ultra-doctor.md +36 -0
  24. package/commands/ultra-init.md +4 -3
  25. package/commands/ultra-status.md +7 -5
  26. package/commands/ultra-test.md +2 -1
  27. package/docs/AGENT-CONTEXT.md +35 -28
  28. package/docs/ARCHITECTURE.md +49 -21
  29. package/docs/PLAN.zh-CN.md +67 -68
  30. package/docs/ROADMAP.md +17 -17
  31. package/docs/RUNTIME-COMPAT-MATRIX.md +63 -62
  32. package/hooks/README.md +8 -7
  33. package/hooks/active_task_context.py +22 -15
  34. package/hooks/health_check.py +136 -38
  35. package/hooks/workflow_context.py +120 -30
  36. package/mcp-server/lib/change-workflow.cjs +556 -0
  37. package/mcp-server/lib/change-workflow.test.cjs +259 -0
  38. package/mcp-server/lib/doctor.cjs +112 -0
  39. package/mcp-server/lib/doctor.test.cjs +86 -0
  40. package/mcp-server/lib/init-project.cjs +32 -6
  41. package/mcp-server/lib/pricing.cjs +0 -6
  42. package/mcp-server/lib/runtime-state.cjs +222 -0
  43. package/mcp-server/lib/runtime-state.test.cjs +92 -0
  44. package/mcp-server/lib/state-db.cjs +31 -8
  45. package/mcp-server/lib/state-ops.cjs +24 -3
  46. package/mcp-server/lib/telemetry.cjs +4 -0
  47. package/mcp-server/server.cjs +102 -10
  48. package/mcp-server/tests/db-ops.test.cjs +5 -1
  49. package/mcp-server/tests/init-project.test.cjs +45 -0
  50. package/mcp-server/tests/server-contract.test.cjs +140 -1
  51. package/mcp-server/tests/state-db.test.cjs +44 -7
  52. package/mcp-server/tests/state-ops.test.cjs +42 -0
  53. package/mcp-server/tests/telemetry.test.cjs +14 -0
  54. package/orchestrator/daemon.cjs +39 -0
  55. package/orchestrator/dispatch-rules.cjs +15 -4
  56. package/orchestrator/tests/daemon.test.cjs +63 -12
  57. package/orchestrator/tests/dispatch-rules.test.cjs +12 -10
  58. package/package.json +5 -7
  59. package/settings.json +1 -2
  60. package/skills/ultra-change/SKILL.md +140 -0
  61. package/skills/ultra-deliver/SKILL.md +81 -15
  62. package/skills/ultra-dev/SKILL.md +32 -12
  63. package/skills/ultra-doctor/SKILL.md +90 -0
  64. package/skills/ultra-init/SKILL.md +8 -6
  65. package/skills/ultra-review/SKILL.md +16 -0
  66. package/skills/ultra-status/SKILL.md +30 -7
  67. package/skills/ultra-test/SKILL.md +14 -2
  68. package/skills/ultra-verify/SKILL.md +22 -41
  69. package/skills/ultra-verify/evals/evals.json +22 -24
  70. package/skills/ultra-verify/references/confidence-system.md +15 -32
  71. package/skills/ultra-verify/references/cross-verify-modes.md +14 -59
  72. package/skills/ultra-verify/scripts/verify_wait.py +44 -81
  73. package/spec/cli-protocol.md +12 -1
  74. package/spec/mcp-tools.yaml +340 -4
  75. package/spec/schemas/mcp-tools.schema.json +1 -1
  76. package/spec/schemas/skill-manifest.schema.json +2 -2
  77. package/spec/schemas/state-db.sql +119 -2
  78. package/ultra-tools/cli.cjs +3 -0
  79. package/ultra-tools/commands/system.cjs +57 -0
  80. package/ultra-tools/system-command.test.cjs +53 -0
  81. package/adapters/_shared/md-to-toml.cjs +0 -54
  82. package/adapters/_shared/rtk-detect.cjs +0 -86
  83. package/adapters/_shared/tests/md-to-toml.test.cjs +0 -48
  84. package/adapters/_shared/tests/rtk-detect.test.cjs +0 -116
  85. package/adapters/gemini.js +0 -204
  86. package/adapters/tests/gemini.test.cjs +0 -112
  87. package/docs/LEGACY-HERMES.md +0 -1175
  88. package/orchestrator/code-graph-watcher.cjs +0 -121
  89. package/orchestrator/tests/code-graph-watcher.test.cjs +0 -183
  90. package/skills/gemini-collab/SKILL.md +0 -51
  91. package/skills/gemini-collab/evals/evals.json +0 -42
@@ -10,8 +10,7 @@
10
10
 
11
11
  `ultra-builder-pro-cli` is a multi-runtime plugin suite that **distributes** the
12
12
  Ultra Builder Pro engineering loop (skills + commands + workflow hooks) as
13
- native Claude Code, OpenCode, and Codex plugins, with a Gemini compatibility
14
- adapter, and
13
+ native Claude Code, OpenCode, and Codex plugins, and
15
14
  **runs** that loop with isolated sessions sharing one authoritative state
16
15
  store (`.ultra/state.db`).
17
16
 
@@ -24,7 +23,7 @@ the supported hosts share.
24
23
  ┌──────────────────────────┐
25
24
  │ runtime CLI │
26
25
  │ (claude / opencode / │
27
- │ codex / gemini) │
26
+ │ codex) │
28
27
  └────────────┬─────────────┘
29
28
  │
30
29
  ┌───────────────────┼────────────────────┐
@@ -36,8 +35,8 @@ the supported hosts share.
36
35
  ║ ║ ║ ║ ║ fallback) ║
37
36
  ╚══════╤═══════╝ ╚════════╤═══════╝ ╚══════╤═══════╝
38
37
  │ │ │
39
- │ resolve / read │ task.* etc. │ same tools
40
- │ (D29 read-only) │ │ via stdio
38
+ │ resolve / read │ task.* etc. │ selected init /
39
+ │ (D29 read-only) │ │ recovery / ops
41
40
  └────────────┬───────┴──────────────────┘
42
41
  ▼
43
42
  ┌─────────────────────┐
@@ -53,26 +52,25 @@ the supported hosts share.
53
52
 
54
53
  | Layer | Role | Form |
55
54
  |--------------|----------------------------------------------|-------------------------------------------------------|
56
- | **skill** | knowledge carrier; tells the runtime *what to do* | `skills/<name>/SKILL.md` discovered natively by all four runtimes |
57
- | **MCP** | authoritative workflow-state API | stdio MCP server exposing seven declared tool families in [`spec/mcp-tools.yaml`](../spec/mcp-tools.yaml); 21 tools are live and nine scheduled contracts map to host-native surfaces |
58
- | **CLI** | the lowest common denominator hooks can call | `ultra-tools <family> <verb>` — same contract, last-line JSON envelope (see [`spec/cli-protocol.md`](../spec/cli-protocol.md)) |
55
+ | **skill** | knowledge carrier; tells the runtime *what to do* | `skills/<name>/SKILL.md` discovered natively by all supported runtimes |
56
+ | **MCP** | authoritative workflow-state API | stdio MCP server exposing 29 live tools across task/session/change/system/plan families in [`spec/mcp-tools.yaml`](../spec/mcp-tools.yaml) |
57
+ | **CLI** | explicit initialization, recovery, diagnostics, and orchestration | `ultra-tools` / `ubp-orchestrator`; only commands listed by `--help` are executable (see [`spec/cli-protocol.md`](../spec/cli-protocol.md)) |
59
58
 
60
59
  Why three: skills give us behavior portability across runtimes; MCP gives
61
60
  us a strongly-typed contract so we can refactor implementations without
62
- rewriting prompts; CLI gives us a Python-hook-callable fallback when a
63
- runtime's MCP transport is unavailable. None of the three could carry the
64
- load alone (D12).
61
+ rewriting prompts; the CLI supplies bounded maintenance and recovery paths when
62
+ the MCP cannot start. It is deliberately not a second change-state API:
63
+ continuous change mutations remain MCP-only and fail closed (D12).
65
64
 
66
- The skill layer is **read-only by design** (D29). We keep `skill.resolve`
67
- and `skill.manifest` to let the runtime locate a SKILL.md and parse its
68
- frontmatter; we deliberately removed `skill.invoke` and `skill.list`
69
- because skills are documentation, not RPC.
65
+ The skill layer is **read-only by design** (D29) and is discovered directly by
66
+ each host. Ultra exposes no `skill.*` MCP family: skills are documentation, not
67
+ RPC, and host-native loaders own resolution and invocation.
70
68
 
71
69
  ## 3. Authoritative state — `.ultra/state.db`
72
70
 
73
71
  All durable Ultra workflow state lives in one SQLite file with WAL enabled. Schema is
74
72
  fixed in [`spec/schemas/state-db.sql`](../spec/schemas/state-db.sql) and
75
- covers eight tables:
73
+ covers fifteen tables:
76
74
 
77
75
  | Table | Holds | Phase |
78
76
  |--------------------|---------------------------------------------------|-------|
@@ -84,6 +82,13 @@ covers eight tables:
84
82
  | `telemetry` | per-session token / cost / tool-call counters | 6 |
85
83
  | `specs_refs` | spec change tracking → staleness propagation | 5 |
86
84
  | `circuit_breaker` | bounded retry and halt state for failed tasks | 5 |
85
+ | `changes` | continuous feature/fix/incident lifecycle | 8C |
86
+ | `artifacts` | intent/context/verification artifact registry | 8C |
87
+ | `context_snapshots`| compiled context hashes, git head, provider refs | 8C |
88
+ | `trace_links` | task/spec/change traceability | 8C |
89
+ | `incidents` | structured runtime failures and resolutions | 8C |
90
+ | `projection_jobs` | durable projection outbox/retry state | 8C |
91
+ | `event_consumers` | durable monotonic consumer cursors | 8C |
87
92
 
88
93
  Two rules make this work:
89
94
 
@@ -118,9 +123,32 @@ such as cloud-mem/claude-mem owns persistent memory and its own lifecycle. The
118
123
  only related migration surface is the explicit `ultra-tools legacy-memory`
119
124
  archive/prune command for data created by older releases.
120
125
 
121
- ## 4. Sessions — the execution unit
126
+ ## 4. Continuous changes — the daily unit of convergence
122
127
 
123
- A **session** is the standard unit of execution across all four runtimes
128
+ After the initial baseline delivery, every fix, feature, redesign, or incident
129
+ is represented by a `changes` row and an inspectable packet:
130
+
131
+ ```text
132
+ active -> blocked -> active -> ready -> archived
133
+ | |
134
+ ├─ intent + delta + plan └─ verification + baseline reconciliation
135
+ ├─ linked tasks
136
+ └─ context-manifest (current HEAD + provider metadata references)
137
+ ```
138
+
139
+ `quick`, `standard`, `major`, and `incident` kinds require different evidence,
140
+ but all require completed linked tasks, current context, declared documentation
141
+ impact, and no open incident. Memory and graph payloads never enter Ultra;
142
+ `context_snapshots.provider_refs_json` stores metadata references only.
143
+
144
+ Mutating MCP calls enqueue durable `projection_jobs`. Success is exposed in MCP
145
+ response metadata; failure becomes a retryable structured incident instead of a
146
+ swallowed warning. `system.doctor` is read-only by default and performs only
147
+ backup-first mechanical recovery when explicitly requested.
148
+
149
+ ## 5. Sessions — the execution unit
150
+
151
+ A **session** is the standard unit of execution across all three runtimes
124
152
  (D20). One session =
125
153
 
126
154
  - a fresh OS process for the runtime,
@@ -140,7 +168,7 @@ This admission gate is the smallest piece that prevents two agents from
140
168
  silently double-writing the same task — it is part of the v0.1 minimum
141
169
  execution layer, not deferred to Phase 5.
142
170
 
143
- ## 5. Two timelines — rule layer vs execution layer
171
+ ## 6. Two timelines — rule layer vs execution layer
144
172
 
145
173
  The roadmap separates two concerns that compete for the same surface
146
174
  area (D13):
@@ -168,7 +196,7 @@ value from "skills + tasks survive across sessions" long before they get
168
196
  value from "ten agents in parallel." Each milestone is independently
169
197
  shippable; downstream slip never blocks an earlier release.
170
198
 
171
- ## 6. Where to look next
199
+ ## 7. Where to look next
172
200
 
173
201
  | Question | File |
174
202
  |----------------------------------------------------|-----------------------------------------------------|
@@ -178,7 +206,7 @@ shippable; downstream slip never blocks an earlier release.
178
206
  | What does a tasks.json look like after projection? | [`spec/fixtures/valid/tasks.v4.5.json`](../spec/fixtures/valid/tasks.v4.5.json) |
179
207
  | Phase-by-phase work breakdown + decision log | [`docs/PLAN.zh-CN.md`](./PLAN.zh-CN.md) |
180
208
 
181
- ## 7. Verifying the architecture
209
+ ## 8. Verifying the architecture
182
210
 
183
211
  Every contract on this page is enforced by `npm run test:spec`:
184
212
 
@@ -1,15 +1,20 @@
1
- # ultra-builder-pro-cli — 执行计划 v0.3.1
1
+ # ultra-builder-pro-cli — 历史执行计划与决策日志
2
2
 
3
- > **2026-07-15 当前生效边界(D50,覆盖下文旧 Phase 7 / D25 / D46 的 memory 设计)**:
3
+ > **2026-07-17 当前生效边界(D50-D52,覆盖下文旧 Phase 6/7 的内置图谱、memory 与 runtime 设计)**:
4
4
  > Ultra Builder Pro 不再拥有 `memory.*`、recall、prompt/transcript/observation/summary
5
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。下文所有与此冲突的
6
+ > 插件只保留 12 个 Ultra 公共 workflow(新增 daily `ultra-change` 与诊断
7
+ > `ultra-doctor`)、4 个 agent-only 规则 skill、宿主专属 collab companion、
8
+ > workflow/change hook 与 `.ultra/state.db` 权威。Memory 和代码图谱内容全部由外部
9
+ > provider 所有,Ultra 只保存 provider 元数据引用。Claude Code、Codex、OpenCode
10
+ > 采用各自 native plugin 呈现,其他旧 runtime adapter 已退役。下文所有与此冲突的
9
11
  > memory/hindsight 章节仅作为历史实施记录,不再是当前需求或运行时契约。
10
12
 
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
+ **当前状态**:v0.7.0 发布候选;三宿主 native plugin、29 个 live MCP tool、
14
+ schema 9.0(15 表)、持续 change/context/convergence/doctor 已落地;npm 发布由
15
+ `v*.*.*` tag 触发。以下 Phase 0-9 正文保留为 2026-04 的实施历史,不再作为
16
+ 当前 runtime 或发布状态的事实来源。
17
+ **历史版本**:0.3.1-plan · 2026-04-17 Codex 第二轮评审收尾
13
18
  **范围**:最终目标 = 可落地的"跨 runtime coding 自动化工厂"。12 个 Phase 渐进交付。
14
19
  **整体置信度**:**86%**(同 v0.3;Phase 2 下调被 4.5/8A/8B 上调抵消)
15
20
  **关键变更**(vs v0.3,基于 Codex 第二轮 R1-R7):
@@ -22,14 +27,16 @@
22
27
  - **Phase 4.6 拆 a/b**(R6 + D35):v0.1 只跑 smoke flow,full conformance 推 v0.2
23
28
  - **Codex 第二轮结论**:"小改后开工"(tl;dr);本版已完成小改
24
29
 
25
- **总决策数**:D1-D50(当前边界以 D50 为准)
30
+ **总决策数**:D1-D52(当前边界以 D50-D52 为准)
26
31
  **总风险数**:R1-R32(v0.3.1 新增 R25-R32 共 8 条)
27
32
 
28
33
  ---
29
34
 
30
- > **本文件为唯一权威**。范围 / 置信度 / 时间线 / 架构的任何变更,必须先在 §14
31
- > 决策日志写明理由和日期,再落代码。所有外部事实追溯到 §14 D11 + D12 的文档
32
- > URL 证据。
35
+ > **当前事实权威**:live MCP 以 `spec/mcp-tools.yaml` 为准,持久状态以
36
+ > `spec/schemas/state-db.sql` 为准,插件边界以 `docs/AGENT-CONTEXT.md` 与
37
+ > `adapters/_shared/runtime-assets.cjs` 为准,宿主差异以
38
+ > `docs/RUNTIME-COMPAT-MATRIX.md` 为准。本文件只保存历史方案与决策来源;任何
39
+ > 与上述当前契约冲突的旧 Phase 文本均不生效。
33
40
 
34
41
  ---
35
42
 
@@ -41,7 +48,7 @@
41
48
  **自动化 coding 工厂**。
42
49
 
43
50
  **最终形态**(v1.0):
44
- - 任何一个 coding agent CLI(Claude / OpenCode / Codex / Gemini / Cursor /
51
+ - 任何一个受支持的 coding agent CLI(Claude / OpenCode / Codex)
45
52
  Windsurf)都能消费同一套 Hermes 规则。
46
53
  - 独立 session 执行独立 task,无对话污染;失败自动重试带熔断。
47
54
  - 跨 session 的记忆、代码图、token 监控通过 MCP 共享。
@@ -70,7 +77,7 @@ Hermes(Ultra Builder Pro)是一套成熟的 agent 工程系统:
70
77
 
71
78
  **A. Claude 独占工具钉死**:`TaskCreate/Update/List`、`AskUserQuestion`、`Skill`、
72
79
  `Agent(subagent)`、`TeamCreate/SendMessage`、`/compact` 这 6 类 API 让 Hermes
73
- 离开 Claude Code 寸步难行。其它 3 大 runtime(OpenCode / Codex / Gemini)各
80
+ 离开 Claude Code 寸步难行。其它两大受支持 runtime(OpenCode / Codex)各
74
81
  有原生等价或兼容层,但今天无人对接。
75
82
 
76
83
  **B. 单会话污染与状态不原子**:
@@ -103,13 +110,13 @@ Hermes(Ultra Builder Pro)是一套成熟的 agent 工程系统:
103
110
 
104
111
  | # | 目标 | 可验证条件 | 归属 Phase |
105
112
  |---|------|-----------|----------|
106
- | G1 | Hermes 在 Claude / OpenCode / Codex / Gemini 四 runtime 原生可用 | 每 runtime 能跑完整 `init→research→plan→dev→test` | 4 |
113
+ | G1 | Hermes 在 Claude / OpenCode / Codex 三个 runtime 原生可用 | 每 runtime 能跑完整 `init→research→plan→dev→test` | 4 |
107
114
  | G2 | 状态权威源单一、并发安全 | SQLite + WAL;20 worker 并发 updateTaskStatus 无丢失 | 2 |
108
115
  | G3 | `tasks.json` / context md 降级为投影,state.db 权威 | 所有写入走 state-db;JSON/MD 自动再生成(D18) | 2 |
109
116
  | G4 | 每 task 独立会话(新进程 + 独立 worktree + lease),对话不污染 | 2 并发 session 各独立 worktree;kill -9 后 lease 过期可清理 | **4.5** |
110
117
  | G5 | 跨 session 事件可订阅 | MCP `session.subscribe_events` 从 state-db events 表实时推 | **4.5** |
111
118
  | 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 |
119
+ | G7 | Memory 与代码图谱由外部 provider 完成,Ultra 只保存可追溯引用 | 三个 runtime 的 context manifest 都只含 provider 元数据,不复制 provider 内容 | 6, 7 |
113
120
  | G8 | PRD 自动拆 task + 并行分派(8A + 8B) | 10 task 的 PRD 一键触发,≤3 失败项,其余自动完成并合入 | **8A, 8B** |
114
121
  | G9 | 三渠道可装(npm / Homebrew / pip) | 干净 macOS / Ubuntu 60 秒装好 | 9 |
115
122
  | G10 | 0 私人数据泄漏 | npm tarball / brew bottle / pip wheel 审计干净 | 9 |
@@ -139,7 +146,7 @@ Hermes(Ultra Builder Pro)是一套成熟的 agent 工程系统:
139
146
  │ Skill 层 (知识 / 说明书) │
140
147
  │ runtime 原生发现 │
141
148
  │ Claude: ~/.claude/skills/ OpenCode: ~/.config/opencode │
142
- │ Codex: ~/.agents/skills/ Gemini: extension/skills/ │
149
+ │ Codex: ~/.agents/skills/ │
143
150
  │ │
144
151
  │ ┌─ SKILL.md ──────────────────────────────┐ │
145
152
  │ │ - 何时使用 │ │
@@ -252,7 +259,7 @@ v0.2 加执行层进阶(recovery + 监控 + 实时图谱)→ 半自动 → v
252
259
  │ ▼ TDD RED/GREEN/REFACTOR (调 impact.radius + memory.recall)
253
260
  │ ▼ review: MCP review.run → 5 个 subagent 并行
254
261
  │ │ │
255
- │ │ ▼ (Phase 6) RTK 压缩 + telemetry
262
+ │ │ ▼ (Phase 6) telemetry
256
263
  │ │
257
264
  │ ▼ task.update_status completed + commit
258
265
  │ ▼ activity-log: task_complete(id=1, commit=abc)
@@ -308,12 +315,10 @@ ultra-builder-pro-cli/
308
315
  │ └── recovery.ts # Phase 5 circuit-breaker
309
316
  ├── telemetry/ # Phase 6
310
317
  │ ├── collectors/ # token / tool_call / cost
311
- │ └── rtk-integration.ts
312
318
  ├── adapters/ # Phase 4 跨 runtime 分发
313
319
  │ ├── claude.ts
314
320
  │ ├── opencode.ts
315
321
  │ ├── codex.ts
316
- │ ├── gemini.ts
317
322
  │ └── _shared/
318
323
  ├── hooks/ # Python hooks 沿用
319
324
  │ ├── *.py (15)
@@ -342,7 +347,7 @@ ultra-builder-pro-cli/
342
347
  | A6 | 事件流 = state-db `events` 表(append-only)+ MCP subscribe | 取代 activity-log.json 文件;state-db 统一权威源(D18) |
343
348
  | A7 | Python hooks 沿用,Node shell out | 15 hook 重写 Node 要 2-3 周纯折腾;零价值 |
344
349
  | A8 | orchestrator 是可选的常驻 Node daemon | 规则层可不依赖执行层独立跑;半自动 → 全自动平滑升级 |
345
- | A9 | RTK / code-review-graph / hindsight 全部作为 **MCP tool** 暴露 | 不自建等价功能;它们都是 MIT + MCP 友好 |
350
+ | A9 | Memory 与代码图谱全部归外部 provider 所有 | Ultra 只存 provider、project、reference、revision、indexed_head、status 等元数据引用,不内嵌内容或自建等价能力 |
346
351
  | **A10** | **v0.1 = 规则层 + execution-lite**(非裸规则层) | Codex Q3:用户核心诉求是"独立会话",无执行层 v0.1 不够用;D19 |
347
352
  | **A11** | **Schema v4.4 → v4.5 过渡(不直接 v5 breaking)** | Codex Q5:tasks.json 成 authoritative view,context status 降级派生,停止手写保留兼容;等命令全迁完再 v5;D21 |
348
353
  | **A12** | **Runtime capability matrix + conformance tests** 代替纸面 parity | Codex Q8:4 runtime 在 hook / subagent / 权限 / usage 统计不等价;D23 |
@@ -374,7 +379,6 @@ ultra-builder-pro-cli/
374
379
 
375
380
  | 能力 | 来源 | 加到哪 | Phase | 工时 |
376
381
  |------|------|-------|-------|-----:|
377
- | RTK Bash 命令压缩(60-90%) | RTK | `rtk init -g` + hook 注册 | 6 | 0.5d |
378
382
  | 爆炸半径分析(8x 减少) | code-review-graph | MCP `impact.*` tool | 7 | 2d |
379
383
  | 长期记忆(retain/recall/reflect) | hindsight | MCP `memory.*` tool | 7 | 5d |
380
384
  | Skill 自动萃取 + 注入 | OMC | `/learn` 扩展;dev 起步读匹配 skill | 7 | 2d |
@@ -473,7 +477,7 @@ ultra-builder-pro-cli/
473
477
 
474
478
  **1.3 Skill manifest 规范**(0.5 天)
475
479
  - `spec/skill-manifest.schema.json` — 所有 skill 的 frontmatter 规范:
476
- - name / description / runtime(Claude/OpenCode/Codex/Gemini/all)/
480
+ - name / description / runtime(Claude/OpenCode/Codex/all)/
477
481
  mcp_tools_required / cli_fallback / complexity_hint(Haiku/Sonnet/Opus)
478
482
  - **AC**:现有 18 skill 的 frontmatter 校验通过(≥90%,其余写 migration note)。
479
483
 
@@ -666,7 +670,7 @@ CLI"。消除对 Claude 独占工具的硬依赖。
666
670
  做目录搭建 + 空 tasks.json 写入。
667
671
  - `ultra-tools/commands/init.cjs`:CLI 兜底做同样事情。
668
672
  - 三层都能完成 init → AC 对齐 CLAUDE 下今天的 init 行为。
669
- - **AC**:在 Claude / OpenCode / Codex / Gemini 任一 runtime 下跑 init,
673
+ - **AC**:在 Claude / OpenCode / Codex 任一 runtime 下跑 init,
670
674
  产出的 `.ultra/` 目录与当前 Hermes 的 init 输出 diff-equal。
671
675
 
672
676
  **3.2 `/ultra-research` 迁移**(1 天)
@@ -701,7 +705,7 @@ CLI"。消除对 Claude 独占工具的硬依赖。
701
705
  - **AC**:全 9 命令迁完。
702
706
 
703
707
  **3.7 AGENTS.md 统一上下文**(1 天)
704
- - 合并 `CLAUDE.md` / `AGENTS.md` / `GEMINI.md` 为统一 **规则注入文件**
708
+ - 合并 `CLAUDE.md` / `AGENTS.md` 为统一 **规则注入文件**
705
709
  (命名:每 runtime 的原生 context 文件,但内容相同)。
706
710
  - 内容:三层架构说明 + 关键 MCP tool 清单 + CLI 命令表 + skill 发现路径。
707
711
  - 这是 OMX "scope guard" 能力(§5.2)。
@@ -709,9 +713,9 @@ CLI"。消除对 Claude 独占工具的硬依赖。
709
713
 
710
714
  **3.8 Python hooks 三分拆**(1 天)
711
715
  - 按原 PLAN v0.1 的 Phase 3 做:core/ + adapters/(claude / opencode /
712
- codex / gemini.py)
716
+ codex)
713
717
  - **AC**:Claude hooks 行为字节级一致;OpenCode/Codex 只接 2 个可达事件
714
- (§5.4);Gemini 降级 prompt guard(文档化)。
718
+ (§5.4)。
715
719
 
716
720
  #### Phase 3 gate
717
721
 
@@ -723,8 +727,8 @@ CLI"。消除对 Claude 独占工具的硬依赖。
723
727
 
724
728
  ### Phase 4 — 跨 runtime 分发
725
729
 
726
- **目标**:让 skill/MCP/CLI 三层正确安装到 Claude / OpenCode / Codex / Gemini
727
- 四 runtime。包含 MCP server 注册、skill 拷贝、CLI PATH、runtime-specific 转换。
730
+ **目标**:让 skill/MCP/CLI 三层正确安装到 Claude / OpenCode / Codex
731
+ 三个 runtime。包含 MCP server 注册、skill 拷贝、CLI PATH、runtime-specific 转换。
728
732
 
729
733
  **前置**:Phase 3(三层可用)
730
734
 
@@ -736,8 +740,8 @@ CLI"。消除对 Claude 独占工具的硬依赖。
736
740
 
737
741
  **4.1 共享 adapter 工具**(1 天)
738
742
  - `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%。
743
+ `path-rewrite.ts` — 从 v0.1 PLAN §6.2.1 继承。
744
+ - **AC**:共享模块单元测试覆盖率 ≥85%。
741
745
 
742
746
  **4.2 Claude adapter**(1 天)
743
747
  - `~/.claude/{skills,commands,agents,hooks}` 直接拷贝。
@@ -760,18 +764,11 @@ CLI"。消除对 Claude 独占工具的硬依赖。
760
764
  - MCP server 注册到 `config.toml [mcp_servers]`。
761
765
  - **AC**:config.toml 合法;`codex exec "run /ultra-init"` 成功。
762
766
 
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
767
  **4.6a Runtime capability matrix + v0.1 smoke flow**(1 天,**D33 收敛**)
771
- - `docs/RUNTIME-COMPAT-MATRIX.md`:列 4 runtime × ~25 能力点:
768
+ - `docs/RUNTIME-COMPAT-MATRIX.md`:列 3 runtime × ~25 能力点:
772
769
  - 问答:AskUserQuestion / CLI menu / MCP `ask.question`
773
770
  - Hook 事件:每 runtime 的可用事件名单 + payload 形状
774
- - Subagent:Claude Task / Codex spawn_agent / Gemini preview / OpenCode @mention
771
+ - Subagent:Claude Task / Codex spawn_agent / OpenCode @mention
775
772
  - Usage 统计:token / cost 能否拿到
776
773
  - MCP:stdio 稳定性 / HTTP 支持
777
774
  - Skill 发现路径
@@ -780,23 +777,23 @@ CLI"。消除对 Claude 独占工具的硬依赖。
780
777
  - `tests/conformance/<runtime>/` v0.1 基线:**每 runtime 1-2 条 smoke flow**
781
778
  - Flow 1: `install → /ultra-init → task.create → 读投影 tasks.json → uninstall`
782
779
  - Flow 2: `/ultra-dev 1` 通过 session.spawn 起 session → 关
783
- - **AC**:matrix 文档完整;4 runtime × 2 smoke = 8 testcase 全绿
780
+ - **AC**:matrix 文档完整;3 runtime × 2 smoke = 6 testcase 全绿
784
781
 
785
782
  **4.6b Full conformance suite**(1 天,**D45 2026-04-17 完成**)
786
- - ✅ 每 runtime 5 capability 完整测试 = 20 testcase(+ 8 原 smoke 保留 = 28)
783
+ - ✅ 每 runtime 5 capability 完整测试 = 15 testcase(+ 6 smoke 保留 = 21)
787
784
  - ✅ `tests/conformance/_capabilities.cjs` 共享 assertion;各 runtime `conformance.test.cjs` 注入 runtime-specific config
788
- - ✅ `resolveTarget()` contract test(21 tests,4 runtime × 5 scenario)
785
+ - ✅ `resolveTarget()` contract test(15 tests,3 runtime × 5 scenario)
789
786
  - ✅ Phase 4 review backlog 全清(6 P2 + 5 P3 → D45)— 含 `_source` 搬到 sibling `_ubp` 的 env 泄漏修复
790
787
 
791
788
  **4.7 install.js 真实装配**(0.5 天)
792
789
  - 从 Phase 0 stub 升级为真调用 adapter。
793
- - `--claude/--opencode/--codex/--gemini/--all` + `--local/--global` + `--uninstall`。
790
+ - `--claude/--opencode/--codex/--all` + `--local/--global` + `--uninstall`。
794
791
  - 幂等:跑两次 install diff = 空。
795
- - **AC**:4 runtime × 2 scope = 8 条安装路径全绿;uninstall 后目录干净。
792
+ - **AC**:3 runtime × 2 scope = 6 条安装路径全绿;uninstall 后目录干净。
796
793
 
797
794
  #### Phase 4 gate
798
795
 
799
- - 4 runtime 下 `/ultra-init` 都能跑通
796
+ - 3 runtime 下 `/ultra-init` 都能跑通
800
797
  - Claude diff-equal 基线通过
801
798
  - runtime-compat-matrix 20 conformance testcase 全绿
802
799
  - `docs/RUNTIME-COMPAT-MATRIX.md` 完整产出
@@ -943,16 +940,16 @@ agent 并行,orchestrator 负责 session 隔离和状态一致。
943
940
 
944
941
  **前置**:Phase 5(session 是监控的归属单位)
945
942
 
946
- **置信度**:93%(RTK 成熟;埋点是标准工程)
943
+ **置信度**:93%(埋点与结构化事件是标准工程)
947
944
 
948
945
  **工时**:3-4 天
949
946
 
950
947
  #### 任务清单
951
948
 
952
- **6.1 RTK 集成**(0.5 天)
953
- - install.js 完工时检测 rtk 二进制 → 调 `rtk init -g` 注册 PreToolUse hook。
954
- - 无 rtk → 提示安装 + 跳过(不硬依赖)。
955
- - **AC**:Claude 下 `cargo test` 输出 token 压缩 60%+。
949
+ **6.1 外部能力边界**(0.5 天)
950
+ - 安装器不检测、不注册、也不代理任何通用 shell 压缩工具。
951
+ - Memory 与代码图谱由独立 provider 安装和运行;Ultra 只消费显式传入的元数据引用。
952
+ - **AC**:干净环境安装不产生第三方命令代理配置,context manifest 不包含外部 provider 的内容正文。
956
953
 
957
954
  **6.2 Telemetry collectors**(1.5 天)
958
955
  - `telemetry/collectors/token.ts`:从 activity-log + session log 抽 token
@@ -983,9 +980,9 @@ agent 并行,orchestrator 负责 session 隔离和状态一致。
983
980
  返回准确依赖集(10 文件项目的命中率 ≥95%)
984
981
 
985
982
  **6.5 Runtime stdout 拦截(可选)**(1 天)
986
- - orchestrator spawn agent 时拦截 stdout,解析 Anthropic/OpenAI/Gemini
983
+ - orchestrator spawn agent 时拦截 stdout,解析 Anthropic/OpenAI
987
984
  SDK 的 usage 字段(若可达)。
988
- - 更精准的 token 统计(不依赖 rtk 推测)。
985
+ - 更精准的 token 统计(不依赖命令输出压缩推测)。
989
986
  - **AC**:对一个已知 token 数的 task 做 E2E,telemetry 与官方 usage 误差 <5%。
990
987
 
991
988
  #### Phase 6 gate
@@ -993,7 +990,7 @@ agent 并行,orchestrator 负责 session 隔离和状态一致。
993
990
  - ✅ telemetry 覆盖率:每 MCP tool 调用 100% 有埋点(state.db.telemetry + jsonl 双写)
994
991
  - ✅ `/ultra-status --cost` panel 数字可信(token → pricing 表 → cost_usd 推算;SDK usage 精确对账推迟 6.5)
995
992
  - ✅ code-review-graph watcher 实时增量测试过(debounce + exclude + large_batch 6 tests)
996
- - ⤼ 6.5 Runtime stdout 拦截按 PLAN 原文"可选"skip 至 v0.3+(YAGNI:RTK + pricing 估算对大多数场景已够)
993
+ - ⤼ 6.5 Runtime stdout 拦截按 PLAN 原文“可选”跳过(YAGNI:宿主 usage 与 pricing 估算已覆盖当前需求)
997
994
  - ✅ **Phase 6 完成 — D44**(2026-04-17)
998
995
 
999
996
  ---
@@ -1200,8 +1197,8 @@ files_modified 重叠检测 + 自动合并。这是 "coding 工厂" 的**后端*
1200
1197
  #### 任务清单
1201
1198
 
1202
1199
  **9.1 CI 矩阵**(1 天)
1203
- - GitHub Actions:`{claude, opencode, codex, gemini} × {local, global}`
1204
- = 8 jobs + `rtk / code-review-graph / hindsight` 可选集成测试。
1200
+ - GitHub Actions:`{claude, opencode, codex} × {local, global}`
1201
+ = 6 jobs + 外部 provider 引用边界测试。
1205
1202
  - **AC**:所有矩阵单元绿,每周定时跑一次(catch runtime 上游变更)。
1206
1203
 
1207
1204
  **9.2 README 重写**(0.5 天)
@@ -1275,7 +1272,7 @@ CREATE INDEX events_task ON events(task_id, id);
1275
1272
  CREATE TABLE sessions (
1276
1273
  sid TEXT PRIMARY KEY,
1277
1274
  task_id TEXT,
1278
- runtime TEXT, -- claude|opencode|codex|gemini
1275
+ runtime TEXT, -- claude|opencode|codex
1279
1276
  pid INTEGER,
1280
1277
  worktree_path TEXT,
1281
1278
  artifact_dir TEXT,
@@ -1567,7 +1564,7 @@ Week 18 buffer(ship 中任何 Phase 的 25% 滑动吃掉)
1567
1564
  最终 commit 独立。
1568
1565
  4. **事件传播**:agent A 完成 task 1 后,≤1s 内 agent B 通过 MCP 看到。
1569
1566
  5. **崩溃恢复**:kill -9 跑 dev 的 agent,重启后能续或熔断。
1570
- 6. **Token 压缩**:RTK 启用后 Bash 命令 token 减少 ≥60%。
1567
+ 6. **Provider 边界**:Memory 与图谱正文不进入 Ultra state.db 或发布包,只保留可追溯元数据引用。
1571
1568
  7. **记忆召回**:跨 session retain → recall 命中率 ≥90%。
1572
1569
  8. **PRD 自动拆**:2KB PRD 自动拆与人工 ≥80% 一致。
1573
1570
  9. **并行工厂**:10 task PRD 自动完成率 ≥80%。
@@ -1592,7 +1589,7 @@ Week 18 buffer(ship 中任何 Phase 的 25% 滑动吃掉)
1592
1589
  | # | 日期 | 决策 | 证据 |
1593
1590
  |---|------|------|------|
1594
1591
  | D1 | 2026-04-17 | 分发-adapter 路线(不自建 agent) | 用户选;get-shit-done 14 runtime 验证 |
1595
- | D2 | 2026-04-17 | 首发 runtime:Claude + OpenCode + Codex + Gemini | 用户选 |
1592
+ | D2 | 2026-04-17 | 当前 runtime:Claude + OpenCode + Codex | 0.6.0 收敛后的支持边界 |
1596
1593
  | D3 | 2026-04-17 | 包名 `ultra-builder-pro-cli`,短名 `ubp` | 用户选 |
1597
1594
  | D4 | 2026-04-17 | 发布渠道:npm + Homebrew + pip | 用户选 |
1598
1595
  | D5 | 2026-04-17 | 销毁旧 git,main 重建 | 用户选;历史存 bundle |
@@ -1601,11 +1598,11 @@ Week 18 buffer(ship 中任何 Phase 的 25% 滑动吃掉)
1601
1598
  | D8 | 2026-04-17 | settings.json 精简为最小合并模板 | 隐私安全 |
1602
1599
  | D9 | 2026-04-17 | README 改写延 Phase 9 | 不阻塞开发 |
1603
1600
  | 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) |
1601
+ | D11 | 2026-04-17 | 基于官方文档重做 §5 + Phase 2/3 + §9 + §10 | OpenCode、Codex 与 Claude Code 的官方命令、配置、skill、hook 和 subagent 文档 |
1605
1602
  | **D12** | **2026-04-17** | **采用 skill + MCP + CLI 三层架构**,skill=说明书、MCP=状态操作主路径、CLI=Bash 兜底 | 参考 CTM(MCP 模式)+ OMC/OMX(skill 模式)+ get-shit-done(CLI 模式);三层分工覆盖 "knowledge / state / hook" 三类需求 |
1606
1603
  | **D13** | **2026-04-17** | **规则层 / 执行层双时间线交付**(Phase 1-4 规则层 → v0.1;Phase 5-8 执行层 → v0.2-v0.3) | 用户明确"规则 vs 自动化执行"的维度;降低单次发布复杂度;早让用户拿到可用价值 |
1607
1604
  | **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 周纯折腾无价值 |
1605
+ | **D15** | **2026-04-17** | 外部 Memory / 图谱能力采用 provider 引用,不自建等价实现 | 避免复制第三方能力与内容,让 Ultra 聚焦 change workflow 与收敛证据 |
1609
1606
  | **D16** | **2026-04-17** | GSD / GSD-2 的 **atomic-write / state-machine / ctx.newSession / DISPATCH_RULES** 直接移植(不自建) | 已在 14 runtime 实战;用户确认"可以先集成,混合" |
1610
1607
  | **D17** | **2026-04-17** | Phase 3 消除 **tasks.json 与 context 的 status 双写**(原 v4.4 → v5.0,**后被 D21 覆盖为 v4.5 过渡**) | 用户指痛点"异步效果不好"根因之一 |
1611
1608
  | **D18** | **2026-04-17** | **权威状态层 = `.ultra/state.db` SQLite + WAL**,md/json 降级为投影/导出视图 | Codex Q1:多主写入是最大架构风险;SQLite 提供事务 + 并发读;tasks.json/activity-log/sessions/workflow-state 多文件各管一摊易炸 |
@@ -1631,15 +1628,17 @@ Week 18 buffer(ship 中任何 Phase 的 25% 滑动吃掉)
1631
1628
  | **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
1629
  | **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
1630
  | **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 待用户环境验 |
1631
+ | **D41** | **2026-04-17** | **Phase 4 初始跨 runtime 分发里程碑** — adapter、能力矩阵、smoke flow 与 installer 装配首次闭环;0.6.0 后只保留 Claude Code、OpenCode、Codex 三个 native plugin | 历史里程碑;当前边界由 D51 覆盖 |
1635
1632
  | **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 增量更新 |
1633
+ | **D45** | **2026-04-17** | **Phase 4 backlog 与 full conformance 完工** — 共享 capability assertions、三宿主 install/MCP/hook/skill/idempotency 覆盖与 `resolveTarget` 合约形成自动化防护网 | 当前三宿主 conformance 继续保留并由退役回归契约补强 |
1634
+ | **D44** | **2026-04-17** | **Phase 6 完成** — 三宿主 pricing/telemetry、成本面板与早期 code-graph watcher 落地 | 后续由外部 provider 边界取代内置 watcher |
1638
1635
  | **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
1636
  | **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
1637
  | **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
1638
  | **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
1639
  | **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 回归测试共同锁定边界 |
1640
+ | **D51** | **2026-07-17** | **runtime 收敛为 Claude Code、OpenCode、Codex**:删除第四 runtime 的 adapter、安装参数、collab skill、prompt、schema、pricing、调度与测试面;`ultra-verify` 改为当前宿主主责加单一只读外部顾问 | 用户确认不再需要第四 runtime;0.6.0 退役契约阻止其重新进入活跃源码或发布包 |
1641
+ | **D52** | **2026-07-17** | **初始交付后进入持续变更闭环**:新增 `ultra-change` / `ultra-doctor`、change/context/artifact/trace/incident/projection/consumer 状态、delta-first spec、确定性 convergence 与 baseline reconciliation;删除内置 code-graph watcher 和通用命令代理,Memory/图谱只保留外部 provider 元数据引用 | 用户确认采用最佳组合落地;解决日常小改导致 spec/context 漂移、投影失败静默和异常无恢复证据的问题 |
1643
1642
 
1644
1643
  ---
1645
1644
 
@@ -1651,8 +1650,8 @@ Week 18 buffer(ship 中任何 Phase 的 25% 滑动吃掉)
1651
1650
  - **activity-log**:**state.db `events` 表**(v0.3 起不再是文件);append-
1652
1651
  only 事件流;Phase 2 建立,全程消费;`.ultra/activity-log.json` 是可选
1653
1652
  只读导出。
1654
- - **AGENTS.md**:各 runtime 原生的项目上下文文件(Claude 叫 CLAUDE.md,
1655
- Gemini 叫 GEMINI.md);Phase 3.7 统一注入。
1653
+ - **AGENTS.md**:各 runtime 原生的项目上下文文件(Claude 使用 CLAUDE.md);
1654
+ Phase 3.7 统一注入。
1656
1655
  - **DISPATCH_RULES**:GSD-2 的声明式分派规则表,Phase 8B 移植。
1657
1656
  - **Execution-lite**:v0.1 发布的最小执行层 = session 标准单元 + admission
1658
1657
  + event subscribe + 活跃会话可见;Phase 4.5 / D19。
@@ -1663,9 +1662,9 @@ Week 18 buffer(ship 中任何 Phase 的 25% 滑动吃掉)
1663
1662
  - **规则层 / 执行层**:§4.2;Phase 1-4 / Phase 4.5-8。
1664
1663
  - **Session**:GSD-2 模式升级版(D20):新进程 + 独立 worktree + lease/
1665
1664
  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 建立。
1665
+ - **state.db**:`.ultra/state.db` SQLite + WAL 数据库,所有 Ultra workflow
1666
+ 状态的权威源;当前 15 表,新增 changes/artifacts/context_snapshots/
1667
+ trace_links/incidents/projection_jobs/event_consumers;Phase 2 建立,D52 扩展。
1669
1668
  - **三层架构**:§4.1;skill(知识,只读发现)+ MCP(状态操作主路径)+
1670
1669
  CLI(兜底)。
1671
1670
  - **staleness**:task 的 spec 被改后,未开工的 pending task 自动标记