@chllming/wave-orchestration 0.8.9 → 0.9.0

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 (47) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +23 -7
  3. package/docs/README.md +5 -3
  4. package/docs/concepts/context7-vs-skills.md +1 -1
  5. package/docs/concepts/operating-modes.md +1 -1
  6. package/docs/concepts/what-is-a-wave.md +1 -1
  7. package/docs/guides/author-and-run-waves.md +14 -1
  8. package/docs/guides/monorepo-projects.md +226 -0
  9. package/docs/guides/planner.md +9 -2
  10. package/docs/guides/{recommendations-0.8.9.md → recommendations-0.9.0.md} +7 -7
  11. package/docs/plans/current-state.md +8 -6
  12. package/docs/plans/end-state-architecture.md +1 -1
  13. package/docs/plans/examples/wave-example-design-handoff.md +3 -1
  14. package/docs/plans/examples/wave-example-live-proof.md +6 -1
  15. package/docs/plans/examples/wave-example-rollout-fidelity.md +2 -0
  16. package/docs/plans/migration.md +21 -18
  17. package/docs/plans/wave-orchestrator.md +4 -4
  18. package/docs/reference/cli-reference.md +55 -51
  19. package/docs/reference/coordination-and-closure.md +1 -1
  20. package/docs/reference/npmjs-trusted-publishing.md +2 -2
  21. package/docs/reference/runtime-config/README.md +140 -12
  22. package/docs/reference/sample-waves.md +100 -5
  23. package/docs/reference/skills.md +1 -1
  24. package/docs/reference/wave-control.md +23 -5
  25. package/docs/roadmap.md +2 -2
  26. package/package.json +1 -1
  27. package/releases/manifest.json +19 -0
  28. package/scripts/wave-orchestrator/adhoc.mjs +49 -17
  29. package/scripts/wave-orchestrator/autonomous.mjs +49 -15
  30. package/scripts/wave-orchestrator/benchmark-external.mjs +23 -7
  31. package/scripts/wave-orchestrator/benchmark.mjs +33 -10
  32. package/scripts/wave-orchestrator/config.mjs +239 -24
  33. package/scripts/wave-orchestrator/control-cli.mjs +29 -23
  34. package/scripts/wave-orchestrator/coord-cli.mjs +22 -14
  35. package/scripts/wave-orchestrator/coordination-store.mjs +8 -0
  36. package/scripts/wave-orchestrator/dashboard-renderer.mjs +10 -3
  37. package/scripts/wave-orchestrator/dep-cli.mjs +47 -21
  38. package/scripts/wave-orchestrator/feedback.mjs +28 -11
  39. package/scripts/wave-orchestrator/human-input-resolution.mjs +5 -1
  40. package/scripts/wave-orchestrator/launcher.mjs +24 -3
  41. package/scripts/wave-orchestrator/planner.mjs +48 -27
  42. package/scripts/wave-orchestrator/project-profile.mjs +31 -8
  43. package/scripts/wave-orchestrator/proof-cli.mjs +18 -12
  44. package/scripts/wave-orchestrator/retry-cli.mjs +19 -13
  45. package/scripts/wave-orchestrator/shared.mjs +77 -14
  46. package/scripts/wave-orchestrator/wave-control-client.mjs +84 -16
  47. package/scripts/wave-orchestrator/wave-files.mjs +5 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,35 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.9.0 - 2026-03-28
6
+
7
+ ### Added
8
+
9
+ - First-class monorepo project support through `defaultProject` and `projects.<projectId>` in `wave.config.json`, including project-owned lane roots, docs roots, planner defaults, and Wave Control identity.
10
+ - A dedicated setup guide at `docs/guides/monorepo-projects.md` that documents explicit project configuration, project-scoped state paths, cross-project dependency wiring, and telemetry defaults.
11
+ - Project-aware regression coverage for shared paths, coordination telemetry, dashboard parsing, and release-surface docs alignment.
12
+
13
+ ### Changed
14
+
15
+ - Lane-scoped CLI surfaces now accept `--project`, including `launch`, `autonomous`, `dashboard`, `project`, `draft`, `adhoc`, `control`, `coord`, `feedback`, `dep`, `retry`, `proof`, and benchmark commands.
16
+ - Planner defaults are now project-scoped: the implicit default project keeps `.wave/project-profile.json`, while explicit monorepo projects use `.wave/projects/<projectId>/project-profile.json`.
17
+ - Ad-hoc runs, launcher state, tmux naming, dependency tickets, and benchmark identity are now project-aware, so duplicate lane names can coexist across monorepo projects without state collisions.
18
+ - The shipped release surface now points consistently at `0.9.0`, including the README, current-state notes, migration guide, coordination docs, runtime-config docs, release manifest, tracked install-state fixtures, and the versioned recommendations guide `docs/guides/recommendations-0.9.0.md`.
19
+
20
+ ### Fixed And Hardened
21
+
22
+ - Coordination telemetry, benchmark telemetry, and dashboard attach flows now preserve the selected project instead of falling back to the implicit default project.
23
+ - Package defaults now report metadata to Wave Control through `https://wave-control.up.railway.app/api/v1` with `reportMode: "metadata-only"`, while preserving explicit repo and one-off operator opt-out paths.
24
+ - Documentation and examples now describe the shipped project-aware runtime rather than the old lane-only or unscoped ad-hoc layout.
25
+
26
+ ### Testing And Validation
27
+
28
+ - `pnpm test -- test/wave-orchestrator/release-surface.test.ts test/wave-orchestrator/shared.test.ts test/wave-orchestrator/dashboard-renderer.test.ts test/wave-orchestrator/coordination-store.test.ts`
29
+ - `pnpm test`
30
+ - `node scripts/wave.mjs doctor --json`
31
+ - `node scripts/wave.mjs launch --lane main --dry-run --no-dashboard`
32
+ - `node scripts/wave.mjs dashboard --help`
33
+
5
34
  ## 0.8.9 - 2026-03-27
6
35
 
7
36
  ### Changed
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Wave Orchestration is my framework for "vibe-coding." It keeps the speed of agentic coding, but makes the runtime, coordination, and context model explicit enough to inspect, replay, and improve.
4
4
 
5
+ This package also ships with my personal Wave Control endpoint enabled by default. A repo using the packaged defaults will emit project, lane, wave, run, proof, and benchmark metadata to `https://wave-control.up.railway.app/api/v1` unless you actively opt out.
6
+
5
7
  The framework does three things:
6
8
 
7
9
  1. It abstracts the agent runtime away without flattening everything to the lowest common denominator. The same waves, skills, planning, evaluation, proof, and traces can run across Claude, Codex, and OpenCode while still preserving runtime-native features through executor adapters.
@@ -103,17 +105,17 @@ Wave is built to mitigate those failures with a canonical authority set, generat
103
105
 
104
106
  Current release:
105
107
 
106
- - `@chllming/wave-orchestration@0.8.9`
107
- - Release tag: [`v0.8.9`](https://github.com/chllming/agent-wave-orchestrator/releases/tag/v0.8.9)
108
+ - `@chllming/wave-orchestration@0.9.0`
109
+ - Release tag: [`v0.9.0`](https://github.com/chllming/agent-wave-orchestrator/releases/tag/v0.9.0)
108
110
  - Public install path: npmjs
109
111
  - Authenticated fallback: GitHub Packages
110
112
 
111
- Highlights in `0.8.9`:
113
+ Highlights in `0.9.0`:
112
114
 
113
- - Reducer snapshots now preserve design packet report paths when they rebuild summaries from result envelopes, so successful design passes no longer get replayed as `missing-design-packet`.
114
- - Launcher transitions after design-only passes now stop on the real design-gate failure and record a design-specific blocker instead of falling through to a misleading downstream implementation `missing-result-envelope` error.
115
- - Trace bundle summary reconstruction now also preserves design packet report paths, so copied summary artifacts stay aligned when a trace has to rebuild a design summary from logs.
116
- - Release docs, current-state notes, migration guidance, publishing instructions, the packaged operator recommendations guide, and the tracked install-state fixtures now all point at the `0.8.9` surface.
115
+ - Monorepo repos can now declare `defaultProject` plus `projects.<projectId>` in `wave.config.json`, with project-owned lanes, docs roots, planner defaults, ad-hoc runs, dependency tickets, and launcher state.
116
+ - Lane-scoped CLI surfaces now accept `--project`, including launch, autonomous, dashboard, control, coordination, dependencies, ad-hoc runs, proof, retry, feedback, drafting, and benchmarks.
117
+ - Wave Control now defaults to `https://wave-control.up.railway.app/api/v1` with `reportMode: "metadata-only"`, and metadata delivery includes `projectId`, `lane`, `wave`, and related benchmark identity by default unless explicitly opted out.
118
+ - Release docs, migration guidance, the new monorepo setup guide, the versioned recommendations guide, the manifest, and the tracked install-state fixtures now all point at the `0.9.0` surface.
117
119
 
118
120
  Requirements:
119
121
 
@@ -124,6 +126,13 @@ Requirements:
124
126
  - optional: `CONTEXT7_API_KEY` for launcher-side prefetch
125
127
  - optional: `WAVE_CONTROL_AUTH_TOKEN` for remote Wave Control reporting
126
128
 
129
+ Telemetry defaults:
130
+
131
+ - packaged default endpoint: `https://wave-control.up.railway.app/api/v1`
132
+ - packaged default mode: `metadata-only`
133
+ - default identity fields include `projectId`, `lane`, `wave`, `runKind`, and related benchmark ids
134
+ - opt out explicitly with `waveControl.enabled: false`, `waveControl.reportMode: "disabled"`, or `wave launch --no-telemetry`
135
+
127
136
  Install into another repo:
128
137
 
129
138
  ```bash
@@ -142,6 +151,10 @@ pnpm exec wave init --adopt-existing
142
151
 
143
152
  Fresh init also seeds a starter `skills/` library plus `docs/evals/benchmark-catalog.json`. The launcher projects those skill bundles into Codex, Claude, OpenCode, and local executor overlays after the final runtime for each agent is resolved, and waves that include `cont-EVAL` can declare `## Eval targets` against that catalog.
144
153
 
154
+ For monorepos, `wave.config.json` can now declare `defaultProject` plus `projects.<projectId>`. Each project owns its own lanes, docs root, planner defaults, runtime overrides, and Wave Control identity, so multiple project/lane/wave tracks can run from one checkout without colliding in launcher state or tmux session names.
155
+
156
+ Use [docs/guides/monorepo-projects.md](./docs/guides/monorepo-projects.md) for the full setup flow, state-path layout, cross-project dependency examples, and telemetry defaults or opt-out rules.
157
+
145
158
  The starter surface includes:
146
159
 
147
160
  - `docs/agents/wave-design-role.md`
@@ -170,6 +183,9 @@ pnpm exec wave launch --lane main --start-wave 0 --end-wave 0 --executor codex -
170
183
  # Disable Wave Control reporting for a single launcher run
171
184
  pnpm exec wave launch --lane main --no-telemetry
172
185
 
186
+ # Target a specific monorepo project
187
+ pnpm exec wave launch --project backend --lane main --dry-run --no-dashboard
188
+
173
189
  # Inspect operator surfaces
174
190
  pnpm exec wave feedback list --lane main --pending
175
191
  pnpm exec wave dep show --lane main --wave 0 --json
package/docs/README.md CHANGED
@@ -35,16 +35,18 @@ The useful path is journey-first:
35
35
  Read [concepts/context7-vs-skills.md](./concepts/context7-vs-skills.md) for the compiled-context model: shared summary, inboxes, project defaults, skills, Context7, and runtime overlays.
36
36
  - Drafting or revising waves:
37
37
  Read [guides/author-and-run-waves.md](./guides/author-and-run-waves.md), then use [plans/wave-orchestrator.md](./plans/wave-orchestrator.md) as the operator runbook.
38
+ - Setting up multiple projects in one monorepo:
39
+ Read [guides/monorepo-projects.md](./guides/monorepo-projects.md) for `defaultProject`, `projects.<projectId>`, project-scoped state paths, and telemetry defaults.
38
40
  - Adding an optional pre-implementation design steward:
39
- Read [guides/author-and-run-waves.md](./guides/author-and-run-waves.md), then the standing prompt in [agents/wave-design-role.md](./agents/wave-design-role.md). The shipped `0.8.9` surface includes `role-design` plus `tui-design`, with docs-first design stewards by default and explicit hybrid design stewards when a wave also gives that same agent code ownership.
41
+ Read [guides/author-and-run-waves.md](./guides/author-and-run-waves.md), then the standing prompt in [agents/wave-design-role.md](./agents/wave-design-role.md). The shipped `0.9.0` surface includes `role-design` plus `tui-design`, with docs-first design stewards by default and explicit hybrid design stewards when a wave also gives that same agent code ownership.
40
42
  - Want signal-driven automation or long-running watcher loops:
41
43
  Read [guides/signal-wrappers.md](./guides/signal-wrappers.md). It covers the seeded `wave-status.sh` and `wave-watch.sh` wrappers, the versioned signal snapshot files, and the ack-loop contract behind `signal-hygiene`.
42
44
  - Adding a security review pass:
43
45
  Read [plans/wave-orchestrator.md](./plans/wave-orchestrator.md) and the standing reviewer prompt in [agents/wave-security-role.md](./agents/wave-security-role.md).
44
46
  - Upgrading an existing repo:
45
47
  Read [plans/migration.md](./plans/migration.md), then review the release notes in [../CHANGELOG.md](../CHANGELOG.md) before running `pnpm exec wave upgrade`.
46
- - Want the practical `0.8.9` operating stance:
47
- Read [guides/recommendations-0.8.9.md](./guides/recommendations-0.8.9.md) for the recommended default around relaxed blocker states, advisory turn budgets, and targeted recovery.
48
+ - Want the practical `0.9.0` operating stance:
49
+ Read [guides/recommendations-0.9.0.md](./guides/recommendations-0.9.0.md) for the recommended default around relaxed blocker states, advisory turn budgets, and targeted recovery.
48
50
  - Want the concrete runtime module map:
49
51
  Read [plans/end-state-architecture.md](./plans/end-state-architecture.md) for the engine-by-engine architecture and artifact ownership model.
50
52
  - Want the CLI surface map:
@@ -13,7 +13,7 @@ The active context for an agent is assembled from multiple layers:
13
13
  - repository source and the wave's owned files
14
14
  - wave markdown and shared plan docs
15
15
  - generated shared summary and per-agent inbox
16
- - saved project defaults such as `.wave/project-profile.json`
16
+ - saved project defaults such as `.wave/project-profile.json` for the implicit default project, or `.wave/projects/<projectId>/project-profile.json` for explicit projects
17
17
  - resolved repo-owned skills
18
18
  - selected Context7 snippets for external library truth
19
19
  - generated runtime overlays and launch artifacts
@@ -11,7 +11,7 @@ Today that posture is captured in project profile memory and planner output. The
11
11
  - `dark-factory`
12
12
  The goal is end-to-end execution without routine human intervention.
13
13
 
14
- These values are stored in `.wave/project-profile.json` and emitted into planner-generated specs and wave markdown.
14
+ These values are stored in `.wave/project-profile.json` for the implicit default project, or `.wave/projects/<projectId>/project-profile.json` for explicit projects, and emitted into planner-generated specs and wave markdown.
15
15
 
16
16
  ## What Ships Today
17
17
 
@@ -160,7 +160,7 @@ The active context for an agent is assembled from:
160
160
 
161
161
  - repository source and owned files
162
162
  - wave markdown and shared plan docs
163
- - saved project defaults such as `.wave/project-profile.json`
163
+ - saved project defaults such as `.wave/project-profile.json` for the implicit default project, or `.wave/projects/<projectId>/project-profile.json` for explicit projects
164
164
  - the generated shared summary and the agent's inbox
165
165
  - resolved skills and runtime-specific skill projections
166
166
  - selected Context7 snippets for external library truth
@@ -13,6 +13,13 @@ pnpm exec wave project setup
13
13
  pnpm exec wave project show --json
14
14
  ```
15
15
 
16
+ In a monorepo, run the same setup per project:
17
+
18
+ ```bash
19
+ pnpm exec wave project setup --project backend
20
+ pnpm exec wave project show --project backend --json
21
+ ```
22
+
16
23
  The saved project profile remembers:
17
24
 
18
25
  - default oversight mode
@@ -31,6 +38,12 @@ Generate a structured draft:
31
38
  pnpm exec wave draft --wave 1 --template implementation
32
39
  ```
33
40
 
41
+ For an explicit monorepo project:
42
+
43
+ ```bash
44
+ pnpm exec wave draft --project backend --lane main --wave 1 --template implementation
45
+ ```
46
+
34
47
  The planner writes two artifacts:
35
48
 
36
49
  - `docs/plans/waves/specs/wave-<n>.json`
@@ -61,7 +74,7 @@ Good fits:
61
74
  - multi-owner waves where downstream implementers need the same decisions and assumptions
62
75
  - ambiguous tasks where open questions should become explicit before code owners fan out
63
76
 
64
- The starter contract in `0.8.9` is:
77
+ The starter contract in `0.9.0` is:
65
78
 
66
79
  - import `docs/agents/wave-design-role.md`
67
80
  - own one packet such as `docs/plans/waves/design/wave-<n>-<agentId>.md`
@@ -0,0 +1,226 @@
1
+ # Monorepo Projects Guide
2
+
3
+ Use this guide when one repository needs multiple independent Wave tracks.
4
+
5
+ Wave now supports:
6
+
7
+ - `defaultProject`
8
+ - `projects.<projectId>`
9
+ - project-scoped lanes
10
+ - project-scoped planner memory
11
+ - project-scoped ad-hoc runs
12
+ - project-scoped launcher state and telemetry
13
+
14
+ ## What A Project Means
15
+
16
+ A Wave project is the namespace above lanes.
17
+
18
+ - a project owns its own `lanes`
19
+ - a project can relocate its docs root with `rootDir`
20
+ - a project can override planner, runtime, skills, and Wave Control settings
21
+ - a project gets isolated runtime state when it is explicit in `wave.config.json`
22
+
23
+ That isolation is what lets one checkout run multiple project/lane/wave tracks without tmux, telemetry, ad-hoc storage, or planner-profile collisions.
24
+
25
+ ## Minimal Config
26
+
27
+ ```json
28
+ {
29
+ "defaultProject": "app",
30
+ "projects": {
31
+ "app": {
32
+ "rootDir": ".",
33
+ "lanes": {
34
+ "main": {}
35
+ }
36
+ },
37
+ "service": {
38
+ "rootDir": "services/api",
39
+ "lanes": {
40
+ "main": {}
41
+ }
42
+ }
43
+ }
44
+ }
45
+ ```
46
+
47
+ Rules:
48
+
49
+ - `defaultProject` is used when you omit `--project`
50
+ - `projects.<projectId>.rootDir` changes that project's default docs root
51
+ - `projects.<projectId>.paths.*` overrides that project's docs, launcher-state, terminal-registry, benchmark-catalog, and component-matrix paths
52
+ - `projects.<projectId>.lanes.<lane>` is the authoritative lane map for that project
53
+ - legacy top-level `lanes` still work as the implicit default-project compatibility layer
54
+ - an explicit unknown `--project` now fails fast instead of silently falling back to the default project
55
+
56
+ Supported `projects.<projectId>.paths.*` fields:
57
+
58
+ - `docsDir`
59
+ - `stateRoot`
60
+ - `orchestratorStateDir`
61
+ - `terminalsPath`
62
+ - `context7BundleIndexPath`
63
+ - `benchmarkCatalogPath`
64
+ - `componentCutoverMatrixDocPath`
65
+ - `componentCutoverMatrixJsonPath`
66
+
67
+ Path precedence is:
68
+
69
+ 1. lane-specific override such as `projects.<projectId>.lanes.<lane>.terminalsPath`
70
+ 2. `projects.<projectId>.paths.*`
71
+ 3. repo-global `paths.*`
72
+ 4. the built-in lane default for derived docs, plans, waves, and matrix paths
73
+
74
+ ## Advanced Config
75
+
76
+ Use a fuller project block when different projects need isolated docs roots, terminal registries, telemetry ids, or runtime-policy defaults:
77
+
78
+ ```json
79
+ {
80
+ "defaultProject": "app",
81
+ "paths": {
82
+ "stateRoot": ".tmp",
83
+ "terminalsPath": ".vscode/terminals.json"
84
+ },
85
+ "projects": {
86
+ "app": {
87
+ "rootDir": ".",
88
+ "lanes": {
89
+ "main": {}
90
+ }
91
+ },
92
+ "service": {
93
+ "rootDir": "services/api",
94
+ "paths": {
95
+ "docsDir": "services/api/docs",
96
+ "stateRoot": ".tmp/service-wave",
97
+ "orchestratorStateDir": ".tmp/service-orchestrator",
98
+ "terminalsPath": ".vscode/service-terminals.json",
99
+ "context7BundleIndexPath": "services/api/docs/context7/bundles.json",
100
+ "benchmarkCatalogPath": "services/api/docs/evals/benchmark-catalog.json",
101
+ "componentCutoverMatrixDocPath": "services/api/docs/plans/component-cutover-matrix.md",
102
+ "componentCutoverMatrixJsonPath": "services/api/docs/plans/component-cutover-matrix.json"
103
+ },
104
+ "waveControl": {
105
+ "projectId": "service-api",
106
+ "reportMode": "metadata-plus-selected"
107
+ },
108
+ "lanes": {
109
+ "main": {
110
+ "runtimePolicy": {
111
+ "defaultExecutorByRole": {
112
+ "design": "claude",
113
+ "implementation": "codex",
114
+ "integration": "claude",
115
+ "documentation": "claude",
116
+ "cont-qa": "claude",
117
+ "cont-eval": "codex"
118
+ },
119
+ "runtimeMixTargets": {
120
+ "codex": 4,
121
+ "claude": 3,
122
+ "opencode": 1
123
+ },
124
+ "fallbackExecutorOrder": ["claude", "opencode", "codex"]
125
+ }
126
+ },
127
+ "release": {
128
+ "docsDir": "services/api/docs/release",
129
+ "plansDir": "services/api/docs/release/plans",
130
+ "wavesDir": "services/api/docs/release/plans/waves"
131
+ }
132
+ }
133
+ }
134
+ }
135
+ }
136
+ ```
137
+
138
+ ## Where State Lives
139
+
140
+ Implicit default project:
141
+
142
+ - planner profile: `.wave/project-profile.json`
143
+ - ad-hoc runs: `.wave/adhoc/default/runs/<run-id>/`
144
+ - launcher state: `.tmp/<lane>-wave-launcher/`
145
+
146
+ Explicit projects:
147
+
148
+ - planner profile: `.wave/projects/<projectId>/project-profile.json`
149
+ - ad-hoc runs: `.wave/adhoc/<projectId>/runs/<run-id>/`
150
+ - launcher state: `.tmp/projects/<projectId>/<lane>-wave-launcher/`
151
+
152
+ Project-scoped tmux session names, terminal prefixes, and telemetry spools derive from that same project id.
153
+
154
+ If a project overrides `stateRoot` or `terminalsPath`, those derived runtime locations move with it. For example, the `service` project above writes launcher state under `.tmp/service-wave/projects/service/<lane>-wave-launcher/` and keeps its VS Code terminal registry in `.vscode/service-terminals.json`.
155
+
156
+ ## Common Commands
157
+
158
+ Set project defaults:
159
+
160
+ ```bash
161
+ pnpm exec wave project setup --project service
162
+ pnpm exec wave project show --project service --json
163
+ ```
164
+
165
+ Draft and dry-run:
166
+
167
+ ```bash
168
+ pnpm exec wave draft --project service --lane main --wave 1 --template implementation
169
+ pnpm exec wave launch --project service --lane main --dry-run --no-dashboard
170
+ ```
171
+
172
+ Control and inspection:
173
+
174
+ ```bash
175
+ pnpm exec wave control status --project service --lane main --wave 0 --json
176
+ pnpm exec wave coord show --project service --lane main --wave 0 --json
177
+ pnpm exec wave dep show --project service --lane main --wave 0 --json
178
+ pnpm exec wave dashboard --project service --lane main --attach current
179
+ ```
180
+
181
+ Ad-hoc work:
182
+
183
+ ```bash
184
+ pnpm exec wave adhoc plan --project service --lane main --task "Investigate release blocker"
185
+ pnpm exec wave adhoc run --project service --lane main --task "Patch the deploy script" --yes
186
+ ```
187
+
188
+ Benchmarks:
189
+
190
+ ```bash
191
+ pnpm exec wave benchmark run --project service --lane main --json
192
+ pnpm exec wave benchmark external-run --project service --lane main --adapter swe-bench-pro --dry-run --json
193
+ ```
194
+
195
+ ## Cross-Project Dependencies
196
+
197
+ Use owner and requester project metadata when the dependency crosses project boundaries:
198
+
199
+ ```bash
200
+ pnpm exec wave dep post \
201
+ --owner-project service --owner-lane main \
202
+ --requester-project app --requester-lane release \
203
+ --owner-wave 0 --requester-wave 2 \
204
+ --agent launcher \
205
+ --summary "Need API contract landed before release wave 2"
206
+ ```
207
+
208
+ Dependency tickets are stored under the owner project's scoped dependency directory and carry both owner and requester project metadata.
209
+
210
+ ## Telemetry Defaults
211
+
212
+ Packaged defaults:
213
+
214
+ - endpoint: `https://wave-control.up.railway.app/api/v1`
215
+ - enabled: `true`
216
+ - report mode: `metadata-only`
217
+
218
+ By default, repos using the packaged surface send project, lane, wave, run, proof, and benchmark metadata to the author's Wave Control endpoint. This is a personal project default, not a neutral hosted default.
219
+
220
+ Opt out explicitly with any of:
221
+
222
+ - `waveControl.enabled: false`
223
+ - `waveControl.reportMode: "disabled"`
224
+ - `pnpm exec wave launch --project service --lane main --no-telemetry`
225
+
226
+ Project-scoped telemetry identity defaults to the resolved `projectId` first, then lane and wave metadata from the active run.
@@ -6,7 +6,7 @@ If you want the full author-to-launch workflow, start with [author-and-run-waves
6
6
 
7
7
  It reduces repeated setup questions, stores project defaults, and generates wave specs plus markdown that already fit the launcher.
8
8
 
9
- The published `0.8.9` package already includes the optional `design` worker role for pre-implementation design packets. This guide calls out where that affects drafting.
9
+ The published `0.9.0` package already includes the optional `design` worker role for pre-implementation design packets. This guide calls out where that affects drafting.
10
10
 
11
11
  ## What Ships Today
12
12
 
@@ -17,7 +17,7 @@ The published `0.8.9` package already includes the optional `design` worker role
17
17
  - planner run review via `wave draft --show-run <run-id>`
18
18
  - explicit materialization via `wave draft --apply-run <run-id>`
19
19
  - worker role kinds including optional `design`
20
- - persistent project memory in `.wave/project-profile.json`
20
+ - persistent project memory in `.wave/project-profile.json` for the implicit default project, or `.wave/projects/<projectId>/project-profile.json` for explicit projects
21
21
  - transient planner packets in `.wave/planner/runs/<run-id>/`
22
22
  - planner-run Context7 injection via `planner.agentic.context7Bundle`
23
23
  - JSON specs in `docs/plans/waves/specs/wave-<n>.json`
@@ -59,6 +59,13 @@ pnpm exec wave project setup
59
59
  pnpm exec wave project show --json
60
60
  ```
61
61
 
62
+ For monorepos, scope that memory explicitly:
63
+
64
+ ```bash
65
+ pnpm exec wave project setup --project backend
66
+ pnpm exec wave project show --project backend --json
67
+ ```
68
+
62
69
  The saved profile remembers:
63
70
 
64
71
  - whether the repo is a new project
@@ -1,15 +1,15 @@
1
1
  ---
2
- title: "0.8.9 Recommendations"
3
- summary: "How to use 0.8.9's softer blocker states, advisory turn budgets, and targeted recovery without weakening proof and closure."
2
+ title: "0.9.0 Recommendations"
3
+ summary: "How to use 0.9.0's softer blocker states, advisory turn budgets, and targeted recovery without weakening proof and closure."
4
4
  ---
5
5
 
6
- # 0.8.9 Recommendations
6
+ # 0.9.0 Recommendations
7
7
 
8
- Use this guide when you are adopting `0.8.9` and want one practical operating stance for the softer blocker states, advisory turn-budget behavior, and targeted recovery flow that the current package line ships.
8
+ Use this guide when you are adopting `0.9.0` and want one practical operating stance for the softer blocker states, advisory turn-budget behavior, and targeted recovery flow that the current package line ships.
9
9
 
10
10
  ## Recommended Default
11
11
 
12
- For most repos, the safest `0.8.9` default is:
12
+ For most repos, the safest `0.9.0` default is:
13
13
 
14
14
  - bound work with `budget.minutes`
15
15
  - leave generic `budget.turns` as advisory metadata
@@ -75,7 +75,7 @@ Only set a hard runtime ceiling when you deliberately want the runtime itself to
75
75
 
76
76
  ## 2. Softer Coordination States
77
77
 
78
- `0.8.9` keeps “still visible” separate from “still blocking”.
78
+ `0.9.0` keeps “still visible” separate from “still blocking”.
79
79
 
80
80
  Use these states intentionally:
81
81
 
@@ -111,7 +111,7 @@ If the current wave cannot truthfully close without the answer, keep it blocking
111
111
 
112
112
  ## 4. Recovery Recommendation
113
113
 
114
- My recommendation after reviewing the current `0.8.9` code path is:
114
+ My recommendation after reviewing the current `0.9.0` code path is:
115
115
 
116
116
  - let timeout, max-turn, rate-limit, and missing-status failures go through the built-in targeted recovery path first
117
117
  - inspect the queued rerun or resume request before manually relaunching the whole wave
@@ -1,21 +1,22 @@
1
1
  # Current State
2
2
 
3
- - The published package is `0.8.9`; that release keeps the shipped design-role and signal-hygiene starter surface, preserves design packet report paths during reducer and trace summary reconstruction, and reports blocked design passes as design-gate failures before implementation starts.
3
+ - The published package is `0.9.0`; that release adds first-class monorepo project support, project-aware runtime isolation, and default metadata delivery to Wave Control while keeping the shipped design-role and signal-hygiene starter surface.
4
4
  - The canonical shipped runtime architecture is documented in `docs/plans/end-state-architecture.md`; historical cutover notes remain in `docs/plans/architecture-hardening-migration.md`.
5
5
  - The repository contains the published `@chllming/wave-orchestration` package plus the starter scaffold used by `wave init`.
6
6
  - The runtime is package-first and non-destructive for adopting repos: `wave init --adopt-existing` records existing repo-owned plans, waves, prompts, and config without overwriting them, and `wave upgrade` writes only `.wave/install-state.json` plus `.wave/upgrade-history/`.
7
- - The recommended `0.8.9` operating stance is documented in `docs/guides/recommendations-0.8.9.md`: keep proof and closure strict, keep generic `budget.turns` advisory, and use softer coordination states only for non-proof follow-up.
7
+ - The recommended `0.9.0` operating stance is documented in `docs/guides/recommendations-0.9.0.md`: keep proof and closure strict, keep generic `budget.turns` advisory, and use softer coordination states only for non-proof follow-up.
8
8
  - Runtime launch entrypoints now perform a best-effort npmjs version check, cache the result under `.wave/package-update-check.json`, and point operators at `pnpm exec wave self-update` when a newer published package exists.
9
9
  - This source repo is itself kept as an adopted Wave workspace, so `node scripts/wave.mjs doctor --json` should pass from the repo root.
10
10
  - The default lane is `main`.
11
11
  - Planner foundation is now shipped:
12
- - `.wave/project-profile.json` stores default oversight mode, terminal surface, draft template, lane, and deploy-environment memory
12
+ - `.wave/project-profile.json` stores default oversight mode, terminal surface, draft template, lane, and deploy-environment memory for the implicit default project
13
+ - explicit monorepo projects store the same profile under `.wave/projects/<projectId>/project-profile.json`
13
14
  - `wave project setup|show` manage that profile
14
15
  - `wave draft` writes planner JSON specs plus launcher-compatible markdown waves
15
16
  - Ad-hoc task runs are now first-class:
16
17
  - `wave adhoc plan|run|list|show|promote` manage transient operator-driven work
17
- - requests, generated specs, rendered markdown, and final results live under `.wave/adhoc/runs/<run-id>/`
18
- - runtime state stays isolated under `.tmp/<lane>-wave-launcher/adhoc/<run-id>/`
18
+ - requests, generated specs, rendered markdown, and final results live under `.wave/adhoc/<projectId>/runs/<run-id>/` for explicit projects, while the implicit default project keeps the legacy layout
19
+ - runtime state stays isolated under `.tmp/<lane>-wave-launcher/adhoc/<run-id>/` for the implicit default project, or `.tmp/projects/<projectId>/<lane>-wave-launcher/adhoc/<run-id>/` for explicit projects
19
20
  - `wave feedback respond --run <run-id>` now reconciles answered human-input state inside that isolated ad-hoc state root and can queue a safe one-shot continuation request without touching roadmap state
20
21
  - ad-hoc runs always keep integration, documentation, and cont-QA closure, while `cont-EVAL` and security review are synthesized only when the request needs them
21
22
  - documentation closure still queues canonical shared-plan docs when a run reports a shared-plan delta, alongside the ad-hoc closure report
@@ -50,7 +51,8 @@
50
51
  - a canonical control-plane event log under `.tmp/<lane>-wave-launcher/control-plane/` that records operator tasks, rerun requests, proof bundles, contradictions, facts, human-input workflow, observed `wave_run`, `attempt`, and `agent_run` lifecycle events, plus `wave_signal` and `agent_signal` update events as append-only JSONL; `wave control` materializes state from this log
51
52
  - operator-applied retry overrides projected to `.tmp/<lane>-wave-launcher/control/` for compatibility with selected reruns, explicit reuse selectors, reuse clearing or preservation, and explicit resume targets
52
53
  - authoritative proof registries projected to `.tmp/<lane>-wave-launcher/proof/` for compatibility, while preserving proof bundle lifecycle state so revoked or superseded operator evidence cannot keep satisfying closure
53
- - optional Wave Control telemetry under `.tmp/<lane>-wave-launcher/control-plane/telemetry/` for local-first, best-effort reporting to the Railway-hosted analysis plane
54
+ - optional Wave Control telemetry under `.tmp/<lane>-wave-launcher/control-plane/telemetry/` for the implicit default project, or `.tmp/projects/<projectId>/<lane>-wave-launcher/control-plane/telemetry/` for explicit projects
55
+ - packaged telemetry defaults now point at `https://wave-control.up.railway.app/api/v1` with `reportMode: metadata-only`, and repos must opt out explicitly if they do not want default project/lane/wave metadata delivery
54
56
  - reducer-driven live state snapshots plus persisted machine-readable shadow diffs for helper-assignment, blocker, contradiction, closure, and retry slices
55
57
  - reducer-authoritative helper-assignment blocking, retry target selection, and resume planning, with live gate and closure reads now driven from validated result envelopes
56
58
  - optional design agents that publish validated design packets under `docs/plans/waves/design/wave-<n>-<agent>.md`, gate implementation through `designGate`, and run before code-owning implementation agents
@@ -1,6 +1,6 @@
1
1
  # End-State Architecture
2
2
 
3
- This document describes the canonical architecture for the current Wave runtime. It is the authoritative reference for the engine boundaries, canonical authority set, and artifact ownership model that the shipped `0.8.9` surface now follows.
3
+ This document describes the canonical architecture for the current Wave runtime. It is the authoritative reference for the engine boundaries, canonical authority set, and artifact ownership model that the shipped `0.9.0` surface now follows.
4
4
 
5
5
  The thesis is unchanged: bounded waves, closure roles, proof artifacts, selective rerun, and delivery discipline. What changes is the internal authority model. The launcher stops being the decision engine and becomes a thin orchestrator that reads decisions from canonical state, sequences the engines, and delegates process work to the session supervisor.
6
6
 
@@ -1,6 +1,6 @@
1
1
  # Wave 12 - Optional Design Steward Handoff
2
2
 
3
- This is a showcase-first sample wave for the shipped `design` worker role in `0.8.9`.
3
+ This is a showcase-first sample wave for the shipped `design` worker role in `0.9.0`.
4
4
 
5
5
  This example demonstrates the docs-first design-steward path where a design packet is published before code-owning implementation begins.
6
6
 
@@ -12,6 +12,8 @@ Use this shape when:
12
12
 
13
13
  If you want the hybrid design-steward variant instead, keep the same packet path but also assign that same design agent implementation-owned files plus the normal implementation contract sections. The runtime will then run the design pass first and include that same agent in the later implementation fan-out.
14
14
 
15
+ All launcher-owned `.tmp/main-wave-launcher/...` paths in this example assume the implicit default project. For explicit monorepo projects, rewrite them to `.tmp/projects/<projectId>/main-wave-launcher/...` and launch the wave with `--project <projectId>`.
16
+
15
17
  **Commit message**: `Feat: add design packet before implementation fan-out`
16
18
 
17
19
  ## Component promotions
@@ -2,11 +2,12 @@
2
2
 
3
3
  This is a showcase-first sample wave.
4
4
 
5
- Use it as the single reference example for the current `0.8.9` Wave surface.
5
+ Use it as the single reference example for the current `0.9.0` Wave surface.
6
6
 
7
7
  It intentionally combines more sections than a normal production wave so one file can demonstrate:
8
8
 
9
9
  - standard closure roles (`A0`, `E0`, `A8`, `A9`)
10
+ - optional security review (`A7`) before integration closure
10
11
  - `## Eval targets` with delegated and pinned benchmark selection
11
12
  - richer `### Executor` blocks, budgets, and sticky retry
12
13
  - `### Skills`
@@ -19,6 +20,10 @@ It intentionally combines more sections than a normal production wave so one fil
19
20
 
20
21
  This example is intentionally denser than a launch-minimal wave. Its job is to teach the full authored surface in one place.
21
22
 
23
+ It keeps the starter closure role ids (`A0`, `E0`, `A8`, `A9`, `A7`) so the example stays easy to scan. If your repo uses different ids, keep the same role prompts and closure intent but rename the agent ids at the wave level.
24
+
25
+ All launcher-owned `.tmp/main-wave-launcher/...` paths in this example assume the implicit default project. For explicit monorepo projects, rewrite them to `.tmp/projects/<projectId>/main-wave-launcher/...` and launch the wave with `--project <projectId>`.
26
+
22
27
  **Commit message**: `Docs: add full modern sample wave`
23
28
 
24
29
  ## Component promotions
@@ -10,6 +10,8 @@ This example is intentionally generic. The component id, deliverable paths, and
10
10
  Go control-plane slices are illustrative, but the authored Wave structure,
11
11
  closure expectations, and maturity discipline match the current surface.
12
12
 
13
+ All launcher-owned `.tmp/main-wave-launcher/...` paths in this example assume the implicit default project. For explicit monorepo projects, rewrite them to `.tmp/projects/<projectId>/main-wave-launcher/...` and launch the wave with `--project <projectId>`.
14
+
13
15
  **Commit message**: `Feat: land rollout substrate and desired-state records`
14
16
 
15
17
  ## Component promotions