ultra-builder-pro-cli 0.9.0 → 0.10.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 +47 -0
- package/README.md +11 -6
- package/adapters/_shared/codex-assets.cjs +10 -0
- package/adapters/_shared/handbook.cjs +2 -0
- package/adapters/_shared/runtime-assets.cjs +1 -0
- package/adapters/_shared/tests/handbook.test.cjs +3 -0
- package/adapters/_shared/tests/runtime-assets.test.cjs +1 -0
- package/adapters/kimi.js +2 -2
- package/adapters/opencode.js +46 -17
- package/adapters/tests/claude.test.cjs +4 -1
- package/adapters/tests/codex.test.cjs +4 -3
- package/adapters/tests/kimi.test.cjs +6 -2
- package/adapters/tests/opencode.test.cjs +46 -3
- package/docs/AGENT-CONTEXT.md +34 -12
- package/docs/ARCHITECTURE.md +31 -5
- package/docs/PLAN.zh-CN.md +3 -2
- package/docs/ROADMAP.md +5 -4
- package/docs/RUNTIME-COMPAT-MATRIX.md +7 -5
- package/docs/USER-HANDBOOK-CONTRACT.md +9 -2
- package/hooks/README.md +6 -4
- package/hooks/active_task_context.py +14 -0
- package/hooks/context_spine.py +218 -0
- package/hooks/health_check.py +1 -1
- package/hooks/workflow_context.py +16 -123
- package/hooks/workflow_resume.py +21 -0
- package/mcp-server/lib/change-workflow.cjs +89 -11
- package/mcp-server/lib/change-workflow.test.cjs +202 -7
- package/mcp-server/lib/context-spine.cjs +331 -0
- package/mcp-server/lib/context-spine.test.cjs +73 -0
- package/mcp-server/lib/spec-learning.cjs +191 -0
- package/mcp-server/lib/spec-learning.test.cjs +62 -0
- package/mcp-server/lib/state-db.cjs +72 -10
- package/mcp-server/lib/state-db.test.cjs +7 -2
- package/mcp-server/server.cjs +31 -1
- package/mcp-server/tests/db-ops.test.cjs +3 -3
- package/mcp-server/tests/server-contract.test.cjs +74 -0
- package/mcp-server/tests/state-db.test.cjs +20 -3
- package/package.json +1 -1
- package/skills/learn/SKILL.md +1 -0
- package/skills/ultra-change/SKILL.md +91 -118
- package/skills/ultra-deliver/SKILL.md +93 -221
- package/skills/ultra-dev/SKILL.md +81 -310
- package/skills/ultra-doctor/SKILL.md +1 -0
- package/skills/ultra-init/SKILL.md +1 -0
- package/skills/ultra-plan/SKILL.md +72 -292
- package/skills/ultra-review/SKILL.md +79 -407
- package/skills/ultra-status/SKILL.md +55 -168
- package/skills/ultra-test/SKILL.md +64 -183
- package/skills/ultra-think/SKILL.md +1 -0
- package/spec/cli-protocol.md +3 -0
- package/spec/mcp-tools.yaml +133 -4
- package/spec/schemas/state-db.sql +31 -0
|
@@ -1,239 +1,111 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ultra-deliver
|
|
3
|
-
description: "Converge
|
|
3
|
+
description: "Converge an implementation, approved specification learning, independent review axes, and release evidence into one recoverable baseline."
|
|
4
|
+
user-invocable: true
|
|
4
5
|
runtime: all
|
|
5
6
|
mcp_tools_required:
|
|
6
7
|
- change.list
|
|
7
8
|
- change.get
|
|
8
9
|
- change.context
|
|
10
|
+
- change.breadcrumb
|
|
11
|
+
- change.learning_resolve
|
|
9
12
|
- change.converge
|
|
10
13
|
- change.archive
|
|
11
14
|
cli_fallback: "direct user interaction"
|
|
12
15
|
---
|
|
13
16
|
|
|
14
|
-
# ultra-deliver —
|
|
17
|
+
# ultra-deliver — Converge, Archive, Release
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
Change lifecycle writes go through MCP only.
|
|
20
|
-
|
|
21
|
-
## Prerequisites (all validations are blocking)
|
|
19
|
+
Deliver the current baseline or one continuous-change packet. Change lifecycle writes
|
|
20
|
+
use MCP only; `.ultra/test-report.json`, review sessions, and delivery reports are
|
|
21
|
+
evidence artifacts.
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
## 1. Bind the delivery
|
|
24
24
|
|
|
25
|
-
Call `change.list` for
|
|
25
|
+
1. Call `change.list` for active, blocked, and ready changes.
|
|
26
|
+
2. Bind exactly one relevant change; require an id when ambiguous. Initial baseline
|
|
27
|
+
delivery may use `change_id: null`.
|
|
28
|
+
3. Call `change.breadcrumb`. A stale/blocked context or incomplete linked task blocks.
|
|
29
|
+
4. Verify `.ultra/test-report.json` exists, passed, matches the change, and records the
|
|
30
|
+
current full HEAD plus at least one public seam.
|
|
31
|
+
5. Verify the latest review session matches the same HEAD and has passing independent
|
|
32
|
+
`spec_fidelity` and `engineering_standards` axes.
|
|
26
33
|
|
|
27
|
-
|
|
28
|
-
- More than one → require an explicit id; never guess which change to archive.
|
|
29
|
-
- None → allow initial-baseline delivery, but record `change_id: null`.
|
|
30
|
-
- Active/blocked change → its linked tasks must all be completed and its
|
|
31
|
-
`test-report.json.change_id` must match.
|
|
32
|
-
- Ready change → do not rerun convergence blindly; verify its existing
|
|
33
|
-
verification artifact still matches current HEAD before archive.
|
|
34
|
-
|
|
35
|
-
### Validation 1 — `/ultra-test` passed
|
|
36
|
-
|
|
37
|
-
Read `.ultra/test-report.json`:
|
|
38
|
-
- File must exist → else: "Run `/ultra-test` first" → **EXIT**
|
|
39
|
-
- `passed === true` → else: show `blocking_issues`, **EXIT**
|
|
40
|
-
- `git_commit === current HEAD` → else: "Code changed since last test;
|
|
41
|
-
re-run `/ultra-test`" → **EXIT**
|
|
34
|
+
Do not reuse evidence from another checkout, commit, task set, or change.
|
|
42
35
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
`git status --porcelain` must be empty. If dirty, ask through the current
|
|
46
|
-
Host's native user-interaction surface:
|
|
47
|
-
- A: "Auto-commit all changes" → `git add -A && git commit -m "chore: pre-delivery cleanup"`
|
|
48
|
-
- B: "Review changes first" → `git diff --stat` → re-ask
|
|
49
|
-
- C: "Block delivery" → **EXIT**
|
|
50
|
-
|
|
51
|
-
Commit failure (conflicts, hook rejection) → surface error and **EXIT**.
|
|
52
|
-
|
|
53
|
-
## Workflow
|
|
36
|
+
## 2. Reconcile specification learning
|
|
54
37
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
1.
|
|
78
|
-
2.
|
|
79
|
-
3.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
4.
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
**3.3 Release commit**:
|
|
130
|
-
```bash
|
|
131
|
-
git add -A
|
|
132
|
-
git commit -m "chore(release): v<X.Y.Z>"
|
|
133
|
-
```
|
|
134
|
-
Verify with `git log -1 --oneline`.
|
|
135
|
-
|
|
136
|
-
**3.4 Recompile context and converge the change** (skip only for initial baseline):
|
|
137
|
-
|
|
138
|
-
For `active` or `blocked`, call `change.context` after the release commit so its
|
|
139
|
-
git head and task set are current. Then call `change.converge` with the exact
|
|
140
|
-
evidence required by kind:
|
|
141
|
-
|
|
142
|
-
- `quick`: diff, tests, spec;
|
|
143
|
-
- `standard` / `major`: diff, tests, spec, docs, review;
|
|
144
|
-
- `incident`: diagnosis, diff, tests. The diagnosis evidence must point to the
|
|
145
|
-
completed `diagnosis.md`; convergence separately validates all five required
|
|
146
|
-
debugging sections and cannot be satisfied by the evidence string alone.
|
|
147
|
-
|
|
148
|
-
Evidence must name concrete commands, artifacts, or file paths. If blockers are
|
|
149
|
-
returned, stop before tag/push and route to the owning workflow. Do not weaken
|
|
150
|
-
the change kind or mark failed evidence `not_applicable` merely to pass.
|
|
151
|
-
|
|
152
|
-
**3.5 Archive after baseline reconciliation**:
|
|
153
|
-
|
|
154
|
-
Call `change.archive` with the summary and either `baseline_updates` or the
|
|
155
|
-
explicit no-change reason. This moves the packet from `changes/active` to the
|
|
156
|
-
dated archive and records closure in state.db. Archive failure blocks release.
|
|
157
|
-
|
|
158
|
-
**3.6 Git tag**:
|
|
159
|
-
```bash
|
|
160
|
-
git tag v<X.Y.Z>
|
|
161
|
-
```
|
|
162
|
-
Verify with `git tag -l v<X.Y.Z>`.
|
|
163
|
-
|
|
164
|
-
**3.7 Push to remote**:
|
|
165
|
-
```bash
|
|
166
|
-
git push origin main # release commit
|
|
167
|
-
git push origin v<X.Y.Z> # version tag
|
|
168
|
-
```
|
|
169
|
-
Verify with `git ls-remote --tags origin | grep v<X.Y.Z>`.
|
|
170
|
-
|
|
171
|
-
**Release checklist**:
|
|
172
|
-
- [ ] Version determined and displayed
|
|
173
|
-
- [ ] Version file updated and verified
|
|
174
|
-
- [ ] Release commit created and verified
|
|
175
|
-
- [ ] Change context current, convergence ready, baseline reconciled, archive complete
|
|
176
|
-
- [ ] Git tag created and verified
|
|
177
|
-
- [ ] Commit and tag pushed and verified on remote
|
|
178
|
-
|
|
179
|
-
Any failure → stop immediately; do NOT continue; surface last-step error.
|
|
180
|
-
|
|
181
|
-
### Step 4 — Persist `.ultra/delivery-report.json`
|
|
182
|
-
|
|
183
|
-
```jsonc
|
|
184
|
-
{
|
|
185
|
-
"timestamp": "<ISO8601>",
|
|
186
|
-
"version": "<X.Y.Z>",
|
|
187
|
-
"git_tag": "v<X.Y.Z>",
|
|
188
|
-
"git_commit": "<HEAD SHA>",
|
|
189
|
-
"change_id": "<archived-change-id-or-null>",
|
|
190
|
-
"change_archive_path": "<path-or-null>",
|
|
191
|
-
"convergence_ready": true,
|
|
192
|
-
"baseline_updates": ["<project-relative-path>"],
|
|
193
|
-
"changelog_updated": true,
|
|
194
|
-
"technical_debt_refreshed": true,
|
|
195
|
-
"build_success": true,
|
|
196
|
-
"pushed": true
|
|
197
|
-
}
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
### Step 5 — Report
|
|
201
|
-
|
|
202
|
-
Print a tight release summary: change id/archive, baseline files reconciled,
|
|
203
|
-
tag, commit, exact verification commands, outstanding technical-debt count,
|
|
204
|
-
and next suggested action. After release, daily work starts with `/ultra-change`.
|
|
205
|
-
|
|
206
|
-
## Deliverables Checklist (final)
|
|
207
|
-
|
|
208
|
-
- [ ] `/ultra-test` passed (verified via test-report.json)
|
|
209
|
-
- [ ] Uncommitted changes handled
|
|
210
|
-
- [ ] CHANGELOG + technical-debt refreshed (README if API changed)
|
|
211
|
-
- [ ] Production build exit 0
|
|
212
|
-
- [ ] Continuous change converged and archived (when present)
|
|
213
|
-
- [ ] Version bumped, tagged, pushed
|
|
214
|
-
- [ ] delivery-report.json written
|
|
215
|
-
|
|
216
|
-
## MCP → CLI fallback matrix
|
|
217
|
-
|
|
218
|
-
| Purpose | MCP tool | CLI fallback |
|
|
219
|
-
|---------|----------|--------------|
|
|
220
|
-
| Resolve dirty-tree action | none | current Host's native user-interaction surface |
|
|
221
|
-
| Override version bump | none | current Host's native user-interaction surface |
|
|
222
|
-
| Resolve/bind change | `change.list` / `change.get` | none; fail closed |
|
|
223
|
-
| Refresh context | `change.context` | none; fail closed |
|
|
224
|
-
| Deterministic closure | `change.converge` / `change.archive` | none; fail closed |
|
|
225
|
-
|
|
226
|
-
## What this skill DOES NOT do
|
|
227
|
-
|
|
228
|
-
- Does NOT replace `/ultra-test`; it re-runs the exact release evidence after
|
|
229
|
-
documentation and version changes so the shipped commit is verified
|
|
230
|
-
- Does NOT publish to npm / crates.io / PyPI (Phase 9 handles distribution)
|
|
231
|
-
- Does NOT directly mutate state.db or external provider state
|
|
232
|
-
|
|
233
|
-
## Integration
|
|
234
|
-
|
|
235
|
-
| | |
|
|
236
|
-
|---|---|
|
|
237
|
-
| **Input** | bound change (if any), test/review artifacts, current repo |
|
|
238
|
-
| **Output** | archived change, reconciled baseline, delivery report, git tag + remote push |
|
|
239
|
-
| **Next** | deploy/announce; next daily change begins with `/ultra-change` |
|
|
38
|
+
Call `change.get` for authoritative `learning_candidates`; use the packet's
|
|
39
|
+
`spec-learning.json` only as the inspectable projection.
|
|
40
|
+
|
|
41
|
+
- `proposed`: require approve or reject through `change.learning_resolve`.
|
|
42
|
+
- `approved`: update the declared baseline target, verify the edit, then mark `apply`.
|
|
43
|
+
- `rejected`: preserve the reason as decision evidence.
|
|
44
|
+
- `applied`: verify the target still contains the accepted behavior.
|
|
45
|
+
|
|
46
|
+
Any proposed or approved candidate blocks convergence. This is the mandatory path that
|
|
47
|
+
keeps baseline specs alive after daily changes; it is not cross-session memory.
|
|
48
|
+
|
|
49
|
+
Reconcile accepted `delta/` content and declared documentation impact into baseline
|
|
50
|
+
documents. Record `baseline_updates`, or a specific no-change reason. No unresolved
|
|
51
|
+
placeholder, unknown docs impact, or delivered-only-in-delta behavior may remain.
|
|
52
|
+
|
|
53
|
+
## 3. Verify the release candidate
|
|
54
|
+
|
|
55
|
+
Require a clean, reviewed release commit. If changes remain, show the diff and obtain
|
|
56
|
+
explicit approval before committing. Never auto-stage unrelated user changes.
|
|
57
|
+
|
|
58
|
+
Run exact project commands for:
|
|
59
|
+
|
|
60
|
+
1. focused regression/acceptance feedback loop;
|
|
61
|
+
2. full relevant tests;
|
|
62
|
+
3. static checks and production build;
|
|
63
|
+
4. package/install/doctor smoke where the product is distributed;
|
|
64
|
+
5. public-seam acceptance and rollback/recovery sanity.
|
|
65
|
+
|
|
66
|
+
Record commands, exit results, and current HEAD. Any post-test edit invalidates the
|
|
67
|
+
test and review gates.
|
|
68
|
+
|
|
69
|
+
## 4. Compile final role context
|
|
70
|
+
|
|
71
|
+
Call `change.context` at the release commit with `role=review`, `gate=convergence`,
|
|
72
|
+
current required refs/digests, the public seam, exact verification command, and the
|
|
73
|
+
single next action `Archive the converged change`. Readiness must be `ready`.
|
|
74
|
+
|
|
75
|
+
## 5. Converge
|
|
76
|
+
|
|
77
|
+
Call `change.converge` with evidence rows for:
|
|
78
|
+
|
|
79
|
+
- `diff`: reviewed release diff and public seam;
|
|
80
|
+
- `tests`: exact signal object (`command`, expected/observed red, observed green,
|
|
81
|
+
deterministic, duration when known) and seam;
|
|
82
|
+
- `spec`: baseline/delta and applied learning evidence;
|
|
83
|
+
- `docs`: updated paths or explicit non-applicability;
|
|
84
|
+
- `review`, `axis=spec_fidelity`;
|
|
85
|
+
- `review`, `axis=engineering_standards`;
|
|
86
|
+
- `diagnosis` for incidents.
|
|
87
|
+
|
|
88
|
+
Do not collapse the two review axes or substitute prose for the signal fields. If
|
|
89
|
+
convergence returns blockers, fix the named source and rerun the invalidated gates.
|
|
90
|
+
|
|
91
|
+
## 6. Archive and release
|
|
92
|
+
|
|
93
|
+
After `ready=true`, call `change.archive` with summary and `baseline_updates` (or the
|
|
94
|
+
validated no-change reason). Then:
|
|
95
|
+
|
|
96
|
+
1. determine the semantic version from user-visible compatibility;
|
|
97
|
+
2. update version and changelog;
|
|
98
|
+
3. rerun release verification if version files changed;
|
|
99
|
+
4. create a non-force commit/tag and push only with explicit release authorization;
|
|
100
|
+
5. publish the package/release through the repository's authenticated workflow;
|
|
101
|
+
6. verify the remote tag/release and registry version independently.
|
|
102
|
+
|
|
103
|
+
Write `.ultra/delivery-report.json` with change id, archived status, commit, version,
|
|
104
|
+
commands, package/release identifiers, baseline updates, rollback notes, and timestamp.
|
|
105
|
+
|
|
106
|
+
## Completion gate
|
|
107
|
+
|
|
108
|
+
Delivery is complete only when the change is archived, local and remote commit/tag
|
|
109
|
+
agree, registry/release verification is current, and the worktree contains no
|
|
110
|
+
unexplained scope. Report the outcome first, exact evidence next, and residual risks
|
|
111
|
+
last. Never say “published” based only on a local version bump.
|