ultra-builder-pro-cli 0.26.1 → 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.
Files changed (39) hide show
  1. package/.ultra-template/north-star.md +20 -31
  2. package/.ultra-template/project-brief.md +28 -0
  3. package/.ultra-template/specs/product.md +4 -0
  4. package/.ultra-template/specs/research-distillate.md +8 -0
  5. package/.ultra-template/test-report.json +1 -0
  6. package/CHANGELOG.md +64 -0
  7. package/README.md +60 -28
  8. package/docs/ARCHITECTURE.md +32 -9
  9. package/docs/ARTIFACT-AUTHORITY.md +42 -13
  10. package/docs/DECISIONS.md +20 -3
  11. package/docs/PHILOSOPHY.md +9 -7
  12. package/docs/SKILL-AUTHORING.md +10 -6
  13. package/docs/WORKFLOW-LIFECYCLE.md +99 -39
  14. package/hooks/README.md +7 -2
  15. package/hooks/_common.py +54 -5
  16. package/hooks/session_context.py +34 -8
  17. package/package.json +1 -1
  18. package/skills/ultra-change/SKILL.md +52 -63
  19. package/skills/ultra-change/references/change-contract.md +37 -5
  20. package/skills/ultra-delegate/SKILL.md +14 -3
  21. package/skills/ultra-deliver/SKILL.md +48 -43
  22. package/skills/ultra-deliver/references/baseline-reconciliation.md +5 -3
  23. package/skills/ultra-dev/SKILL.md +8 -8
  24. package/skills/ultra-grilling/SKILL.md +9 -9
  25. package/skills/ultra-init/SKILL.md +62 -87
  26. package/skills/ultra-init/references/brownfield-adoption.md +23 -40
  27. package/skills/ultra-plan/SKILL.md +29 -18
  28. package/skills/ultra-research/SKILL.md +91 -68
  29. package/skills/ultra-research/references/{03-competitive-landscape.md → 03-alternatives.md} +6 -6
  30. package/skills/ultra-research/references/22-success-metrics.md +8 -4
  31. package/skills/ultra-research/references/99-synthesis.md +8 -1
  32. package/skills/ultra-research/references/wayfinding.md +42 -0
  33. package/skills/ultra-review/SKILL.md +4 -1
  34. package/skills/ultra-status/SKILL.md +62 -32
  35. package/skills/ultra-tdd/SKILL.md +5 -2
  36. package/skills/ultra-test/SKILL.md +26 -12
  37. package/skills/ultra-test/scripts/worktree_digest.cjs +42 -8
  38. package/skills/ultra-think/SKILL.md +5 -10
  39. package/skills/ultra-think/references/interaction-boundary.md +2 -1
@@ -3,6 +3,10 @@
3
3
  Create one contract before planning. Keep every field specific enough to verify and
4
4
  stable enough to survive a fresh session.
5
5
 
6
+ The directory id is globally unique across active, archive, and abandoned Changes and
7
+ matches `[A-Za-z0-9][A-Za-z0-9._-]*`. It is the stable `change_id`; moving the directory
8
+ never changes it.
9
+
6
10
  ## Exact `intent.md` structure
7
11
 
8
12
  ```markdown
@@ -10,6 +14,8 @@ stable enough to survive a fresh session.
10
14
 
11
15
  > **Status**: draft | accepted
12
16
  > **Profile**: quick | standard | major | incident
17
+ > **Profile rationale**: <why the smallest selected profile covers the blast radius>
18
+ > **Risk flags**: <applicable flags, or none>
13
19
 
14
20
  ## Outcome
15
21
  <one externally observable result>
@@ -29,6 +35,14 @@ stable enough to survive a fresh session.
29
35
  ### Built and Unpromised
30
36
  ### Contradictory
31
37
 
38
+ ## Research Disposition
39
+ - Disposition: none | bounded | required
40
+ - Question: <the exact load-bearing unknown, or none>
41
+ - Selected lenses: <reference ids, or none>
42
+ - Existing evidence: <repository-relative paths and claims>
43
+ - Required exit evidence: <what must exist or be resolved before planning>
44
+ - Rationale: <why this is sufficient for this Change boundary>
45
+
32
46
  ## Planning Posture
33
47
  <EXPAND | SELECTIVE | HOLD | REDUCE, rationale, and owner confirmation>
34
48
  <!-- Scope for this Change only. Not the commitment classification: REDUCE here
@@ -93,9 +107,27 @@ acceptance set undecidable.
93
107
  Record a profile rationale and every applicable risk flag. Select the smallest profile
94
108
  whose guarantees cover the real blast radius; never use profile labels as estimates.
95
109
 
96
- ## Research disposition
110
+ ## Research Disposition
111
+
112
+ The `Disposition` value is exactly `none | bounded | required`. Use `none` with a
113
+ rationale when accepted evidence is sufficient. Use `bounded` for one already-framed
114
+ question whose smallest sufficient lenses are known; it skips Wayfinding. Use `required`
115
+ when several load-bearing claims or the evidence path itself remain unclear, so Research
116
+ may Wayfind before selecting lenses. Both name the exact question, selected or candidate
117
+ Research lenses, existing evidence, and required exit evidence.
118
+ The host model evaluates whether the named evidence exists and supports the claim; do
119
+ not add a `research_complete` bit, score, or workflow state. Planning waits while the
120
+ recorded exit evidence is unsatisfied.
121
+
122
+ ## Exact abandonment closure
97
123
 
98
- Use `none` with a rationale when accepted evidence is sufficient. Use `bounded` or
99
- `required` with a supported mode and the exact selected semantic steps when product,
100
- behavior, architecture, deployment, or risk facts remain load-bearing. The recorded
101
- selection is the planning gate.
124
+ Before moving an owner-abandoned Change, append this exact structure to `intent.md`:
125
+
126
+ ```markdown
127
+ ## Abandonment
128
+ - Date:
129
+ - Owner decision:
130
+ - Reason:
131
+ - Reusable evidence:
132
+ - Recovery or successor:
133
+ ```
@@ -10,7 +10,16 @@ semantic synthesis and remains the only writer of `.ultra/tasks.json`.
10
10
 
11
11
  ## Before you start
12
12
 
13
- 1. Read `.ultra/tasks.json`, the delegated task's `context_file` and `## Resume Note`.
13
+ 1. Resolve exactly one active `change_id`, then select one scope and name it in
14
+ `instruction.md`:
15
+ - **task execution or continuation** — select one matching task and read its full
16
+ `context_file` and `## Resume Note`;
17
+ - **scoped Research evidence** — read the active intent's Research Disposition,
18
+ named question, sources, and required exit evidence;
19
+ - **aggregate Change review or verification** — read the exact matching task ids,
20
+ relevant contexts, current report or review summary, and Change diff.
21
+ Research and aggregate read-only scopes do not require a task. An archived or
22
+ abandoned task cannot be delegated as current work.
14
23
  2. Read `CONTEXT.md`, relevant `.ultra/decisions/`, acceptance and current evidence.
15
24
  3. Define one bounded instruction, permission set, clean Git worktree and result.
16
25
  4. Read `references/delegation-contract.md` before writing either JSON artifact.
@@ -24,13 +33,15 @@ semantic synthesis and remains the only writer of `.ultra/tasks.json`.
24
33
  - No `writable_roots` entry is `.ultra/` or sits under it, and the actual diff touches
25
34
  nothing there.
26
35
  - Timeout and cancellation reach a terminal failed result and release `run.lock`.
27
- - The primary host verifies the result against the delegated workflow's acceptance.
36
+ - The primary host verifies the result against the selected scope's task acceptance,
37
+ Research exit evidence, or aggregate review/verification question.
28
38
 
29
39
  ## Prepare and run
30
40
 
31
41
  Write under `.ultra/.runtime/delegations/<id>/`:
32
42
 
33
- - `instruction.md`: bounded goal, sources, acceptance and forbidden effects;
43
+ - `instruction.md`: scope type, stable `change_id`, optional task id, bounded goal,
44
+ sources, acceptance or exit evidence, and forbidden effects;
34
45
  - `permission.json`: the exact file-local boundary in the contract reference;
35
46
  - `result.json`: launcher-published terminal artifact only.
36
47
 
@@ -1,25 +1,24 @@
1
1
  ---
2
2
  name: ultra-deliver
3
- description: Reconcile one completed Change, run aggregate review and refactoring, refresh release documentation, and archive the local workflow record. Use when the task ledger is complete and the owner wants a delivery handoff or separately authorized release effects.
3
+ description: Reconcile one Change whose matching tasks are complete, run aggregate review and refactoring, refresh release documentation, and archive the local workflow record. Use when the owner wants a delivery handoff or separately authorized release effects for the active Change.
4
4
  ---
5
5
 
6
6
  # Turn current evidence into a recoverable delivery handoff
7
7
 
8
- Delivery closes the local Change. Commit, push, tag, publication and deployment remain
9
- separate effects; local readiness grants none of them automatically.
8
+ Delivery closes the local Change; readiness grants no commit, push, tag, publish, or deploy authority.
10
9
 
11
10
  ## Before you start
12
11
 
13
- 1. Read `.ultra/tasks.json` and each completed task's `context_file`, Completion and
14
- closing `## Resume Note`.
12
+ 1. Resolve exactly one active `change_id`. Read `.ultra/tasks.json`; every matching task
13
+ must be complete. Read each `context_file`'s Completion and closing Resume Note.
15
14
  2. Read `CONTEXT.md`, relevant `.ultra/decisions/`, active Change intent and evidence.
16
- 3. Read `.ultra/test-report.json` and current `HEAD`. If `git_commit` differs from HEAD,
17
- label the report stale and obtain current evidence before a release recommendation.
15
+ 3. Read `.ultra/test-report.json`, then run the Test Skill's `worktree_digest.cjs` with
16
+ project root and `--change-id`. Require report `task_ids` for the current Change plus
17
+ matching `change_id`, `git_commit`, worktree digest, and intent digest; otherwise stop.
18
18
 
19
19
  ## Definition of done
20
20
 
21
- - Actual outcome, specifications, docs, tests and aggregate review have been reconciled,
22
- with every documentation file checked against the actual diff rather than from memory.
21
+ - Outcome, specs, tests, aggregate review, and every document match the actual diff.
23
22
  - Every changed export has a non-test consumer or a recorded owner disposition.
24
23
  - Every omitted stage is explicitly recorded with its evidence-based rationale.
25
24
  - Build and release checks have exact commands and real results.
@@ -27,32 +26,41 @@ separate effects; local readiness grants none of them automatically.
27
26
 
28
27
  ## Review and refactor
29
28
 
30
- Follow `../ultra-review/SKILL.md` across the aggregate Change. This is where useful
31
- refactoring occurs: several completed slices now reveal real duplication, coupling and
32
- deep-module boundaries. Rerun every check affected by a refactor and refresh the report
33
- against the resulting HEAD.
29
+ Follow `../ultra-review/SKILL.md` across the aggregate Change; refactor only observed
30
+ duplication, coupling, or boundary defects. Rerun affected checks and refresh the report.
34
31
 
35
32
  ## Reconcile the handoff
36
33
 
37
34
  1. Compare accepted intent and task traces with delivered behavior.
38
35
  2. Apply justified specification corrections; route any REDUCTION to the owner.
39
- 3. Reconcile every document against the actual diff, not only the ones you remember
40
- touching. List the repository's documentation files, read the Change's full diff, and
41
- repair each place a document now describes behavior that no longer exists. CHANGELOG
42
- and README are the usual ones, but a stale example in a guide, a renamed flag in a
43
- runbook and an obsolete field in an API note drift the same way and are found the
44
- same way. Record bounded debt only in the active Change `delivery.md` under
45
- `## Technical Debt`.
46
- 4. Run the repository's build and packaging checks.
47
- 5. Determine the version impact from the public contract and project convention.
48
- 6. Follow `references/baseline-reconciliation.md` and write the one canonical active
49
- Change `delivery.md` with exact checks, residual risks, omissions and rollback.
50
-
51
- Step 3 is the **exit** reconciliation and does not duplicate `ultra-change`'s entry
52
- reconciliation. Entry asks whether the specifications already disagreed with the code
53
- before this Change was written; exit asks which documents this Change just made wrong.
54
- One keeps the intent from inheriting drift, the other keeps the Change from leaving new
55
- drift behind.
36
+ 3. List documentation, compare every file with the full Change diff, and repair stale
37
+ behavior, examples, flags, or fields. Record bounded debt only in active
38
+ `delivery.md` under `## Technical Debt`.
39
+ 4. Defer build, non-publishing package inspection, version selection, and the canonical
40
+ `delivery.md` until the fresh-snapshot finalization pass below. Reconciliation that
41
+ changed files must return through Test first.
42
+
43
+ Entry reconciliation prevents inherited drift; this exit reconciliation prevents the
44
+ Change from leaving new document drift.
45
+
46
+ ## Reconcile, then finalize on a fresh snapshot
47
+
48
+ Delivery has two observable passes, not a hidden state machine:
49
+
50
+ 1. Reconcile and review. If this pass changes source, tests, task/context/evidence,
51
+ specifications, maintained documentation, or `intent.md`, stop after writing the
52
+ reconciled files. The existing report is stale; recommend `ultra-test` and make no
53
+ delivery or release claim.
54
+ 2. After an unchanged pass or fresh Test, recheck Change/task/HEAD/product/intent
55
+ identities. Apply the gate, run build and non-publishing package inspection, determine
56
+ version impact, and use `references/baseline-reconciliation.md` for canonical
57
+ `delivery.md`. Archive the Change. Excluded delivery metadata and the directory move
58
+ cannot self-invalidate the product digest; intent stays independently bound.
59
+
60
+ Do not draft a success narrative around stale evidence. A current `passed: false`
61
+ report may still reach finalization only after every finding has an explicit owner
62
+ disposition and the one hard gate below is clear; `passed` is evidence summary, not a
63
+ second mechanical release gate.
56
64
 
57
65
  ## The one delivery gate
58
66
 
@@ -62,27 +70,24 @@ attach itself to ordinary repository packaging outside this workflow.
62
70
  Everything else in this workflow reports and hands over. This is the exception, and it
63
71
  is deliberately narrow:
64
72
 
65
- **Do not package while an export this Change added or changed has no non-test consumer
66
- and no recorded owner disposition.**
73
+ **Do not produce a release package while an export this Change added or changed has no
74
+ non-test consumer and no recorded owner disposition.**
67
75
 
68
76
  | | |
69
77
  |---|---|
70
78
  | Invariant | Every changed export is either reachable from a non-test caller or explicitly declared internal |
71
- | Fact source | The Wiring Verification results in `.ultra/test-report.json`, bound to the current HEAD — the audit already found these; this is not a fresh opinion |
72
- | Blocked effect | Packaging and the release effects after it. Local commit and archival are untouched |
73
- | Repair | Wire the export to its caller, or record the owner's disposition in `delivery.md` naming it internal-only and why. Either one clears the gate |
79
+ | Fact source | The Wiring Verification finding and its owner disposition in `.ultra/test-report.json`, bound to the current Change id, task ids, intent, HEAD, and product-worktree digest — the audit already found these; this is not a fresh opinion |
80
+ | Blocked effect | Release-package creation and the separately authorized release effects after it. A non-publishing package inspection is diagnostic; local commit and archival are untouched |
81
+ | Repair | Wire the export to its caller, or record the owner's disposition on the finding in `.ultra/test-report.json`, then carry it into `delivery.md`. Either one clears the gate |
74
82
 
75
- "Written but never connected" is the single defect that passes every other check: tests
76
- green, review clean, evidence complete, feature absent. An advisory here would be
77
- ignored exactly when it matters, because everything else already reads as done. The gate
78
- sits at the last step rather than at edit time on purpose — a gate early in the loop
79
- gets escaped by damaging the work.
83
+ "Written but never connected" can leave tests and review green while the feature is
84
+ absent. Keep this gate at finalization, after the audit can distinguish unfinished work.
80
85
 
81
86
  ## Archive locally
82
87
 
83
- Move `.ultra/changes/active/<id>` to `.ultra/changes/archive/<id>` with `git mv` only
84
- after local reconciliation. Do not create a second standalone delivery report: archived
85
- `delivery.md`, test report, evidence and Git history are the handoff.
88
+ After the fresh check, `git mv` active `<id>` to archive. The id stays stable in task
89
+ rows; never store a movable intent path or create a second delivery summary. Archived
90
+ delivery, test report, evidence, and Git history are the handoff.
86
91
 
87
92
  For separately authorized effects, perform and verify each independently. Ask for
88
93
  authority at the point of effect: commit, then push, then tag, package publication and
@@ -34,6 +34,8 @@ the Change is active and moves with the directory when archived.
34
34
 
35
35
  Every semantic update cites a repository-relative `path#anchor`. A reduction requires
36
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.
37
+ must match the stable Change id, exact current task ids, intent digest, HEAD, and
38
+ product-worktree digest identified by `.ultra/test-report.json`; stale results stay
39
+ visible and never become a pass. Reconcile before finalizing. If reconciliation changes
40
+ semantic or product files, obtain a fresh Test snapshot before writing final delivery
41
+ metadata or archiving. Do not create a second JSON or Markdown delivery summary.
@@ -5,13 +5,13 @@ description: Carry one planned task from a written implementation plan through r
5
5
 
6
6
  # Take one task from plan to recorded evidence
7
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.
8
+ The model owns code reasoning and edits; repository files own the resumable contract.
10
9
 
11
10
  ## Before you start
12
11
 
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.
12
+ 1. Resolve exactly one active `change_id`; more than one is a repository conflict. Read
13
+ `.ultra/tasks.json`, choose one matching `in_progress` or dependency-ready task, then read
14
+ its full `context_file`, especially `## Resume Note`.
15
15
  2. Read `CONTEXT.md` for vocabulary, and the `.ultra/decisions/` entries the task
16
16
  context names.
17
17
  3. Read `.ultra/north-star.md` and the task's acceptance criteria. If you cannot
@@ -22,10 +22,9 @@ read `references/debugging.md` and establish the earliest incorrect state before
22
22
 
23
23
  ## Definition of done
24
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.
25
+ - All six evidence dimensions answer the checkable rules below.
26
+ - `tasks.json` and context status agree after write/read-back.
27
+ - The task still names the active `change_id`; historical unfinished work stays out.
29
28
  - The context file carries a Completion entry and a rewritten Resume Note.
30
29
  - A task-level review has run and its blocking findings are resolved.
31
30
 
@@ -46,6 +45,7 @@ because what is worth restructuring only becomes visible after several slices.
46
45
 
47
46
  Development ends when the task's acceptance commands pass, not when the code looks
48
47
  finished. Resolve the context's **Change Acceptance IDs** against the active `intent.md`
48
+ for `<change_id>`
49
49
  and use each named row's executable `Verification`. Commands under the context's
50
50
  Acceptance Criteria may add task-local checks; they do not replace the Change mapping.
51
51
 
@@ -1,6 +1,6 @@
1
1
  ---
2
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.
3
+ description: Turn caller-named missing owner decisions into confirmed answers, one question per turn and each carrying a recommendation. Use when Init needs a raw brief field, Research needs an owner decision, or Change and Plan need an explicit boundary or acceptance criterion.
4
4
  ---
5
5
 
6
6
  # Turn a vague ask into a decision list the owner has explicitly confirmed
@@ -12,8 +12,8 @@ finished work proves otherwise. It serves Goal 1, Intent Fidelity.
12
12
  ## Before you start
13
13
 
14
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.
15
+ 2. Read `.ultra/project-brief.md`, `.ultra/north-star.md`, and `CONTEXT.md` where they
16
+ exist. Raw intake is reusable input; accepted wording must not be re-asked.
17
17
  3. Look up every fact you can reach on your own: repository files, Git history,
18
18
  installed dependencies, tool output.
19
19
 
@@ -29,8 +29,8 @@ have answered by reading the repository spends the one input only they can give.
29
29
  never skipped because the original wording sounded clear.
30
30
  - Each answer carries the owner's confirmation, rather than something that
31
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.
32
+ - The caller owns the final artifact and receives a decision list it can write: one
33
+ line per decision, each with the options rejected and why.
34
34
 
35
35
  ## Extract, reframe, then ask
36
36
 
@@ -52,7 +52,7 @@ product. Offer the reframe, never assert it, and treat a correction as the bette
52
52
  outcome — "no, it really is just the briefing" is a constraint you did not have a
53
53
  minute ago. Read `references/reframing.md` for when it applies and how it fails.
54
54
 
55
- **Then ask** only what the confirmed reframe leaves open.
55
+ **Then ask** only what the confirmed reframe leaves open; the caller sets the semantic depth, so Init stops at the raw outline and leaves baseline questions to Research.
56
56
 
57
57
  ## One question per turn
58
58
 
@@ -95,9 +95,9 @@ inferred consensus.
95
95
 
96
96
  ## How the loop ends
97
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.
98
+ Every ending hands back the same result: decisions written one per line, each with
99
+ the options rejected and the reason they lost. The caller alone chooses the canonical
100
+ destination; Grilling never promotes an answer into project authority by itself.
101
101
 
102
102
  - **Resolved** — every required field answered or explicitly deferred.
103
103
  - **Stalled** — two consecutive turns add no newly confirmed decision. Hand back
@@ -1,119 +1,94 @@
1
1
  ---
2
2
  name: ultra-init
3
- description: Establish a project's Ultra authority as files — the owner's one-line goal, hard constraints, the three specification skeletons, an empty task ledger, and Git. Use when a repository has no `.ultra` directory yet, or has a partial one left by an interrupted setup, whether the codebase is new or already carries years of history.
3
+ description: Create or recover Ultra's repository-local skeleton and raw Project Brief without performing product research. Use when `.ultra` is absent or partial in a new or existing codebase and later workflows need stable file paths, preserved authority, and Git.
4
4
  ---
5
5
 
6
- # Build the skeleton the rest of the workflow writes into
6
+ # Create the skeleton and capture only the initial project outline
7
7
 
8
- Initialization creates the repository-local authority and nothing else.
9
- It does not perform research, accept a product baseline, choose a Change, or
10
- start another capability — recommend the next one and stop; do not invoke it.
11
-
12
- The dividing line against research is **authorization versus claim**. What the
13
- owner authorizes comes out of their head and evidence cannot overturn it. What
14
- research collects is a claim about the outside world, which evidence can confirm
15
- or refute. A technology choice is a claim, so it is not initialization's business
16
- — and a new project has no configuration files to read anyway.
8
+ Initialization establishes places for later authority and records raw owner intake. It
9
+ does not validate the problem, establish a North Star, build a product or architecture
10
+ baseline, settle domain language, choose a Change, or start another public workflow.
17
11
 
18
12
  ## Before you start
19
13
 
20
- 1. Read `.ultra/tasks.json` if it exists, along with the `context_file` of any
21
- task it names — a partial `.ultra/` means an earlier attempt stopped midway.
22
- 2. Read `CONTEXT.md` at the repository root for vocabulary already settled, and
23
- `.ultra/decisions/` for any entries preserved by a partial setup.
24
- 3. Establish the route's facts from the filesystem, not by asking.
14
+ 1. If `.ultra/changes/active/` exists, resolve at most one active `change_id`. Read
15
+ `.ultra/tasks.json` if it exists, plus the `context_file` and closing `## Resume Note`
16
+ of unfinished tasks matching that id. Historical unfinished rows do not turn a
17
+ partial skeleton into current work. A partial `.ultra/` is recovery work.
18
+ 2. Read `.ultra/project-brief.md`, `.ultra/north-star.md`, `CONTEXT.md`, and relevant
19
+ `.ultra/decisions/` when they exist. Preserve accepted authority byte-for-byte.
20
+ 3. Establish the repository root, Git state, and whether meaningful code or maintained
21
+ documentation exists from the filesystem. Do not ask the owner for those facts.
25
22
 
26
23
  ## Definition of done
27
24
 
28
- - `.ultra/north-star.md` carries the owner's one-line goal in their own words.
29
- - Every `## Hard Constraints` entry has a stable `HC-<n>` id and can veto a
30
- concrete technical decision. "Should be usable" vetoes nothing and is not yet a
31
- constraint; "first paint under two seconds" is. Same bar for the success
32
- metric: a threshold, not an aspiration. See
33
- `../ultra-grilling/references/reframing.md` for what counts as an answer.
34
- - Every file listed under **What gets written** exists; you read each one back
35
- after writing and stopped at the first one missing.
36
- - `.git` exists. Any initial commit is a separately authorized delivery effect.
37
- - Nothing is invented: what is unknown says `[NEEDS CLARIFICATION]`.
38
-
39
- ## Which route
25
+ - `.ultra/project-brief.md` contains raw owner intake: one line, a broad outline,
26
+ explicit inputs already supplied, and open questions handed to Research.
27
+ - For a new skeleton, an empty North Star and the three specification skeletons exist.
28
+ Recovery preserves any populated authority; Init does not fill semantic sections or
29
+ create `CONTEXT.md`.
30
+ - Every packaged path was read back after copying, while every pre-existing file stayed
31
+ byte-identical.
32
+ - `.git` exists. Commit, push, remote creation, and publication remain separate effects.
40
33
 
41
- Check the filesystem in this order and take the first match:
34
+ ## Classify only for preservation
42
35
 
43
- | Check | Route | What changes |
44
- |---|---|---|
45
- | `docs/` holds two or more non-README `.md` files, or `docs/adr/` or `doc/` exists | Documented brownfield | Write everything; cite maintained documents as evidence and preserve their repository paths in `trace_to` when they remain authoritative |
46
- | A language configuration file exists and the row above did not match | Brownfield | Write everything; record what a code scan shows in `architecture.md` and `discovery.md`, marked as observed and unverified |
47
- | Neither | Greenfield | Write everything |
36
+ Use `references/brownfield-adoption.md` when source, runtime configuration, tests, or
37
+ maintained product documentation already exist. Classification changes what must be
38
+ preserved and what Research should inspect; it never authorizes Init to write observed
39
+ product behavior into a specification.
48
40
 
49
- For either brownfield route, read `references/brownfield-adoption.md`. Existing docs
50
- are evidence or an explicitly retained authority; they never justify omitting the
51
- canonical specification skeleton that downstream workflows require.
41
+ ## Draw out the brief, then stop
52
42
 
53
- ## Draw out the intent
43
+ Follow `../ultra-grilling/SKILL.md` with only these required fields:
54
44
 
55
- Follow `../ultra-grilling/SKILL.md`. It is a loop, not a questionnaire, because
56
- the owner cannot state what they want up front. Start from what they already said
57
- when invoking you, restate it for confirmation, and ask only about what is
58
- genuinely missing. Five things come out of it:
59
-
60
- | What you draw out | Where it lands |
45
+ | Raw intake | Project Brief section |
61
46
  |---|---|
62
- | What you want to build, in one sentence, their words | `north-star.md`, `## One-line` |
63
- | What counts as success | `specs/product.md`, behavioral requirements and acceptance |
64
- | What must never happen | `north-star.md`, `## Hard Constraints`, one `HC-<n>` per line |
65
- | Who uses it, and how they cope today | `discovery.md`, marked as the owner's statement |
66
- | **What you already know you are unsure about** | `discovery.md` — research's priority queue |
47
+ | What the owner wants to build, in one sentence and their words | `## One-line` |
48
+ | What it is, broadly for whom or what, intended result, broad boundary | `## Initial Outline` |
49
+ | Constraints, materials, and decisions the owner already volunteered | `## Explicit Inputs` |
50
+ | Questions already visible but requiring evidence or deeper decisions | `## Open Questions for Research` |
67
51
 
68
- When the first domain terms appear, follow `../ultra-domain-modeling/SKILL.md`
69
- and create `CONTEXT.md` at the repository root.
52
+ Ask only enough to distinguish materially different outlines. If an answer would define
53
+ a problem, actor evidence, desired outcome, success measure, product strategy, accepted
54
+ constraint, domain term, requirement, or architecture, record it as an input or open
55
+ question and stop drilling. Research owns that maturation and must not re-ask an answer
56
+ unless evidence conflicts with it.
70
57
 
71
- ## What gets written
58
+ ## Write and recover the skeleton
72
59
 
73
60
  Resolve this loaded Skill's directory, then run
74
- `node <ultra-init-skill-dir>/scripts/init_project.cjs --project <repository-root>`. The script copies
75
- only missing files from `assets/project-template`, preserves every existing authority
76
- file byte-for-byte, and reads the resulting skeleton back. Then fill its semantic
77
- placeholders from verified facts and owner decisions.
61
+ `node <ultra-init-skill-dir>/scripts/init_project.cjs --project <repository-root>`.
62
+ The script copies only missing files from `assets/project-template`, preserves every
63
+ existing file, and reads the complete result back.
78
64
 
79
65
  ```text
80
- .ultra/north-star.md ## One-line, ## Hard Constraints
81
- .ultra/specs/{product,architecture,discovery}.md ## Observed, ## Decisions, ## Unknowns
82
- .ultra/tasks.json {"tasks": []}
83
- .ultra/test-report.json not-yet-run report with git_commit
84
- .ultra/{contexts,decisions,evidence,research}/ and changes/{active,archive,abandoned}/
85
- CONTEXT.md repository root, once a term is settled
66
+ .ultra/project-brief.md raw intake and initial outline
67
+ .ultra/north-star.md empty Research-owned steering contract
68
+ .ultra/specs/{product,architecture,discovery}.md empty specification skeletons
69
+ .ultra/specs/research-distillate.md empty Research synthesis skeleton
70
+ .ultra/{tasks.json,test-report.json} empty or not-yet-run ledgers
71
+ .ultra/{contexts,decisions,evidence,research}/
72
+ .ultra/changes/{active,archive,abandoned}/
86
73
  ```
87
74
 
88
- The copied `.ultra/.gitignore` excludes `.runtime/`, `progress/`, and `reviews/`
89
- without editing the owner's root ignore file. Those paths are exact — hooks and later
90
- skills read them by name. Every section left unfilled carries
91
- `[NEEDS CLARIFICATION]`, and which of those you resolve now has a checkable rule:
92
- **what can be read out of repository files, you fill; what needs investigation,
93
- research fills.**
75
+ For a legacy `north-star.md` containing `## One-line`, keep that file byte-identical.
76
+ When the new Project Brief is still unresolved, copy the legacy one-line verbatim into
77
+ it and list legacy hard constraints under Explicit Inputs without assigning new IDs.
78
+ Research later proposes the accepted North Star; it never rewrites history silently.
94
79
 
95
- Git is not a preference. Reconciliation reads `git log` and `git diff`, staleness
96
- detection compares against `HEAD`, archiving is a `git mv`, and rollback is Git.
97
- If `.git` is absent, run `git init`. Report the uncommitted initialized files and ask
98
- for commit authority only if the owner wants that separate effect now.
80
+ Git supplies revision identity, history, comparison, archive moves, and rollback. Run
81
+ `git init` only when `.git` is absent, then report the uncommitted scaffold.
99
82
 
100
83
  ## When the owner decides
101
84
 
102
- Only the five things above, and only through the grilling loop. Replacing
103
- authority that already exists and looks healthy is the owner's call, never a
104
- convenience on the way to a clean start — preserve it and report what you found.
105
-
106
- Where the host cannot ask at all, leave the one-line goal empty and say plainly
107
- that it is empty. Do not infer it from the directory name. An empty one-line goal
108
- is a **blocking** state, not a note: goal injection, boundary read-back and a
109
- Change's touched-constraints field all read from it, so planning and development
110
- must not start until it is filled. Say that too, and recommend rerunning this
111
- skill on a host that can ask.
85
+ The owner confirms the one-line outline and any replacement of healthy authority. Where
86
+ the host cannot ask, leave unresolved fields explicit and recommend resuming Init on a
87
+ host that can; do not infer intent from the directory name. Recommend Research after a
88
+ usable brief exists, but do not invoke it.
112
89
 
113
90
  ## References
114
91
 
115
- - `../ultra-grilling/SKILL.md` — the loop; read it before the first question.
116
- - `../ultra-domain-modeling/SKILL.md` — read when the first term needs writing.
117
- - `references/brownfield-adoption.md` — read for either existing-code route.
118
- - `../ultra-think/references/autonomy-boundary.md` — read before touching
119
- authority that already exists.
92
+ - `../ultra-grilling/SKILL.md` — read before the first missing brief field.
93
+ - `references/brownfield-adoption.md` — read when maintained behavior already exists.
94
+ - `../ultra-think/references/autonomy-boundary.md` — read before replacing authority.