@chllming/wave-orchestration 0.9.1 → 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.
- package/CHANGELOG.md +30 -1
- package/LICENSE.md +21 -0
- package/README.md +18 -6
- package/docs/README.md +8 -4
- package/docs/agents/wave-security-role.md +1 -0
- package/docs/architecture/README.md +1 -1
- package/docs/concepts/operating-modes.md +1 -1
- package/docs/guides/author-and-run-waves.md +1 -1
- package/docs/guides/planner.md +2 -2
- package/docs/guides/{recommendations-0.9.1.md → recommendations-0.9.2.md} +7 -7
- package/docs/guides/sandboxed-environments.md +2 -2
- package/docs/plans/current-state.md +8 -2
- package/docs/plans/end-state-architecture.md +1 -1
- package/docs/plans/examples/wave-example-design-handoff.md +1 -1
- package/docs/plans/examples/wave-example-live-proof.md +1 -1
- package/docs/plans/migration.md +42 -18
- package/docs/reference/cli-reference.md +1 -1
- package/docs/reference/coordination-and-closure.md +18 -1
- package/docs/reference/corridor.md +225 -0
- package/docs/reference/npmjs-token-publishing.md +2 -2
- package/docs/reference/package-publishing-flow.md +11 -11
- package/docs/reference/runtime-config/README.md +61 -3
- package/docs/reference/sample-waves.md +5 -5
- package/docs/reference/skills.md +1 -1
- package/docs/reference/wave-control.md +358 -27
- package/docs/roadmap.md +12 -19
- package/package.json +1 -1
- package/releases/manifest.json +22 -3
- package/scripts/wave-cli-bootstrap.mjs +52 -1
- package/scripts/wave-orchestrator/config.mjs +199 -3
- package/scripts/wave-orchestrator/context7.mjs +231 -29
- package/scripts/wave-orchestrator/coordination.mjs +14 -0
- package/scripts/wave-orchestrator/corridor.mjs +363 -0
- package/scripts/wave-orchestrator/derived-state-engine.mjs +38 -1
- package/scripts/wave-orchestrator/gate-engine.mjs +20 -0
- package/scripts/wave-orchestrator/install.mjs +34 -1
- package/scripts/wave-orchestrator/launcher-runtime.mjs +111 -7
- package/scripts/wave-orchestrator/planner.mjs +1 -0
- package/scripts/wave-orchestrator/projection-writer.mjs +23 -0
- package/scripts/wave-orchestrator/provider-runtime.mjs +104 -0
- package/scripts/wave-orchestrator/shared.mjs +1 -0
- package/scripts/wave-orchestrator/traces.mjs +25 -0
- package/scripts/wave-orchestrator/wave-control-client.mjs +14 -1
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Corridor"
|
|
3
|
+
summary: "How Wave loads Corridor security context, matches findings against implementation-owned paths, and uses the result during closure."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Corridor
|
|
7
|
+
|
|
8
|
+
Corridor is Wave's optional external security-context provider.
|
|
9
|
+
|
|
10
|
+
It does not replace the report-owning security reviewer. Instead, it adds a machine-readable guardrail and findings input that Wave can materialize before security and integration closure run.
|
|
11
|
+
|
|
12
|
+
Use it when you want Wave to:
|
|
13
|
+
|
|
14
|
+
- pull guardrail or findings context for a project
|
|
15
|
+
- filter that context down to the implementation-owned paths in the current wave
|
|
16
|
+
- persist the normalized result as a runtime artifact
|
|
17
|
+
- fail closure automatically when the fetch fails or matched findings cross a configured severity threshold
|
|
18
|
+
|
|
19
|
+
## Modes
|
|
20
|
+
|
|
21
|
+
Wave supports three Corridor modes under `externalProviders.corridor`:
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"externalProviders": {
|
|
26
|
+
"corridor": {
|
|
27
|
+
"enabled": true,
|
|
28
|
+
"mode": "hybrid",
|
|
29
|
+
"baseUrl": "https://app.corridor.dev/api",
|
|
30
|
+
"apiTokenEnvVar": "CORRIDOR_API_TOKEN",
|
|
31
|
+
"apiKeyFallbackEnvVar": "CORRIDOR_API_KEY",
|
|
32
|
+
"teamId": "corridor-team-id",
|
|
33
|
+
"projectId": "corridor-project-id",
|
|
34
|
+
"severityThreshold": "critical",
|
|
35
|
+
"findingStates": ["open", "potential"],
|
|
36
|
+
"requiredAtClosure": true
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
- `direct`
|
|
43
|
+
Wave calls Corridor from the repo runtime with `CORRIDOR_API_TOKEN` or the fallback `CORRIDOR_API_KEY`.
|
|
44
|
+
- `broker`
|
|
45
|
+
Wave calls an owned `wave-control` deployment with `WAVE_API_TOKEN`, and that service uses deployment-owned Corridor credentials.
|
|
46
|
+
- `hybrid`
|
|
47
|
+
Wave tries the owned `wave-control` broker first and falls back to direct auth if broker setup or broker delivery fails.
|
|
48
|
+
|
|
49
|
+
Notes:
|
|
50
|
+
|
|
51
|
+
- direct mode requires both `teamId` and `projectId` in config; the live fetches use `projectId`, while `teamId` keeps the project identity explicit in repo config
|
|
52
|
+
- broker mode requires an owned Wave Control endpoint; the packaged default endpoint intentionally rejects Corridor brokering
|
|
53
|
+
- if `findingStates` is omitted or set to `[]`, Wave does not filter by finding state and the provider may return all states
|
|
54
|
+
- if you only want active findings, set `findingStates` explicitly, for example `["open", "potential"]`
|
|
55
|
+
|
|
56
|
+
## What Wave Matches
|
|
57
|
+
|
|
58
|
+
Wave does not send every file in the repo to Corridor matching.
|
|
59
|
+
|
|
60
|
+
The runtime builds the relevant path set from implementation-owned paths in the current wave:
|
|
61
|
+
|
|
62
|
+
- security reviewers are excluded
|
|
63
|
+
- design stewards are excluded
|
|
64
|
+
- integration, documentation, and `cont-QA` owners are excluded
|
|
65
|
+
- `cont-EVAL` only contributes owned paths when that agent is implementation-owning
|
|
66
|
+
- `.tmp/` paths are excluded
|
|
67
|
+
- `docs/` paths are excluded
|
|
68
|
+
- `.md` and `.txt` files are excluded
|
|
69
|
+
|
|
70
|
+
That means Corridor is aimed at code and implementation-owned assets, not shared-plan markdown or generated launcher state.
|
|
71
|
+
|
|
72
|
+
Matching is path-prefix based:
|
|
73
|
+
|
|
74
|
+
- an exact file match counts
|
|
75
|
+
- a finding under a matched owned directory also counts
|
|
76
|
+
- unmatched findings remain in the upstream provider but are dropped from the normalized Wave artifact
|
|
77
|
+
|
|
78
|
+
## Generated Artifact
|
|
79
|
+
|
|
80
|
+
Wave writes the normalized Corridor artifact to:
|
|
81
|
+
|
|
82
|
+
- `.tmp/<lane>-wave-launcher/security/wave-<n>-corridor.json`
|
|
83
|
+
- `.tmp/projects/<projectId>/<lane>-wave-launcher/security/wave-<n>-corridor.json` for explicit projects
|
|
84
|
+
|
|
85
|
+
Representative shape:
|
|
86
|
+
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"schemaVersion": 1,
|
|
90
|
+
"wave": 7,
|
|
91
|
+
"lane": "main",
|
|
92
|
+
"projectId": "app",
|
|
93
|
+
"providerMode": "broker",
|
|
94
|
+
"source": "wave-control-broker",
|
|
95
|
+
"requiredAtClosure": true,
|
|
96
|
+
"severityThreshold": "critical",
|
|
97
|
+
"fetchedAt": "2026-03-29T12:00:00.000Z",
|
|
98
|
+
"relevantOwnedPaths": ["src/auth", "src/session"],
|
|
99
|
+
"guardrails": [{ "id": "r1", "name": "No secrets" }],
|
|
100
|
+
"matchedFindings": [
|
|
101
|
+
{
|
|
102
|
+
"id": "f1",
|
|
103
|
+
"title": "Hardcoded token",
|
|
104
|
+
"affectedFile": "src/auth/token.ts",
|
|
105
|
+
"severity": "critical",
|
|
106
|
+
"state": "open",
|
|
107
|
+
"matchedOwnedPaths": ["src/auth"]
|
|
108
|
+
}
|
|
109
|
+
],
|
|
110
|
+
"blockingFindings": [
|
|
111
|
+
{
|
|
112
|
+
"id": "f1",
|
|
113
|
+
"title": "Hardcoded token",
|
|
114
|
+
"affectedFile": "src/auth/token.ts",
|
|
115
|
+
"severity": "critical",
|
|
116
|
+
"state": "open",
|
|
117
|
+
"matchedOwnedPaths": ["src/auth"]
|
|
118
|
+
}
|
|
119
|
+
],
|
|
120
|
+
"blocking": true,
|
|
121
|
+
"error": null
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Important fields:
|
|
126
|
+
|
|
127
|
+
- `providerMode`: the configured mode after runtime resolution
|
|
128
|
+
- `source`: the actual fetch source such as direct Corridor API or owned Wave Control broker
|
|
129
|
+
- `relevantOwnedPaths`: the implementation-owned paths Wave considered eligible for matching
|
|
130
|
+
- `guardrails`: normalized provider-side guardrail/report metadata
|
|
131
|
+
- `matchedFindings`: findings that hit the wave's eligible owned paths
|
|
132
|
+
- `blockingFindings`: matched findings whose severity meets or exceeds `severityThreshold`
|
|
133
|
+
- `blocking`: whether the Corridor result alone is enough to fail the security gate
|
|
134
|
+
- `error`: the fetch or broker error when the load failed
|
|
135
|
+
|
|
136
|
+
If the wave has no eligible implementation-owned paths, Wave still writes a successful artifact with `blocking: false` and a `detail` explaining that nothing qualified for matching.
|
|
137
|
+
|
|
138
|
+
## Closure Behavior
|
|
139
|
+
|
|
140
|
+
Corridor is evaluated before security review finishes.
|
|
141
|
+
|
|
142
|
+
The security gate behaves like this:
|
|
143
|
+
|
|
144
|
+
1. If Corridor is disabled, Wave ignores it.
|
|
145
|
+
2. If Corridor is enabled and the fetch fails:
|
|
146
|
+
- `requiredAtClosure: true` turns that into `corridor-fetch-failed`
|
|
147
|
+
- `requiredAtClosure: false` keeps the failure visible in summaries without hard-failing the gate
|
|
148
|
+
3. If Corridor loads and matched findings meet the configured threshold:
|
|
149
|
+
- the gate fails as `corridor-blocked`
|
|
150
|
+
4. If Corridor loads cleanly:
|
|
151
|
+
- security review still runs and still owns the human-readable report plus `[wave-security]`
|
|
152
|
+
|
|
153
|
+
That separation matters:
|
|
154
|
+
|
|
155
|
+
- Corridor provides machine-readable blocking evidence
|
|
156
|
+
- the security reviewer still provides the threat-model-first narrative review, approvals, and final marker
|
|
157
|
+
- `concerns` from the human reviewer remain advisory, while `blocked` from either the reviewer or Corridor stops closure before integration
|
|
158
|
+
|
|
159
|
+
Matched Corridor findings are also copied into the generated security and integration summaries, so they remain visible even when the human reviewer reports advisory concerns rather than a hard block.
|
|
160
|
+
|
|
161
|
+
## Broker Mode Through Wave Control
|
|
162
|
+
|
|
163
|
+
In broker mode, the repo runtime sends a normalized request to:
|
|
164
|
+
|
|
165
|
+
- `POST /api/v1/providers/corridor/context`
|
|
166
|
+
|
|
167
|
+
The request body contains:
|
|
168
|
+
|
|
169
|
+
- `projectId`: the active Wave project id
|
|
170
|
+
- `wave`: current wave number
|
|
171
|
+
- `ownedPaths`: the filtered implementation-owned paths
|
|
172
|
+
- `severityThreshold`
|
|
173
|
+
- `findingStates`
|
|
174
|
+
|
|
175
|
+
The owned `wave-control` deployment then:
|
|
176
|
+
|
|
177
|
+
- looks up the Wave project id inside `WAVE_BROKER_CORRIDOR_PROJECT_MAP`
|
|
178
|
+
- fetches Corridor reports and findings with the deployment-owned `WAVE_BROKER_CORRIDOR_API_TOKEN`
|
|
179
|
+
- returns the same normalized shape Wave would have produced in direct mode
|
|
180
|
+
|
|
181
|
+
Example mapping:
|
|
182
|
+
|
|
183
|
+
```json
|
|
184
|
+
{
|
|
185
|
+
"app": {
|
|
186
|
+
"teamId": "corridor-team-uuid",
|
|
187
|
+
"projectId": "corridor-project-uuid"
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Broker mode requirements:
|
|
193
|
+
|
|
194
|
+
- `waveControl.endpoint` must point at an owned Wave Control deployment, not the packaged default endpoint
|
|
195
|
+
- Wave must have a bearer token, normally `WAVE_API_TOKEN`
|
|
196
|
+
- the service deployment must enable Corridor brokering with `WAVE_BROKER_OWNED_DEPLOYMENT=true`, `WAVE_BROKER_ENABLE_CORRIDOR=true`, `WAVE_BROKER_CORRIDOR_API_TOKEN`, and `WAVE_BROKER_CORRIDOR_PROJECT_MAP`
|
|
197
|
+
|
|
198
|
+
## Prompt And Summary Surfaces
|
|
199
|
+
|
|
200
|
+
When Corridor loads during a live run, Wave also projects a compact text summary into the generated runtime context. That summary includes:
|
|
201
|
+
|
|
202
|
+
- the actual source used
|
|
203
|
+
- whether Corridor is currently blocking
|
|
204
|
+
- the configured threshold
|
|
205
|
+
- matched finding count
|
|
206
|
+
- up to five blocking findings
|
|
207
|
+
|
|
208
|
+
The same Corridor result then appears in:
|
|
209
|
+
|
|
210
|
+
- the generated security summary
|
|
211
|
+
- the integration summary
|
|
212
|
+
- the trace bundle's copied `corridor.json`
|
|
213
|
+
|
|
214
|
+
This keeps security context visible to humans without turning the provider response into the sole authority.
|
|
215
|
+
|
|
216
|
+
## Recommended Pattern
|
|
217
|
+
|
|
218
|
+
For most repos:
|
|
219
|
+
|
|
220
|
+
- use `hybrid` if you want an owned Wave Control deployment in normal operation but still want direct-repo fallback during outages or incomplete broker setup
|
|
221
|
+
- set `findingStates` explicitly if you only want open or potential findings considered live
|
|
222
|
+
- leave `requiredAtClosure` enabled when Corridor is meant to be part of the actual release gate
|
|
223
|
+
- keep a report-owning security reviewer in the wave; Corridor should strengthen that review, not replace it
|
|
224
|
+
|
|
225
|
+
See [runtime-config/README.md](./runtime-config/README.md) for the config keys, [wave-control.md](./wave-control.md) for the owned broker surface, and [coordination-and-closure.md](./coordination-and-closure.md) for the closure-stage gate ordering.
|
|
@@ -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.9.
|
|
5
|
+
The current `0.9.2` 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.9.
|
|
51
|
+
5. Push the release commit and release tag, for example `v0.9.2`.
|
|
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.
|
|
@@ -15,7 +15,7 @@ Release preparation happens in the repository itself:
|
|
|
15
15
|
- update release-surface docs and fixtures
|
|
16
16
|
- validate the repo
|
|
17
17
|
- merge the release changes to `main`
|
|
18
|
-
- push a version tag such as `v0.9.
|
|
18
|
+
- push a version tag such as `v0.9.2`
|
|
19
19
|
|
|
20
20
|
Registry publishing happens in GitHub Actions after the tag push:
|
|
21
21
|
|
|
@@ -127,9 +127,9 @@ This repository protects `main`, so release changes must land through a pull req
|
|
|
127
127
|
Typical git flow:
|
|
128
128
|
|
|
129
129
|
```bash
|
|
130
|
-
git checkout -b release/0.9.
|
|
131
|
-
git push -u origin release/0.9.
|
|
132
|
-
gh pr create --base main --head release/0.9.
|
|
130
|
+
git checkout -b release/0.9.2
|
|
131
|
+
git push -u origin release/0.9.2
|
|
132
|
+
gh pr create --base main --head release/0.9.2
|
|
133
133
|
gh pr merge <pr-number> --merge --delete-branch
|
|
134
134
|
```
|
|
135
135
|
|
|
@@ -138,13 +138,13 @@ gh pr merge <pr-number> --merge --delete-branch
|
|
|
138
138
|
After the release commit is on `main`, push the version tag:
|
|
139
139
|
|
|
140
140
|
```bash
|
|
141
|
-
git tag v0.9.
|
|
142
|
-
git push origin v0.9.
|
|
141
|
+
git tag v0.9.2
|
|
142
|
+
git push origin v0.9.2
|
|
143
143
|
```
|
|
144
144
|
|
|
145
145
|
That tag push is the event that starts both publishing workflows.
|
|
146
146
|
|
|
147
|
-
The tag must match the checked-in package version exactly. Example: if `package.json.version` is `0.9.
|
|
147
|
+
The tag must match the checked-in package version exactly. Example: if `package.json.version` is `0.9.2`, the pushed tag must be `v0.9.2`.
|
|
148
148
|
|
|
149
149
|
## GitHub Actions Workflows
|
|
150
150
|
|
|
@@ -212,9 +212,9 @@ Expected result after a successful publish:
|
|
|
212
212
|
|
|
213
213
|
```json
|
|
214
214
|
{
|
|
215
|
-
"version": "0.9.
|
|
215
|
+
"version": "0.9.2",
|
|
216
216
|
"dist-tags": {
|
|
217
|
-
"latest": "0.9.
|
|
217
|
+
"latest": "0.9.2"
|
|
218
218
|
}
|
|
219
219
|
}
|
|
220
220
|
```
|
|
@@ -231,8 +231,8 @@ If a tag-triggered publish fails before the package is actually published, the f
|
|
|
231
231
|
Example:
|
|
232
232
|
|
|
233
233
|
```bash
|
|
234
|
-
git tag -f v0.9.
|
|
235
|
-
git push origin refs/tags/v0.9.
|
|
234
|
+
git tag -f v0.9.2 <fixed-commit>
|
|
235
|
+
git push origin refs/tags/v0.9.2 --force
|
|
236
236
|
```
|
|
237
237
|
|
|
238
238
|
Use that only before the package is live on npmjs. Once npmjs has accepted a version, do not try to republish the same version; cut a new version instead.
|
|
@@ -8,6 +8,7 @@ Use it when you need the full supported surface for:
|
|
|
8
8
|
- `defaultProject` and `projects.<projectId>`
|
|
9
9
|
- `lanes.<lane>.executors`
|
|
10
10
|
- `waveControl`
|
|
11
|
+
- `externalProviders`
|
|
11
12
|
- `executors.profiles.<profile>`
|
|
12
13
|
- per-agent `### Executor` blocks inside a wave file
|
|
13
14
|
|
|
@@ -190,7 +191,7 @@ Practical guidance:
|
|
|
190
191
|
- prefer `budget.minutes` for normal synthesis, integration, and closure work
|
|
191
192
|
- use generic `budget.turns` as a planning hint, not a hard failure trigger
|
|
192
193
|
- only set `claude.maxTurns` or `opencode.steps` when you deliberately want a hard ceiling for that runtime
|
|
193
|
-
- see [../../guides/recommendations-0.9.
|
|
194
|
+
- see [../../guides/recommendations-0.9.2.md](../../guides/recommendations-0.9.2.md) for the recommended `0.9.2` operating stance that combines advisory turn budgets with softer non-proof coordination states
|
|
194
195
|
|
|
195
196
|
## Runtime Pages
|
|
196
197
|
|
|
@@ -202,7 +203,7 @@ Practical guidance:
|
|
|
202
203
|
|
|
203
204
|
`wave.config.json` may also declare a `waveControl` block for local-first telemetry delivery.
|
|
204
205
|
|
|
205
|
-
Packaged defaults in `@chllming/wave-orchestration@0.9.
|
|
206
|
+
Packaged defaults in `@chllming/wave-orchestration@0.9.2`:
|
|
206
207
|
|
|
207
208
|
- `endpoint`: `https://wave-control.up.railway.app/api/v1`
|
|
208
209
|
- `reportMode`: `metadata-only`
|
|
@@ -219,7 +220,10 @@ Supported top-level fields:
|
|
|
219
220
|
| `endpoint` | string | `https://wave-control.up.railway.app/api/v1` | Base URL for the Railway-hosted `services/wave-control` API |
|
|
220
221
|
| `workspaceId` | string | derived from repo path | Stable workspace identity used across runs |
|
|
221
222
|
| `projectId` | string | resolved project id | Stable project identity used for cross-workspace reporting and filtering |
|
|
222
|
-
| `authTokenEnvVar` | string | `
|
|
223
|
+
| `authTokenEnvVar` | string | `WAVE_API_TOKEN` | Primary environment variable name holding the bearer token |
|
|
224
|
+
| `authTokenEnvVars` | string[] | `["WAVE_API_TOKEN", "WAVE_CONTROL_AUTH_TOKEN"]` | Ordered fallback env var list consulted when Wave resolves a bearer token for owned Wave Control routes |
|
|
225
|
+
| `credentialProviders` | string[] | `[]` | Allowlisted runtime credential leases requested from an owned Wave Control deployment before executor launch. Supported values: `openai`, `anthropic` |
|
|
226
|
+
| `credentials` | `{ id, envVar }[]` | `[]` | Arbitrary per-user credential leases requested from an owned Wave Control deployment before executor launch |
|
|
223
227
|
| `reportMode` | string | `metadata-only` | `disabled`, `metadata-only`, `metadata-plus-selected`, or `full-artifact-upload` |
|
|
224
228
|
| `uploadArtifactKinds` | string[] | selected proof/trace/benchmark kinds | Artifact classes eligible for body upload when an artifact's upload policy requests a body |
|
|
225
229
|
| `requestTimeoutMs` | integer | `5000` | Per-batch network timeout |
|
|
@@ -232,6 +236,8 @@ Supported top-level fields:
|
|
|
232
236
|
|
|
233
237
|
Lane overrides may refine the same keys under `lanes.<lane>.waveControl` or `projects.<projectId>.lanes.<lane>.waveControl`.
|
|
234
238
|
|
|
239
|
+
Wave resolves the Wave Control bearer token from `authTokenEnvVars` when that list is present. Otherwise it resolves `authTokenEnvVar` first and keeps `WAVE_CONTROL_AUTH_TOKEN` as a compatibility fallback.
|
|
240
|
+
|
|
235
241
|
One-run override:
|
|
236
242
|
|
|
237
243
|
- `wave launch --no-telemetry` disables Wave Control queueing and remote delivery for that launcher invocation without changing the repo config.
|
|
@@ -246,6 +252,8 @@ Example:
|
|
|
246
252
|
"endpoint": "https://wave-control.up.railway.app/api/v1",
|
|
247
253
|
"workspaceId": "wave-main",
|
|
248
254
|
"projectId": "app",
|
|
255
|
+
"credentialProviders": ["openai"],
|
|
256
|
+
"credentials": [{ "id": "github_pat", "envVar": "GITHUB_TOKEN" }],
|
|
249
257
|
"reportMode": "metadata-only",
|
|
250
258
|
"uploadArtifactKinds": [
|
|
251
259
|
"trace-run-metadata",
|
|
@@ -261,6 +269,56 @@ Runtime-emitted Wave Control events also attach:
|
|
|
261
269
|
- `orchestratorId` from the active launcher or resident orchestrator
|
|
262
270
|
- `runtimeVersion` from the installed Wave package metadata
|
|
263
271
|
|
|
272
|
+
## External Providers
|
|
273
|
+
|
|
274
|
+
Wave can resolve third-party auth directly in the repo runtime or through an owned Wave Control broker.
|
|
275
|
+
|
|
276
|
+
```json
|
|
277
|
+
{
|
|
278
|
+
"externalProviders": {
|
|
279
|
+
"context7": {
|
|
280
|
+
"mode": "direct",
|
|
281
|
+
"apiKeyEnvVar": "CONTEXT7_API_KEY"
|
|
282
|
+
},
|
|
283
|
+
"corridor": {
|
|
284
|
+
"enabled": false,
|
|
285
|
+
"mode": "direct",
|
|
286
|
+
"baseUrl": "https://app.corridor.dev/api",
|
|
287
|
+
"apiTokenEnvVar": "CORRIDOR_API_TOKEN",
|
|
288
|
+
"apiKeyFallbackEnvVar": "CORRIDOR_API_KEY",
|
|
289
|
+
"teamId": "team-id-for-direct-mode",
|
|
290
|
+
"projectId": "project-id-for-direct-mode",
|
|
291
|
+
"severityThreshold": "critical",
|
|
292
|
+
"findingStates": ["open", "potential"],
|
|
293
|
+
"requiredAtClosure": true
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
- `direct`: use repo/runtime env vars directly
|
|
300
|
+
- `broker`: use the owned Wave Control endpoint with `WAVE_API_TOKEN`
|
|
301
|
+
- `hybrid`: try the broker first, then fall back to direct auth if broker setup fails or a broker request fails at runtime
|
|
302
|
+
- direct Corridor mode requires both `teamId` and `projectId` in config; broker mode instead requires a matching `WAVE_BROKER_CORRIDOR_PROJECT_MAP` entry on the owned Wave Control deployment
|
|
303
|
+
- Wave auto-loads an allowlisted repo-root `.env.local` for `CONTEXT7_API_KEY`, `CORRIDOR_API_TOKEN`, `CORRIDOR_API_KEY`, `WAVE_API_TOKEN`, and `WAVE_CONTROL_AUTH_TOKEN`
|
|
304
|
+
- `wave doctor` now warns or fails early when brokered providers target the packaged default endpoint or no Wave Control auth token is available
|
|
305
|
+
- Context7 remains fail-open
|
|
306
|
+
- Corridor writes `.tmp/<lane>-wave-launcher/security/wave-<n>-corridor.json`, filters findings down to the wave's implementation-owned non-doc, non-`.tmp/`, non-markdown paths, and can fail closure when the fetch fails or matched findings meet the configured threshold
|
|
307
|
+
- Broker mode is intended for self-hosted or team-owned Wave Control only; the packaged default endpoint is rejected as a provider-secret proxy
|
|
308
|
+
- if `findingStates` is omitted or set to `[]`, Wave does not apply a state filter and the provider may return all states
|
|
309
|
+
- for the full Corridor lifecycle, including broker mapping, generated artifact shape, and gate semantics, see [../corridor.md](../corridor.md)
|
|
310
|
+
|
|
311
|
+
`waveControl.credentialProviders` is related but separate from `externalProviders`:
|
|
312
|
+
|
|
313
|
+
- use `externalProviders.context7` and `externalProviders.corridor` for brokered or direct API access during planning / closure flows
|
|
314
|
+
- use `waveControl.credentialProviders` only when an executor needs env vars leased into its runtime
|
|
315
|
+
- use `waveControl.credentials` when an executor needs arbitrary user-owned secrets leased into env vars such as `GITHUB_TOKEN` or `NPM_TOKEN`
|
|
316
|
+
- only `openai` and `anthropic` are valid leased providers today
|
|
317
|
+
- `context7` and `corridor` remain broker-only and are never returned as raw env secrets
|
|
318
|
+
- `waveControl.credentials[*].id` must match `/^[a-z0-9][a-z0-9._-]*$/`
|
|
319
|
+
- `waveControl.credentials[*].envVar` must match `/^[A-Z_][A-Z0-9_]*$/`
|
|
320
|
+
- when provider or arbitrary credentials are leased, Wave injects them into the live executor environment and redacts those keys in `launch-preview.json`
|
|
321
|
+
|
|
264
322
|
Those fields are queryable in the `wave-control` service alongside `workspaceId`,
|
|
265
323
|
`projectId`, `runKind`, `runId`, `lane`, and benchmark ids.
|
|
266
324
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Sample Waves"
|
|
3
|
-
summary: "Showcase-first sample waves that demonstrate the shipped 0.9.
|
|
3
|
+
summary: "Showcase-first sample waves that demonstrate the shipped 0.9.2 authored surface, including the optional design-role path."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Sample Waves
|
|
7
7
|
|
|
8
|
-
This guide points to showcase-first sample waves that demonstrate the shipped `0.9.
|
|
8
|
+
This guide points to showcase-first sample waves that demonstrate the shipped `0.9.2` authored Wave surface.
|
|
9
9
|
|
|
10
10
|
The examples are intentionally denser than typical production waves. Their job is to teach the current authoring and runtime surface quickly, not to be the smallest possible launch-ready files.
|
|
11
11
|
|
|
@@ -17,7 +17,7 @@ All example `.tmp/main-wave-launcher/...` paths assume the implicit default proj
|
|
|
17
17
|
Shows what a good `repo-landed` outcome looks like when one promoted component only closes honestly if desired-state records, reconcile-loop substrate, and cluster-view surfaces land together. It emphasizes maturity discipline, explicit deliverables, and shared-plan closure without drifting into `pilot-live` claims.
|
|
18
18
|
|
|
19
19
|
- [Full modern sample wave](../plans/examples/wave-example-live-proof.md)
|
|
20
|
-
Shows the combined `0.9.
|
|
20
|
+
Shows the combined `0.9.2` authored surface in one file: closure roles, `E0`, optional security review, delegated and pinned benchmark targets, richer executor config, `### Skills`, `### Capabilities`, `### Deliverables`, `### Exit contract`, `### Proof artifacts`, sticky retry, deploy environments, and proof-first live-wave structure.
|
|
21
21
|
|
|
22
22
|
- [Optional design-steward handoff wave](../plans/examples/wave-example-design-handoff.md)
|
|
23
23
|
Shows the shipped design-role surface: one pre-implementation design steward publishes a design packet, downstream implementation owners read that packet before coding, and normal closure roles still decide final completion. For terminal or operator-surface work, pair that shape with explicit `tui-design` in the design steward's `### Skills`. For the hybrid variant, explicitly give that same design agent implementation-owned paths and the normal implementation contract sections.
|
|
@@ -46,7 +46,7 @@ All example `.tmp/main-wave-launcher/...` paths assume the implicit default proj
|
|
|
46
46
|
|
|
47
47
|
## Feature Coverage Map
|
|
48
48
|
|
|
49
|
-
Together these samples cover the main surfaces added or hardened through `0.9.
|
|
49
|
+
Together these samples cover the main surfaces added or hardened through `0.9.2`:
|
|
50
50
|
|
|
51
51
|
- repo-landed maturity discipline and anti-overclaim framing
|
|
52
52
|
- explicit shared-plan closure for future-wave safety
|
|
@@ -184,7 +184,7 @@ Adapt more aggressively when:
|
|
|
184
184
|
## Suggested Reading Order
|
|
185
185
|
|
|
186
186
|
1. Start with [High-fidelity repo-landed rollout wave](../plans/examples/wave-example-rollout-fidelity.md) if you want the clearest example of good closure-ready wave fidelity for a repo-only outcome.
|
|
187
|
-
2. Read [Full modern sample wave](../plans/examples/wave-example-live-proof.md) if you want the denser proof-first and eval-heavy `0.9.
|
|
187
|
+
2. Read [Full modern sample wave](../plans/examples/wave-example-live-proof.md) if you want the denser proof-first and eval-heavy `0.9.2` surface.
|
|
188
188
|
3. Read [Optional design-steward handoff wave](../plans/examples/wave-example-design-handoff.md) if the task needs a design packet before implementation fan-out.
|
|
189
189
|
4. Read [docs/evals/README.md](../evals/README.md) if you want more background on benchmark target selection.
|
|
190
190
|
5. Read [docs/reference/live-proof-waves.md](./live-proof-waves.md) if you want more detail on proof-first `pilot-live` authoring.
|
package/docs/reference/skills.md
CHANGED
|
@@ -124,7 +124,7 @@ Top-level and lane-local skill attachment use the same shape:
|
|
|
124
124
|
|
|
125
125
|
Lane-local `lanes.<lane>.skills` extends the global config instead of replacing it.
|
|
126
126
|
|
|
127
|
-
Optional design workers in the shipped `0.9.
|
|
127
|
+
Optional design workers in the shipped `0.9.2` surface normally attach `role-design`. That bundle is intended for docs/spec-first design packets and explicit implementation handoff work before implementation starts. When the design packet covers terminal UX, dashboards, or other operator surfaces, add `tui-design` explicitly in the wave's `### Skills`.
|
|
128
128
|
|
|
129
129
|
Long-running agents that should stay resident and react only to orchestrator signal changes can add `signal-hygiene` explicitly in `### Skills`. That bundle is not auto-attached and is not meant for normal one-shot implementation agents.
|
|
130
130
|
|