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.
- package/.ultra-template/changes/abandoned/.gitkeep +0 -0
- package/.ultra-template/contexts/TEMPLATE.md +94 -0
- package/.ultra-template/decisions/.gitkeep +1 -0
- package/.ultra-template/evidence/.gitkeep +1 -0
- package/.ultra-template/north-star.md +46 -0
- package/.ultra-template/research/.gitkeep +1 -0
- package/.ultra-template/specs/discovery.md +2 -2
- package/.ultra-template/tasks.json +3 -0
- package/.ultra-template/test-report.json +27 -0
- package/CHANGELOG.md +107 -1
- package/README.md +217 -579
- package/adapters/_shared/delegate-profiles/kimi-read-only.md +15 -0
- package/adapters/_shared/delegate-profiles/kimi-write.md +17 -0
- package/adapters/_shared/file-ops.cjs +76 -2
- package/adapters/_shared/host-profile.cjs +97 -0
- package/adapters/_shared/plugin-core.cjs +204 -0
- package/adapters/_shared/runtime-assets.cjs +31 -96
- package/adapters/claude.js +92 -291
- package/adapters/codex.js +309 -842
- package/adapters/grok.js +143 -1469
- package/adapters/kimi.js +124 -1053
- package/adapters/opencode.js +230 -742
- package/bin/delegate-worker.cjs +328 -0
- package/bin/delegate.cjs +463 -0
- package/bin/install.js +38 -11
- package/docs/ARCHITECTURE.md +125 -216
- package/docs/ARTIFACT-AUTHORITY.md +90 -268
- package/docs/DECISIONS.md +77 -87
- package/docs/PHILOSOPHY.md +208 -0
- package/docs/PLUGIN-ISOLATION-CONTRACT.md +65 -39
- package/docs/RUNTIME-COMPAT-MATRIX.md +140 -155
- package/docs/SKILL-AUTHORING.md +94 -73
- package/docs/WORKFLOW-LIFECYCLE.md +97 -189
- package/hooks/README.md +19 -37
- package/hooks/_common.py +113 -0
- package/hooks/adapters/codex.py +9 -16
- package/hooks/adapters/grok.py +5 -5
- package/hooks/adapters/kimi.py +8 -14
- package/hooks/block_dangerous_commands.py +201 -0
- package/hooks/compact_context.py +65 -0
- package/hooks/mid_workflow_recall.py +25 -0
- package/hooks/post_edit_guard.py +105 -0
- package/hooks/session_context.py +30 -0
- package/package.json +17 -52
- package/skills/ultra-change/SKILL.md +115 -50
- package/skills/ultra-change/references/change-contract.md +68 -3
- package/skills/ultra-delegate/SKILL.md +89 -0
- package/skills/ultra-delegate/references/delegation-contract.md +59 -0
- package/skills/ultra-delegate/scripts/delegate_wait.py +86 -0
- package/skills/ultra-deliver/SKILL.md +98 -42
- package/skills/ultra-deliver/references/baseline-reconciliation.md +39 -20
- package/skills/ultra-dev/SKILL.md +115 -62
- package/skills/ultra-dev/references/debugging.md +22 -0
- package/skills/ultra-domain-modeling/SKILL.md +79 -0
- package/skills/ultra-grilling/SKILL.md +118 -0
- package/skills/ultra-grilling/references/reframing.md +72 -0
- package/skills/ultra-init/SKILL.md +102 -37
- package/skills/ultra-init/references/brownfield-adoption.md +33 -83
- package/skills/ultra-init/scripts/init_project.cjs +84 -0
- package/skills/ultra-plan/SKILL.md +101 -68
- package/skills/ultra-research/SKILL.md +68 -48
- package/skills/ultra-research/references/00-problem-validation.md +5 -5
- package/skills/ultra-research/references/01-opportunity-discovery.md +3 -3
- package/skills/ultra-research/references/02-market-assessment.md +5 -4
- package/skills/ultra-research/references/03-competitive-landscape.md +3 -3
- package/skills/ultra-research/references/04-product-strategy.md +3 -3
- package/skills/ultra-research/references/05-assumptions-validation.md +5 -5
- package/skills/ultra-research/references/10-user-personas.md +3 -2
- package/skills/ultra-research/references/11-user-scenarios.md +3 -3
- package/skills/ultra-research/references/20-user-stories.md +4 -3
- package/skills/ultra-research/references/21-features-scope.md +3 -2
- package/skills/ultra-research/references/22-success-metrics.md +3 -3
- package/skills/ultra-research/references/30-architecture-context.md +3 -3
- package/skills/ultra-research/references/31-solution-strategy.md +3 -3
- package/skills/ultra-research/references/32-building-blocks.md +3 -3
- package/skills/ultra-research/references/40-deployment.md +3 -3
- package/skills/ultra-research/references/41-quality-risks.md +3 -3
- package/skills/ultra-research/references/99-synthesis.md +7 -7
- package/skills/ultra-review/SKILL.md +84 -32
- package/skills/ultra-review/references/code.md +17 -0
- package/skills/ultra-review/references/comments.md +12 -0
- package/skills/ultra-review/references/design.md +12 -0
- package/skills/ultra-review/references/errors.md +13 -0
- package/skills/ultra-review/references/spec.md +13 -0
- package/skills/ultra-review/references/tests.md +12 -0
- package/skills/ultra-review/references/worker-packet.md +40 -0
- package/skills/ultra-review/scripts/review_wait.py +26 -15
- package/skills/ultra-status/SKILL.md +61 -36
- package/skills/ultra-tdd/SKILL.md +81 -0
- package/skills/ultra-tdd/references/templates/README.md +20 -0
- package/skills/ultra-tdd/references/templates/feature-flag-default-audit.sh +79 -0
- package/skills/ultra-tdd/references/templates/persistence-real.ts +78 -0
- package/skills/ultra-tdd/references/templates/testcontainer-postgres.py +78 -0
- package/skills/ultra-tdd/references/templates/testcontainer-postgres.ts +73 -0
- package/skills/ultra-tdd/references/templates/vertical-slice.ts +66 -0
- package/skills/ultra-tdd/references/test-execution.md +18 -0
- package/skills/ultra-test/SKILL.md +75 -30
- package/skills/ultra-test/references/export-syntax.md +18 -0
- package/skills/ultra-test/scripts/worktree_digest.cjs +54 -0
- package/skills/ultra-think/SKILL.md +49 -27
- package/skills/ultra-think/references/autonomy-boundary.md +48 -0
- package/skills/ultra-think/references/interaction-boundary.md +18 -33
- package/.ultra-template/docs/research/README.md +0 -55
- package/.ultra-template/reports/templates/delivery-report.json +0 -17
- package/.ultra-template/reports/templates/test-report.json +0 -18
- package/.ultra-template/tasks/tasks.json +0 -15
- package/.ultra-template/templates/task-context.md +0 -19
- package/adapters/_shared/codex-assets.cjs +0 -725
- package/adapters/_shared/codex-ultra-tools-entry.cjs +0 -11
- package/adapters/_shared/interaction-contract.cjs +0 -129
- package/adapters/_shared/path-rewrite.cjs +0 -79
- package/adapters/_shared/runtime-native.cjs +0 -132
- package/adapters/_shared/settings-merge.cjs +0 -76
- package/agents/code-reviewer.md +0 -42
- package/agents/debugger.md +0 -40
- package/agents/review-code.md +0 -49
- package/agents/review-comments.md +0 -38
- package/agents/review-coordinator.md +0 -56
- package/agents/review-design.md +0 -40
- package/agents/review-errors.md +0 -43
- package/agents/review-spec.md +0 -39
- package/agents/review-tests.md +0 -40
- package/agents/tdd-runner.md +0 -38
- package/bin/orchestrator.js +0 -383
- package/commands/ultra-change.md +0 -10
- package/commands/ultra-deliver.md +0 -10
- package/commands/ultra-dev.md +0 -10
- package/commands/ultra-doctor.md +0 -10
- package/commands/ultra-init.md +0 -10
- package/commands/ultra-plan.md +0 -10
- package/commands/ultra-research.md +0 -10
- package/commands/ultra-review.md +0 -10
- package/commands/ultra-status.md +0 -10
- package/commands/ultra-test.md +0 -10
- package/commands/ultra-think.md +0 -10
- package/docs/AGENT-CONTEXT.md +0 -191
- package/docs/COMMIT-HASH-BACKFILL.md +0 -51
- package/docs/LEGACY-CLI-CROSSWALK.md +0 -175
- package/docs/ROADMAP.md +0 -101
- package/docs/STATE-DB-ACCESS-POLICY.md +0 -161
- package/hooks/active_task_context.py +0 -152
- package/hooks/context_envelope.py +0 -100
- package/hooks/health_check.py +0 -196
- package/hooks/pre_stop_check.py +0 -66
- package/hooks/runtime_paths.py +0 -396
- package/hooks/subagent_tracker.py +0 -88
- package/hooks/workflow_checkpoint.py +0 -76
- package/hooks/workflow_context.py +0 -48
- package/hooks/workflow_resume.py +0 -84
- package/mcp-server/hook-context.cjs +0 -38
- package/mcp-server/hook-event.cjs +0 -34
- package/mcp-server/lib/archive-journal.cjs +0 -1119
- package/mcp-server/lib/archive-mutation-worker.py +0 -365
- package/mcp-server/lib/artifact-registry.cjs +0 -1232
- package/mcp-server/lib/baseline-workflow.cjs +0 -1193
- package/mcp-server/lib/canonical-json.cjs +0 -19
- package/mcp-server/lib/change-authority.cjs +0 -26
- package/mcp-server/lib/change-packet.cjs +0 -790
- package/mcp-server/lib/change-workflow.cjs +0 -65
- package/mcp-server/lib/context-envelope.cjs +0 -581
- package/mcp-server/lib/context-paths.cjs +0 -142
- package/mcp-server/lib/decision-records.cjs +0 -423
- package/mcp-server/lib/delivery-transaction.cjs +0 -471
- package/mcp-server/lib/doctor-backup-worker.cjs +0 -328
- package/mcp-server/lib/doctor.cjs +0 -627
- package/mcp-server/lib/git-bootstrap.cjs +0 -651
- package/mcp-server/lib/init-project.cjs +0 -1021
- package/mcp-server/lib/kernel-change-workflow.cjs +0 -2029
- package/mcp-server/lib/legacy-change-workflow.cjs +0 -3032
- package/mcp-server/lib/managed-file-write.cjs +0 -172
- package/mcp-server/lib/plan-checkpoint.cjs +0 -177
- package/mcp-server/lib/plan-publication-worker.cjs +0 -830
- package/mcp-server/lib/plan-store.cjs +0 -794
- package/mcp-server/lib/prd-parser.cjs +0 -83
- package/mcp-server/lib/pricing.cjs +0 -44
- package/mcp-server/lib/project-context.cjs +0 -178
- package/mcp-server/lib/projector.cjs +0 -386
- package/mcp-server/lib/provider-refs.cjs +0 -42
- package/mcp-server/lib/runtime-paths.cjs +0 -1714
- package/mcp-server/lib/runtime-state.cjs +0 -222
- package/mcp-server/lib/safe-project-file.cjs +0 -385
- package/mcp-server/lib/stage-checkpoints.cjs +0 -463
- package/mcp-server/lib/state-authority.cjs +0 -95
- package/mcp-server/lib/state-db.cjs +0 -1580
- package/mcp-server/lib/state-ops.cjs +0 -1428
- package/mcp-server/lib/task-contract.cjs +0 -404
- package/mcp-server/lib/task-expander.cjs +0 -105
- package/mcp-server/lib/task-ledger.cjs +0 -1964
- package/mcp-server/lib/telemetry.cjs +0 -85
- package/mcp-server/lib/topo.cjs +0 -131
- package/mcp-server/lib/ultra-facade.cjs +0 -2684
- package/mcp-server/lib/worker-packet.cjs +0 -358
- package/mcp-server/server.cjs +0 -437
- package/orchestrator/auto-merge.cjs +0 -128
- package/orchestrator/daemon.cjs +0 -264
- package/orchestrator/dispatch-rules.cjs +0 -78
- package/orchestrator/parallel-orchestrator.cjs +0 -903
- package/orchestrator/planner/plan-builder.cjs +0 -125
- package/orchestrator/recovery.cjs +0 -188
- package/orchestrator/session-close-journal-worker.cjs +0 -5
- package/orchestrator/session-close-journal.cjs +0 -1014
- package/orchestrator/session-runner.cjs +0 -1153
- package/orchestrator/worktree-manager.cjs +0 -282
- package/settings.json +0 -7
- package/skills/cc-collab/SKILL.md +0 -42
- package/skills/code-review-expert/SKILL.md +0 -43
- package/skills/code-review-expert/references/correctness-reliability.md +0 -30
- package/skills/code-review-expert/references/design-boundaries.md +0 -26
- package/skills/code-review-expert/references/removal-plan.md +0 -24
- package/skills/codex-collab/SKILL.md +0 -49
- package/skills/codex-collab/evals/evals.json +0 -35
- package/skills/integration-rules/SKILL.md +0 -32
- package/skills/security-rules/SKILL.md +0 -38
- package/skills/testing-rules/SKILL.md +0 -32
- package/skills/ultra-doctor/SKILL.md +0 -41
- package/skills/ultra-plan/references/semantic-preflight.md +0 -20
- package/skills/ultra-verify/SKILL.md +0 -46
- package/skills/ultra-verify/evals/evals.json +0 -46
- package/skills/ultra-verify/references/cross-verify-modes.md +0 -28
- package/skills/ultra-verify/references/evidence-status.md +0 -21
- package/skills/ultra-verify/scripts/verify_wait.py +0 -94
- package/spec/cli-protocol.md +0 -102
- package/spec/mcp-tools.yaml +0 -312
- package/spec/schemas/baseline-reconciliation.v1.schema.json +0 -73
- package/spec/schemas/change-delta.v1.schema.json +0 -153
- package/spec/schemas/command-manifest.schema.json +0 -29
- package/spec/schemas/context-file.v4.5.schema.json +0 -54
- package/spec/schemas/delivery-report.v1.schema.json +0 -66
- package/spec/schemas/documentation-reconciliation.v1.schema.json +0 -106
- package/spec/schemas/mcp-tools.schema.json +0 -136
- package/spec/schemas/skill-manifest.schema.json +0 -24
- package/spec/schemas/state-db.sql +0 -641
- package/spec/schemas/task-ledger.v2.schema.json +0 -296
- package/spec/schemas/tasks.v4.5.schema.json +0 -96
- package/spec/schemas/test-report.v1.schema.json +0 -225
- package/ultra-tools/cli.cjs +0 -129
- package/ultra-tools/commands/db.cjs +0 -226
- package/ultra-tools/commands/legacy-memory.cjs +0 -159
- package/ultra-tools/commands/migrate.cjs +0 -1386
- package/ultra-tools/commands/session.cjs +0 -213
- package/ultra-tools/commands/status.cjs +0 -559
- package/ultra-tools/commands/system.cjs +0 -498
- package/ultra-tools/commands/task.cjs +0 -105
|
@@ -1,20 +1,39 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
Write
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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:
|
|
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
|
-
#
|
|
7
|
-
|
|
8
|
-
The model owns code reasoning and edits.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
2.
|
|
16
|
-
|
|
17
|
-
3.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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.
|