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
@@ -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,22 +5,26 @@ 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.
26
30
  - Every context names the north-star hard constraints its work could violate, and
@@ -38,8 +42,8 @@ separate `plan.md` authority.
38
42
  Use `../ultra-grilling/SKILL.md` through the host-native question surface when the
39
43
  choice remains material, one question with a recommendation at a time.
40
44
 
41
- If the work cannot fit in one session *and* the path itself is still unclear, use
42
- `../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`.
43
47
 
44
48
  ## Choose the plan shape
45
49
 
@@ -58,16 +62,23 @@ Build the graph with these structural defences:
58
62
  - A feature task that touches only one of several affected layers is merged or split
59
63
  into a tracer bullet; moving a whole layer into one task is horizontal slicing.
60
64
 
61
- Confirm the seam list before tests are written. Reuse an existing public seam and use
62
- 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.
63
68
 
64
69
  ## Write the files
65
70
 
66
71
  Each task records `id`, `title`, `type`, `priority`, `complexity`, `status`,
67
- `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
68
75
  splitting and context signal: 1–2 is local, 3–5 is bounded, 6–7 crosses a boundary,
69
76
  and complexity > 7 must split.
70
77
 
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
+
71
82
  Each context records Change Acceptance IDs, task-local Acceptance, confirmed seams,
72
83
  layers touched, target files, Implementation, verification commands, the hard
73
84
  constraints the work could violate, Definition of Drift, Change Log, Completion and
@@ -95,11 +106,11 @@ capability from the files; do not invoke it.
95
106
 
96
107
  ## When the owner decides
97
108
 
98
- The owner chooses the posture, confirms seams, resolves reductions and accepts material
99
- omissions. Mechanical cycles and broken paths are repaired before handoff because they
100
- 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.
101
112
 
102
113
  ## References
103
114
 
104
115
  - `../ultra-grilling/SKILL.md` — read before a material posture or seam question.
105
- - `../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,88 +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
- Areas sitting between two checkpoints are independent and may run in parallel through
43
- the host's native bounded subagents, each loading exactly one reference. That
44
- strengthens progressive disclosure rather than breaking it — the parent holds no step
45
- prompt at all. The checkpoints stay barriers: nothing after one starts until the owner
46
- has answered it, because its conclusion changes what the later areas are even asking.
47
-
48
- ## Investigate and write
49
-
50
- For each selected area:
51
-
52
- 1. Search current primary sources and inspect relevant source, tests, runtime and docs.
53
- 2. Separate Observed, Evidence, Inference and Unknowns; cite every external claim.
54
- 3. For solution strategy and building blocks, cite at least one real implementation in
55
- a comparable maintained project, not only an opinion article.
56
- 4. Write `.ultra/research/<run-id>/<area>.md`, then replace the mapped specification
57
- section rather than appending a second version. Git keeps the history.
58
- 5. Follow `../ultra-domain-modeling/SKILL.md` when evidence settles a domain term. Use
59
- `../ultra-think/SKILL.md` when a consequential trade-off meets the decision criteria.
60
-
61
- If web search is unavailable, write `[UNVERIFIED: no web access]` and continue. Lack of
62
- a tool lowers confidence; it does not create a dead end.
63
-
64
- ## Synthesize
65
-
66
- Load `references/99-synthesis.md` after the selected reports are on disk. Write which
67
- claims were confirmed, overturned, deferred, or converted into decisions. Update the
68
- specification balances, then write the distillate and its three source blob hashes.
69
- Read all changed files back and report the exact unresolved headings.
70
-
71
- 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.
72
94
 
73
95
  ## When the owner decides
74
96
 
75
- The owner chooses coverage, resolves the three checkpoints, and accepts any material
76
- deferral. Evidence facts are yours to establish. A conclusion that removes an existing
77
- 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.
78
100
 
79
101
  ## References
80
102
 
103
+ - `references/wayfinding.md` — read only for multi-lens or unclear research paths.
81
104
  - `references/00-problem-validation.md` through `references/05-assumptions-validation.md`
82
- — product premise and strategy; load only a selected area.
83
- - `references/10-user-personas.md` through `references/22-success-metrics.md` — users,
84
- 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.
85
108
  - `references/30-architecture-context.md` through `references/41-quality-risks.md` —
86
- system boundary, implementation evidence, deployment and risk.
109
+ system boundary, implementation evidence, operations, and risk.
87
110
  - `references/99-synthesis.md` — load last, after selected reports exist.
88
- - `../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
 
@@ -12,13 +12,17 @@ including signals that would reveal harmful optimization.
12
12
  - Derive measurements from accepted outcomes and available instrumentation.
13
13
  - State definition, source, observation window, owner, and decision use.
14
14
  - Separate current measurements, target decisions, and unavailable telemetry.
15
- - Do not invent baselines, targets, or a single north-star metric.
15
+ - Propose one North Star outcome or metric when justified by delivered value and a
16
+ credible observation contract.
17
+ - Do not force a single metric, or invent baselines and targets, when guardrails plus an
18
+ observable outcome represent the product more honestly.
16
19
 
17
20
  ## Record
18
21
 
19
- Update `product.md` with outcome measures, operational measures, guardrails, evidence
20
- availability, and unresolved instrumentation needs. A metric that cannot be observed
21
- must be recorded as a gap or explicit future change.
22
+ Update `product.md` with supporting outcome measures, operational measures, guardrails,
23
+ evidence availability, and unresolved instrumentation needs. Propose the canonical
24
+ `NS-01` entry for `north-star.md`; it becomes authority only through accepted synthesis.
25
+ A metric that cannot be observed is a gap or explicit future Change.
22
26
 
23
27
  Complete the step with evidence references and the updated output path.
24
28
 
@@ -20,9 +20,16 @@ creating a second condensed authority.
20
20
 
21
21
  ## Record
22
22
 
23
+ Update `.ultra/north-star.md` with the accepted project direction, North Star outcome or
24
+ explicit no-single-metric decision, hard constraints, exclusions, and Research trace.
25
+ Keep raw owner wording in `project-brief.md`; do not process it in place.
26
+
23
27
  Write `research-distillate.md` as a navigation and traceability artifact containing
24
28
  baseline ids, source document anchors, accepted decisions, blockers, gaps, verification
25
- evidence, and the exact planning entry. Do not duplicate the specifications' prose.
29
+ evidence, the exact planning entry, and the current Git blob hash from
30
+ `git hash-object` for `product.md`, `architecture.md`, and `discovery.md`. Do not
31
+ duplicate the specifications' prose. A later mismatch marks the distillate stale; it
32
+ does not make the old synthesis authoritative.
26
33
 
27
34
  Write the final `99-synthesis.md` report, link all three specification paths, the
28
35
  distillate path, and the evidence used for synthesis. Read those files back before
@@ -0,0 +1,42 @@
1
+ # Research wayfinding
2
+
3
+ Use this method when Research spans several lenses or the path itself is unclear. Skip
4
+ it for one bounded evidence question whose destination is already known.
5
+
6
+ ## Objective
7
+
8
+ Turn fog into a small question map without turning the map into workflow authority.
9
+ Select the smallest sufficient coverage that can establish the current baseline or
10
+ unlock the active Change.
11
+
12
+ ## Inspect first
13
+
14
+ Read the Project Brief, accepted authority, unresolved specification sections, current
15
+ repository evidence, active Change, and owner statements already present. Do not ask a
16
+ question whose answer is reachable in those sources.
17
+
18
+ ## Write the run brief
19
+
20
+ Write `.ultra/research/<run-id>/brief.md` with:
21
+
22
+ - entry question and planning boundary;
23
+ - known facts and their sources;
24
+ - unknowns, each with the decision it can change;
25
+ - selected lenses, semantic dependencies, and explicit omissions;
26
+ - likely evidence sources and current freshness limits;
27
+ - owner decisions and the checkpoint that owns each one;
28
+ - a stop condition stated as an observable artifact or resolved decision.
29
+
30
+ The brief is derived navigation, not semantic authority. Specifications, the North Star,
31
+ `CONTEXT.md`, and accepted decisions remain canonical. Rebuild or discard the map when
32
+ evidence changes; never add a completion flag merely to route another Skill.
33
+
34
+ ## Keep the frontier small
35
+
36
+ Prefer one load-bearing question over a speculative tree. Add a branch only when a
37
+ viable answer would change selected evidence, product direction, scope, or architecture.
38
+ Questions that cannot change the current boundary belong in explicit deferred work, not
39
+ the active map.
40
+
41
+ Wayfinding chooses where to investigate. Each evidence lens defines what to establish;
42
+ Grilling defines how to ask the owner; Think resolves one consequential decision.
@@ -10,7 +10,10 @@ happens here, after several slices make a useful structure visible, not inside T
10
10
 
11
11
  ## Before you start
12
12
 
13
- 1. Read `.ultra/tasks.json`, the scoped task's `context_file` and `## Resume Note`.
13
+ 1. Resolve the review scope first. For task or active-Change review, resolve exactly one
14
+ active `change_id`, read `.ultra/tasks.json`, and select only matching tasks before
15
+ reading the scoped task's `context_file` and `## Resume Note`. Historical review must
16
+ name its archived Change explicitly and never infer scope from unfinished status.
14
17
  2. Read `CONTEXT.md`, relevant `.ultra/decisions/`, acceptance, evidence and exact diff.
15
18
  3. Create `.ultra/reviews/<session>/` and one immutable packet naming HEAD, scope,
16
19
  output path, acceptance and public seams. Follow `references/worker-packet.md`,