ultra-builder-pro-cli 5.0.0 → 6.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.
- package/CHANGELOG.md +113 -3
- package/README.md +67 -478
- package/README.zh-CN.md +49 -422
- package/adapters/_shared/frontmatter.cjs +1 -18
- package/adapters/_shared/plugin-core.cjs +17 -83
- package/adapters/_shared/runtime-assets.cjs +6 -120
- package/adapters/claude.js +8 -24
- package/adapters/codex.js +16 -38
- package/bin/install.js +35 -57
- package/docs/PLUGIN-ISOLATION-CONTRACT.md +13 -101
- package/docs/examples/drive/claude-reviewer.sh +53 -0
- package/docs/examples/drive/claude-writer.sh +43 -0
- package/engine/FORMATS.md +1051 -0
- package/engine/checks.cjs +139 -0
- package/engine/cli.cjs +148 -0
- package/engine/completion.cjs +48 -0
- package/engine/context.cjs +94 -0
- package/engine/drive.cjs +220 -0
- package/engine/expect-worker.cjs +5 -0
- package/engine/expect.cjs +33 -0
- package/engine/formats.cjs +189 -0
- package/engine/git-state.cjs +112 -0
- package/engine/ledger.cjs +205 -0
- package/engine/loading.cjs +28 -0
- package/engine/merge.cjs +273 -0
- package/engine/milestone.cjs +89 -0
- package/engine/plan.cjs +232 -0
- package/engine/project.cjs +5 -0
- package/engine/signals.cjs +3 -0
- package/engine/states.cjs +175 -0
- package/hooks/session-start.cjs +54 -0
- package/package.json +17 -52
- package/skills/ultra/SKILL.md +395 -0
- package/.ultra-template/changes/abandoned/.gitkeep +0 -0
- package/.ultra-template/changes/active/.gitkeep +0 -1
- package/.ultra-template/changes/archive/.gitkeep +0 -1
- package/.ultra-template/contexts/TEMPLATE.md +0 -135
- package/.ultra-template/decisions/.gitkeep +0 -1
- package/.ultra-template/evidence/.gitkeep +0 -1
- package/.ultra-template/north-star.md +0 -52
- package/.ultra-template/project-brief.md +0 -28
- package/.ultra-template/research/.gitkeep +0 -1
- package/.ultra-template/specs/architecture.md +0 -81
- package/.ultra-template/specs/discovery.md +0 -74
- package/.ultra-template/specs/product.md +0 -80
- package/.ultra-template/specs/research-distillate.md +0 -57
- package/.ultra-template/tasks.json +0 -4
- package/.ultra-template/test-report.json +0 -44
- package/adapters/_shared/host-profile.cjs +0 -5
- package/adapters/grok.js +0 -242
- package/adapters/kimi.js +0 -232
- package/adapters/opencode.js +0 -408
- package/adapters/zcode.js +0 -375
- package/bin/delegate-worker.cjs +0 -5
- package/bin/delegate.cjs +0 -5
- package/docs/ARCHITECTURE.md +0 -274
- package/docs/ARTIFACT-AUTHORITY.md +0 -305
- package/docs/DECISIONS.md +0 -229
- package/docs/PHILOSOPHY.md +0 -261
- package/docs/RUNTIME-COMPAT-MATRIX.md +0 -315
- package/docs/SKILL-AUTHORING.md +0 -113
- package/docs/WORKFLOW-LIFECYCLE.md +0 -350
- package/docs/evals/adversarial-review-2026-08-14.md +0 -84
- package/docs/evals/ultra-5-0-journey-results.md +0 -62
- package/docs/evals/ultra-5-0-live-acp-conformance.md +0 -93
- package/docs/evals/ultra-5-0-route-journeys.md +0 -145
- package/docs/evals/zcode-automation-2026-08-14.md +0 -103
- package/hooks/README.md +0 -52
- package/hooks/_common.py +0 -1779
- package/hooks/adapters/codex.py +0 -295
- package/hooks/adapters/grok.py +0 -134
- package/hooks/adapters/kimi.py +0 -156
- package/hooks/adapters/zcode.py +0 -227
- package/hooks/block_dangerous_commands.py +0 -201
- package/hooks/compact_context.py +0 -224
- package/hooks/mid_workflow_recall.py +0 -47
- package/hooks/post_edit_guard.py +0 -215
- package/hooks/session_context.py +0 -741
- package/skills/ultra-change/SKILL.md +0 -165
- package/skills/ultra-change/references/change-contract.md +0 -199
- package/skills/ultra-change/references/execution-grant.md +0 -109
- package/skills/ultra-change/references/primary-transfer.md +0 -273
- package/skills/ultra-change/scripts/validate_primary_transfer.cjs +0 -1928
- package/skills/ultra-delegate/SKILL.md +0 -195
- package/skills/ultra-delegate/patches/zcode-acp-0.1.0-zcode-0.16.5.patch +0 -184
- package/skills/ultra-delegate/references/delegation-contract.md +0 -138
- package/skills/ultra-delegate/scripts/acp-conformance.cjs +0 -287
- package/skills/ultra-delegate/scripts/acp-driver.cjs +0 -762
- package/skills/ultra-delegate/scripts/agent-execution-driver.cjs +0 -320
- package/skills/ultra-delegate/scripts/cli-driver.cjs +0 -61
- package/skills/ultra-delegate/scripts/delegate-profiles/kimi-read-only.md +0 -15
- package/skills/ultra-delegate/scripts/delegate-profiles/kimi-write.md +0 -17
- package/skills/ultra-delegate/scripts/delegate-worker.cjs +0 -328
- package/skills/ultra-delegate/scripts/delegate.cjs +0 -690
- package/skills/ultra-delegate/scripts/delegate_wait.py +0 -86
- package/skills/ultra-delegate/scripts/host-profile.cjs +0 -267
- package/skills/ultra-deliver/SKILL.md +0 -194
- package/skills/ultra-deliver/references/baseline-reconciliation.md +0 -41
- package/skills/ultra-dev/SKILL.md +0 -265
- package/skills/ultra-dev/references/debugging.md +0 -22
- package/skills/ultra-domain-modeling/SKILL.md +0 -79
- package/skills/ultra-grilling/SKILL.md +0 -121
- package/skills/ultra-grilling/references/reframing.md +0 -76
- package/skills/ultra-init/SKILL.md +0 -143
- package/skills/ultra-init/references/brownfield-adoption.md +0 -32
- package/skills/ultra-init/scripts/init_project.cjs +0 -1031
- package/skills/ultra-plan/SKILL.md +0 -160
- package/skills/ultra-plan/references/task-evidence-v2.md +0 -300
- package/skills/ultra-plan/scripts/validate_task_evidence.cjs +0 -859
- package/skills/ultra-research/SKILL.md +0 -167
- package/skills/ultra-research/references/00-problem-validation.md +0 -36
- package/skills/ultra-research/references/01-opportunity-discovery.md +0 -33
- package/skills/ultra-research/references/02-market-assessment.md +0 -31
- package/skills/ultra-research/references/03-alternatives.md +0 -31
- package/skills/ultra-research/references/04-product-strategy.md +0 -41
- package/skills/ultra-research/references/05-assumptions-validation.md +0 -31
- package/skills/ultra-research/references/10-user-personas.md +0 -30
- package/skills/ultra-research/references/11-user-scenarios.md +0 -28
- package/skills/ultra-research/references/20-user-stories.md +0 -31
- package/skills/ultra-research/references/21-features-scope.md +0 -38
- package/skills/ultra-research/references/22-success-metrics.md +0 -33
- package/skills/ultra-research/references/30-architecture-context.md +0 -30
- package/skills/ultra-research/references/31-solution-strategy.md +0 -28
- package/skills/ultra-research/references/32-building-blocks.md +0 -28
- package/skills/ultra-research/references/40-deployment.md +0 -29
- package/skills/ultra-research/references/41-quality-risks.md +0 -28
- package/skills/ultra-research/references/99-synthesis.md +0 -59
- package/skills/ultra-research/references/north-star-v2.md +0 -168
- package/skills/ultra-research/references/wayfinding.md +0 -50
- package/skills/ultra-research/scripts/validate_north_star.cjs +0 -1174
- package/skills/ultra-review/SKILL.md +0 -275
- package/skills/ultra-review/references/adversarial-evaluation.md +0 -31
- package/skills/ultra-review/references/code.md +0 -17
- package/skills/ultra-review/references/comments.md +0 -12
- package/skills/ultra-review/references/design.md +0 -12
- package/skills/ultra-review/references/errors.md +0 -13
- package/skills/ultra-review/references/review-modes.md +0 -29
- package/skills/ultra-review/references/spec.md +0 -18
- package/skills/ultra-review/references/tests.md +0 -12
- package/skills/ultra-review/references/unified-schema.md +0 -284
- package/skills/ultra-review/references/worker-packet.md +0 -183
- package/skills/ultra-review/scripts/review_wait.py +0 -2943
- package/skills/ultra-status/SKILL.md +0 -209
- package/skills/ultra-status/references/route-contract.md +0 -100
- package/skills/ultra-tdd/SKILL.md +0 -91
- package/skills/ultra-tdd/references/templates/README.md +0 -20
- package/skills/ultra-tdd/references/templates/feature-flag-default-audit.sh +0 -79
- package/skills/ultra-tdd/references/templates/persistence-real.ts +0 -78
- package/skills/ultra-tdd/references/templates/testcontainer-postgres.py +0 -78
- package/skills/ultra-tdd/references/templates/testcontainer-postgres.ts +0 -73
- package/skills/ultra-tdd/references/templates/vertical-slice.ts +0 -66
- package/skills/ultra-tdd/references/test-execution.md +0 -23
- package/skills/ultra-test/SKILL.md +0 -244
- package/skills/ultra-test/references/export-syntax.md +0 -18
- package/skills/ultra-test/scripts/validate_review_transport.cjs +0 -549
- package/skills/ultra-test/scripts/worktree_digest.cjs +0 -576
- package/skills/ultra-think/SKILL.md +0 -56
- package/skills/ultra-think/references/autonomy-boundary.md +0 -48
- package/skills/ultra-think/references/interaction-boundary.md +0 -42
package/docs/PHILOSOPHY.md
DELETED
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
# Ultra Builder PHILOSOPHY (v0.26)
|
|
2
|
-
|
|
3
|
-
**Authority**: This document defines the harness design philosophy. Every hook, Skill, template,
|
|
4
|
-
and CLI behavior must be justifiable by these principles. Conflicts → cite the principle, not the
|
|
5
|
-
rule.
|
|
6
|
-
|
|
7
|
-
**Provenance**: Goals 1–4 and Commandments C1–C5 are carried forward unchanged in substance from
|
|
8
|
-
Ultra Builder Pro v7.0, where they were derived from a 2026-04-30 system audit of real failures.
|
|
9
|
-
Do not weaken any of them without a reproduced failure case.
|
|
10
|
-
|
|
11
|
-
**Why exactly four goals and five commandments** — the counts are not sacred, the derivation
|
|
12
|
-
rules are:
|
|
13
|
-
|
|
14
|
-
- A **goal** is a class of systemic failure that has actually recurred, stated positively.
|
|
15
|
-
A fifth goal requires naming a fifth recurring failure class that none of these four covers.
|
|
16
|
-
- A **commandment** is a rule the model must cite to resolve a semantic conflict. If the model
|
|
17
|
-
will never face a moment where it needs to invoke the rule, the rule is not a commandment —
|
|
18
|
-
it is either a code invariant (enforce and test it) or dead weight (delete it).
|
|
19
|
-
|
|
20
|
-
By that second rule, "stay silent in repositories that never opted in" is **not** a commandment:
|
|
21
|
-
it is `if not exists('.ultra'): exit(0)`, a mechanical invariant the model never reasons about.
|
|
22
|
-
It lives in `docs/PLUGIN-ISOLATION-CONTRACT.md` and is verified by test, not by citation.
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## 4 Core Goals
|
|
27
|
-
|
|
28
|
-
The harness exists to serve these — every constraint derives its legitimacy from contributing to
|
|
29
|
-
one or more.
|
|
30
|
-
|
|
31
|
-
1. **Intent Fidelity** — what the user said they wanted is what gets built. No silent
|
|
32
|
-
reinterpretation, no scope creep, no convenient shortcuts that drift from the original ask.
|
|
33
|
-
2. **Long-term Evolvability** — iteration #5 is as easy as iteration #1. Cognitive debt cannot
|
|
34
|
-
accumulate; spec / task / code / doc must stay coherent.
|
|
35
|
-
3. **Production-Ready** — real persistence, real tests, real integration. No in-memory facades,
|
|
36
|
-
no `default off` to dodge integration, no `it.skip` to dodge failures.
|
|
37
|
-
4. **Cognitive Coherence** — agent and user share the same picture of "what is currently true."
|
|
38
|
-
Spec changes propagate. Doc rot is detected. Orphan code surfaces.
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
## 5 Commandments
|
|
43
|
-
|
|
44
|
-
### C1 — Goal-Always-Present
|
|
45
|
-
|
|
46
|
-
The agent never stops seeing the current steering contract. Before Research accepts a
|
|
47
|
-
baseline, the session Hook injects the raw Project Brief fallback. After Research, it
|
|
48
|
-
requires the exact field ``- Status: `accepted``` and injects the accepted North Star v2 `## Problem Reality`,
|
|
49
|
-
`## First-Principle Propositions`, `## North Star Outcomes`, and `## Hard Constraints`.
|
|
50
|
-
The complete selected sections have a 32 KiB SessionStart ceiling. Above it, the Hook
|
|
51
|
-
uses a reference-only fallback containing the canonical path, immutable accepted snapshot
|
|
52
|
-
path, revision, status, exact validated SHA-256 and byte length, and a direct-read
|
|
53
|
-
instruction that rejects different bytes as authority; semantic truncation is forbidden.
|
|
54
|
-
Brownfield fallback still reads the actual v0.26 `## Project Direction`, `## North Star
|
|
55
|
-
Outcome`, and `## Hard Constraints` shape, or the older `## One-line` shape, without
|
|
56
|
-
misreporting either as v2. Current task acceptance is appended in every case. The cost of
|
|
57
|
-
repetition is always less than the cost of drift.
|
|
58
|
-
|
|
59
|
-
The publication choice is exact: inject a mechanically bound accepted North Star, otherwise use the Project Brief fallback or a recognized legacy shape.
|
|
60
|
-
When selected accepted sections exceed 32 KiB, use the reference-only path instead of
|
|
61
|
-
semantic truncation. A v2 file whose decision, digest, or immutable snapshot binding is
|
|
62
|
-
invalid is never labelled accepted session authority.
|
|
63
|
-
The Hook does not maintain a second accepted-publication grammar. It safely locates the
|
|
64
|
-
installed sibling Research validator and invokes that one JavaScript report through a
|
|
65
|
-
bounded argv-only subprocess. Missing Node.js, a missing validator, timeout, malformed or
|
|
66
|
-
oversized output, invalid UTF-8, and repository path escape all produce a typed repair
|
|
67
|
-
fallback rather than accepted authority. The report checks the complete mechanical
|
|
68
|
-
structure; it does not decide whether the accepted semantics are true or valuable.
|
|
69
|
-
North Star and Project Brief ingress share one bounded 8 MiB regular-file snapshot:
|
|
70
|
-
repository root, parent components, and file identity are recorded, symlink components
|
|
71
|
-
are rejected, and the canonical root-to-file chain is freshly reopened after the read.
|
|
72
|
-
Every accepted, reference-only, legacy, or Project Brief publication consumes only those
|
|
73
|
-
captured bytes. An unavailable Project Brief produces a typed repair note and is never
|
|
74
|
-
reread through an unbounded path API. This detects ordinary cooperative-workspace drift;
|
|
75
|
-
it is not a claim that a process can prevent malicious operating-system-level replacement.
|
|
76
|
-
The v0.26 legacy branch recognizes headings `## Project Direction`, `## North Star Outcome`, `## Hard Constraints` exactly.
|
|
77
|
-
|
|
78
|
-
> **Test**: pick a random in-progress task, ask the agent "what's the acceptance criteria?" — if
|
|
79
|
-
> it cannot answer in one sentence, this commandment is broken.
|
|
80
|
-
|
|
81
|
-
### C2 — Enabling > Defensive
|
|
82
|
-
|
|
83
|
-
Every prohibition ships with a runnable alternative. Prohibitions without an enabling path force
|
|
84
|
-
agents to find loopholes (rename `mock` to `stub`, etc.). The cheaper path must be the right path.
|
|
85
|
-
|
|
86
|
-
> **Test**: scan every prohibition in every Skill; each must reference a template that exists
|
|
87
|
-
> under that Skill's `references/templates/` and can be copied as-is. The templates are rules,
|
|
88
|
-
> so they ship with the package rather than being copied into each project.
|
|
89
|
-
|
|
90
|
-
### C3 — Sensors not Blockers
|
|
91
|
-
|
|
92
|
-
Hooks emit signal; agents and users decide. Block only the **truly irreversible or
|
|
93
|
-
privileged destructive** effects for which the hook has an exact repair:
|
|
94
|
-
|
|
95
|
-
- Funds transfer / on-chain transactions
|
|
96
|
-
- Protected-branch history rewrite or deletion
|
|
97
|
-
- `DROP` / `TRUNCATE`
|
|
98
|
-
- Hardcoded secret commit
|
|
99
|
-
- Arbitrary code execution driven by user input
|
|
100
|
-
|
|
101
|
-
Additive protected-branch publication and database migrations are advisory: the former
|
|
102
|
-
remains recoverable through Git and the portable hook cannot receive every host's
|
|
103
|
-
trusted approval receipt; the latter is not mechanically classifiable as reversible or
|
|
104
|
-
irreversible. The work stands, the signal is delivered, and the agent proceeds inside
|
|
105
|
-
the owner's authorized frame.
|
|
106
|
-
|
|
107
|
-
> **Why this is absolute**: hard final gates and hard pre-commit gates each produced the same
|
|
108
|
-
> over-correction loop in v7 — the agent weakened tests to escape the gate and drifted from the
|
|
109
|
-
> spec. A gate that can be escaped by damaging the work is worse than no gate.
|
|
110
|
-
|
|
111
|
-
> **Test**: count blocking outputs across all hooks; they must map 1:1 to the irreversible list.
|
|
112
|
-
|
|
113
|
-
### C4 — Incremental Validation
|
|
114
|
-
|
|
115
|
-
The agent always knows "how far from done." Each edit updates `.ultra/progress/<task-id>.json`
|
|
116
|
-
with evidence completeness across six dimensions. Final-gate audits are forbidden — if a gap
|
|
117
|
-
matters at the end, it matters mid-flight.
|
|
118
|
-
|
|
119
|
-
Canonical task evidence uses `ultra-task-evidence-v2`: command, inspection,
|
|
120
|
-
owner-judgment, and external-observation retain distinct authorities, while the six
|
|
121
|
-
dimensions remain independent observations. The owner alone supplies an
|
|
122
|
-
owner-judgment result. Validators may check structure, identity, provenance, freshness,
|
|
123
|
-
and exact references; they never decide semantic acceptance. `.ultra/tasks.json` is the
|
|
124
|
-
sole task-status authority. A task remains `in_progress` through task review and becomes
|
|
125
|
-
`completed` only after blocking findings are resolved or authoritatively dispositioned
|
|
126
|
-
and affected evidence is refreshed. First-review admission uses the ledger, task
|
|
127
|
-
context, immutable packet, and actual pre-review evidence; the one final v2 record is
|
|
128
|
-
published only after its final review summary validates. Its `subject` is an independently
|
|
129
|
-
captured completion-snapshot freshness observation made after that validation and
|
|
130
|
-
immediately before evidence publication. Its `task_review` separately binds the retained strict summary; the summary does not prove the subject worktree digest. Aggregate Test
|
|
131
|
-
recomputes each command or external receipt's bounded stable bytes against
|
|
132
|
-
`raw_evidence_sha256`, then recomputes the exact record `evidence_digest`. The
|
|
133
|
-
product-worktree digest excludes `.ultra/evidence/**`; these separate raw and record
|
|
134
|
-
bindings make publication non-self-referential without making it invisible.
|
|
135
|
-
Aggregate Test
|
|
136
|
-
separately binds the current whole Change and rechecks current Acceptance, criterion and
|
|
137
|
-
verification type, review summary, owner record, and cited-artifact evidence. If later work
|
|
138
|
-
invalidates a completed task, Dev records affected criteria and reason in Change Log
|
|
139
|
-
and Resume Note before the explicit ledger `completed` to `in_progress` transition;
|
|
140
|
-
there is no silent demotion. Legacy context Status/Complexity and v1 evidence remain
|
|
141
|
-
honest migration diagnostics, not alternative truth.
|
|
142
|
-
|
|
143
|
-
> **Scoped exception**: whole-system wiring audit (`ultra-test`) is necessarily terminal, because
|
|
144
|
-
> "this export has no non-test importer" cannot be evaluated while later tasks are still pending.
|
|
145
|
-
> It is a terminal **sensor**, never a gate: it reports and hands the trade-off to the owner.
|
|
146
|
-
> This is the only permitted end-of-flow audit.
|
|
147
|
-
|
|
148
|
-
> **Test**: at any point in a task, reading `.ultra/progress/<task-id>.json` answers "what's left."
|
|
149
|
-
|
|
150
|
-
### C5 — Bounded Autonomy
|
|
151
|
-
|
|
152
|
-
Autonomy is defined by goals, not rules. Inside the boundary the agent picks freely; crossing the
|
|
153
|
-
boundary surfaces to the user.
|
|
154
|
-
|
|
155
|
-
- **Inside**: choosing libraries, naming, file layout, internal abstractions, decomposition
|
|
156
|
-
strategy, evidence interpretation, prioritization, final expression
|
|
157
|
-
- **Crossing**: weakening test assertions, modifying spec to match implementation, default-off
|
|
158
|
-
feature flags, in-memory replacing real persistence, scope reduction, external or irreversible
|
|
159
|
-
effects
|
|
160
|
-
|
|
161
|
-
**Which decisions reach the owner.** Inside/Crossing above sorts actions. Read from the owner's
|
|
162
|
-
side, the same boundary sorts decisions into three:
|
|
163
|
-
|
|
164
|
-
| Type | Definition | Handling |
|
|
165
|
-
|---|---|---|
|
|
166
|
-
| taste | no objectively correct answer; only the owner's preference settles it | always ask |
|
|
167
|
-
| crossing | objectively decidable, but the consequence is irreversible | always ask |
|
|
168
|
-
| everything else | has an objective answer, or is cheap to reverse | decide and proceed; asking is the error |
|
|
169
|
-
|
|
170
|
-
How much lands in the third row is a function of how sharp the north star is. With constraints
|
|
171
|
-
that can veto a concrete decision, most execution-time questions are answered by reading them.
|
|
172
|
-
With vague ones, "does this cross a boundary?" cannot be decided at all, so every question
|
|
173
|
-
degrades into taste and reaches the owner. **Interrupt frequency measures the north star, not
|
|
174
|
-
the work.** Frequent interruptions mean going back to sharpen constraints, not asking faster.
|
|
175
|
-
|
|
176
|
-
**Boundaries grow; they do not change.** Adding a hard constraint or a non-goal mid-flight is
|
|
177
|
-
routine and needs no permission — the frame got sharper and no prior promise broke. Editing or
|
|
178
|
-
deleting one is a REDUCTION under the test below. This is what makes iteration five cheaper than
|
|
179
|
-
iteration one: the frame accumulates, and the share of decisions the model settles alone rises
|
|
180
|
-
with it.
|
|
181
|
-
|
|
182
|
-
**Operational test for spec changes.** When implementation and spec disagree, classify the change
|
|
183
|
-
before touching the spec. Do not classify by intent — classify by asking one question that can be
|
|
184
|
-
checked against the file:
|
|
185
|
-
|
|
186
|
-
> **Does every commitment the spec already made still hold after this change?**
|
|
187
|
-
|
|
188
|
-
| Answer | Classification | Action |
|
|
189
|
-
|---|---|---|
|
|
190
|
-
| Yes, and it now commits to more | EXPANSION | write it, log it |
|
|
191
|
-
| Yes, the commitment is unchanged but stated correctly | CORRECTION | write it, log it |
|
|
192
|
-
| **No — at least one prior commitment no longer holds** | **REDUCTION** | **stop and ask the owner** |
|
|
193
|
-
|
|
194
|
-
The classification follows from the outcome, never from the reason. A well-argued rationale does
|
|
195
|
-
not convert a REDUCTION into a CORRECTION; the rationale goes into the question put to the owner.
|
|
196
|
-
This is the mechanism by which specs shrink silently, so it is the one place the model must not
|
|
197
|
-
be allowed to self-certify.
|
|
198
|
-
|
|
199
|
-
**Not to be confused with Planning Posture.** A Change's `## Planning Posture` uses
|
|
200
|
-
EXPAND / SELECTIVE / HOLD / REDUCE to say how much work to plan right now. That is a scope
|
|
201
|
-
decision about the future and is freely reversible. The classification above is about the past:
|
|
202
|
-
whether a promise already made still holds. `REDUCE` the plan is routine; a `REDUCTION` of
|
|
203
|
-
commitments stops the work and goes to the owner.
|
|
204
|
-
|
|
205
|
-
> **Test**: any boundary-crossing action must trigger an owner question, an active task
|
|
206
|
-
> `## Change Log` entry, or an accepted `.ultra/decisions/<id>.md`.
|
|
207
|
-
|
|
208
|
-
---
|
|
209
|
-
|
|
210
|
-
## When commandments conflict
|
|
211
|
-
|
|
212
|
-
Goals override commandments. Commandments override rules. Cite the higher level:
|
|
213
|
-
|
|
214
|
-
- `C2 overrides rule "no mock" → use the testcontainer template`
|
|
215
|
-
- `goal Intent-Fidelity overrides C5 → ask the owner before reducing scope`
|
|
216
|
-
|
|
217
|
-
---
|
|
218
|
-
|
|
219
|
-
## Modifying this file
|
|
220
|
-
|
|
221
|
-
Changes to PHILOSOPHY require:
|
|
222
|
-
|
|
223
|
-
1. A concrete failure case the change addresses, linked in the active Change or evidence
|
|
224
|
-
2. An impact assessment on every dependent hook and Skill
|
|
225
|
-
3. Migration of any dependent constraint
|
|
226
|
-
|
|
227
|
-
PHILOSOPHY is the only file whose changes propagate to every prohibition, template reference, and
|
|
228
|
-
Skill instruction. Do not touch it casually.
|
|
229
|
-
|
|
230
|
-
---
|
|
231
|
-
|
|
232
|
-
## Contract Table
|
|
233
|
-
|
|
234
|
-
> Each row is a hardcoded contract between two parts of the system. Changing one side **without**
|
|
235
|
-
> the other was the v7 audit's #1 cause of silently broken Goal-Always-Present injection. Update
|
|
236
|
-
> this table BEFORE editing either side.
|
|
237
|
-
|
|
238
|
-
| Consumer | Reads | Source of truth | Failure mode if drifted |
|
|
239
|
-
|---|---|---|---|
|
|
240
|
-
| `session_context` | the canonical JavaScript North Star validation report; bound accepted v2 sections or the 32 KiB immutable-snapshot reference with exact validated SHA-256 and byte length, without semantic truncation; Project Brief `## One-line`; actual v0.26 `## Project Direction` / `## North Star Outcome` / `## Hard Constraints`; or older North Star `## One-line` | `skills/ultra-research/scripts/validate_north_star.cjs`, `.ultra-template/north-star.md`, `.ultra-template/project-brief.md`, accepted `.ultra/north-star.md`, its owner decision and immutable snapshot, and the validator's two legacy-read shapes | Python and JavaScript publication grammars diverge, SessionStart labels unbound or different bytes accepted, truncates steering semantics, or shows no honest Project Brief/legacy fallback; C1 dies |
|
|
241
|
-
| `session_context` | unique active `change_id` → one matching ledger `in_progress` task, else first dependency-ready ledger `pending` task → its context; legacy context Status/Complexity are diagnostics only | active Change directory plus `tasks.json[].change_id`, dependencies, sole status, and `context_file` | abandoned or blocked acceptance is injected, a legacy context overrides the ledger, or current acceptance never surfaces |
|
|
242
|
-
| `mid_workflow_recall` | heading `## Acceptance Criteria` | `.ultra-template/contexts/TEMPLATE.md` | hook injects nothing; C1 dies silently |
|
|
243
|
-
| `ultra-tdd` | path `references/templates/*` | `skills/ultra-tdd/references/templates/` | guidance points at a missing runnable alternative; C2 dies |
|
|
244
|
-
| `post_edit_guard` | writes `.ultra/progress/<task-id>.json` for the active Change's current ledger task | active Change directory plus `tasks.json[].change_id`, `id`, and sole `status`, created on demand | historical work receives current observations or a Hook invents completion; C4 weakens |
|
|
245
|
-
| `ultra-dev` and `post_edit_guard` | 6 keys: `tests_written`, `tests_passed`, `persistence_real`, `feature_flags_audit`, `vertical_slice`, `spec_trace` | the six-dimension table in `skills/ultra-dev/SKILL.md` and typed evidence contract in `skills/ultra-plan/references/task-evidence-v2.md` | sensor and workflow report different evidence or a progress observation becomes semantic acceptance |
|
|
246
|
-
| plan/dev/review/test/deliver | ledger status; actual pre-review inputs; one final `ultra-task-evidence-v2` carrying an independent completion-snapshot freshness observation and separate task-review provenance; aggregate Test identity | `.ultra/tasks.json`, task context, immutable Review artifacts, and `skills/ultra-plan/references/task-evidence-v2.md` | first review requires its own final output, context becomes a second status authority, review provenance is claimed to prove the independent subject, task subject is rebound to a later aggregate worktree, or invalid evidence is silently demoted |
|
|
247
|
-
| planning and status | marker `[NEEDS CLARIFICATION]` | `.ultra-template/specs/*.md` | unresolved product truth is hidden |
|
|
248
|
-
| `ultra-plan` / `ultra-dev` / hooks | `trace_to` form `.ultra/specs/file.md#anchor` | `tasks.json[].trace_to` + GFM heading slugify | traces appear resolved when their heading is absent |
|
|
249
|
-
| `ultra-deliver` / `ultra-status` | root Change identity, ordered v2 task-evidence/review identities, and strict aggregate Review packet/admission/subject/summary bindings | `.ultra/test-report.json`, retained task evidence and Review artifacts, `worktree_digest.cjs`, and existing structural validators | stale Change, intent, task set, task evidence, Review transport, or product results pass as current |
|
|
250
|
-
| `compact_context` | `.ultra/.runtime/compact-snapshot.md` | derived from canonical files and Git | compact recovery loses acceleration, not authority |
|
|
251
|
-
| every hook | existence of `.ultra/` | the project directory | Ultra taxes projects that never opted in (see `docs/PLUGIN-ISOLATION-CONTRACT.md`) |
|
|
252
|
-
| `ultra-init` | the project data skeleton | `.ultra-template/` and the exact file list in its Skill | later Skills read missing authority paths; C1 dies |
|
|
253
|
-
|
|
254
|
-
### Maintenance protocol
|
|
255
|
-
|
|
256
|
-
Before editing any row's source of truth:
|
|
257
|
-
|
|
258
|
-
1. Find every consumer in this table
|
|
259
|
-
2. Update consumer and source together in one change
|
|
260
|
-
3. Re-run the end-to-end injection check
|
|
261
|
-
4. Update this table if the contract surface changed
|
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
# Runtime compatibility matrix
|
|
2
|
-
|
|
3
|
-
Ultra Builder Pro adapts one fourteen-Skill, five-hook contract to six native hosts.
|
|
4
|
-
This document records the differences that belong in adapters rather than shared
|
|
5
|
-
Skills.
|
|
6
|
-
|
|
7
|
-
## Installed surface
|
|
8
|
-
|
|
9
|
-
| Host | Managed plugin or bundle | Skills | Hook bridge |
|
|
10
|
-
|---|---|---:|---|
|
|
11
|
-
| Claude Code | `<config>/skills/ultra-builder-pro` | nested `skills/<name>` | direct Python commands in `hooks/hooks.json` |
|
|
12
|
-
| Codex | `<home>/plugins/ultra-builder-pro` plus personal marketplace entry | nested `skills/<name>` with `agents/openai.yaml` | `hooks/adapters/codex.py` |
|
|
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
|
-
| Kimi Code | `<config>/plugins/managed/ultra-builder-pro` plus `installed.json` | nested `skills/<name>` | `hooks/adapters/kimi.py` |
|
|
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` |
|
|
17
|
-
|
|
18
|
-
Every host receives the same eight owner workflows, five model disciplines, and one
|
|
19
|
-
router. Codex alone needs generated `agents/openai.yaml` files to express display data
|
|
20
|
-
and implicit-invocation policy; those are host metadata, not custom agents.
|
|
21
|
-
|
|
22
|
-
## Scope resolution
|
|
23
|
-
|
|
24
|
-
| Host | Global default | Local default | Environment override |
|
|
25
|
-
|---|---|---|---|
|
|
26
|
-
| Claude Code | `~/.claude` | `<cwd>/.claude` | `CLAUDE_CONFIG_DIR` |
|
|
27
|
-
| Codex | `~/.codex` for config; `~/plugins` and `~/.agents` for sidecars | `<cwd>/.codex` plus home-scoped plugin surface | `CODEX_HOME` |
|
|
28
|
-
| OpenCode | `${XDG_CONFIG_HOME:-~/.config}/opencode` | `<cwd>/.opencode` | `OPENCODE_CONFIG_DIR` or `OPENCODE_CONFIG` |
|
|
29
|
-
| Kimi Code | `~/.kimi-code` | no project plugin scope | `KIMI_CODE_HOME` |
|
|
30
|
-
| Grok Build | `~/.grok` | no project plugin scope | `GROK_HOME` |
|
|
31
|
-
| ZCode | `~/.zcode` | no project plugin scope | adapter `ZCODE_HOME` override |
|
|
32
|
-
|
|
33
|
-
An explicit `--config-dir` wins over all defaults and becomes the home for any
|
|
34
|
-
host-owned sidecar as well. This rule makes isolated installation tests trustworthy.
|
|
35
|
-
With multiple selected runtimes, the CLI passes `<config-dir>/<runtime>` to each adapter
|
|
36
|
-
instead of merging incompatible host layouts.
|
|
37
|
-
Kimi, Grok, and ZCode currently expose user-scoped plugin installation only. `--local` rejects
|
|
38
|
-
them before mutating another host; an explicit `--config-dir` remains available for an
|
|
39
|
-
isolated user-scope installation test.
|
|
40
|
-
|
|
41
|
-
## Invocation policy
|
|
42
|
-
|
|
43
|
-
| Invocation class | Owner can route directly | Model can select implicitly |
|
|
44
|
-
|---|---:|---:|
|
|
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.
|
|
56
|
-
|
|
57
|
-
Claude and Grok receive `user-invocable` / `disable-model-invocation` frontmatter.
|
|
58
|
-
Kimi receives its native equivalent. Codex receives
|
|
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.
|
|
71
|
-
|
|
72
|
-
## Hook compatibility
|
|
73
|
-
|
|
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 |
|
|
81
|
-
|
|
82
|
-
All hooks share the same `.ultra/` idle guard. Wire adapters normalize payload and
|
|
83
|
-
output fields only; they do not change semantic policy. Codex installation health and
|
|
84
|
-
hook activation are distinct: Codex skips newly installed non-managed plugin hooks
|
|
85
|
-
until the user reviews and trusts the current definition, so Doctor reports
|
|
86
|
-
`hook_activation: user_review_required` without pretending the hook already ran.
|
|
87
|
-
|
|
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:
|
|
129
|
-
|
|
130
|
-
- Claude print mode with structured output and an explicit file-tool allowlist; read-only
|
|
131
|
-
uses `plan`, while bounded write uses `acceptEdits` without Bash or web tools;
|
|
132
|
-
- Codex ephemeral `exec` with user config ignored, project rules preserved, native
|
|
133
|
-
`read-only` or `workspace-write`, network disabled, and an output schema;
|
|
134
|
-
- OpenCode `run --auto` only after an inline config explicitly denies Bash, web,
|
|
135
|
-
subagents, external directories, Skills and undeclared edit roots;
|
|
136
|
-
- Kimi prompt mode with a launch-only read or write agent profile that exposes only
|
|
137
|
-
file tools and no Bash, web, MCP, Skills or subagents;
|
|
138
|
-
- Grok single-turn mode with `read-only` or `workspace` OS sandbox, structured output,
|
|
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.
|
|
233
|
-
|
|
234
|
-
The launcher accepts no external-effect authority. It binds instruction, permission and
|
|
235
|
-
output-schema digests, a clean Git worktree, allowed write roots, actual changed paths,
|
|
236
|
-
strict result schema, timeout and cancellation. Empty roots select read-only mode. The
|
|
237
|
-
model returns structured output and never authors the receipt. Host-native permissions
|
|
238
|
-
are the execution boundary; the primary host still inspects and integrates the isolated
|
|
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`.
|
|
262
|
-
|
|
263
|
-
## Lifecycle verification
|
|
264
|
-
|
|
265
|
-
Each adapter must pass isolated install, doctor, reinstall, and uninstall tests. Real
|
|
266
|
-
global doctor additionally asks the native host where supported, but never repairs or
|
|
267
|
-
installs. Codex still performs native registration under `--config-dir`; its host process
|
|
268
|
-
inherits the same isolated `HOME` and `CODEX_HOME`. Grok native registration is skipped
|
|
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
|
|
272
|
-
and fake HOME to contain zero children after uninstall, while separate ownership tests
|
|
273
|
-
prove that pre-existing empty Codex and Kimi registries survive.
|
|
274
|
-
|
|
275
|
-
## Authenticated cross-host continuation evidence
|
|
276
|
-
|
|
277
|
-
On 2026-08-03, one deliberately narrow task was run in an isolated Git repository to
|
|
278
|
-
test the product's central recovery claim with real authenticated models. This was a
|
|
279
|
-
continuation drill, not a full project workflow or a delegation receipt test.
|
|
280
|
-
|
|
281
|
-
Both hosts used globally installed artifacts from the same clean source candidate:
|
|
282
|
-
|
|
283
|
-
- source commit: `c473a248bde2afce77591f2ba382246d420b5c72`;
|
|
284
|
-
- worktree digest: `e83bdcbe2905cf02cb06cb0219127f6ce0400484331a6e9fc95622bbe24b44bd`;
|
|
285
|
-
- Doctor: Claude healthy with 83 assets and zero issues; Codex healthy with 99 assets
|
|
286
|
-
and zero issues, with optional hooks still `user_review_required`.
|
|
287
|
-
|
|
288
|
-
The seed repository had one passing smoke test, one pending task, one mapped Change
|
|
289
|
-
acceptance ID, and seed HEAD `cf27d62aeeae353e0650413de6d9a118b89a0406`.
|
|
290
|
-
|
|
291
|
-
| Phase | Execution boundary | Observed result |
|
|
292
|
-
|---|---|---|
|
|
293
|
-
| Claude | One print-mode call, `acceptEdits`, no persistent session, empty MCP config, explicit file and local-test tools, USD 1.00 cap | Exit 0 at USD 0.741367 with zero web requests. It changed only the task ledger/context, added `test/slug.test.cjs`, and allowed the hook to write disposable progress. `src/slug.cjs` and completion evidence remained untouched. The task test exited 1 with actual `hello,-world!` versus expected `hello-world`; both task surfaces read `in_progress`, and the Resume Note named the exact next action. |
|
|
294
|
-
| Codex | One ephemeral `workspace-write` call with sandbox network disabled and no conversation from Claude | Exit 0. It found and read the installed `ultra-dev` Skill, recovered the single task from Git and `.ultra/`, reproduced the same red, changed only the intended implementation, then passed the task test 1/1 and `npm test` 2/2. It wrote the three-command canonical evidence record and logs, completed both task status surfaces, and filled Completion and the final Resume Note. |
|
|
295
|
-
| Independent check | Local commands after both model calls | `node --test test/slug.test.cjs` passed 1/1, `npm test` passed 2/2, `git diff --check` passed, and a structural check confirmed one completed task, six evidence dimensions, three existing command-log references, and matching ledger/context state. |
|
|
296
|
-
|
|
297
|
-
The Codex process emitted non-blocking diagnostics for an older local model-cache
|
|
298
|
-
schema and an unauthenticated user-config MCP startup. No MCP result was consumed and
|
|
299
|
-
no external effect occurred; all task actions used local file and shell tools. This
|
|
300
|
-
means the drill proves file-backed Claude-to-Codex continuation even while Codex hooks
|
|
301
|
-
remain untrusted, but it does not claim that arbitrary user configuration starts
|
|
302
|
-
without unrelated host diagnostics.
|
|
303
|
-
|
|
304
|
-
The result establishes one real end-to-end example of cross-host resume without a
|
|
305
|
-
shared conversation, database, MCP authority, daemon, or generated prompt projection.
|
|
306
|
-
It does not establish output quality for every model, host, repository, or task shape.
|
|
307
|
-
Task-level `ultra-review` and commits were intentionally excluded from the drill so the
|
|
308
|
-
two host calls tested only the handoff boundary.
|
|
309
|
-
|
|
310
|
-
Two older `.ultra` evidence snapshots originally named the completed WIP by its former
|
|
311
|
-
path. The current-path artifact contract requires every reference to resolve in the
|
|
312
|
-
checkout, so those two references now point here while their 2026-08-01 status and
|
|
313
|
-
limitations remain explicitly historical. The original WIP is still recoverable from
|
|
314
|
-
their pinned source commit `3f99189bc68697262cd90444685ac2d4857139c4` with
|
|
315
|
-
`git show`; the live `docs/wip/` directory contains no unfinished document.
|