ultra-builder-pro-cli 0.26.0 → 0.26.2
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 +7 -0
- package/.ultra-template/north-star.md +20 -31
- package/.ultra-template/project-brief.md +28 -0
- package/.ultra-template/specs/product.md +4 -0
- package/.ultra-template/specs/research-distillate.md +8 -0
- package/.ultra-template/test-report.json +1 -0
- package/CHANGELOG.md +131 -1
- package/README.md +61 -29
- package/bin/delegate-worker.cjs +5 -0
- package/bin/delegate.cjs +7 -0
- package/docs/ARCHITECTURE.md +36 -10
- package/docs/ARTIFACT-AUTHORITY.md +42 -13
- package/docs/DECISIONS.md +24 -5
- package/docs/PHILOSOPHY.md +45 -12
- package/docs/PLUGIN-ISOLATION-CONTRACT.md +6 -3
- package/docs/RUNTIME-COMPAT-MATRIX.md +43 -1
- package/docs/SKILL-AUTHORING.md +10 -6
- package/docs/WORKFLOW-LIFECYCLE.md +103 -39
- package/hooks/README.md +12 -5
- package/hooks/_common.py +54 -5
- package/hooks/block_dangerous_commands.py +116 -10
- package/hooks/session_context.py +34 -8
- package/package.json +1 -1
- package/skills/ultra-change/SKILL.md +59 -52
- package/skills/ultra-change/references/change-contract.md +65 -7
- package/skills/ultra-delegate/SKILL.md +21 -3
- package/skills/ultra-delegate/references/delegation-contract.md +10 -2
- package/skills/ultra-deliver/SKILL.md +63 -21
- package/skills/ultra-deliver/references/baseline-reconciliation.md +5 -3
- package/skills/ultra-dev/SKILL.md +33 -14
- package/skills/ultra-grilling/SKILL.md +63 -24
- package/skills/ultra-grilling/references/reframing.md +72 -0
- package/skills/ultra-init/SKILL.md +62 -79
- package/skills/ultra-init/references/brownfield-adoption.md +23 -40
- package/skills/ultra-plan/SKILL.md +48 -24
- package/skills/ultra-research/SKILL.md +91 -62
- package/skills/ultra-research/references/{03-competitive-landscape.md → 03-alternatives.md} +6 -6
- package/skills/ultra-research/references/22-success-metrics.md +8 -4
- package/skills/ultra-research/references/99-synthesis.md +8 -1
- package/skills/ultra-research/references/wayfinding.md +42 -0
- package/skills/ultra-review/SKILL.md +31 -3
- package/skills/ultra-status/SKILL.md +62 -32
- package/skills/ultra-tdd/SKILL.md +5 -2
- package/skills/ultra-test/SKILL.md +31 -12
- package/skills/ultra-test/scripts/worktree_digest.cjs +42 -8
- package/skills/ultra-think/SKILL.md +5 -10
- package/skills/ultra-think/references/interaction-boundary.md +2 -1
|
File without changes
|
|
@@ -32,6 +32,8 @@
|
|
|
32
32
|
<!-- The verifiable definition of done. Read by mid_workflow_recall and session_context, and
|
|
33
33
|
injected into agent context — keep every line testable and keep noise out. -->
|
|
34
34
|
|
|
35
|
+
**Change Acceptance IDs**: [`AC-1`, `AC-3`, or `none` for task-local-only work]
|
|
36
|
+
|
|
35
37
|
- [ ] `exact test command`
|
|
36
38
|
- [ ] Pass: [scenario 1]
|
|
37
39
|
- [ ] Pass: [scenario 2]
|
|
@@ -51,6 +53,11 @@
|
|
|
51
53
|
|
|
52
54
|
**Source**: `.ultra/specs/product.md#section-id`
|
|
53
55
|
|
|
56
|
+
**Hard Constraints**: [`HC-1`, `HC-3`, or `none` — the north-star constraints this
|
|
57
|
+
task could plausibly violate. Read them before the first edit and again before
|
|
58
|
+
marking complete. Crossing one stops the work and goes to the owner, however good
|
|
59
|
+
the argument.]
|
|
60
|
+
|
|
54
61
|
**Decisions**: [relevant `.ultra/decisions/<id>.md` entries, or `none`]
|
|
55
62
|
|
|
56
63
|
## Change Log
|
|
@@ -1,46 +1,35 @@
|
|
|
1
1
|
# Project North Star
|
|
2
2
|
|
|
3
|
-
> **Authority**: the
|
|
4
|
-
>
|
|
3
|
+
> **Authority**: the accepted steering contract established by `ultra-research` from
|
|
4
|
+
> owner decisions and cited evidence. Every Change and task must serve this contract.
|
|
5
5
|
>
|
|
6
|
-
> **Scope**:
|
|
7
|
-
>
|
|
6
|
+
> **Scope**: this file owns the project direction, the one North Star outcome or metric
|
|
7
|
+
> when one is justified, hard constraints, and explicit exclusions. Product requirements,
|
|
8
|
+
> supporting measurements, actors, and scenarios stay in `specs/product.md`.
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
## Project Direction
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
[NEEDS CLARIFICATION]
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
Captured by ultra-init, or from the owner's first request.
|
|
15
|
-
Do not paraphrase into product-speak: specs/product.md holds the processed version.
|
|
16
|
-
The value of this line is that it is the unprocessed baseline you check the
|
|
17
|
-
processed version against. -->
|
|
14
|
+
## North Star Outcome
|
|
18
15
|
|
|
19
|
-
|
|
16
|
+
- `NS-01` outcome: [NEEDS CLARIFICATION]
|
|
17
|
+
- Metric or observation contract: [NEEDS CLARIFICATION]
|
|
18
|
+
- Why it represents delivered value: [NEEDS CLARIFICATION]
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
A single metric is optional. When one would distort the product, record that decision and
|
|
21
|
+
use an observable outcome plus guardrails instead of inventing numeric precision.
|
|
22
22
|
|
|
23
23
|
## Hard Constraints
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
constraints — architecture.md holds those. Examples:
|
|
27
|
-
- Never store plaintext passwords
|
|
28
|
-
- Cannot break backwards compatibility with API v1
|
|
29
|
-
- Bundle stays under 500 KB
|
|
30
|
-
- External API cost stays under $X/month -->
|
|
25
|
+
- `HC-1`: [NEEDS CLARIFICATION]
|
|
31
26
|
|
|
32
|
-
|
|
27
|
+
## Explicit Exclusions
|
|
33
28
|
|
|
34
|
-
|
|
29
|
+
- [NEEDS CLARIFICATION]
|
|
35
30
|
|
|
36
|
-
##
|
|
31
|
+
## Research Trace
|
|
37
32
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
a regression.
|
|
42
|
-
3. If your current work does not trace back here, **stop and ask**. You may be building the
|
|
43
|
-
wrong thing.
|
|
44
|
-
|
|
45
|
-
The One-line is injected by `session_context` at SessionStart. `mid_workflow_recall`
|
|
46
|
-
re-injects the active task acceptance before relevant tool use. See PHILOSOPHY C1.
|
|
33
|
+
- Project brief: `project-brief.md`
|
|
34
|
+
- Accepted research run: [NEEDS CLARIFICATION]
|
|
35
|
+
- Decision references: [NEEDS CLARIFICATION]
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Project Brief
|
|
2
|
+
|
|
3
|
+
> **Authority**: raw owner intake captured by `ultra-init`. It preserves what the owner
|
|
4
|
+
> initially asked for and the broad outline needed to begin research. It is not an
|
|
5
|
+
> evidence-backed product baseline.
|
|
6
|
+
>
|
|
7
|
+
> **Lifecycle**: `ultra-research` reads this seed and promotes accepted conclusions into
|
|
8
|
+
> the North Star, specifications, domain language, or decisions. It does not rewrite the
|
|
9
|
+
> brief to make later conclusions look inevitable.
|
|
10
|
+
|
|
11
|
+
## One-line
|
|
12
|
+
|
|
13
|
+
[NEEDS CLARIFICATION]
|
|
14
|
+
|
|
15
|
+
## Initial Outline
|
|
16
|
+
|
|
17
|
+
- What it is: [NEEDS CLARIFICATION]
|
|
18
|
+
- Broadly for whom or what: [NEEDS CLARIFICATION]
|
|
19
|
+
- Intended result: [NEEDS CLARIFICATION]
|
|
20
|
+
- Broad boundary: [NEEDS CLARIFICATION]
|
|
21
|
+
|
|
22
|
+
## Explicit Inputs
|
|
23
|
+
|
|
24
|
+
- [NEEDS CLARIFICATION]
|
|
25
|
+
|
|
26
|
+
## Open Questions for Research
|
|
27
|
+
|
|
28
|
+
- [NEEDS CLARIFICATION]
|
|
@@ -60,6 +60,10 @@ Scope status must reflect an explicit decision. Do not infer a reduced product p
|
|
|
60
60
|
|
|
61
61
|
## 22 Outcomes and Measurements
|
|
62
62
|
|
|
63
|
+
The accepted project direction and any single North Star outcome or metric live in
|
|
64
|
+
`.ultra/north-star.md`. Record supporting outcomes, measures, and guardrails here; do
|
|
65
|
+
not force one metric when an observable outcome plus guardrails is the honest contract.
|
|
66
|
+
|
|
63
67
|
| Outcome or guardrail | Definition | Evidence source | Decision use | Owner |
|
|
64
68
|
|---|---|---|---|---|
|
|
65
69
|
| | | | | |
|
|
@@ -28,6 +28,14 @@ specifications' prose.
|
|
|
28
28
|
|---|---|---|
|
|
29
29
|
| | | |
|
|
30
30
|
|
|
31
|
+
## Source Revisions
|
|
32
|
+
|
|
33
|
+
| Canonical source | Git blob hash from `git hash-object` | Status |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| `.ultra/specs/product.md` | | current or stale |
|
|
36
|
+
| `.ultra/specs/architecture.md` | | current or stale |
|
|
37
|
+
| `.ultra/specs/discovery.md` | | current or stale |
|
|
38
|
+
|
|
31
39
|
## End-to-End Trace
|
|
32
40
|
|
|
33
41
|
| Problem or constraint | Actor and scenario | Requirement and acceptance | Architecture path | Verification |
|
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,125 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.26.2] — 2026-08-04
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Added `.ultra/project-brief.md` as the raw owner-intake artifact and optional
|
|
15
|
+
Research `wayfinding.md` navigation for unclear multi-lens paths, without adding a
|
|
16
|
+
fifteenth Skill or another semantic authority.
|
|
17
|
+
- Expanded Research alternatives beyond direct competitors and made a single North
|
|
18
|
+
Star metric optional when an observable outcome plus guardrails is more honest.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- Narrowed `ultra-init` to the Project Brief and empty skeleton, made
|
|
23
|
+
`ultra-research` own the first accepted North Star, domain language, and
|
|
24
|
+
specification baseline, and limited `ultra-change` to touched baseline sections.
|
|
25
|
+
- Made the first six Research lenses dependency-aware and kept Grilling, Think, and
|
|
26
|
+
Domain Modeling as caller-bounded reusable methods rather than Research stages or
|
|
27
|
+
owner routes.
|
|
28
|
+
- Routed `ultra-status` from semantic file contents instead of a Research completion
|
|
29
|
+
bit or any single unresolved marker.
|
|
30
|
+
- Gave every Change one stable id across active, archive, and abandoned positions;
|
|
31
|
+
made the task ledger append-only and every current reader active-id scoped.
|
|
32
|
+
- Added explicit `none`, `bounded`, and `required` Research Disposition contracts,
|
|
33
|
+
one-task planning for quick Changes, and two-pass delivery against a fresh semantic
|
|
34
|
+
plus product snapshot.
|
|
35
|
+
- Gave the exact Change Contract explicit Profile rationale and Risk flags fields so
|
|
36
|
+
its required blast-radius decision has one stable representation.
|
|
37
|
+
- Kept ordinary technical seam selection model-owned and made delegation reachable for
|
|
38
|
+
task execution, scoped Research evidence, and aggregate Change review without
|
|
39
|
+
manufacturing task rows.
|
|
40
|
+
|
|
41
|
+
### Fixed
|
|
42
|
+
|
|
43
|
+
- Made session context prefer the accepted North Star, fall back to the Project Brief
|
|
44
|
+
before Research, retain legacy one-line compatibility, and always append active task
|
|
45
|
+
acceptance when present.
|
|
46
|
+
- Bound Research distillates to the actual `git hash-object` value of all three
|
|
47
|
+
baseline specifications so staleness is mechanically observable.
|
|
48
|
+
- Prevented archived or abandoned unfinished tasks, invalid Change ids, blocked
|
|
49
|
+
dependencies, and ambiguous multiple `in_progress` rows from being injected as the
|
|
50
|
+
current Hook acceptance.
|
|
51
|
+
- Made canonical `change_id` override a conflicting legacy `change_ref`, so migration
|
|
52
|
+
compatibility cannot revive a historical task.
|
|
53
|
+
- Bound Test reports to exact Change id, ordered task ids, intent digest, HEAD, and a
|
|
54
|
+
product-worktree digest that excludes the report and Change-directory metadata while
|
|
55
|
+
binding current intent separately, so product reconciliation requires retest while
|
|
56
|
+
delivery metadata and archive finalization do not self-invalidate.
|
|
57
|
+
- Prevented a separate request from opening a second active Change, and gave abandoned
|
|
58
|
+
intents an exact owner decision, reason, reusable-evidence, and recovery closure read
|
|
59
|
+
by future Change and Status workflows.
|
|
60
|
+
- Kept non-publishing package inspection diagnostic while the explicit Deliver gate
|
|
61
|
+
blocks release-package creation only for an undispositioned changed export with no
|
|
62
|
+
non-test consumer.
|
|
63
|
+
- Made that gate's authorization path use the finding disposition in the current Test
|
|
64
|
+
report and carry the accepted decision into `delivery.md`.
|
|
65
|
+
- Aligned `.npmignore` with the explicit package allowlist and locked all eight
|
|
66
|
+
maintained product documents into the tarball smoke contract.
|
|
67
|
+
|
|
68
|
+
### Verified
|
|
69
|
+
|
|
70
|
+
- Passed 119 Node tests, 21 Hook tests, 14 Skill Creator validations, five isolated
|
|
71
|
+
host install/Doctor/uninstall lifecycles, a 115-entry package dry-run inspection, and
|
|
72
|
+
an audit with zero vulnerabilities.
|
|
73
|
+
|
|
74
|
+
## [0.26.1] — 2026-08-03
|
|
75
|
+
|
|
76
|
+
### Added
|
|
77
|
+
|
|
78
|
+
- Added reframing to `ultra-grilling`, five bounded framing questions, and checkable
|
|
79
|
+
resolved, stalled, and unavailable exits so a literal request can be translated
|
|
80
|
+
into the role and outcome the owner actually means.
|
|
81
|
+
- Added `HC-<n>` hard-constraint identifiers, task-level constraint mapping,
|
|
82
|
+
executable Change verification, and a supported `changes/abandoned/` exit.
|
|
83
|
+
- Added owner-authorized cross-model-family review for major or security-relevant
|
|
84
|
+
Changes, plus optional native fan-out inside independent research and test regions.
|
|
85
|
+
|
|
86
|
+
### Changed
|
|
87
|
+
|
|
88
|
+
- Made `ultra-dev` converge on each task's mapped Change acceptance IDs, track the
|
|
89
|
+
best-ever passing set, and stop after two no-progress rounds or three repair rounds.
|
|
90
|
+
- Expanded delivery reconciliation to every repository document and kept its wiring
|
|
91
|
+
gate local to an explicitly invoked `ultra-deliver`; ordinary npm lifecycle commands
|
|
92
|
+
never depend on project `.ultra/` evidence.
|
|
93
|
+
- Made `ultra-change` read relevant archive history before opening intent, preferring
|
|
94
|
+
`delivery.md` while supporting legacy archive summaries and verification records.
|
|
95
|
+
- Made all six review lenses the default and required every skipped lens to preserve
|
|
96
|
+
its reason in the aggregate result.
|
|
97
|
+
|
|
98
|
+
### Fixed
|
|
99
|
+
|
|
100
|
+
- Prevented delegated workers from modifying `.ultra/`, including when `.` grants the
|
|
101
|
+
rest of an isolated checkout.
|
|
102
|
+
- Made dangerous-command authorization reachable by hashing the protected effect
|
|
103
|
+
independently of its retry spelling.
|
|
104
|
+
- Kept additive protected-branch publication on the host's native authority path instead
|
|
105
|
+
of hard-blocking an already owner-authorized release, retained exact-digest guards for
|
|
106
|
+
history rewrites and branch deletion, and stopped treating inert searches as effects.
|
|
107
|
+
- Kept expandable interpreter heredocs inside dangerous-effect inspection while
|
|
108
|
+
continuing to treat quoted commit-message heredocs as data.
|
|
109
|
+
- Required explicit owner authority before `ultra-review` can launch a cross-host
|
|
110
|
+
model-family recheck.
|
|
111
|
+
- Bound `ultra-dev` convergence to the active Change acceptance IDs, with explicit
|
|
112
|
+
stalled and unreachable exits instead of an open-ended repair loop.
|
|
113
|
+
- Made `ultra-change` recover archived intent from legacy archive evidence when the
|
|
114
|
+
preferred delivery record is absent.
|
|
115
|
+
- Kept the `ultra-deliver` wiring gate local to an owner-invoked delivery workflow;
|
|
116
|
+
ordinary package commands remain independent of project `.ultra/` state.
|
|
117
|
+
- Added the missing `changes/abandoned/` template directory and migrated completed WIP
|
|
118
|
+
evidence links to their canonical runtime document.
|
|
119
|
+
|
|
120
|
+
### Verified
|
|
121
|
+
|
|
122
|
+
- Completed an authenticated Claude-to-Codex continuation on one isolated
|
|
123
|
+
file-first task: Claude banked the failing test and Resume Note without changing
|
|
124
|
+
implementation, and Codex resumed from Git plus `.ultra/`, reached green, and
|
|
125
|
+
closed the ledger and canonical evidence without conversation transfer.
|
|
126
|
+
- Verified the release candidate with 111 Node tests, 10 Hook tests, 14 Skill Creator
|
|
127
|
+
validations, five healthy host Doctor reports, and zero audit vulnerabilities.
|
|
128
|
+
|
|
10
129
|
## [0.26.0] — 2026-08-01
|
|
11
130
|
|
|
12
131
|
### Added
|
|
@@ -1167,7 +1286,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
1167
1286
|
skill manifest, CLI protocol + mapping table; 5 spec validators.
|
|
1168
1287
|
- **Phase 0 — skeleton**: multi-runtime installer scaffolding.
|
|
1169
1288
|
|
|
1170
|
-
[Unreleased]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.
|
|
1289
|
+
[Unreleased]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.26.1...HEAD
|
|
1290
|
+
[0.26.1]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.26.0...v0.26.1
|
|
1291
|
+
[0.26.0]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.25.1...v0.26.0
|
|
1292
|
+
[0.25.1]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.25.0...v0.25.1
|
|
1293
|
+
[0.25.0]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.24.2...v0.25.0
|
|
1294
|
+
[0.24.2]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.24.1...v0.24.2
|
|
1295
|
+
[0.24.1]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.24.0...v0.24.1
|
|
1296
|
+
[0.24.0]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.23.0...v0.24.0
|
|
1297
|
+
[0.23.0]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.22.0...v0.23.0
|
|
1298
|
+
[0.22.0]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.21.1...v0.22.0
|
|
1299
|
+
[0.21.1]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.21.0...v0.21.1
|
|
1300
|
+
[0.21.0]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.20.0...v0.21.0
|
|
1171
1301
|
[0.20.0]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.19.1...v0.20.0
|
|
1172
1302
|
[0.19.1]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.19.0...v0.19.1
|
|
1173
1303
|
[0.19.0]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.18.0...v0.19.0
|
package/README.md
CHANGED
|
@@ -29,14 +29,14 @@ The package installs exactly fourteen Skills in three roles.
|
|
|
29
29
|
|
|
30
30
|
| Skill | Outcome |
|
|
31
31
|
|---|---|
|
|
32
|
-
| `ultra-init` | Establish the project skeleton and
|
|
33
|
-
| `ultra-research` |
|
|
34
|
-
| `ultra-change` | Reconcile
|
|
32
|
+
| `ultra-init` | Establish the project skeleton and raw Project Brief |
|
|
33
|
+
| `ultra-research` | Establish an accepted North Star and evidence-backed baseline |
|
|
34
|
+
| `ultra-change` | Reconcile one requested delta against the accepted baseline |
|
|
35
35
|
| `ultra-plan` | Write tracer-bullet tasks, contexts, dependencies, and seams |
|
|
36
36
|
| `ultra-dev` | Implement one task through red/green development and six evidence dimensions |
|
|
37
37
|
| `ultra-test` | Audit whole-system wiring, E2E behavior, performance, and security |
|
|
38
38
|
| `ultra-deliver` | Reconcile, review, document, and archive a completed Change |
|
|
39
|
-
| `ultra-delegate` | Run
|
|
39
|
+
| `ultra-delegate` | Run bounded task work, Research evidence, or aggregate review through another supported CLI |
|
|
40
40
|
|
|
41
41
|
### Model-invoked disciplines
|
|
42
42
|
|
|
@@ -60,6 +60,14 @@ review, and a consequential unresolved decision uses think. A host with native b
|
|
|
60
60
|
subagents may parallelize review lenses; another host runs the same lens assets
|
|
61
61
|
sequentially.
|
|
62
62
|
|
|
63
|
+
Inside `ultra-research`, the first six references are six semantic lenses, not six
|
|
64
|
+
extra Skills: problem validation, opportunity discovery, market assessment,
|
|
65
|
+
alternatives, product strategy, and assumptions validation. `wayfinding.md` chooses
|
|
66
|
+
the smallest dependency-correct path through those and the later evidence lenses.
|
|
67
|
+
Grilling still owns how to ask one missing question, Think owns one consequential
|
|
68
|
+
trade-off, and Domain Modeling owns vocabulary; Research owns the overall question
|
|
69
|
+
map, evidence convergence, owner checkpoints, and baseline promotion.
|
|
70
|
+
|
|
63
71
|
### What happened to the original Agents
|
|
64
72
|
|
|
65
73
|
v0.26 does not install a custom `agents/` projection. The old review workers became the
|
|
@@ -72,12 +80,15 @@ host exposes the same custom-agent API.
|
|
|
72
80
|
|
|
73
81
|
## Project authority
|
|
74
82
|
|
|
75
|
-
A
|
|
83
|
+
A project after its first accepted Research baseline uses this shape. Immediately after
|
|
84
|
+
Init, `CONTEXT.md` does not exist yet and the North Star/specification files are empty
|
|
85
|
+
skeletons.
|
|
76
86
|
|
|
77
87
|
```text
|
|
78
88
|
CONTEXT.md
|
|
79
89
|
.ultra/
|
|
80
90
|
├── .gitignore # ignores only derived Ultra paths
|
|
91
|
+
├── project-brief.md
|
|
81
92
|
├── north-star.md
|
|
82
93
|
├── tasks.json
|
|
83
94
|
├── test-report.json
|
|
@@ -88,15 +99,18 @@ CONTEXT.md
|
|
|
88
99
|
│ └── research-distillate.md
|
|
89
100
|
├── changes/
|
|
90
101
|
│ ├── active/<change-id>/{intent.md,delivery.md}
|
|
91
|
-
│
|
|
102
|
+
│ ├── archive/<change-id>/{intent.md,delivery.md}
|
|
103
|
+
│ └── abandoned/<change-id>/intent.md # includes exact Abandonment closure
|
|
92
104
|
├── contexts/<task-id>.md
|
|
93
105
|
├── decisions/<decision-id>.md
|
|
94
106
|
├── evidence/<task-id>/...
|
|
95
|
-
└── research/<run-id
|
|
107
|
+
└── research/<run-id>/{brief.md,<step-id>.md}
|
|
96
108
|
```
|
|
97
109
|
|
|
98
|
-
|
|
99
|
-
|
|
110
|
+
The optional `brief.md` is derived navigation; the selected step reports are cited
|
|
111
|
+
evidence, and promoted semantic facts live in the other canonical files. Git provides
|
|
112
|
+
history, comparison, rollback, and archive moves. The following additional paths are
|
|
113
|
+
derived and can be deleted or rebuilt:
|
|
100
114
|
|
|
101
115
|
```text
|
|
102
116
|
.ultra/.runtime/
|
|
@@ -111,13 +125,13 @@ staleness, and recovery rules.
|
|
|
111
125
|
|
|
112
126
|
| Route | Canonical write | Who consumes it next |
|
|
113
127
|
|---|---|---|
|
|
114
|
-
| `ultra-init` |
|
|
115
|
-
| `ultra-research` | selected cited reports
|
|
116
|
-
| `ultra-change` | one active `intent.md` with
|
|
117
|
-
| `ultra-plan` | `tasks.json`, one context per task, and Planning Posture in the active intent | dev and every resume path |
|
|
128
|
+
| `ultra-init` | raw `project-brief.md`, empty North Star and specification skeletons, and empty task/test ledgers | research, status, and the pre-baseline session Hook fallback |
|
|
129
|
+
| `ultra-research` | accepted North Star, first domain baseline, selected cited reports, reconciled specifications, and distillate | change, plan, and delivery |
|
|
130
|
+
| `ultra-change` | one active `intent.md` with stable `change_id`, Research Disposition, and only the accepted baseline sections touched by that delta; or an exact Abandonment closure before an owner-authorized move | active: research through delivery; abandoned: future Change history and status |
|
|
131
|
+
| `ultra-plan` | append-only `tasks.json` rows for the active `change_id`, one context per task, and Planning Posture in the active intent | dev and every resume path |
|
|
118
132
|
| `ultra-dev` | source/tests, task evidence, synchronized task/context status, Completion and Resume Note | review, test, status, delivery |
|
|
119
|
-
| `ultra-test` | the one current `test-report.json` bound to HEAD and worktree digest | status and delivery |
|
|
120
|
-
| `ultra-deliver` |
|
|
133
|
+
| `ultra-test` | the one current `test-report.json` bound to Change id, current task ids, intent digest, HEAD, and product-worktree digest | status and delivery |
|
|
134
|
+
| `ultra-deliver` | first reconciled specs/docs, then after a fresh Test snapshot one `delivery.md` and the archived Change directory | owner and future Change history |
|
|
121
135
|
| `ultra-status` | none | recommends the smallest explicit route from current files |
|
|
122
136
|
| `ultra-delegate` | derived runtime receipt plus an isolated worktree diff | primary host inspection and optional integration |
|
|
123
137
|
|
|
@@ -178,23 +192,37 @@ installation; all five support managed global installation and isolated
|
|
|
178
192
|
|
|
179
193
|
## Typical workflow
|
|
180
194
|
|
|
181
|
-
1. Select `ultra-init` once. It writes the skeleton,
|
|
182
|
-
initializes Git when needed, and
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
195
|
+
1. Select `ultra-init` once. It writes the skeleton, preserves the owner's raw one-line
|
|
196
|
+
request and broad outline in the Project Brief, initializes Git when needed, and
|
|
197
|
+
stops before product research.
|
|
198
|
+
2. Select `ultra-research` to turn that brief into the first accepted North Star,
|
|
199
|
+
shared vocabulary, and evidence-backed product and architecture baseline. For an
|
|
200
|
+
unclear multi-lens question it first writes a derived Wayfinding brief; for one
|
|
201
|
+
bounded evidence gap it skips that extra file.
|
|
202
|
+
3. Select `ultra-change` for a requested delta. It reconciles only the baseline sections
|
|
203
|
+
the delta touches before planning; it does not rebuild the project baseline. Its
|
|
204
|
+
Research Disposition either cites sufficient evidence or names the bounded question
|
|
205
|
+
and exit evidence that must return through Research. A micro edit that makes no
|
|
206
|
+
specification sentence false stays outside Ultra; an accepted quick Change still
|
|
207
|
+
receives one Plan task. While that Change remains active, reconcile its same stable
|
|
208
|
+
id; never open a second active Change for a separate request.
|
|
209
|
+
4. Select `ultra-plan` to record public seams and produce resumable tracer-bullet tasks.
|
|
210
|
+
The model owns ordinary technical seams; the owner decides only a seam that changes
|
|
211
|
+
the public contract or another material trade-off.
|
|
187
212
|
5. Select `ultra-dev` for one task at a time. Each task leaves a Completion entry,
|
|
188
213
|
evidence, and a closing Resume Note.
|
|
189
|
-
6. Select `ultra-test` once the
|
|
190
|
-
for wiring and E2E proof.
|
|
191
|
-
7. Select `ultra-deliver` to run aggregate review
|
|
192
|
-
|
|
193
|
-
|
|
214
|
+
6. Select `ultra-test` once tasks for the active Change are complete. Historical ledger
|
|
215
|
+
rows do not enter this audit. Local green tests do not substitute for wiring and E2E proof.
|
|
216
|
+
7. Select `ultra-deliver` to run aggregate review and reconcile documentation. If that
|
|
217
|
+
changes product or semantic files, rerun Test; re-enter Deliver on the fresh snapshot
|
|
218
|
+
to write delivery metadata and archive the stable Change id. Commit, push, tag,
|
|
219
|
+
publication, and deployment remain separately authorized effects.
|
|
194
220
|
|
|
195
221
|
At any point, `ultra-status` can reconstruct the current position. A fresh session or
|
|
196
222
|
different host resumes by reading `.ultra/tasks.json`, the selected `context_file`, its
|
|
197
|
-
`## Resume Note`, `CONTEXT.md`, relevant decisions, the active Change, and Git.
|
|
223
|
+
`## Resume Note`, `CONTEXT.md`, relevant decisions, the active Change, and Git. It first
|
|
224
|
+
filters the append-only ledger to tasks whose `change_id` matches the unique active
|
|
225
|
+
Change; archived and abandoned unfinished rows are history, not the frontier.
|
|
198
226
|
|
|
199
227
|
## Three independent integration defences
|
|
200
228
|
|
|
@@ -215,11 +243,11 @@ Five optional hooks accelerate file reading and protect a narrow effect boundary
|
|
|
215
243
|
|
|
216
244
|
| Hook | Behavior |
|
|
217
245
|
|---|---|
|
|
218
|
-
| `session_context.py` | Inject
|
|
246
|
+
| `session_context.py` | Inject the accepted North Star, or the Project Brief fallback before Research, plus current acceptance |
|
|
219
247
|
| `mid_workflow_recall.py` | Restate acceptance before relevant source operations |
|
|
220
248
|
| `compact_context.py` | Save and restore a disposable Git/file snapshot |
|
|
221
249
|
| `post_edit_guard.py` | Record mechanical evidence observations after edits |
|
|
222
|
-
| `block_dangerous_commands.py` |
|
|
250
|
+
| `block_dangerous_commands.py` | Advise on additive protected-branch publication; deny history rewrites and named destructive shell effects until the exact command is authorized |
|
|
223
251
|
|
|
224
252
|
All five exit silently when `.ultra/` is absent. Details are in
|
|
225
253
|
[Plugin Isolation](docs/PLUGIN-ISOLATION-CONTRACT.md).
|
|
@@ -244,6 +272,10 @@ Use `skills/ultra-delegate/scripts/delegate_wait.py` to wait for `result.json` w
|
|
|
244
272
|
loading intermediate worker output into the parent context. Delegation grants no new
|
|
245
273
|
authority; writable roots remain inside the worktree, and its permission file must
|
|
246
274
|
declare zero external effects without widening the host sandbox.
|
|
275
|
+
The immutable instruction names task execution/continuation, scoped Research evidence,
|
|
276
|
+
or aggregate Change review/verification. The latter two may be read-only and do not
|
|
277
|
+
require a task row, keeping pre-Plan Research and post-task cross-family review
|
|
278
|
+
reachable without inventing ledger work.
|
|
247
279
|
|
|
248
280
|
## Host support
|
|
249
281
|
|
package/bin/delegate-worker.cjs
CHANGED
|
@@ -7,6 +7,7 @@ const path = require('node:path');
|
|
|
7
7
|
const { execFileSync, spawn } = require('node:child_process');
|
|
8
8
|
|
|
9
9
|
const RESULT_SCHEMA = 'ultra-delegation-result-v1';
|
|
10
|
+
const PROTECTED_ROOT = '.ultra';
|
|
10
11
|
const MODEL_FIELDS = new Set([
|
|
11
12
|
'$schema', 'status', 'summary', 'changed_files', 'checks', 'evidence',
|
|
12
13
|
'questions', 'residual_risks',
|
|
@@ -148,7 +149,11 @@ function validateModelResult(payload) {
|
|
|
148
149
|
return null;
|
|
149
150
|
}
|
|
150
151
|
|
|
152
|
+
// The project's memory has exactly one writer: the primary host. A worker that edits
|
|
153
|
+
// `.ultra` in its own worktree collides in the files every later session reads to
|
|
154
|
+
// resume, so no permission grants it — not even `writable_roots: ["."]`.
|
|
151
155
|
function authorized(spec, file) {
|
|
156
|
+
if (file === PROTECTED_ROOT || file.startsWith(`${PROTECTED_ROOT}/`)) return false;
|
|
152
157
|
return spec.writable_roots.some((root) => (
|
|
153
158
|
root === '.' || file === root || file.startsWith(`${root}/`)
|
|
154
159
|
));
|
package/bin/delegate.cjs
CHANGED
|
@@ -12,6 +12,7 @@ const PERMISSION_SCHEMA = 'ultra-delegation-permission-v1';
|
|
|
12
12
|
const RECEIPT_SCHEMA = 'ultra-delegation-receipt-v1';
|
|
13
13
|
const RESULT_SCHEMA = 'ultra-delegation-result-v1';
|
|
14
14
|
const PERMISSION_FIELDS = new Set(['$schema', 'writable_roots', 'external_effects']);
|
|
15
|
+
const PROTECTED_ROOT = '.ultra';
|
|
15
16
|
const RESULT_JSON_SCHEMA = Object.freeze({
|
|
16
17
|
type: 'object',
|
|
17
18
|
additionalProperties: false,
|
|
@@ -149,6 +150,12 @@ function readPermission(file, worktree) {
|
|
|
149
150
|
throw new Error('permission writable_roots must not escape through symlinks');
|
|
150
151
|
}
|
|
151
152
|
const normalized = path.relative(worktree, real).split(path.sep).join('/') || '.';
|
|
153
|
+
// `.ultra` is the project's memory and has exactly one writer: the primary host.
|
|
154
|
+
// Rejected here so the delegation never starts, and again against the actual diff
|
|
155
|
+
// in the worker, which also covers the `.` grant.
|
|
156
|
+
if (normalized === PROTECTED_ROOT || normalized.startsWith(`${PROTECTED_ROOT}/`)) {
|
|
157
|
+
throw new Error(`permission writable_roots must not include ${PROTECTED_ROOT}; the primary host is its only writer`);
|
|
158
|
+
}
|
|
152
159
|
if (!writableRoots.includes(normalized)) {
|
|
153
160
|
writableRoots.push(normalized);
|
|
154
161
|
writableRootPaths.push(real);
|
package/docs/ARCHITECTURE.md
CHANGED
|
@@ -38,14 +38,22 @@ The exact allowlists live in `adapters/_shared/runtime-assets.cjs`. Public workf
|
|
|
38
38
|
never invoke another public workflow. They may use model-invoked disciplines and then
|
|
39
39
|
recommend the next owner route.
|
|
40
40
|
|
|
41
|
+
Research's seventeen references are workflow-owned semantic lenses. Its optional
|
|
42
|
+
`wayfinding.md` maps a multi-lens question without becoming a new Skill or authority.
|
|
43
|
+
The reusable mechanics remain separate: Grilling owns the interaction loop, Think owns
|
|
44
|
+
one consequential decision, and Domain Modeling owns vocabulary promotion.
|
|
45
|
+
|
|
41
46
|
### Authority plane
|
|
42
47
|
|
|
43
48
|
Canonical semantic authority consists of:
|
|
44
49
|
|
|
45
|
-
- `.ultra/
|
|
50
|
+
- `.ultra/project-brief.md` for raw owner intake and the initial outline;
|
|
51
|
+
- `.ultra/north-star.md` for the accepted direction, outcome or metric decision, hard
|
|
52
|
+
constraints, and exclusions established by Research;
|
|
46
53
|
- `.ultra/specs/*.md` for product, architecture, discovery, and research distillate;
|
|
47
|
-
- `.ultra/changes/{active,archive}/<id>/intent.md` for bounded outcomes
|
|
48
|
-
|
|
54
|
+
- `.ultra/changes/{active,archive,abandoned}/<id>/intent.md` for bounded outcomes with
|
|
55
|
+
one stable id across directory moves;
|
|
56
|
+
- append-only `.ultra/tasks.json` rows carrying `change_id`, plus each task's `context_file`;
|
|
49
57
|
- `.ultra/decisions/*.md`, `.ultra/evidence/`, `.ultra/test-report.json`, and research;
|
|
50
58
|
- repository-root `CONTEXT.md` for ubiquitous language;
|
|
51
59
|
- Git for revision identity, history, moves, diff, and rollback.
|
|
@@ -53,6 +61,12 @@ Canonical semantic authority consists of:
|
|
|
53
61
|
Each semantic fact has one canonical representation. A summary can point to authority,
|
|
54
62
|
but cannot become a second authority merely because it is convenient to read.
|
|
55
63
|
|
|
64
|
+
One primary host model writes this authority in a worktree. Native subagents are
|
|
65
|
+
read-only sensors; delegated CLIs write isolated non-`.ultra` roots and return receipts.
|
|
66
|
+
Sequential Changes share the ledger by stable id, while current readers filter by the
|
|
67
|
+
one unique active Change. This keeps concurrency explicit in Git instead of adding a
|
|
68
|
+
semantic lock service or workflow engine.
|
|
69
|
+
|
|
56
70
|
### Adaptation plane
|
|
57
71
|
|
|
58
72
|
`adapters/*.js` translates the shared package into native host surfaces:
|
|
@@ -87,7 +101,10 @@ the parent model runs the same references sequentially.
|
|
|
87
101
|
Five hooks read canonical files and emit bounded context or observations. Their output
|
|
88
102
|
under `.ultra/.runtime/`, `.ultra/progress/`, or `.ultra/reviews/` is derived and
|
|
89
103
|
disposable. The dangerous-command hook is the only hard effect guard; it classifies a
|
|
90
|
-
small named set
|
|
104
|
+
small named destructive set and provides an exact-command authorization repair.
|
|
105
|
+
Additive protected-branch publication remains advisory when portable host wiring cannot
|
|
106
|
+
project a trusted owner-approval receipt; history rewrites and branch deletion remain
|
|
107
|
+
guarded.
|
|
91
108
|
|
|
92
109
|
## Completion and recovery
|
|
93
110
|
|
|
@@ -97,10 +114,11 @@ end-to-end evidence by themselves.
|
|
|
97
114
|
|
|
98
115
|
Every user Skill starts by reading:
|
|
99
116
|
|
|
100
|
-
1.
|
|
101
|
-
2.
|
|
102
|
-
3. `
|
|
103
|
-
4.
|
|
117
|
+
1. zero or one active `change_id`, diagnosing more than one;
|
|
118
|
+
2. `.ultra/tasks.json` tasks whose `change_id` matches it;
|
|
119
|
+
3. the matching frontier task's `context_file` and closing `## Resume Note`;
|
|
120
|
+
4. `CONTEXT.md` and relevant decisions;
|
|
121
|
+
5. the active Change, specifications, evidence, and current Git state.
|
|
104
122
|
|
|
105
123
|
That same sequence works after compaction, a fresh process, disabled hooks, or a host
|
|
106
124
|
change. Compact snapshots can accelerate recovery but never outrank the source files.
|
|
@@ -109,10 +127,12 @@ change. Compact snapshots can accelerate recovery but never outrank the source f
|
|
|
109
127
|
|
|
110
128
|
Three independent Skills protect the vertical path:
|
|
111
129
|
|
|
112
|
-
1. `ultra-plan`
|
|
130
|
+
1. `ultra-plan` records model-selected technical seams, asks the owner only for a
|
|
131
|
+
public-contract or material trade-off, and rejects horizontal feature tasks.
|
|
113
132
|
2. `ultra-dev` records six separate evidence dimensions, including real persistence,
|
|
114
133
|
default-on behavior, vertical execution, and spec trace.
|
|
115
|
-
3. `ultra-test` searches exports for real consumers
|
|
134
|
+
3. `ultra-test` searches exports for real consumers, exercises the primary flow, and
|
|
135
|
+
binds the result to Change id, task ids, intent, HEAD, and product-worktree digest.
|
|
116
136
|
|
|
117
137
|
These are independent sensors. None rewrites a finding into product truth.
|
|
118
138
|
|
|
@@ -128,6 +148,12 @@ schema-constrained final response; the Node worker validates `finished`, `blocke
|
|
|
128
148
|
writes its own receipt; stdout, stderr, native final output, and the launch receipt
|
|
129
149
|
remain diagnostic files.
|
|
130
150
|
|
|
151
|
+
The instruction binds the active `change_id` and one of three semantic scopes: task
|
|
152
|
+
execution/continuation, scoped Research evidence, or aggregate Change
|
|
153
|
+
review/verification. Only task execution requires a task row. The read-only Research
|
|
154
|
+
and aggregate scopes preserve the same process boundary without inventing work merely
|
|
155
|
+
to make delegation reachable.
|
|
156
|
+
|
|
131
157
|
Delegation does not grant authority or copy semantic state into another store. The
|
|
132
158
|
worker reads and writes the same repository files in the specified worktree.
|
|
133
159
|
|