@chllming/wave-orchestration 0.8.8 → 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 (49) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.md +23 -8
  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.8.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 +37 -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 +200 -112
  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/traces.mjs +7 -0
  47. package/scripts/wave-orchestrator/wave-control-client.mjs +84 -16
  48. package/scripts/wave-orchestrator/wave-files.mjs +5 -1
  49. package/scripts/wave-orchestrator/wave-state-reducer.mjs +8 -1
@@ -5,6 +5,7 @@ This directory is the canonical reference for executor configuration in the pack
5
5
  Use it when you need the full supported surface for:
6
6
 
7
7
  - `wave.config.json`
8
+ - `defaultProject` and `projects.<projectId>`
8
9
  - `lanes.<lane>.executors`
9
10
  - `waveControl`
10
11
  - `executors.profiles.<profile>`
@@ -55,6 +56,121 @@ Then Wave filters configured skills through each bundle's activation metadata. E
55
56
 
56
57
  When retry-time fallback changes the runtime, Wave recomputes the effective skill set and rewrites the executor overlay before relaunch.
57
58
 
59
+ ## Projects
60
+
61
+ Wave can run multiple project tracks from one monorepo.
62
+
63
+ - `defaultProject` selects the implicit project when a command does not pass `--project`
64
+ - `projects.<projectId>.rootDir` relocates that project's default docs root under the repo
65
+ - `projects.<projectId>.paths.*` can relocate that project's docs, launcher-state, terminal-registry, Context7 bundle index, benchmark catalog, and component-matrix surfaces
66
+ - `projects.<projectId>.lanes.<lane>` owns lane-local runtime, planner, skill, and Wave Control overrides
67
+ - legacy top-level `lanes` still work as the implicit default project for backwards compatibility
68
+ - an explicit unknown `--project` is an error; Wave no longer falls back to `defaultProject` for typoed project ids
69
+
70
+ Example:
71
+
72
+ ```json
73
+ {
74
+ "defaultProject": "app",
75
+ "projects": {
76
+ "app": {
77
+ "rootDir": ".",
78
+ "lanes": {
79
+ "main": {}
80
+ }
81
+ },
82
+ "service": {
83
+ "rootDir": "services/api",
84
+ "lanes": {
85
+ "main": {}
86
+ }
87
+ }
88
+ }
89
+ }
90
+ ```
91
+
92
+ Supported `projects.<projectId>.paths.*` fields:
93
+
94
+ | Key | Purpose |
95
+ | --- | --- |
96
+ | `docsDir` | Project-local docs root used as the default base for docs, plans, waves, and matrix defaults |
97
+ | `stateRoot` | Base directory for launcher state, logs, overlays, telemetry, and projections |
98
+ | `orchestratorStateDir` | Base directory for project-scoped orchestrator message boards, feedback, and dependency state |
99
+ | `terminalsPath` | VS Code terminal registry written when `--terminal-surface vscode` is active |
100
+ | `context7BundleIndexPath` | Project-specific Context7 bundle index |
101
+ | `benchmarkCatalogPath` | Project-specific benchmark catalog for `cont-EVAL` and benchmark commands |
102
+ | `componentCutoverMatrixDocPath` | Project-specific component cutover matrix markdown |
103
+ | `componentCutoverMatrixJsonPath` | Project-specific component cutover matrix JSON |
104
+
105
+ Path resolution order:
106
+
107
+ 1. lane-specific override such as `projects.<projectId>.lanes.<lane>.terminalsPath`
108
+ 2. `projects.<projectId>.paths.*`
109
+ 3. repo-global `paths.*`
110
+ 4. built-in derived defaults for `docsDir`, `plansDir`, `wavesDir`, and matrix paths
111
+
112
+ Advanced monorepo example:
113
+
114
+ ```json
115
+ {
116
+ "defaultProject": "app",
117
+ "paths": {
118
+ "stateRoot": ".tmp",
119
+ "terminalsPath": ".vscode/terminals.json"
120
+ },
121
+ "projects": {
122
+ "app": {
123
+ "rootDir": ".",
124
+ "lanes": {
125
+ "main": {}
126
+ }
127
+ },
128
+ "service": {
129
+ "rootDir": "services/api",
130
+ "paths": {
131
+ "docsDir": "services/api/docs",
132
+ "stateRoot": ".tmp/service-wave",
133
+ "orchestratorStateDir": ".tmp/service-orchestrator",
134
+ "terminalsPath": ".vscode/service-terminals.json",
135
+ "context7BundleIndexPath": "services/api/docs/context7/bundles.json",
136
+ "benchmarkCatalogPath": "services/api/docs/evals/benchmark-catalog.json",
137
+ "componentCutoverMatrixDocPath": "services/api/docs/plans/component-cutover-matrix.md",
138
+ "componentCutoverMatrixJsonPath": "services/api/docs/plans/component-cutover-matrix.json"
139
+ },
140
+ "waveControl": {
141
+ "projectId": "service-api",
142
+ "reportMode": "metadata-plus-selected"
143
+ },
144
+ "lanes": {
145
+ "main": {
146
+ "runtimePolicy": {
147
+ "defaultExecutorByRole": {
148
+ "design": "claude",
149
+ "implementation": "codex",
150
+ "integration": "claude",
151
+ "documentation": "claude",
152
+ "cont-qa": "claude",
153
+ "cont-eval": "codex"
154
+ },
155
+ "runtimeMixTargets": {
156
+ "codex": 4,
157
+ "claude": 3,
158
+ "opencode": 1
159
+ },
160
+ "fallbackExecutorOrder": ["claude", "opencode", "codex"]
161
+ }
162
+ },
163
+ "release": {
164
+ "docsDir": "services/api/docs/release",
165
+ "plansDir": "services/api/docs/release/plans",
166
+ "wavesDir": "services/api/docs/release/plans/waves"
167
+ }
168
+ }
169
+ }
170
+ }
171
+ }
172
+ ```
173
+
58
174
  ## Common Fields
59
175
 
60
176
  These fields are shared across runtimes:
@@ -74,7 +190,7 @@ Practical guidance:
74
190
  - prefer `budget.minutes` for normal synthesis, integration, and closure work
75
191
  - use generic `budget.turns` as a planning hint, not a hard failure trigger
76
192
  - only set `claude.maxTurns` or `opencode.steps` when you deliberately want a hard ceiling for that runtime
77
- - see [../../guides/recommendations-0.8.8.md](../../guides/recommendations-0.8.8.md) for the recommended `0.8.8` operating stance that combines advisory turn budgets with softer non-proof coordination states
193
+ - see [../../guides/recommendations-0.9.0.md](../../guides/recommendations-0.9.0.md) for the recommended `0.9.0` operating stance that combines advisory turn budgets with softer non-proof coordination states
78
194
 
79
195
  ## Runtime Pages
80
196
 
@@ -86,16 +202,25 @@ Practical guidance:
86
202
 
87
203
  `wave.config.json` may also declare a `waveControl` block for local-first telemetry delivery.
88
204
 
205
+ Packaged defaults in `@chllming/wave-orchestration@0.9.0`:
206
+
207
+ - `endpoint`: `https://wave-control.up.railway.app/api/v1`
208
+ - `reportMode`: `metadata-only`
209
+ - `enabled`: `true`
210
+ - project-scoped telemetry identity defaults to the resolved `projectId`, then lane and wave metadata from the active run
211
+
212
+ This package is distributed with the author's personal Wave Control endpoint enabled by default. Anyone who does not want telemetry delivered back to that endpoint must explicitly opt out in config or per run.
213
+
89
214
  Supported top-level fields:
90
215
 
91
216
  | Key | Type | Default | Purpose |
92
217
  | --- | --- | --- | --- |
93
218
  | `enabled` | boolean | `true` | Master switch for local queueing and remote delivery |
94
- | `endpoint` | string | unset | Base URL for the Railway-hosted `services/wave-control` API |
219
+ | `endpoint` | string | `https://wave-control.up.railway.app/api/v1` | Base URL for the Railway-hosted `services/wave-control` API |
95
220
  | `workspaceId` | string | derived from repo path | Stable workspace identity used across runs |
96
- | `projectId` | string | derived from `projectName` | Stable project/repo identity used for cross-workspace reporting and filtering |
221
+ | `projectId` | string | resolved project id | Stable project identity used for cross-workspace reporting and filtering |
97
222
  | `authTokenEnvVar` | string | `WAVE_CONTROL_AUTH_TOKEN` | Environment variable name holding the bearer token |
98
- | `reportMode` | string | `metadata-plus-selected` | `disabled`, `metadata-only`, `metadata-plus-selected`, or `full-artifact-upload` |
223
+ | `reportMode` | string | `metadata-only` | `disabled`, `metadata-only`, `metadata-plus-selected`, or `full-artifact-upload` |
99
224
  | `uploadArtifactKinds` | string[] | selected proof/trace/benchmark kinds | Artifact classes eligible for body upload when an artifact's upload policy requests a body |
100
225
  | `requestTimeoutMs` | integer | `5000` | Per-batch network timeout |
101
226
  | `flushBatchSize` | integer | `25` | Max queued telemetry events flushed per batch |
@@ -105,11 +230,13 @@ Supported top-level fields:
105
230
  | `captureTraceBundles` | boolean | `true` | Emit finalized trace-bundle artifacts and gate snapshots |
106
231
  | `captureBenchmarkRuns` | boolean | `true` | Emit `benchmark_run`, `benchmark_item`, `verification`, and `review` events |
107
232
 
108
- Lane overrides may refine the same keys under `lanes.<lane>.waveControl`.
233
+ Lane overrides may refine the same keys under `lanes.<lane>.waveControl` or `projects.<projectId>.lanes.<lane>.waveControl`.
109
234
 
110
235
  One-run override:
111
236
 
112
237
  - `wave launch --no-telemetry` disables Wave Control queueing and remote delivery for that launcher invocation without changing the repo config.
238
+ - `waveControl.enabled: false` disables queueing and remote delivery for the repo or project.
239
+ - `waveControl.reportMode: "disabled"` disables remote reporting while leaving the config surface explicit.
113
240
 
114
241
  Example:
115
242
 
@@ -118,8 +245,8 @@ Example:
118
245
  "waveControl": {
119
246
  "endpoint": "https://wave-control.up.railway.app/api/v1",
120
247
  "workspaceId": "wave-main",
121
- "projectId": "wave-orchestration",
122
- "reportMode": "metadata-plus-selected",
248
+ "projectId": "app",
249
+ "reportMode": "metadata-only",
123
250
  "uploadArtifactKinds": [
124
251
  "trace-run-metadata",
125
252
  "trace-quality",
@@ -143,8 +270,8 @@ See [../wave-control.md](../wave-control.md) for the event contract and upload-p
143
270
 
144
271
  Wave writes runtime artifacts here:
145
272
 
146
- - live runs: `.tmp/<lane>-wave-launcher/executors/wave-<n>/<agent-slug>/`
147
- - dry-run previews: `.tmp/<lane>-wave-launcher/dry-run/executors/wave-<n>/<agent-slug>/`
273
+ - live runs: `.tmp/<lane>-wave-launcher/executors/wave-<n>/<agent-slug>/` for the implicit default project, or `.tmp/projects/<projectId>/<lane>-wave-launcher/executors/wave-<n>/<agent-slug>/` for explicit projects
274
+ - dry-run previews: `.tmp/<lane>-wave-launcher/dry-run/executors/wave-<n>/<agent-slug>/` for the implicit default project, or `.tmp/projects/<projectId>/<lane>-wave-launcher/dry-run/executors/wave-<n>/<agent-slug>/` for explicit projects
148
275
 
149
276
  Common files:
150
277
 
@@ -157,9 +284,10 @@ Common files:
157
284
  - `claude-settings.json`: generated Claude settings overlay when inline settings data is present
158
285
  - `opencode-agent-prompt.txt`: generated OpenCode harness prompt overlay
159
286
  - `opencode.json`: generated OpenCode runtime config overlay
160
- - `.tmp/<lane>-wave-launcher/control-plane/telemetry/events.jsonl`: local-first Wave Control event stream
161
- - `.tmp/<lane>-wave-launcher/control-plane/telemetry/pending/`: queued event batches awaiting remote delivery
162
- - `.tmp/<lane>-wave-launcher/control-plane/telemetry/delivery-state.json`: remote-delivery counters and last-error state
287
+ - `.tmp/<lane>-wave-launcher/control-plane/telemetry/events.jsonl`: local-first Wave Control event stream for the implicit default project
288
+ - `.tmp/projects/<projectId>/<lane>-wave-launcher/control-plane/telemetry/events.jsonl`: same stream for explicit projects
289
+ - `.tmp/.../control-plane/telemetry/pending/`: queued event batches awaiting remote delivery
290
+ - `.tmp/.../control-plane/telemetry/delivery-state.json`: remote-delivery counters and last-error state
163
291
 
164
292
  Runtime-specific delivery:
165
293
 
@@ -1,21 +1,23 @@
1
1
  ---
2
2
  title: "Sample Waves"
3
- summary: "Showcase-first sample waves that demonstrate the shipped 0.8.8 authored surface, including the optional design-role path."
3
+ summary: "Showcase-first sample waves that demonstrate the shipped 0.9.0 authored surface, including the optional design-role path."
4
4
  ---
5
5
 
6
6
  # Sample Waves
7
7
 
8
- This guide points to showcase-first sample waves that demonstrate the shipped `0.8.8` authored Wave surface.
8
+ This guide points to showcase-first sample waves that demonstrate the shipped `0.9.0` authored Wave surface.
9
9
 
10
10
  The examples are intentionally denser than typical production waves. Their job is to teach the current authoring and runtime surface quickly, not to be the smallest possible launch-ready files.
11
11
 
12
+ All example `.tmp/main-wave-launcher/...` paths assume the implicit default project. For explicit monorepo projects, rewrite those to `.tmp/projects/<projectId>/main-wave-launcher/...` and run the matching commands with `--project <projectId>`.
13
+
12
14
  ## Canonical Examples
13
15
 
14
16
  - [High-fidelity repo-landed rollout wave](../plans/examples/wave-example-rollout-fidelity.md)
15
17
  Shows what a good `repo-landed` outcome looks like when one promoted component only closes honestly if desired-state records, reconcile-loop substrate, and cluster-view surfaces land together. It emphasizes maturity discipline, explicit deliverables, and shared-plan closure without drifting into `pilot-live` claims.
16
18
 
17
19
  - [Full modern sample wave](../plans/examples/wave-example-live-proof.md)
18
- Shows the combined `0.8.8` authored surface in one file: closure roles, `E0`, optional security review, delegated and pinned benchmark targets, richer executor config, `### Skills`, `### Capabilities`, `### Deliverables`, `### Exit contract`, `### Proof artifacts`, sticky retry, deploy environments, and proof-first live-wave structure.
20
+ Shows the combined `0.9.0` authored surface in one file: closure roles, `E0`, optional security review, delegated and pinned benchmark targets, richer executor config, `### Skills`, `### Capabilities`, `### Deliverables`, `### Exit contract`, `### Proof artifacts`, sticky retry, deploy environments, and proof-first live-wave structure.
19
21
 
20
22
  - [Optional design-steward handoff wave](../plans/examples/wave-example-design-handoff.md)
21
23
  Shows the shipped design-role surface: one pre-implementation design steward publishes a design packet, downstream implementation owners read that packet before coding, and normal closure roles still decide final completion. For terminal or operator-surface work, pair that shape with explicit `tui-design` in the design steward's `### Skills`. For the hybrid variant, explicitly give that same design agent implementation-owned paths and the normal implementation contract sections.
@@ -39,10 +41,12 @@ The examples are intentionally denser than typical production waves. Their job i
39
41
  - deploy environments and provider-skill examples
40
42
  - infra and deploy-verifier specialist slices
41
43
  - optional pre-implementation design packets and design-to-implementation handoff
44
+ - security review before integration closure
45
+ - project-aware adaptation for launcher-owned `.tmp/...` paths
42
46
 
43
47
  ## Feature Coverage Map
44
48
 
45
- Together these samples cover the main surfaces added or hardened through `0.8.8`:
49
+ Together these samples cover the main surfaces added or hardened through `0.9.0`:
46
50
 
47
51
  - repo-landed maturity discipline and anti-overclaim framing
48
52
  - explicit shared-plan closure for future-wave safety
@@ -59,9 +63,100 @@ Together these samples cover the main surfaces added or hardened through `0.8.8`
59
63
  - sticky retry for proof-bearing owners
60
64
  - proof-first live-wave prompts
61
65
  - deploy environments and deploy-kind-aware skills
66
+ - optional security review before integration closure
67
+ - custom closure-role ids when a repo does not want the starter `A0`/`E0`/`A8`/`A9`/`A7` names
68
+ - signal-driven long-running watcher agents through `signal-hygiene`
69
+ - explicit-project launcher-state path rewrites for monorepos
62
70
  - integration, documentation, and cont-QA closure-role structure
63
71
  - optional `design` worker role and `design-pass` executor profile
64
72
 
73
+ ## Targeted Snippets For Narrower Surfaces
74
+
75
+ Some current features are real parts of the authored surface, but they do not belong in every full-length teaching wave. Use these snippets when you need those narrower shapes.
76
+
77
+ ### Custom Closure Role Ids
78
+
79
+ Wave resolves closure roles from the wave definition first, then from starter defaults. You can keep the same closure semantics while changing the ids:
80
+
81
+ ```md
82
+ ## Agent Q4: cont-QA
83
+
84
+ ### Role prompts
85
+
86
+ - docs/agents/wave-cont-qa-role.md
87
+
88
+ ## Agent V2: cont-EVAL
89
+
90
+ ### Role prompts
91
+
92
+ - docs/agents/wave-cont-eval-role.md
93
+
94
+ ## Agent I6: Integration Steward
95
+
96
+ ### Role prompts
97
+
98
+ - docs/agents/wave-integration-role.md
99
+
100
+ ## Agent D8: Documentation Steward
101
+
102
+ ### Role prompts
103
+
104
+ - docs/agents/wave-documentation-role.md
105
+
106
+ ## Agent S3: Security Review
107
+
108
+ ### Role prompts
109
+
110
+ - docs/agents/wave-security-role.md
111
+ ```
112
+
113
+ Keep the role prompt and closure meaning aligned even when the ids change. Launch, retry, derived state, and closure sequencing will honor the wave-level bindings.
114
+
115
+ ### Long-Running Watchers With `signal-hygiene`
116
+
117
+ Use `signal-hygiene` only for intentionally long-running non-resident agents that should wait on orchestrator-written signal changes instead of inventing their own polling protocol.
118
+
119
+ ````md
120
+ ## Agent R5: Runtime Watcher
121
+
122
+ ### Executor
123
+
124
+ - id: codex
125
+ - retry-policy: sticky
126
+
127
+ ### Skills
128
+
129
+ - role-research
130
+ - runtime-codex
131
+ - signal-hygiene
132
+
133
+ ### Prompt
134
+
135
+ ```text
136
+ Primary goal:
137
+ - Stay alive between orchestrator signal changes and only resume work after acknowledging the next visible signal version.
138
+
139
+ Specific expectations:
140
+ - use the prompt-visible signal state path and ack path exactly as provided
141
+ - do not create a second polling file or custom wakeup loop
142
+ - emit normal structured coordination records when new evidence or blockers appear
143
+ ```
144
+ ````
145
+
146
+ Pair that snippet with [signal-wrappers.md](../guides/signal-wrappers.md) when shell automation or external wait loops also need to observe the same signal surface.
147
+
148
+ ### Project-Aware Launcher-Owned Paths
149
+
150
+ When copying a proof-first example into an explicit monorepo project, update launcher-owned file paths as well as the runtime command:
151
+
152
+ ```md
153
+ File ownership (only touch these paths):
154
+ - .tmp/projects/service/main-wave-launcher/integration/wave-14.md
155
+ - .tmp/projects/service/main-wave-launcher/integration/wave-14.json
156
+ ```
157
+
158
+ The same rewrite applies to proof bundles, logs, dashboards, coordination state, and telemetry spools under `.tmp/<lane>-wave-launcher/...`.
159
+
65
160
  ## When To Copy Literally Vs Adapt
66
161
 
67
162
  Copy more literally when:
@@ -89,7 +184,7 @@ Adapt more aggressively when:
89
184
  ## Suggested Reading Order
90
185
 
91
186
  1. Start with [High-fidelity repo-landed rollout wave](../plans/examples/wave-example-rollout-fidelity.md) if you want the clearest example of good closure-ready wave fidelity for a repo-only outcome.
92
- 2. Read [Full modern sample wave](../plans/examples/wave-example-live-proof.md) if you want the denser proof-first and eval-heavy `0.8.8` surface.
187
+ 2. Read [Full modern sample wave](../plans/examples/wave-example-live-proof.md) if you want the denser proof-first and eval-heavy `0.9.0` surface.
93
188
  3. Read [Optional design-steward handoff wave](../plans/examples/wave-example-design-handoff.md) if the task needs a design packet before implementation fan-out.
94
189
  4. Read [docs/evals/README.md](../evals/README.md) if you want more background on benchmark target selection.
95
190
  5. Read [docs/reference/live-proof-waves.md](./live-proof-waves.md) if you want more detail on proof-first `pilot-live` authoring.
@@ -124,7 +124,7 @@ Top-level and lane-local skill attachment use the same shape:
124
124
 
125
125
  Lane-local `lanes.<lane>.skills` extends the global config instead of replacing it.
126
126
 
127
- Optional design workers in the shipped `0.8.8` surface normally attach `role-design`. That bundle is intended for docs/spec-first design packets and explicit implementation handoff work before implementation starts. When the design packet covers terminal UX, dashboards, or other operator surfaces, add `tui-design` explicitly in the wave's `### Skills`.
127
+ Optional design workers in the shipped `0.9.0` surface normally attach `role-design`. That bundle is intended for docs/spec-first design packets and explicit implementation handoff work before implementation starts. When the design packet covers terminal UX, dashboards, or other operator surfaces, add `tui-design` explicitly in the wave's `### Skills`.
128
128
 
129
129
  Long-running agents that should stay resident and react only to orchestrator signal changes can add `signal-hygiene` explicitly in `### Skills`. That bundle is not auto-attached and is not meant for normal one-shot implementation agents.
130
130
 
@@ -129,7 +129,6 @@ Upload policy meanings:
129
129
 
130
130
  - `local-only`: keep only the descriptor remotely
131
131
  - `metadata-only`: report path, hash, size, and presence only
132
- - `selected`: upload metadata plus the artifact body when the runtime is in `metadata-plus-selected`
133
132
  - `selected`: upload metadata plus the artifact body when the runtime is in `metadata-plus-selected` or `full-artifact-upload` **and** the artifact kind is allowed by `waveControl.uploadArtifactKinds`
134
133
  - `full`: upload the artifact body in `full-artifact-upload` flows; if `uploadArtifactKinds` is set, keep the kind allowlist aligned with that policy
135
134
 
@@ -142,9 +141,9 @@ Upload policy meanings:
142
141
  "waveControl": {
143
142
  "endpoint": "https://wave-control.up.railway.app/api/v1",
144
143
  "workspaceId": "my-workspace",
145
- "projectId": "wave-orchestration",
144
+ "projectId": "app",
146
145
  "authTokenEnvVar": "WAVE_CONTROL_AUTH_TOKEN",
147
- "reportMode": "metadata-plus-selected",
146
+ "reportMode": "metadata-only",
148
147
  "uploadArtifactKinds": [
149
148
  "trace-run-metadata",
150
149
  "trace-quality",
@@ -154,7 +153,16 @@ Upload policy meanings:
154
153
  }
155
154
  ```
156
155
 
157
- Lane overrides may refine the same surface under `lanes.<lane>.waveControl`.
156
+ Packaged defaults:
157
+
158
+ - endpoint: `https://wave-control.up.railway.app/api/v1`
159
+ - enabled: `true`
160
+ - report mode: `metadata-only`
161
+ - identity defaults to the resolved project, lane, wave, run kind, and run id
162
+
163
+ This package is distributed with the author's personal Wave Control endpoint enabled by default. Repos that do not want telemetry delivered there must explicitly opt out.
164
+
165
+ Lane overrides may refine the same surface under `lanes.<lane>.waveControl` or `projects.<projectId>.lanes.<lane>.waveControl`.
158
166
 
159
167
  For a single run, operators can disable Wave Control reporting entirely with:
160
168
 
@@ -162,6 +170,16 @@ For a single run, operators can disable Wave Control reporting entirely with:
162
170
  pnpm exec wave launch --lane main --no-telemetry
163
171
  ```
164
172
 
173
+ Repo or project config may also opt out with:
174
+
175
+ ```json
176
+ {
177
+ "waveControl": {
178
+ "enabled": false
179
+ }
180
+ }
181
+ ```
182
+
165
183
  That suppresses the local telemetry spool and remote delivery for that invocation, while leaving the canonical runtime artifacts and local control-plane state intact.
166
184
 
167
185
  ## Delivery Model
@@ -169,7 +187,7 @@ That suppresses the local telemetry spool and remote delivery for that invocatio
169
187
  Wave Control reporting should:
170
188
 
171
189
  - append local telemetry first
172
- - queue pending uploads under `.tmp/<lane>-wave-launcher/control-plane/telemetry/`
190
+ - queue pending uploads 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
173
191
  - respect `waveControl.uploadArtifactKinds` before uploading any selected artifact body
174
192
  - cap pending remote uploads with `waveControl.maxPendingEvents` by dropping the oldest queued remote-delivery files, while keeping the local `events.jsonl` stream intact
175
193
  - retry delivery with idempotency keys
package/docs/roadmap.md CHANGED
@@ -49,7 +49,7 @@ Generated waves and transient ad-hoc runs should default to these sections when
49
49
 
50
50
  Status: shipped in `0.5.4`.
51
51
 
52
- - Add saved project bootstrap memory in `.wave/project-profile.json`.
52
+ - Add saved project bootstrap memory in `.wave/project-profile.json` for the implicit default project, with project-scoped profiles under `.wave/projects/<projectId>/project-profile.json` for explicit monorepo projects.
53
53
  - Ask once whether the repo is a new project and keep that answer for future drafts.
54
54
  - Add `wave project setup` and `wave project show`.
55
55
  - Add interactive `wave draft` that writes:
@@ -91,7 +91,7 @@ Behavior:
91
91
  Storage model:
92
92
 
93
93
  - do not write ad-hoc runs into the canonical numbered wave sequence under `docs/plans/waves/`
94
- - store the original request, generated spec, rendered markdown, and final result under `.wave/adhoc/runs/<run-id>/`
94
+ - store the original request, generated spec, rendered markdown, and final result under `.wave/adhoc/<projectId>/runs/<run-id>/` for explicit projects, while the implicit default project keeps the legacy layout
95
95
  - keep runtime state isolated under `.tmp/<lane>-wave-launcher/adhoc/<run-id>/`
96
96
  - extend trace metadata with `runKind: adhoc` and `runId`
97
97
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chllming/wave-orchestration",
3
- "version": "0.8.8",
3
+ "version": "0.9.0",
4
4
  "license": "MIT",
5
5
  "description": "Generic wave-based multi-agent orchestration for repository work.",
6
6
  "repository": {
@@ -2,6 +2,43 @@
2
2
  "schemaVersion": 1,
3
3
  "packageName": "@chllming/wave-orchestration",
4
4
  "releases": [
5
+ {
6
+ "version": "0.9.0",
7
+ "date": "2026-03-28",
8
+ "summary": "First-class monorepo project support, project-aware runtime isolation, default Wave Control metadata delivery, and 0.9.0 release-surface alignment.",
9
+ "features": [
10
+ "Wave configs can now declare `defaultProject` and `projects.<projectId>`, so one repo can host multiple projects with isolated lane roots, docs roots, planner defaults, and runtime state.",
11
+ "Lane-scoped CLI surfaces now accept `--project`, including launch, autonomous, dashboard, control, coordination, dependencies, ad-hoc work, proof, retry, feedback, drafting, and benchmarks.",
12
+ "Planner defaults, ad-hoc runs, dependency tickets, tmux naming, launcher state, and benchmark identity are now project-aware, which prevents same-lane-name collisions in monorepos.",
13
+ "Wave Control now defaults to `https://wave-control.up.railway.app/api/v1` with `reportMode: \"metadata-only\"`, and benchmark plus runtime metadata now include project, lane, and wave identity unless explicitly opted out.",
14
+ "Planner migration guidance and the `planner-agentic` bundle placeholder remain part of the shipped current-surface docs so adopted repos still have one aligned upgrade target.",
15
+ "README, current-state notes, migration guidance, runtime-config docs, coordination docs, the new monorepo guide, the versioned recommendations guide, release manifest, and tracked install-state fixtures now all point at the `0.9.0` package surface."
16
+ ],
17
+ "manualSteps": [
18
+ "Run `pnpm exec wave doctor` and `pnpm exec wave launch --lane main --dry-run --no-dashboard` after upgrading so the repo validates against the `0.9.0` release surface.",
19
+ "If your repo copied starter docs or runbooks, sync `README.md`, `docs/README.md`, `docs/plans/current-state.md`, `docs/plans/migration.md`, `docs/reference/coordination-and-closure.md`, `docs/reference/runtime-config/README.md`, `docs/guides/monorepo-projects.md`, and `docs/guides/recommendations-0.9.0.md` so local guidance matches the packaged release.",
20
+ "If your repo copied starter `wave.config.json` defaults or automation around lane-only state paths, update them for `defaultProject`, `projects.<projectId>`, project-scoped `.wave/projects/<projectId>/project-profile.json`, project-scoped ad-hoc storage, and explicit telemetry opt-out controls before relying on monorepo behavior."
21
+ ],
22
+ "breaking": false
23
+ },
24
+ {
25
+ "version": "0.8.9",
26
+ "date": "2026-03-27",
27
+ "summary": "Design-gate report-path preservation, accurate post-design failure reporting, trace-summary alignment, and 0.8.9 release-surface sync.",
28
+ "features": [
29
+ "Reducer snapshots now preserve design packet report paths when rebuilding summaries from result envelopes, so `designGate` no longer reopens as `missing-design-packet` after a successful design pass.",
30
+ "Launcher transitions after design-only passes now stop on the actual design-gate blocker and record a design-specific blocker instead of falling through to a misleading downstream implementation `missing-result-envelope` error.",
31
+ "Trace bundle summary reconstruction now also resolves design packet report paths, so copied trace summaries stay aligned when design summaries are rebuilt from logs.",
32
+ "README, current-state notes, migration guidance, release manifest, tracked install-state fixtures, and the versioned recommendations guide now all point at the `0.8.9` package surface.",
33
+ "Planner migration guidance and the `planner-agentic` bundle placeholder remain part of the shipped current-surface docs so adopted repos still have one aligned upgrade target."
34
+ ],
35
+ "manualSteps": [
36
+ "Run `pnpm exec wave doctor` and `pnpm exec wave launch --lane main --dry-run --no-dashboard` after upgrading so the repo validates against the `0.8.9` release surface.",
37
+ "If your repo copied current-surface docs or runbooks, sync `README.md`, `docs/README.md`, `docs/plans/current-state.md`, `docs/plans/migration.md`, `docs/reference/coordination-and-closure.md`, `docs/reference/runtime-config/README.md`, and `docs/guides/recommendations-0.8.9.md` so local guidance matches the packaged release.",
38
+ "If your repo copied trace or replay helpers around design packets, sync the updated reducer, launcher, and trace-summary reconstruction behavior before relying on rebuilt design summaries in replay tooling."
39
+ ],
40
+ "breaking": false
41
+ },
5
42
  {
6
43
  "version": "0.8.8",
7
44
  "date": "2026-03-27",