ultra-builder-pro-cli 3.0.2 → 5.0.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 (41) hide show
  1. package/.ultra-template/contexts/TEMPLATE.md +6 -0
  2. package/CHANGELOG.md +73 -1
  3. package/README.md +126 -36
  4. package/README.zh-CN.md +440 -0
  5. package/adapters/_shared/host-profile.cjs +3 -151
  6. package/adapters/_shared/plugin-core.cjs +57 -0
  7. package/adapters/_shared/runtime-assets.cjs +64 -12
  8. package/bin/delegate-worker.cjs +2 -345
  9. package/bin/delegate.cjs +3 -530
  10. package/docs/ARCHITECTURE.md +59 -18
  11. package/docs/ARTIFACT-AUTHORITY.md +21 -5
  12. package/docs/DECISIONS.md +31 -10
  13. package/docs/PLUGIN-ISOLATION-CONTRACT.md +28 -12
  14. package/docs/RUNTIME-COMPAT-MATRIX.md +101 -22
  15. package/docs/SKILL-AUTHORING.md +15 -3
  16. package/docs/WORKFLOW-LIFECYCLE.md +83 -29
  17. package/docs/evals/ultra-5-0-journey-results.md +62 -0
  18. package/docs/evals/ultra-5-0-live-acp-conformance.md +93 -0
  19. package/docs/evals/ultra-5-0-route-journeys.md +145 -0
  20. package/package.json +2 -1
  21. package/skills/ultra-change/SKILL.md +30 -4
  22. package/skills/ultra-delegate/SKILL.md +80 -7
  23. package/skills/ultra-delegate/patches/zcode-acp-0.1.0-zcode-0.16.5.patch +184 -0
  24. package/skills/ultra-delegate/references/delegation-contract.md +60 -1
  25. package/skills/ultra-delegate/scripts/acp-conformance.cjs +287 -0
  26. package/skills/ultra-delegate/scripts/acp-driver.cjs +762 -0
  27. package/skills/ultra-delegate/scripts/agent-execution-driver.cjs +320 -0
  28. package/skills/ultra-delegate/scripts/cli-driver.cjs +61 -0
  29. package/skills/ultra-delegate/scripts/delegate-worker.cjs +328 -0
  30. package/skills/ultra-delegate/scripts/delegate.cjs +690 -0
  31. package/skills/ultra-delegate/scripts/host-profile.cjs +267 -0
  32. package/skills/ultra-deliver/SKILL.md +13 -0
  33. package/skills/ultra-dev/SKILL.md +18 -2
  34. package/skills/ultra-init/SKILL.md +12 -0
  35. package/skills/ultra-plan/SKILL.md +21 -3
  36. package/skills/ultra-research/SKILL.md +33 -5
  37. package/skills/ultra-status/SKILL.md +37 -7
  38. package/skills/ultra-status/references/route-contract.md +100 -0
  39. package/skills/ultra-test/SKILL.md +16 -1
  40. /package/{adapters/_shared → skills/ultra-delegate/scripts}/delegate-profiles/kimi-read-only.md +0 -0
  41. /package/{adapters/_shared → skills/ultra-delegate/scripts}/delegate-profiles/kimi-write.md +0 -0
@@ -24,7 +24,7 @@ When workflow-route signals conflict, consumers resolve them in this order:
24
24
  2. the current accepted North Star and the active Change intent;
25
25
  3. the current owner-issued Execution Grant — `session-local` while its conversation
26
26
  activation is live, or a `durable work-package` grant a fresh Agent has stably
27
- verified — its scope, budget, and allowed workflows;
27
+ verified — its exact Change, modes, effects, topology, budget, and stop conditions;
28
28
  4. the task ledger, task acceptance, planned paths, and dependencies;
29
29
  5. the current validated Review SUMMARY verdict;
30
30
  6. current evidence and Test observations;
@@ -42,6 +42,11 @@ scope, or budget, and it cannot promote P2/P3 findings into blockers or reopen a
42
42
  review that returned a current verdict. Historical reviews, progress records, and
43
43
  Hook observations are provenance only.
44
44
 
45
+ The Route Card is a projection of this precedence, not another layer in it. Its Route,
46
+ Mode, Position, Exit condition, Delta, and Next fields are recalculated from the same
47
+ authorities and current observations whenever a public Skill enters, pauses, exits, or
48
+ transitions.
49
+
45
50
  A formal terminal outcome — an accepted result, an owner decision, an external
46
51
  blocker, a review-budget stop, or an abandonment — outranks every Resume, Hook, or
47
52
  Status suggestion that appears to continue the same work. Review stays inside the
@@ -81,11 +86,18 @@ whatever length keeps the owner able to judge:
81
86
  4. **Delta** — what materially changed since the last checkpoint.
82
87
  5. **Reality** — how far the live path actually works; what is still fake, unknown,
83
88
  or unverified.
84
- 6. **Decision needed** — what the owner must decide now; omit the section when
85
- nothing is genuinely blocking.
89
+ 6. **Decision needed** — what the owner must decide now; a Route Card says `none` when
90
+ nothing is genuinely blocking, while a free-form handoff may omit the section.
86
91
  7. **Next bounded action** — the smallest authorized next step.
87
92
  8. **Not done** — what remains owed when stopping or pausing.
88
93
 
94
+ The canonical
95
+ [`UBP Route Card`](../skills/ultra-status/references/route-contract.md#route-card) adds
96
+ four navigation fields — Route, Mode, Position, and Exit condition — around these eight
97
+ semantics. It is emitted output only: it has no canonical project path, never becomes a
98
+ route ledger, and cannot grant continuation. Counts and transport events may explain
99
+ Position or Reality but cannot produce a semantic completion verdict.
100
+
89
101
  A checkpoint is a cognitive interface, not a mechanical stage marker: no line count,
90
102
  token budget, or coverage percentage gates it, and alignment failure ("I don't know
91
103
  what you are doing", or the same concept re-explained repeatedly) stops execution and
@@ -168,6 +180,7 @@ Pure file state uses three mechanisms:
168
180
 
169
181
  A state field records a mechanically checkable fact. Route selection remains a model
170
182
  judgment. Do not add a workflow-position field merely to decide which Skill should run.
183
+ The Route Card is derived each time and is disposable in exactly this sense.
171
184
 
172
185
  At most one Change is active in one worktree. Zero active Changes is valid before a new
173
186
  request and after delivery; completed current tasks may remain active while awaiting
@@ -275,7 +288,9 @@ decisions.
275
288
  After interruption or host change:
276
289
 
277
290
  1. identify the repository root and current `HEAD`;
278
- 2. resolve zero or one active `change_id`, then read `.ultra/tasks.json`;
291
+ 2. resolve zero or one active `change_id`, then read `.ultra/tasks.json`; if authority
292
+ resolution returns a typed conflict or unavailable observation, stop semantic writes
293
+ but keep Status recovery diagnosis reachable without selecting an ambiguous intent;
279
294
  3. select only matching tasks and read the frontier task's full context and closing Resume Note;
280
295
  4. read the Project Brief, accepted North Star, `CONTEXT.md`, relevant decisions, active
281
296
  Change, specifications, and evidence;
@@ -283,7 +298,8 @@ After interruption or host change:
283
298
  6. rely only on ledger task status; preserve any legacy context Status or Complexity as
284
299
  a migration diagnostic, and use the explicit recorded reopen before repairing an
285
300
  invalid completed task's current v2 evidence or task-review bindings;
286
- 7. continue through the next observable acceptance boundary.
301
+ 7. derive a fresh Route Card and continue only through the next observable acceptance
302
+ boundary covered by the current owner instruction or valid Execution Grant.
287
303
 
288
304
  Hooks and the `ubp` executable may be unavailable. Recovery must still work through
289
305
  these files and Git alone.
package/docs/DECISIONS.md CHANGED
@@ -24,6 +24,19 @@ exact grant (see `.ultra/decisions/2026-08-17-ultra-builder-pro-3.0-mode-b.md`);
24
24
  file, status, Hook, or Resume note ever implies activation. Optional Graph/Loop
25
25
  coordination layers own observations only and none is integrated.
26
26
 
27
+ ## Ultra 5.0 workflow projection (accepted 2026-08-25)
28
+
29
+ The owner accepted the 5.0 scope and interaction boundary in
30
+ `.ultra/decisions/2026-08-25-ultra-5-0-scope.md`; the versioned contract is
31
+ `docs/ULTRA-BUILDER-PRO-5.0.zh-CN.md`. One shared Route Contract projects the existing
32
+ owner-checkpoint semantics into every public Skill without adding route state. Research
33
+ has explicit baseline and grant-continuable Change-scoped modes; Change makes
34
+ intake/evidence/reconcile/accepted visible and permits only same-Change non-material
35
+ reconciliation under a valid grant; Plan returns product evidence gaps through Change.
36
+ Host invocation bits remain coarse discovery metadata and every Skill rechecks mode,
37
+ grant, effects, and material checkpoints. Team Pack, remote shared assets, a semantic
38
+ state machine, daemon, and resident ACP service remain outside 5.0.
39
+
27
40
  ## Primary transfer between Agents (r3, accepted 2026-08-17)
28
41
 
29
42
  A work package's canonical writer moves to another Agent only through an
@@ -58,13 +71,13 @@ ownership of route and meaning.
58
71
 
59
72
  ## Three Skill roles
60
73
 
61
- The product exposes eight user workflows, five model-invoked disciplines, and one
62
- router. Public workflows require explicit owner selection by default. Research, Plan,
63
- Dev, Test, and Deliver reconciliation have one narrow exception: an activated
64
- Change-scoped execution grant may let the model select the next covered workflow —
65
- session-local activation in the current conversation, or a stably verified durable
66
- work-package grant. A model discipline needs at least two canonical callers or it is
67
- inlined.
74
+ The product exposes eight owner-invocable public workflows, five model-invoked
75
+ disciplines, and one router. Public modes are `explicit-entry` or
76
+ `grant-continuable`. Scoped Research, same-Change reconciliation, Plan, Dev, Test, and
77
+ Deliver reconciliation may be selected under an activated Change-scoped execution
78
+ grant — session-local activation in the current conversation, or a stably verified
79
+ durable work-package grant. All other public modes stay explicit-entry; Status stays
80
+ owner-invoked and read-only. A model discipline needs at least two canonical callers or it is inlined.
68
81
 
69
82
  This keeps reusable reasoning in one place without turning it into another user-facing
70
83
  route or custom-agent registry.
@@ -136,6 +149,11 @@ Directory position and explicit fields record mechanically checkable facts. The
136
149
  model reads those facts and chooses the next route. There is no persisted “current
137
150
  workflow stage” whose value can override the actual files.
138
151
 
152
+ The `UBP Route Card` is the owner-visible projection of those facts: it adds Route,
153
+ Mode, Position, and Exit condition around the eight accepted checkpoint semantics. It
154
+ is derived at public boundaries, has no canonical path, and provides neither completion
155
+ nor continuation authority.
156
+
139
157
  Task status lives only in the `ultra-task-ledger-v2` row and is read back there. New task
140
158
  contexts do not duplicate it; legacy context Status and Complexity fields remain
141
159
  migration diagnostics and the ledger wins. Tasks retain a stable `change_id` in the
@@ -186,11 +204,14 @@ their repair is authorization scoped to the exact command digest.
186
204
 
187
205
  ## Delegation is a process boundary
188
206
 
189
- `ubp delegate run` starts a supported CLI with an immutable instruction, explicit
190
- permission JSON, and named worktree. Their exact digest-bound sources are embedded in
207
+ The installed `ultra-delegate/scripts/delegate.cjs` starts a supported CLI with an
208
+ immutable instruction, explicit permission JSON, and named worktree. Its exact
209
+ digest-bound sources are embedded in
191
210
  the worker prompt because some native sandboxes correctly deny reads outside the
192
211
  worktree. Files remain the cross-host state; the embedded copy is transport, not another
193
- authority. The parent reads a stable terminal result instead of worker chatter.
212
+ authority. The parent reads a stable terminal result instead of worker chatter. The
213
+ package `ubp delegate` surface is a one-release compatibility import of that same
214
+ launcher, not a second implementation or a runtime installation requirement.
194
215
  Delegation adds no semantic store and no authority. The instruction selects task
195
216
  execution, scoped Research evidence, or aggregate Change review/verification; only task
196
217
  execution requires a task row.
@@ -1,19 +1,25 @@
1
1
  # Plugin isolation contract
2
2
 
3
- Ultra Builder Pro owns a narrow install surface and becomes active only in a project
4
- that contains `.ultra/` or when the owner explicitly invokes an Ultra Skill.
3
+ Ultra Builder Pro owns a narrow install surface. Installation and discovery create no
4
+ project authority. A public workflow becomes active only through an explicit owner
5
+ entry or one mode covered by a currently valid Execution Grant; Hooks separately use
6
+ the presence of `.ultra/` as their idle guard.
5
7
 
6
8
  ## Owned surfaces
7
9
 
8
10
  Per host, Ultra may install:
9
11
 
10
12
  - exactly fourteen managed Skills;
13
+ - the launcher, worker, Host profile, and launch-only profile assets below the managed
14
+ `ultra-delegate/scripts/` Skill directory;
11
15
  - exactly five hook scripts plus `_common.py` and any required wire adapter;
12
16
  - one native plugin manifest or entrypoint;
13
17
  - provenance and managed-ownership markers;
14
18
  - the host's native registry entry where required.
15
19
 
16
- The package also owns `ubp delegate run`, its worker, and rule-side Skill references.
20
+ For one release cycle the package also owns thin `ubp delegate` launcher/worker
21
+ compatibility imports. They execute the Skill-local implementation and contain no
22
+ forked behavior.
17
23
 
18
24
  ## Surfaces Ultra does not own
19
25
 
@@ -29,9 +35,10 @@ Ultra must not create or rewrite:
29
35
 
30
36
  ## Installation lifecycle
31
37
 
32
- Install builds a complete staging tree, marks it managed, writes provenance, then
33
- atomically publishes it. An existing unmanaged target is never overwritten. Reinstall
34
- replaces only the managed tree. Doctor is read-only. Uninstall removes only assets
38
+ Install builds a complete staging tree, including the Skill-local delegation runtime,
39
+ marks it managed, writes provenance, then atomically publishes it. An existing unmanaged
40
+ target is never overwritten. Reinstall replaces only the managed tree. Doctor is
41
+ read-only and reports runner reachability separately. Uninstall removes only assets
35
42
  whose ownership can be proven.
36
43
 
37
44
  Host-owned sidecars must resolve from the same isolation root as `--config-dir`. For
@@ -63,12 +70,21 @@ the owner.
63
70
 
64
71
  ## Activation
65
72
 
66
- Owner-invoked Skills activate only through the host's explicit Skill surface.
67
- Model-invoked Skills may be selected by the host model only as methods inside the
68
- current authorized task. Hooks activate only through host lifecycle registrations.
69
-
70
- One public Skill may recommend another but never launches it. Installation does not
71
- create project authority or start background work.
73
+ Public Skill modes are `explicit-entry`, `grant-continuable`, or read-only `router`.
74
+ Explicit-entry modes activate only through the Host's owner-facing Skill surface.
75
+ Grant-continuable modes may be model-selected only after the loaded Skill verifies the
76
+ same active Change, valid grant, allowed effects, and material checkpoints. A router may
77
+ diagnose read-only state only on explicit owner invocation and creates no continuation
78
+ authority. Model-discipline Skills
79
+ may be selected only as methods inside the current covered workflow.
80
+
81
+ Host invocation metadata is a coarse discovery aid. It cannot express every per-mode
82
+ boundary, so the in-Skill check remains mandatory and Hosts without an equivalent bit
83
+ rely on discriminating descriptions plus that same check. A public Skill may transition
84
+ to another only when a valid grant covers the exact next mode and effects, after showing
85
+ the Route Card; otherwise it stops and recommends the explicit route. Installation does
86
+ not create a grant, launch a workflow, or start background work. Hooks activate only
87
+ through Host lifecycle registrations and retain their independent idle guard.
72
88
 
73
89
  ## Idle behavior
74
90
 
@@ -40,21 +40,34 @@ isolated user-scope installation test.
40
40
 
41
41
  ## Invocation policy
42
42
 
43
- | Role | Owner can route directly | Model can select implicitly |
43
+ | Invocation class | Owner can route directly | Model can select implicitly |
44
44
  |---|---:|---:|
45
- | eight user-invoked Skills | yes | no |
46
- | five model-invoked Skills | no | yes |
47
- | `ultra-status` router | yes | no |
45
+ | `explicit-entry` public mode | yes | no |
46
+ | `grant-continuable` public mode | yes | only under a valid Execution Grant covering that mode |
47
+ | five `model-discipline` Skills | no | as an internal method of a covered workflow |
48
+ | `ultra-status` `router` modes | yes | no; other Skills derive their cards directly from the shared contract |
49
+
50
+ The canonical per-mode map is `PUBLIC_SKILL_INVOCATION_MODES` in
51
+ `adapters/_shared/runtime-assets.cjs`. Init and Delegate are explicit-only. Research has
52
+ explicit `baseline` and grant-continuable `change-scoped`; Change has explicit
53
+ intake/evidence/acceptance and grant-continuable same-Change reconciliation; Deliver has
54
+ grant-continuable reconciliation and explicit finalization. Plan, Dev, and Test modes
55
+ are grant-continuable. Every public mode remains directly owner-invocable.
48
56
 
49
57
  Claude and Grok receive `user-invocable` / `disable-model-invocation` frontmatter.
50
58
  Kimi receives its native equivalent. Codex receives
51
- `policy.allow_implicit_invocation` in `agents/openai.yaml`. OpenCode uses portable
52
- source frontmatter and native discovery, but its current Skill schema has no equivalent
53
- owner/model routing bit: all fourteen Skills remain discoverable and their descriptions
54
- guide model selection. Ultra does not add a semantic interception hook to imitate a
55
- host feature OpenCode does not expose. ZCode likewise discovers all plugin Skills and
56
- relies on their portable descriptions plus the Change-scoped execution grant rather
57
- than a fabricated routing flag.
59
+ `policy.allow_implicit_invocation` in `agents/openai.yaml`. Those Hosts expose only a
60
+ coarse Skill-level bit, so a Skill with any grant-continuable mode is discoverable to the
61
+ model; the loaded Skill must still verify the selected mode, same active `change_id`,
62
+ grant, effects, and material checkpoints. In particular, the coarse bit does not permit
63
+ baseline Research, Change intake/acceptance, or Deliver finalization.
64
+
65
+ OpenCode uses portable source frontmatter and native discovery, but its current Skill
66
+ schema has no equivalent owner/model routing bit: all fourteen Skills remain
67
+ discoverable and their descriptions plus the same in-Skill guard guide selection. Ultra
68
+ does not add a semantic interception hook to imitate a Host feature OpenCode does not
69
+ expose. ZCode likewise discovers all plugin Skills and relies on their portable
70
+ descriptions and runtime guard rather than a fabricated routing flag.
58
71
 
59
72
  ## Hook compatibility
60
73
 
@@ -72,9 +85,47 @@ hook activation are distinct: Codex skips newly installed non-managed plugin hoo
72
85
  until the user reviews and trusts the current definition, so Doctor reports
73
86
  `hook_activation: user_review_required` without pretending the hook already ran.
74
87
 
75
- ## Delegation argv
76
-
77
- `adapters/_shared/host-profile.cjs` records current non-interactive invocation for:
88
+ ## Agent execution driver selection
89
+
90
+ | Host | ACP candidate observed locally | Versioned conformance | 5.0 active driver | Fallback reason |
91
+ |---|---|---|---|---|
92
+ | Claude Code | pinned `@agentclientprotocol/claude-agent-acp@0.70.0` stdio adapter | PASS, real provider receipt | ACP when `npx` exists | `acp_command_unavailable` when absent |
93
+ | Codex | pinned `@agentclientprotocol/codex-acp@1.6.2` stdio adapter | PASS, real provider receipt | ACP when `npx` exists | `acp_command_unavailable` when absent |
94
+ | OpenCode | native `opencode acp` stdio server | PASS, real provider receipt | ACP when executable exists | `acp_command_unavailable` when absent |
95
+ | Kimi Code | documented [`kimi acp`](https://moonshotai.github.io/kimi-code/en/reference/kimi-acp.html) stdio server | PASS, real provider receipt | ACP when executable exists | `acp_command_unavailable` when absent |
96
+ | Grok Build | documented [`grok agent stdio`](https://docs.x.ai/build/cli/headless-scripting) | PASS, real provider receipt | ACP when executable exists | `acp_command_unavailable` when absent |
97
+ | ZCode | source-pinned `zcode-acp` v0.1.0 plus digest-bound 0.16.5 patch translating to installed `app-server` | PASS, domestic BigModel provider receipt | ACP when bridge exists and `--ack-experimental` is supplied | `acp_command_unavailable` when absent |
98
+
99
+ Selection is ACP-first only after the exact Host row is `passed` and names a non-empty
100
+ evidence reference: stable protocol v1, stdio, executable availability, read-only,
101
+ bounded write, permission denial,
102
+ cancellation/no-orphan, cwd/diff parity, result parity, and credential/event redaction
103
+ must all hold. Static capability inspection never starts the provider. A candidate,
104
+ binary, help output, SDK version, or successful fake-agent suite alone cannot promote a
105
+ Host. The stable wire contract follows the official
106
+ [ACP v1 schema](https://github.com/agentclientprotocol/agent-client-protocol/blob/main/schema/v1/schema.json);
107
+ unstable v2 features are outside the 5.0 required path.
108
+
109
+ All Driver receipts and terminal results expose the selected driver, ACP capability,
110
+ and fallback reason. Doctor reports the same facts separately from installation health.
111
+ `AcpDriver` stores a bounded redacted `events.jsonl`, never raw protocol messages or
112
+ hidden reasoning. Status re-projects every displayed latest event through that fixed
113
+ safe shape and treats a corrupted journal as unavailable. `CliDriver` bounds
114
+ stdout/stderr while retaining the output tail so the existing exact Ultra result
115
+ extractor remains compatible.
116
+
117
+ During `session/new`, `AcpDriver` may temporarily buffer only the bounded creation-time
118
+ metadata updates emitted by some conforming agents. It rejects message/tool content,
119
+ wrong session identities, more than 32 updates, or more than 256 KiB before the response;
120
+ accepted metadata is exposed only after every buffered `sessionId` matches the created
121
+ session. `ULTRA_DELEGATE_FORCE_CLI=1` is an explicit per-run recovery seam: it selects
122
+ the same bounded CLI result path and records `acp_forced_cli` without changing the
123
+ Host's stored conformance status.
124
+
125
+ ## CLI fallback argv
126
+
127
+ `skills/ultra-delegate/scripts/host-profile.cjs` records current non-interactive
128
+ invocation for:
78
129
 
79
130
  - Claude print mode with structured output and an explicit file-tool allowlist; read-only
80
131
  uses `plan`, while bounded write uses `acceptEdits` without Bash or web tools;
@@ -90,20 +141,34 @@ until the user reviews and trusts the current definition, so Doctor reports
90
141
  camel-case `--disallowedTools` surface used to deny Bash, web, subagents, and (in
91
142
  read-only mode) write tools. The launcher's timeout remains the execution bound.
92
143
 
93
- ZCode 0.16.3 advertises `--max-turns`, `--allowed-tools`, and `--settings` in help but
94
- rejects them at the live root parser. Ultra therefore does not pass those flags. ZCode
95
- headless delegation also requires an explicit CLI model provider; desktop provider
96
- state is not silently copied into `~/.zcode/cli/config.json` because provider choice and
97
- credentials remain owner-controlled.
144
+ The installed ZCode 0.16.5 runtime advertises `--max-turns`, `--allowed-tools`, and
145
+ `--settings` in help but rejects them at the live root parser. Ultra therefore does not
146
+ pass those flags. ZCode headless delegation also requires an explicit CLI model
147
+ provider. Host/runtime identity and provider identity remain separate: the verified
148
+ local path uses ZCode Desktop with the Owner's domestic BigModel Coding Plan provider,
149
+ not international Z.AI OAuth. Ultra's package does not silently copy Desktop credentials;
150
+ the user controls the provider entry in `~/.zcode/cli/config.json`.
98
151
 
99
- On macOS, the shared host profile uses
152
+ On macOS, the Skill-local host profile uses
100
153
  `/Applications/ZCode.app/Contents/Resources/glm/zcode.cjs` when that App-bundled CLI
101
154
  exists, then falls back to `zcode` on `PATH`. `UBP_DELEGATE_ZCODE_BIN` remains an explicit
102
155
  test or operator override; the normal source-to-ZCode path does not require it.
103
156
 
157
+ The ACP bridge is independently installed from `jpalmae/zcode-acp` v0.1.0 at source
158
+ revision `42fe149d4b501469343c01f23ba3801832306d53`, then patched by the shipped
159
+ `zcode-acp-0.1.0-zcode-0.16.5.patch` with SHA-256
160
+ `174dfd0feafe84320556a84b5ae08b10e44c5515fea4992fd1d58af54cee4e3d`. The patch
161
+ answers the `session/requestRuntimePreferences` server request introduced by ZCode
162
+ 0.16.5 before and after session creation. The pinned source plus patch passes the locked
163
+ Rust tests, reproduced RED, patched fake App-server E2E, release build, and real provider
164
+ session before use. It stamps the bridge as
165
+ `zcode-acp 0.1.0+ultra.zcode.0.16.5`; selection requires that marker and an installed
166
+ runtime reporting `0.16.5`. Ultra records both source inputs and ships only the patch; it
167
+ redistributes neither the bridge binary nor any ZCode Desktop bytes.
168
+
104
169
  **ZCode transport maturity is `experimental`** (recorded in
105
- `adapters/_shared/host-profile.cjs`): the App-bundled CLI is a verified-local
106
- surface — it exists, launches, and passed the 2026-08-14 conformance drills — but
170
+ `skills/ultra-delegate/scripts/host-profile.cjs`): the App-bundled CLI is a verified-local
171
+ surface — it exists, launches, and passed the 2026-08-26 conformance drill — but
107
172
  the provider publishes no headless CLI, SDK, A2A, or ZCode Protocol stability
108
173
  contract. Promotion to `supported` requires both official documentation and a
109
174
  full recovery drill; a binary's existence, working help, or zero exit status is
@@ -118,6 +183,20 @@ can present an internal CLI run as the documented ZCode Desktop interactive
118
183
  surface. The documented interactive primary path for ZCode is the Desktop task
119
184
  surface itself, not this headless transport.
120
185
 
186
+ ## Installed delegation runner
187
+
188
+ Every managed plugin contains `ultra-delegate/scripts/delegate.cjs`, its worker, the
189
+ canonical Host profile, all three driver modules, and the Kimi launch-only profiles.
190
+ The loaded Skill resolves
191
+ that directory and invokes Node directly, so a clean plugin install does not require a
192
+ persisted Ultra package binary on `PATH` and never uses `npx` to rediscover Ultra.
193
+ The source-pinned Claude and Codex ACP adapters may themselves run through their exact
194
+ `npx --yes <package>@<version>` profiles. Doctor
195
+ reports `delegation_runner`, `acp_capability`, `agent_execution_driver`, its fallback
196
+ reason, and ZCode maturity separately from Skill discovery and Hooks. The package
197
+ `ubp delegate` surface remains a thin one-release compatibility wrapper around the same
198
+ functions; receipts and recovery commands point to the canonical Skill-local entrypoint.
199
+
121
200
  ### ZCode Desktop Workspace Memory (post-turn host effect)
122
201
 
123
202
  ZCode Desktop ships an optional Workspace Memory feature that extracts project
@@ -7,12 +7,17 @@ owner boundaries; host-specific discovery and invocation policy belong in adapte
7
7
 
8
8
  Choose exactly one role before writing:
9
9
 
10
- - **user-invoked**: a complete owner-selected workflow with a durable outcome;
10
+ - **public workflow**: an owner-invocable workflow with one or more declared modes and
11
+ a durable outcome;
11
12
  - **model-invoked**: a reusable discipline used by at least two canonical workflows;
12
13
  - **router**: read-only diagnosis that recommends the smallest next public route.
13
14
 
14
- A user workflow may recommend but must not invoke another user workflow. A discipline
15
- with only one real caller should be inlined.
15
+ Every public mode is `explicit-entry` or `grant-continuable`. A public workflow may
16
+ continue to another public mode only when a currently valid Execution Grant covers the
17
+ same Change, exact mode, effects, and stop conditions, and only after showing the Route
18
+ Card. Otherwise it stops and recommends the owner-invoked route. Host metadata never
19
+ substitutes for that in-Skill check. A discipline with only one real caller should be
20
+ inlined.
16
21
 
17
22
  ## Portable frontmatter
18
23
 
@@ -42,6 +47,12 @@ Every Skill has one outcome-led title and these semantic sections:
42
47
  ## References
43
48
  ```
44
49
 
50
+ Every public workflow and router also has `## Route modes` with a `Mode | Entry |
51
+ Observable exit | Next` table and references the canonical
52
+ `ultra-status/references/route-contract.md`. Shared card fields, material checkpoints,
53
+ continuation, and degraded recovery live only in that reference; each Skill owns only
54
+ its modes and workflow-specific facts.
55
+
45
56
  User workflows first resolve at most one active `change_id`, then read only matching
46
57
  rows from `.ultra/tasks.json`, the frontier task's `context_file` and Resume Note,
47
58
  `CONTEXT.md`, and relevant decisions. Historical or abandoned rows never become current
@@ -96,6 +107,7 @@ For every changed Skill:
96
107
  3. verify its role metadata on all six hosts;
97
108
  4. test the accepted workflow with representative valid and adversarial inputs;
98
109
  5. confirm no retired runtime vocabulary or host-specific path entered portable text.
110
+ 6. run the Route Contract structural test and inspect the applicable owner journey.
99
111
 
100
112
  The repository's `tests/skill-authoring.test.cjs` and
101
113
  `tests/v026-contract.test.cjs` mechanize the portable parts of this contract.
@@ -1,14 +1,20 @@
1
1
  # Ultra Builder Pro workflow lifecycle
2
2
 
3
- Ultra v0.26 has no fixed runtime state machine. Skills define checkable entry and exit
3
+ Ultra 5.0 has no fixed runtime state machine. Skills define checkable entry and exit
4
4
  criteria; repository files record facts; the host model chooses the route.
5
5
 
6
6
  ## Capability flow
7
7
 
8
8
  ```text
9
- ultra-init ──raw Project Brief──► ultra-research ──accepted baseline──► ultra-change
10
- ▲ │
11
- └──── scoped consequential evidence gap ────┘
9
+ ultra-init/create|recover ──raw Project Brief──► ultra-research/baseline
10
+ │
11
+ ▼
12
+ ultra-change/intake
13
+ │
14
+ ┌── ultra-research/change-scoped ◄──┤ evidence-needed
15
+ └── ultra-change/reconcile ─────────┘
16
+ │ accepted
17
+ ▼
12
18
 
13
19
  ultra-change ─► ultra-plan ─► ultra-dev (per task) ─► ultra-test ─► ultra-deliver
14
20
  ▲ │ │
@@ -18,14 +24,16 @@ ultra-status read-only router at any point
18
24
  ultra-delegate orthogonal bounded execution on another CLI
19
25
  ```
20
26
 
21
- Arrows are recommendations, not automatic invocation by default. The owner explicitly
22
- selects each public workflow unless a live owner-activated execution grant
23
- (session-local activation or a stably verified durable work-package grant)
24
- authorizes the host model to select only the covered Research,
25
- Plan, Dev, Test, and reconcile-only Deliver routes. Init, Change, Delegate, Status,
26
- final archive, and every external effect remain owner-selected. Delivery archives one
27
- stable `change_id`; the next request opens a new active id while prior task rows remain
28
- in the append-only ledger.
27
+ Arrows are recommendations unless a live owner-activated Execution Grant authorizes the
28
+ exact next mode. Public modes are either `explicit-entry`, `grant-continuable`, or
29
+ read-only `router`; model-only methods are `model-discipline`. Scoped Research,
30
+ same-Change reconciliation, Plan, Dev, Test, and Deliver reconciliation may continue
31
+ only when the grant covers the same `change_id`, mode, effects, and stop conditions.
32
+ Init, Change intake/evidence/acceptance/abandonment/primary transfer, Delegate, Deliver
33
+ finalization, archive, and every external effect remain explicit-entry. Status remains
34
+ owner-invoked, read-only, and supplies no continuation authority. Delivery archives one stable
35
+ `change_id`; the next request opens a new active id while prior task rows remain in the
36
+ append-only ledger.
29
37
 
30
38
  ## Topology and checkpoints
31
39
 
@@ -43,10 +51,14 @@ Every owner-facing checkpoint — a WIP at a stop, a closing Resume Note, a deli
43
51
  report — carries the eight fixed semantics defined in
44
52
  [artifact authority](ARTIFACT-AUTHORITY.md#owner-checkpoint-semantics): why, outcome,
45
53
  accepted boundary, delta, reality, decision needed, next bounded action, and not-done.
46
- Checkpoints are cognitive interfaces, not stage markers; alignment failure stops work
47
- until the owner re-accepts an outcome.
54
+ The shared [Route Contract](../skills/ultra-status/references/route-contract.md) adds
55
+ Route, Mode, Position, and Exit condition as navigation around those semantics. Every
56
+ public Skill shows the card at entry, a material checkpoint, pause/blocked exit, normal
57
+ exit, and before a public transition. Cards are derived observations, not stage markers,
58
+ permission, or persisted route state; alignment failure stops work until the owner
59
+ re-accepts an outcome.
48
60
 
49
- ## Common entry contract
61
+ ## Common mode-aware entry contract
50
62
 
51
63
  Every user-invoked Skill reads, in order:
52
64
 
@@ -62,6 +74,11 @@ Every user-invoked Skill reads, in order:
62
74
  Missing files produce a precise recovery or initialization recommendation. They do not
63
75
  cause the Skill to invent a state transition.
64
76
 
77
+ After reading these facts, the Skill chooses only one mode declared in its own Route
78
+ table and emits the entry Route Card. If model-selected, it revalidates that this mode is
79
+ grant-continuable and that the grant covers the same Change and effects. Host metadata
80
+ is only coarse discovery; it never substitutes for this runtime check.
81
+
65
82
  ## Initialization
66
83
 
67
84
  Init writes the raw Project Brief and stable empty skeleton. `ultra-init` preserves the
@@ -73,22 +90,29 @@ launch another workflow.
73
90
 
74
91
  ## Research
75
92
 
76
- Research turns the brief into an accepted North Star and evidence-backed baseline.
77
- `ultra-research` uses Wayfinding only when a multi-lens path is unclear, then maps the
93
+ Research has two modes. `baseline` explicitly turns the brief into an accepted North
94
+ Star and evidence-backed baseline. `change-scoped` answers only one active Change's
95
+ recorded Research Disposition and returns named evidence to that same Change for
96
+ reconciliation. `ultra-research` uses Wayfinding only when a multi-lens path is unclear,
97
+ then records entry question, selected lenses, omissions, dependencies, source plan,
98
+ material checkpoints, observable stop condition, and return route before mapping the
78
99
  question to the smallest useful subset of seventeen focused references. The first six
79
100
  are semantic lenses with real dependencies: `00` precedes `01`; conditional `02` and
80
101
  `03` may fan out after the boundary is known; `04` consumes their relevant conclusions
81
102
  and is the first owner checkpoint; `05` extracts assumptions from `00` through `04`.
82
103
  Grilling controls how missing owner inputs are asked, Think tests one consequential
83
104
  decision, and Domain Modeling writes settled vocabulary; none owns the Research route.
84
- The final synthesis promotes accepted conclusions into the North Star, `CONTEXT.md`,
85
- three specifications, and a source-hash-bound distillate.
105
+ The baseline synthesis promotes accepted conclusions into the North Star, `CONTEXT.md`,
106
+ three specifications, and a source-hash-bound distillate. A change-scoped run updates
107
+ only its mapped sections and never changes Change acceptance on its own. Lens counts are
108
+ navigation facts, not semantic progress or a completion signal.
86
109
 
87
110
  ## Change reconciliation
88
111
 
89
- Change updates only the touched baseline rather than rebuilding it. `ultra-change`
90
- first compares requested behavior with accepted product truth and current code. It
91
- classifies changes by the resulting commitments:
112
+ Change updates only the touched baseline rather than rebuilding it. Its visible modes
113
+ are `intake`, `evidence-needed`, `reconcile`, and `accepted`. `ultra-change` first
114
+ compares requested behavior with accepted product truth and current code. It classifies
115
+ changes by the resulting commitments:
92
116
 
93
117
  - expansion and correction may proceed inside accepted intent;
94
118
  - a reduction waits for explicit owner authority.
@@ -99,6 +123,16 @@ existing evidence; `bounded` or `required` names the exact question, lenses, and
99
123
  evidence. Unsatisfied exit evidence routes to Research, then back through Change
100
124
  reconciliation before planning when the accepted contract needs an update.
101
125
 
126
+ Draft intent is mutable. Revising a consequential accepted answer creates a superseding
127
+ decision record so Status can reconstruct history without treating an event log as
128
+ authority. Only same-Change, non-material `reconcile` may continue under a valid grant;
129
+ opening or accepting a boundary, abandoning it, reducing a commitment, or changing the
130
+ canonical writer is an explicit owner checkpoint.
131
+
132
+ If the owner rejects the offered options as inadequate, Change preserves that answer,
133
+ keeps the draft unresolved, and returns to evidence or materially different options. It
134
+ never selects the closest rejected option or advances to Plan by default.
135
+
102
136
  A micro edit that makes no specification sentence false stays outside the Ultra
103
137
  lifecycle and uses ordinary repository TDD/verification. Once an active Change exists,
104
138
  Plan creates the smallest graph justified by the real seams, evidence, review, and
@@ -121,6 +155,12 @@ coupling and recovery risk justify a whole-path check. Cycles and broken trace p
121
155
  repaired before handoff. Complexity, file, task, line, and context counts are
122
156
  observations rather than plan-quality gates.
123
157
 
158
+ Plan names the earliest executable tracer bullet's real consumer, real data path, and
159
+ owner-visible observation. A product or contract evidence gap returns to
160
+ `ultra-change/reconcile`; Change decides whether bounded Research is required. Ordinary
161
+ technical uncertainty remains model-owned or becomes a bounded spike/tracer task, so
162
+ Plan never bypasses Change by opening product Research directly.
163
+
124
164
  ## Task development
125
165
 
126
166
  `ultra-dev` writes the implementation plan into the task context before code. It uses
@@ -208,17 +248,17 @@ effects. Readiness grants none automatically.
208
248
  `ultra-status` infers the smallest next route from observable files:
209
249
 
210
250
  - no healthy skeleton or usable raw brief → init;
211
- - raw brief without an accepted baseline, or a consequential evidence gap → research;
251
+ - raw brief without an accepted baseline → baseline research;
212
252
  - requested outcome without active Change → change;
213
253
  - draft or blocking active intent → change;
214
- - unsatisfied Research Disposition → research;
254
+ - unsatisfied Research Disposition → change-scoped research, then the same Change reconciliation;
215
255
  - active Change without matching executable tasks → plan;
216
256
  - the unique matching `in_progress` task → dev;
217
257
  - only `pending` tasks remaining → report them as frontier candidates and recommend
218
258
  one exact task id for an explicit owner invocation of dev;
219
- - a completed ledger row with missing, stale, or invalid v2 evidence/task review → dev
220
- to record affected criteria and reason, explicitly reopen, and repair provenance;
221
- - completed current-Change tasks with current v2 evidence and no matching fresh report → test;
259
+ - a completed ledger row with missing, stale, or invalid v2 evidence/task review → dev
260
+ to record affected criteria and reason, explicitly reopen, and repair provenance;
261
+ - completed current-Change tasks with current v2 evidence and no matching fresh report → test;
222
262
  - false report → route by finding and owner disposition, not by the boolean alone;
223
263
  - fresh, dispositioned report and unarchived Change → deliver.
224
264
 
@@ -229,6 +269,12 @@ replays the existing structural validators; they observe transport and freshness
229
269
  never decide semantic acceptance. Age, complexity, and file/task counts may be reported
230
270
  as context but never decide staleness or quality. It does not mutate artifacts.
231
271
 
272
+ Status outputs the Route Card by default and expands `history`, `installation`,
273
+ `delegation`, or `recovery` on request. An ambiguous or malformed active authority stops
274
+ semantic routing and writes, but not diagnosis: recovery mode reports the typed fact,
275
+ safe Git/directory observations, and the cheapest repair/retry/cancel/abandon path
276
+ without selecting an ambiguous intent as truth.
277
+
232
278
  ## Delegation
233
279
 
234
280
  `ultra-delegate` is orthogonal to the lifecycle and requires explicit owner authority.
@@ -238,6 +284,10 @@ the latter two may be read-only and do not require a task, so both pre-Plan evid
238
284
  post-task review remain reachable. Every scope still binds the one active `change_id`, a
239
285
  clean isolated worktree, strict permission/result schemas, and primary-host inspection.
240
286
  The worker cannot write canonical `.ultra` files or perform external effects.
287
+ Delegation itself is explicit-entry. Tool calls, plans, usage, permissions, process
288
+ output, ACP updates, and terminal transport state remain execution observations; only
289
+ the primary writer interprets the validated result against Research, task, review, or
290
+ Test acceptance and selects the semantic route.
241
291
 
242
292
  ## Artifact closure
243
293
 
@@ -263,7 +313,7 @@ session contains `WORKER-PACKET.json`, `ADMISSION.json`, every selected speciali
263
313
  artifact, and `SUMMARY.json`; retain it until aggregate Test and Deliver have both consumed it
264
314
  successfully, then it may be garbage-collected. Premature loss requires a fresh Review
265
315
  and Test; never reconstruct the old receipt. Other derived observations keep their
266
- explicit rebuild or rerun paths. No route creates an unowned drift log, Change plan,
316
+ explicit rebuild or rerun paths. No route creates an unowned drift log, parallel planning file,
267
317
  technical-debt report, or second delivery summary.
268
318
 
269
319
  ## Interruption and cross-host continuation
@@ -275,7 +325,11 @@ task, evidence, or report authority would lose meaning.
275
325
 
276
326
  Before stopping, the active task context records current facts, exact verification,
277
327
  open questions, Completion, and a closing Resume Note. The next session or host repeats
278
- the common entry contract and compares the working tree with those claims.
328
+ the common entry contract, compares the working tree with those claims, and derives a
329
+ fresh Route Card. It does not rerun completed Research merely because conversation
330
+ memory is gone. When context pressure threatens a reliable continuation, the current
331
+ Agent finishes the nearest safe write, refreshes the Resume Note, shows a stop card, and
332
+ recommends a fresh session; context size does not become route authority.
279
333
 
280
334
  This path remains valid when hooks and `ubp` are disabled. A compact snapshot may be
281
335
  used as a hint, then checked against canonical files and Git.