ultra-builder-pro-cli 0.25.1 → 0.26.1

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 (243) hide show
  1. package/.ultra-template/changes/abandoned/.gitkeep +0 -0
  2. package/.ultra-template/contexts/TEMPLATE.md +94 -0
  3. package/.ultra-template/decisions/.gitkeep +1 -0
  4. package/.ultra-template/evidence/.gitkeep +1 -0
  5. package/.ultra-template/north-star.md +46 -0
  6. package/.ultra-template/research/.gitkeep +1 -0
  7. package/.ultra-template/specs/discovery.md +2 -2
  8. package/.ultra-template/tasks.json +3 -0
  9. package/.ultra-template/test-report.json +27 -0
  10. package/CHANGELOG.md +107 -1
  11. package/README.md +217 -579
  12. package/adapters/_shared/delegate-profiles/kimi-read-only.md +15 -0
  13. package/adapters/_shared/delegate-profiles/kimi-write.md +17 -0
  14. package/adapters/_shared/file-ops.cjs +76 -2
  15. package/adapters/_shared/host-profile.cjs +97 -0
  16. package/adapters/_shared/plugin-core.cjs +204 -0
  17. package/adapters/_shared/runtime-assets.cjs +31 -96
  18. package/adapters/claude.js +92 -291
  19. package/adapters/codex.js +309 -842
  20. package/adapters/grok.js +143 -1469
  21. package/adapters/kimi.js +124 -1053
  22. package/adapters/opencode.js +230 -742
  23. package/bin/delegate-worker.cjs +328 -0
  24. package/bin/delegate.cjs +463 -0
  25. package/bin/install.js +38 -11
  26. package/docs/ARCHITECTURE.md +125 -216
  27. package/docs/ARTIFACT-AUTHORITY.md +90 -268
  28. package/docs/DECISIONS.md +77 -87
  29. package/docs/PHILOSOPHY.md +208 -0
  30. package/docs/PLUGIN-ISOLATION-CONTRACT.md +65 -39
  31. package/docs/RUNTIME-COMPAT-MATRIX.md +140 -155
  32. package/docs/SKILL-AUTHORING.md +94 -73
  33. package/docs/WORKFLOW-LIFECYCLE.md +97 -189
  34. package/hooks/README.md +19 -37
  35. package/hooks/_common.py +113 -0
  36. package/hooks/adapters/codex.py +9 -16
  37. package/hooks/adapters/grok.py +5 -5
  38. package/hooks/adapters/kimi.py +8 -14
  39. package/hooks/block_dangerous_commands.py +201 -0
  40. package/hooks/compact_context.py +65 -0
  41. package/hooks/mid_workflow_recall.py +25 -0
  42. package/hooks/post_edit_guard.py +105 -0
  43. package/hooks/session_context.py +30 -0
  44. package/package.json +17 -52
  45. package/skills/ultra-change/SKILL.md +115 -50
  46. package/skills/ultra-change/references/change-contract.md +68 -3
  47. package/skills/ultra-delegate/SKILL.md +89 -0
  48. package/skills/ultra-delegate/references/delegation-contract.md +59 -0
  49. package/skills/ultra-delegate/scripts/delegate_wait.py +86 -0
  50. package/skills/ultra-deliver/SKILL.md +98 -42
  51. package/skills/ultra-deliver/references/baseline-reconciliation.md +39 -20
  52. package/skills/ultra-dev/SKILL.md +115 -62
  53. package/skills/ultra-dev/references/debugging.md +22 -0
  54. package/skills/ultra-domain-modeling/SKILL.md +79 -0
  55. package/skills/ultra-grilling/SKILL.md +118 -0
  56. package/skills/ultra-grilling/references/reframing.md +72 -0
  57. package/skills/ultra-init/SKILL.md +102 -37
  58. package/skills/ultra-init/references/brownfield-adoption.md +33 -83
  59. package/skills/ultra-init/scripts/init_project.cjs +84 -0
  60. package/skills/ultra-plan/SKILL.md +101 -68
  61. package/skills/ultra-research/SKILL.md +68 -48
  62. package/skills/ultra-research/references/00-problem-validation.md +5 -5
  63. package/skills/ultra-research/references/01-opportunity-discovery.md +3 -3
  64. package/skills/ultra-research/references/02-market-assessment.md +5 -4
  65. package/skills/ultra-research/references/03-competitive-landscape.md +3 -3
  66. package/skills/ultra-research/references/04-product-strategy.md +3 -3
  67. package/skills/ultra-research/references/05-assumptions-validation.md +5 -5
  68. package/skills/ultra-research/references/10-user-personas.md +3 -2
  69. package/skills/ultra-research/references/11-user-scenarios.md +3 -3
  70. package/skills/ultra-research/references/20-user-stories.md +4 -3
  71. package/skills/ultra-research/references/21-features-scope.md +3 -2
  72. package/skills/ultra-research/references/22-success-metrics.md +3 -3
  73. package/skills/ultra-research/references/30-architecture-context.md +3 -3
  74. package/skills/ultra-research/references/31-solution-strategy.md +3 -3
  75. package/skills/ultra-research/references/32-building-blocks.md +3 -3
  76. package/skills/ultra-research/references/40-deployment.md +3 -3
  77. package/skills/ultra-research/references/41-quality-risks.md +3 -3
  78. package/skills/ultra-research/references/99-synthesis.md +7 -7
  79. package/skills/ultra-review/SKILL.md +84 -32
  80. package/skills/ultra-review/references/code.md +17 -0
  81. package/skills/ultra-review/references/comments.md +12 -0
  82. package/skills/ultra-review/references/design.md +12 -0
  83. package/skills/ultra-review/references/errors.md +13 -0
  84. package/skills/ultra-review/references/spec.md +13 -0
  85. package/skills/ultra-review/references/tests.md +12 -0
  86. package/skills/ultra-review/references/worker-packet.md +40 -0
  87. package/skills/ultra-review/scripts/review_wait.py +26 -15
  88. package/skills/ultra-status/SKILL.md +61 -36
  89. package/skills/ultra-tdd/SKILL.md +81 -0
  90. package/skills/ultra-tdd/references/templates/README.md +20 -0
  91. package/skills/ultra-tdd/references/templates/feature-flag-default-audit.sh +79 -0
  92. package/skills/ultra-tdd/references/templates/persistence-real.ts +78 -0
  93. package/skills/ultra-tdd/references/templates/testcontainer-postgres.py +78 -0
  94. package/skills/ultra-tdd/references/templates/testcontainer-postgres.ts +73 -0
  95. package/skills/ultra-tdd/references/templates/vertical-slice.ts +66 -0
  96. package/skills/ultra-tdd/references/test-execution.md +18 -0
  97. package/skills/ultra-test/SKILL.md +75 -30
  98. package/skills/ultra-test/references/export-syntax.md +18 -0
  99. package/skills/ultra-test/scripts/worktree_digest.cjs +54 -0
  100. package/skills/ultra-think/SKILL.md +49 -27
  101. package/skills/ultra-think/references/autonomy-boundary.md +48 -0
  102. package/skills/ultra-think/references/interaction-boundary.md +18 -33
  103. package/.ultra-template/docs/research/README.md +0 -55
  104. package/.ultra-template/reports/templates/delivery-report.json +0 -17
  105. package/.ultra-template/reports/templates/test-report.json +0 -18
  106. package/.ultra-template/tasks/tasks.json +0 -15
  107. package/.ultra-template/templates/task-context.md +0 -19
  108. package/adapters/_shared/codex-assets.cjs +0 -725
  109. package/adapters/_shared/codex-ultra-tools-entry.cjs +0 -11
  110. package/adapters/_shared/interaction-contract.cjs +0 -129
  111. package/adapters/_shared/path-rewrite.cjs +0 -79
  112. package/adapters/_shared/runtime-native.cjs +0 -132
  113. package/adapters/_shared/settings-merge.cjs +0 -76
  114. package/agents/code-reviewer.md +0 -42
  115. package/agents/debugger.md +0 -40
  116. package/agents/review-code.md +0 -49
  117. package/agents/review-comments.md +0 -38
  118. package/agents/review-coordinator.md +0 -56
  119. package/agents/review-design.md +0 -40
  120. package/agents/review-errors.md +0 -43
  121. package/agents/review-spec.md +0 -39
  122. package/agents/review-tests.md +0 -40
  123. package/agents/tdd-runner.md +0 -38
  124. package/bin/orchestrator.js +0 -383
  125. package/commands/ultra-change.md +0 -10
  126. package/commands/ultra-deliver.md +0 -10
  127. package/commands/ultra-dev.md +0 -10
  128. package/commands/ultra-doctor.md +0 -10
  129. package/commands/ultra-init.md +0 -10
  130. package/commands/ultra-plan.md +0 -10
  131. package/commands/ultra-research.md +0 -10
  132. package/commands/ultra-review.md +0 -10
  133. package/commands/ultra-status.md +0 -10
  134. package/commands/ultra-test.md +0 -10
  135. package/commands/ultra-think.md +0 -10
  136. package/docs/AGENT-CONTEXT.md +0 -191
  137. package/docs/COMMIT-HASH-BACKFILL.md +0 -51
  138. package/docs/LEGACY-CLI-CROSSWALK.md +0 -175
  139. package/docs/ROADMAP.md +0 -101
  140. package/docs/STATE-DB-ACCESS-POLICY.md +0 -161
  141. package/hooks/active_task_context.py +0 -152
  142. package/hooks/context_envelope.py +0 -100
  143. package/hooks/health_check.py +0 -196
  144. package/hooks/pre_stop_check.py +0 -66
  145. package/hooks/runtime_paths.py +0 -396
  146. package/hooks/subagent_tracker.py +0 -88
  147. package/hooks/workflow_checkpoint.py +0 -76
  148. package/hooks/workflow_context.py +0 -48
  149. package/hooks/workflow_resume.py +0 -84
  150. package/mcp-server/hook-context.cjs +0 -38
  151. package/mcp-server/hook-event.cjs +0 -34
  152. package/mcp-server/lib/archive-journal.cjs +0 -1119
  153. package/mcp-server/lib/archive-mutation-worker.py +0 -365
  154. package/mcp-server/lib/artifact-registry.cjs +0 -1232
  155. package/mcp-server/lib/baseline-workflow.cjs +0 -1193
  156. package/mcp-server/lib/canonical-json.cjs +0 -19
  157. package/mcp-server/lib/change-authority.cjs +0 -26
  158. package/mcp-server/lib/change-packet.cjs +0 -790
  159. package/mcp-server/lib/change-workflow.cjs +0 -65
  160. package/mcp-server/lib/context-envelope.cjs +0 -581
  161. package/mcp-server/lib/context-paths.cjs +0 -142
  162. package/mcp-server/lib/decision-records.cjs +0 -423
  163. package/mcp-server/lib/delivery-transaction.cjs +0 -471
  164. package/mcp-server/lib/doctor-backup-worker.cjs +0 -328
  165. package/mcp-server/lib/doctor.cjs +0 -627
  166. package/mcp-server/lib/git-bootstrap.cjs +0 -651
  167. package/mcp-server/lib/init-project.cjs +0 -1021
  168. package/mcp-server/lib/kernel-change-workflow.cjs +0 -2029
  169. package/mcp-server/lib/legacy-change-workflow.cjs +0 -3032
  170. package/mcp-server/lib/managed-file-write.cjs +0 -172
  171. package/mcp-server/lib/plan-checkpoint.cjs +0 -177
  172. package/mcp-server/lib/plan-publication-worker.cjs +0 -830
  173. package/mcp-server/lib/plan-store.cjs +0 -794
  174. package/mcp-server/lib/prd-parser.cjs +0 -83
  175. package/mcp-server/lib/pricing.cjs +0 -44
  176. package/mcp-server/lib/project-context.cjs +0 -178
  177. package/mcp-server/lib/projector.cjs +0 -386
  178. package/mcp-server/lib/provider-refs.cjs +0 -42
  179. package/mcp-server/lib/runtime-paths.cjs +0 -1714
  180. package/mcp-server/lib/runtime-state.cjs +0 -222
  181. package/mcp-server/lib/safe-project-file.cjs +0 -385
  182. package/mcp-server/lib/stage-checkpoints.cjs +0 -463
  183. package/mcp-server/lib/state-authority.cjs +0 -95
  184. package/mcp-server/lib/state-db.cjs +0 -1580
  185. package/mcp-server/lib/state-ops.cjs +0 -1428
  186. package/mcp-server/lib/task-contract.cjs +0 -404
  187. package/mcp-server/lib/task-expander.cjs +0 -105
  188. package/mcp-server/lib/task-ledger.cjs +0 -1964
  189. package/mcp-server/lib/telemetry.cjs +0 -85
  190. package/mcp-server/lib/topo.cjs +0 -131
  191. package/mcp-server/lib/ultra-facade.cjs +0 -2684
  192. package/mcp-server/lib/worker-packet.cjs +0 -358
  193. package/mcp-server/server.cjs +0 -437
  194. package/orchestrator/auto-merge.cjs +0 -128
  195. package/orchestrator/daemon.cjs +0 -264
  196. package/orchestrator/dispatch-rules.cjs +0 -78
  197. package/orchestrator/parallel-orchestrator.cjs +0 -903
  198. package/orchestrator/planner/plan-builder.cjs +0 -125
  199. package/orchestrator/recovery.cjs +0 -188
  200. package/orchestrator/session-close-journal-worker.cjs +0 -5
  201. package/orchestrator/session-close-journal.cjs +0 -1014
  202. package/orchestrator/session-runner.cjs +0 -1153
  203. package/orchestrator/worktree-manager.cjs +0 -282
  204. package/settings.json +0 -7
  205. package/skills/cc-collab/SKILL.md +0 -42
  206. package/skills/code-review-expert/SKILL.md +0 -43
  207. package/skills/code-review-expert/references/correctness-reliability.md +0 -30
  208. package/skills/code-review-expert/references/design-boundaries.md +0 -26
  209. package/skills/code-review-expert/references/removal-plan.md +0 -24
  210. package/skills/codex-collab/SKILL.md +0 -49
  211. package/skills/codex-collab/evals/evals.json +0 -35
  212. package/skills/integration-rules/SKILL.md +0 -32
  213. package/skills/security-rules/SKILL.md +0 -38
  214. package/skills/testing-rules/SKILL.md +0 -32
  215. package/skills/ultra-doctor/SKILL.md +0 -41
  216. package/skills/ultra-plan/references/semantic-preflight.md +0 -20
  217. package/skills/ultra-verify/SKILL.md +0 -46
  218. package/skills/ultra-verify/evals/evals.json +0 -46
  219. package/skills/ultra-verify/references/cross-verify-modes.md +0 -28
  220. package/skills/ultra-verify/references/evidence-status.md +0 -21
  221. package/skills/ultra-verify/scripts/verify_wait.py +0 -94
  222. package/spec/cli-protocol.md +0 -102
  223. package/spec/mcp-tools.yaml +0 -312
  224. package/spec/schemas/baseline-reconciliation.v1.schema.json +0 -73
  225. package/spec/schemas/change-delta.v1.schema.json +0 -153
  226. package/spec/schemas/command-manifest.schema.json +0 -29
  227. package/spec/schemas/context-file.v4.5.schema.json +0 -54
  228. package/spec/schemas/delivery-report.v1.schema.json +0 -66
  229. package/spec/schemas/documentation-reconciliation.v1.schema.json +0 -106
  230. package/spec/schemas/mcp-tools.schema.json +0 -136
  231. package/spec/schemas/skill-manifest.schema.json +0 -24
  232. package/spec/schemas/state-db.sql +0 -641
  233. package/spec/schemas/task-ledger.v2.schema.json +0 -296
  234. package/spec/schemas/tasks.v4.5.schema.json +0 -96
  235. package/spec/schemas/test-report.v1.schema.json +0 -225
  236. package/ultra-tools/cli.cjs +0 -129
  237. package/ultra-tools/commands/db.cjs +0 -226
  238. package/ultra-tools/commands/legacy-memory.cjs +0 -159
  239. package/ultra-tools/commands/migrate.cjs +0 -1386
  240. package/ultra-tools/commands/session.cjs +0 -213
  241. package/ultra-tools/commands/status.cjs +0 -559
  242. package/ultra-tools/commands/system.cjs +0 -498
  243. package/ultra-tools/commands/task.cjs +0 -105
@@ -1,20 +1,39 @@
1
- # Baseline reconciliation manifest
2
-
3
- Write a JSON file inside `.ultra/changes/active/<change-id>/` with
4
- `$schema: "ultra-baseline-reconciliation-v1"`.
5
-
6
- Bind `change_id`, `baseline_id`, and `baseline_updates` exactly to the archive request.
7
- Include:
8
-
9
- - `semantic_changes`: stable id, `add` or `update`, project-relative `source_ref` using
10
- `path#anchor`, the prior baseline digest or `null`, and the current file digest;
11
- - `resolved_gap_ids`: existing baseline gaps closed by this delivery;
12
- - `resolved_unknowns`: exact existing unknown summaries closed by this delivery;
13
- - `verification`: named checks with exact commands, `pass`, and bounded evidence;
14
- - `semantic_no_change_reason`: an evidence-backed reason when `baseline_updates` is
15
- empty.
16
-
17
- Every updated file needs a semantic change record and current anchor. The before digest
18
- must match baseline authority and the after digest must match the file. Keep the
19
- manifest with the change so archive recovery can replay the same transaction after an
20
- interrupted filesystem move.
1
+ # Delivery reconciliation contract
2
+
3
+ Write exactly one `.ultra/changes/active/<change-id>/delivery.md`. It is editable while
4
+ the Change is active and moves with the directory when archived.
5
+
6
+ ```markdown
7
+ # Delivery: <change-id>
8
+
9
+ ## Outcome Reconciliation
10
+ <accepted outcome versus observed result, with path#anchor evidence>
11
+
12
+ ## Specification and Documentation Updates
13
+ <changed files and why, or an evidence-backed no-change statement>
14
+
15
+ ## Verification
16
+ | Command | Exit | Evidence | Freshness |
17
+ |---|---:|---|---|
18
+
19
+ ## Review
20
+ <SUMMARY.json path, packet digest, verdict, and unresolved findings>
21
+
22
+ ## Technical Debt
23
+ <bounded debt, consequence, owner, and upgrade path; or None>
24
+
25
+ ## Residual Risks and Omissions
26
+ <owner disposition for every material item>
27
+
28
+ ## Recovery
29
+ <rollback or recovery procedure and verification>
30
+
31
+ ## External Effects
32
+ <commit, push, tag, publish, deploy: authorized and observed status separately>
33
+ ```
34
+
35
+ Every semantic update cites a repository-relative `path#anchor`. A reduction requires
36
+ the owner decision before the affected specification changes. Exact command evidence
37
+ must match the checkout identified by `.ultra/test-report.json`; stale results stay
38
+ visible and never become a pass. Do not create a second JSON or Markdown delivery
39
+ summary.
@@ -1,66 +1,119 @@
1
1
  ---
2
2
  name: ultra-dev
3
- description: Implement one authoritative Ultra task through a fresh-context, test-driven, review-backed live path. Use when a planned task is executable, interrupted, or ready for focused recovery.
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
4
  ---
5
5
 
6
- # Implement one task
7
-
8
- The model owns code reasoning and edits. Ultra owns the durable task contract,
9
- canonical Context Envelope, execution lease, immutable Worker Packet, evidence
10
- references, and checkpoint.
11
-
12
- ## Bind execution
13
-
14
- 1. Call `ultra.context { stage: dev, scope: { change_id, task_id }, detail: full }`.
15
- 2. Import a newer team checkpoint with `ultra.sync`; stop on a real same-record or
16
- active-session conflict.
17
- 3. Reuse a valid lease or call `ultra.session { action: acquire }`. Acquire atomically
18
- performs admission, compiles or reuses the implementation Context Envelope, mints
19
- the lease/worktree, and returns the immutable Worker Packet. A separate
20
- `action: admission` is an optional read-only preview, not a prerequisite.
21
- 4. Verify the returned packet digest, purpose, acceptance, dependencies, public seam,
22
- exact output path/schema, verification command,
23
- non-goals, recovery, and required context refs. Update the task contract before
24
- implementation when accepted intent changed.
25
-
26
- ## Implement adaptively
27
-
28
- Reproduce the failure, write a failing test, or establish a characterization signal
29
- before changing logic. Implement the smallest complete vertical slice. Ask the owner
30
- only when new evidence changes product intent, compatibility, security, material cost,
31
- external effects, or recovery.
32
-
33
- Use typed `ultra.record` entries for `task_outcome / start|block|complete|attest_commit`,
34
- `event / append`, `artifact / bind`, `decision / accept`, and corrected
35
- `task_contract / revise`. Every worker output must repeat the exact `packet_digest`;
36
- the parent registers it only after packet, output path, schema, and digest validation.
37
- Live ownership, `in_progress`, session ids, leases, worktrees, telemetry, and
38
- completion hashes remain local runtime state; durable task outcome and evidence may
39
- enter the team checkpoint.
40
-
41
- Run focused and adjacent risk-justified checks, then a task-scoped independent review.
42
- Fix blocking findings and refresh affected evidence.
43
-
44
- ## Commit one semantic checkpoint
45
-
46
- Call `ultra.checkpoint` once with `stage: dev`, the exact Change/Task scope, evidence,
47
- and stable idempotency key. It binds the exact Context Envelope and Worker Packet and
48
- reports outcome diagnostics. The model decides whether the implemented slice satisfies
49
- the Task; semantic warnings remain visible. A rejection means the declared authority,
50
- path, digest, or concurrency boundary was unsafe and leaves the draft mutable.
51
-
52
- After acceptance:
53
-
54
- 1. Record `task_outcome / complete { id, packet_digest }`; never include a patch or SHA.
55
- 2. Publish the durable completed status with `ultra.sync`.
56
- 3. Create at most one authorized local task commit containing code, semantic
57
- artifacts, and the team checkpoint.
58
- 4. Record `task_outcome / attest_commit { id, completion_commit }` with that integrated
59
- commit's full SHA. This is local mechanical proof and must not create another commit.
60
-
61
- Release the lease through `ultra.session`. Preserve a dirty or unintegrated worktree
62
- on interruption. Commit, push, tag, publish, deploy, or destructive cleanup require
63
- separate owner authority.
64
-
65
- Return changed paths, public seam, exact checks, review result, checkpoint, commit,
66
- session state, and residual risk. Do not invoke the next capability automatically.
6
+ # Take one task from plan to recorded evidence
7
+
8
+ The model owns the code reasoning and the edits. The repository owns the task
9
+ contract, the evidence, and everything needed to resume.
10
+
11
+ ## Before you start
12
+
13
+ 1. Read `.ultra/tasks.json` and pick the task; read its `context_file` end to
14
+ end, above all the closing `## Resume Note` — that line says where to pick up.
15
+ 2. Read `CONTEXT.md` for vocabulary, and the `.ultra/decisions/` entries the task
16
+ context names.
17
+ 3. Read `.ultra/north-star.md` and the task's acceptance criteria. If you cannot
18
+ state that acceptance in one sentence, you are not ready to start.
19
+
20
+ When this task starts from an observed error, failing check or unexpected behavior,
21
+ read `references/debugging.md` and establish the earliest incorrect state before editing.
22
+
23
+ ## Definition of done
24
+
25
+ - All six evidence dimensions are answered for this task, each against the
26
+ checkable rule below rather than an impression.
27
+ - `tasks.json` and the context file's header state the same status, each written
28
+ and then read back — a one-sided write breaks resume on another host.
29
+ - The context file carries a Completion entry and a rewritten Resume Note.
30
+ - A task-level review has run and its blocking findings are resolved.
31
+
32
+ ## Write the implementation plan before the code
33
+
34
+ Fill in the task context's Implementation section as prose a person can read:
35
+ which modules change, how the interfaces move, which seam the tests will use.
36
+ Confirm that, then write code. Deciding the design while typing implementation
37
+ buries the design decisions in the details.
38
+
39
+ ## Develop through red then green
40
+
41
+ Follow `../ultra-tdd/SKILL.md`, writing tests only on the seams the plan already
42
+ confirmed, one slice at a time. Do no refactoring here — `ultra-review` owns it,
43
+ because what is worth restructuring only becomes visible after several slices.
44
+
45
+ ## Converge on the task-scoped acceptance set
46
+
47
+ Development ends when the task's acceptance commands pass, not when the code looks
48
+ finished. Resolve the context's **Change Acceptance IDs** against the active `intent.md`
49
+ and use each named row's executable `Verification`. Commands under the context's
50
+ Acceptance Criteria may add task-local checks; they do not replace the Change mapping.
51
+
52
+ Run one baseline before repairing anything. Track the best-ever passing set of mapped
53
+ IDs and task-local commands, the total repair rounds, and consecutive rounds that add
54
+ nothing to that set. The loop has three explicit exits:
55
+
56
+ | Exit | Condition | Action |
57
+ |---|---|---|
58
+ | Converged | Every mapped Change verification and task-local command exits zero | Close out below |
59
+ | Stalled | Two consecutive repair rounds add no new item to the best-ever passing set, or three repair rounds finish without convergence | Stop; report the remaining criteria and what each repair tried |
60
+ | Unreachable | A command did not start because its executable, fixture, service or declared environment prerequisite is unavailable | Stop that criterion; report the missing prerequisite and its repair path |
61
+
62
+ A nonzero exit normally means a failing criterion, not an unreachable one; inspect its
63
+ output. A regression never shrinks the best-ever set, and the total round limit stops
64
+ oscillation where different criteria alternate between pass and fail.
65
+
66
+ ## Answer the six evidence dimensions
67
+
68
+ Each has a rule you can check against the work rather than assert:
69
+
70
+ | Dimension | Answered when |
71
+ |---|---|
72
+ | `tests_written` | This diff adds or changes at least one assertion — touching a test file is not enough |
73
+ | `tests_passed` | The last test run exited zero and covered the files this diff touched |
74
+ | `persistence_real` | On any path that stores data, the test uses real storage or a container |
75
+ | `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 |
76
+ | `vertical_slice` | One test's execution path runs from the entry point through to persistence |
77
+ | `spec_trace` | The anchor the task's `trace_to` names exists in the specification |
78
+
79
+ Record one canonical `.ultra/evidence/<task-id>/evidence.json` with
80
+ `$schema: "ultra-task-evidence-v1"`, `task_id`, `git_head`, `commands`, the six-key
81
+ `dimensions` object, `artifacts`, `limitations`, and `timestamp`. Raw logs and cited
82
+ files stay beside it; no second summary restates the same evidence. Each command has
83
+ `command`, `exit_code`, and `evidence_ref`. Each dimension has `status` (`satisfied`,
84
+ `gap`, or `not_applicable`), `evidence_refs`, and a non-empty `rationale`. Evidence is a
85
+ sensor, not a gate: a gap is reported and handed over, never used to block the work — a
86
+ gate that can be escaped by damaging the work gets escaped by damaging the work.
87
+
88
+ ## When implementation and the specification disagree
89
+
90
+ This is the one backward edge in the whole workflow. Classify before touching the
91
+ specification, and classify by outcome rather than reason: does every commitment
92
+ the specification already made still hold afterwards? If even one no longer holds
93
+ it is a REDUCTION — stop and ask the owner, however good the argument. Log the
94
+ classification in the context file's Change Log.
95
+
96
+ ## Close out
97
+
98
+ Write the status to both places and read both back. Add the Completion entry and
99
+ rewrite the Resume Note to say where the next session picks up. Then run the
100
+ task-level review through `../ultra-review/SKILL.md`, resolve blocking findings, and refresh
101
+ the evidence they touched.
102
+
103
+ Report the changed paths, the seam, the exact checks run, the review result, the
104
+ evidence gaps and the residual risk. Recommend the next capability from what the
105
+ files now say; do not invoke it.
106
+
107
+ ## When the owner decides
108
+
109
+ Any REDUCTION, and each external effect separately.
110
+ At most one authorized local task commit happens here; push, tag, publish and
111
+ deploy each need their own authorization. An interrupted task leaves its worktree
112
+ as it stands and says so in the Resume Note instead of tidying it away.
113
+
114
+ ## References
115
+
116
+ - `../ultra-tdd/SKILL.md` — read before the first test, for the seam and mock boundary.
117
+ - `../ultra-think/references/autonomy-boundary.md` — read when spec and code disagree.
118
+ - `../ultra-review/SKILL.md` — read when implementation evidence is ready for review.
119
+ - `references/debugging.md` — read for a reproduced failure before selecting a repair.
@@ -0,0 +1,22 @@
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.
@@ -0,0 +1,79 @@
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.
@@ -0,0 +1,118 @@
1
+ ---
2
+ name: ultra-grilling
3
+ description: Interrogate an owner request until every branch of its decision tree is resolved, one question per turn, each carrying a recommended answer. Use when another skill needs the owner's intent specific enough to build from — a new project's north star, a Change boundary, or an ask whose acceptance criteria are still implicit.
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/north-star.md` and `CONTEXT.md` where they exist. Established
16
+ wording and vocabulary are decisions that were already made.
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 calling skill holds a decision list it can write to a file: one line per
33
+ 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.
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 — at most five, from the table in
71
+ `references/reframing.md`. They refuse the owner's framing on purpose, which is
72
+ how they surface what the request left out. Stop early once the frame stops
73
+ moving.
74
+
75
+ **Detail questions** fill in the confirmed frame:
76
+
77
+ - What happens when this goes wrong, and how would we find out?
78
+ - Which of these options is cheaper to reverse?
79
+ - What are we deliberately not doing?
80
+ - What does done look like, concretely enough to check?
81
+
82
+ An answer counts once it is specific enough to **rule something out**. "It should
83
+ be fast" rules nothing out; "the list renders before they finish typing" does.
84
+ When an answer rules nothing out, ask what would have to be true for the owner to
85
+ *reject* a candidate solution.
86
+
87
+ Skip what you can derive, what does not change the work, and what they already
88
+ settled.
89
+
90
+ ## When the owner decides
91
+
92
+ This whole skill is owner-facing, so the boundary is narrow: hold the loop open
93
+ until each decision is confirmed explicitly, and start no implementation on an
94
+ inferred consensus.
95
+
96
+ ## How the loop ends
97
+
98
+ Every ending hands back the same artifact: the decisions written one per line,
99
+ each with the options rejected and the reason they lost. The caller chooses where
100
+ it lands — `north-star.md`, `discovery.md`, a Change intent, or a decision file.
101
+
102
+ - **Resolved** — every required field answered or explicitly deferred.
103
+ - **Stalled** — two consecutive turns add no newly confirmed decision. Hand back
104
+ the open fields and what each one blocks.
105
+ - **Unavailable** — the host cannot ask, or the owner stopped answering. Hand back
106
+ the last confirmed state, every unanswered field named.
107
+
108
+ A loop with no exit traps the owner as much as you: re-asking what they cannot
109
+ currently answer costs more than deferring it. Deferral is a recorded outcome,
110
+ not a failure. Where the host has no structured question surface, ask one plain
111
+ question per turn instead.
112
+
113
+ ## References
114
+
115
+ - `references/reframing.md` — read before the first question: when to reframe,
116
+ how it fails, the five framing questions, and what counts as an answer.
117
+ - `../ultra-think/references/autonomy-boundary.md` — read when an answer removes
118
+ something the specification already promised, or otherwise crosses C5.
@@ -0,0 +1,72 @@
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 after two rejected reframes.** A third is no longer listening. Take the
40
+ owner's framing as given and move to the framing questions below.
41
+
42
+ ## Framing questions
43
+
44
+ These refuse the owner's framing on purpose, which is how they surface what the
45
+ request left out. Ask at most five, and stop early once the frame stops moving.
46
+
47
+ | Question | What it recovers |
48
+ |---|---|
49
+ | What do you do today, without this? | The real job, with the proposed form stripped off |
50
+ | 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 |
51
+ | What must never happen, even if it would work better? | The hard constraints they were never going to volunteer |
52
+ | If it could only do one thing and you would still use it, which? | Core against periphery, before scope has a chance to spread |
53
+ | Whose situation gets worse when this exists? | Stakeholders, and the constraints attached to them |
54
+
55
+ Two of these are worth their place for a specific reason. Asking for success
56
+ directly gets an aspiration; asking what would make it a waste gets a threshold.
57
+ Asking who is made worse off surfaces the constraints an owner never thinks to
58
+ state, because to them they are simply how the world is.
59
+
60
+ ## What counts as an answer
61
+
62
+ An answer counts once it is specific enough to **rule something out**.
63
+
64
+ | Not yet an answer | An answer |
65
+ |---|---|
66
+ | "It should be fast" | "The list renders before they finish typing" |
67
+ | "It should be secure" | "A support agent must never see a full card number" |
68
+ | "Keep costs reasonable" | "Under fifty dollars a month in API spend" |
69
+
70
+ When an answer rules nothing out, do not re-ask the same question louder. Ask
71
+ what would have to be true for the owner to **reject** a candidate solution — the
72
+ rejection criterion is the constraint, stated from the other side.