ultra-builder-pro-cli 5.0.1 → 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.
Files changed (159) hide show
  1. package/CHANGELOG.md +103 -3
  2. package/README.md +67 -478
  3. package/README.zh-CN.md +49 -422
  4. package/adapters/_shared/frontmatter.cjs +1 -18
  5. package/adapters/_shared/plugin-core.cjs +17 -83
  6. package/adapters/_shared/runtime-assets.cjs +6 -120
  7. package/adapters/claude.js +8 -24
  8. package/adapters/codex.js +13 -32
  9. package/bin/install.js +35 -57
  10. package/docs/PLUGIN-ISOLATION-CONTRACT.md +13 -101
  11. package/docs/examples/drive/claude-reviewer.sh +53 -0
  12. package/docs/examples/drive/claude-writer.sh +43 -0
  13. package/engine/FORMATS.md +1051 -0
  14. package/engine/checks.cjs +139 -0
  15. package/engine/cli.cjs +148 -0
  16. package/engine/completion.cjs +48 -0
  17. package/engine/context.cjs +94 -0
  18. package/engine/drive.cjs +220 -0
  19. package/engine/expect-worker.cjs +5 -0
  20. package/engine/expect.cjs +33 -0
  21. package/engine/formats.cjs +189 -0
  22. package/engine/git-state.cjs +112 -0
  23. package/engine/ledger.cjs +205 -0
  24. package/engine/loading.cjs +28 -0
  25. package/engine/merge.cjs +273 -0
  26. package/engine/milestone.cjs +89 -0
  27. package/engine/plan.cjs +232 -0
  28. package/engine/project.cjs +5 -0
  29. package/engine/signals.cjs +3 -0
  30. package/engine/states.cjs +175 -0
  31. package/hooks/session-start.cjs +54 -0
  32. package/package.json +17 -52
  33. package/skills/ultra/SKILL.md +395 -0
  34. package/.ultra-template/changes/abandoned/.gitkeep +0 -0
  35. package/.ultra-template/changes/active/.gitkeep +0 -1
  36. package/.ultra-template/changes/archive/.gitkeep +0 -1
  37. package/.ultra-template/contexts/TEMPLATE.md +0 -135
  38. package/.ultra-template/decisions/.gitkeep +0 -1
  39. package/.ultra-template/evidence/.gitkeep +0 -1
  40. package/.ultra-template/north-star.md +0 -52
  41. package/.ultra-template/project-brief.md +0 -28
  42. package/.ultra-template/research/.gitkeep +0 -1
  43. package/.ultra-template/specs/architecture.md +0 -81
  44. package/.ultra-template/specs/discovery.md +0 -74
  45. package/.ultra-template/specs/product.md +0 -80
  46. package/.ultra-template/specs/research-distillate.md +0 -57
  47. package/.ultra-template/tasks.json +0 -4
  48. package/.ultra-template/test-report.json +0 -44
  49. package/adapters/_shared/host-profile.cjs +0 -5
  50. package/adapters/grok.js +0 -242
  51. package/adapters/kimi.js +0 -232
  52. package/adapters/opencode.js +0 -408
  53. package/adapters/zcode.js +0 -375
  54. package/bin/delegate-worker.cjs +0 -5
  55. package/bin/delegate.cjs +0 -5
  56. package/docs/ARCHITECTURE.md +0 -274
  57. package/docs/ARTIFACT-AUTHORITY.md +0 -305
  58. package/docs/DECISIONS.md +0 -229
  59. package/docs/PHILOSOPHY.md +0 -261
  60. package/docs/RUNTIME-COMPAT-MATRIX.md +0 -316
  61. package/docs/SKILL-AUTHORING.md +0 -113
  62. package/docs/WORKFLOW-LIFECYCLE.md +0 -350
  63. package/docs/evals/adversarial-review-2026-08-14.md +0 -84
  64. package/docs/evals/ultra-5-0-journey-results.md +0 -62
  65. package/docs/evals/ultra-5-0-live-acp-conformance.md +0 -93
  66. package/docs/evals/ultra-5-0-route-journeys.md +0 -145
  67. package/docs/evals/zcode-automation-2026-08-14.md +0 -103
  68. package/hooks/README.md +0 -52
  69. package/hooks/_common.py +0 -1779
  70. package/hooks/adapters/codex.py +0 -295
  71. package/hooks/adapters/grok.py +0 -134
  72. package/hooks/adapters/kimi.py +0 -156
  73. package/hooks/adapters/zcode.py +0 -227
  74. package/hooks/block_dangerous_commands.py +0 -201
  75. package/hooks/compact_context.py +0 -224
  76. package/hooks/mid_workflow_recall.py +0 -47
  77. package/hooks/post_edit_guard.py +0 -215
  78. package/hooks/session_context.py +0 -741
  79. package/skills/ultra-change/SKILL.md +0 -165
  80. package/skills/ultra-change/references/change-contract.md +0 -199
  81. package/skills/ultra-change/references/execution-grant.md +0 -109
  82. package/skills/ultra-change/references/primary-transfer.md +0 -273
  83. package/skills/ultra-change/scripts/validate_primary_transfer.cjs +0 -1928
  84. package/skills/ultra-delegate/SKILL.md +0 -195
  85. package/skills/ultra-delegate/patches/zcode-acp-0.1.0-zcode-0.16.5.patch +0 -184
  86. package/skills/ultra-delegate/references/delegation-contract.md +0 -138
  87. package/skills/ultra-delegate/scripts/acp-conformance.cjs +0 -287
  88. package/skills/ultra-delegate/scripts/acp-driver.cjs +0 -762
  89. package/skills/ultra-delegate/scripts/agent-execution-driver.cjs +0 -320
  90. package/skills/ultra-delegate/scripts/cli-driver.cjs +0 -61
  91. package/skills/ultra-delegate/scripts/delegate-profiles/kimi-read-only.md +0 -15
  92. package/skills/ultra-delegate/scripts/delegate-profiles/kimi-write.md +0 -17
  93. package/skills/ultra-delegate/scripts/delegate-worker.cjs +0 -328
  94. package/skills/ultra-delegate/scripts/delegate.cjs +0 -690
  95. package/skills/ultra-delegate/scripts/delegate_wait.py +0 -86
  96. package/skills/ultra-delegate/scripts/host-profile.cjs +0 -267
  97. package/skills/ultra-deliver/SKILL.md +0 -194
  98. package/skills/ultra-deliver/references/baseline-reconciliation.md +0 -41
  99. package/skills/ultra-dev/SKILL.md +0 -265
  100. package/skills/ultra-dev/references/debugging.md +0 -22
  101. package/skills/ultra-domain-modeling/SKILL.md +0 -79
  102. package/skills/ultra-grilling/SKILL.md +0 -121
  103. package/skills/ultra-grilling/references/reframing.md +0 -76
  104. package/skills/ultra-init/SKILL.md +0 -143
  105. package/skills/ultra-init/references/brownfield-adoption.md +0 -32
  106. package/skills/ultra-init/scripts/init_project.cjs +0 -1031
  107. package/skills/ultra-plan/SKILL.md +0 -160
  108. package/skills/ultra-plan/references/task-evidence-v2.md +0 -300
  109. package/skills/ultra-plan/scripts/validate_task_evidence.cjs +0 -859
  110. package/skills/ultra-research/SKILL.md +0 -167
  111. package/skills/ultra-research/references/00-problem-validation.md +0 -36
  112. package/skills/ultra-research/references/01-opportunity-discovery.md +0 -33
  113. package/skills/ultra-research/references/02-market-assessment.md +0 -31
  114. package/skills/ultra-research/references/03-alternatives.md +0 -31
  115. package/skills/ultra-research/references/04-product-strategy.md +0 -41
  116. package/skills/ultra-research/references/05-assumptions-validation.md +0 -31
  117. package/skills/ultra-research/references/10-user-personas.md +0 -30
  118. package/skills/ultra-research/references/11-user-scenarios.md +0 -28
  119. package/skills/ultra-research/references/20-user-stories.md +0 -31
  120. package/skills/ultra-research/references/21-features-scope.md +0 -38
  121. package/skills/ultra-research/references/22-success-metrics.md +0 -33
  122. package/skills/ultra-research/references/30-architecture-context.md +0 -30
  123. package/skills/ultra-research/references/31-solution-strategy.md +0 -28
  124. package/skills/ultra-research/references/32-building-blocks.md +0 -28
  125. package/skills/ultra-research/references/40-deployment.md +0 -29
  126. package/skills/ultra-research/references/41-quality-risks.md +0 -28
  127. package/skills/ultra-research/references/99-synthesis.md +0 -59
  128. package/skills/ultra-research/references/north-star-v2.md +0 -168
  129. package/skills/ultra-research/references/wayfinding.md +0 -50
  130. package/skills/ultra-research/scripts/validate_north_star.cjs +0 -1174
  131. package/skills/ultra-review/SKILL.md +0 -275
  132. package/skills/ultra-review/references/adversarial-evaluation.md +0 -31
  133. package/skills/ultra-review/references/code.md +0 -17
  134. package/skills/ultra-review/references/comments.md +0 -12
  135. package/skills/ultra-review/references/design.md +0 -12
  136. package/skills/ultra-review/references/errors.md +0 -13
  137. package/skills/ultra-review/references/review-modes.md +0 -29
  138. package/skills/ultra-review/references/spec.md +0 -18
  139. package/skills/ultra-review/references/tests.md +0 -12
  140. package/skills/ultra-review/references/unified-schema.md +0 -284
  141. package/skills/ultra-review/references/worker-packet.md +0 -183
  142. package/skills/ultra-review/scripts/review_wait.py +0 -2943
  143. package/skills/ultra-status/SKILL.md +0 -209
  144. package/skills/ultra-status/references/route-contract.md +0 -100
  145. package/skills/ultra-tdd/SKILL.md +0 -91
  146. package/skills/ultra-tdd/references/templates/README.md +0 -20
  147. package/skills/ultra-tdd/references/templates/feature-flag-default-audit.sh +0 -79
  148. package/skills/ultra-tdd/references/templates/persistence-real.ts +0 -78
  149. package/skills/ultra-tdd/references/templates/testcontainer-postgres.py +0 -78
  150. package/skills/ultra-tdd/references/templates/testcontainer-postgres.ts +0 -73
  151. package/skills/ultra-tdd/references/templates/vertical-slice.ts +0 -66
  152. package/skills/ultra-tdd/references/test-execution.md +0 -23
  153. package/skills/ultra-test/SKILL.md +0 -244
  154. package/skills/ultra-test/references/export-syntax.md +0 -18
  155. package/skills/ultra-test/scripts/validate_review_transport.cjs +0 -549
  156. package/skills/ultra-test/scripts/worktree_digest.cjs +0 -576
  157. package/skills/ultra-think/SKILL.md +0 -56
  158. package/skills/ultra-think/references/autonomy-boundary.md +0 -48
  159. package/skills/ultra-think/references/interaction-boundary.md +0 -42
@@ -1,265 +0,0 @@
1
- ---
2
- name: ultra-dev
3
- description: Carry one planned task from a written implementation plan through red-green development to recorded evidence and a task-level review. Use when a task in the ledger is ready to execute, was interrupted partway, or has to be picked up in a fresh session or on another host.
4
- ---
5
-
6
- # Take one task from plan to recorded evidence
7
-
8
- The model owns code reasoning and edits; repository files own the resumable contract.
9
-
10
- ## Route modes
11
-
12
- | Mode | Entry | Observable exit | Next |
13
- |---|---|---|---|
14
- | `execute` | Explicit task id or a valid Execution Grant covering one dependency-ready pending task | The named task has current acceptance evidence, final task review, completion context, and a read-back `completed` ledger row | Recommend the next exact `ultra-dev/execute` task or `ultra-test/audit` |
15
- | `resume` | Explicit task id or a valid Execution Grant covering the unique in-progress task | Existing work is reconciled from Git, context, and Resume Note, then reaches the same completion evidence or a typed stop | Recommend the next exact task, `ultra-test/audit`, or the responsible repair route |
16
- | `reopen` | Explicit task id or a valid Execution Grant after current evidence invalidates a completed task | The invalidated criteria are refreshed through a new review and the task is completed again, or the remaining gate is named | Recommend the next exact task or `ultra-test/reaudit` |
17
-
18
- Follow `../ultra-status/references/route-contract.md`. Show a Route Card before the
19
- first implementation edit, at material checkpoints or unavailable evidence, and after
20
- the ledger readback. When context pressure threatens reliable continuation, finish the
21
- nearest safe write, refresh the Resume Note, and recommend a fresh session rather than
22
- pretending the task is still making invisible progress.
23
-
24
- ## Before you start
25
-
26
- 1. If model-selected, verify the live execution grant in `../ultra-change/references/execution-grant.md` — a current session-local activation or a stably verified durable work-package grant; without either, stop.
27
- 2. Read `../ultra-change/references/change-contract.md` and apply its **Active Change
28
- authority resolution** before reading any active `intent.md` or resolving a current
29
- `change_id`. Require its one valid authority; otherwise stop with its typed repair.
30
- Then read `.ultra/tasks.json`. Without an exact task id in the owner invocation,
31
- select only the uniquely current `in_progress` task and read its full
32
- `context_file`, especially `## Resume Note`; if none exists, stop and ask
33
- the owner to invoke Dev naming one exact task id — a `pending` row is a frontier
34
- candidate, not active work, and Hooks will not have injected its acceptance or
35
- Resume. An invocation that names one exact task id supplies invocation-local
36
- selection authority for this Dev run only. If more than one row claims
37
- `in_progress`, do not manufacture a unique current task; use the explicit recovery
38
- below or stop with the Hook diagnostic. The ledger is the sole task-status authority;
39
- legacy Status or Complexity never overrides it. A `completed` task with a current
40
- invalidation observation may be selected only for the explicit reopen below; record
41
- and read back that transition before repair.
42
- 3. Read `CONTEXT.md` for vocabulary, and the `.ultra/decisions/` entries the task
43
- context names.
44
- 4. Validate `.ultra/north-star.md` with the shipped Research structural sensor. Resolve
45
- every listed `FP-*`, `NS-*`, and `HC-*` in the task and active Change against that
46
- accepted authority. Compare the active Change's recorded **North Star revision** and
47
- **North Star digest** with the accepted file's revision and current Git blob digest.
48
- A missing ID, revision mismatch, or digest mismatch is a stale-plan observation: stop
49
- before editing and recommend explicit owner invocation of `ultra-change` to reconcile
50
- the active Change. Never inherit approval or silently rewrite the trace.
51
- 5. Read the task's acceptance criteria. If you cannot state that acceptance in one
52
- sentence, you are not ready to start.
53
-
54
- ### Activating one named pending task
55
-
56
- When the owner invocation names a dependency-ready `pending` task, perform its
57
- canonical activation before any implementation work: write that row from
58
- `pending` to `in_progress` in `.ultra/tasks.json` and read the row back before
59
- the first implementation edit. This one canonical ledger write is what makes
60
- the named task live for the task-aware Hooks; without it Hooks correctly remain
61
- task-silent while you edit, because a trusted invocation is visible only to the
62
- invocation that carried it. The activation adds no selector, activation flag,
63
- or workflow state — the ledger row is the only authority — and it must respect
64
- the single-writer boundary: resolve any conflicting `in_progress` rows through
65
- the recovery below or an owner decision before writing.
66
-
67
- ### Recover one exact task from an ambiguous ledger
68
-
69
- An explicit owner invocation with one exact task id supplies invocation-local selection
70
- authority for this Dev run even when multiple ledger rows claim `in_progress`. Before
71
- editing, read that exact canonical ledger row and context, especially its Resume Note,
72
- then inspect current Git/worktree evidence for the named task. Do not persist a new
73
- current-task selector, status, or workflow state to manufacture uniqueness. Hooks remain
74
- task-silent and progress-silent while the ledger is ambiguous.
75
-
76
- Only an explicit owner/Plan correction that establishes a conflicting task never started
77
- may return that row to `pending`. If multiple tasks contain real partial work, keep every
78
- task with real partial work `in_progress` and preserve each task's bytes. Recover them by
79
- separate exact task-id owner invocations or obtain owner-authorized Plan reconciliation;
80
- use a separate worktree when needed to keep their writes isolated. Completing the
81
- selected task still requires final review, canonical v2 evidence, context publication,
82
- ledger write, and readback.
83
-
84
- When this task starts from an observed error, failing check or unexpected behavior,
85
- read `references/debugging.md` and establish the earliest incorrect state before editing.
86
-
87
- ## Definition of done
88
-
89
- - All six evidence dimensions carry honest, current observations under the typed v2
90
- evidence contract; a real limitation remains a gap rather than becoming a pass.
91
- - `.ultra/tasks.json` remains the sole task-status authority after write/read-back.
92
- - The task still names the active `change_id`; historical unfinished work stays out.
93
- - The context file carries a Completion entry and a rewritten Resume Note.
94
- - A task-level review runs while the ledger task remains `in_progress`; its blocking
95
- findings are resolved or owner-dispositioned as required and affected evidence is
96
- refreshed before the model writes `completed` to the ledger.
97
-
98
- ## Write the implementation plan before the code
99
-
100
- Fill in the task context's Implementation section as prose a person can read:
101
- which modules change, how the interfaces move, which seam the tests will use.
102
- Confirm that, then write code. Deciding the design while typing implementation
103
- buries the design decisions in the details.
104
-
105
- ## Develop through red then green
106
-
107
- Follow `../ultra-tdd/SKILL.md`, writing tests only on the seams the plan already
108
- confirmed, one slice at a time. `ultra-review` owns evidence-backed refactoring when
109
- observed duplication, coupling, or a boundary defect justifies it; a slice count does
110
- not make that decision.
111
-
112
- ## Converge on the task-scoped acceptance set
113
-
114
- Development ends when every task-scoped criterion has its required current evidence and
115
- responsible semantic disposition, not merely when commands pass or the code looks
116
- finished. Resolve the context's **Change Acceptance IDs** against the active `intent.md`
117
- for `<change_id>`. For each named row consume its exact `Verification type` and
118
- `Required evidence`. When one outcome needs more than one authority, split it into
119
- independent criteria with unique IDs and preserve each authority separately; every row
120
- has exactly one verification type. Task-local acceptance may add evidence requirements,
121
- but it does not replace or narrow the Change mapping.
122
-
123
- Handle the four verification types without converting one authority into another:
124
-
125
- - Execute only `command` observations. Record the exact command, working directory,
126
- exit status, retained raw output reference, and its exact SHA-256.
127
- - For `inspection`, cite the exact source and revision or digest, then refresh the
128
- observation after any touched source changes.
129
- - For `owner-judgment`, preserve the cited owner decision. The owner alone supplies its
130
- semantic result; a model statement, validator, score, or command cannot proxy it.
131
- - For `external-observation`, preserve the provider or system receipt without proxying it
132
- with a local command, model claim, or synthetic fixture, and bind its exact bytes by
133
- SHA-256.
134
-
135
- - Missing `owner-judgment` stops at its named owner gate.
136
- - Missing `external-observation` stops at its named external or authorization gate.
137
- - If an inspection exists but its semantic implication is unresolved, stop at the
138
- responsible model or owner gate; a structural citation is not an automatic acceptance
139
- verdict.
140
-
141
- Run one baseline before repairing anything. Track a best-ever evidence set keyed by
142
- criterion, verification type, and source identity to make progress visible, plus the
143
- current evidence set used for convergence. Stale or regressed evidence remains history
144
- but cannot satisfy the current set. Do not infer semantic progress or failure from a
145
- round count. The loop has three explicit exits:
146
-
147
- | Exit | Condition | Action |
148
- |---|---|---|
149
- | Converged | Every mapped and task-local criterion has current required evidence of every named type, and the responsible model or owner has made any semantic disposition | Close out below |
150
- | Stalled | An in-scope repair yields no new or refreshed evidence and no further evidence-producing repair is justified inside the approved task | Stop; report the missing evidence, the attempted repair, and the responsible next gate |
151
- | Unreachable | Required evidence cannot be observed because an executable, fixture, provider, service, declared environment prerequisite, or required authorization is unavailable | Stop that criterion; report the unavailable prerequisite or gate and its reachable repair path |
152
-
153
- A nonzero command exit is an observation, not automatically `Unreachable`; inspect its
154
- output and repair within scope when justified. None of these exits mechanically decides
155
- semantic sufficiency, owner acceptance, or external truth.
156
-
157
- ## Answer the six evidence dimensions
158
-
159
- Each has a rule you can check against the work rather than assert:
160
-
161
- | Dimension | Answered when |
162
- |---|---|
163
- | `tests_written` | This diff adds or changes at least one assertion — touching a test file is not enough |
164
- | `tests_passed` | The last test run exited zero and covered the files this diff touched |
165
- | `persistence_real` | On any path that stores data, the test uses real storage or a container |
166
- | `feature_flags_audit` | No flag on this change's execution path defaults to off, including flags this task did not add but now depends on |
167
- | `vertical_slice` | One test's execution path runs from the entry point through to persistence |
168
- | `spec_trace` | The anchor the task's `trace_to` names exists in the specification |
169
-
170
- Before task review, retain the actual criterion evidence, raw logs, owner records,
171
- external receipts, and cited artifacts without inventing another completion record.
172
- Do not write `evidence.json` before the task's validated final `SUMMARY.json` exists.
173
- The review packet admits those actual pre-review observations together with the ledger,
174
- context acceptance, and packet-defined task scope. A structural validator may check
175
- exact fields, types, digests, paths, and freshness observations. It never supplies an
176
- acceptance disposition, turns a model claim into command evidence, or decides semantic pass.
177
- Evidence is a sensor: a gap or legacy v1 record is reported with a migration
178
- diagnostic, never rewritten as v2 truth.
179
-
180
- ## When implementation and the specification disagree
181
-
182
- This is the one backward edge in the whole workflow. Classify before touching the
183
- specification, and classify by outcome rather than reason: does every commitment
184
- the specification already made still hold afterwards? If even one no longer holds
185
- it is a REDUCTION — stop and ask the owner, however good the argument. Log the
186
- classification in the context file's Change Log.
187
-
188
- ## Close out
189
-
190
- Keep the ledger row `in_progress` while running task review through
191
- `../ultra-review/SKILL.md`. Build its immutable packet from the ledger, task context,
192
- packet-defined task scope, and actual pre-review evidence; the final v2 record is not an
193
- admission prerequisite. Route only the exact current P0/P1 findings (or a P2 the owner
194
- explicitly promoted) as one in-scope repair set, followed by one affected-lens delta
195
- review per repair set inside the active review budget — an exact current owner grant
196
- overrides the versioned product default of one initial review plus at most two
197
- P0/P1 delta reviews per package. When another `REQUEST_CHANGES` would exceed the
198
- active budget, return to the owner checkpoint with the exact blocking set instead of
199
- an automatic repair; the same root surviving three failed fixes stops point-patching
200
- and reports an architecture problem. Budget exhaustion stops execution at `owner checkpoint` /
201
- `budget_exhausted` and keeps the ledger row `in_progress`.
202
- It never yields `APPROVE`, `REQUEST_CHANGES`, `INCOMPLETE`, pass, fail, accept, or
203
- abandon. If a repair changes implementation or evidence in review scope, use a new
204
- immutable packet and validated review summary before closeout rather than rebinding the
205
- old review. Worker Packet v1 and its summary do not bind a task worktree digest.
206
-
207
- After the final validated `SUMMARY.json`, write one canonical `ultra-task-evidence-v2` record only after completing the raw-receipt binding below.
208
- When the task's owner-designated review mode is external manual, the final review
209
- product is instead the external reviewer's real receipt, bound through the
210
- `review_mode: "external-manual"` branch of
211
- `../ultra-plan/references/task-evidence-v2.md`: publish that receipt under
212
- `.ultra/evidence/<task-id>/`, record its exact stable-byte SHA-256, and verify it
213
- with the sensor's `--verify-external-receipt` mode instead of inventing a strict
214
- session. Never fabricate one branch's artifacts to satisfy the other's shape.
215
- The `subject` is an independently captured completion-snapshot freshness observation.
216
- Before writing `evidence.json`, resolve every
217
- command and external-observation `raw_evidence_ref` below the real repository root and
218
- take bounded stable repository-contained bytes from an ordinary regular non-symlink file
219
- opened nonblocking and no-follow. Reject a missing, escaped, symlinked, special,
220
- oversized, or replaced file; otherwise compute `raw_evidence_sha256` from that one byte
221
- snapshot. Publish that canonical record at `.ultra/evidence/<task-id>/evidence.json`,
222
- read back the stable record and each raw ref,
223
- and require the same ref bytes and digest before continuing.
224
- Follow `../ultra-plan/references/task-evidence-v2.md`: `task_review` separately binds the retained strict summary; record one typed acceptance entry per criterion, all
225
- six dimensions, the exact Execution Packet and review identities, blocking-finding
226
- dispositions, evidence refresh refs, artifacts, limitations, and retention without
227
- claiming that the review summary proves `subject.worktree_digest`. Read the record back, then update context
228
- `## Task Review`, Completion, and `## Resume Note`; the context has no second status.
229
- Only after those facts are durable may the primary model write `completed` to the
230
- ledger and read the row back. When the task's work package sits under an
231
- ACK-ready primary transfer whose newest terminal receipt is a completed v2
232
- RESULT, this sequence is that contract's prescribed closeout: publish the
233
- handoff's `CLOSEOUT.json` beside the frozen RESULT — citing the review receipt,
234
- the closeout-start/end observations, and any recorded owner-authorized
235
- continuation — instead of refreshing the RESULT or opening a new handoff; the
236
- closeout starts no review and no repair round
237
- (`../ultra-change/references/primary-transfer.md`).
238
-
239
- If later work invalidates a completed task's criterion evidence, Dev performs an
240
- explicit reopen. A reopen changes the ledger row from `completed` to `in_progress`;
241
- Dev must never silently demote the row. Before that write, record the affected criterion IDs and reason in both the context Change Log and Resume Note, preserve the prior review as
242
- historical evidence, then write and read back the ledger transition. Refresh the named
243
- evidence, run task review for the new snapshot, and repeat this closeout sequence.
244
-
245
- Report the changed paths, the seam, the exact checks run, the review result, the
246
- evidence gaps and the residual risk. Recommend the next capability from what the files
247
- now say. Continue only when its exact mode and effects remain inside the valid grant and
248
- after showing the transition Route Card; otherwise do not invoke it.
249
-
250
- ## When the owner decides
251
-
252
- The owner decides any REDUCTION and each external effect separately. At most one
253
- authorized local task commit happens here; push, tag, publish and deploy need separate
254
- authority. An interruption leaves the worktree as-is and names it in the Resume Note.
255
-
256
- ## References
257
-
258
- - `../ultra-change/references/change-contract.md` — canonical Active Change authority resolution.
259
- - `../ultra-tdd/SKILL.md` — read before the first test, for the seam and mock boundary.
260
- - `../ultra-think/references/autonomy-boundary.md` — read when spec and code disagree.
261
- - `../ultra-review/SKILL.md` — read when implementation evidence is ready for review.
262
- - `../ultra-change/references/execution-grant.md` — read only for grant-activated continuation.
263
- - `../ultra-status/references/route-contract.md` — owner-visible route, checkpoint, and recovery output.
264
- - `../ultra-plan/references/task-evidence-v2.md` — canonical evidence, disposition, and task-review shape.
265
- - `references/debugging.md` — read for a reproduced failure before selecting a repair.
@@ -1,22 +0,0 @@
1
- # Evidence-first debugging
2
-
3
- Use this procedure for an observed error, failed check, or unexpected behavior. Diagnose
4
- before editing and work backward from the symptom to the earliest state that violates
5
- the accepted contract.
6
-
7
- 1. Capture the complete symptom and reproduce it with the smallest exact command or
8
- action. A different checkout or nearby passing test is not reproduction.
9
- 2. Inspect the relevant diff, configuration, dependency, caller, side effect, and
10
- runtime boundary.
11
- 3. Form one falsifiable root-cause hypothesis and choose the smallest observation that
12
- distinguishes it from alternatives.
13
- 4. Test the hypothesis without broad refactoring. Record evidence that accepts or
14
- rejects it in the active task context `## Change Log`.
15
- 5. Write the failing regression on the public seam, then apply the smallest root-cause
16
- repair through `ultra-tdd`.
17
- 6. Rerun the exact reproduction and affected verification. Record residual uncertainty
18
- and the recovery path in task evidence.
19
-
20
- After three distinct repair attempts reveal different underlying failures, stop
21
- patching. Treat the shared boundary as the next diagnostic target and report the
22
- evidence; do not disguise architectural uncertainty with another local fix.
@@ -1,79 +0,0 @@
1
- ---
2
- name: ultra-domain-modeling
3
- description: Settle the project's vocabulary into CONTEXT.md — one opinionated definition per term, the rejected wordings, the relationships between terms, and the ambiguities already resolved. Use when another skill changes the shared language, meaning a term gets coined, two words compete for one concept, or one word turns out to mean two things.
4
- ---
5
-
6
- # Keep one file that fixes what each domain word means
7
-
8
- This is how implementation reaches the earlier documents — not by better
9
- retrieval, but by needing less of it. `CONTEXT.md` is a compressor, not an index.
10
- What implementation lacks is rarely the content of the product specification; it
11
- is the vocabulary, so that trace anchors, variable names, function names, and
12
- test names all line up. It serves Goal 4, Cognitive Coherence.
13
-
14
- ## Before you start
15
-
16
- 1. Read `CONTEXT.md` at the repository root if it exists. Every skill reads it
17
- for vocabulary; this one is for the moments that *change* it.
18
- 2. Read the owner's current wording verbatim — their words are the raw material.
19
- 3. Check the code for the same concept: type names, table names, function names.
20
-
21
- ## Definition of done
22
-
23
- - Every term settled in this exchange is in the file, written the moment it was
24
- settled rather than batched at the end.
25
- - Each entry defines what the term *is* in one or two sentences, and lists the
26
- wordings that lost.
27
- - The file still holds vocabulary only, carrying no implementation detail.
28
-
29
- ## The file
30
-
31
- Create it at the repository root the first time a term is actually settled, not
32
- before. This is the whole format:
33
-
34
- ```markdown
35
- # {project name}
36
-
37
- {One or two sentences: what this context is and why it exists.}
38
-
39
- ## Language
40
-
41
- **Order**:
42
- {One or two sentences. Define what it is, not what it does.}
43
- _Avoid_: Purchase, Transaction
44
-
45
- ## Relationships
46
-
47
- - One **Issue tracker** holds many **Issue**
48
-
49
- ## Flagged ambiguities
50
-
51
- - "backlog" meant both the tool and the set of work — settled as **Issue tracker**
52
- ```
53
-
54
- ## Sharpen the language as it is spoken
55
-
56
- When several words compete for one concept, pick the best one and send the rest
57
- to `_Avoid_`. Keep only terms this project gives specific meaning to; general
58
- programming concepts stay out.
59
-
60
- - Name the conflict the moment it appears: the vocabulary defines cancellation
61
- as one thing, and this sentence uses it as another — which one is meant?
62
- - Sharpen a vague word on the spot: "account" is either Customer or User.
63
- - Pressure-test a boundary with a concrete scenario.
64
- - Cross-check against the code: it cancels a whole Order, yet the description
65
- allows cancelling part of one — which is true?
66
-
67
- ## When the owner decides
68
-
69
- A term's meaning is the owner's to settle; you supply the candidates, the
70
- conflict you found, and your recommendation. Where the answer is a genuine
71
- trade-off, hard to reverse, and would look strange to a reader without the
72
- background, it belongs in a decision record instead of a vocabulary entry. All
73
- three have to hold, or `decisions/` fills with a log. Create that directory on
74
- the first record that qualifies.
75
-
76
- ## References
77
-
78
- - `../ultra-think/references/autonomy-boundary.md` — read when renaming a term an
79
- accepted specification already uses; that renaming is a C5 boundary.
@@ -1,121 +0,0 @@
1
- ---
2
- name: ultra-grilling
3
- description: Turn caller-named missing owner decisions into confirmed answers, one question per turn and each carrying a recommendation. Use when Init needs a raw brief field, Research needs an owner decision, or Change and Plan need an explicit boundary or acceptance criterion.
4
- ---
5
-
6
- # Turn a vague ask into a decision list the owner has explicitly confirmed
7
-
8
- No-one knows exactly what they want at the start. This prevents the misalignment
9
- that surfaces at the end, when both sides believed they had agreed and the
10
- finished work proves otherwise. It serves Goal 1, Intent Fidelity.
11
-
12
- ## Before you start
13
-
14
- 1. Reread what the owner said in the current request, verbatim.
15
- 2. Read `.ultra/project-brief.md`, `.ultra/north-star.md`, and `CONTEXT.md` where they
16
- exist. Raw intake is reusable input; accepted wording must not be re-asked.
17
- 3. Look up every fact you can reach on your own: repository files, Git history,
18
- installed dependencies, tool output.
19
-
20
- Facts are yours to find, decisions are the owner's to make. A question they could
21
- have answered by reading the repository spends the one input only they can give.
22
-
23
- ## Definition of done
24
-
25
- - Every field the caller named as required is either answered in the owner's own
26
- words or explicitly deferred with the reason recorded. "Every branch of the
27
- tree" is not something you can check against a file; the caller's field list is.
28
- - The reframe below was put to the owner and either confirmed or corrected. It is
29
- never skipped because the original wording sounded clear.
30
- - Each answer carries the owner's confirmation, rather than something that
31
- sounded like agreement.
32
- - The caller owns the final artifact and receives a decision list it can write: one
33
- line per decision, each with the options rejected and why.
34
-
35
- ## Extract, reframe, then ask
36
-
37
- **Extract.** Restate what the owner already told you and ask them to confirm the
38
- restatement. Ask only about what is genuinely missing. Re-asking something they
39
- answered teaches them that answering does not stick.
40
-
41
- **Reframe.** The owner describes a *form* when they want a *role*. Say what you
42
- believe they actually want, name the gap against their wording, and end on a
43
- question:
44
-
45
- > You said a daily briefing app. What you described is a personal chief of staff
46
- > — the briefing is one of its outputs, not the thing itself. Have I got that
47
- > right?
48
-
49
- This is what separates the loop from a questionnaire. A form accepted at face
50
- value yields a specification that is internally consistent and builds the wrong
51
- product. Offer the reframe, never assert it, and treat a correction as the better
52
- outcome — "no, it really is just the briefing" is a constraint you did not have a
53
- minute ago. Read `references/reframing.md` for when it applies and how it fails.
54
-
55
- **Then ask** only what the confirmed reframe leaves open; the caller sets the semantic depth, so Init stops at the raw outline and leaves baseline questions to Research.
56
-
57
- ## One question per turn
58
-
59
- Ask through the host's native question surface, one unresolved choice at a time,
60
- and wait for the answer. Several questions at once gets the easy one answered and
61
- the load-bearing one skipped.
62
-
63
- Every question carries your recommended answer and what would change it. A
64
- question without a recommendation hands your own work back to the owner.
65
-
66
- Order questions so that answering one unlocks the next. Ask the framing questions
67
- before the detail questions — a detail settled inside the wrong frame has to be
68
- asked again.
69
-
70
- **Framing questions** come first, selecting only prompts from
71
- `references/reframing.md` that can change the current frame. They refuse the owner's
72
- framing on purpose, which is how they surface what the request left out. Stop once the
73
- owner confirms the frame or further prompts cannot distinguish a materially different
74
- build; a question count never decides that.
75
-
76
- **Detail questions** fill in the confirmed frame:
77
-
78
- - What happens when this goes wrong, and how would we find out?
79
- - Which of these options is cheaper to reverse?
80
- - What are we deliberately not doing?
81
- - What does done look like, concretely enough to check?
82
-
83
- An answer counts once it is specific enough to **rule something out**. "It should
84
- be fast" rules nothing out; "the list renders before they finish typing" does.
85
- When an answer rules nothing out, ask what would have to be true for the owner to
86
- *reject* a candidate solution.
87
-
88
- Skip what you can derive, what does not change the work, and what they already
89
- settled.
90
-
91
- ## When the owner decides
92
-
93
- This whole skill is owner-facing, so the boundary is narrow: hold the loop open
94
- until each decision is confirmed explicitly, and start no implementation on an
95
- inferred consensus.
96
-
97
- ## How the loop ends
98
-
99
- Every ending hands back the same result: decisions written one per line, each with
100
- the options rejected and the reason they lost. The caller alone chooses the canonical
101
- destination; Grilling never promotes an answer into project authority by itself.
102
-
103
- - **Resolved** — every required field answered or explicitly deferred.
104
- - **Stalled** — the evidence shows that another in-scope question cannot produce a new
105
- decision without unavailable owner input or a newly framed choice. Hand back the open
106
- fields, the attempted distinctions, and what each one blocks; do not infer this from
107
- a turn count.
108
- - **Unavailable** — the host cannot ask, or the owner stopped answering. Hand back
109
- the last confirmed state, every unanswered field named.
110
-
111
- A loop with no exit traps the owner as much as you: re-asking what they cannot
112
- currently answer costs more than deferring it. Deferral is a recorded outcome,
113
- not a failure. Where the host has no structured question surface, ask one plain
114
- question per turn instead.
115
-
116
- ## References
117
-
118
- - `references/reframing.md` — read before the first question: when to reframe,
119
- how it fails, the framing prompts, and what counts as an answer.
120
- - `../ultra-think/references/autonomy-boundary.md` — read when an answer removes
121
- something the specification already promised, or otherwise crosses C5.
@@ -1,76 +0,0 @@
1
- # Reframing: recovering the role from the form
2
-
3
- An owner fluent in their own domain still describes a **form** when what they
4
- want is a **role**. They are not being vague; they are naming the nearest thing
5
- they can picture. Taken at face value, that name produces a specification that is
6
- internally consistent and builds the wrong product.
7
-
8
- ## When to reframe
9
-
10
- Most first asks qualify. Any one of these is enough:
11
-
12
- - the request names an artifact — an app, a dashboard, a bot, a script — rather
13
- than an outcome;
14
- - the request names a solution whose problem has not been stated;
15
- - the request would be satisfied by something far smaller, or is impossible as
16
- worded;
17
- - two readings of the request would lead to materially different builds;
18
- - the request describes what a competitor has, rather than what the owner needs.
19
-
20
- ## How to put it
21
-
22
- State what you believe they want, name the gap against the words they used, and
23
- end on a question:
24
-
25
- > You said a daily briefing app. What you described is a personal chief of staff
26
- > — the briefing is one of its outputs, not the thing itself. Have I got that
27
- > right?
28
-
29
- Rules that keep this honest:
30
-
31
- - **One reframe at a time.** Two competing reinterpretations in one turn is a
32
- quiz, and the owner will pick the one that sounds more flattering.
33
- - **Offer it, never assert it.** A reframe is a hypothesis about their intent,
34
- and they are the only authority on it.
35
- - **A correction is the better outcome.** "No, it really is just the briefing" is
36
- a constraint you did not have a minute ago. Record it as a decision.
37
- - **Never reframe toward what is easier to build.** If your reinterpretation
38
- happens to shrink the work, say that out loud and let the owner weigh it.
39
- - **Stop when the owner rejects the proposed role and confirms their original frame.**
40
- Do not keep producing cosmetic reinterpretations. If a materially different reading
41
- later becomes evidenced, present that new distinction rather than counting prior
42
- attempts.
43
-
44
- ## Framing questions
45
-
46
- These refuse the owner's framing on purpose, which is how they surface what the
47
- request left out. Ask only the prompts that can distinguish a materially different
48
- build, and stop when the owner confirms the frame or the remaining prompts cannot
49
- change it.
50
-
51
- | Question | What it recovers |
52
- |---|---|
53
- | What do you do today, without this? | The real job, with the proposed form stripped off |
54
- | What would make you say this was a waste of effort? | Success via its negative — people picture failure far more concretely than they picture success |
55
- | What must never happen, even if it would work better? | The hard constraints they were never going to volunteer |
56
- | If it could only do one thing and you would still use it, which? | Core against periphery, before scope has a chance to spread |
57
- | Whose situation gets worse when this exists? | Stakeholders, and the constraints attached to them |
58
-
59
- Two of these are worth their place for a specific reason. Asking for success
60
- directly gets an aspiration; asking what would make it a waste gets a threshold.
61
- Asking who is made worse off surfaces the constraints an owner never thinks to
62
- state, because to them they are simply how the world is.
63
-
64
- ## What counts as an answer
65
-
66
- An answer counts once it is specific enough to **rule something out**.
67
-
68
- | Not yet an answer | An answer |
69
- |---|---|
70
- | "It should be fast" | "The list renders before they finish typing" |
71
- | "It should be secure" | "A support agent must never see a full card number" |
72
- | "Keep costs reasonable" | "Under fifty dollars a month in API spend" |
73
-
74
- When an answer rules nothing out, do not re-ask the same question louder. Ask
75
- what would have to be true for the owner to **reject** a candidate solution — the
76
- rejection criterion is the constraint, stated from the other side.