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.
Files changed (48) hide show
  1. package/.ultra-template/changes/abandoned/.gitkeep +0 -0
  2. package/.ultra-template/contexts/TEMPLATE.md +7 -0
  3. package/.ultra-template/north-star.md +20 -31
  4. package/.ultra-template/project-brief.md +28 -0
  5. package/.ultra-template/specs/product.md +4 -0
  6. package/.ultra-template/specs/research-distillate.md +8 -0
  7. package/.ultra-template/test-report.json +1 -0
  8. package/CHANGELOG.md +131 -1
  9. package/README.md +61 -29
  10. package/bin/delegate-worker.cjs +5 -0
  11. package/bin/delegate.cjs +7 -0
  12. package/docs/ARCHITECTURE.md +36 -10
  13. package/docs/ARTIFACT-AUTHORITY.md +42 -13
  14. package/docs/DECISIONS.md +24 -5
  15. package/docs/PHILOSOPHY.md +45 -12
  16. package/docs/PLUGIN-ISOLATION-CONTRACT.md +6 -3
  17. package/docs/RUNTIME-COMPAT-MATRIX.md +43 -1
  18. package/docs/SKILL-AUTHORING.md +10 -6
  19. package/docs/WORKFLOW-LIFECYCLE.md +103 -39
  20. package/hooks/README.md +12 -5
  21. package/hooks/_common.py +54 -5
  22. package/hooks/block_dangerous_commands.py +116 -10
  23. package/hooks/session_context.py +34 -8
  24. package/package.json +1 -1
  25. package/skills/ultra-change/SKILL.md +59 -52
  26. package/skills/ultra-change/references/change-contract.md +65 -7
  27. package/skills/ultra-delegate/SKILL.md +21 -3
  28. package/skills/ultra-delegate/references/delegation-contract.md +10 -2
  29. package/skills/ultra-deliver/SKILL.md +63 -21
  30. package/skills/ultra-deliver/references/baseline-reconciliation.md +5 -3
  31. package/skills/ultra-dev/SKILL.md +33 -14
  32. package/skills/ultra-grilling/SKILL.md +63 -24
  33. package/skills/ultra-grilling/references/reframing.md +72 -0
  34. package/skills/ultra-init/SKILL.md +62 -79
  35. package/skills/ultra-init/references/brownfield-adoption.md +23 -40
  36. package/skills/ultra-plan/SKILL.md +48 -24
  37. package/skills/ultra-research/SKILL.md +91 -62
  38. package/skills/ultra-research/references/{03-competitive-landscape.md → 03-alternatives.md} +6 -6
  39. package/skills/ultra-research/references/22-success-metrics.md +8 -4
  40. package/skills/ultra-research/references/99-synthesis.md +8 -1
  41. package/skills/ultra-research/references/wayfinding.md +42 -0
  42. package/skills/ultra-review/SKILL.md +31 -3
  43. package/skills/ultra-status/SKILL.md +62 -32
  44. package/skills/ultra-tdd/SKILL.md +5 -2
  45. package/skills/ultra-test/SKILL.md +31 -12
  46. package/skills/ultra-test/scripts/worktree_digest.cjs +42 -8
  47. package/skills/ultra-think/SKILL.md +5 -10
  48. package/skills/ultra-think/references/interaction-boundary.md +2 -1
@@ -1,111 +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 file listed under **What gets written** exists; you read each one back
30
- after writing and stopped at the first one missing.
31
- - `.git` exists. Any initial commit is a separately authorized delivery effect.
32
- - Nothing is invented: what is unknown says `[NEEDS CLARIFICATION]`.
33
-
34
- ## 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.
35
33
 
36
- Check the filesystem in this order and take the first match:
34
+ ## Classify only for preservation
37
35
 
38
- | Check | Route | What changes |
39
- |---|---|---|
40
- | `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 |
41
- | 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 |
42
- | 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.
43
40
 
44
- For either brownfield route, read `references/brownfield-adoption.md`. Existing docs
45
- are evidence or an explicitly retained authority; they never justify omitting the
46
- canonical specification skeleton that downstream workflows require.
41
+ ## Draw out the brief, then stop
47
42
 
48
- ## Draw out the intent
43
+ Follow `../ultra-grilling/SKILL.md` with only these required fields:
49
44
 
50
- Follow `../ultra-grilling/SKILL.md`. It is a loop, not a questionnaire, because
51
- the owner cannot state what they want up front. Start from what they already said
52
- when invoking you, restate it for confirmation, and ask only about what is
53
- genuinely missing. Five things come out of it:
54
-
55
- | What you draw out | Where it lands |
45
+ | Raw intake | Project Brief section |
56
46
  |---|---|
57
- | What you want to build, in one sentence, their words | `north-star.md`, `## One-line` |
58
- | What counts as success | `specs/product.md`, behavioral requirements and acceptance |
59
- | What must never happen | `north-star.md`, `## Hard Constraints` |
60
- | Who uses it, and how they cope today | `discovery.md`, marked as the owner's statement |
61
- | **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` |
62
51
 
63
- When the first domain terms appear, follow `../ultra-domain-modeling/SKILL.md`
64
- 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.
65
57
 
66
- ## What gets written
58
+ ## Write and recover the skeleton
67
59
 
68
60
  Resolve this loaded Skill's directory, then run
69
- `node <ultra-init-skill-dir>/scripts/init_project.cjs --project <repository-root>`. The script copies
70
- only missing files from `assets/project-template`, preserves every existing authority
71
- file byte-for-byte, and reads the resulting skeleton back. Then fill its semantic
72
- 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.
73
64
 
74
65
  ```text
75
- .ultra/north-star.md ## One-line, ## Hard Constraints
76
- .ultra/specs/{product,architecture,discovery}.md ## Observed, ## Decisions, ## Unknowns
77
- .ultra/tasks.json {"tasks": []}
78
- .ultra/test-report.json not-yet-run report with git_commit
79
- .ultra/contexts/ .ultra/decisions/ .ultra/evidence/
80
- 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}/
81
73
  ```
82
74
 
83
- The copied `.ultra/.gitignore` excludes `.runtime/`, `progress/`, and `reviews/`
84
- without editing the owner's root ignore file. Those paths are exact — hooks and later
85
- skills read them by name. Every section left unfilled carries
86
- `[NEEDS CLARIFICATION]`, and which of those you resolve now has a checkable rule:
87
- **what can be read out of repository files, you fill; what needs investigation,
88
- 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.
89
79
 
90
- Git is not a preference. Reconciliation reads `git log` and `git diff`, staleness
91
- detection compares against `HEAD`, archiving is a `git mv`, and rollback is Git.
92
- If `.git` is absent, run `git init`. Report the uncommitted initialized files and ask
93
- 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.
94
82
 
95
83
  ## When the owner decides
96
84
 
97
- Only the five things above, and only through the grilling loop. Replacing
98
- authority that already exists and looks healthy is the owner's call, never a
99
- convenience on the way to a clean start — preserve it and report what you found.
100
-
101
- Where the host cannot ask at all, leave the one-line goal empty and say plainly
102
- that it is empty, that goal injection will therefore be empty, and that the next
103
- skill asks again. Do not infer it from the directory name.
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.
104
89
 
105
90
  ## References
106
91
 
107
- - `../ultra-grilling/SKILL.md` — the loop; read it before the first question.
108
- - `../ultra-domain-modeling/SKILL.md` — read when the first term needs writing.
109
- - `references/brownfield-adoption.md` — read for either existing-code route.
110
- - `../ultra-think/references/autonomy-boundary.md` — read before touching
111
- 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.
@@ -1,49 +1,32 @@
1
- # Brownfield adoption
1
+ # Brownfield initialization
2
2
 
3
- Use this procedure only when `ultra-init` detects an existing codebase without a
4
- healthy `.ultra/` authority surface. Initialization records the observable baseline;
5
- it does not redesign the application or accept claims the repository cannot support.
3
+ Use this procedure only when `ultra-init` finds maintained behavior but no healthy,
4
+ complete Ultra skeleton. Init preserves the checkout and prepares an evidence route; it
5
+ does not establish the brownfield baseline.
6
6
 
7
7
  ## Bind the repository boundary
8
8
 
9
- Record the repository root, selected workspace roots, branch, `HEAD`, dirty files,
10
- generated and vendored exclusions, manifests, verification commands, and public
11
- seams. Keep out-of-scope dirty files visible as context without treating them as part
12
- of the selected baseline.
9
+ Identify the repository root, selected workspace roots, branch, `HEAD`, dirty files,
10
+ generated or vendored exclusions, manifests, maintained documents, verification
11
+ commands, and visible public entry points. Resolve these from files and Git instead of
12
+ asking the owner.
13
13
 
14
- ## Inspect the maintained system
14
+ ## Preserve before interpreting
15
15
 
16
- Trace product behavior through real entry points, runtime consumers, persistence,
17
- integrations, permissions, failure paths, tests, deployment, observability, and
18
- recovery. Classify every material statement as `Observed`, `Verified`, `Decided`, or
19
- `Unknown`. Record maintained-document conflicts as drift.
16
+ - Never replace existing `.ultra` files, `CONTEXT.md`, decisions, or maintained project
17
+ documents merely to obtain the current template shape.
18
+ - Treat source, tests, runtime configuration, and documentation as evidence candidates,
19
+ not conclusions Init may promote.
20
+ - Keep out-of-scope dirty files visible in the report without adding them to the
21
+ Project Brief or specification skeletons.
22
+ - Record an exact legacy one-line as raw intake only when the Project Brief is empty.
20
23
 
21
- ## Write the baseline once
24
+ ## Prepare the Research handoff
22
25
 
23
- - Update `.ultra/specs/product.md` with delivered behavior and acceptance.
24
- - Update `.ultra/specs/architecture.md` with boundaries, authority, consumers,
25
- permissions, failures, and recovery.
26
- - Update `.ultra/specs/discovery.md` with scope evidence, known defects, drift, and
27
- unresolved questions.
28
- - Initialize `.ultra/tasks.json` and `.ultra/test-report.json` from the packaged
29
- templates without manufacturing passing results.
26
+ List the concrete paths and live seams that can answer each open baseline question.
27
+ `ultra-research` establishes the observed and accepted baseline from those sources. Init
28
+ does not run verification, classify delivered behavior, reconcile documentation drift,
29
+ or write product, discovery, or architecture conclusions.
30
30
 
31
- Use the specifications as the canonical representation. Do not create a second
32
- baseline ledger, database projection, or generated semantic mirror.
33
-
34
- ## Characterize verification
35
-
36
- Run the repository's existing verification commands. Record each result as `pass`,
37
- `known_red`, or `not_run`; a missing command is not a pass. A critical public seam
38
- without a stable signal is an explicit gap, not an excuse to invent completion.
39
-
40
- ## Converge
41
-
42
- Read every written file back, show the owner the selected scope, observed behavior,
43
- drift, known-red verification, unknowns, and material decisions, and leave unresolved
44
- items marked `[NEEDS CLARIFICATION]`. Adoption is ready when the file set is complete,
45
- the recorded revision matches the inspected checkout, and every material gap remains
46
- visible with its evidence and owner decision where one exists.
47
-
48
- Recommend `ultra-change` for subsequent work and stop; public skills do not invoke one
49
- another.
31
+ Report the preserved files, repository boundary, candidate evidence, and unresolved
32
+ questions. Recommend Research and stop; public workflows never invoke one another.
@@ -5,24 +5,32 @@ description: Turn an evidenced Change intent into a dependency-valid task ledger
5
5
 
6
6
  # Turn one Change into executable tracer bullets
7
7
 
8
- Planning owns decomposition and technical design. Files carry the result across
9
- sessions and hosts; no runtime state decides whether the plan is meaningful.
8
+ Planning owns decomposition and technical design; files carry it across sessions and hosts.
10
9
 
11
10
  ## Before you start
12
11
 
13
- 1. Read `.ultra/tasks.json`; if a task is unfinished, read its `context_file` and
14
- closing `## Resume Note` before replacing or extending anything.
15
- 2. Read `CONTEXT.md` for vocabulary and the relevant `.ultra/decisions/` entries.
16
- 3. Read the active Change intent, its `trace_to` specification anchors, and the
12
+ 1. Resolve exactly one `.ultra/changes/active/<change_id>/intent.md`. If none or more
13
+ than one exists, stop with that file conflict. The intent must be `accepted`, every
14
+ blocking decision resolved, and its `## Research Disposition` exit evidence
15
+ satisfied before decomposition.
16
+ 2. Read `.ultra/tasks.json`; select matching tasks and read each unfinished context and
17
+ Resume Note. Preserve all historical tasks in the append-only ledger.
18
+ 3. Read `CONTEXT.md` for vocabulary and the relevant `.ultra/decisions/` entries.
19
+ 4. Read the active Change intent, its `trace_to` specification anchors, and the
17
20
  source, tests, consumers and recovery paths those anchors describe.
18
21
 
19
22
  ## Definition of done
20
23
 
21
- - `.ultra/tasks.json` and one `.ultra/contexts/task-<id>.md` per task agree on
22
- identifiers, status, dependencies and trace anchors.
23
- - The owner confirmed the scope posture and the seam list.
24
+ - `.ultra/tasks.json` and one `.ultra/contexts/task-<id>.md` per current-Change task
25
+ agree on identifiers, stable `change_id`, status, dependencies and trace anchors.
26
+ - The owner confirmed any material posture. Seams resolve to code; technical selection
27
+ stays model-owned unless it changes public contract, accepted risk, or material trade-off.
24
28
  - Every feature task is a tracer bullet touching at least two layers, unless the
25
29
  Change itself demonstrably touches only one layer.
30
+ - Every context names the north-star hard constraints its work could violate, and
31
+ each `HC-<n>` it names resolves to a real entry in `.ultra/north-star.md`.
32
+ - Every Change acceptance id maps to at least one task context, and every context id
33
+ resolves back to the active Change.
26
34
  - Coverage, dependency, trace, scope and context-budget checks have concrete results.
27
35
 
28
36
  ## Fix the planning posture
@@ -34,8 +42,8 @@ separate `plan.md` authority.
34
42
  Use `../ultra-grilling/SKILL.md` through the host-native question surface when the
35
43
  choice remains material, one question with a recommendation at a time.
36
44
 
37
- If the work cannot fit in one session *and* the path itself is still unclear, use
38
- `../ultra-think/SKILL.md` to resolve decision tickets before decomposing tasks.
45
+ When the whole path is still unclear, recommend `ultra-research`; the Change is not yet
46
+ evidenced enough to decompose. For one consequential trade-off, use `../ultra-think/SKILL.md`.
39
47
 
40
48
  ## Choose the plan shape
41
49
 
@@ -54,39 +62,55 @@ Build the graph with these structural defences:
54
62
  - A feature task that touches only one of several affected layers is merged or split
55
63
  into a tracer bullet; moving a whole layer into one task is horizontal slicing.
56
64
 
57
- Confirm the seam list before tests are written. Reuse an existing public seam and use
58
- the highest seam that observes the behavior; one seam is ideal when it covers the path.
65
+ Record seams before tests. The model chooses the technical seam: prefer an existing,
66
+ highest observable public seam, ideally one. Ask the owner only when it changes the
67
+ public contract or another material product, risk, or recovery trade-off.
59
68
 
60
69
  ## Write the files
61
70
 
62
71
  Each task records `id`, `title`, `type`, `priority`, `complexity`, `status`,
63
- `dependencies`, `context_file`, `trace_to` and `change_ref`. Complexity is only a
72
+ `dependencies`, `context_file`, `trace_to` and `change_id`. Task ids are globally
73
+ unique, and every dependency must name a task with the same `change_id`; an archived
74
+ Change must never become an implicit prerequisite of current work. Complexity is only a
64
75
  splitting and context signal: 1–2 is local, 3–5 is bounded, 6–7 crosses a boundary,
65
76
  and complexity > 7 must split.
66
77
 
67
- Each context records Acceptance, confirmed seams, layers touched, target files,
68
- Implementation, verification commands, Definition of Drift, Change Log, Completion
69
- and Resume Note. Read every file back; task count and context count must match.
78
+ Append new tasks or repair matching current-Change tasks in place; never replace the
79
+ ledger with only the latest graph. A `quick` Change produces exactly one minimal task
80
+ and context rather than bypassing the task/evidence lifecycle.
81
+
82
+ Each context records Change Acceptance IDs, task-local Acceptance, confirmed seams,
83
+ layers touched, target files, Implementation, verification commands, the hard
84
+ constraints the work could violate, Definition of Drift, Change Log, Completion and
85
+ Resume Note. Read every file back; task count and context count must match.
86
+
87
+ Name a hard constraint whenever the task could plausibly breach it, not only when you
88
+ expect it to. The entry costs one line and is what makes a later breach a checkable
89
+ question instead of a judgement call; `none` is a legitimate answer for a task that
90
+ touches nothing constrained.
70
91
 
71
92
  ## Verify the plan
72
93
 
73
- 1. Map every in-scope user story or acceptance anchor to at least one task.
94
+ 1. Map every Change acceptance ID to at least one task context and reject dangling
95
+ context IDs. Map every in-scope user story or specification anchor to at least one task.
74
96
  2. Walk dependencies and repair every cycle with the exact cycle chain visible.
75
97
  3. Resolve every `trace_to` path and heading against a real file.
76
- 4. Surface complexity, more than eight target files, or more than twenty tasks as
98
+ 4. Resolve every `HC-<n>` against `.ultra/north-star.md`. A dangling constraint id is
99
+ the same defect as a dangling `trace_to`: it reads as checked and never was.
100
+ 5. Surface complexity, more than eight target files, or more than twenty tasks as
77
101
  scope warnings; they are observations, not semantic verdicts.
78
- 5. Estimate context at roughly `complexity × 5%`; surface anything above 40%.
102
+ 6. Estimate context at roughly `complexity × 5%`; surface anything above 40%.
79
103
 
80
104
  Report the graph, frontier, seams, warnings and first task. Recommend the next explicit
81
105
  capability from the files; do not invoke it.
82
106
 
83
107
  ## When the owner decides
84
108
 
85
- The owner chooses the posture, confirms seams, resolves reductions and accepts material
86
- omissions. Mechanical cycles and broken paths are repaired before handoff because they
87
- make the written graph impossible to execute.
109
+ The owner chooses material posture, reductions, omissions, and any seam changing public
110
+ contract or material trade-off. The model owns technical decomposition and seams.
111
+ Repair mechanical cycles and broken paths before handoff.
88
112
 
89
113
  ## References
90
114
 
91
115
  - `../ultra-grilling/SKILL.md` — read before a material posture or seam question.
92
- - `../ultra-think/SKILL.md` — read when fog of war requires decision tickets.
116
+ - `../ultra-think/SKILL.md` — read when one evidenced decision blocks decomposition.
@@ -1,82 +1,111 @@
1
1
  ---
2
2
  name: ultra-research
3
- description: Turn owner claims and specification gaps into cited product and architecture evidence, then refresh the canonical specifications and research distillate. Use when initialization, brownfield adoption, or an active Change contains claims that must be verified before planning.
3
+ description: Turn a raw Project Brief or scoped evidence gap into an accepted North Star, domain language, cited product and architecture specifications, and a hash-bound synthesis. Use after initialization, for brownfield baselining, or inside an active Change whose consequential claims are not yet evidenced.
4
4
  ---
5
5
 
6
- # Verify claims and fill the specification gaps they control
6
+ # Mature a project outline into an evidence-backed baseline
7
7
 
8
- Research owns evidence and synthesis. The owner chooses material scope and accepts the
9
- three conclusions that change what later research does. Files are written immediately,
10
- so interruption loses no completed investigation.
8
+ Research owns the first accepted baseline and later evidence-backed corrections. Web
9
+ search is one evidence source, not the workflow: repository files, Git, tests, runtime,
10
+ maintained documentation, owner decisions, and current primary sources all count.
11
11
 
12
12
  ## Before you start
13
13
 
14
- 1. Read `.ultra/tasks.json`; if it names unfinished work, read its `context_file` and
15
- closing `## Resume Note` before choosing research scope.
16
- 2. Read `CONTEXT.md` for vocabulary and relevant `.ultra/decisions/` entries.
17
- 3. Read `.ultra/north-star.md`, the active Change intent if any, and specification
18
- sections carrying `[NEEDS CLARIFICATION]`.
14
+ 1. Resolve at most one active `change_id`, then read `.ultra/tasks.json` plus the
15
+ `context_file` and `## Resume Note` of unfinished tasks whose `change_id` matches it,
16
+ if any. Archived or abandoned unfinished rows are history, not the current frontier.
17
+ 2. Read `.ultra/project-brief.md`. For a legacy project without it, treat the exact
18
+ `.ultra/north-star.md` `## One-line` as raw intake until a brief is preserved.
19
+ 3. Read existing `.ultra/north-star.md`, specifications, `CONTEXT.md`, relevant
20
+ `.ultra/decisions/`, active Change intent, evidence, Git state, and maintained docs.
19
21
 
20
22
  ## Definition of done
21
23
 
22
- - Every selected area has a cited report under `.ultra/research/<run-id>/` and its
23
- mapped specification section reflects the current conclusion.
24
- - `99-synthesis.md` states what entered a specification or decision, and what remains
25
- unknown or deferred.
26
- - `.ultra/specs/research-distillate.md` records the Git blob hash of each specification
27
- it summarizes; a hash mismatch makes the distillate stale, never authoritative.
28
- - Material omissions and `[UNVERIFIED: no web access]` findings stay visible.
29
-
30
- ## Select the coverage once
31
-
32
- Scan unresolved specification headings, map them to the seventeen focused references,
33
- and recommend the smallest sufficient profile: Full, Product Only, Feature Only,
34
- Architecture Change, or Custom. Confirm the list once with the owner. Load one reference
35
- at a time; holding several step prompts together defeats progressive disclosure.
36
-
37
- The three checkpoints are `04-product-strategy`, `21-features-scope`, and
38
- `99-synthesis`: each conclusion changes what comes next. Present its evidence and
39
- recommendation, wait for the owner's decision, then continue. Other areas write their
40
- report and mapped section immediately without another ceremony.
41
-
42
- ## Investigate and write
43
-
44
- For each selected area:
45
-
46
- 1. Search current primary sources and inspect relevant source, tests, runtime and docs.
47
- 2. Separate Observed, Evidence, Inference and Unknowns; cite every external claim.
48
- 3. For solution strategy and building blocks, cite at least one real implementation in
49
- a comparable maintained project, not only an opinion article.
50
- 4. Write `.ultra/research/<run-id>/<area>.md`, then replace the mapped specification
51
- section rather than appending a second version. Git keeps the history.
52
- 5. Follow `../ultra-domain-modeling/SKILL.md` when evidence settles a domain term. Use
53
- `../ultra-think/SKILL.md` when a consequential trade-off meets the decision criteria.
54
-
55
- If web search is unavailable, write `[UNVERIFIED: no web access]` and continue. Lack of
56
- a tool lowers confidence; it does not create a dead end.
57
-
58
- ## Synthesize
59
-
60
- Load `references/99-synthesis.md` after the selected reports are on disk. Write which
61
- claims were confirmed, overturned, deferred, or converted into decisions. Update the
62
- specification balances, then write the distillate and its three source blob hashes.
63
- Read all changed files back and report the exact unresolved headings.
64
-
65
- Recommend the next explicit capability from the resulting files; do not invoke it.
24
+ - Every selected lens has a cited `.ultra/research/<run-id>/<area>.md` report and its
25
+ canonical specification section contains the current conclusion.
26
+ - The accepted North Star, shared vocabulary, product baseline, and architecture
27
+ baseline are sufficient for the current planning boundary; unknowns stay explicit.
28
+ - `99-synthesis.md` names what was promoted, overturned, deferred, or left blocking.
29
+ - `.ultra/specs/research-distillate.md` stores the Git blob hash of each specification
30
+ it summarizes. A mismatch makes the distillate stale, never authoritative.
31
+
32
+ ## Find the path before collecting evidence
33
+
34
+ When coverage spans several lenses or the path itself is unclear, read
35
+ `references/wayfinding.md` and write `.ultra/research/<run-id>/brief.md`. Skip that file
36
+ for one already-bounded evidence question. Wayfinding selects the smallest useful
37
+ coverage; it does not create workflow state or another semantic authority.
38
+
39
+ Map the brief and unresolved specification sections to seventeen focused evidence
40
+ lenses. Confirm the proposed coverage once with the owner. Load one reference
41
+ at a time; the parent holds the question map, not every step prompt.
42
+
43
+ The first six lenses have real semantic dependencies:
44
+
45
+ - `00-problem-validation` runs before `01-opportunity-discovery` because an opportunity must trace to a problem.
46
+ - `02-market-assessment` and `03-alternatives` are conditional lenses and may run in parallel once the boundary is known.
47
+ - `04-product-strategy` is the first owner checkpoint and consumes the relevant conclusions from `00` through `03`.
48
+ - `05-assumptions-validation` extracts load-bearing assumptions from `00` through `04` after the strategy decision.
49
+
50
+ The later groups turn that premise into product behavior (`10` through `22`), then an
51
+ architecture and operating baseline (`30` through `41`). The three owner checkpoints
52
+ remain `04-product-strategy`, `21-features-scope`, and `99-synthesis`.
53
+
54
+ Only areas with satisfied inputs may fan out through native bounded subagents. Never
55
+ parallelize a lens whose question depends on an unresolved earlier conclusion.
56
+
57
+ ## Investigate, ask, and decide
58
+
59
+ For each selected lens:
60
+
61
+ 1. Inspect reachable facts before asking. Search current primary sources when a claim
62
+ depends on current external reality.
63
+ 2. Separate Observed, Verified, Decided, Inference, and Unknown; cite external claims.
64
+ 3. Follow `../ultra-grilling/SKILL.md` when a required owner field is missing. The lens
65
+ supplies what to ask; Grilling supplies the one-question interaction loop.
66
+ 4. Follow `../ultra-think/SKILL.md` for one consequential trade-off, not for mapping the
67
+ whole research frontier.
68
+ 5. Follow `../ultra-domain-modeling/SKILL.md` when evidence settles a shared term. The
69
+ first such term creates `CONTEXT.md`; later calls sharpen it.
70
+ 6. Write the area report, then replace the mapped specification section instead of
71
+ appending a second version. Git retains history.
72
+
73
+ For scoped Research inside an active Change, answer only its recorded `Research
74
+ Disposition` question and produce the named exit evidence. Research writes reports and
75
+ the mapped canonical baseline sections; it does not silently rewrite Change acceptance.
76
+ Return the evidence paths so `ultra-change` can reconcile the accepted intent before
77
+ planning when that contract must change.
78
+
79
+ If web access is unavailable, record `[UNVERIFIED: no web access]` and continue with
80
+ other evidence. Missing tooling lowers confidence; it does not manufacture a blocker.
81
+
82
+ ## Synthesize the accepted baseline
83
+
84
+ `04-product-strategy` proposes the direction. `22-success-metrics` determines whether a
85
+ single North Star metric is justified or whether an observable outcome plus guardrails
86
+ is more honest. After the owner accepts `99-synthesis`, update `.ultra/north-star.md`,
87
+ the three specifications, domain language, qualifying decisions, and the distillate for
88
+ the first baseline. A scoped Research run updates only its mapped specification sections
89
+ and then refreshes the distillate's three source hashes.
90
+
91
+ Load `references/99-synthesis.md` only after selected reports exist. Read every promoted
92
+ file back, verify trace anchors and source hashes, and report exact unresolved gaps.
93
+ Recommend the next explicit public workflow from the resulting files; do not invoke it.
66
94
 
67
95
  ## When the owner decides
68
96
 
69
- The owner chooses coverage, resolves the three checkpoints, and accepts any material
70
- deferral. Evidence facts are yours to establish. A conclusion that removes an existing
71
- commitment follows the REDUCTION boundary and waits for explicit authority.
97
+ The owner chooses coverage, resolves the three checkpoints, accepts a North Star and
98
+ material deferrals, and authorizes any REDUCTION. The model establishes evidence facts,
99
+ selects methods, and updates accepted files inside that frame.
72
100
 
73
101
  ## References
74
102
 
103
+ - `references/wayfinding.md` — read only for multi-lens or unclear research paths.
75
104
  - `references/00-problem-validation.md` through `references/05-assumptions-validation.md`
76
- — product premise and strategy; load only a selected area.
77
- - `references/10-user-personas.md` through `references/22-success-metrics.md` — users,
78
- stories, scope and measurable outcomes; load only a selected area.
105
+ — product premise and strategy; load only a selected lens.
106
+ - `references/10-user-personas.md` through `references/22-success-metrics.md` — actors,
107
+ behavior, scope, and measurements.
79
108
  - `references/30-architecture-context.md` through `references/41-quality-risks.md` —
80
- system boundary, implementation evidence, deployment and risk.
109
+ system boundary, implementation evidence, operations, and risk.
81
110
  - `references/99-synthesis.md` — load last, after selected reports exist.
82
- - `../ultra-think/references/autonomy-boundary.md` — read before a specification shrinks.
111
+ - `../ultra-think/references/autonomy-boundary.md` — read before reducing authority.
@@ -1,25 +1,25 @@
1
- # Competitive landscape
1
+ # Alternatives
2
2
 
3
- Use for workflow step `03-competitive-landscape`.
3
+ Use for workflow step `03-alternatives`.
4
4
 
5
5
  ## Objective
6
6
 
7
7
  Identify the alternatives actors actually use and the consequences for strategy.
8
- Alternatives may include direct products, adjacent tools, manual workflows, or doing
9
- nothing.
8
+ Alternatives include direct products, adjacent tools, manual workflows, or doing
9
+ nothing; a competitor-only frame is too narrow.
10
10
 
11
11
  ## Evidence
12
12
 
13
13
  - Use current product documentation, pricing, repositories, filings, or observed user
14
14
  workflows.
15
15
  - Evaluate only criteria that change the decision at hand.
16
- - Do not create a ceremonial matrix, fixed competitor count, or unsupported claim of
16
+ - Do not create a ceremonial matrix, fixed alternative count, or unsupported claim of
17
17
  superiority.
18
18
  - Distinguish a verified capability from marketing language and inference.
19
19
 
20
20
  ## Record
21
21
 
22
- Update `discovery.md` with the relevant alternatives, evidence, meaningful differences,
22
+ Update `discovery.md` with relevant alternatives, evidence, meaningful differences,
23
23
  switching constraints, and durable strategy implications. Record an unknown when a
24
24
  credible alternative cannot be verified.
25
25