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
package/CHANGELOG.md CHANGED
@@ -7,6 +7,83 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.7.0] — 2026-07-17
11
+
12
+ ### Added
13
+
14
+ - Added `ultra-change` and `ultra-doctor` as native workflows on Claude Code,
15
+ OpenCode, and Codex. Daily fixes, features, redesigns, and incidents now stay
16
+ attached to an explicit change packet after the initial baseline delivery.
17
+ - Added seven `change.*` MCP tools and `system.doctor`, advancing the live MCP
18
+ contract to 29 tools and `.ultra/state.db` to schema `9.0` with 15 tables for
19
+ changes, artifacts, context snapshots, trace links, incidents, projection
20
+ jobs, and durable event-consumer cursors.
21
+ - Added deterministic convergence and archive gates for task completion, spec
22
+ deltas, tests, documentation impact, review evidence, context freshness, and
23
+ baseline reconciliation.
24
+
25
+ ### Changed
26
+
27
+ - `task.init_project` now initializes `state.db` immediately and creates active
28
+ and archived change roots. `tasks.json` remains a generated projection.
29
+ - MCP mutations now commit authority first, enqueue a durable projection job,
30
+ process it, and expose projection status in MCP metadata instead of silently
31
+ swallowing projection failures.
32
+ - Session-start and edit hooks now understand initialized baselines and active
33
+ changes. Health checks surface incidents, projection lag, orphan sessions,
34
+ and missing change artifacts; direct writes to the task projection remain
35
+ blocked even outside a command-scoped workflow.
36
+ - Memory and code-graph content are exclusively owned by separately installed
37
+ providers. Ultra accepts only provider metadata references in compiled change
38
+ contexts and never stores recalled content, graph payloads, or embeddings.
39
+
40
+ ### Fixed
41
+
42
+ - Wired spec-staleness consumption, crash recovery, projection processing, and
43
+ durable cursors into the real orchestrator loop instead of leaving production
44
+ helpers unconsumed.
45
+ - Kept `intent.md` synchronized with authoritative change updates, linked task
46
+ status events to their newly assigned change, and included `plan.export`
47
+ events in projection accounting.
48
+ - Added atomic projection claims and backup-first recovery for failed or stale
49
+ interrupted jobs so a crashed projector cannot remain invisibly `running`.
50
+ - Kept all three native plugin bundles, MCP launchers, agents, hooks, commands,
51
+ and user-handbook renderings on one explicit Ultra-owned asset allowlist.
52
+
53
+ ### Removed
54
+
55
+ - Removed the internal filesystem graph watcher and its dependency; external
56
+ graph providers own indexing and refresh.
57
+ - Removed the retired command-proxy detector, installer option, managed handbook
58
+ block, cache artifacts, prompts, configuration, and documentation surface.
59
+ - Stopped publishing the archived pre-CLI manual in the npm package; it remains
60
+ repository history and cannot be mistaken for an active plugin contract.
61
+
62
+ ## [0.6.0] — 2026-07-17
63
+
64
+ ### Changed
65
+
66
+ - Reduced the supported host matrix to Claude Code, OpenCode, and Codex.
67
+ - Reworked `ultra-verify` into independent two-model verification: the current
68
+ host remains primary, one read-only external advisor supplies a second view,
69
+ and evidence rather than model voting determines confidence.
70
+ - Restricted orchestrator routing, MCP session/event inputs, telemetry writes,
71
+ state schema enums, installer flags, package metadata, and handbooks to the
72
+ three supported runtimes.
73
+
74
+ ### Removed
75
+
76
+ - Removed the retired fourth-runtime adapter, installer surface, extension and
77
+ conformance packaging, pricing entries, collaboration companion, and all
78
+ active Ultra prompts and documentation that offered it as an advisor.
79
+
80
+ ### Fixed
81
+
82
+ - Added a retirement regression contract so unsupported runtimes cannot
83
+ re-enter active source, package, schema, prompt, or generated plugin surfaces.
84
+ - Rejects unsupported runtime labels before state, event, or telemetry writes,
85
+ including old databases whose historical SQLite constraints were broader.
86
+
10
87
  ## [0.5.3] — 2026-07-17
11
88
 
12
89
  ### Fixed
@@ -59,7 +136,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
59
136
 
60
137
  - Added first-class native Claude Code and OpenCode plugin builders alongside
61
138
  the Codex personal plugin. All hosts build from one explicit runtime asset
62
- allowlist; Gemini remains a compatibility extension using the same boundary.
139
+ allowlist; the then-supported compatibility extension used the same boundary.
63
140
  - Added `ubp-handbook` for previewed, backed-up managed-block integration with
64
141
  user-level Claude `CLAUDE.md`, Codex `AGENTS.md`, and OpenCode `AGENTS.md`.
65
142
  - Added `ultra-tools legacy-memory inspect|archive|prune`; prune requires the
@@ -87,7 +164,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
87
164
  with the npm package, and fixed `session.subscribe_events` sid filtering.
88
165
  - Aligned session/plan input schemas with runtime behavior, including circuit
89
166
  breaker output, session spawn intent semantics, and removal of ignored inputs.
90
- - Bundled Gemini's compatibility MCP runtime durably and restored project-local
167
+ - Bundled the compatibility MCP runtime durably and restored project-local
91
168
  `.ultra/state.db` ownership across all adapters.
92
169
  - Exported the documented `ultra-tools` executable and included every README
93
170
  documentation target in the npm tarball.
@@ -164,8 +241,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
164
241
 
165
242
  - D49 tech-debt sweep: stale Phase comments (`"scheduled for Phase 1"`,
166
243
  `"not implemented in Phase 3.1"`) replaced with accurate `unknown verb`
167
- messages; `docs/ROADMAP.md` status table synchronized; `.gitignore`
168
- excludes `.rtk/` local filter cache.
244
+ messages; `docs/ROADMAP.md` status table synchronized.
169
245
 
170
246
  ### Tests
171
247
 
@@ -176,13 +252,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
176
252
 
177
253
  ### Added
178
254
 
179
- - **Phase 6 — monitoring + live code graph** (D44): RTK soft-dependency hook
180
- (`adapters/_shared/rtk-detect.cjs`) with `--skip-rtk` flag and install hint;
181
- token / cost telemetry with per-runtime pricing table, `telemetry` table +
255
+ - **Phase 6 — monitoring + live code graph** (D44): token / cost telemetry
256
+ with per-runtime pricing table, `telemetry` table +
182
257
  daily `.ultra/telemetry/YYYY-MM-DD.jsonl`; `ultra-tools status --cost`
183
258
  panel with by-runtime / by-task / by-session aggregation; chokidar-based
184
- code-graph watcher with debounce / awaitWriteFinish / batch thresholds,
185
- opt-in via `--with-graph-watcher`.
259
+ then-experimental incremental graph watcher with debounce and batch thresholds.
186
260
  - **Phase 5 — execution resilience** (D43): `recovery.cjs` boot-time orphan
187
261
  scan using live PID probe; `circuit_breaker` table with `recordTaskFailure`
188
262
  counter and `resetCircuitBreaker` escape hatch; spec-change staleness
@@ -193,8 +267,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
193
267
  - **Phase 4.6b — full conformance suite** (D45): 4 runtime × 5 capability
194
268
  (command / skills / hooks / MCP + no `env._source` leak / install idempotency)
195
269
  = 20 additional conformance tests; table-driven `resolve-target.test.cjs`
196
- (21 tests) covering `configDir > env > home/cwd` precedence + Gemini
197
- extensionRoot append; schema bump 5.2 → 7.1 alongside memory store.
270
+ (21 tests) covering `configDir > env > home/cwd` precedence and extension
271
+ root resolution; schema bump 5.2 → 7.1 alongside memory store.
198
272
 
199
273
  ### Changed
200
274
 
@@ -213,9 +287,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
213
287
  admission control with takeover / resume / abandon strategies (D33).
214
288
  - **Phase 4 — cross-runtime distribution** (D41, `5aa1fd0`): shared adapter
215
289
  toolkit (`adapters/_shared/` — file-ops / frontmatter / settings-merge /
216
- path-rewrite / md-to-toml); 4 runtime adapters (Claude sentinel-block
290
+ path-rewrite / md-to-toml); the initial runtime adapters (Claude sentinel-block
217
291
  settings.json merge; OpenCode `opencode.json.mcp`; Codex `config.toml`
218
- marker-block + prompts/; Gemini `extensions/ultra-builder-pro/` package);
292
+ marker-block + prompts/; plus the then-supported compatibility package);
219
293
  `docs/RUNTIME-COMPAT-MATRIX.md` with 10-section capability matrix;
220
294
  install / uninstall round-trip tests + idempotency.
221
295
  - **Phase 3 — thin-shell commands** (D40, `b3d1797`): 9 commands migrated
@@ -232,7 +306,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
232
306
  skill manifest, CLI protocol + mapping table; 5 spec validators.
233
307
  - **Phase 0 — skeleton**: multi-runtime installer scaffolding.
234
308
 
235
- [Unreleased]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.5.3...HEAD
309
+ [Unreleased]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.7.0...HEAD
310
+ [0.7.0]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.6.0...v0.7.0
311
+ [0.6.0]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.5.3...v0.6.0
236
312
  [0.5.3]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.5.2...v0.5.3
237
313
  [0.5.2]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.5.1...v0.5.2
238
314
  [0.5.1]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.5.0...v0.5.1
package/README.md CHANGED
@@ -2,13 +2,13 @@
2
2
 
3
3
  Multi-runtime plugin suite + autonomous coding factory for the Ultra Builder Pro
4
4
  agent engineering system. It ships native plugins for **Claude Code · OpenCode ·
5
- Codex**, retains a compatibility adapter for Gemini CLI, and orchestrates PRD →
5
+ Codex** and orchestrates PRD →
6
6
  dependency graph → parallel session execution → auto-merge with a single
7
7
  authoritative `.ultra/state.db`.
8
8
 
9
9
  <div align="center">
10
10
 
11
- [![Version](https://img.shields.io/badge/version-0.5.3-blue)](./CHANGELOG.md)
11
+ [![Version](https://img.shields.io/badge/version-0.7.0-blue)](./CHANGELOG.md)
12
12
  [![Tests](https://img.shields.io/badge/tests-passing-brightgreen)](#verification)
13
13
  [![License: MIT](https://img.shields.io/badge/license-MIT-green)](./LICENSE)
14
14
  [![Node](https://img.shields.io/badge/node-%E2%89%A522-informational)](./package.json)
@@ -23,18 +23,23 @@ authoritative `.ultra/state.db`.
23
23
 
24
24
  - **Builds host-native plugins from one allowlist.** Claude Code, OpenCode, and
25
25
  Codex receive their own command/skill, agent, hook, and MCP representation.
26
- Gemini remains a compatibility adapter; uninstall is symmetric.
26
+ Install and uninstall are symmetric on every supported host.
27
27
  - **Shares state across runtimes.** `.ultra/state.db` (SQLite + WAL) is the
28
- authoritative source for tasks, sessions, events, and telemetry. `tasks.json`
29
- and context markdown are generated projections, not handwritten.
28
+ authoritative source for changes, tasks, sessions, events, incidents,
29
+ projection jobs, and telemetry. `tasks.json` and context markdown are
30
+ generated projections, not handwritten.
30
31
  - **Keeps memory ownership explicit.** Ultra Builder Pro does not collect
31
32
  prompts, transcripts, observations, summaries, or cross-session memory.
32
33
  Install cloud-mem/claude-mem separately if persistent memory is wanted.
33
34
  - **Runs real PRDs end-to-end.** `task.parse_prd` → `lib/topo.cjs` waves →
34
35
  `.ultra/execution-plan.json` → parallel worktree sessions → auto-merge back.
35
- - **Observes without overhead.** Per-task / per-session / per-runtime token
36
- and cost telemetry; live code-review-graph watcher on file save;
37
- subscribe-events cursor for real-time dashboards.
36
+ - **Keeps daily work convergent.** `/ultra-change` creates a bounded delta and
37
+ context manifest; `/ultra-deliver` requires docs/test/review evidence and
38
+ baseline reconciliation before archive. `/ultra-doctor` reports incidents,
39
+ projection lag, orphan sessions, and backup-first mechanical recovery.
40
+ - **Keeps external context external.** Memory and code-graph providers retain
41
+ their own content; Ultra stores only provider/project/revision/status metadata
42
+ references in a compiled change context.
38
43
 
39
44
  ## Quickstart
40
45
 
@@ -43,7 +48,6 @@ authoritative `.ultra/state.db`.
43
48
  npx ultra-builder-pro-cli --claude --local
44
49
  npx ultra-builder-pro-cli --opencode --local
45
50
  npx ultra-builder-pro-cli --codex --local
46
- npx ultra-builder-pro-cli --gemini --local
47
51
 
48
52
  # Or blanket-install to every supported runtime you have
49
53
  npx ultra-builder-pro-cli --all --local
@@ -58,9 +62,8 @@ npx ultra-builder-pro-cli --all --local --uninstall
58
62
  After install, start a new host session/task and point it at the project.
59
63
  Claude Code and OpenCode expose native command forms. Codex exposes the same workflows as namespaced plugin
60
64
  skills such as `$ultra-builder-pro:ultra-init`, `$ultra-builder-pro:ultra-plan`,
61
- and `$ultra-builder-pro:ultra-dev`; `command-map.json` records the nine legacy
62
- command mappings (`ultra-review` remains a directly invocable skill). Gemini
63
- retains its compatibility command form.
65
+ and `$ultra-builder-pro:ultra-dev`; `command-map.json` records the eleven legacy
66
+ command mappings (`ultra-review` remains a directly invocable skill).
64
67
  See [`docs/RUNTIME-COMPAT-MATRIX.md`](./docs/RUNTIME-COMPAT-MATRIX.md)
65
68
  for per-runtime capabilities.
66
69
 
@@ -70,30 +73,31 @@ for per-runtime capabilities.
70
73
  |-------|---------|----------------|
71
74
  | **skill** (`skills/ultra-*/`) | Knowledge — prompts, workflows, prose | Runtime's native skill/prompt loader picks them up after install |
72
75
  | **MCP** (`mcp-server/`) | Authoritative state — reads/writes `.ultra/state.db` via stdio JSON-RPC | Primary path for task / session / event / plan operations |
73
- | **CLI** (`ultra-tools`, `bin/*`) | Shell fallback for CI and non-MCP contexts | `ultra-tools task init-project`, `ubp-orchestrator run`, `ultra-tools status --cost` |
76
+ | **CLI** (`ultra-tools`, `bin/*`) | Selected initialization, recovery, diagnostics, and orchestration surfaces | `ultra-tools task init-project`, `ultra-tools system doctor`, `ubp-orchestrator run` |
74
77
 
75
- The three layers share one `.ultra/state.db`. See
78
+ The layers share one `.ultra/state.db`, but the CLI is not a mirror of every MCP
79
+ tool: continuous change mutations are MCP-only and fail closed. See
76
80
  [`docs/ARCHITECTURE.md`](./docs/ARCHITECTURE.md) for the full contract and
77
- [`spec/cli-protocol.md`](./spec/cli-protocol.md) for the 21 live contracts.
81
+ [`spec/cli-protocol.md`](./spec/cli-protocol.md) for the 29 live contracts.
78
82
  Review, impact discovery, skill resolution, and user interaction stay on each
79
83
  Host's native surfaces; the generated Codex capability map documents those
80
84
  replacements without advertising non-existent MCP tools.
81
85
 
82
- The package boundary is deliberate: ten public Ultra workflow skills, four
86
+ The package boundary is deliberate: twelve public Ultra workflow skills, four
83
87
  internal review-rule skills, and host-specific collaboration companions. Browser,
84
88
  deployment, skill-discovery, and framework guidance belong to their original plugins.
85
89
 
86
90
  ## Runtime capability matrix
87
91
 
88
- | Feature | Claude Code | OpenCode | Codex CLI | Gemini CLI |
89
- |------------------------------|:-----------:|:--------:|:---------:|:----------:|
90
- | Custom commands | ✅ | ✅ | ✅ | ✅ |
91
- | Skill loader | ✅ | ✅ | ✅ (personal plugin) | ✅ |
92
- | MCP server (stdio) | ✅ | ✅ | ✅ (plugin `.mcp.json`) | ✅ |
93
- | Workflow hooks | ✅ (native plugin) | ✅ (native JS plugin) | ✅ (native plugin) | ⚠︎ compatibility only |
94
- | Sub-agents | ✅ | ✅ | ✅ (9 native TOML agents) | ⚠︎ |
95
- | Session worktree isolation | ✅ (all runtimes; driven by `orchestrator/session-runner.cjs`) | ✅ | ✅ | ✅ |
96
- | Parallel dispatch + auto-merge | ✅ (`ubp-orchestrator run`) | ✅ | ✅ | ✅ |
92
+ | Feature | Claude Code | OpenCode | Codex CLI |
93
+ |------------------------------|:-----------:|:--------:|:---------:|
94
+ | Custom commands | ✅ | ✅ | ✅ |
95
+ | Skill loader | ✅ | ✅ | ✅ (personal plugin) |
96
+ | MCP server (stdio) | ✅ | ✅ | ✅ (plugin `.mcp.json`) |
97
+ | Workflow hooks | ✅ (native plugin) | ✅ (native JS plugin) | ✅ (native plugin) |
98
+ | Sub-agents | ✅ | ✅ | ✅ (9 native TOML agents) |
99
+ | Session worktree isolation | ✅ (driven by `orchestrator/session-runner.cjs`) | ✅ | ✅ |
100
+ | Parallel dispatch + auto-merge | ✅ (`ubp-orchestrator run`) | ✅ | ✅ |
97
101
 
98
102
  Full details in [`docs/RUNTIME-COMPAT-MATRIX.md`](./docs/RUNTIME-COMPAT-MATRIX.md)
99
103
  (10 sections, with per-runtime deviations called out).
@@ -101,30 +105,33 @@ Full details in [`docs/RUNTIME-COMPAT-MATRIX.md`](./docs/RUNTIME-COMPAT-MATRIX.m
101
105
  ## Typical workflow
102
106
 
103
107
  ```bash
104
- # 1. Initialize a project (writes .ultra/ skeleton; state.db stays lazy)
108
+ # 1. Initialize a project (writes .ultra/ skeleton and initializes state.db)
105
109
  ultra-tools task init-project --name myapp
106
110
 
107
111
  # 2. Turn a PRD into a task graph + execution plan (human-gate via dry-run)
108
112
  # (invoked by /ultra-plan skill or via MCP task.parse_prd + plan.export)
109
113
 
110
114
  # 3. Run the plan — parallel sessions, auto-merge back to main on success
111
- ubp-orchestrator run --with-graph-watcher
115
+ ubp-orchestrator run
112
116
 
113
- # 4. Monitor cost and progress
117
+ # 4. Monitor cost, progress, and runtime health
114
118
  ultra-tools status
115
119
  ultra-tools status --cost --since 24h
116
120
  ultra-tools session list --json
121
+ ultra-tools system doctor
117
122
  ```
118
123
 
119
124
  Or let the skills drive it. In Codex, invoke
120
125
  `$ultra-builder-pro:ultra-plan` → `$ultra-builder-pro:ultra-dev` →
121
- `$ultra-builder-pro:ultra-status`; other runtimes retain their native command form.
126
+ `$ultra-builder-pro:ultra-status`; after the baseline is delivered, daily work
127
+ starts with `$ultra-builder-pro:ultra-change`. Other runtimes retain their
128
+ native command form.
122
129
 
123
130
  ## CLI surface
124
131
 
125
132
  | Binary | Purpose |
126
133
  |--------|---------|
127
- | `ultra-builder-pro-cli` / `ubp` | Installer — `--claude / --opencode / --codex / --gemini / --all`, `--local / --global`, `--uninstall`, `--skip-rtk` |
134
+ | `ultra-builder-pro-cli` / `ubp` | Installer — `--claude / --opencode / --codex / --all`, `--local / --global`, `--uninstall` |
128
135
  | `ubp-orchestrator` | Session dispatch daemon — `run`, `start`, `stop`, `status` |
129
136
  | `ultra-tools` | State-layer CLI — `task`, `session`, `status`, `db`, `migrate`; explicit `legacy-memory` archive/prune migration |
130
137
  | `ubp-handbook` | Preview/apply the managed Ultra contract in `CLAUDE.md` / `AGENTS.md`, with backup |
@@ -171,7 +178,7 @@ Individual suites: `test:state`, `test:orch`, `test:spec`, `test:rest`.
171
178
 
172
179
  | Doc | What's in it |
173
180
  |-----|--------------|
174
- | [`docs/PLAN.zh-CN.md`](./docs/PLAN.zh-CN.md) | Authoritative 12-phase execution plan (zh-CN) — decisions, risks, timeline |
181
+ | [`docs/PLAN.zh-CN.md`](./docs/PLAN.zh-CN.md) | Historical 12-phase plan and decision log with a current-boundary overlay |
175
182
  | [`docs/ROADMAP.md`](./docs/ROADMAP.md) | One-page English roadmap + phase status |
176
183
  | [`docs/ARCHITECTURE.md`](./docs/ARCHITECTURE.md) | Single-page system architecture |
177
184
  | [`docs/AGENT-CONTEXT.md`](./docs/AGENT-CONTEXT.md) | Canonical runtime context contract |
@@ -179,7 +186,6 @@ Individual suites: `test:state`, `test:orch`, `test:spec`, `test:rest`.
179
186
  | [`docs/RUNTIME-COMPAT-MATRIX.md`](./docs/RUNTIME-COMPAT-MATRIX.md) | Per-runtime capability matrix |
180
187
  | [`docs/STATE-DB-ACCESS-POLICY.md`](./docs/STATE-DB-ACCESS-POLICY.md) | Multi-process write contract |
181
188
  | [`docs/COMMIT-HASH-BACKFILL.md`](./docs/COMMIT-HASH-BACKFILL.md) | Two-commit task-completion flow |
182
- | [`docs/LEGACY-HERMES.md`](./docs/LEGACY-HERMES.md) | Archived pre-CLI "Hermes 6.6" documentation |
183
189
  | [`CHANGELOG.md`](./CHANGELOG.md) | v0.1 → current release notes |
184
190
 
185
191
  ## License
@@ -66,7 +66,6 @@ const COMMAND_NAMES = Object.freeze(CORE_PUBLIC_SKILLS.filter((name) => name !==
66
66
  const SKILL_REFERENCE_NAMES = Object.freeze([
67
67
  ...COMMAND_NAMES,
68
68
  'cc-collab',
69
- 'gemini-collab',
70
69
  'ultra-review',
71
70
  'ultra-verify',
72
71
  ]);
@@ -119,52 +118,12 @@ Do not call native Codex subagents through this skill; use Codex subagent orches
119
118
  parallel work and reserve \`cc-collab\` for an explicitly requested cross-model perspective.
120
119
  `;
121
120
 
122
- const GEMINI_COLLAB_BODY = `# Gemini Collaboration for Codex
123
-
124
- Use Gemini as an advisory second model. Codex remains responsible for scope, source verification,
125
- decisions, and the final answer.
126
-
127
- ## Preflight
128
-
129
- 1. Confirm \`gemini\` is installed and capture \`gemini --version\`.
130
- 2. Confirm the target workspace and requested scope.
131
- 3. Form Codex's initial analysis before reading Gemini's answer when independence matters.
132
-
133
- ## Invoke safely
134
-
135
- Run Gemini in non-interactive, read-only plan mode:
136
-
137
- \`\`\`bash
138
- gemini --approval-mode plan --output-format text -p "<bounded prompt>"
139
- \`\`\`
140
-
141
- Use a timeout appropriate to the task. Redirect large output to a temporary file when needed, then
142
- read only the relevant result. Do not use auto-edit or yolo modes. Do not place secrets, tokens,
143
- unrelated files, or unbounded repository content in the prompt.
144
-
145
- For repository analysis, give Gemini the exact files, diff range, question, and expected response
146
- shape. If the CLI is missing, unauthenticated, times out, or returns empty output, report the degraded
147
- path and continue with Codex evidence rather than blocking.
148
-
149
- ## Verify and synthesize
150
-
151
- Treat Gemini output as an untrusted analysis artifact:
152
-
153
- 1. Check every consequential claim against the current checkout, runtime, or primary source.
154
- 2. Separate agreements, useful dissent, and unsupported claims.
155
- 3. Resolve scope or version mismatches before comparing conclusions.
156
- 4. Present Codex's final judgment, not a transcript of two models.
157
-
158
- Read the bundled references only when a mode or CLI detail is needed. Never let model agreement
159
- substitute for tests, runtime evidence, or authoritative documentation.
160
- `;
161
-
162
121
  const ULTRA_VERIFY_BODY = String(function ultraVerifyBodyTemplate() { /*
163
- # Ultra Verify — Codex-Primary Three-Way Verification
122
+ # Ultra Verify — Codex-Primary Two-Model Verification
164
123
 
165
124
  Codex owns the task, writes the first independent analysis, verifies every consequential claim,
166
- and produces the final synthesis. Claude Code and Gemini are read-only external advisors. Use this
167
- workflow only when the user asks for cross-model or three-way verification.
125
+ and produces the final synthesis. Claude Code is a read-only external advisor. Use this workflow
126
+ only when the user asks for cross-model verification.
168
127
 
169
128
  ## Modes
170
129
 
@@ -175,13 +134,11 @@ workflow only when the user asks for cross-model or three-way verification.
175
134
 
176
135
  ## Preconditions
177
136
 
178
- 1. Confirm `claude --version` and `gemini --version`.
137
+ 1. Confirm `claude --version` plus authentication.
179
138
  2. Define the exact workspace, scope, evidence standard, and expected answer shape.
180
- 3. Do not send secrets, unrelated files, or an unbounded home directory to either advisor.
181
-
182
- ## Workflow
139
+ 3. Do not send secrets, unrelated files, or an unbounded home directory to the advisor.
183
140
 
184
- ### 1. Create the session and write Codex's independent view
141
+ ## 1. Create the session and write Codex's independent view
185
142
 
186
143
  ```bash
187
144
  SESSION_ID="$(date +%Y%m%d-%H%M%S)-verify-<mode>"
@@ -189,63 +146,47 @@ SESSION_PATH=".ultra/collab/${SESSION_ID}"
189
146
  mkdir -p "${SESSION_PATH}"
190
147
  ```
191
148
 
192
- Before invoking either advisor, write the evidence-backed Codex analysis to
193
- `${SESSION_PATH}/codex-analysis.md`. This ordering is mandatory because it prevents the external
194
- answers from priming the primary analysis.
195
-
196
- ### 2. Launch Claude Code and Gemini concurrently
149
+ Write the evidence-backed Codex analysis to `${SESSION_PATH}/codex-analysis.md` before reading
150
+ the external answer. Record the mode, scope, checkout, and evidence boundary.
197
151
 
198
- Give both advisors the same bounded raw question and evidence, without Codex's conclusions.
152
+ ## 2. Launch Claude Code read-only
199
153
 
200
- Claude Code:
154
+ Give Claude Code the bounded raw question and evidence without Codex's conclusions.
201
155
 
202
156
  ```bash
203
- claude --safe-mode -p "<BOUNDED_PROMPT>" \\
204
- --permission-mode plan \\
205
- --tools "Read,Grep,Glob,Bash" \\
206
- --output-format text \\
207
- --no-session-persistence \\
208
- > "${SESSION_PATH}/claude-output.md" \\
157
+ claude --safe-mode -p "<BOUNDED_PROMPT>" \
158
+ --permission-mode plan \
159
+ --tools "Read,Grep,Glob,Bash" \
160
+ --output-format text \
161
+ --no-session-persistence \
162
+ > "${SESSION_PATH}/claude-output.md" \
209
163
  2> "${SESSION_PATH}/claude-error.log"
210
164
  ```
211
165
 
212
- Gemini:
213
-
214
- ```bash
215
- gemini --approval-mode plan --output-format text -p "<BOUNDED_PROMPT>" \\
216
- > "${SESSION_PATH}/gemini-output.md" \\
217
- 2> "${SESSION_PATH}/gemini-error.log"
218
- ```
219
-
220
- Start the two commands with parallel `exec_command` calls and a short initial yield. If a command
221
- returns a live session id, poll it with `write_stdin` in bounded intervals. Do not use YOLO,
222
- auto-edit, permission bypass, or write-capable external tools.
166
+ Run the command in a yielded shell session. Do not enable permission bypass, mutation tools,
167
+ background writes, or session persistence.
223
168
 
224
- ### 3. Collect only completed outputs
169
+ ## 3. Collect completed output
225
170
 
226
- Wait for both CLI sessions to finish or reach their explicit timeout. The bundled
227
- `scripts/verify_wait.py` can verify file stability for automation, but Codex must not perform one
228
- blocking wait longer than 60 seconds. Read an output only when it is non-empty; retain the matching
229
- error log as evidence when a CLI fails.
171
+ The bundled `scripts/verify_wait.py` checks output stability. Poll yielded sessions in bounded
172
+ intervals and never hold one blocking tool call longer than 60 seconds. Read the output only when
173
+ it is non-empty; retain the error log when the advisor fails.
230
174
 
231
- ### 4. Verify and synthesize
175
+ ## 4. Verify and synthesize
232
176
 
233
- Compare `codex-analysis.md`, `claude-output.md`, and `gemini-output.md`:
177
+ Compare `codex-analysis.md` and `claude-output.md`:
234
178
 
235
179
  1. Verify claims against the current checkout, runtime, tests, or primary documentation.
236
- 2. Separate consensus, majority views, useful dissent, and unsupported assertions.
237
- 3. Explain scope, version, or assumption differences before scoring agreement.
180
+ 2. Separate verified agreement, useful dissent, and unsupported assertions.
181
+ 3. Explain scope, version, or assumption differences before judging the result.
238
182
  4. Write `${SESSION_PATH}/synthesis.md` and `metadata.json`, then present one Codex-owned answer.
239
183
 
240
- Use the bundled confidence rules. Three agreeing, independently verified views are consensus; two
241
- are a majority; three materially different answers are no consensus and require decomposition or
242
- more evidence. Model agreement never overrides failing tests or authoritative runtime evidence.
184
+ Model agreement never overrides failing tests or authoritative runtime evidence.
243
185
 
244
186
  ## Degraded operation
245
187
 
246
- - One advisor fails: continue with Codex plus the available advisor and name the missing view.
247
- - Both advisors fail: return Codex-only analysis with an explicit single-source warning.
248
- - Never block the user's task solely because an external CLI is absent, unauthenticated, or slow.
188
+ - Advisor failure: return Codex-only analysis with an explicit single-source warning.
189
+ - Never block the user's task solely because the external CLI is absent, unauthenticated, or slow.
249
190
 
250
191
  ## Session files
251
192
 
@@ -254,70 +195,16 @@ more evidence. Model agreement never overrides failing tests or authoritative ru
254
195
  codex-analysis.md
255
196
  claude-output.md
256
197
  claude-error.log
257
- gemini-output.md
258
- gemini-error.log
259
198
  metadata.json
260
199
  synthesis.md
261
200
  ```
262
201
 
263
- Read the bundled references for mode-specific prompts, scoring, metadata, and automation details.
264
- */ }).match(/\/\*([\s\S]*?)\*\//)[1].trim();
265
-
266
- const ULTRA_VERIFY_FLOW = String(function ultraVerifyFlowTemplate() { /*
267
- # Codex-Native Orchestration Flow
268
-
269
- ## 1. Primary analysis
270
-
271
- Create `.ultra/collab/<SESSION_ID>/` and write `codex-analysis.md` before reading any external
272
- answer. Record the mode, scope, checkout, and evidence boundary.
273
-
274
- ## 2. Parallel advisors
275
-
276
- Launch Claude Code in `--safe-mode --permission-mode plan` and Gemini in
277
- `--approval-mode plan` through separate `exec_command` calls. Redirect their output to
278
- `claude-output.md` and `gemini-output.md`. If a call yields a session id, poll with
279
- `write_stdin` in bounded intervals; do not grant either advisor mutation authority.
280
-
281
- ## 3. Completion gate
282
-
283
- Proceed only after both sessions have completed or timed out. For automation, run:
284
-
285
- ```bash
286
- python3 ~/plugins/ultra-builder-pro/skills/ultra-verify/scripts/verify_wait.py \\
287
- "${SESSION_PATH}" --timeout 1200
288
- ```
289
-
290
- Run the waiter as a yielded exec session and poll it; never hold one blocking tool call for more
291
- than 60 seconds. Its JSON reports `claude` and `gemini` as `complete`, `failed`, `empty`, or
292
- `pending`.
293
-
294
- ## 4. Synthesis
295
-
296
- Read `codex-analysis.md` plus each completed advisor output. Verify consequential claims, compute
297
- consensus using `confidence-system.md`, and write `synthesis.md` plus:
298
-
299
- ```json
300
- {
301
- "id": "<SESSION_ID>",
302
- "agent": "ultra-verify",
303
- "mode": "<mode>",
304
- "models": {"codex": "<primary>", "claude": "<advisor>", "gemini": "<advisor>"},
305
- "scope": "<scope>",
306
- "timestamp": "<ISO 8601>",
307
- "confidence": "<consensus|majority|no_consensus>",
308
- "degraded": false
309
- }
310
- ```
311
-
312
- If one advisor fails, cap the result at majority and name the missing perspective. If both fail,
313
- set `degraded: true`, `agents_responded: ["codex"]`, and mark the result single-source.
202
+ Read the bundled references for mode-specific evidence and confidence guidance.
314
203
  */ }).match(/\/\*([\s\S]*?)\*\//)[1].trim();
315
-
316
204
  function titleCase(name) {
317
205
  const special = {
318
206
  'ai-collab-base': 'AI Collaboration Base',
319
207
  'cc-collab': 'Claude Code Collaboration',
320
- 'gemini-collab': 'Gemini Collaboration',
321
208
  'use-railway': 'Use Railway',
322
209
  };
323
210
  if (special[name]) return special[name];
@@ -600,8 +487,6 @@ and does not require an interactive MCP or legacy CLI menu.
600
487
  }
601
488
 
602
489
  function adaptUltraVerifyAsset(input, rel) {
603
- if (rel === path.join('references', 'orchestration-flow.md')) return ULTRA_VERIFY_FLOW;
604
-
605
490
  let text = adaptHostText(String(input), '');
606
491
  if (rel === path.join('scripts', 'verify_wait.py')) {
607
492
  text = text.replaceAll('Codex', 'Claude Code');
@@ -621,7 +506,6 @@ function adaptUltraVerifyAsset(input, rel) {
621
506
  text = text.replaceAll('"codex": "<model>"', '"claude": "<advisor>"');
622
507
  text = text.replaceAll('["claude"]', '["codex"]');
623
508
  text = text.replaceAll('Claude Code-only', 'Codex-only');
624
- text = text.replaceAll('Gemini and Claude Code in parallel (native parallel execution)', 'Claude Code and Gemini concurrently');
625
509
  text = text.replaceAll('run_in_background', 'native concurrent execution');
626
510
  text = text.replaceAll('Bash tool', '`exec_command`');
627
511
  text = text.replaceAll('Read tool', 'targeted file reads');
@@ -661,7 +545,7 @@ function adaptHostText(input, skillName = '') {
661
545
  text = adaptCodexPrimaryText(text, skillName);
662
546
  }
663
547
 
664
- if (skillName === 'gemini-collab' || skillName === 'ai-collab-base') {
548
+ if (skillName === 'ai-collab-base') {
665
549
  text = text.replaceAll("Claude's", "Codex's");
666
550
  text = text.replaceAll('Claude-only', 'Codex-only');
667
551
  text = text.replaceAll('Claude ', 'Codex ');
@@ -716,8 +600,7 @@ function adaptHostText(input, skillName = '') {
716
600
  function adaptedDescription(sourceDescription, targetName) {
717
601
  const special = {
718
602
  'cc-collab': 'Ask Claude Code for an independent read-only analysis while Codex owns verification and synthesis. Use only when the user explicitly requests CC or Claude Code collaboration.',
719
- 'gemini-collab': 'Ask Gemini CLI for an independent read-only analysis while Codex verifies and synthesizes. Use only when the user explicitly requests Gemini collaboration.',
720
- 'ultra-verify': 'Run Codex-primary three-way verification with read-only Claude Code and Gemini advisors, then verify and synthesize the evidence.',
603
+ 'ultra-verify': 'Run Codex-primary two-model verification with a read-only Claude Code advisor, then verify and synthesize the evidence.',
721
604
  'ultra-dev': 'Execute one Ultra task with Codex-native TDD, persistent task.update state, workflow checkpoints, and the native Ultra review agents.',
722
605
  'learn': 'Extract one reusable pattern from the current Codex task into a valid user skill, with explicit user approval before writing.',
723
606
  };
@@ -730,7 +613,6 @@ function buildSkillMarkdown(sourceText, sourceName, targetName) {
730
613
  const { fm, body } = parseFrontmatter(sourceText);
731
614
  let adaptedBody;
732
615
  if (targetName === 'cc-collab') adaptedBody = CC_COLLAB_BODY;
733
- else if (targetName === 'gemini-collab') adaptedBody = GEMINI_COLLAB_BODY;
734
616
  else if (targetName === 'ultra-verify') adaptedBody = ULTRA_VERIFY_BODY;
735
617
  else adaptedBody = adaptHostText(body, targetName);
736
618
  return yaml.dump({
@@ -745,7 +627,6 @@ function buildOpenAiYaml(name, description) {
745
627
  COMMAND_NAMES.includes(name)
746
628
  || INTERNAL_SKILLS.has(name)
747
629
  || name === 'cc-collab'
748
- || name === 'gemini-collab'
749
630
  || name.startsWith('ultra-')
750
631
  );
751
632
  const short = description.replace(/\s+/g, ' ').trim().slice(0, 63).replace(/[\s.,;:]+$/, '');
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  // YAML frontmatter parsing / serialization for markdown assets.
4
- // Every runtime adapter consumes this — OpenCode lowercases keys,
5
- // Gemini extracts description for toml, Claude preserves verbatim.
4
+ // Every runtime adapter consumes this — OpenCode lowercases keys while
5
+ // Claude Code and Codex preserve their native metadata contracts.
6
6
 
7
7
  const yaml = require('js-yaml');
8
8