@chllming/wave-orchestration 0.8.3 → 0.8.4
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 +19 -0
- package/README.md +47 -11
- package/docs/README.md +6 -2
- package/docs/concepts/what-is-a-wave.md +1 -1
- package/docs/plans/architecture-hardening-migration.md +8 -1
- package/docs/plans/current-state.md +15 -7
- package/docs/plans/end-state-architecture.md +82 -69
- package/docs/plans/examples/wave-example-live-proof.md +1 -1
- package/docs/plans/migration.md +235 -62
- package/docs/plans/wave-orchestrator.md +37 -11
- package/docs/reference/cli-reference.md +34 -14
- package/docs/reference/coordination-and-closure.md +19 -6
- package/docs/reference/npmjs-trusted-publishing.md +5 -4
- package/docs/reference/sample-waves.md +4 -4
- package/package.json +1 -1
- package/releases/manifest.json +20 -0
- package/scripts/wave-orchestrator/agent-state.mjs +0 -491
- package/scripts/wave-orchestrator/autonomous.mjs +10 -6
- package/scripts/wave-orchestrator/{launcher-closure.mjs → closure-engine.mjs} +190 -74
- package/scripts/wave-orchestrator/{launcher-derived-state.mjs → derived-state-engine.mjs} +34 -146
- package/scripts/wave-orchestrator/{launcher-gates.mjs → gate-engine.mjs} +395 -139
- package/scripts/wave-orchestrator/human-input-resolution.mjs +14 -10
- package/scripts/wave-orchestrator/human-input-workflow.mjs +104 -0
- package/scripts/wave-orchestrator/implementation-engine.mjs +120 -0
- package/scripts/wave-orchestrator/launcher-runtime.mjs +5 -6
- package/scripts/wave-orchestrator/launcher.mjs +271 -724
- package/scripts/wave-orchestrator/projection-writer.mjs +256 -0
- package/scripts/wave-orchestrator/reconcile-format.mjs +32 -0
- package/scripts/wave-orchestrator/reducer-snapshot.mjs +297 -0
- package/scripts/wave-orchestrator/replay.mjs +3 -1
- package/scripts/wave-orchestrator/result-envelope.mjs +589 -0
- package/scripts/wave-orchestrator/retry-control.mjs +5 -0
- package/scripts/wave-orchestrator/{launcher-retry.mjs → retry-engine.mjs} +267 -18
- package/scripts/wave-orchestrator/role-helpers.mjs +51 -0
- package/scripts/wave-orchestrator/{launcher-supervisor.mjs → session-supervisor.mjs} +178 -103
- package/scripts/wave-orchestrator/shared.mjs +1 -0
- package/scripts/wave-orchestrator/traces.mjs +10 -1
- package/scripts/wave-orchestrator/wave-files.mjs +11 -9
- package/scripts/wave-orchestrator/wave-state-reducer.mjs +52 -5
package/docs/plans/migration.md
CHANGED
|
@@ -1,102 +1,275 @@
|
|
|
1
1
|
# Migration
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This page is the operator-facing upgrade guide for adopting repos. It explains how to move from older Wave package versions onto the current `0.8.4` surface without guessing which files are package-owned, which files are repo-owned, and which validations to trust after the bump.
|
|
4
|
+
|
|
5
|
+
For the completed internal architecture cutover record, see [architecture-hardening-migration.md](./architecture-hardening-migration.md). That document is historical. This one is the practical repo-upgrade checklist.
|
|
6
|
+
|
|
7
|
+
## What `0.8.4` Changes
|
|
8
|
+
|
|
9
|
+
`0.8.4` is a hardening release, not a new authoring model.
|
|
10
|
+
|
|
11
|
+
- contradiction replay no longer depends on component-matrix parsing when the trace does not declare promoted components
|
|
12
|
+
- `requireComponentPromotionsFromWave` now disables both component-promotion proof blocking and component-matrix current-level blocking before the configured threshold
|
|
13
|
+
- `projection-writer.mjs` is now the single persistence layer for projection outputs, while `derived-state-engine.mjs` computes those payloads without persisting them directly
|
|
14
|
+
- starter docs, release notes, README, and publishing guidance now describe the shipped runtime instead of transitional architecture claims
|
|
15
|
+
|
|
16
|
+
There are no new CLI flags or wave-file section requirements in `0.8.4`.
|
|
17
|
+
|
|
18
|
+
## Upgrade Contract
|
|
19
|
+
|
|
20
|
+
- `pnpm up @chllming/wave-orchestration` updates the runtime in `node_modules`.
|
|
21
|
+
- `pnpm exec wave upgrade` writes `.wave/install-state.json` and `.wave/upgrade-history/*` only.
|
|
22
|
+
- `wave upgrade` does not rewrite repo-owned `wave.config.json`, `docs/agents/*`, `docs/plans/waves/*`, `skills/*`, `docs/context7/*`, or repo-specific reference docs.
|
|
23
|
+
- `.tmp/<lane>-wave-launcher/` is runtime state, not migration source of truth. Do not treat old generated artifacts as the thing to preserve.
|
|
4
24
|
|
|
5
25
|
## Default Adoption Path
|
|
6
26
|
|
|
27
|
+
Use this when the repo is not already running Wave or you are replacing a very old local starter copy.
|
|
28
|
+
|
|
7
29
|
1. Install the package from npmjs with `pnpm add -D @chllming/wave-orchestration`.
|
|
8
30
|
2. For a fresh repo, run `pnpm exec wave init`.
|
|
9
|
-
3. For a repo that already
|
|
10
|
-
4.
|
|
11
|
-
5. Replace
|
|
12
|
-
6.
|
|
13
|
-
7. Run `pnpm exec wave doctor` and `pnpm exec wave launch --lane main --dry-run --no-dashboard` until validation passes.
|
|
14
|
-
8. Inspect seeded coordination and inbox artifacts with `pnpm exec wave coord show --lane main --wave 0 --dry-run --json` and `pnpm exec wave coord inbox --lane main --wave 0 --agent A1 --dry-run`.
|
|
15
|
-
9. Upgrade later with `pnpm up @chllming/wave-orchestration` and `pnpm exec wave upgrade`.
|
|
31
|
+
3. For a repo that already owns Wave config, docs, or waves, run `pnpm exec wave init --adopt-existing`.
|
|
32
|
+
4. Review `wave.config.json` for docs roots, roles, validation thresholds, executor defaults, skill attachments, Context7 bundles, and component-cutover matrix paths.
|
|
33
|
+
5. Replace starter sample plans, starter skills, and starter prompts with repo-owned versions where needed.
|
|
34
|
+
6. Run the validation checklist in this doc before the first live launcher run.
|
|
16
35
|
|
|
17
|
-
GitHub Packages remains
|
|
36
|
+
GitHub Packages remains an authenticated fallback install path, but npmjs is the default public distribution channel.
|
|
18
37
|
|
|
19
|
-
## Upgrade
|
|
38
|
+
## Safe Upgrade Flow For Any Existing Repo
|
|
39
|
+
|
|
40
|
+
Use this flow before the version-specific sections below.
|
|
20
41
|
|
|
21
|
-
|
|
22
|
-
- `wave upgrade` writes `.wave/install-state.json` and `.wave/upgrade-history/*` only.
|
|
23
|
-
- Existing `wave.config.json`, role prompts, plan docs, `skills/` bundles, Context7 bundles, and wave files are never overwritten by the upgrade flow.
|
|
24
|
-
- Fresh `wave init` seeds the starter `skills/` library. `wave init --adopt-existing` records existing repo-owned skill bundles when they are already present, but does not replace or rewrite them.
|
|
25
|
-
- The current runtime expects the post-roadmap model: typed coordination, compiled inboxes, `A8` integration, staged closure, orchestrator-first clarification, and operational runtime policy.
|
|
42
|
+
### 1. Upgrade When The Lane Is Idle
|
|
26
43
|
|
|
27
|
-
|
|
44
|
+
- Prefer upgrading between waves, not mid-attempt.
|
|
45
|
+
- If a lane still has running sessions, finish or intentionally stop that attempt before changing package versions.
|
|
46
|
+
- If a repo is stranded after a prior crash, inspect `wave control status` first, then decide whether to relaunch or reconcile on the upgraded package.
|
|
28
47
|
|
|
29
|
-
|
|
48
|
+
### 2. Bump The Package
|
|
30
49
|
|
|
31
|
-
|
|
50
|
+
```bash
|
|
51
|
+
pnpm up @chllming/wave-orchestration
|
|
52
|
+
pnpm exec wave upgrade
|
|
53
|
+
```
|
|
32
54
|
|
|
33
|
-
|
|
55
|
+
### 3. Sync Repo-Owned Starter Surface Only If You Copied It
|
|
34
56
|
|
|
35
|
-
|
|
57
|
+
If your repo copied package-owned starter docs, prompts, or skills instead of treating them as read-only package material, sync the copied files that you still want to match upstream.
|
|
36
58
|
|
|
37
|
-
|
|
59
|
+
The common sync set is:
|
|
38
60
|
|
|
61
|
+
- `docs/agents/wave-launcher-role.md`
|
|
62
|
+
- `docs/agents/wave-orchestrator-role.md`
|
|
39
63
|
- `docs/agents/wave-planner-role.md`
|
|
64
|
+
- `skills/wave-core/`
|
|
40
65
|
- `skills/role-planner/`
|
|
66
|
+
- runtime and closure-role starter skills under `skills/`
|
|
41
67
|
- `docs/context7/planner-agent/`
|
|
42
68
|
- `docs/reference/wave-planning-lessons.md`
|
|
43
|
-
-
|
|
69
|
+
- `docs/plans/current-state.md`
|
|
70
|
+
- `docs/plans/end-state-architecture.md`
|
|
71
|
+
- `docs/plans/wave-orchestrator.md`
|
|
72
|
+
- `docs/plans/migration.md`
|
|
44
73
|
|
|
45
|
-
If
|
|
74
|
+
If your repo never copied those starter files, do not invent migration work. The installed package already carries the new runtime behavior.
|
|
46
75
|
|
|
47
|
-
-
|
|
48
|
-
- `docs/agents/wave-orchestrator-role.md`
|
|
49
|
-
- `skills/wave-core/`
|
|
50
|
-
- the relevant runtime and closure-role starter skills under `skills/`
|
|
51
|
-
- `docs/plans/architecture-hardening-migration.md`
|
|
76
|
+
### 4. Re-validate Before A Live Run
|
|
52
77
|
|
|
53
|
-
|
|
78
|
+
Run these from the repo root:
|
|
54
79
|
|
|
55
|
-
|
|
80
|
+
```bash
|
|
81
|
+
pnpm exec wave doctor
|
|
82
|
+
pnpm exec wave launch --lane main --dry-run --no-dashboard
|
|
83
|
+
pnpm exec wave control status --lane main --wave 0 --json
|
|
84
|
+
pnpm exec wave coord inbox --lane main --wave 0 --agent A1 --dry-run
|
|
85
|
+
```
|
|
56
86
|
|
|
57
|
-
|
|
58
|
-
2. Run `pnpm exec wave launch --lane main --dry-run --no-dashboard`.
|
|
59
|
-
3. Use `pnpm exec wave dashboard --lane <lane> --attach current` or `--attach global` when you need to reattach to a live tmux-backed dashboard without reverse-engineering the socket or session name.
|
|
60
|
-
4. If your operators answer human-input tickets through `wave feedback respond`, update any repo-local runbooks so ad-hoc runs always pass `--run <id>` when responding outside the main roadmap lane.
|
|
87
|
+
Use `pnpm exec wave dashboard --lane <lane> --attach current` or `--attach global` when you need to reattach to an existing tmux-backed dashboard after the upgrade.
|
|
61
88
|
|
|
62
|
-
##
|
|
89
|
+
## Version-Specific Upgrade Guidance
|
|
63
90
|
|
|
64
|
-
|
|
91
|
+
## Upgrading From `0.8.3` To `0.8.4`
|
|
65
92
|
|
|
66
|
-
|
|
93
|
+
This is the smallest migration.
|
|
67
94
|
|
|
68
|
-
|
|
69
|
-
2. Keep `A0` as the final closure owner that emits both the final verdict and `[wave-gate]`.
|
|
70
|
-
3. Add `E0` only when the wave needs benchmark-driven tuning or service-output evaluation.
|
|
71
|
-
4. Add wave-level `## Eval targets` whenever `cont-EVAL` is present.
|
|
72
|
-
5. Update any starter docs or examples that still describe the pre-`0.6.1` evaluator model.
|
|
95
|
+
### What changed
|
|
73
96
|
|
|
74
|
-
|
|
97
|
+
- contradiction replay for non-promoted traces is now independent of component-matrix parsing
|
|
98
|
+
- component-promotion threshold handling is now consistent between proof validation and matrix-current-level validation
|
|
99
|
+
- projection output writes are centralized in `projection-writer.mjs`
|
|
100
|
+
|
|
101
|
+
### Required repo changes
|
|
102
|
+
|
|
103
|
+
None for wave shape, config keys, or CLI usage.
|
|
104
|
+
|
|
105
|
+
### Recommended checks
|
|
106
|
+
|
|
107
|
+
1. Re-run `pnpm exec wave doctor`.
|
|
108
|
+
2. Re-run `pnpm exec wave launch --lane main --dry-run --no-dashboard`.
|
|
109
|
+
3. If your repo copied starter architecture docs or starter skills, sync them so local runbooks stop describing the older split projection behavior.
|
|
110
|
+
4. If you keep historical trace fixtures, replay at least one contradiction-blocked trace and one promoted-component trace after the upgrade.
|
|
111
|
+
|
|
112
|
+
## Upgrading From `0.8.0`-`0.8.2` To `0.8.4`
|
|
113
|
+
|
|
114
|
+
Treat this as one upgrade to the current surface.
|
|
115
|
+
|
|
116
|
+
### What changed across that range
|
|
117
|
+
|
|
118
|
+
- completed-wave `wave control status` projection hardened in `0.8.2`
|
|
119
|
+
- human-input reconciliation and ad-hoc `--run <id>` context hardening landed in `0.8.3`
|
|
120
|
+
- contradiction replay, component-threshold consistency, and projection-writer centralization landed in `0.8.4`
|
|
121
|
+
|
|
122
|
+
### Required repo changes
|
|
123
|
+
|
|
124
|
+
Usually none for config shape.
|
|
125
|
+
|
|
126
|
+
### Strongly recommended sync
|
|
127
|
+
|
|
128
|
+
If your repo copied upstream starter docs or skills, sync:
|
|
129
|
+
|
|
130
|
+
- the current operator runbook and architecture docs
|
|
131
|
+
- the launcher and orchestrator role prompts
|
|
132
|
+
- the relevant runtime skills and closure-role starter skills
|
|
133
|
+
|
|
134
|
+
### Validation focus
|
|
135
|
+
|
|
136
|
+
- check that completed waves do not show stale blockers through `wave control status`
|
|
137
|
+
- answer at least one human-feedback ticket in a test lane and confirm the linked clarification or escalation chain closes cleanly
|
|
138
|
+
- replay one contradiction-blocked trace if your repo relies on trace-based regression checks
|
|
139
|
+
|
|
140
|
+
## Upgrading From `0.6.x` Or `0.7.x` To `0.8.4`
|
|
141
|
+
|
|
142
|
+
This is the main migration path for older adopted repos.
|
|
143
|
+
|
|
144
|
+
### Behavioral changes you must account for
|
|
145
|
+
|
|
146
|
+
- `wave control` is the preferred operator surface for status, rerun, proof, and telemetry work
|
|
147
|
+
- `cont-QA` and optional `cont-EVAL` remain distinct closure roles; older overloaded evaluator language should be removed
|
|
148
|
+
- planner corpus files are now treated as required starter surface for repos that use planner workflows
|
|
149
|
+
- live closure depends on validated result envelopes plus canonical state, not only older summary-era behavior
|
|
150
|
+
- control-plane state, reducer state, and replay are now first-class runtime surfaces, not optional internals
|
|
151
|
+
|
|
152
|
+
### Required repo changes
|
|
153
|
+
|
|
154
|
+
1. Remove or rename any legacy `evaluator` role/config terminology to `cont-QA`.
|
|
155
|
+
2. Keep `A0` as the final closure owner and add `E0` only when the wave needs eval-driven tuning.
|
|
156
|
+
3. Add wave-level `## Eval targets` whenever `cont-EVAL` is present.
|
|
157
|
+
4. Sync the planner starter corpus if the repo uses `wave project` or `wave draft`:
|
|
158
|
+
- `docs/agents/wave-planner-role.md`
|
|
159
|
+
- `skills/role-planner/`
|
|
160
|
+
- `docs/context7/planner-agent/`
|
|
161
|
+
- `docs/reference/wave-planning-lessons.md`
|
|
162
|
+
- the `planner-agentic` entry in `docs/context7/bundles.json`
|
|
163
|
+
5. Review any repo-owned docs or internal runbooks that still describe one overloaded evaluator role, marker-era closure, or pre-control-plane retry/proof workflow.
|
|
164
|
+
|
|
165
|
+
### Additional validation
|
|
166
|
+
|
|
167
|
+
Run the default validation set, then also check:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
pnpm exec wave control status --lane main --wave 0 --json
|
|
171
|
+
pnpm exec wave control rerun get --lane main --wave 0 --json
|
|
172
|
+
pnpm exec wave control proof get --lane main --wave 0 --json
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
If your repo carries proof-first waves, verify that required proof artifacts are still present locally and not only in historical summaries.
|
|
176
|
+
|
|
177
|
+
## Upgrading From `0.5.x` Or Earlier To `0.8.4`
|
|
178
|
+
|
|
179
|
+
Do not treat this as a tiny patch bump.
|
|
180
|
+
|
|
181
|
+
### Recommended approach
|
|
182
|
+
|
|
183
|
+
1. Read [docs/reference/migration-0.2-to-0.5.md](../reference/migration-0.2-to-0.5.md) first if the repo still looks pre-`0.5`.
|
|
184
|
+
2. Run `pnpm exec wave init --adopt-existing` on a branch so the workspace records install state without overwriting repo-owned material.
|
|
185
|
+
3. Move the repo onto the `0.6.x` and later surface using the section above.
|
|
186
|
+
4. Re-run the full validation checklist before any live executor run.
|
|
187
|
+
|
|
188
|
+
### Why
|
|
189
|
+
|
|
190
|
+
Older repos often differ in:
|
|
191
|
+
|
|
192
|
+
- role naming
|
|
193
|
+
- closure ordering
|
|
194
|
+
- runtime config keys
|
|
195
|
+
- planner starter corpus
|
|
196
|
+
- proof and retry operator surfaces
|
|
197
|
+
- generated state layout under `.tmp/`
|
|
198
|
+
|
|
199
|
+
Trying to jump directly with ad hoc edits usually leaves hidden drift in prompts, docs, or config.
|
|
200
|
+
|
|
201
|
+
## Repo-Owned Files To Audit During Any Upgrade
|
|
202
|
+
|
|
203
|
+
These are the highest-value files to check when a repo copied starter surface instead of reading from the package.
|
|
204
|
+
|
|
205
|
+
### Prompts and skills
|
|
75
206
|
|
|
76
|
-
- `wave.config.json`
|
|
77
|
-
Remove or rename `roles.evaluator*`, `skills.byRole.evaluator`, and `runtimePolicy.defaultExecutorByRole.evaluator`.
|
|
78
207
|
- `docs/agents/*.md`
|
|
79
|
-
|
|
208
|
+
- `skills/*`
|
|
209
|
+
- `docs/context7/bundles.json`
|
|
210
|
+
- `docs/context7/planner-agent/`
|
|
211
|
+
|
|
212
|
+
### Operator docs and runbooks
|
|
213
|
+
|
|
214
|
+
- `docs/plans/current-state.md`
|
|
215
|
+
- `docs/plans/wave-orchestrator.md`
|
|
216
|
+
- `docs/plans/end-state-architecture.md`
|
|
217
|
+
- `docs/plans/migration.md`
|
|
218
|
+
- `docs/reference/cli-reference.md`
|
|
219
|
+
- `docs/reference/wave-control.md`
|
|
220
|
+
- `docs/reference/sample-waves.md`
|
|
221
|
+
|
|
222
|
+
### Config and wave contracts
|
|
223
|
+
|
|
224
|
+
- `wave.config.json`
|
|
80
225
|
- `docs/plans/waves/*.md`
|
|
81
|
-
|
|
82
|
-
-
|
|
83
|
-
|
|
226
|
+
- `docs/evals/benchmark-catalog.json`
|
|
227
|
+
- component-cutover matrix files under `docs/plans/`
|
|
228
|
+
|
|
229
|
+
## Validation Checklist After The Upgrade
|
|
230
|
+
|
|
231
|
+
Use this exact sequence unless your repo has a better repo-specific smoke suite.
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
pnpm exec wave doctor --json
|
|
235
|
+
pnpm exec wave launch --lane main --dry-run --no-dashboard
|
|
236
|
+
pnpm exec wave control status --lane main --wave 0 --json
|
|
237
|
+
pnpm exec wave coord show --lane main --wave 0 --dry-run --json
|
|
238
|
+
pnpm exec wave coord inbox --lane main --wave 0 --agent A1 --dry-run
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
For repos that extend or test the runtime itself, also run:
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
pnpm test
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
For repos that depend on replay parity, replay at least:
|
|
248
|
+
|
|
249
|
+
- one contradiction-blocked trace
|
|
250
|
+
- one promoted-component trace
|
|
251
|
+
- one retry-history trace
|
|
252
|
+
|
|
253
|
+
## Troubleshooting
|
|
254
|
+
|
|
255
|
+
### `wave doctor` fails after the upgrade
|
|
256
|
+
|
|
257
|
+
- check whether the repo is missing planner starter surface it previously copied
|
|
258
|
+
- check whether old `evaluator` naming is still present in config or prompts
|
|
259
|
+
- check whether wave files now declare closure roles or eval targets inconsistently with the current runtime
|
|
84
260
|
|
|
85
|
-
###
|
|
261
|
+
### A live lane looks blocked after the bump
|
|
86
262
|
|
|
87
|
-
|
|
263
|
+
- use `wave control status --lane <lane> --wave <n> --json`
|
|
264
|
+
- confirm whether the blocker is canonical coordination, dependency, proof, or human-input state
|
|
265
|
+
- do not trust old generated markdown alone
|
|
88
266
|
|
|
89
|
-
|
|
90
|
-
- Security review, when present, must leave a report plus a final `[wave-security]` marker.
|
|
91
|
-
- `cont-QA` must leave both the final `Verdict:` line and the final `[wave-gate]` marker.
|
|
92
|
-
- Older evaluator-era or verdict-only artifacts remain replay-readable, but they do not satisfy live completion anymore.
|
|
267
|
+
### Replay differs from old expectations
|
|
93
268
|
|
|
94
|
-
|
|
269
|
+
- verify whether the trace declares promoted components
|
|
270
|
+
- verify whether the repo relied on pre-`0.8.4` component-threshold behavior
|
|
271
|
+
- compare `storedOutcome.gateSnapshot` against recomputed replay output before changing live policy
|
|
95
272
|
|
|
96
|
-
|
|
273
|
+
## Summary
|
|
97
274
|
|
|
98
|
-
|
|
99
|
-
2. Run `pnpm exec wave launch --lane main --dry-run --no-dashboard`.
|
|
100
|
-
3. Use `pnpm exec wave coord show --lane main --wave 0 --dry-run --json` as a read-only inspection path for the coordination state.
|
|
101
|
-
4. Use `pnpm exec wave coord inbox --lane main --wave 0 --agent A1 --dry-run` when you want the launcher to materialize shared-summary and inbox artifacts for review.
|
|
102
|
-
5. If the repo adopts `cont-EVAL`, verify that every live eval wave declares `## Eval targets` and that the benchmark ids exist in `docs/evals/benchmark-catalog.json`.
|
|
275
|
+
`0.8.4` does not introduce a new authoring model. It hardens replay, makes component-promotion thresholds behave consistently, and finishes the projection-writer ownership boundary. For most repos already on `0.8.x`, the upgrade is package bump plus validation. For older adopted repos, the real work is syncing repo-owned prompts, skills, and runbooks so they describe the runtime the package now ships.
|
|
@@ -12,10 +12,33 @@ This runbook is the operational view of the architecture:
|
|
|
12
12
|
- executor adapters preserve Claude, Codex, and OpenCode-specific runtime features at the edge
|
|
13
13
|
- closure makes completion depend on integrated proof and shared state, not on free-form agent narration
|
|
14
14
|
|
|
15
|
+
## Runtime Module Map
|
|
16
|
+
|
|
17
|
+
The live runtime is organized around explicit modules:
|
|
18
|
+
|
|
19
|
+
- `launcher.mjs`
|
|
20
|
+
Thin orchestrator for CLI parsing, launcher lock handling, wave iteration, and engine sequencing.
|
|
21
|
+
- `implementation-engine.mjs`
|
|
22
|
+
Chooses initial or retry implementation fan-out.
|
|
23
|
+
- `derived-state-engine.mjs`
|
|
24
|
+
Computes shared summary, inbox, assignment, dependency, ledger, docs queue, and integration or security projection payloads from canonical state.
|
|
25
|
+
- `gate-engine.mjs`
|
|
26
|
+
Evaluates live gates from validated result envelopes plus canonical state.
|
|
27
|
+
- `retry-engine.mjs`
|
|
28
|
+
Produces reducer-driven retry and resume plans.
|
|
29
|
+
- `closure-engine.mjs`
|
|
30
|
+
Runs staged closure sequencing across `cont-EVAL`, security, integration, documentation, and `cont-QA` using the wave's effective role bindings.
|
|
31
|
+
- `wave-state-reducer.mjs`
|
|
32
|
+
Reconstructs deterministic wave state for live queries and replay.
|
|
33
|
+
- `session-supervisor.mjs`
|
|
34
|
+
Launches and monitors sessions and writes observed `wave_run`, `attempt`, and `agent_run` lifecycle facts.
|
|
35
|
+
- `projection-writer.mjs`
|
|
36
|
+
Persists projection outputs such as dashboards, traces, board projections, compiled summaries and inboxes, assignment and dependency snapshots, docs queues, ledgers, and integration or security summaries. Clarification-triage workflow artifacts stay workflow-owned.
|
|
37
|
+
|
|
15
38
|
## What It Does
|
|
16
39
|
|
|
17
40
|
- parses wave plans from `docs/plans/waves/`
|
|
18
|
-
- supports transient ad-hoc runs from `.wave/adhoc/runs/` on the same
|
|
41
|
+
- supports transient ad-hoc runs from `.wave/adhoc/runs/` on the same runtime substrate
|
|
19
42
|
- fans a wave out into one session per `## Agent ...` section
|
|
20
43
|
- supports standing role imports from `docs/agents/*.md`
|
|
21
44
|
- seeds a coordination log, generated board, compiled shared summary, and per-agent inboxes
|
|
@@ -24,11 +47,12 @@ This runbook is the operational view of the architecture:
|
|
|
24
47
|
- validates Context7 declarations and exit contracts from configurable wave thresholds
|
|
25
48
|
- validates component promotions and component-owned proof from configurable wave thresholds
|
|
26
49
|
- writes prompts, logs, dashboards, coordination state, and status summaries under `.tmp/`
|
|
27
|
-
- supports
|
|
50
|
+
- supports runtime-side Context7 prefetch and injection for headless runs
|
|
28
51
|
- supports headless execution through `codex`, `claude`, `opencode`, and the local smoke executor
|
|
29
52
|
- can retry rate-limited `codex`, `claude`, and `opencode` launches with per-agent exponential backoff via `--agent-rate-limit-*`
|
|
30
53
|
- supports a file-backed human feedback queue
|
|
31
|
-
- performs a closure sweep so optional `cont-EVAL`, optional security review, integration, documentation, and cont-QA gates reflect final landed state
|
|
54
|
+
- performs a closure sweep so optional `cont-EVAL`, optional security review, integration, documentation, and cont-QA gates reflect final landed state through the wave's effective closure-role bindings
|
|
55
|
+
- rebuilds contradiction blockers from canonical control-plane events during replay and materializes human-blocked waves as `clarifying` plus blocked `waveState`
|
|
32
56
|
|
|
33
57
|
## Main Commands
|
|
34
58
|
|
|
@@ -147,14 +171,14 @@ Compatibility note:
|
|
|
147
171
|
|
|
148
172
|
The canonical conversational state is the JSONL log under `.tmp/<lane>-wave-launcher/coordination/`. The markdown board is a generated projection for humans, not a decision input.
|
|
149
173
|
|
|
150
|
-
Control-plane facts that drive reruns, proof, attempt state, contradictions, facts, and operator tasks are appended separately under `.tmp/<lane>-wave-launcher/control-plane/`. Result envelopes live under `.tmp/<lane>-wave-launcher/results
|
|
174
|
+
Control-plane facts that drive reruns, proof, attempt state, contradictions, facts, human-input workflow, and operator tasks are appended separately under `.tmp/<lane>-wave-launcher/control-plane/`. Result envelopes live under `.tmp/<lane>-wave-launcher/results/wave-<n>/attempt-<a>/<agent>.json`. Legacy proof and retry files remain derived projections for compatibility, not decision inputs.
|
|
151
175
|
|
|
152
176
|
Capability-targeted requests now become deterministic helper assignments. The runtime resolves the assignee from explicit targets, `capabilityRouting.preferredAgents`, then least-busy matching capability owners, writes that assignment into `.tmp/<lane>-wave-launcher/assignments/`, mirrors the decision into coordination state, and keeps the wave blocked until the linked follow-up resolves.
|
|
153
177
|
|
|
154
178
|
Clarification flow is orchestrator-first:
|
|
155
179
|
|
|
156
180
|
1. Agent emits `clarification-request` through `wave coord post`.
|
|
157
|
-
2. The
|
|
181
|
+
2. The orchestrator triages it from repo policy, ownership, prior decisions, or targeted rerouting.
|
|
158
182
|
3. Only unresolved items become human feedback tickets.
|
|
159
183
|
4. Routed clarification follow-up requests remain blocking until they resolve.
|
|
160
184
|
5. Human escalations are written back into coordination state, the ledger, and trace artifacts.
|
|
@@ -168,7 +192,8 @@ Retry intent, operator tasks, attempt lifecycle, and proof injection are now fir
|
|
|
168
192
|
- canonical control events live under `.tmp/<lane>-wave-launcher/control-plane/`
|
|
169
193
|
- projected retry overrides still live under `.tmp/<lane>-wave-launcher/control/`
|
|
170
194
|
- projected proof registries still live under `.tmp/<lane>-wave-launcher/proof/`
|
|
171
|
-
- live traces now copy the control-plane log alongside the proof registry so replay keeps the same operator-visible facts
|
|
195
|
+
- live traces now copy the control-plane log alongside the proof registry so replay keeps the same operator-visible facts and contradiction blockers
|
|
196
|
+
- `session-supervisor.mjs` writes observed `wave_run.started|completed|failed`, `attempt.running|completed|failed`, and `agent_run.started|completed|failed|timed_out` events into that control-plane log
|
|
172
197
|
|
|
173
198
|
For a full end-to-end explainer of helper assignments, deliverables, integration, and why an agent can be locally done while the wave stays blocked, see [docs/reference/coordination-and-closure.md](../reference/coordination-and-closure.md).
|
|
174
199
|
|
|
@@ -208,7 +233,7 @@ pnpm exec wave changelog --since-installed
|
|
|
208
233
|
|
|
209
234
|
3. Review `.wave/upgrade-history/` for any manual follow-up. The upgrade flow does not overwrite repo-owned plans, waves, or config.
|
|
210
235
|
|
|
211
|
-
## What The
|
|
236
|
+
## What The Runtime Writes
|
|
212
237
|
|
|
213
238
|
- prompts: `.tmp/<lane>-wave-launcher/prompts/`
|
|
214
239
|
- logs: `.tmp/<lane>-wave-launcher/logs/`
|
|
@@ -235,7 +260,7 @@ pnpm exec wave changelog --since-installed
|
|
|
235
260
|
- proof registries: `.tmp/<lane>-wave-launcher/proof/`
|
|
236
261
|
Projected from control-plane state for compatibility. Operator-registered authoritative proof bundles that feed integration, cont-QA, and replay.
|
|
237
262
|
- retry overrides: `.tmp/<lane>-wave-launcher/control/`
|
|
238
|
-
Projected from control-plane state for compatibility. Operator-applied targeted retry overrides, applied once per attempt and then cleared
|
|
263
|
+
Projected from control-plane state for compatibility. Operator-applied targeted retry overrides, applied once per attempt and then cleared after execution.
|
|
239
264
|
- clarification triage: `.tmp/<lane>-wave-launcher/feedback/triage/`
|
|
240
265
|
- dashboards: `.tmp/<lane>-wave-launcher/dashboards/`
|
|
241
266
|
Dashboard JSON is a versioned contract. `global.json` and `wave-<n>.json` now carry explicit `schemaVersion` and `kind` fields.
|
|
@@ -248,7 +273,7 @@ pnpm exec wave changelog --since-installed
|
|
|
248
273
|
|
|
249
274
|
Ad-hoc runs mirror the same state shape under `.tmp/<lane>-wave-launcher/adhoc/<run-id>/`, including dry-run previews at `.tmp/<lane>-wave-launcher/adhoc/<run-id>/dry-run/`. Their docs queue can still point at canonical shared-plan docs when the run reports a shared-plan delta.
|
|
250
275
|
|
|
251
|
-
The launcher entrypoint in `scripts/wave-orchestrator/launcher.mjs`
|
|
276
|
+
The launcher entrypoint in `scripts/wave-orchestrator/launcher.mjs` now acts as a thin orchestrator over reducer, derived-state, retry, gate, closure, and supervision modules. The CLI and `traceVersion: 2` replay contract stay unchanged.
|
|
252
277
|
|
|
253
278
|
## Trace Contract
|
|
254
279
|
|
|
@@ -275,9 +300,10 @@ The launcher entrypoint in `scripts/wave-orchestrator/launcher.mjs` is being har
|
|
|
275
300
|
- `outcome.json` is the stored replay baseline. Replay compares recomputed gates and quality against it instead of trusting only inline metadata.
|
|
276
301
|
- For `traceVersion: 2`, launched agents must have copied prompt/log/status/inbox/summary artifacts, and promoted-component waves must include the copied component matrix JSON.
|
|
277
302
|
- `security.json` stores the derived per-wave security state that feeds integration summaries, gate snapshots, and replay.
|
|
303
|
+
- Non-promoted contradiction replay relies on copied control-plane facts and result artifacts; copied component matrices are only required when the trace declares promoted components.
|
|
278
304
|
- `quality.json` is cumulative through the current attempt. It is intended for regression comparison, not only for one-shot pass/fail reporting.
|
|
279
305
|
- `quality.json` also reports capability-assignment and dependency-resolution metrics, plus coordination response metrics (overdue acknowledgements, clarification timing, human escalation counts), in addition to the Phase 2/3 communication, fallback, and closure metrics.
|
|
280
|
-
- Replay support is internal. The source tree contains helpers to load, validate, and replay trace bundles against the same gate logic the
|
|
306
|
+
- Replay support is internal. The source tree contains helpers to load, validate, and replay trace bundles against the same gate logic the runtime uses, but there is no public replay CLI yet.
|
|
281
307
|
- Replay is read-only and hash-validating for `traceVersion: 2` bundles. It ignores inline summary duplicates in `run-metadata.json` and returns a stored-vs-recomputed comparison report for gate and quality state. Legacy `traceVersion: 1` bundles remain best-effort and emit warnings instead of claiming full hermetic replay.
|
|
282
308
|
|
|
283
309
|
## Authoring Rules
|
|
@@ -375,7 +401,7 @@ pnpm exec wave feedback respond --id <request-id> --response "..."
|
|
|
375
401
|
|
|
376
402
|
## Closure Sweep
|
|
377
403
|
|
|
378
|
-
If implementation agents ran, the
|
|
404
|
+
If implementation agents ran, the runtime does not stop at `exit 0`. It checks implementation exit contracts, promoted component proof, helper assignments, required dependencies, and the integration recommendation first. When present, `cont-EVAL` must satisfy its declared eval targets before integration can close. Optional security review then runs before integration so the reviewer can publish findings and approval-sensitive actions while the wave is still active. In the default planner shape `E0` is report-only; if a wave explicitly assigns `E0` non-report files, the runtime also applies the normal implementation proof gates to that role. Security reviewers stay report-only by default. Waves may override the default closure role ids; derived state, reducer snapshots, retry or resume planning, and closure sequencing all honor those wave-specific bindings consistently. Documentation and cont-QA closure only run after integration is explicitly ready for doc closure; if `cont-EVAL`, security review, or integration reports more work, or if helper assignments or required dependency tickets remain open, the wave stops there and retries only the implicated owners plus the relevant closure steward. When multiple implementation agents share a promoted component, owners that already landed valid proof stay reusable while the runtime retries only the sibling owners that still owe closure evidence.
|
|
379
405
|
|
|
380
406
|
Live closure is fail-closed:
|
|
381
407
|
|
|
@@ -7,6 +7,19 @@ summary: "Complete syntax reference for all wave CLI commands, flags, and operat
|
|
|
7
7
|
|
|
8
8
|
Complete syntax for every `wave` command. All commands use `pnpm exec wave` as the entry point.
|
|
9
9
|
|
|
10
|
+
## Command Families
|
|
11
|
+
|
|
12
|
+
- Runtime:
|
|
13
|
+
`wave launch`, `wave autonomous`, and `wave local` cover dry-run validation, live execution, and executor-specific prompt transport.
|
|
14
|
+
- Operator control:
|
|
15
|
+
`wave control` is the preferred surface for live status, tasks, reruns, proof bundles, and telemetry.
|
|
16
|
+
- Compatibility and inspection:
|
|
17
|
+
`wave coord`, `wave retry`, and `wave proof` remain available where older runbooks still depend on them.
|
|
18
|
+
- Planning and transient work:
|
|
19
|
+
`wave project`, `wave draft`, and `wave adhoc` cover defaults, authored waves, and operator-driven one-off runs.
|
|
20
|
+
- Setup and lifecycle:
|
|
21
|
+
`wave init`, `wave doctor`, `wave upgrade`, and `wave self-update` cover workspace adoption, validation, and package upgrades.
|
|
22
|
+
|
|
10
23
|
## wave launch
|
|
11
24
|
|
|
12
25
|
Launch waves for execution.
|
|
@@ -15,6 +28,10 @@ Launch waves for execution.
|
|
|
15
28
|
wave launch [options]
|
|
16
29
|
```
|
|
17
30
|
|
|
31
|
+
Defaults below reflect the starter workspace surface in this repo. Lane config can override executor, timeout, retry, and terminal defaults.
|
|
32
|
+
|
|
33
|
+
Closure-role bindings do not have a CLI override surface. When a wave file declares custom integration, documentation, `cont-QA`, `cont-EVAL`, or security-review role ids, launch, retry, reducer, and closure flows honor those wave-level bindings end to end.
|
|
34
|
+
|
|
18
35
|
| Flag | Default | Description |
|
|
19
36
|
|------|---------|-------------|
|
|
20
37
|
| `--lane <name>` | `main` | Lane name |
|
|
@@ -22,20 +39,23 @@ wave launch [options]
|
|
|
22
39
|
| `--end-wave <n>` | last available | Last wave to launch |
|
|
23
40
|
| `--auto-next` | off | Start from next unfinished wave and continue |
|
|
24
41
|
| `--resume-control-state` | off | Preserve the prior auto-generated relaunch plan instead of treating the launch as a fresh wave start |
|
|
25
|
-
| `--executor <id>` |
|
|
42
|
+
| `--executor <id>` | `codex` | Default executor: `codex`, `claude`, `opencode`, `local` |
|
|
26
43
|
| `--codex-sandbox <mode>` | `danger-full-access` | Codex sandbox isolation level |
|
|
27
|
-
| `--timeout-minutes <n>` | `
|
|
28
|
-
| `--max-retries-per-wave <n>` | `
|
|
29
|
-
| `--agent-rate-limit-retries <n>` | `
|
|
30
|
-
| `--agent-rate-limit-base-delay-seconds <n>` | `
|
|
31
|
-
| `--agent-rate-limit-max-delay-seconds <n>` | `
|
|
32
|
-
| `--agent-launch-stagger-ms <n>` | `
|
|
33
|
-
| `--terminal-surface <mode>` |
|
|
44
|
+
| `--timeout-minutes <n>` | `240` | Max minutes to wait per wave |
|
|
45
|
+
| `--max-retries-per-wave <n>` | `1` | Relaunch failed agents per wave |
|
|
46
|
+
| `--agent-rate-limit-retries <n>` | `2` | Per-agent retries for 429 errors |
|
|
47
|
+
| `--agent-rate-limit-base-delay-seconds <n>` | `20` | Base exponential backoff for 429 |
|
|
48
|
+
| `--agent-rate-limit-max-delay-seconds <n>` | `180` | Max backoff delay for 429 |
|
|
49
|
+
| `--agent-launch-stagger-ms <n>` | `1200` | Delay between agent launches |
|
|
50
|
+
| `--terminal-surface <mode>` | `vscode` | `tmux`, `vscode`, or `none` |
|
|
34
51
|
| `--no-dashboard` | off | Disable per-wave tmux dashboard |
|
|
35
52
|
| `--cleanup-sessions` | on | Kill lane tmux sessions after each wave |
|
|
36
53
|
| `--keep-sessions` | off | Keep lane tmux sessions |
|
|
37
54
|
| `--keep-terminals` | off | Keep temporary terminal entries |
|
|
38
55
|
| `--orchestrator-id <id>` | generated | Stable orchestrator identity |
|
|
56
|
+
| `--orchestrator-board <path>` | default board path | Write coordination-board updates to a specific shared board |
|
|
57
|
+
| `--no-orchestrator-board` | off | Disable shared orchestrator-board writes for this run |
|
|
58
|
+
| `--coordination-note <text>` | empty | Append a startup intent note to orchestrator-board updates |
|
|
39
59
|
| `--resident-orchestrator` | off | Launch long-running non-owning orchestrator session |
|
|
40
60
|
| `--no-telemetry` | off | Disable Wave Control event publication |
|
|
41
61
|
| `--no-context7` | off | Disable Context7 prefetch |
|
|
@@ -57,13 +77,13 @@ wave autonomous [options]
|
|
|
57
77
|
| `--lane <name>` | `main` | Lane name |
|
|
58
78
|
| `--executor <id>` | lane config | `codex`, `claude`, or `opencode` (not `local`) |
|
|
59
79
|
| `--codex-sandbox <mode>` | `danger-full-access` | Codex sandbox mode |
|
|
60
|
-
| `--timeout-minutes <n>` | `
|
|
61
|
-
| `--max-retries-per-wave <n>` | `
|
|
80
|
+
| `--timeout-minutes <n>` | `240` | Per-wave timeout passed to launcher |
|
|
81
|
+
| `--max-retries-per-wave <n>` | `1` | Per-wave relaunches inside launcher |
|
|
62
82
|
| `--max-attempts-per-wave <n>` | `1` | External attempts per wave |
|
|
63
|
-
| `--agent-rate-limit-retries <n>` | `
|
|
64
|
-
| `--agent-rate-limit-base-delay-seconds <n>` | `
|
|
65
|
-
| `--agent-rate-limit-max-delay-seconds <n>` | `
|
|
66
|
-
| `--agent-launch-stagger-ms <n>` | `
|
|
83
|
+
| `--agent-rate-limit-retries <n>` | `2` | Per-agent 429 retries |
|
|
84
|
+
| `--agent-rate-limit-base-delay-seconds <n>` | `20` | Base 429 backoff |
|
|
85
|
+
| `--agent-rate-limit-max-delay-seconds <n>` | `180` | Max 429 backoff |
|
|
86
|
+
| `--agent-launch-stagger-ms <n>` | `1200` | Delay between agent launches |
|
|
67
87
|
| `--orchestrator-id <id>` | `<lane>-autonomous` | Orchestrator identity |
|
|
68
88
|
| `--resident-orchestrator` | off | Launch resident orchestrator for each wave |
|
|
69
89
|
| `--dashboard` | off | Enable dashboards |
|
|
@@ -25,6 +25,17 @@ Those are related, but they are not the same.
|
|
|
25
25
|
|
|
26
26
|
An implementation agent can be locally complete and still leave the wave blocked if it created open helper work, unresolved clarification chains, or required dependencies.
|
|
27
27
|
|
|
28
|
+
At runtime, those distinctions map onto separate modules:
|
|
29
|
+
|
|
30
|
+
- `implementation-engine.mjs` selects implementation work
|
|
31
|
+
- `derived-state-engine.mjs` rebuilds the blackboard projections
|
|
32
|
+
- `gate-engine.mjs` evaluates closure and barrier state from envelopes plus canonical logs
|
|
33
|
+
- `retry-engine.mjs` decides what can safely resume
|
|
34
|
+
- `closure-engine.mjs` sequences the staged closeout
|
|
35
|
+
- `session-supervisor.mjs` only launches sessions and records observed facts
|
|
36
|
+
|
|
37
|
+
Closure roles are resolved from the wave definition first, then from starter defaults. In other words, integration, documentation, `cont-QA`, `cont-EVAL`, and security review keep the same semantics even when a wave overrides the default role ids such as `A8`, `A9`, `A0`, `E0`, or `A7`.
|
|
38
|
+
|
|
28
39
|
## Durable State Surfaces
|
|
29
40
|
|
|
30
41
|
The runtime writes several different artifacts, but they do different jobs:
|
|
@@ -52,6 +63,8 @@ The runtime writes several different artifacts, but they do different jobs:
|
|
|
52
63
|
|
|
53
64
|
The important rule is that decisions come from the canonical authority set: wave definitions, the coordination log, the control-plane log, and immutable result envelopes. The markdown board is a projection for humans. See [wave-orchestrator.md](../plans/wave-orchestrator.md).
|
|
54
65
|
|
|
66
|
+
That control-plane log also carries observed `wave_run`, `attempt`, and `agent_run` lifecycle facts from `session-supervisor.mjs`. When human feedback or escalation remains open, the reducer materializes the wave as `clarifying` with blocked `waveState` instead of flattening it into generic progress.
|
|
67
|
+
|
|
55
68
|
Live waves now keep refreshing that derived state while agents are still running. Shared summaries, inboxes, dashboard coordination metrics, and clarification routing are not only recomputed at attempt boundaries; they are also refreshed during active wave execution so stale clarification and acknowledgement timing is machine-visible before the attempt ends.
|
|
56
69
|
|
|
57
70
|
## What Agents Should Use
|
|
@@ -61,7 +74,7 @@ Use the coordination log for conversational or workflow state:
|
|
|
61
74
|
- `request`
|
|
62
75
|
Use this when you need another agent or capability owner to do work. Target it explicitly. This is the kind that becomes a helper assignment.
|
|
63
76
|
- `blocker`
|
|
64
|
-
Use this when the wave is blocked, but not because the
|
|
77
|
+
Use this when the wave is blocked, but not because the runtime needs to route work to a specific assignee.
|
|
65
78
|
- `handoff`
|
|
66
79
|
Use this for continuity and context transfer. This is informative by itself; it is not the same as a blocking helper assignment.
|
|
67
80
|
- `evidence`
|
|
@@ -164,7 +177,7 @@ pnpm exec wave control task create \
|
|
|
164
177
|
What happens next:
|
|
165
178
|
|
|
166
179
|
- the request lands in the canonical coordination log
|
|
167
|
-
- the
|
|
180
|
+
- the runtime derives a helper assignment for `agent:A8`
|
|
168
181
|
- that assignment is written into the assignment snapshot
|
|
169
182
|
- the shared summary and A8 inbox now show the open helper work
|
|
170
183
|
|
|
@@ -230,9 +243,9 @@ pnpm exec wave coord post \
|
|
|
230
243
|
|
|
231
244
|
What happens next:
|
|
232
245
|
|
|
233
|
-
1. the
|
|
246
|
+
1. the orchestrator triages the clarification from repo policy, ownership, prior decisions, and routing context
|
|
234
247
|
2. if it can answer inside the wave, it writes the resolution back into coordination state
|
|
235
|
-
3. if another owner can answer it, the
|
|
248
|
+
3. if another owner can answer it, the runtime opens a targeted follow-up request and keeps the clarification chain blocking
|
|
236
249
|
4. only after policy and routed follow-up paths are exhausted does it create human feedback or escalation artifacts
|
|
237
250
|
5. until that chain is resolved, clarification remains a closure barrier and any routed follow-up also remains blocking helper work
|
|
238
251
|
|
|
@@ -406,7 +419,7 @@ That gives Wave two useful properties:
|
|
|
406
419
|
|
|
407
420
|
## Targeted Retry Behavior
|
|
408
421
|
|
|
409
|
-
When closure fails, the
|
|
422
|
+
When closure fails, the runtime does not always relaunch the entire wave.
|
|
410
423
|
|
|
411
424
|
It tries to relaunch only the implicated owners:
|
|
412
425
|
|
|
@@ -425,7 +438,7 @@ pnpm exec wave control rerun get --lane main --wave 10 --json
|
|
|
425
438
|
pnpm exec wave control rerun request --lane main --wave 10 --agent A2 --agent A7 --clear-reuse A2 --reason "Resume sibling-owned component closure"
|
|
426
439
|
```
|
|
427
440
|
|
|
428
|
-
The canonical rerun request is written under `.tmp/<lane>-wave-launcher/control-plane/`, projected to `.tmp/<lane>-wave-launcher/control/` for compatibility, consumed by the
|
|
441
|
+
The canonical rerun request is written under `.tmp/<lane>-wave-launcher/control-plane/`, projected to `.tmp/<lane>-wave-launcher/control/` for compatibility, consumed by the retry engine on the next retry decision, and then cleared by default after one application. This is the supported path for:
|
|
429
442
|
|
|
430
443
|
- rerunning only specific owners
|
|
431
444
|
- preserving explicit reuse selectors such as attempt ids, proof bundle ids, derived-summary reuse, and invalidated component ids through the compatibility projection
|