@chllming/wave-orchestration 0.8.6 → 0.8.7

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 (43) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +5 -5
  3. package/docs/README.md +1 -1
  4. package/docs/guides/author-and-run-waves.md +1 -1
  5. package/docs/guides/planner.md +1 -1
  6. package/docs/guides/terminal-surfaces.md +2 -0
  7. package/docs/plans/current-state.md +1 -1
  8. package/docs/plans/end-state-architecture.md +1 -1
  9. package/docs/plans/examples/wave-example-design-handoff.md +1 -1
  10. package/docs/plans/examples/wave-example-live-proof.md +1 -1
  11. package/docs/plans/migration.md +22 -8
  12. package/docs/plans/wave-orchestrator.md +8 -5
  13. package/docs/reference/cli-reference.md +11 -3
  14. package/docs/reference/coordination-and-closure.md +26 -5
  15. package/docs/reference/live-proof-waves.md +9 -0
  16. package/docs/reference/npmjs-trusted-publishing.md +2 -2
  17. package/docs/reference/runtime-config/README.md +9 -3
  18. package/docs/reference/sample-waves.md +5 -5
  19. package/docs/reference/skills.md +1 -1
  20. package/docs/reference/wave-control.md +16 -0
  21. package/docs/reference/wave-planning-lessons.md +7 -1
  22. package/docs/research/coordination-failure-review.md +6 -6
  23. package/package.json +1 -1
  24. package/releases/manifest.json +19 -0
  25. package/scripts/wave-orchestrator/agent-state.mjs +42 -0
  26. package/scripts/wave-orchestrator/autonomous.mjs +42 -6
  27. package/scripts/wave-orchestrator/clarification-triage.mjs +4 -3
  28. package/scripts/wave-orchestrator/control-cli.mjs +126 -11
  29. package/scripts/wave-orchestrator/control-plane.mjs +12 -1
  30. package/scripts/wave-orchestrator/coordination-store.mjs +124 -4
  31. package/scripts/wave-orchestrator/executors.mjs +11 -6
  32. package/scripts/wave-orchestrator/gate-engine.mjs +5 -5
  33. package/scripts/wave-orchestrator/launcher-runtime.mjs +1 -1
  34. package/scripts/wave-orchestrator/launcher.mjs +216 -0
  35. package/scripts/wave-orchestrator/ledger.mjs +14 -12
  36. package/scripts/wave-orchestrator/reducer-snapshot.mjs +8 -6
  37. package/scripts/wave-orchestrator/retry-engine.mjs +19 -11
  38. package/scripts/wave-orchestrator/routing-state.mjs +50 -3
  39. package/scripts/wave-orchestrator/session-supervisor.mjs +6 -10
  40. package/scripts/wave-orchestrator/task-entity.mjs +4 -4
  41. package/scripts/wave-orchestrator/terminals.mjs +14 -14
  42. package/scripts/wave-orchestrator/wave-files.mjs +15 -21
  43. package/scripts/wave-orchestrator/wave-state-reducer.mjs +72 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ ## 0.8.7 - 2026-03-27
6
+
7
+ ### Changed
8
+
9
+ - Generic `budget.turns` is now treated consistently as advisory metadata unless a runtime-specific ceiling such as `claude.maxTurns` or `opencode.steps` is declared; `budget.minutes` remains the primary attempt budget and the release docs/tests now match that runtime behavior.
10
+ - The blocker-severity model is now consistent across coordination, control status, and reducer-backed closure state, so open work can stay visible as `soft`, `stale`, or `advisory` without automatically reopening hard blocking state.
11
+ - The expanded `wave control task act` repair surface now supports deferral, advisory or stale downgrade, and policy resolution inside canonical control state instead of manual file edits.
12
+
13
+ ### Fixed And Hardened
14
+
15
+ - Recoverable execution failures such as timeout, max-turn, rate-limit, and missing-status outcomes now prefer targeted rerun or resume paths plus bounded repair work instead of broad wave failure when proof-critical blockers are not present.
16
+ - Autonomous and retry flows now keep moving when only non-blocking human or clarification records remain, while proof-centric owners still default to sticky executor behavior.
17
+ - Capability routing now prefers demonstrated same-wave success for the requested capability before falling back to the least-busy matching capability owner; unrelated completed work no longer counts as routing evidence.
18
+ - Structured marker extraction now also recognizes proof, doc-delta, and component markers embedded inside JSON log lines, so wrapped executor transcripts no longer hide valid closure evidence.
19
+ - Wave agent and resident-orchestrator tmux sessions now reuse stable per-wave session names instead of appending a run tag, which prevents stale launcher exits from accumulating extra tmux sessions for the same wave.
20
+
21
+ ### Testing And Validation
22
+
23
+ - Added regression coverage around advisory blockers, targeted recovery, autonomous non-blocking human-input handling, advisory turn-budget behavior, capability-specific same-wave routing preference, non-blocking clarification/human-input reducer behavior, and stable per-wave tmux session naming.
24
+
3
25
  ## 0.8.6 - 2026-03-25
4
26
 
5
27
  ### Added
package/README.md CHANGED
@@ -103,18 +103,18 @@ Wave is built to mitigate those failures with a canonical authority set, generat
103
103
 
104
104
  Current release:
105
105
 
106
- - `@chllming/wave-orchestration@0.8.6`
107
- - Release tag: [`v0.8.6`](https://github.com/chllming/agent-wave-orchestrator/releases/tag/v0.8.6)
106
+ - `@chllming/wave-orchestration@0.8.7`
107
+ - Release tag: [`v0.8.7`](https://github.com/chllming/agent-wave-orchestrator/releases/tag/v0.8.7)
108
108
  - Public install path: npmjs
109
109
  - Authenticated fallback: GitHub Packages
110
110
 
111
- Highlights in `0.8.6`:
111
+ Highlights in `0.8.7`:
112
112
 
113
113
  - The shipped starter surface now includes `skills/signal-hygiene/` plus seeded `scripts/wave-status.sh` and `scripts/wave-watch.sh` wrappers for long-running-agent and operator wait loops.
114
114
  - Long-running agents and resident orchestrators now get prompt-level signal-state and signal-ack paths, so wakeups are edge-triggered by versioned signal changes instead of relying on terminal injection.
115
115
  - Versioned wave or agent signal snapshots are now a first-class operator surface under `.tmp/<lane>-wave-launcher/signals/`, with failure treated as terminal in both the runtime and the wrapper exit contract.
116
- - `0.8.5` design-role and hybrid design-steward behavior remains part of the shipped release surface, and the current migration guide now covers the new signal-wrapper model on top of that design-first runtime.
117
- - Release docs, current-state notes, and publishing instructions now point at the `0.8.6` surface.
116
+ - `0.8.5` design-role and hybrid design-steward behavior remains part of the shipped release surface, and `0.8.7` adds capability-specific same-wave helper routing, blocker-severity consistency across reducer state, and stable per-wave tmux session reuse.
117
+ - Release docs, current-state notes, migration guidance, and publishing instructions now point at the `0.8.7` surface.
118
118
 
119
119
  Requirements:
120
120
 
package/docs/README.md CHANGED
@@ -36,7 +36,7 @@ The useful path is journey-first:
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
38
  - Adding an optional pre-implementation design steward:
39
- Read [guides/author-and-run-waves.md](./guides/author-and-run-waves.md), then the standing prompt in [agents/wave-design-role.md](./agents/wave-design-role.md). The shipped `0.8.6` 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.
39
+ Read [guides/author-and-run-waves.md](./guides/author-and-run-waves.md), then the standing prompt in [agents/wave-design-role.md](./agents/wave-design-role.md). The shipped `0.8.7` 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
40
  - Want signal-driven automation or long-running watcher loops:
41
41
  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
42
  - Adding a security review pass:
@@ -61,7 +61,7 @@ Good fits:
61
61
  - multi-owner waves where downstream implementers need the same decisions and assumptions
62
62
  - ambiguous tasks where open questions should become explicit before code owners fan out
63
63
 
64
- The starter contract in `0.8.6` is:
64
+ The starter contract in `0.8.7` is:
65
65
 
66
66
  - import `docs/agents/wave-design-role.md`
67
67
  - own one packet such as `docs/plans/waves/design/wave-<n>-<agentId>.md`
@@ -6,7 +6,7 @@ If you want the full author-to-launch workflow, start with [author-and-run-waves
6
6
 
7
7
  It reduces repeated setup questions, stores project defaults, and generates wave specs plus markdown that already fit the launcher.
8
8
 
9
- The published `0.8.6` package already includes the optional `design` worker role for pre-implementation design packets. This guide calls out where that affects drafting.
9
+ The published `0.8.7` 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
 
@@ -47,6 +47,8 @@ By default the launcher can start per-wave dashboard sessions in tmux.
47
47
 
48
48
  Wave now maintains stable tmux attach targets for both the current-wave dashboard and the global dashboard on the lane socket.
49
49
 
50
+ Wave-agent sessions and the resident orchestrator now also use stable per-wave tmux session names. A relaunch reuses the same session identity for that wave instead of creating a new run-tagged session name each time, which reduces stale session buildup after launcher crashes or interrupted retries.
51
+
50
52
  Use:
51
53
 
52
54
  ```bash
@@ -1,6 +1,6 @@
1
1
  # Current State
2
2
 
3
- - The published package is `0.8.6`, and that release now includes the optional pre-implementation `design` worker role, the `role-design`, `tui-design`, and `signal-hygiene` starter bundles, plus the seeded signal-wrapper scripts for long-running-agent and operator wait loops.
3
+ - The published package is `0.8.7`, and that release now includes the optional pre-implementation `design` worker role, the `role-design`, `tui-design`, and `signal-hygiene` starter bundles, plus the seeded signal-wrapper scripts for long-running-agent and operator wait loops.
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/`.
@@ -1,6 +1,6 @@
1
1
  # End-State Architecture
2
2
 
3
- This document describes the canonical architecture for the current Wave runtime. It is the authoritative reference for the engine boundaries, canonical authority set, and artifact ownership model that the shipped `0.8.6` surface now follows.
3
+ This document describes the canonical architecture for the current Wave runtime. It is the authoritative reference for the engine boundaries, canonical authority set, and artifact ownership model that the shipped `0.8.7` surface now follows.
4
4
 
5
5
  The thesis is unchanged: bounded waves, closure roles, proof artifacts, selective rerun, and delivery discipline. What changes is the internal authority model. The launcher stops being the decision engine and becomes a thin orchestrator that reads decisions from canonical state, sequences the engines, and delegates process work to the session supervisor.
6
6
 
@@ -1,6 +1,6 @@
1
1
  # Wave 12 - Optional Design Steward Handoff
2
2
 
3
- This is a showcase-first sample wave for the shipped `design` worker role in `0.8.6`.
3
+ This is a showcase-first sample wave for the shipped `design` worker role in `0.8.7`.
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
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  This is a showcase-first sample wave.
4
4
 
5
- Use it as the single reference example for the current `0.8.6` Wave surface.
5
+ Use it as the single reference example for the current `0.8.7` Wave surface.
6
6
 
7
7
  It intentionally combines more sections than a normal production wave so one file can demonstrate:
8
8
 
@@ -1,6 +1,6 @@
1
1
  # Migration
2
2
 
3
- This page is the practical repo-upgrade guide for the current `0.8.6` surface.
3
+ This page is the practical repo-upgrade guide for the current `0.8.7` surface.
4
4
 
5
5
  Use it when you are:
6
6
 
@@ -10,6 +10,19 @@ Use it when you are:
10
10
 
11
11
  For the completed internal architecture cutover record, see [architecture-hardening-migration.md](./architecture-hardening-migration.md). That document is historical. This one is the operator-facing upgrade checklist.
12
12
 
13
+ ## What `0.8.7` Changes
14
+
15
+ The current `0.8.7` surface adds policy consistency and stable per-wave session reuse on top of the `0.8.6` signal-driven operator model.
16
+
17
+ The practical changes are:
18
+
19
+ - generic `budget.turns` stays advisory metadata unless the runtime-specific ceiling is set explicitly with `claude.maxTurns` or `opencode.steps`
20
+ - capability-targeted helper routing now treats demonstrated same-wave success as capability-specific evidence; unrelated completed work no longer makes an agent the preferred helper owner
21
+ - advisory or stale clarification and human-input records remain visible in coordination history and reducer blocker views, but they no longer reopen `clarifying` or blocked reducer state by themselves
22
+ - wave-agent and resident-orchestrator tmux sessions now reuse stable per-wave session names, so relaunches and stale launcher exits stop accumulating extra tmux sessions for the same wave
23
+
24
+ If your repo copied starter docs, shell automation, or operator runbooks, these are the areas most likely to need a sync before the `0.8.7` package cut.
25
+
13
26
  ## What `0.8.6` Changes
14
27
 
15
28
  `0.8.6` keeps the `0.8.5` design-role surface and adds a new signal-driven operator and long-running-agent model.
@@ -123,12 +136,13 @@ pnpm exec wave coord inbox --lane main --wave 0 --agent A1 --dry-run
123
136
 
124
137
  Use `pnpm exec wave dashboard --lane <lane> --attach current` or `--attach global` when you need to reattach to a tmux-backed dashboard after the upgrade.
125
138
 
126
- ## `0.8.6` Release Model
139
+ ## `0.8.7` Release Model
127
140
 
128
- The current `0.8.6` surface is two changes together:
141
+ The current `0.8.7` surface is three changes together:
129
142
 
130
143
  - the shipped `design` worker role and hybrid design-steward flow introduced in `0.8.5`
131
144
  - the signal-driven long-running-agent and wrapper model introduced in `0.8.6`
145
+ - the policy-consistency, targeted-recovery, capability-specific routing, and stable per-wave session reuse hardening introduced in `0.8.7`
132
146
 
133
147
  ### Signal-driven waiting and wrapper model
134
148
 
@@ -312,9 +326,9 @@ If the repo copied starter `wave.config.json` defaults, also sync:
312
326
  - if the repo uses hybrid design stewards, confirm the same agent rejoins implementation only when the authored wave explicitly gives it code ownership
313
327
  - if the repo uses long-running agents or shell automation, confirm the new wrapper exit contract and ack-loop semantics before relying on an older polling script
314
328
 
315
- ## Upgrading From `0.8.0`-`0.8.4` To `0.8.6`
329
+ ## Upgrading From `0.8.3` To `0.8.7`
316
330
 
317
- Treat this as one move to the current `0.8.6` surface.
331
+ Treat this as one move to the current `0.8.7` surface.
318
332
 
319
333
  ### What changed across that range
320
334
 
@@ -347,7 +361,7 @@ If your repo copied starter docs or skills, sync:
347
361
  - dry-run one design-steward wave if the repo wants the new authored surface
348
362
  - if the repo uses long-running watcher agents or shell automation, validate `scripts/wave-status.sh` and `scripts/wave-watch.sh` against a live or staged lane
349
363
 
350
- ## Upgrading From `0.6.x` Or `0.7.x` To `0.8.6`
364
+ ## Upgrading From `0.6.x` Or `0.7.x` To `0.8.7`
351
365
 
352
366
  This is the main migration path for older adopted repos.
353
367
 
@@ -388,7 +402,7 @@ pnpm exec wave control proof get --lane main --wave 0 --json
388
402
 
389
403
  If the repo carries proof-first waves, verify that required proof artifacts still exist locally and not only in historical summaries.
390
404
 
391
- ## Upgrading From `0.5.x` Or Earlier To `0.8.6`
405
+ ## Upgrading From `0.5.x` Or Earlier To `0.8.7`
392
406
 
393
407
  Do not treat this as a tiny patch bump.
394
408
 
@@ -498,4 +512,4 @@ For repos that depend on replay parity, replay at least:
498
512
 
499
513
  ## Summary
500
514
 
501
- The current `0.8.6` surface keeps the same authority-set and phase-engine architecture, but it now ships both the design-role starter surface and the signal-driven long-running-agent starter surface as part of the published package. 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, planner corpus, wrapper scripts, and runbooks so they describe the runtime the package now ships.
515
+ The current `0.8.7` surface keeps the same authority-set and phase-engine architecture, ships both the design-role starter surface and the signal-driven long-running-agent starter surface, and now also hardens policy consistency, targeted recovery, capability-specific routing, and stable per-wave tmux session reuse. 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, planner corpus, wrapper scripts, and runbooks so they describe the runtime the package now ships.
@@ -55,6 +55,8 @@ The live runtime is organized around explicit modules:
55
55
  - 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
56
56
  - treats design packets as a first-class pre-implementation gate when a wave declares `design` workers
57
57
  - rebuilds contradiction blockers from canonical control-plane events during replay and materializes human-blocked waves as `clarifying` plus blocked `waveState`
58
+ - distinguishes hard, soft, stale, advisory, proof-critical, and closure-critical blockers instead of treating every open coordination record as equally blocking
59
+ - turns recoverable timeout, max-turn, rate-limit, and missing-status failures into targeted recovery intent plus bounded repair work when proof-critical barriers are not present
58
60
 
59
61
  ## Main Commands
60
62
 
@@ -161,9 +163,10 @@ pnpm exec wave launch --lane main --start-wave 0 --end-wave 0 --executor codex -
161
163
  ## Coordination Surfaces
162
164
 
163
165
  - `wave control status` is the read-only projection for "why blocked / why retrying" at wave or agent scope. It returns blocking edges, logical agent state, tasks, dependencies, rerun intent, active proof bundles, and next timers from one materialized control-plane view.
164
- - `wave control task create|get|list|act` is the operator task surface for blocking requests, blockers, clarification chains, human-input tickets, escalations, and informative handoffs, evidence, claims, and decisions. `wave control status` only treats requests, blockers, clarifications, human-input, escalations, helper assignments, and required dependencies as blocking edges.
166
+ - `wave control task create|get|list|act` is the operator task surface for blocking requests, blockers, clarification chains, human-input tickets, escalations, and informative handoffs, evidence, claims, and decisions. `wave control status` only treats requests, blockers, clarifications, human-input, escalations, helper assignments, and required dependencies as candidate blocking edges, and then only when their current task or record metadata still marks them blocking.
167
+ - Tasks now carry explicit `blocking` and `blockerSeverity` semantics. Operators can keep work visible while removing it from the active blocking edge with `defer`, `mark-advisory`, `mark-stale`, or `resolve-policy` when repo policy allows.
165
168
  - A fresh live `wave launch --start-wave <n> --end-wave <n>` now clears the previous auto-generated relaunch plan for that wave before selecting the initial implementation fan-out. Pass `--resume-control-state` only when you intentionally want to keep that persisted relaunch selection.
166
- - `wave control rerun request|get|clear` manages targeted rerun intent under `.tmp/<lane>-wave-launcher/control-plane/` and projects compatible retry overrides under `.tmp/<lane>-wave-launcher/control/`, including selected agents, reuse selectors, invalidated components, and clear or preserve reuse lists.
169
+ - `wave control rerun request|get|clear` manages targeted rerun intent under `.tmp/<lane>-wave-launcher/control-plane/` and projects compatible retry overrides under `.tmp/<lane>-wave-launcher/control/`, including selected agents, reuse selectors, invalidated components, and clear or preserve reuse lists. The launcher can also queue one automatically after recoverable timeout, max-turn, rate-limit, or missing-status failures.
167
170
  - `wave control proof register|get|supersede|revoke` manages authoritative proof bundles in the same control-plane log and projects compatible proof registries under `.tmp/<lane>-wave-launcher/proof/`.
168
171
  - `wave control telemetry status|flush` inspects and delivers the local Wave Control event queue. Pass `--no-telemetry` on `wave launch` to disable event publication for a single run.
169
172
  - `scripts/wave-status.sh` and `scripts/wave-watch.sh` are thin wrapper readers over `wave control status --json` for shell automation and long-running watcher loops. Use [guides/signal-wrappers.md](../guides/signal-wrappers.md) for the exit-code and ack-loop contract.
@@ -178,7 +181,7 @@ The canonical conversational state is the JSONL log under `.tmp/<lane>-wave-laun
178
181
 
179
182
  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.
180
183
 
181
- 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.
184
+ Capability-targeted requests now become deterministic helper assignments. The runtime resolves the assignee from explicit targets, `capabilityRouting.preferredAgents`, then matching capability owners with demonstrated same-wave completions, then least-busy fallback, 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 or is explicitly downgraded by policy.
182
185
 
183
186
  Clarification flow is orchestrator-first:
184
187
 
@@ -188,7 +191,7 @@ Clarification flow is orchestrator-first:
188
191
  4. Routed clarification follow-up requests remain blocking until they resolve.
189
192
  5. Human escalations are written back into coordination state, the ledger, and trace artifacts.
190
193
 
191
- During live runs, the orchestrator now keeps an active supervision and state-refresh loop while agents are still running. It refreshes the derived coordination surfaces on cadence, surfaces overdue acknowledgements and stale clarification chains in dashboards and traces, and can reroute clarification follow-up requests inside the same attempt when the routed owner never acknowledges them.
194
+ During live runs, the orchestrator now keeps an active supervision and state-refresh loop while agents are still running. It refreshes the derived coordination surfaces on cadence, surfaces overdue acknowledgements and stale clarification chains in dashboards and traces, can reroute clarification follow-up requests inside the same attempt when the routed owner never acknowledges them, and can leave non-critical advisory or stale records visible without forcing the whole wave into terminal failure.
192
195
 
193
196
  If you opt into `--resident-orchestrator`, the launcher also starts a long-running non-owning orchestrator session for the wave. That session can inspect the same coordination artifacts and intervene through coordination records, but it does not override reducer, gate, or closure decisions.
194
197
 
@@ -366,7 +369,7 @@ For the complete syntax of every command, flag, and subcommand, see [docs/refere
366
369
  - Skills resolve only after that executor choice is known. Runtime-specific skill overlays are regenerated whenever retry-time fallback changes the selected executor.
367
370
  - Runtime mix targets are enforced before launch and again before any retry-time fallback reassignment.
368
371
  - Fallbacks are declared in profiles or lane policy, can be applied automatically on retry when the next executor is available and still satisfies mix targets, and are recorded in the ledger, integration summary, and traces when used.
369
- - Generic `budget.minutes` caps per-agent attempt timeouts. Generic `budget.turns` seeds `claude.maxTurns` and `opencode.steps` when executor-specific values are not set; Codex turn ceilings remain external to Wave and show up in preview metadata as opaque when Wave cannot inspect them, though live previews now record an observed ceiling if the Codex runtime later logs one explicitly.
372
+ - Generic `budget.minutes` caps per-agent attempt timeouts. Generic `budget.turns` remains advisory metadata unless the runtime-specific ceiling is declared explicitly through `claude.maxTurns` or `opencode.steps`; Codex turn ceilings remain external to Wave and show up in preview metadata as opaque when Wave cannot inspect them, though live previews now record an observed ceiling if the Codex runtime later logs one explicitly.
370
373
  - The launcher writes runtime overlay files under `.tmp/<lane>-wave-launcher/executors/`; these should stay ignored and local.
371
374
 
372
375
  Runtime authoring examples:
@@ -133,13 +133,15 @@ wave control task create \
133
133
  --lane <lane> --wave <n> --agent <id> \
134
134
  --kind <kind> --summary "<text>" \
135
135
  [--detail "<text>"] [--target <agent-or-capability>] \
136
- [--priority normal|high] [--depends-on <id>] \
136
+ [--priority normal|high] [--blocking true|false] \
137
+ [--severity hard|soft|stale|advisory|proof-critical|closure-critical] \
138
+ [--depends-on <id>] \
137
139
  [--artifact <ref>] [--operator <name>] [--json]
138
140
  ```
139
141
 
140
142
  Valid `--kind` values: `request`, `blocker`, `clarification`, `handoff`, `evidence`, `claim`, `decision`, `human-input`.
141
143
 
142
- Only `request`, `blocker`, `clarification`, `human-input`, and `escalation` are treated as blocking edges by `wave control status`. The rest (`handoff`, `evidence`, `claim`, `decision`) are informational.
144
+ `wave control status` only treats `request`, `blocker`, `clarification`, `human-input`, and `escalation` as potentially blocking. Tasks of those kinds can still be downgraded with `blocking=false` or non-blocking severities such as `advisory` and `stale`, so they remain visible without owning the active blocking edge.
143
145
 
144
146
  **List tasks:**
145
147
 
@@ -172,6 +174,10 @@ Actions:
172
174
  | `reassign` | `--to <agent>` | Supersede the original, reroute to a new agent |
173
175
  | `answer` | `--response "<text>"` | Answer a human-input or escalation task |
174
176
  | `escalate` | `[--detail]` | Escalate to human feedback queue |
177
+ | `defer` | `[--detail]` | Keep the task open but mark it non-blocking soft work |
178
+ | `mark-advisory` | `[--detail]` | Keep the task visible but non-blocking with advisory severity |
179
+ | `mark-stale` | `[--detail]` | Keep the task as historical context without blocking closure |
180
+ | `resolve-policy` | `[--detail]` | Close the task by operator policy and downgrade linked clarification follow-up when applicable |
175
181
 
176
182
  **Operator answer example** (responding to a human-input escalation):
177
183
 
@@ -202,6 +208,8 @@ wave control rerun request \
202
208
 
203
209
  `--agent` is repeatable or comma-separated. At least one of `--agent` or `--resume-cursor` is required.
204
210
 
211
+ The launcher may also write a rerun request automatically after recoverable failures such as timeout, max-turn, rate-limit, or missing-status outcomes. Those requests still appear through `wave control rerun get`, so operators can inspect or replace the targeted recovery plan before the next attempt.
212
+
205
213
  **Get active rerun request:**
206
214
 
207
215
  ```
@@ -553,7 +561,7 @@ Interactive draft currently offers worker role kinds:
553
561
  - `research`
554
562
  - `security`
555
563
 
556
- Agentic planner payloads also accept `workerAgents[].roleKind = "design"`. The shipped `0.8.6` surface uses `design-pass` as the default executor profile for that role and typically assigns a packet path like `docs/plans/waves/design/wave-<n>-<agentId>.md`. Interactive draft scaffolds the docs-first default; hybrid design stewards are authored by explicitly adding implementation-owned paths and the normal implementation contract sections.
564
+ Agentic planner payloads also accept `workerAgents[].roleKind = "design"`. The shipped `0.8.7` surface uses `design-pass` as the default executor profile for that role and typically assigns a packet path like `docs/plans/waves/design/wave-<n>-<agentId>.md`. Interactive draft scaffolds the docs-first default; hybrid design stewards are authored by explicitly adding implementation-owned paths and the normal implementation contract sections.
557
565
 
558
566
  ## Ad-Hoc Task Commands
559
567
 
@@ -108,14 +108,31 @@ Wave treats these coordination statuses as open:
108
108
  - `acknowledged`
109
109
  - `in_progress`
110
110
 
111
- It treats these as non-blocking:
111
+ It treats these statuses as closed:
112
112
 
113
113
  - `resolved`
114
114
  - `closed`
115
115
  - `superseded`
116
116
  - `cancelled`
117
117
 
118
- That means a targeted helper request keeps blocking until the request leaves the open set in coordination state.
118
+ But "open" and "blocking" are now different questions.
119
+
120
+ Open records can carry a blocker severity:
121
+
122
+ - `hard`
123
+ - `soft`
124
+ - `stale`
125
+ - `advisory`
126
+ - `proof-critical`
127
+ - `closure-critical`
128
+
129
+ Practical rule:
130
+
131
+ - `proof-critical`, `closure-critical`, and hard required barriers still stop the wave outright
132
+ - `soft` blockers stay visible and may still drive repair work or retry targeting
133
+ - `stale` and `advisory` records remain in coordination history without owning the active blocking edge
134
+
135
+ That means a targeted helper request only blocks while it remains open *and* still has blocking severity in coordination state.
119
136
 
120
137
  This page is documenting runtime semantics first. The important contract is that closure follows the durable coordination state, not that a particular human or agent used one exact command path to mutate it.
121
138
 
@@ -181,7 +198,7 @@ What happens next:
181
198
  - that assignment is written into the assignment snapshot
182
199
  - the shared summary and A8 inbox now show the open helper work
183
200
 
184
- `wave control task list` and `wave control task get` surface both blocking and informative coordination kinds. `wave control status` only turns `request`, `blocker`, `clarification-request`, `human-feedback`, and `human-escalation` into blocking task edges; plain `handoff`, `evidence`, `claim`, and `decision` records stay visible without falsely blocking the owner. When a launcher attempt is already running, status scopes the top-level blocking edge to that active attempt instead of letting stale relaunch metadata or unrelated closure tasks dominate the wave-level view.
201
+ `wave control task list` and `wave control task get` surface both blocking and informative coordination kinds. `wave control status` only turns `request`, `blocker`, `clarification-request`, `human-feedback`, and `human-escalation` into candidate blocking task edges, and then only if the current record still has `blocking=true` plus a blocking severity. Plain `handoff`, `evidence`, `claim`, and `decision` records stay visible without falsely blocking the owner. When a launcher attempt is already running, status scopes the top-level blocking edge to that active attempt instead of letting stale relaunch metadata or unrelated closure tasks dominate the wave-level view.
185
202
 
186
203
  ### Step 3: Why A1 Can Be Done But The Wave Is Still Blocked
187
204
 
@@ -253,15 +270,19 @@ Important implication:
253
270
 
254
271
  - even if code is landed, an open clarification chain can still block the wave
255
272
  - a routed clarification that stays `open` past the acknowledgement policy can be rerouted during the same live attempt instead of waiting for a full retry cycle
256
- - operators can now inspect and intervene through one command surface:
273
+ - operators can now inspect and intervene through one command surface, including downgrade or policy-close actions when the remaining issue is no longer proof-critical:
257
274
 
258
275
  ```bash
259
276
  pnpm exec wave control status --lane main --wave 10 --agent A7 --json
260
277
  pnpm exec wave control task act reassign --lane main --wave 10 --id clarify-a7-rollout --to A1
278
+ pnpm exec wave control task act mark-stale --lane main --wave 10 --id clarify-a7-rollout
279
+ pnpm exec wave control task act mark-advisory --lane main --wave 10 --id request-clarify-a7-rollout
280
+ pnpm exec wave control task act defer --lane main --wave 10 --id blocker-doc-follow-up
281
+ pnpm exec wave control task act resolve-policy --lane main --wave 10 --id clarify-a7-rollout --detail "Policy already covered in the published rollout guide."
261
282
  pnpm exec wave control task act resolve --lane main --wave 10 --id escalation-clarify-a7-rollout --detail "Published command surface covers this question."
262
283
  ```
263
284
 
264
- That keeps clarification routing, dismissal, escalation, and human-answer handling inside the canonical coordination state instead of forcing ad hoc file edits.
285
+ That keeps clarification routing, downgrade, dismissal, escalation, policy closure, and human-answer handling inside the canonical coordination state instead of forcing ad hoc file edits.
265
286
 
266
287
  When the operator answers through the feedback queue directly, the answer path now repairs the same canonical state:
267
288
 
@@ -40,6 +40,7 @@ For live-proof owners:
40
40
  - declare `### Proof artifacts` for machine-visible local evidence
41
41
  - keep the executor sticky unless fallback is explicitly required
42
42
  - prefer wall-clock budgets over tiny hard turn caps
43
+ - treat generic `budget.turns` as advisory; only set runtime-specific turn ceilings when you want a true hard stop
43
44
 
44
45
  Example:
45
46
 
@@ -118,6 +119,12 @@ For proof-bearing owners, default to sticky retry:
118
119
 
119
120
  Only enable cross-executor retry when there is a deliberate reason to do so.
120
121
 
122
+ Budget guidance:
123
+
124
+ - `budget.minutes` is the primary attempt budget and should be the normal control for live-proof owners
125
+ - generic `budget.turns` is now advisory metadata for Claude and OpenCode unless you also set the runtime-specific limit
126
+ - use `claude.max_turns` or `opencode.steps` only when a hard per-attempt ceiling is intentional
127
+
121
128
  If you do allow fallback, declare it explicitly:
122
129
 
123
130
  ```md
@@ -172,6 +179,8 @@ pnpm exec wave control proof register \
172
179
  4. any stale integration or closure owner reruns if needed
173
180
  5. already-valid implementation slices stay reused
174
181
 
182
+ For non-proof-centric owners elsewhere in the wave, recoverable timeout, max-turn, rate-limit, or missing-status outcomes can now queue targeted recovery automatically. For proof-bearing owners, the safer default is still to keep the same executor sticky and make the operator decision explicit once the new proof bundle exists.
183
+
175
184
  Authoritative proof registration is the supported way to make operator-produced evidence visible to A8, A0, rerun control, and hermetic traces without forcing an implementation agent to rediscover the same local artifacts in a fresh session. The canonical proof bundle now lands in `.tmp/<lane>-wave-launcher/control-plane/` and is projected into `.tmp/<lane>-wave-launcher/proof/` for compatibility.
176
185
 
177
186
  ## Suggested Eval Targets For Live-Proof Waves
@@ -2,7 +2,7 @@
2
2
 
3
3
  This repo now includes a dedicated npmjs publish workflow at [publish-npm.yml](../../.github/workflows/publish-npm.yml).
4
4
 
5
- The current `0.8.6` release procedure publishes through a repository Actions secret named `NPM_TOKEN`.
5
+ The current `0.8.7` release procedure publishes through a repository Actions secret named `NPM_TOKEN`.
6
6
 
7
7
  ## What This Repo Already Does
8
8
 
@@ -48,6 +48,6 @@ If this repo later needs private npm dependencies during CI, consider a separate
48
48
  2. Confirm `NPM_TOKEN` exists in the GitHub repo secrets.
49
49
  3. Confirm the package version has been bumped and committed.
50
50
  4. Confirm `README.md`, `CHANGELOG.md`, `releases/manifest.json`, and `docs/plans/migration.md` all describe the same release surface.
51
- 5. Push the release commit and release tag, for example `v0.8.6`.
51
+ 5. Push the release commit and release tag, for example `v0.8.7`.
52
52
  6. Verify both `publish-npm.yml` and `publish-package.yml` start from the tag push.
53
53
  7. Verify the npmjs publish completes successfully for the tagged source.
@@ -66,8 +66,14 @@ These fields are shared across runtimes:
66
66
  | Model | `model` in profile, `executors.claude.model`, `executors.opencode.model` | `model` | Codex uses shared `model` from profile or agent only |
67
67
  | Fallbacks | `fallbacks` in profile | `fallbacks` | Runtime ids used for retry-time reassignment |
68
68
  | Tags | `tags` in profile | `tags` | Stored in resolved executor state for policy and traces |
69
- | Budget turns | `budget.turns` in profile | `budget.turns` | Seeds Claude `maxTurns` and OpenCode `steps` when runtime-specific values are absent; it does not set a Codex turn limit |
70
- | Budget minutes | `budget.minutes` in profile | `budget.minutes` | Caps attempt timeout |
69
+ | Budget turns | `budget.turns` in profile | `budget.turns` | Advisory generic turn budget. Wave records it in resolved metadata, but only runtime-specific settings such as `claude.maxTurns` or `opencode.steps` emit hard turn-limit flags. It does not set a Codex turn limit. |
70
+ | Budget minutes | `budget.minutes` in profile | `budget.minutes` | Primary wall-clock attempt budget |
71
+
72
+ Practical guidance:
73
+
74
+ - prefer `budget.minutes` for normal synthesis, integration, and closure work
75
+ - use generic `budget.turns` as a planning hint, not a hard failure trigger
76
+ - only set `claude.maxTurns` or `opencode.steps` when you deliberately want a hard ceiling for that runtime
71
77
 
72
78
  ## Runtime Pages
73
79
 
@@ -161,7 +167,7 @@ Runtime-specific delivery:
161
167
  - OpenCode injects the compact catalog into `opencode.json` and attaches `skill.json`, `SKILL.md`, the selected adapter, and recursive `references/**` files through `--file`.
162
168
  - Local keeps skills prompt-only.
163
169
 
164
- `launch-preview.json` also records the resolved skill metadata plus a `limits` section. For Claude and OpenCode, that section reports the known turn ceiling and whether it came from the runtime-specific setting or generic `budget.turns`. For Codex, it explicitly records that Wave emitted no turn-limit flag and that any effective ceiling may come from the selected Codex profile or upstream runtime. If a live Codex run later terminates with a visible `Reached max turns (N)` log line, Wave appends that observed ceiling back into the live `launch-preview.json` as runtime evidence rather than pretending Wave set it.
170
+ `launch-preview.json` also records the resolved skill metadata plus a `limits` section. For Claude and OpenCode, that section reports the runtime-specific turn ceiling when one was actually configured; when only generic `budget.turns` exists, the preview keeps it as advisory metadata and notes that Wave emitted no hard turn-limit flag. For Codex, it explicitly records that Wave emitted no turn-limit flag and that any effective ceiling may come from the selected Codex profile or upstream runtime. If a live Codex run later terminates with a visible `Reached max turns (N)` log line, Wave appends that observed ceiling back into the live `launch-preview.json` as runtime evidence rather than pretending Wave set it.
165
171
 
166
172
  ## Recommended Validation Path
167
173
 
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  title: "Sample Waves"
3
- summary: "Showcase-first sample waves that demonstrate the shipped 0.8.6 authored surface, including the optional design-role path."
3
+ summary: "Showcase-first sample waves that demonstrate the shipped 0.8.7 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.6` authored Wave surface.
8
+ This guide points to showcase-first sample waves that demonstrate the shipped `0.8.7` 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
 
@@ -15,7 +15,7 @@ The examples are intentionally denser than typical production waves. Their job i
15
15
  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
16
 
17
17
  - [Full modern sample wave](../plans/examples/wave-example-live-proof.md)
18
- Shows the combined `0.8.6` 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.
18
+ Shows the combined `0.8.7` 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
19
 
20
20
  - [Optional design-steward handoff wave](../plans/examples/wave-example-design-handoff.md)
21
21
  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.
@@ -42,7 +42,7 @@ The examples are intentionally denser than typical production waves. Their job i
42
42
 
43
43
  ## Feature Coverage Map
44
44
 
45
- Together these samples cover the main surfaces added or hardened through `0.8.6`:
45
+ Together these samples cover the main surfaces added or hardened through `0.8.7`:
46
46
 
47
47
  - repo-landed maturity discipline and anti-overclaim framing
48
48
  - explicit shared-plan closure for future-wave safety
@@ -89,7 +89,7 @@ Adapt more aggressively when:
89
89
  ## Suggested Reading Order
90
90
 
91
91
  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.6` surface.
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.7` surface.
93
93
  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
94
  4. Read [docs/evals/README.md](../evals/README.md) if you want more background on benchmark target selection.
95
95
  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.6` 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.8.7` 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
 
@@ -42,6 +42,8 @@ This lets the control plane answer:
42
42
  - which proof and benchmark artifacts back a claim
43
43
  - whether a benchmark result is comparison-valid or only diagnostic
44
44
  - which coordination failures blocked closure
45
+ - which blockers were hard, soft, stale, or advisory
46
+ - whether a blocked wave is terminal or recoverable and which targeted rerun request was queued
45
47
 
46
48
  ## Run Identity
47
49
 
@@ -92,6 +94,20 @@ Signals to preserve:
92
94
  - benchmark trust:
93
95
  every benchmark item should distinguish capability from validity
94
96
 
97
+ ## Blocker And Recovery Metadata
98
+
99
+ Wave Control should preserve the softer runtime policy, not flatten it away.
100
+
101
+ In practice that means `coordination_record`, `task`, `gate`, `wave_run`, and `rerun_request` payloads should keep fields such as:
102
+
103
+ - `blocking`
104
+ - `blockerSeverity`
105
+ - `recoverable`
106
+ - `recoveryReason`
107
+ - queued rerun request ids or resume targets
108
+
109
+ That distinction matters because a wave that is `blocked` by a proof-critical gate is different from a wave that is `blocked` only long enough to surface a targeted recovery after timeout, max-turn, rate-limit, or missing-status failure. The control plane should let operators ask which barriers still stop closure outright and which ones were intentionally downgraded to advisory or stale context.
110
+
95
111
  ## Artifact Contract
96
112
 
97
113
  Selected artifacts are described with typed descriptors:
@@ -74,11 +74,15 @@ runtime setup, and the closure artifacts all describe the same truth.
74
74
  ## 7. Runtime setup matters as much as wave prose
75
75
 
76
76
  - Do not use small fixed turn caps for synthesis-heavy or closure-heavy agents.
77
- Bound them with `budget.minutes`, not `budget.turns`.
77
+ Bound them with `budget.minutes`, not generic `budget.turns`.
78
+ - Treat generic `budget.turns` as advisory unless you intentionally set a
79
+ runtime-specific hard stop such as `claude.max_turns` or `opencode.steps`.
78
80
  - Pin exact model and reasoning settings for each runtime. Ambiguous profiles
79
81
  create unclear failure modes.
80
82
  - Avoid cross-runtime fallback on live-proof or deploy-sensitive slices unless
81
83
  there is a very good reason.
84
+ - For non-proof-centric owners, prefer targeted recovery and reuse over broad
85
+ relaunch when a timeout or max-turn event leaves partial artifacts behind.
82
86
  - Context7 should be explicit and real; unresolved bundles create noise instead
83
87
  of help.
84
88
 
@@ -121,6 +125,8 @@ runtime setup, and the closure artifacts all describe the same truth.
121
125
  - Are A8 and A0 told what would make the wave fail honestly?
122
126
  - Are runtime pins, Context7 bundles, and budgets specific enough to avoid
123
127
  preventable execution failures?
128
+ - Can any non-proof coordination ask be authored as `soft`, `stale`, or
129
+ `advisory` instead of silently becoming a hard closure blocker?
124
130
  - Would a reviewer understand the difference between “code landed” and
125
131
  “component promoted” just by reading the wave file?
126
132