@chllming/wave-orchestration 0.9.0 → 0.9.2

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 (68) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +133 -20
  4. package/docs/README.md +12 -4
  5. package/docs/agents/wave-security-role.md +1 -0
  6. package/docs/architecture/README.md +1498 -0
  7. package/docs/concepts/operating-modes.md +2 -2
  8. package/docs/guides/author-and-run-waves.md +14 -4
  9. package/docs/guides/planner.md +2 -2
  10. package/docs/guides/{recommendations-0.9.0.md → recommendations-0.9.2.md} +8 -7
  11. package/docs/guides/sandboxed-environments.md +158 -0
  12. package/docs/guides/terminal-surfaces.md +14 -12
  13. package/docs/plans/current-state.md +11 -3
  14. package/docs/plans/end-state-architecture.md +3 -1
  15. package/docs/plans/examples/wave-example-design-handoff.md +1 -1
  16. package/docs/plans/examples/wave-example-live-proof.md +1 -1
  17. package/docs/plans/migration.md +70 -19
  18. package/docs/plans/sandbox-end-state-architecture.md +153 -0
  19. package/docs/reference/cli-reference.md +71 -7
  20. package/docs/reference/coordination-and-closure.md +18 -1
  21. package/docs/reference/corridor.md +225 -0
  22. package/docs/reference/github-packages-setup.md +1 -1
  23. package/docs/reference/migration-0.2-to-0.5.md +9 -7
  24. package/docs/reference/npmjs-token-publishing.md +53 -0
  25. package/docs/reference/npmjs-trusted-publishing.md +4 -50
  26. package/docs/reference/package-publishing-flow.md +272 -0
  27. package/docs/reference/runtime-config/README.md +61 -3
  28. package/docs/reference/sample-waves.md +5 -5
  29. package/docs/reference/skills.md +1 -1
  30. package/docs/reference/wave-control.md +358 -27
  31. package/docs/roadmap.md +39 -204
  32. package/package.json +1 -1
  33. package/releases/manifest.json +38 -0
  34. package/scripts/wave-cli-bootstrap.mjs +52 -1
  35. package/scripts/wave-orchestrator/agent-process-runner.mjs +344 -0
  36. package/scripts/wave-orchestrator/agent-state.mjs +0 -1
  37. package/scripts/wave-orchestrator/artifact-schemas.mjs +7 -0
  38. package/scripts/wave-orchestrator/autonomous.mjs +47 -14
  39. package/scripts/wave-orchestrator/closure-engine.mjs +138 -17
  40. package/scripts/wave-orchestrator/config.mjs +199 -3
  41. package/scripts/wave-orchestrator/context7.mjs +231 -29
  42. package/scripts/wave-orchestrator/control-cli.mjs +42 -5
  43. package/scripts/wave-orchestrator/coordination.mjs +14 -0
  44. package/scripts/wave-orchestrator/corridor.mjs +363 -0
  45. package/scripts/wave-orchestrator/dashboard-renderer.mjs +115 -43
  46. package/scripts/wave-orchestrator/derived-state-engine.mjs +44 -4
  47. package/scripts/wave-orchestrator/gate-engine.mjs +126 -38
  48. package/scripts/wave-orchestrator/install.mjs +46 -0
  49. package/scripts/wave-orchestrator/launcher-progress.mjs +91 -0
  50. package/scripts/wave-orchestrator/launcher-runtime.mjs +290 -75
  51. package/scripts/wave-orchestrator/launcher.mjs +201 -53
  52. package/scripts/wave-orchestrator/ledger.mjs +7 -2
  53. package/scripts/wave-orchestrator/planner.mjs +1 -0
  54. package/scripts/wave-orchestrator/projection-writer.mjs +36 -1
  55. package/scripts/wave-orchestrator/provider-runtime.mjs +104 -0
  56. package/scripts/wave-orchestrator/reducer-snapshot.mjs +6 -0
  57. package/scripts/wave-orchestrator/retry-control.mjs +3 -3
  58. package/scripts/wave-orchestrator/retry-engine.mjs +93 -6
  59. package/scripts/wave-orchestrator/role-helpers.mjs +30 -0
  60. package/scripts/wave-orchestrator/session-supervisor.mjs +94 -85
  61. package/scripts/wave-orchestrator/shared.mjs +1 -0
  62. package/scripts/wave-orchestrator/supervisor-cli.mjs +1306 -0
  63. package/scripts/wave-orchestrator/terminals.mjs +12 -32
  64. package/scripts/wave-orchestrator/tmux-adapter.mjs +300 -0
  65. package/scripts/wave-orchestrator/traces.mjs +25 -0
  66. package/scripts/wave-orchestrator/wave-control-client.mjs +14 -1
  67. package/scripts/wave-orchestrator/wave-files.mjs +38 -5
  68. package/scripts/wave.mjs +13 -0
@@ -82,10 +82,10 @@ That usually means:
82
82
 
83
83
  ## Relationship To The Roadmap
84
84
 
85
- The roadmap still includes stronger explicit oversight vs dark-factory workflows. What is shipped today is the planning foundation:
85
+ The current roadmap is a release-direction document, not a backlog of planner phases. What is shipped today is still the planning foundation:
86
86
 
87
87
  - stored project defaults
88
88
  - typed values in planner output
89
89
  - better environment modeling
90
90
 
91
- The stricter execution semantics are the next step, not a hidden already-finished feature.
91
+ The stricter execution semantics are still future work, not a hidden already-finished feature in `0.9.2`.
@@ -74,7 +74,7 @@ Good fits:
74
74
  - multi-owner waves where downstream implementers need the same decisions and assumptions
75
75
  - ambiguous tasks where open questions should become explicit before code owners fan out
76
76
 
77
- The starter contract in `0.9.0` is:
77
+ The starter contract in `0.9.2` is:
78
78
 
79
79
  - import `docs/agents/wave-design-role.md`
80
80
  - own one packet such as `docs/plans/waves/design/wave-<n>-<agentId>.md`
@@ -101,12 +101,12 @@ Human feedback is an escalation path, not the operating mode itself. The orchest
101
101
 
102
102
  ## 4. Choose The Operator Surface
103
103
 
104
- Live runs always execute in `tmux`. The terminal surface only decides how you attach:
104
+ Live agent runs now execute in detached process runners. The terminal surface only decides how you follow logs and attach to dashboard projections:
105
105
 
106
106
  - `vscode`
107
- VS Code gets temporary attach entries for the live tmux sessions.
107
+ VS Code gets temporary attach entries for process-backed agent logs and dashboard projections.
108
108
  - `tmux`
109
- Terminal-native operation with no VS Code integration.
109
+ Terminal-native dashboard and operator projection surface with no VS Code integration.
110
110
  - `none`
111
111
  Dry-run only.
112
112
 
@@ -116,6 +116,16 @@ Recommended defaults:
116
116
  - remote shell or devbox: `tmux`
117
117
  - CI or validation-only work: `none` with `--dry-run`
118
118
 
119
+ If the surrounding environment is the unstable part, not the repo itself, prefer the sandbox-safe path:
120
+
121
+ - `wave submit`
122
+ - `wave supervise`
123
+ - `wave status`
124
+ - `wave wait`
125
+ - `wave attach`
126
+
127
+ That is the right fit for LEAPclaw, OpenClaw, Nemoshell, Docker, and similar short-lived exec shells. Use direct `wave launch` when the client shell itself can stay alive for the entire wave. For the concrete setup patterns, read [sandboxed-environments.md](./sandboxed-environments.md).
128
+
119
129
  ## 5. Dry-Run Before Live Execution
120
130
 
121
131
  Treat dry-run as the quality gate for the authored wave:
@@ -6,7 +6,7 @@ If you want the full author-to-launch workflow, start with [author-and-run-waves
6
6
 
7
7
  It reduces repeated setup questions, stores project defaults, and generates wave specs plus markdown that already fit the launcher.
8
8
 
9
- The published `0.9.0` 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.9.2` 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
 
@@ -48,7 +48,7 @@ pnpm exec wave launch --lane main --dry-run --no-dashboard
48
48
  - forward replanning of later waves
49
49
  - separate runtime enforcement for oversight vs dark-factory
50
50
 
51
- Those remain roadmap work. The planner foundation is about better structured authoring, not a second execution engine.
51
+ Those remain future work outside the current `0.9.2` release line. The planner foundation is about better structured authoring, not a second execution engine.
52
52
 
53
53
  ## Project Profile
54
54
 
@@ -1,21 +1,22 @@
1
1
  ---
2
- title: "0.9.0 Recommendations"
3
- summary: "How to use 0.9.0's softer blocker states, advisory turn budgets, and targeted recovery without weakening proof and closure."
2
+ title: "0.9.2 Recommendations"
3
+ summary: "How to use 0.9.2's softer blocker states, advisory turn budgets, and targeted recovery without weakening proof and closure."
4
4
  ---
5
5
 
6
- # 0.9.0 Recommendations
6
+ # 0.9.2 Recommendations
7
7
 
8
- Use this guide when you are adopting `0.9.0` and want one practical operating stance for the softer blocker states, advisory turn-budget behavior, and targeted recovery flow that the current package line ships.
8
+ Use this guide when you are adopting `0.9.2` and want one practical operating stance for the softer blocker states, advisory turn-budget behavior, and targeted recovery flow that the current package line ships.
9
9
 
10
10
  ## Recommended Default
11
11
 
12
- For most repos, the safest `0.9.0` default is:
12
+ For most repos, the safest `0.9.2` default is:
13
13
 
14
14
  - bound work with `budget.minutes`
15
15
  - leave generic `budget.turns` as advisory metadata
16
16
  - author non-proof follow-up as `soft`, `stale`, or `advisory` instead of silently treating every open record as a hard blocker
17
17
  - use `resolve-policy` when the answer already exists in repo policy or shipped docs
18
18
  - prefer targeted rerun or resume after timeout, max-turn, rate-limit, or missing-status outcomes instead of relaunching the whole wave
19
+ - in short-lived sandboxes, prefer `wave submit`, `wave supervise`, `wave status`, and `wave wait` instead of binding the full run to one client shell
19
20
 
20
21
  That recommendation matches the runtime:
21
22
 
@@ -75,7 +76,7 @@ Only set a hard runtime ceiling when you deliberately want the runtime itself to
75
76
 
76
77
  ## 2. Softer Coordination States
77
78
 
78
- `0.9.0` keeps “still visible” separate from “still blocking”.
79
+ `0.9.2` keeps “still visible” separate from “still blocking”.
79
80
 
80
81
  Use these states intentionally:
81
82
 
@@ -111,7 +112,7 @@ If the current wave cannot truthfully close without the answer, keep it blocking
111
112
 
112
113
  ## 4. Recovery Recommendation
113
114
 
114
- My recommendation after reviewing the current `0.9.0` code path is:
115
+ My recommendation after reviewing the current `0.9.2` code path is:
115
116
 
116
117
  - let timeout, max-turn, rate-limit, and missing-status failures go through the built-in targeted recovery path first
117
118
  - inspect the queued rerun or resume request before manually relaunching the whole wave
@@ -0,0 +1,158 @@
1
+ # Running Wave In Sandboxed Environments
2
+
3
+ Use this guide when Wave is running under a short-lived shell or exec environment rather than a normal long-lived operator shell.
4
+
5
+ Typical examples:
6
+
7
+ - LEAPclaw or OpenClaw-style agent harnesses that give you short `exec` windows
8
+ - Nemoshell or similar hosted terminal sandboxes
9
+ - Docker or devcontainer setups where the client process is disposable but the workspace and state volume persist
10
+
11
+ The core rule in `0.9.2` is simple:
12
+
13
+ - clients should be short-lived
14
+ - supervision should be long-lived
15
+ - agent execution should be process-backed, not tmux-backed
16
+
17
+ Wave now launches agents through detached process runners by default, which lowers tmux session churn and memory pressure compared with the old “every live agent owns a tmux session” shape. Tmux is now optional and dashboard-only.
18
+
19
+ ## Recommended Model
20
+
21
+ For sandboxes, prefer the async supervisor surface:
22
+
23
+ ```bash
24
+ pnpm exec wave submit ...
25
+ pnpm exec wave supervise ...
26
+ pnpm exec wave status ...
27
+ pnpm exec wave wait ...
28
+ pnpm exec wave attach ...
29
+ ```
30
+
31
+ Use direct `wave launch` when:
32
+
33
+ - you control a normal long-lived shell
34
+ - the launcher process can stay alive for the whole run
35
+ - you are doing local debugging or dry-run validation
36
+
37
+ Do not bind a multi-hour wave to one short-lived sandbox client process.
38
+
39
+ ## Baseline Configuration
40
+
41
+ Set the Codex sandbox default in `wave.config.json` for the lane or executor profile instead of retyping `--codex-sandbox` on every command.
42
+
43
+ Typical sandbox-safe pattern:
44
+
45
+ ```json
46
+ {
47
+ "executors": {
48
+ "codex": {
49
+ "sandbox": "workspace-write"
50
+ }
51
+ }
52
+ }
53
+ ```
54
+
55
+ Use a stricter mode such as `read-only` when the task truly should not write. Use `danger-full-access` only when the outer environment is already providing the isolation you want.
56
+
57
+ Treat `tmux` as optional:
58
+
59
+ - install it only if you want live dashboard attach
60
+ - use `--no-dashboard` in constrained environments when you do not need the extra projection process
61
+
62
+ ## LEAPclaw / OpenClaw / Nemoshell Pattern
63
+
64
+ In these environments, the common failure mode is a short-lived client exec timeout while the wave itself needs much longer.
65
+
66
+ Preferred shape:
67
+
68
+ 1. A disposable client submits work.
69
+ 2. A durable daemon owns the run.
70
+ 3. Clients poll or wait observationally.
71
+
72
+ Example:
73
+
74
+ ```bash
75
+ runId=$(pnpm exec wave submit \
76
+ --project backend \
77
+ --lane main \
78
+ --start-wave 2 \
79
+ --end-wave 2 \
80
+ --no-dashboard \
81
+ --json | jq -r .runId)
82
+
83
+ pnpm exec wave status --run-id "$runId" --project backend --lane main --json
84
+ pnpm exec wave wait --run-id "$runId" --project backend --lane main --timeout-seconds 300 --json
85
+ ```
86
+
87
+ Keep `wave supervise` alive outside the short-lived client call:
88
+
89
+ - a long-lived host shell
90
+ - a background service
91
+ - a job runner that can outlive the client request
92
+
93
+ If the sandbox only gives you short exec windows, `wave autonomous` should not be the thing owning the run. Use submit plus observe instead.
94
+
95
+ ## Docker And Containerized Setups
96
+
97
+ Docker works well with the `0.9.2` process-backed runner model, but only if the state directories survive container restarts.
98
+
99
+ Recommended container posture:
100
+
101
+ - mount the repo root as a persistent volume
102
+ - preserve `.tmp/` and `.wave/`
103
+ - run `wave supervise` in a long-lived container or sidecar
104
+ - use `wave submit/status/wait` from short-lived execs
105
+ - disable dashboards unless the image actually includes `tmux` and you want the extra process
106
+
107
+ Practical rules:
108
+
109
+ - dashboard attach is optional; log-follow attach is enough for most sandbox automation
110
+ - `wave attach --agent <id>` now follows the recorded log when no live interactive session exists
111
+ - `wave attach --dashboard` falls back to the last written dashboard file when no live dashboard session exists
112
+
113
+ ## Terminal Surface Recommendations
114
+
115
+ For constrained sandboxes:
116
+
117
+ - `--terminal-surface vscode`
118
+ Good when the repo is local and the editor integration is useful.
119
+ - `--terminal-surface tmux`
120
+ Good only when `tmux` is installed and you actually want live dashboard attach.
121
+ - `--terminal-surface none`
122
+ Dry-run only.
123
+
124
+ The important distinction is that terminal surface is now an operator preference, not the agent execution backend.
125
+
126
+ ## Validation Checklist
127
+
128
+ Run these after setup changes:
129
+
130
+ ```bash
131
+ pnpm exec wave doctor --json
132
+ pnpm exec wave launch --lane main --dry-run --no-dashboard
133
+ ```
134
+
135
+ For a sandboxed lane, also verify:
136
+
137
+ - `wave submit --json` returns a `runId`
138
+ - `wave status` and `wave wait` work with exact `--project` and `--lane`
139
+ - the supervisor run tree exists under `.tmp/.../control/supervisor/runs/<runId>/`
140
+ - dashboards are either intentionally disabled or intentionally backed by a real `tmux` install
141
+
142
+ ## When To Keep Using `wave launch`
143
+
144
+ Use `wave launch` directly when:
145
+
146
+ - you are on a normal workstation shell
147
+ - the launcher can stay alive for the entire run
148
+ - you want the fastest direct local workflow
149
+ - you are debugging wave behavior and want the simplest path
150
+
151
+ Use `wave submit` plus `wave supervise` when the surrounding environment, not the wave itself, is the unstable part.
152
+
153
+ ## Related Docs
154
+
155
+ - [author-and-run-waves.md](./author-and-run-waves.md)
156
+ - [terminal-surfaces.md](./terminal-surfaces.md)
157
+ - [../reference/cli-reference.md](../reference/cli-reference.md)
158
+ - [../plans/sandbox-end-state-architecture.md](../plans/sandbox-end-state-architecture.md)
@@ -6,15 +6,16 @@ Wave has separate concepts for execution substrate and operator surface.
6
6
 
7
7
  The important detail is:
8
8
 
9
- - live runs use `tmux` sessions
10
- - terminal surfaces control how operators attach to those sessions
9
+ - live agent runs use detached process runners
10
+ - terminal surfaces control how operators follow logs and attach to dashboard projections
11
+ - sandbox-safe submission and supervision are documented separately in [sandboxed-environments.md](./sandboxed-environments.md)
11
12
 
12
13
  ## The Three Terminal Surfaces
13
14
 
14
15
  - `vscode`
15
- The launcher writes temporary entries to `.vscode/terminals.json` so VS Code can attach to the tmux sessions.
16
+ The launcher writes temporary entries to `.vscode/terminals.json` so VS Code can follow process-backed agent logs and attach to stable dashboard projections.
16
17
  - `tmux`
17
- The launcher uses tmux only and never touches `.vscode/terminals.json`.
18
+ The launcher uses tmux only for dashboard and operator projection sessions and never touches `.vscode/terminals.json`.
18
19
  - `none`
19
20
  Dry-run only. No live terminal surface is allowed in this mode.
20
21
 
@@ -22,12 +23,12 @@ The important detail is:
22
23
 
23
24
  `vscode` is not a second process host. It is a convenience attachment surface.
24
25
 
25
- The actual live sessions still run in tmux. The VS Code terminal registry just exposes stable attach commands for those tmux sessions.
26
+ The actual live agent work runs in detached processes. The VS Code terminal registry exposes stable log-follow commands for agents plus stable attach commands for dashboard projections.
26
27
 
27
28
  Use `vscode` when:
28
29
 
29
30
  - your main operator flow is inside VS Code
30
- - you want one-click attach behavior for agent sessions and dashboards
31
+ - you want one-click attach behavior for agent logs and dashboards
31
32
  - touching `.vscode/terminals.json` is acceptable in the repo
32
33
 
33
34
  ## What `tmux` Really Means
@@ -47,7 +48,7 @@ By default the launcher can start per-wave dashboard sessions in tmux.
47
48
 
48
49
  Wave now maintains stable tmux attach targets for both the current-wave dashboard and the global dashboard on the lane socket.
49
50
 
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
+ Wave agent execution no longer depends on tmux. `wave attach --agent` uses a live interactive session only when the runtime explicitly exposes one; otherwise it follows the recorded agent log or prints the terminal log tail.
51
52
 
52
53
  Use:
53
54
 
@@ -56,18 +57,18 @@ pnpm exec wave dashboard --lane main --attach current
56
57
  pnpm exec wave dashboard --lane main --attach global
57
58
  ```
58
59
 
59
- Those commands work for both `tmux` and `vscode` terminal surfaces because the live sessions still run on the lane tmux socket.
60
+ Those commands work for both `tmux` and `vscode` terminal surfaces because the live dashboard projections still run on the lane tmux socket. If no live dashboard session exists, the attach command falls back to the last written dashboard JSON instead of failing immediately.
60
61
 
61
62
  When `--terminal-surface vscode` is active, Wave also maintains a stable current-wave dashboard terminal entry instead of creating a new wave-numbered dashboard attach target for every wave transition.
62
63
 
63
64
  Important flags:
64
65
 
65
66
  - `--no-dashboard`
66
- Disable the per-wave tmux dashboard session.
67
+ Disable the per-wave dashboard projection session.
67
68
  - `--cleanup-sessions`
68
- Kill lane tmux sessions after each wave. This is the default.
69
+ Kill lane tmux dashboard and projection sessions after each wave. This is the default.
69
70
  - `--keep-sessions`
70
- Preserve tmux sessions after the wave for inspection.
71
+ Preserve tmux dashboard and projection sessions after the wave for inspection.
71
72
  - `--keep-terminals`
72
73
  Keep temporary VS Code terminal entries instead of cleaning them up.
73
74
 
@@ -76,7 +77,8 @@ Important flags:
76
77
  - Use `vscode` for local interactive operator work when the temporary terminal registry is useful.
77
78
  - Use `tmux` for remote, CI-like, or editor-independent operation.
78
79
  - Use `none` only with `--dry-run`.
79
- - Prefer `wave dashboard --attach current|global` over manual `tmux -L <socket> attach ...` lookups.
80
+ - In constrained sandboxes or containers, treat dashboards as optional and prefer `--no-dashboard` unless `tmux` is installed and you actually want the extra projection process.
81
+ - Prefer `wave dashboard --attach current|global` over manual `tmux -L <socket> attach ...` lookups; it will fall back to the last written dashboard file when no live session exists.
80
82
  - Pair `--keep-sessions` with incident review or deep debugging, not as a default steady-state mode.
81
83
  - Pair `--no-dashboard` with scripted dry-runs or when the board and summaries are sufficient.
82
84
 
@@ -1,11 +1,15 @@
1
1
  # Current State
2
2
 
3
- - The published package is `0.9.0`; that release adds first-class monorepo project support, project-aware runtime isolation, and default metadata delivery to Wave Control while keeping the shipped design-role and signal-hygiene starter surface.
4
- - 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`.
3
+ - The published package is `0.9.2`; that release keeps the shipped monorepo, design-role, and signal-hygiene surfaces, but now also moves live agent execution to detached process runners, reduces tmux and memory pressure during wide orchestration bursts, hardens the sandbox-safe supervisor path for LEAPclaw, OpenClaw, Nemoshell, Docker, and similar short-lived exec environments, and documents the current authenticated Wave Control plus Corridor-backed security surface that already ships in this repo.
4
+ - The canonical shipped runtime architecture is documented in `docs/plans/end-state-architecture.md`; the sandbox-runtime companion is `docs/plans/sandbox-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.9.0` operating stance is documented in `docs/guides/recommendations-0.9.0.md`: keep proof and closure strict, keep generic `budget.turns` advisory, and use softer coordination states only for non-proof follow-up.
7
+ - The recommended `0.9.2` operating stance is documented in `docs/guides/recommendations-0.9.2.md`: keep proof and closure strict, keep generic `budget.turns` advisory, and use softer coordination states only for non-proof follow-up.
8
+ - Sandbox-safe setup guidance now ships in `docs/guides/sandboxed-environments.md`: use `wave submit/supervise/status/wait/attach` for short-lived clients, keep `tmux` optional and dashboard-only, and preserve `.tmp/` plus `.wave/` when running inside Nemoshell or Docker.
8
9
  - 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.
10
+ - The companion control plane now ships in two packages:
11
+ - `services/wave-control/` is the backend for typed telemetry, Stack-authenticated app users, Wave-managed approval states and provider grants, PATs, dedicated service tokens, encrypted per-user credential storage, runtime env leasing, and owned broker routes for Context7 or Corridor
12
+ - `services/wave-control-web/` is the Vite/Lit browser frontend that signs in through Stack, persists the browser session, exposes overview/runs/benchmarks/tokens, and adds superuser-only user, provider-grant, and write-only credential management
9
13
  - This source repo is itself kept as an adopted Wave workspace, so `node scripts/wave.mjs doctor --json` should pass from the repo root.
10
14
  - The default lane is `main`.
11
15
  - Planner foundation is now shipped:
@@ -46,6 +50,7 @@
46
50
  - orchestrator-first clarification triage plus human escalation artifacts
47
51
  - answered human-feedback responses that reconcile canonical coordination state, helper assignments, and safe continuation intent even when the launcher is no longer active
48
52
  - optional `--resident-orchestrator` support for a long-running, non-owning orchestrator session during live waves
53
+ - detached process-backed agent execution, per-agent runtime records, and log-follow attach behavior so normal agents no longer require tmux-backed execution sessions
49
54
  - seeded operator wrappers `scripts/wave-status.sh` and `scripts/wave-watch.sh` that expose machine-friendly wait, completion, failure, and input-required status by reading `wave control status --json`
50
55
  - persisted relaunch plans under `.tmp/<lane>-wave-launcher/status/` so targeted retry intent can survive a launcher restart
51
56
  - a canonical control-plane event log under `.tmp/<lane>-wave-launcher/control-plane/` that records operator tasks, rerun requests, proof bundles, contradictions, facts, human-input workflow, observed `wave_run`, `attempt`, and `agent_run` lifecycle events, plus `wave_signal` and `agent_signal` update events as append-only JSONL; `wave control` materializes state from this log
@@ -53,6 +58,9 @@
53
58
  - authoritative proof registries projected to `.tmp/<lane>-wave-launcher/proof/` for compatibility, while preserving proof bundle lifecycle state so revoked or superseded operator evidence cannot keep satisfying closure
54
59
  - optional Wave Control telemetry under `.tmp/<lane>-wave-launcher/control-plane/telemetry/` for the implicit default project, or `.tmp/projects/<projectId>/<lane>-wave-launcher/control-plane/telemetry/` for explicit projects
55
60
  - packaged telemetry defaults now point at `https://wave-control.up.railway.app/api/v1` with `reportMode: metadata-only`, and repos must opt out explicitly if they do not want default project/lane/wave metadata delivery
61
+ - an optional `externalProviders.corridor` surface with `direct`, `broker`, and `hybrid` modes that writes `.tmp/<lane>-wave-launcher/security/wave-<n>-corridor.json` for the implicit default project, or `.tmp/projects/<projectId>/<lane>-wave-launcher/security/wave-<n>-corridor.json` for explicit projects
62
+ - closure-stage Corridor gating that can fail as `corridor-fetch-failed` or `corridor-blocked` before integration when the provider fetch fails or matched implementation-owned findings meet the configured threshold
63
+ - security and integration summaries that keep matched Corridor findings visible alongside the human security review instead of replacing the reviewer with provider output
56
64
  - reducer-driven live state snapshots plus persisted machine-readable shadow diffs for helper-assignment, blocker, contradiction, closure, and retry slices
57
65
  - reducer-authoritative helper-assignment blocking, retry target selection, and resume planning, with live gate and closure reads now driven from validated result envelopes
58
66
  - optional design agents that publish validated design packets under `docs/plans/waves/design/wave-<n>-<agent>.md`, gate implementation through `designGate`, and run before code-owning implementation agents
@@ -1,6 +1,8 @@
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.9.0` 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.9.2` surface now follows.
4
+
5
+ For the sandbox-specific execution model, including async supervisor ownership, daemon adoption goals, and forwarded closure-gap behavior, read [sandbox-end-state-architecture.md](./sandbox-end-state-architecture.md).
4
6
 
5
7
  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
8
 
@@ -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.9.0`.
3
+ This is a showcase-first sample wave for the shipped `design` worker role in `0.9.2`.
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.9.0` Wave surface.
5
+ Use it as the single reference example for the current `0.9.2` 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.9.0` surface.
3
+ This page is the practical repo-upgrade guide for the current `0.9.2` surface.
4
4
 
5
5
  Use it when you are:
6
6
 
@@ -10,21 +10,27 @@ 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.9.0` Changes
13
+ For the sandbox-specific long-running execution target, including async `submit/status/wait` semantics and daemon ownership goals, see [sandbox-end-state-architecture.md](./sandbox-end-state-architecture.md).
14
14
 
15
- The current `0.9.0` surface keeps the packaged operator-guidance alignment and adds first-class monorepo project support plus project-aware default telemetry.
15
+ ## What `0.9.2` Changes
16
+
17
+ The current `0.9.2` surface keeps the packaged operator-guidance alignment, monorepo project support, and project-aware default telemetry from `0.9.0`, but adds a more sandbox-friendly execution model and lower-overhead live orchestration.
16
18
 
17
19
  The practical changes are:
18
20
 
19
- - `wave.config.json` can now declare `defaultProject` and `projects.<projectId>`, so one repo can host multiple Wave projects without lane-name collisions
20
- - planner defaults, docs roots, ad-hoc runs, dependency tickets, launcher state, and benchmark identity are now scoped by project when you use explicit monorepo projects
21
- - lane-scoped commands now accept `--project`, so the CLI can target the right project without relying on lane names alone
22
- - Wave Control defaults to `https://wave-control.up.railway.app/api/v1` with `reportMode: "metadata-only"` and sends project, lane, and wave metadata unless you explicitly opt out
23
- - the current release surface and tracked install-state fixtures now all move together on `0.9.0`
21
+ - live agent execution now uses detached process runners instead of per-agent tmux execution sessions, which reduces tmux churn and lowers memory pressure during broader fan-out
22
+ - `wave submit`, `wave supervise`, `wave status`, `wave wait`, and `wave attach` are now the preferred path for short-lived clients and sandbox automation
23
+ - supervisor recovery now reconciles launcher status and progress more conservatively, preserves the correct remaining wave range during multi-wave reruns, and keeps read-side status/wait calls aligned even after daemon loss
24
+ - the packaged docs now cover the actual shipped owned-deployment Wave Control surface: Stack-authenticated browser access, Wave-managed approval states and provider grants, PATs, service tokens, encrypted per-user credentials, runtime env leasing, and the separate `services/wave-control-web` frontend
25
+ - Corridor is now documented as a first-class security input, including direct versus broker versus hybrid mode, implementation-owned path matching, generated artifact paths, and the closure-gate interaction with the human security reviewer
26
+ - a dedicated setup guide now ships for LEAPclaw, OpenClaw, Nemoshell, Docker, and similar constrained environments
27
+ - the `0.9.0` monorepo and project-aware state layout remains part of the release surface, including `defaultProject`, `projects.<projectId>`, project-scoped state roots, and project-aware CLI routing
28
+ - the current release surface and tracked install-state fixtures now all move together on `0.9.2`
24
29
 
25
- If your repo copied starter docs, shell automation, runbooks, or `wave.config.json` defaults, these are the areas most likely to need a sync before the `0.9.0` package cut.
30
+ If your repo copied starter docs, shell automation, runbooks, or `wave.config.json` defaults, these are the areas most likely to need a sync before the `0.9.2` package cut.
26
31
 
27
- For a practical `0.9.0` operating stance after the upgrade, read [../guides/recommendations-0.9.0.md](../guides/recommendations-0.9.0.md).
32
+ For a practical `0.9.2` operating stance after the upgrade, read [../guides/recommendations-0.9.2.md](../guides/recommendations-0.9.2.md).
33
+ For the concrete operator setup in Nemoshell, Docker, and other sandboxed shells, also read [../guides/sandboxed-environments.md](../guides/sandboxed-environments.md).
28
34
 
29
35
  ## What `0.8.6` Changes
30
36
 
@@ -91,7 +97,7 @@ pnpm exec wave upgrade
91
97
 
92
98
  ### 3. Sync repo-owned starter surface only if you copied it
93
99
 
94
- The most common sync set for `0.9.0` is:
100
+ The most common sync set for `0.9.2` is:
95
101
 
96
102
  - `docs/agents/wave-launcher-role.md`
97
103
  - `docs/agents/wave-orchestrator-role.md`
@@ -105,14 +111,17 @@ The most common sync set for `0.9.0` is:
105
111
  - `scripts/wave-status.sh`
106
112
  - `scripts/wave-watch.sh`
107
113
  - `docs/guides/author-and-run-waves.md`
114
+ - `docs/guides/sandboxed-environments.md`
108
115
  - `docs/guides/planner.md`
109
116
  - `docs/guides/terminal-surfaces.md`
110
117
  - `docs/guides/signal-wrappers.md`
111
118
  - `docs/context7/planner-agent/`
112
119
  - `docs/reference/wave-planning-lessons.md`
113
120
  - `docs/reference/cli-reference.md`
121
+ - `docs/reference/corridor.md`
114
122
  - `docs/reference/skills.md`
115
123
  - `docs/reference/sample-waves.md`
124
+ - `docs/reference/wave-control.md`
116
125
  - `docs/plans/current-state.md`
117
126
  - `docs/plans/end-state-architecture.md`
118
127
  - `docs/plans/wave-orchestrator.md`
@@ -141,14 +150,56 @@ pnpm exec wave coord inbox --lane main --wave 0 --agent A1 --dry-run
141
150
 
142
151
  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.
143
152
 
144
- ## `0.9.0` Release Model
153
+ ## `0.9.2` Release Model
145
154
 
146
- The current `0.9.0` surface is three changes together:
155
+ The current `0.9.2` surface combines these strands:
147
156
 
157
+ - the detached process-runner and sandbox supervisor hardening released in `0.9.2`
158
+ - the shipped `0.9.0` monorepo project support and project-aware runtime isolation
148
159
  - the shipped `design` worker role and hybrid design-steward flow introduced in `0.8.5`
149
160
  - the signal-driven long-running-agent and wrapper model introduced in `0.8.6`
150
161
  - the policy-consistency, targeted-recovery, capability-specific routing, and stable per-wave session reuse hardening introduced in `0.8.7`
151
- - the packaged recommendations guide and install-state alignment follow-up released in `0.9.0`
162
+ - the current owned-deployment Wave Control surface: Stack-authenticated app access, provider grants, PATs, service tokens, encrypted per-user credentials, and runtime credential leasing
163
+ - the Corridor-backed security surface: direct or brokered provider fetches, normalized per-wave artifacts, and closure gating before integration
164
+ - the packaged recommendations guide, sandbox setup guide, and release-surface alignment follow-up that make the current docs describe that combined surface consistently
165
+
166
+ ### Sandbox-safe execution and lower-overhead live runs
167
+
168
+ This is the main new behavior in `0.9.2`.
169
+
170
+ The runtime now:
171
+
172
+ - launches live agents through detached process runners instead of per-agent tmux sessions
173
+ - treats tmux as dashboard-only and optional
174
+ - keeps `wave attach --agent` usable through log-follow attach even when no live interactive terminal session exists
175
+ - uses `wave submit/supervise/status/wait/attach` as the preferred sandbox-safe surface for short-lived clients
176
+
177
+ If your repo copied sandbox, CI, or container runbooks, this is the main sync set to apply from `0.9.2`:
178
+
179
+ - `README.md`
180
+ - `docs/README.md`
181
+ - `docs/guides/sandboxed-environments.md`
182
+ - `docs/guides/terminal-surfaces.md`
183
+ - `docs/reference/cli-reference.md`
184
+ - `docs/plans/sandbox-end-state-architecture.md`
185
+
186
+ ### Authenticated Wave Control and Corridor-backed security
187
+
188
+ The same `0.9.2` doc surface also now describes the current control-plane and security model as shipped:
189
+
190
+ - owned Wave Control deployments use Stack for browser sign-in, then apply Wave-managed approval states and provider grants on top of that identity
191
+ - approved users and superusers can issue PATs for scoped repo-runtime access, while dedicated service tokens keep machine-admin workflows separate from user-owned runtime credentials
192
+ - arbitrary stored credentials are encrypted at rest and only returned through explicit runtime lease responses
193
+ - `externalProviders.corridor` can run direct, brokered through an owned Wave Control deployment, or hybrid; the result is persisted as a normalized security artifact and can block closure before integration
194
+
195
+ If your repo copied release docs, security runbooks, or Wave Control setup docs, this is the main sync set to apply from `0.9.2`:
196
+
197
+ - `README.md`
198
+ - `docs/README.md`
199
+ - `docs/reference/runtime-config/README.md`
200
+ - `docs/reference/coordination-and-closure.md`
201
+ - `docs/reference/corridor.md`
202
+ - `docs/reference/wave-control.md`
152
203
 
153
204
  ### Signal-driven waiting and wrapper model
154
205
 
@@ -332,9 +383,9 @@ If the repo copied starter `wave.config.json` defaults, also sync:
332
383
  - if the repo uses hybrid design stewards, confirm the same agent rejoins implementation only when the authored wave explicitly gives it code ownership
333
384
  - 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
334
385
 
335
- ## Upgrading From `0.8.3` To `0.9.0`
386
+ ## Upgrading From `0.8.3` To `0.9.2`
336
387
 
337
- Treat this as one move to the current `0.9.0` surface.
388
+ Treat this as one move to the current `0.9.2` surface.
338
389
 
339
390
  ### What changed across that range
340
391
 
@@ -367,7 +418,7 @@ If your repo copied starter docs or skills, sync:
367
418
  - dry-run one design-steward wave if the repo wants the new authored surface
368
419
  - 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
369
420
 
370
- ## Upgrading From `0.6.x` Or `0.7.x` To `0.9.0`
421
+ ## Upgrading From `0.6.x` Or `0.7.x` To `0.9.2`
371
422
 
372
423
  This is the main migration path for older adopted repos.
373
424
 
@@ -408,7 +459,7 @@ pnpm exec wave control proof get --lane main --wave 0 --json
408
459
 
409
460
  If the repo carries proof-first waves, verify that required proof artifacts still exist locally and not only in historical summaries.
410
461
 
411
- ## Upgrading From `0.5.x` Or Earlier To `0.9.0`
462
+ ## Upgrading From `0.5.x` Or Earlier To `0.9.2`
412
463
 
413
464
  Do not treat this as a tiny patch bump.
414
465
 
@@ -518,4 +569,4 @@ For repos that depend on replay parity, replay at least:
518
569
 
519
570
  ## Summary
520
571
 
521
- The current `0.9.0` 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.
572
+ The current `0.9.2` 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.