ultra-builder-pro-cli 0.26.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 (82) hide show
  1. package/.ultra-template/contexts/TEMPLATE.md +70 -29
  2. package/.ultra-template/north-star.md +35 -18
  3. package/.ultra-template/tasks.json +1 -0
  4. package/.ultra-template/test-report.json +17 -1
  5. package/CHANGELOG.md +235 -1
  6. package/README.md +210 -50
  7. package/README.zh-CN.md +440 -0
  8. package/adapters/_shared/host-profile.cjs +3 -95
  9. package/adapters/_shared/plugin-core.cjs +61 -5
  10. package/adapters/_shared/runtime-assets.cjs +66 -5
  11. package/adapters/zcode.js +375 -0
  12. package/bin/delegate-worker.cjs +2 -325
  13. package/bin/delegate.cjs +3 -461
  14. package/bin/install.js +11 -6
  15. package/docs/ARCHITECTURE.md +133 -31
  16. package/docs/ARTIFACT-AUTHORITY.md +185 -24
  17. package/docs/DECISIONS.md +153 -18
  18. package/docs/PHILOSOPHY.md +58 -7
  19. package/docs/PLUGIN-ISOLATION-CONTRACT.md +34 -12
  20. package/docs/RUNTIME-COMPAT-MATRIX.md +195 -23
  21. package/docs/SKILL-AUTHORING.md +19 -6
  22. package/docs/WORKFLOW-LIFECYCLE.md +196 -44
  23. package/docs/evals/adversarial-review-2026-08-14.md +84 -0
  24. package/docs/evals/ultra-5-0-journey-results.md +62 -0
  25. package/docs/evals/ultra-5-0-live-acp-conformance.md +93 -0
  26. package/docs/evals/ultra-5-0-route-journeys.md +145 -0
  27. package/docs/evals/zcode-automation-2026-08-14.md +103 -0
  28. package/hooks/README.md +27 -4
  29. package/hooks/_common.py +1678 -61
  30. package/hooks/adapters/zcode.py +227 -0
  31. package/hooks/compact_context.py +176 -17
  32. package/hooks/mid_workflow_recall.py +27 -5
  33. package/hooks/post_edit_guard.py +133 -23
  34. package/hooks/session_context.py +707 -22
  35. package/package.json +7 -3
  36. package/skills/ultra-change/SKILL.md +69 -12
  37. package/skills/ultra-change/references/change-contract.md +93 -27
  38. package/skills/ultra-change/references/execution-grant.md +109 -0
  39. package/skills/ultra-change/references/primary-transfer.md +273 -0
  40. package/skills/ultra-change/scripts/validate_primary_transfer.cjs +1928 -0
  41. package/skills/ultra-delegate/SKILL.md +103 -8
  42. package/skills/ultra-delegate/patches/zcode-acp-0.1.0-zcode-0.16.5.patch +184 -0
  43. package/skills/ultra-delegate/references/delegation-contract.md +80 -1
  44. package/skills/ultra-delegate/scripts/acp-conformance.cjs +287 -0
  45. package/skills/ultra-delegate/scripts/acp-driver.cjs +762 -0
  46. package/skills/ultra-delegate/scripts/agent-execution-driver.cjs +320 -0
  47. package/skills/ultra-delegate/scripts/cli-driver.cjs +61 -0
  48. package/skills/ultra-delegate/scripts/delegate-worker.cjs +328 -0
  49. package/skills/ultra-delegate/scripts/delegate.cjs +690 -0
  50. package/skills/ultra-delegate/scripts/host-profile.cjs +267 -0
  51. package/skills/ultra-deliver/SKILL.md +98 -11
  52. package/skills/ultra-dev/SKILL.md +188 -42
  53. package/skills/ultra-grilling/SKILL.md +10 -7
  54. package/skills/ultra-grilling/references/reframing.md +7 -3
  55. package/skills/ultra-init/SKILL.md +56 -7
  56. package/skills/ultra-init/scripts/init_project.cjs +968 -21
  57. package/skills/ultra-plan/SKILL.md +91 -47
  58. package/skills/ultra-plan/references/task-evidence-v2.md +300 -0
  59. package/skills/ultra-plan/scripts/validate_task_evidence.cjs +859 -0
  60. package/skills/ultra-research/SKILL.md +70 -14
  61. package/skills/ultra-research/references/04-product-strategy.md +11 -2
  62. package/skills/ultra-research/references/21-features-scope.md +8 -0
  63. package/skills/ultra-research/references/22-success-metrics.md +4 -3
  64. package/skills/ultra-research/references/99-synthesis.md +19 -2
  65. package/skills/ultra-research/references/north-star-v2.md +168 -0
  66. package/skills/ultra-research/references/wayfinding.md +8 -0
  67. package/skills/ultra-research/scripts/validate_north_star.cjs +1174 -0
  68. package/skills/ultra-review/SKILL.md +201 -27
  69. package/skills/ultra-review/references/adversarial-evaluation.md +31 -0
  70. package/skills/ultra-review/references/spec.md +5 -0
  71. package/skills/ultra-review/references/unified-schema.md +146 -11
  72. package/skills/ultra-review/references/worker-packet.md +151 -8
  73. package/skills/ultra-review/scripts/review_wait.py +2653 -63
  74. package/skills/ultra-status/SKILL.md +129 -15
  75. package/skills/ultra-status/references/route-contract.md +100 -0
  76. package/skills/ultra-tdd/SKILL.md +11 -4
  77. package/skills/ultra-tdd/references/test-execution.md +6 -1
  78. package/skills/ultra-test/SKILL.md +161 -18
  79. package/skills/ultra-test/scripts/validate_review_transport.cjs +549 -0
  80. package/skills/ultra-test/scripts/worktree_digest.cjs +518 -30
  81. /package/{adapters/_shared → skills/ultra-delegate/scripts}/delegate-profiles/kimi-read-only.md +0 -0
  82. /package/{adapters/_shared → skills/ultra-delegate/scripts}/delegate-profiles/kimi-write.md +0 -0
@@ -1,6 +1,6 @@
1
1
  # Runtime compatibility matrix
2
2
 
3
- Ultra Builder Pro adapts one fourteen-Skill, five-hook contract to five native hosts.
3
+ Ultra Builder Pro adapts one fourteen-Skill, five-hook contract to six native hosts.
4
4
  This document records the differences that belong in adapters rather than shared
5
5
  Skills.
6
6
 
@@ -13,6 +13,7 @@ Skills.
13
13
  | OpenCode | `<config>/.ultra-builder-pro` plus `<config>/plugins/ultra-builder-pro.js` | managed `<config>/skills/<name>` | native JS events call shared Python scripts |
14
14
  | Kimi Code | `<config>/plugins/managed/ultra-builder-pro` plus `installed.json` | nested `skills/<name>` | `hooks/adapters/kimi.py` |
15
15
  | Grok Build | `<GROK_HOME>/.ubp/plugin-sources/ultra-builder-pro` | nested `skills/<name>` | `hooks/adapters/grok.py` |
16
+ | ZCode | `~/.zcode/cli/plugins/marketplaces/ultra-builder-pro/plugin` plus managed local marketplace and `plugins.dirs` entry | nested `skills/<name>` | `hooks/adapters/zcode.py` |
16
17
 
17
18
  Every host receives the same eight owner workflows, five model disciplines, and one
18
19
  router. Codex alone needs generated `agents/openai.yaml` files to express display data
@@ -27,40 +28,56 @@ and implicit-invocation policy; those are host metadata, not custom agents.
27
28
  | OpenCode | `${XDG_CONFIG_HOME:-~/.config}/opencode` | `<cwd>/.opencode` | `OPENCODE_CONFIG_DIR` or `OPENCODE_CONFIG` |
28
29
  | Kimi Code | `~/.kimi-code` | no project plugin scope | `KIMI_CODE_HOME` |
29
30
  | Grok Build | `~/.grok` | no project plugin scope | `GROK_HOME` |
31
+ | ZCode | `~/.zcode` | no project plugin scope | adapter `ZCODE_HOME` override |
30
32
 
31
33
  An explicit `--config-dir` wins over all defaults and becomes the home for any
32
34
  host-owned sidecar as well. This rule makes isolated installation tests trustworthy.
33
35
  With multiple selected runtimes, the CLI passes `<config-dir>/<runtime>` to each adapter
34
36
  instead of merging incompatible host layouts.
35
- Kimi and Grok currently expose user-scoped plugin installation only. `--local` rejects
37
+ Kimi, Grok, and ZCode currently expose user-scoped plugin installation only. `--local` rejects
36
38
  them before mutating another host; an explicit `--config-dir` remains available for an
37
39
  isolated user-scope installation test.
38
40
 
39
41
  ## Invocation policy
40
42
 
41
- | Role | Owner can route directly | Model can select implicitly |
43
+ | Invocation class | Owner can route directly | Model can select implicitly |
42
44
  |---|---:|---:|
43
- | eight user-invoked Skills | yes | no |
44
- | five model-invoked Skills | no | yes |
45
- | `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.
46
56
 
47
57
  Claude and Grok receive `user-invocable` / `disable-model-invocation` frontmatter.
48
58
  Kimi receives its native equivalent. Codex receives
49
- `policy.allow_implicit_invocation` in `agents/openai.yaml`. OpenCode uses portable
50
- source frontmatter and native discovery, but its current Skill schema has no equivalent
51
- owner/model routing bit: all fourteen Skills remain discoverable and their descriptions
52
- guide model selection. Ultra does not add a semantic interception hook to imitate a
53
- host feature OpenCode does not expose.
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.
54
71
 
55
72
  ## Hook compatibility
56
73
 
57
- | Hook | Claude | Codex | OpenCode | Kimi | Grok |
58
- |---|---:|---:|---:|---:|---:|
59
- | session context | yes | normalized | native bridge | normalized to message | executed; host stdout limits apply |
60
- | mid-workflow recall | yes | handles `apply_patch` | native bridge | normalized | executed |
61
- | compact context | pre/start | pre/post | native compact event | pre/post | pre-compact |
62
- | post-edit observation | Write/Edit | Write/Edit/`apply_patch` | write/edit/patch | Write/Edit | Write/Edit/patch |
63
- | dangerous command guard | Bash advisory/deny | Bash advisory/deny | bash advisory/deny | Bash advisory/deny | Bash allow/deny mapping |
74
+ | Hook | Claude | Codex | OpenCode | Kimi | Grok | ZCode |
75
+ |---|---:|---:|---:|---:|---:|---:|
76
+ | session context | yes | normalized | native bridge | normalized to message | executed; host stdout limits apply | normalized |
77
+ | mid-workflow recall | yes | handles `apply_patch` | native bridge | normalized | executed | handles `ApplyPatch` aliases |
78
+ | compact context | pre/start | pre/post | native compact event | pre/post | pre-compact | `SessionStart: compact` |
79
+ | post-edit observation | Write/Edit | Write/Edit/`apply_patch` | write/edit/patch | Write/Edit | Write/Edit/patch | Write/Edit/ApplyPatch |
80
+ | dangerous command guard | Bash advisory/deny | Bash advisory/deny | bash advisory/deny | Bash advisory/deny | Bash allow/deny mapping | Bash advisory/deny |
64
81
 
65
82
  All hooks share the same `.ultra/` idle guard. Wire adapters normalize payload and
66
83
  output fields only; they do not change semantic policy. Codex installation health and
@@ -68,9 +85,47 @@ hook activation are distinct: Codex skips newly installed non-managed plugin hoo
68
85
  until the user reviews and trusts the current definition, so Doctor reports
69
86
  `hook_activation: user_review_required` without pretending the hook already ran.
70
87
 
71
- ## Delegation argv
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.
72
116
 
73
- `adapters/_shared/host-profile.cjs` records current non-interactive invocation for:
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:
74
129
 
75
130
  - Claude print mode with structured output and an explicit file-tool allowlist; read-only
76
131
  uses `plan`, while bounded write uses `acceptEdits` without Bash or web tools;
@@ -81,14 +136,129 @@ until the user reviews and trusts the current definition, so Doctor reports
81
136
  - Kimi prompt mode with a launch-only read or write agent profile that exposes only
82
137
  file tools and no Bash, web, MCP, Skills or subagents;
83
138
  - Grok single-turn mode with `read-only` or `workspace` OS sandbox, structured output,
84
- no memory, web search or subagents.
139
+ no memory, web search or subagents, and a twelve-turn ceiling;
140
+ - ZCode headless prompt mode with native `plan` or `edit`; the current CLI accepts the
141
+ camel-case `--disallowedTools` surface used to deny Bash, web, subagents, and (in
142
+ read-only mode) write tools. The launcher's timeout remains the execution bound.
143
+
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`.
151
+
152
+ On macOS, the Skill-local host profile uses
153
+ `/Applications/ZCode.app/Contents/Resources/glm/zcode.cjs` when that App-bundled CLI
154
+ exists, then falls back to `zcode` on `PATH`. `UBP_DELEGATE_ZCODE_BIN` remains an explicit
155
+ test or operator override; the normal source-to-ZCode path does not require it.
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
+
169
+ **ZCode transport maturity is `experimental`** (recorded in
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
172
+ the provider publishes no headless CLI, SDK, A2A, or ZCode Protocol stability
173
+ contract. Promotion to `supported` requires both official documentation and a
174
+ full recovery drill; a binary's existence, working help, or zero exit status is
175
+ never sufficient. The other five delegate transports are documented and locally
176
+ verified through the same launcher. The maturity is live-enforced, not just
177
+ recorded: `delegate run --to zcode` refuses to launch without the explicit
178
+ `--ack-experimental` flag, prints a stderr warning, and stamps
179
+ `transport_maturity`, the exact `transport_surface` wording, and
180
+ `experimental_ack: true` onto the receipt, worker spec, and every terminal
181
+ result (including failure, cancellation, and timeout), so no delegation record
182
+ can present an internal CLI run as the documented ZCode Desktop interactive
183
+ surface. The documented interactive primary path for ZCode is the Desktop task
184
+ surface itself, not this headless transport.
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
+
200
+ ### ZCode Desktop Workspace Memory (post-turn host effect)
201
+
202
+ ZCode Desktop ships an optional Workspace Memory feature that extracts project
203
+ memory after a completed turn into provider-local files under
204
+ `~/.zcode/cli/memories/projects/<project>/memory`. Corrected facts
205
+ (2026-08-17):
206
+
207
+ - the feature is operator-controlled through the documented Workspace Memory
208
+ setting (`memoryEnabled` in `~/.zcode/v2/setting.json`); it is not always
209
+ default-off — it was observed enabled on this machine, and a fresh task
210
+ inherits the operator's current selection;
211
+ - `memoryEnabled=false` is the single effective master gate: the App runtime
212
+ injects `memory:{enabled:false}`, and every recall, root access, and
213
+ post-turn extraction path resolves through one enabled-root resolver that
214
+ returns no root while it is false. The logged `memoryExtractionEnabled` and
215
+ `memoryUse` values are absent-key, disable-only defaults, not independent
216
+ owner-facing gates;
217
+ - the extracted files are ordinary local files outside the repository that the
218
+ operator can browse and clear directly; they are non-authoritative and
219
+ non-portable — never Git content, never shared authority, never Ultra
220
+ evidence;
221
+ - when the feature is enabled, the post-turn extraction is a Host external
222
+ effect: an owner-authorized transfer must allow it in the OFFER `effects`
223
+ and disclose it in the RESULT `external_effects`
224
+ (`skills/ultra-change/references/primary-transfer.md`); a strict
225
+ zero-external-effect pass requires a fresh task with the master setting off
226
+ plus an independent reviewer postflight;
227
+ - Ultra never parses or mutates the provider setting.
228
+
229
+ The accepted r3 design document's section 7.1 local-memory snapshot
230
+ ("local-only, default-off, cannot be browsed or cleared") is superseded by the
231
+ current documented UI and the observed runtime behavior above; the frozen
232
+ design bytes stay unedited.
85
233
 
86
234
  The launcher accepts no external-effect authority. It binds instruction, permission and
87
235
  output-schema digests, a clean Git worktree, allowed write roots, actual changed paths,
88
236
  strict result schema, timeout and cancellation. Empty roots select read-only mode. The
89
237
  model returns structured output and never authors the receipt. Host-native permissions
90
238
  are the execution boundary; the primary host still inspects and integrates the isolated
91
- diff.
239
+ diff. The launcher embeds the digest-bound packet in the prompt because OpenCode's
240
+ correct `external_directory: deny` policy prevents reading packet paths beside the
241
+ worktree. Codex receives a native-schema-compatible projection; the launcher separately
242
+ enforces non-empty strings, normalized unique paths, exact fields, and the observed diff.
243
+
244
+ ### Authenticated delegation conformance — 2026-08-14
245
+
246
+ One clean, read-only seeded repository was used to exercise the current launcher against
247
+ all six installed CLIs. Claude Code, Codex, OpenCode, Kimi Code, and ZCode each produced
248
+ a validated `finished` result with an empty diff and found the seeded consequential
249
+ defect. Grok Build 1.0.3 exited zero but repeatedly emitted truncated or malformed
250
+ structured output; the launcher correctly published `failed/missing_result` and did not
251
+ count partial text as evidence. This is a current host-result conformance ceiling, not a
252
+ permission bypass or a semantic review result.
253
+
254
+ ZCode was also exercised as the source host: one ZCode session invoked
255
+ `ubp delegate run --to claude`, waited for the terminal artifact, and reported Claude's
256
+ digest-bound read-only result without changing the worktree. Separately, one bounded
257
+ ZCode Autonomy Envelope completed Plan, Plan review, TDD, task review, Test, and aggregate
258
+ review for one task, then stopped before ungranted delivery and Git effects. Exact
259
+ fixtures, session boundaries, checks, and residual risks are recorded in
260
+ `docs/evals/adversarial-review-2026-08-14.md` and
261
+ `docs/evals/zcode-automation-2026-08-14.md`.
92
262
 
93
263
  ## Lifecycle verification
94
264
 
@@ -96,7 +266,9 @@ Each adapter must pass isolated install, doctor, reinstall, and uninstall tests.
96
266
  global doctor additionally asks the native host where supported, but never repairs or
97
267
  installs. Codex still performs native registration under `--config-dir`; its host process
98
268
  inherits the same isolated `HOME` and `CODEX_HOME`. Grok native registration is skipped
99
- only in explicit isolated test mode. Lifecycle tests also require the isolated config
269
+ only in explicit isolated test mode. ZCode uses its documented inline-plugin directory
270
+ configuration for immediate activation while also publishing an importable local
271
+ marketplace; real global Doctor verifies the native plugin inventory. Lifecycle tests also require the isolated config
100
272
  and fake HOME to contain zero children after uninstall, while separate ownership tests
101
273
  prove that pre-existing empty Codex and Kimi registries survive.
102
274
 
@@ -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
 
@@ -25,7 +30,8 @@ description: What this produces and the concrete situations that trigger it.
25
30
  ---
26
31
  ```
27
32
 
28
- Adapters generate Claude/Grok/Kimi invocation flags and Codex `agents/openai.yaml`.
33
+ Adapters generate Claude/Grok/Kimi invocation flags, Codex `agents/openai.yaml`, and
34
+ ZCode-native plugin metadata.
29
35
  Do not put host paths, dependency declarations, plugin policy, or release history in
30
36
  source frontmatter.
31
37
 
@@ -41,6 +47,12 @@ Every Skill has one outcome-led title and these semantic sections:
41
47
  ## References
42
48
  ```
43
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
+
44
56
  User workflows first resolve at most one active `change_id`, then read only matching
45
57
  rows from `.ultra/tasks.json`, the frontier task's `context_file` and Resume Note,
46
58
  `CONTEXT.md`, and relevant decisions. Historical or abandoned rows never become current
@@ -72,7 +84,7 @@ wholesale into project authority.
72
84
  ## Language and host neutrality
73
85
 
74
86
  Model-facing Skills, references, scripts, comments, and identifiers are English.
75
- Shared Skills never mention `.claude`, `.codex`, `.opencode`, `.kimi`, `.grok`, or a
87
+ Shared Skills never mention `.claude`, `.codex`, `.opencode`, `.kimi`, `.grok`, `.zcode`, or a
76
88
  host-only question surface. Use “host-native question surface” and put the translation
77
89
  in the adapter.
78
90
 
@@ -92,9 +104,10 @@ For every changed Skill:
92
104
 
93
105
  1. run the Skill Creator validator;
94
106
  2. resolve every relative reference in the source and installed artifact;
95
- 3. verify its role metadata on all five hosts;
107
+ 3. verify its role metadata on all six hosts;
96
108
  4. test the accepted workflow with representative valid and adversarial inputs;
97
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.
98
111
 
99
112
  The repository's `tests/skill-authoring.test.cjs` and
100
113
  `tests/v026-contract.test.cjs` mechanize the portable parts of this contract.