@chllming/wave-orchestration 0.8.6 → 0.8.8

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 (44) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +5 -5
  3. package/docs/README.md +3 -1
  4. package/docs/guides/author-and-run-waves.md +1 -1
  5. package/docs/guides/planner.md +1 -1
  6. package/docs/guides/recommendations-0.8.8.md +133 -0
  7. package/docs/guides/terminal-surfaces.md +2 -0
  8. package/docs/plans/current-state.md +2 -1
  9. package/docs/plans/end-state-architecture.md +1 -1
  10. package/docs/plans/examples/wave-example-design-handoff.md +1 -1
  11. package/docs/plans/examples/wave-example-live-proof.md +1 -1
  12. package/docs/plans/migration.md +25 -8
  13. package/docs/plans/wave-orchestrator.md +8 -5
  14. package/docs/reference/cli-reference.md +11 -3
  15. package/docs/reference/coordination-and-closure.md +28 -5
  16. package/docs/reference/live-proof-waves.md +9 -0
  17. package/docs/reference/npmjs-trusted-publishing.md +2 -2
  18. package/docs/reference/runtime-config/README.md +10 -3
  19. package/docs/reference/sample-waves.md +5 -5
  20. package/docs/reference/skills.md +1 -1
  21. package/docs/reference/wave-control.md +16 -0
  22. package/docs/reference/wave-planning-lessons.md +7 -1
  23. package/docs/research/coordination-failure-review.md +6 -6
  24. package/package.json +1 -1
  25. package/releases/manifest.json +36 -0
  26. package/scripts/wave-orchestrator/agent-state.mjs +42 -0
  27. package/scripts/wave-orchestrator/autonomous.mjs +42 -6
  28. package/scripts/wave-orchestrator/clarification-triage.mjs +4 -3
  29. package/scripts/wave-orchestrator/control-cli.mjs +126 -11
  30. package/scripts/wave-orchestrator/control-plane.mjs +12 -1
  31. package/scripts/wave-orchestrator/coordination-store.mjs +124 -4
  32. package/scripts/wave-orchestrator/executors.mjs +11 -6
  33. package/scripts/wave-orchestrator/gate-engine.mjs +5 -5
  34. package/scripts/wave-orchestrator/launcher-runtime.mjs +1 -1
  35. package/scripts/wave-orchestrator/launcher.mjs +216 -0
  36. package/scripts/wave-orchestrator/ledger.mjs +14 -12
  37. package/scripts/wave-orchestrator/reducer-snapshot.mjs +8 -6
  38. package/scripts/wave-orchestrator/retry-engine.mjs +19 -11
  39. package/scripts/wave-orchestrator/routing-state.mjs +50 -3
  40. package/scripts/wave-orchestrator/session-supervisor.mjs +6 -10
  41. package/scripts/wave-orchestrator/task-entity.mjs +4 -4
  42. package/scripts/wave-orchestrator/terminals.mjs +14 -14
  43. package/scripts/wave-orchestrator/wave-files.mjs +15 -21
  44. package/scripts/wave-orchestrator/wave-state-reducer.mjs +72 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,43 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ ## 0.8.8 - 2026-03-27
6
+
7
+ ### Changed
8
+
9
+ - The current release surface now ships the practical operating recommendations guide as `docs/guides/recommendations-0.8.8.md`, and the README, current-state notes, migration guide, coordination docs, and runtime-config docs now all point at the same `0.8.8` package surface.
10
+ - The tracked install-state fixture and upgrade-history records now advance to `0.8.8`, so repo-owned validation no longer lags the published package version after the follow-up docs cut.
11
+
12
+ ### Fixed And Hardened
13
+
14
+ - Release-surface regression coverage now derives the recommendations-guide path from the current package version instead of a hard-coded `0.8.7` file name, which prevents the same drift on the next release.
15
+
16
+ ### Testing And Validation
17
+
18
+ - `node scripts/wave.mjs doctor --json`
19
+ - `pnpm test -- test/wave-orchestrator/release-surface.test.ts`
20
+
21
+ ## 0.8.7 - 2026-03-27
22
+
23
+ ### Changed
24
+
25
+ - 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.
26
+ - 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.
27
+ - 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.
28
+
29
+ ### Fixed And Hardened
30
+
31
+ - 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.
32
+ - 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.
33
+ - 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.
34
+ - 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.
35
+ - 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.
36
+
37
+ ### Testing And Validation
38
+
39
+ - 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.
40
+
3
41
  ## 0.8.6 - 2026-03-25
4
42
 
5
43
  ### 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.8`
107
+ - Release tag: [`v0.8.8`](https://github.com/chllming/agent-wave-orchestrator/releases/tag/v0.8.8)
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.8`:
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 the current release line keeps the `0.8.7` capability-specific same-wave helper routing, blocker-severity consistency, and stable per-wave tmux session reuse hardening.
117
+ - Release docs, current-state notes, migration guidance, publishing instructions, and the packaged operator recommendations guide now point at the `0.8.8` surface.
118
118
 
119
119
  Requirements:
120
120
 
package/docs/README.md CHANGED
@@ -36,13 +36,15 @@ 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.8` 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:
43
43
  Read [plans/wave-orchestrator.md](./plans/wave-orchestrator.md) and the standing reviewer prompt in [agents/wave-security-role.md](./agents/wave-security-role.md).
44
44
  - Upgrading an existing repo:
45
45
  Read [plans/migration.md](./plans/migration.md), then review the release notes in [../CHANGELOG.md](../CHANGELOG.md) before running `pnpm exec wave upgrade`.
46
+ - Want the practical `0.8.8` operating stance:
47
+ Read [guides/recommendations-0.8.8.md](./guides/recommendations-0.8.8.md) for the recommended default around relaxed blocker states, advisory turn budgets, and targeted recovery.
46
48
  - Want the concrete runtime module map:
47
49
  Read [plans/end-state-architecture.md](./plans/end-state-architecture.md) for the engine-by-engine architecture and artifact ownership model.
48
50
  - Want the CLI surface map:
@@ -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.8` 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.8` 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
 
@@ -0,0 +1,133 @@
1
+ ---
2
+ title: "0.8.8 Recommendations"
3
+ summary: "How to use 0.8.8's softer blocker states, advisory turn budgets, and targeted recovery without weakening proof and closure."
4
+ ---
5
+
6
+ # 0.8.8 Recommendations
7
+
8
+ Use this guide when you are adopting `0.8.8` and want one practical operating stance for the softer blocker states, advisory turn-budget behavior, and targeted recovery flow that the current package line ships.
9
+
10
+ ## Recommended Default
11
+
12
+ For most repos, the safest `0.8.8` default is:
13
+
14
+ - bound work with `budget.minutes`
15
+ - leave generic `budget.turns` as advisory metadata
16
+ - author non-proof follow-up as `soft`, `stale`, or `advisory` instead of silently treating every open record as a hard blocker
17
+ - use `resolve-policy` when the answer already exists in repo policy or shipped docs
18
+ - prefer targeted rerun or resume after timeout, max-turn, rate-limit, or missing-status outcomes instead of relaunching the whole wave
19
+
20
+ That recommendation matches the runtime:
21
+
22
+ - executor launch metadata only emits hard turn-limit flags from `claude.maxTurns` or `opencode.steps`
23
+ - open `stale` and `advisory` coordination records stay visible without reopening the active blocking edge
24
+ - recoverable launcher failures queue targeted retry state instead of immediately escalating to broad terminal wave failure
25
+
26
+ ## 1. Budgets
27
+
28
+ Treat the two budget knobs differently:
29
+
30
+ - `budget.minutes` is the primary attempt budget
31
+ - generic `budget.turns` is only a planning hint
32
+ - `claude.maxTurns` or `opencode.steps` are the hard runtime ceilings when you actually want deterministic turn stopping
33
+
34
+ Recommended pattern for synthesis-heavy implementation or closure work:
35
+
36
+ ```json
37
+ {
38
+ "executors": {
39
+ "profiles": {
40
+ "implementation-default": {
41
+ "id": "claude",
42
+ "model": "claude-sonnet-4-6",
43
+ "budget": {
44
+ "minutes": 35,
45
+ "turns": 12
46
+ }
47
+ }
48
+ }
49
+ }
50
+ }
51
+ ```
52
+
53
+ In that pattern, `35` minutes is real policy. `12` turns is only guidance for planning and preview metadata.
54
+
55
+ Only set a hard runtime ceiling when you deliberately want the runtime itself to stop:
56
+
57
+ ```json
58
+ {
59
+ "executors": {
60
+ "profiles": {
61
+ "bounded-closure": {
62
+ "id": "claude",
63
+ "model": "claude-sonnet-4-6",
64
+ "budget": {
65
+ "minutes": 20
66
+ },
67
+ "claude": {
68
+ "maxTurns": 6
69
+ }
70
+ }
71
+ }
72
+ }
73
+ }
74
+ ```
75
+
76
+ ## 2. Softer Coordination States
77
+
78
+ `0.8.8` keeps “still visible” separate from “still blocking”.
79
+
80
+ Use these states intentionally:
81
+
82
+ | State | Use it for | What the runtime does |
83
+ | --- | --- | --- |
84
+ | `soft` | follow-up that still matters but should not be treated like proof failure | remains visible and may still drive repair or retry targeting |
85
+ | `stale` | outdated clarification or blocker context kept for history | visible in control state, but does not reopen blocking by itself |
86
+ | `advisory` | known issue, note, or human context that should stay visible without blocking closure | visible in control state, but does not own the active blocking edge |
87
+
88
+ Practical command paths:
89
+
90
+ ```bash
91
+ pnpm exec wave control task act defer --lane main --wave 10 --id blocker-doc-follow-up
92
+ pnpm exec wave control task act mark-stale --lane main --wave 10 --id clarify-a7-rollout
93
+ pnpm exec wave control task act mark-advisory --lane main --wave 10 --id request-clarify-a7-rollout
94
+ pnpm exec wave control task act resolve-policy --lane main --wave 10 --id clarify-a7-rollout --detail "Policy already covered in the rollout guide."
95
+ ```
96
+
97
+ Use them when the repo already knows the answer, the remaining item is informational, or the follow-up should stay visible for the next wave without holding the current wave hostage.
98
+
99
+ ## 3. What Should Stay Hard
100
+
101
+ Do not relax everything.
102
+
103
+ Keep these hard or closure-critical unless you are intentionally changing wave policy:
104
+
105
+ - missing proof or required deliverables
106
+ - failed integration, documentation, or cont-QA closure gates
107
+ - real human-feedback or escalation requirements that block safe continuation
108
+ - requests or clarifications that still represent unresolved ownership or policy ambiguity for the current wave
109
+
110
+ If the current wave cannot truthfully close without the answer, keep it blocking.
111
+
112
+ ## 4. Recovery Recommendation
113
+
114
+ My recommendation after reviewing the current `0.8.8` code path is:
115
+
116
+ - let timeout, max-turn, rate-limit, and missing-status failures go through the built-in targeted recovery path first
117
+ - inspect the queued rerun or resume request before manually relaunching the whole wave
118
+ - preserve reusable proof from successful sibling owners whenever the reducer already identified it as reusable
119
+
120
+ That is the shape the launcher now prefers. It only broadens failure when the remaining blockers are still proof-critical or otherwise non-recoverable.
121
+
122
+ ## 5. Suggested Operator Policy
123
+
124
+ For most repo-owned runbooks:
125
+
126
+ - teach authors to use `budget.minutes` first
127
+ - teach operators to downgrade only non-proof follow-up
128
+ - treat `resolve-policy` as the preferred path when the answer already exists in docs or repo policy
129
+ - escalate to a full-wave rerun only after targeted recovery proves insufficient
130
+
131
+ If you want a single sentence policy:
132
+
133
+ > Keep proof and closure strict, keep generic turns advisory, and keep non-proof context visible without letting it accidentally own wave closure.
@@ -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,9 +1,10 @@
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.8`, 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/`.
7
+ - The recommended `0.8.8` operating stance is documented in `docs/guides/recommendations-0.8.8.md`: keep proof and closure strict, keep generic `budget.turns` advisory, and use softer coordination states only for non-proof follow-up.
7
8
  - Runtime launch entrypoints now perform a best-effort npmjs version check, cache the result under `.wave/package-update-check.json`, and point operators at `pnpm exec wave self-update` when a newer published package exists.
8
9
  - This source repo is itself kept as an adopted Wave workspace, so `node scripts/wave.mjs doctor --json` should pass from the repo root.
9
10
  - The default lane is `main`.
@@ -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.8` 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.8`.
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.8` 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.8` surface.
4
4
 
5
5
  Use it when you are:
6
6
 
@@ -10,6 +10,21 @@ 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.8` Changes
14
+
15
+ The current `0.8.8` surface keeps the `0.8.7` policy-consistency and stable per-wave session reuse hardening, and now also packages the operator recommendations guide and install-state alignment follow-up in the release itself.
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.8` package cut.
25
+
26
+ For a practical `0.8.8` operating stance after the upgrade, read [../guides/recommendations-0.8.8.md](../guides/recommendations-0.8.8.md).
27
+
13
28
  ## What `0.8.6` Changes
14
29
 
15
30
  `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 +138,14 @@ pnpm exec wave coord inbox --lane main --wave 0 --agent A1 --dry-run
123
138
 
124
139
  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
140
 
126
- ## `0.8.6` Release Model
141
+ ## `0.8.8` Release Model
127
142
 
128
- The current `0.8.6` surface is two changes together:
143
+ The current `0.8.8` surface is three changes together:
129
144
 
130
145
  - the shipped `design` worker role and hybrid design-steward flow introduced in `0.8.5`
131
146
  - the signal-driven long-running-agent and wrapper model introduced in `0.8.6`
147
+ - the policy-consistency, targeted-recovery, capability-specific routing, and stable per-wave session reuse hardening introduced in `0.8.7`
148
+ - the packaged recommendations guide and install-state alignment follow-up released in `0.8.8`
132
149
 
133
150
  ### Signal-driven waiting and wrapper model
134
151
 
@@ -312,9 +329,9 @@ If the repo copied starter `wave.config.json` defaults, also sync:
312
329
  - if the repo uses hybrid design stewards, confirm the same agent rejoins implementation only when the authored wave explicitly gives it code ownership
313
330
  - 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
331
 
315
- ## Upgrading From `0.8.0`-`0.8.4` To `0.8.6`
332
+ ## Upgrading From `0.8.3` To `0.8.8`
316
333
 
317
- Treat this as one move to the current `0.8.6` surface.
334
+ Treat this as one move to the current `0.8.8` surface.
318
335
 
319
336
  ### What changed across that range
320
337
 
@@ -347,7 +364,7 @@ If your repo copied starter docs or skills, sync:
347
364
  - dry-run one design-steward wave if the repo wants the new authored surface
348
365
  - 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
366
 
350
- ## Upgrading From `0.6.x` Or `0.7.x` To `0.8.6`
367
+ ## Upgrading From `0.6.x` Or `0.7.x` To `0.8.8`
351
368
 
352
369
  This is the main migration path for older adopted repos.
353
370
 
@@ -388,7 +405,7 @@ pnpm exec wave control proof get --lane main --wave 0 --json
388
405
 
389
406
  If the repo carries proof-first waves, verify that required proof artifacts still exist locally and not only in historical summaries.
390
407
 
391
- ## Upgrading From `0.5.x` Or Earlier To `0.8.6`
408
+ ## Upgrading From `0.5.x` Or Earlier To `0.8.8`
392
409
 
393
410
  Do not treat this as a tiny patch bump.
394
411
 
@@ -498,4 +515,4 @@ For repos that depend on replay parity, replay at least:
498
515
 
499
516
  ## Summary
500
517
 
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.
518
+ The current `0.8.8` 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, keeps the `0.8.7` policy and routing hardening, and now also packages the practical operator recommendations guide inside the release line. 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.8` 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,33 @@ 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.
136
+
137
+ For the practical `0.8.8` recommendation on when to keep records blocking versus when to downgrade them to `soft`, `stale`, or `advisory`, see [../guides/recommendations-0.8.8.md](../guides/recommendations-0.8.8.md).
119
138
 
120
139
  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
140
 
@@ -181,7 +200,7 @@ What happens next:
181
200
  - that assignment is written into the assignment snapshot
182
201
  - the shared summary and A8 inbox now show the open helper work
183
202
 
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.
203
+ `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
204
 
186
205
  ### Step 3: Why A1 Can Be Done But The Wave Is Still Blocked
187
206
 
@@ -253,15 +272,19 @@ Important implication:
253
272
 
254
273
  - even if code is landed, an open clarification chain can still block the wave
255
274
  - 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:
275
+ - 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
276
 
258
277
  ```bash
259
278
  pnpm exec wave control status --lane main --wave 10 --agent A7 --json
260
279
  pnpm exec wave control task act reassign --lane main --wave 10 --id clarify-a7-rollout --to A1
280
+ pnpm exec wave control task act mark-stale --lane main --wave 10 --id clarify-a7-rollout
281
+ pnpm exec wave control task act mark-advisory --lane main --wave 10 --id request-clarify-a7-rollout
282
+ pnpm exec wave control task act defer --lane main --wave 10 --id blocker-doc-follow-up
283
+ 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
284
  pnpm exec wave control task act resolve --lane main --wave 10 --id escalation-clarify-a7-rollout --detail "Published command surface covers this question."
262
285
  ```
263
286
 
264
- That keeps clarification routing, dismissal, escalation, and human-answer handling inside the canonical coordination state instead of forcing ad hoc file edits.
287
+ 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
288
 
266
289
  When the operator answers through the feedback queue directly, the answer path now repairs the same canonical state:
267
290
 
@@ -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.8` 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.8`.
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,15 @@ 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
77
+ - see [../../guides/recommendations-0.8.8.md](../../guides/recommendations-0.8.8.md) for the recommended `0.8.8` operating stance that combines advisory turn budgets with softer non-proof coordination states
71
78
 
72
79
  ## Runtime Pages
73
80
 
@@ -161,7 +168,7 @@ Runtime-specific delivery:
161
168
  - OpenCode injects the compact catalog into `opencode.json` and attaches `skill.json`, `SKILL.md`, the selected adapter, and recursive `references/**` files through `--file`.
162
169
  - Local keeps skills prompt-only.
163
170
 
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.
171
+ `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
172
 
166
173
  ## Recommended Validation Path
167
174