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,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ultra-dev
|
|
3
|
-
description: "
|
|
3
|
+
description: "Execute one fresh-context vertical slice through a public seam with strict red-green evidence, bounded recovery, and specification learning."
|
|
4
|
+
user-invocable: true
|
|
4
5
|
runtime: all
|
|
5
6
|
mcp_tools_required:
|
|
6
7
|
- task.update
|
|
@@ -8,342 +9,112 @@ mcp_tools_required:
|
|
|
8
9
|
- task.list
|
|
9
10
|
- change.get
|
|
10
11
|
- change.context
|
|
12
|
+
- change.breadcrumb
|
|
13
|
+
- change.learning_propose
|
|
11
14
|
---
|
|
12
15
|
|
|
13
|
-
# ultra-dev —
|
|
16
|
+
# ultra-dev — One Slice, One Feedback Loop
|
|
14
17
|
|
|
15
|
-
Drive one task from `pending
|
|
16
|
-
|
|
17
|
-
MCP `task.update`; the projector regenerates `tasks.json` and context-md
|
|
18
|
-
frontmatter. For a task linked by `change_id`, requirement discoveries go to
|
|
19
|
-
the active change delta first; baseline reconciliation happens in
|
|
20
|
-
`/ultra-deliver`.
|
|
18
|
+
Drive one task from `pending` to `completed`. Task status lives in
|
|
19
|
+
`.ultra/state.db`; generated task JSON and context frontmatter are read-only.
|
|
21
20
|
|
|
22
|
-
## Authority
|
|
21
|
+
## Authority and recovery
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
`LEGACY_STATE_MIGRATION_REQUIRED`,
|
|
23
|
+
If `task.list`, `task.get`, or `task.update` fails, stop. Never write raw SQLite,
|
|
24
|
+
`.ultra/tasks/tasks.json`, or projected status fields. On
|
|
25
|
+
`LEGACY_STATE_MIGRATION_REQUIRED`, use the documented migration command before work.
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
```
|
|
27
|
+
At entry, read `change.breadcrumb` when a change is active. A blocked or stale
|
|
28
|
+
breadcrumb is an implementation blocker, not an advisory warning.
|
|
31
29
|
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
`.ultra/workflow-state.json` is a compact recovery checkpoint only. Record command,
|
|
31
|
+
task, branch, current step, status, and timestamp; do not copy prompts, codebase
|
|
32
|
+
summaries, or provider memory into it.
|
|
34
33
|
|
|
35
|
-
##
|
|
34
|
+
## 1. Select and compile the slice
|
|
36
35
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
36
|
+
1. Select the requested task, otherwise the first dependency-ready pending task.
|
|
37
|
+
2. Call `task.get`; verify dependencies, ownership, acceptance, public seam, and exact
|
|
38
|
+
verification command.
|
|
39
|
+
3. If linked to a change, call `change.get`, then compile `change.context` with:
|
|
40
|
+
`role=implement`, `gate=implementation`, the smallest required references, and the
|
|
41
|
+
task's execution contract.
|
|
42
|
+
4. Stop on missing/stale references, budget overflow, unknown documentation impact,
|
|
43
|
+
or a HEAD mismatch. Do not compensate by loading the whole repository.
|
|
44
|
+
5. Mark the task `in_progress` with `task.update` and checkpoint the step.
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
The default slice is a `tracer_bullet`. An `expand_contract` must already be approved;
|
|
47
|
+
implementation does not widen its own contract silently.
|
|
47
48
|
|
|
48
|
-
|
|
49
|
+
## 2. Establish red
|
|
49
50
|
|
|
50
|
-
|
|
51
|
+
Before production logic changes:
|
|
51
52
|
|
|
52
|
-
|
|
53
|
+
1. Reproduce the smallest observable symptom at the declared public seam.
|
|
54
|
+
2. Add or identify the regression/contract test.
|
|
55
|
+
3. Run the exact command and record:
|
|
56
|
+
- command;
|
|
57
|
+
- expected failure;
|
|
58
|
+
- observed red result;
|
|
59
|
+
- deterministic/non-deterministic classification;
|
|
60
|
+
- duration when useful.
|
|
53
61
|
|
|
54
|
-
|
|
62
|
+
For a new feature, red means an assertion expressing missing behavior. For a refactor,
|
|
63
|
+
establish a green characterization baseline first. Documentation/config-only tasks may
|
|
64
|
+
use a structural validator instead of a failing test, but must state why.
|
|
55
65
|
|
|
56
|
-
|
|
66
|
+
If red cannot be observed, stop and correct the task contract; do not implement against
|
|
67
|
+
an unproven hypothesis.
|
|
57
68
|
|
|
58
|
-
|
|
59
|
-
- If `branch` matches current `git branch --show-current` → resume from the
|
|
60
|
-
step after `status`
|
|
61
|
-
- If `review_session` is set → skip re-running review
|
|
62
|
-
- Otherwise → proceed to Step 0.5
|
|
69
|
+
## 3. Implement the minimum complete path
|
|
63
70
|
|
|
64
|
-
|
|
71
|
+
- Trace entry point → domain rule → side effect → public seam.
|
|
72
|
+
- Search for existing utilities and dependencies before adding helpers.
|
|
73
|
+
- Keep IO at boundaries and domain behavior testable.
|
|
74
|
+
- Include required validation, errors, observability, recovery, and documentation.
|
|
75
|
+
- Preserve unrelated dirty worktree changes and stay within allowed paths.
|
|
76
|
+
- Verify each meaningful increment through the same feedback loop.
|
|
65
77
|
|
|
66
|
-
|
|
78
|
+
If implementation reveals a stable invariant or public behavior absent from the
|
|
79
|
+
baseline, call `change.learning_propose` with its evidence and target document. Do not
|
|
80
|
+
edit the baseline silently and do not store the discovery as Ultra memory.
|
|
67
81
|
|
|
68
|
-
|
|
69
|
-
2. If ANY task has `status` in (`in_progress`, `completed`) → plan was already
|
|
70
|
-
approved → skip this gate
|
|
71
|
-
3. Present plan overview (totals, P0/P1/P2, Walking-Skeleton position)
|
|
72
|
-
4. Ask through the current Host's native user-interaction surface:
|
|
73
|
-
- A: "Confirm, start implementation" → continue to Step 1
|
|
74
|
-
- B: "Revise plan first" → suggest `/ultra-plan` → **EXIT**
|
|
75
|
-
5. On approval, write workflow-state:
|
|
76
|
-
```jsonc
|
|
77
|
-
{"command":"ultra-dev","task_id":0,"branch":"","step":"0.5","status":"design_approved","ts":"<ISO8601>"}
|
|
78
|
-
```
|
|
82
|
+
## 4. Establish green and inspect reachability
|
|
79
83
|
|
|
80
|
-
|
|
84
|
+
Run, in order:
|
|
81
85
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
+
1. the exact red command until the observed failure becomes green;
|
|
87
|
+
2. adjacent focused tests;
|
|
88
|
+
3. type check/lint/build proportionate to the change;
|
|
89
|
+
4. the live public-seam acceptance path;
|
|
90
|
+
5. final diff and worktree scope inspection.
|
|
86
91
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
Acceptance sections. Use the Acceptance list as the initial todo set.
|
|
92
|
+
Record exact commands and zero-failure results. “Compiled” or “unit tests pass” is not
|
|
93
|
+
enough when the new module is not connected to a consumer.
|
|
90
94
|
|
|
91
|
-
|
|
92
|
-
`context-manifest.json`. The task id, git head, allowed paths, spec refs, and
|
|
93
|
-
external provider metadata must match the current slice. Call `change.context`
|
|
94
|
-
before editing whenever they are stale. Provider content remains external.
|
|
95
|
+
## 5. Review gate
|
|
95
96
|
|
|
96
|
-
|
|
97
|
+
Checkpoint `status=pre_review`, then invoke `/ultra-review all`. The review must produce
|
|
98
|
+
independent `spec_fidelity` and `engineering_standards` verdicts. Fix all P0/P1 issues,
|
|
99
|
+
rerun affected tests, and recheck until both axes pass. The primary host owns final
|
|
100
|
+
verification; review workers never mutate durable Ultra state.
|
|
97
101
|
|
|
98
|
-
|
|
99
|
-
// MCP: task.update (R: do NOT touch context-md frontmatter or "> **Status**" line)
|
|
100
|
-
{ "id": "<id>", "patch": { "status": "in_progress" } }
|
|
101
|
-
```
|
|
102
|
+
## 6. Complete the task
|
|
102
103
|
|
|
103
|
-
|
|
104
|
-
|
|
104
|
+
First call `task.update` with `status=completed` and completion commit/evidence
|
|
105
|
+
supported by the task contract. Then, for a linked change, recompile
|
|
106
|
+
`change.context` at the final HEAD with:
|
|
105
107
|
|
|
106
|
-
|
|
108
|
+
- `role=implement`, `gate=verification`;
|
|
109
|
+
- exact required references and current digests;
|
|
110
|
+
- the public seam and verification command;
|
|
111
|
+
- a single next action, normally `Run ultra-test for this change`.
|
|
107
112
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
unmerged branch → ask the user:
|
|
111
|
-
- "Merge task-{id} to main first" (recommended)
|
|
112
|
-
- "Delete branch (abandoned)"
|
|
113
|
-
- "Skip, continue with new task"
|
|
113
|
+
This ordering ensures the snapshot records the completed task state. Clear the active
|
|
114
|
+
workflow checkpoint, call `change.breadcrumb`, and report exactly one next action.
|
|
114
115
|
|
|
115
|
-
|
|
116
|
+
## Completion evidence
|
|
116
117
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
| `feat/task-{id}-*` (same task) | continue (resume checkpoint) |
|
|
121
|
-
| other | ask the user: switch to main + new branch / continue current |
|
|
122
|
-
|
|
123
|
-
**Dependencies**: soft-warn only; parallel work is allowed.
|
|
124
|
-
|
|
125
|
-
### Step 3 — TDD Cycle
|
|
126
|
-
|
|
127
|
-
**Subagent isolation (complexity ≥ 7)**: optional — delegate a bounded TDD
|
|
128
|
-
cycle through the current Host's native subagent surface; the subagent returns
|
|
129
|
-
a summary and the primary agent owns verification.
|
|
130
|
-
|
|
131
|
-
**Mid-TDD checkpoint (complexity ≥ 6)**: after GREEN phase, write a
|
|
132
|
-
checkpoint. See Step 4.4 for the preferred MCP route.
|
|
133
|
-
|
|
134
|
-
**RED** — write failing tests:
|
|
135
|
-
- Mine Acceptance list for test specs
|
|
136
|
-
- Cover 5 dimensions: functional / boundary / exception / security / integration
|
|
137
|
-
- At least one integration test per boundary-crossing module
|
|
138
|
-
- Run; confirm failure
|
|
139
|
-
|
|
140
|
-
**GREEN** — minimum code to pass:
|
|
141
|
-
- Production-ready (no TODO / placeholder)
|
|
142
|
-
- Run; confirm pass
|
|
143
|
-
|
|
144
|
-
**REFACTOR** — SOLID / DRY / KISS / YAGNI; tests stay green.
|
|
145
|
-
|
|
146
|
-
**Checkpoint after Step 3.3**:
|
|
147
|
-
```jsonc
|
|
148
|
-
{"command":"ultra-dev","task_id":<id>,"branch":"<branch>","step":"3.3","status":"tdd_complete","ts":"<iso>"}
|
|
149
|
-
```
|
|
150
|
-
→ `.ultra/workflow-state.json`
|
|
151
|
-
|
|
152
|
-
### Step 4 — Quality Gates
|
|
153
|
-
|
|
154
|
-
| Gate | Requirement |
|
|
155
|
-
|------|-------------|
|
|
156
|
-
| Tests green | 0 failures |
|
|
157
|
-
| Coverage | ≥80% overall; 100% functional-core; critical paths for shell |
|
|
158
|
-
| Mock policy | Core logic: no mocks; external: testcontainers/stub OK |
|
|
159
|
-
| No degradation | Zero fallback or demo code |
|
|
160
|
-
| Integration test | Boundary-crossing code has ≥1 real integration test |
|
|
161
|
-
| Entry-point reachable | New modules trace to a handler/listener/cron |
|
|
162
|
-
| Spec compliance | Each Acceptance criterion implemented AND tested |
|
|
163
|
-
|
|
164
|
-
Checkpoint `step="4"`, `status="gates_passed"`.
|
|
165
|
-
|
|
166
|
-
### Step 4.4 — Pre-Review Checkpoint
|
|
167
|
-
|
|
168
|
-
1. Write `.ultra/workflow-state.json` with `step=4.5, status=pre_review`.
|
|
169
|
-
2. Let trusted Host lifecycle hooks preserve and restore that state when
|
|
170
|
-
compaction events exist.
|
|
171
|
-
3. On Hosts without compaction hooks, resume directly from the same file.
|
|
172
|
-
|
|
173
|
-
**Gate**: the skill MUST NOT require `/compact`; it MUST work when the
|
|
174
|
-
runtime cannot compact.
|
|
175
|
-
|
|
176
|
-
### Step 4.5 — Ultra Review (MANDATORY)
|
|
177
|
-
|
|
178
|
-
Invoke `/ultra-review all`. The workflow uses the current Host's installed
|
|
179
|
-
review agents and writes the unified review artifact. The primary agent owns
|
|
180
|
-
the final verdict and re-runs relevant tests after fixes.
|
|
181
|
-
|
|
182
|
-
**MAX_REVIEW_ITERATIONS = 2**
|
|
183
|
-
|
|
184
|
-
| Verdict | Iter | Action |
|
|
185
|
-
|---------|------|--------|
|
|
186
|
-
| APPROVE | any | → Step 5 |
|
|
187
|
-
| COMMENT | any | review P1s, fix if warranted, → Step 5 |
|
|
188
|
-
| REQUEST_CHANGES | 1 | fix ALL P0, re-run tests, `/ultra-review recheck` |
|
|
189
|
-
| REQUEST_CHANGES | 2 | stall check → escalate or fix |
|
|
190
|
-
|
|
191
|
-
**Stall detection before iter 2**: if `curr_count >= prev_count` (P0+P1 not
|
|
192
|
-
shrinking) → write `UNRESOLVED.md`, WARN user, proceed to Step 5.
|
|
193
|
-
|
|
194
|
-
**Verification gate before Step 5**:
|
|
195
|
-
- SUMMARY.json verdict ≠ `REQUEST_CHANGES`
|
|
196
|
-
- All P0 resolved
|
|
197
|
-
- Tests still green
|
|
198
|
-
|
|
199
|
-
Checkpoint `step="4.5", status="review_done", review_session=<id>, review_iteration=<N>`.
|
|
200
|
-
|
|
201
|
-
### Step 5 — Status → completed (single-write)
|
|
202
|
-
|
|
203
|
-
**Prerequisites**: Step 4 + Step 4.5 green.
|
|
204
|
-
|
|
205
|
-
```jsonc
|
|
206
|
-
// MCP: task.update
|
|
207
|
-
{
|
|
208
|
-
"id": "<id>",
|
|
209
|
-
"patch": {
|
|
210
|
-
"status": "completed"
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
Projector regenerates frontmatter. **Then** write the context-md **body**
|
|
216
|
-
Completion section (skill responsibility, not projector):
|
|
217
|
-
|
|
218
|
-
```markdown
|
|
219
|
-
## Completion
|
|
220
|
-
- **Completed**: <YYYY-MM-DD>
|
|
221
|
-
- **Commit**: _pending_ # filled in Step 6
|
|
222
|
-
- **Summary**: <one-line delivery summary>
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
**Do not** hand-edit `> **Status**` anywhere in the body — frontmatter owns it.
|
|
226
|
-
|
|
227
|
-
### Step 5.5 — Pre-Commit Checklist (BLOCKING)
|
|
228
|
-
|
|
229
|
-
Before `git commit`, verify every item:
|
|
230
|
-
|
|
231
|
-
- [ ] `task.get` confirms `status="completed"`
|
|
232
|
-
- [ ] context-md body has updated Completion section
|
|
233
|
-
- [ ] All tests pass
|
|
234
|
-
- [ ] Ultra Review verdict ≠ `REQUEST_CHANGES`
|
|
235
|
-
- [ ] New modules reach a live entry point (no orphan)
|
|
236
|
-
- [ ] Boundary-crossing code has integration test
|
|
237
|
-
|
|
238
|
-
Any unchecked → fix; do NOT commit.
|
|
239
|
-
|
|
240
|
-
### Step 6 — Commit + Merge
|
|
241
|
-
|
|
242
|
-
1. `git status` → show diff
|
|
243
|
-
2. Ask through the current Host's native user-interaction surface:
|
|
244
|
-
- A: "Commit + Merge to main" (recommended)
|
|
245
|
-
- B: "Commit only, create PR later"
|
|
246
|
-
- C: "Review diff first" → `git diff --stat` → re-ask
|
|
247
|
-
|
|
248
|
-
3. On approval:
|
|
249
|
-
```bash
|
|
250
|
-
git add -A
|
|
251
|
-
git commit -m "feat(scope): description"
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
4. Record commit hash via MCP:
|
|
255
|
-
```jsonc
|
|
256
|
-
{ "id": "<id>", "patch": { "completion_commit": "<sha>" } }
|
|
257
|
-
```
|
|
258
|
-
Update context-md body Completion line to the real hash; amend:
|
|
259
|
-
```bash
|
|
260
|
-
git add .ultra/tasks/contexts/task-<id>.md
|
|
261
|
-
git commit --amend --no-edit
|
|
262
|
-
```
|
|
263
|
-
(The amend is OK here — the first commit is a local, not-yet-pushed commit
|
|
264
|
-
in the feature branch. Never amend pushed commits.)
|
|
265
|
-
|
|
266
|
-
5. `git fetch origin && git rebase origin/main`; resolve any conflicts.
|
|
267
|
-
|
|
268
|
-
6. Re-run tests after rebase. Fail → fix → amend → repeat 5-6.
|
|
269
|
-
|
|
270
|
-
7. If Option A chosen:
|
|
271
|
-
```bash
|
|
272
|
-
git checkout main && git pull origin main
|
|
273
|
-
git merge --no-ff feat/task-<id>-<slug>
|
|
274
|
-
git push origin main && git branch -d feat/task-<id>-<slug>
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
8. For a task with `change_id`, call `change.context` after the final commit,
|
|
278
|
-
rebase, and verification so the manifest records the actual HEAD and task
|
|
279
|
-
set used for convergence.
|
|
280
|
-
|
|
281
|
-
Checkpoint `step="6", status="committed", commit=<sha>`.
|
|
282
|
-
|
|
283
|
-
### Step 7 — Report
|
|
284
|
-
|
|
285
|
-
- Commit hash
|
|
286
|
-
- Project progress (`task.list` → `completed/total`)
|
|
287
|
-
- Next task suggestion (first remaining `pending` in topological order)
|
|
288
|
-
|
|
289
|
-
## Delta-First Specification Mode
|
|
290
|
-
|
|
291
|
-
Triggered when implementation reveals specification gaps or requirement changes.
|
|
292
|
-
|
|
293
|
-
**Classification (mandatory before updating specs)**:
|
|
294
|
-
|
|
295
|
-
| Kind | Meaning | Action |
|
|
296
|
-
|------|---------|--------|
|
|
297
|
-
| **EXPANSION** | new requirement surfaced | update active change delta + Change Log |
|
|
298
|
-
| **CORRECTION** | spec error/ambiguity | update active change delta + Change Log |
|
|
299
|
-
| **REDUCTION** | removing/weakening scope | **STOP** → ask the user for approval |
|
|
300
|
-
|
|
301
|
-
**REDUCTION gate** — options:
|
|
302
|
-
- A: "Approve reduction, update spec"
|
|
303
|
-
- B: "Keep original scope, find alternative implementation"
|
|
304
|
-
- C: "Split into separate task, defer to next cycle"
|
|
305
|
-
|
|
306
|
-
For a task with `change_id`, update
|
|
307
|
-
`.ultra/changes/active/<change-id>/delta/` immediately, then recompile
|
|
308
|
-
`change.context`. Do not silently rewrite the baseline while parallel tasks are
|
|
309
|
-
still executing. `/ultra-deliver` must reconcile the approved delta into the
|
|
310
|
-
declared baseline files before archive.
|
|
311
|
-
|
|
312
|
-
For an initial-baseline task with no `change_id`, update `.ultra/specs/`
|
|
313
|
-
directly because no continuous-change packet exists yet. In both cases log the
|
|
314
|
-
decision in the context-md body Change Log:
|
|
315
|
-
|
|
316
|
-
```markdown
|
|
317
|
-
| <date> | <KIND> | <change desc> | specs/<file>#<section> | <reason> |
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
**Principle**: the baseline specs describe accepted product truth; the active
|
|
321
|
-
delta describes proposed change; task contexts record implementation history.
|
|
322
|
-
No layer may silently shrink scope without the REDUCTION gate.
|
|
323
|
-
|
|
324
|
-
## MCP failure matrix
|
|
325
|
-
|
|
326
|
-
| Purpose | MCP tool (phase) | Failure behavior |
|
|
327
|
-
|---------|------------------|------------------|
|
|
328
|
-
| Select pending task | `task.list` (2) / `task.get` (2) | stop and surface the MCP error |
|
|
329
|
-
| Status → in_progress | `task.update` (2) | stop; do not edit a projection |
|
|
330
|
-
| Pre-review checkpoint | none | write `.ultra/workflow-state.json`; lifecycle hooks restore it |
|
|
331
|
-
| Run review | none | `/ultra-review all` + Host-native review agents |
|
|
332
|
-
| Status → completed | `task.update` (2) | stop; do not claim completion |
|
|
333
|
-
| Refresh linked context | `change.context` (9) | stop; do not claim the change packet is current |
|
|
334
|
-
| Ask user | none | current Host's native user-interaction surface |
|
|
335
|
-
|
|
336
|
-
## What this skill DOES NOT do
|
|
337
|
-
|
|
338
|
-
- Does NOT write `tasks.json` directly (projector owns it)
|
|
339
|
-
- Does NOT edit context-md frontmatter (projector owns it)
|
|
340
|
-
- Does NOT require the runtime to support `/compact`
|
|
341
|
-
- Does NOT advertise review or checkpoint operations as MCP tools
|
|
342
|
-
|
|
343
|
-
## Integration
|
|
344
|
-
|
|
345
|
-
| | |
|
|
346
|
-
|---|---|
|
|
347
|
-
| **Input** | state.db via MCP, plus the `context_file` body returned for the selected task |
|
|
348
|
-
| **Writes** | state.db (via `task.update`/`change.context`), active delta or baseline spec as classified, context-md body, workflow-state checkpoints |
|
|
349
|
-
| **Next** | `/ultra-dev <next-id>` or `/ultra-test` when all Walking Skeleton + critical-path tasks complete |
|
|
118
|
+
Report task/change id, changed paths, red signal, green commands, public-seam result,
|
|
119
|
+
review session, spec-learning candidates, and remaining blockers. If any item is
|
|
120
|
+
missing, leave the task in progress or blocked rather than claiming completion.
|