@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.
- package/CHANGELOG.md +48 -0
- package/README.md +23 -8
- package/docs/README.md +5 -3
- package/docs/concepts/context7-vs-skills.md +1 -1
- package/docs/concepts/operating-modes.md +1 -1
- package/docs/concepts/what-is-a-wave.md +1 -1
- package/docs/guides/author-and-run-waves.md +14 -1
- package/docs/guides/monorepo-projects.md +226 -0
- package/docs/guides/planner.md +9 -2
- package/docs/guides/{recommendations-0.8.8.md → recommendations-0.9.0.md} +7 -7
- package/docs/plans/current-state.md +8 -6
- package/docs/plans/end-state-architecture.md +1 -1
- package/docs/plans/examples/wave-example-design-handoff.md +3 -1
- package/docs/plans/examples/wave-example-live-proof.md +6 -1
- package/docs/plans/examples/wave-example-rollout-fidelity.md +2 -0
- package/docs/plans/migration.md +21 -18
- package/docs/plans/wave-orchestrator.md +4 -4
- package/docs/reference/cli-reference.md +55 -51
- package/docs/reference/coordination-and-closure.md +1 -1
- package/docs/reference/npmjs-trusted-publishing.md +2 -2
- package/docs/reference/runtime-config/README.md +140 -12
- package/docs/reference/sample-waves.md +100 -5
- package/docs/reference/skills.md +1 -1
- package/docs/reference/wave-control.md +23 -5
- package/docs/roadmap.md +2 -2
- package/package.json +1 -1
- package/releases/manifest.json +37 -0
- package/scripts/wave-orchestrator/adhoc.mjs +49 -17
- package/scripts/wave-orchestrator/autonomous.mjs +49 -15
- package/scripts/wave-orchestrator/benchmark-external.mjs +23 -7
- package/scripts/wave-orchestrator/benchmark.mjs +33 -10
- package/scripts/wave-orchestrator/config.mjs +239 -24
- package/scripts/wave-orchestrator/control-cli.mjs +29 -23
- package/scripts/wave-orchestrator/coord-cli.mjs +22 -14
- package/scripts/wave-orchestrator/coordination-store.mjs +8 -0
- package/scripts/wave-orchestrator/dashboard-renderer.mjs +10 -3
- package/scripts/wave-orchestrator/dep-cli.mjs +47 -21
- package/scripts/wave-orchestrator/feedback.mjs +28 -11
- package/scripts/wave-orchestrator/human-input-resolution.mjs +5 -1
- package/scripts/wave-orchestrator/launcher.mjs +200 -112
- package/scripts/wave-orchestrator/planner.mjs +48 -27
- package/scripts/wave-orchestrator/project-profile.mjs +31 -8
- package/scripts/wave-orchestrator/proof-cli.mjs +18 -12
- package/scripts/wave-orchestrator/retry-cli.mjs +19 -13
- package/scripts/wave-orchestrator/shared.mjs +77 -14
- package/scripts/wave-orchestrator/traces.mjs +7 -0
- package/scripts/wave-orchestrator/wave-control-client.mjs +84 -16
- package/scripts/wave-orchestrator/wave-files.mjs +5 -1
- package/scripts/wave-orchestrator/wave-state-reducer.mjs +8 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,54 @@
|
|
|
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
|
+
|
|
34
|
+
## 0.8.9 - 2026-03-27
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
|
|
38
|
+
- The current release surface now points consistently at `0.8.9`, including the README, current-state notes, migration guide, release manifest, tracked install-state fixtures, and the versioned recommendations guide `docs/guides/recommendations-0.8.9.md`.
|
|
39
|
+
|
|
40
|
+
### Fixed And Hardened
|
|
41
|
+
|
|
42
|
+
- 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.
|
|
43
|
+
- Launcher transitions after design-only passes now stop on the actual design-gate blocker instead of falling through to a misleading downstream implementation `missing-result-envelope` failure.
|
|
44
|
+
- Trace bundle summary reconstruction now also resolves design packet report paths, so copied trace summaries stay aligned when design summaries are rebuilt from logs.
|
|
45
|
+
|
|
46
|
+
### Testing And Validation
|
|
47
|
+
|
|
48
|
+
- `pnpm exec vitest run --config vitest.config.ts test/wave-orchestrator/wave-state-reducer.test.ts test/wave-orchestrator/launcher.test.ts test/wave-orchestrator/traces.test.ts`
|
|
49
|
+
- `pnpm test`
|
|
50
|
+
- `node scripts/wave.mjs doctor --json`
|
|
51
|
+
- `node scripts/wave.mjs launch --lane main --dry-run --no-dashboard`
|
|
52
|
+
|
|
5
53
|
## 0.8.8 - 2026-03-27
|
|
6
54
|
|
|
7
55
|
### 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,18 +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.
|
|
107
|
-
- Release tag: [`v0.
|
|
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.
|
|
113
|
+
Highlights in `0.9.0`:
|
|
112
114
|
|
|
113
|
-
-
|
|
114
|
-
-
|
|
115
|
-
-
|
|
116
|
-
-
|
|
117
|
-
- Release docs, current-state notes, migration guidance, publishing instructions, and the packaged operator recommendations guide now point at the `0.8.8` 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.
|
|
118
119
|
|
|
119
120
|
Requirements:
|
|
120
121
|
|
|
@@ -125,6 +126,13 @@ Requirements:
|
|
|
125
126
|
- optional: `CONTEXT7_API_KEY` for launcher-side prefetch
|
|
126
127
|
- optional: `WAVE_CONTROL_AUTH_TOKEN` for remote Wave Control reporting
|
|
127
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
|
+
|
|
128
136
|
Install into another repo:
|
|
129
137
|
|
|
130
138
|
```bash
|
|
@@ -143,6 +151,10 @@ pnpm exec wave init --adopt-existing
|
|
|
143
151
|
|
|
144
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.
|
|
145
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
|
+
|
|
146
158
|
The starter surface includes:
|
|
147
159
|
|
|
148
160
|
- `docs/agents/wave-design-role.md`
|
|
@@ -171,6 +183,9 @@ pnpm exec wave launch --lane main --start-wave 0 --end-wave 0 --executor codex -
|
|
|
171
183
|
# Disable Wave Control reporting for a single launcher run
|
|
172
184
|
pnpm exec wave launch --lane main --no-telemetry
|
|
173
185
|
|
|
186
|
+
# Target a specific monorepo project
|
|
187
|
+
pnpm exec wave launch --project backend --lane main --dry-run --no-dashboard
|
|
188
|
+
|
|
174
189
|
# Inspect operator surfaces
|
|
175
190
|
pnpm exec wave feedback list --lane main --pending
|
|
176
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.
|
|
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.
|
|
47
|
-
Read [guides/recommendations-0.
|
|
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.
|
|
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.
|
package/docs/guides/planner.md
CHANGED
|
@@ -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.
|
|
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.8` 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.
|
|
3
|
-
summary: "How to use 0.
|
|
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.
|
|
6
|
+
# 0.9.0 Recommendations
|
|
7
7
|
|
|
8
|
-
Use this guide when you are adopting `0.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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
|