@chllming/wave-orchestration 0.7.1 → 0.7.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 (32) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +8 -8
  3. package/docs/plans/component-cutover-matrix.json +50 -3
  4. package/docs/plans/current-state.md +1 -1
  5. package/docs/plans/end-state-architecture.md +927 -0
  6. package/docs/plans/examples/wave-example-live-proof.md +1 -1
  7. package/docs/plans/migration.md +2 -2
  8. package/docs/plans/waves/wave-1.md +376 -0
  9. package/docs/plans/waves/wave-2.md +292 -0
  10. package/docs/plans/waves/wave-3.md +342 -0
  11. package/docs/plans/waves/wave-4.md +391 -0
  12. package/docs/plans/waves/wave-5.md +382 -0
  13. package/docs/plans/waves/wave-6.md +321 -0
  14. package/docs/reference/npmjs-trusted-publishing.md +2 -2
  15. package/docs/reference/sample-waves.md +4 -4
  16. package/package.json +1 -1
  17. package/releases/manifest.json +19 -0
  18. package/scripts/wave-orchestrator/agent-state.mjs +447 -33
  19. package/scripts/wave-orchestrator/artifact-schemas.mjs +81 -0
  20. package/scripts/wave-orchestrator/control-cli.mjs +7 -1
  21. package/scripts/wave-orchestrator/coordination.mjs +11 -10
  22. package/scripts/wave-orchestrator/human-input-workflow.mjs +289 -0
  23. package/scripts/wave-orchestrator/install.mjs +22 -0
  24. package/scripts/wave-orchestrator/launcher-derived-state.mjs +915 -0
  25. package/scripts/wave-orchestrator/launcher-gates.mjs +1061 -0
  26. package/scripts/wave-orchestrator/launcher-retry.mjs +873 -0
  27. package/scripts/wave-orchestrator/launcher-supervisor.mjs +704 -0
  28. package/scripts/wave-orchestrator/launcher.mjs +153 -2922
  29. package/scripts/wave-orchestrator/task-entity.mjs +557 -0
  30. package/scripts/wave-orchestrator/wave-files.mjs +11 -2
  31. package/scripts/wave-orchestrator/wave-state-reducer.mjs +566 -0
  32. package/wave.config.json +1 -1
@@ -0,0 +1,382 @@
1
+ # Wave 5 - Schema Versioning, Artifact Hierarchy, and Human Input Workflow
2
+
3
+ **Commit message**: `Arch: harden schema versioning, artifact classification, and human input workflow`
4
+
5
+ ## Component promotions
6
+
7
+ - state-artifacts-and-feedback: qa-proved
8
+
9
+ ## Context7 defaults
10
+
11
+ - bundle: node-typescript
12
+ - query: "JSON schema migration, artifact metadata, workflow state machines, SLA tracking in Node.js"
13
+
14
+ ## Agent A0: cont-QA
15
+
16
+ ### Role prompts
17
+
18
+ - docs/agents/wave-cont-qa-role.md
19
+
20
+ ### Executor
21
+
22
+ - id: codex
23
+ - model: gpt-5-codex
24
+ - codex.profile_name: review
25
+ - codex.search: true
26
+ - codex.json: true
27
+
28
+ ### Context7
29
+
30
+ - bundle: none
31
+
32
+ ### Prompt
33
+
34
+ ```text
35
+ Primary goal:
36
+ - Verify schema versioning is explicit on all derived-state schemas, artifact classes are labeled, and human input workflow semantics are in the control plane — not the supervisor.
37
+
38
+ Required context before coding:
39
+ - Read docs/plans/end-state-architecture.md (sections: Schema Versioning, Artifact Hierarchy, Human Input Workflow).
40
+ - Read docs/reference/repository-guidance.md.
41
+
42
+ Specific expectations:
43
+ - confirm every persisted artifact carries _meta.artifactClass
44
+ - confirm every derived-state schema carries schemaVersion
45
+ - confirm readers tolerate unknown fields (forward compatibility)
46
+ - confirm human input SLA, reroute, escalation, and timeout semantics live in control-plane events and the reducer, NOT in the supervisor
47
+ - confirm the supervisor only observes/collects/submits human-input responses
48
+ - do not PASS if any derived cache is missing _meta or schemaVersion
49
+
50
+ File ownership (only touch these paths):
51
+ - docs/plans/waves/reviews/wave-5-cont-qa.md
52
+ ```
53
+
54
+ ## Agent A8: Integration Steward
55
+
56
+ ### Role prompts
57
+
58
+ - docs/agents/wave-integration-role.md
59
+
60
+ ### Executor
61
+
62
+ - id: claude
63
+ - model: claude-sonnet-4-6
64
+
65
+ ### Context7
66
+
67
+ - bundle: none
68
+
69
+ ### Capabilities
70
+
71
+ - integration
72
+ - docs-shared-plan
73
+
74
+ ### Prompt
75
+
76
+ ```text
77
+ Synthesize schema versioning, artifact hierarchy, and human input workflow changes.
78
+
79
+ Required context before coding:
80
+ - Read docs/plans/end-state-architecture.md.
81
+ - Read docs/reference/repository-guidance.md.
82
+ - Read docs/research/agent-context-sources.md.
83
+
84
+ Verify:
85
+ - schema migration functions exist for all version transitions
86
+ - artifact classes are consistent between the hierarchy doc and actual file writes
87
+ - human input workflow integrates with existing clarification triage and escalation paths
88
+ - no regression in existing coordination flows
89
+
90
+ File ownership (only touch these paths):
91
+ - .tmp/main-wave-launcher/integration/wave-5.md
92
+ - .tmp/main-wave-launcher/integration/wave-5.json
93
+ ```
94
+
95
+ ## Agent A9: Documentation Steward
96
+
97
+ ### Role prompts
98
+
99
+ - docs/agents/wave-documentation-role.md
100
+
101
+ ### Executor
102
+
103
+ - id: opencode
104
+ - opencode.files: docs/plans/end-state-architecture.md,docs/plans/current-state.md
105
+
106
+ ### Context7
107
+
108
+ - bundle: none
109
+
110
+ ### Prompt
111
+
112
+ ```text
113
+ Update shared plan docs to reflect schema versioning, artifact classification, and human input workflow.
114
+
115
+ Required context before coding:
116
+ - Read docs/reference/repository-guidance.md.
117
+ - Read docs/research/agent-context-sources.md.
118
+
119
+ File ownership (only touch these paths):
120
+ - docs/plans/current-state.md
121
+ - docs/plans/master-plan.md
122
+ - docs/plans/migration.md
123
+ - docs/plans/wave-orchestrator.md
124
+ - docs/plans/component-cutover-matrix.md
125
+ - docs/plans/component-cutover-matrix.json
126
+ - docs/reference/wave-control.md
127
+ ```
128
+
129
+ ## Agent A1: Schema Versioning and Artifact Classification
130
+
131
+ ### Executor
132
+
133
+ - profile: implement-fast
134
+ - model: gpt-5-codex
135
+ - codex.add_dirs: scripts,test
136
+ - fallbacks: claude, opencode
137
+
138
+ ### Context7
139
+
140
+ - bundle: node-typescript
141
+ - query: "JSON schema migration, semver, forward compatibility patterns"
142
+
143
+ ### Components
144
+
145
+ - state-artifacts-and-feedback
146
+
147
+ ### Exit contract
148
+
149
+ - completion: contract
150
+ - durability: none
151
+ - proof: unit
152
+ - doc-impact: owned
153
+
154
+ ### Deliverables
155
+
156
+ - scripts/wave-orchestrator/schema-versioning.mjs
157
+ - test/wave-orchestrator/schema-versioning.test.ts
158
+
159
+ ### Proof artifacts
160
+
161
+ - path: .tmp/wave-5-state-proof/schema-migration-report.json | kind: migration-report | required-for: pilot-live
162
+
163
+ ### Prompt
164
+
165
+ ```text
166
+ Add explicit schema versioning to all derived-state schemas and artifact class labels to all persisted artifacts.
167
+
168
+ Schema versioning rules:
169
+ 1. Forward compatibility: readers tolerate unknown fields.
170
+ 2. Version-gated migration: materializer runs migration function when version advances.
171
+ 3. Every schema file declares schemaVersion: N.
172
+
173
+ Every persisted artifact includes _meta:
174
+ {
175
+ "_meta": {
176
+ "artifactClass": "canonical-event" | "canonical-snapshot" | "derived-cache" | "human-projection",
177
+ "schemaVersion": N,
178
+ "generatedAt": ISO8601,
179
+ "source": "description of canonical input"
180
+ }
181
+ }
182
+
183
+ Artifact class definitions:
184
+ - canonical-event: append-only, never rewritten (control-plane JSONL, coordination JSONL)
185
+ - canonical-snapshot: written once per event, immutable, attempt-scoped paths
186
+ - derived-cache: materialized from canonical sources, can be deleted and rebuilt
187
+ - human-projection: convenience output, never read by the system
188
+
189
+ Schemas requiring versioning (add migration functions):
190
+ - Agent result envelope (v2)
191
+ - Gate snapshot (v2)
192
+ - Task graph (v1)
193
+ - Integration summary (v2)
194
+ - Retry plan (v2)
195
+ - Proof registry (v2)
196
+ - Relaunch plan (v2)
197
+ - Run state (v3)
198
+ - Trace bundle (v3)
199
+ - Control-plane event (v2)
200
+ - Coordination record (v2)
201
+ - Contradiction (v1)
202
+ - Fact (v1)
203
+ - Wave manifest (v2)
204
+ - Dashboard (v2)
205
+ - Assignment snapshot (v1)
206
+ - Dependency snapshot (v1)
207
+ - Ledger (v1)
208
+ - Docs queue (v1)
209
+ - Security summary (v1)
210
+
211
+ Required context before coding:
212
+ - Read docs/reference/repository-guidance.md.
213
+ - Read docs/research/agent-context-sources.md.
214
+ - Read docs/plans/end-state-architecture.md (sections: Schema Versioning, Artifact Hierarchy).
215
+ - Read scripts/wave-orchestrator/artifact-schemas.mjs.
216
+ - Read scripts/wave-orchestrator/dashboard-state.mjs.
217
+
218
+ File ownership (only touch these paths):
219
+ - scripts/wave-orchestrator/schema-versioning.mjs
220
+ - scripts/wave-orchestrator/artifact-schemas.mjs
221
+ - test/wave-orchestrator/schema-versioning.test.ts
222
+ - .tmp/wave-5-state-proof/
223
+ ```
224
+
225
+ ## Agent A2: Human Input Workflow Subsystem
226
+
227
+ ### Executor
228
+
229
+ - profile: implement-fast
230
+ - model: gpt-5-codex
231
+ - codex.add_dirs: scripts,test
232
+ - fallbacks: claude, opencode
233
+
234
+ ### Context7
235
+
236
+ - bundle: node-typescript
237
+ - query: "Workflow state machines, SLA tracking, timeout policies in event-sourced systems"
238
+
239
+ ### Components
240
+
241
+ - state-artifacts-and-feedback
242
+
243
+ ### Exit contract
244
+
245
+ - completion: contract
246
+ - durability: none
247
+ - proof: unit
248
+ - doc-impact: none
249
+
250
+ ### Deliverables
251
+
252
+ - scripts/wave-orchestrator/human-input-workflow.mjs
253
+ - test/wave-orchestrator/human-input-workflow.test.ts
254
+
255
+ ### Proof artifacts
256
+
257
+ - path: .tmp/wave-5-state-proof/human-input-sla-log.json | kind: workflow-log | required-for: pilot-live
258
+
259
+ ### Prompt
260
+
261
+ ```text
262
+ Implement the human input workflow subsystem.
263
+
264
+ Key design rule: human-input workflow semantics (SLA, reroute, escalation, timeout, closure blocking) live in:
265
+ - control-plane events
266
+ - reducer state
267
+ - this workflow module
268
+
269
+ The session supervisor only observes, collects, and submits responses. It does NOT own SLA or escalation logic.
270
+
271
+ Human input entity (extended from existing):
272
+ {
273
+ requestId, waveNumber, lane,
274
+ kind: "clarification" | "escalation" | "approval" | "decision",
275
+ status: "pending" | "assigned" | "answered" | "escalated" | "resolved" | "timed_out" | "rerouted",
276
+ requestedBy, requestedAt,
277
+ assignedTo: string | null,
278
+ assignedAt: ISO8601 | null,
279
+ answeredAt: ISO8601 | null,
280
+ resolvedAt: ISO8601 | null,
281
+ timeoutPolicy: {
282
+ ackDeadlineMs, resolveDeadlineMs, escalateAfterMs
283
+ },
284
+ reroutePolicy: {
285
+ maxReroutes, rerouteHistory: [{ from, to, reason, at }]
286
+ },
287
+ linkedRequests: [requestId],
288
+ closureCondition: string | null,
289
+ slaMetrics: {
290
+ timeToAck, timeToResolve, wasEscalated, wasRerouted, wasTimedOut
291
+ }
292
+ }
293
+
294
+ Implementation:
295
+ 1. Add human-input workflow logic to human-input-workflow.mjs.
296
+ 2. Workflow state transitions go to control-plane events.
297
+ 3. The reducer materializes human input state from events.
298
+ 4. The closure engine treats unresolved human inputs as hard blockers.
299
+ 5. The retry engine can plan around timed-out requests by escalating or rerouting.
300
+ 6. SLA metrics are computed by the reducer, not by the supervisor.
301
+ 7. Integrate with existing clarification-triage.mjs for backward compatibility.
302
+
303
+ Required context before coding:
304
+ - Read docs/reference/repository-guidance.md.
305
+ - Read docs/research/agent-context-sources.md.
306
+ - Read docs/plans/end-state-architecture.md (section: Human Input Workflow).
307
+ - Read scripts/wave-orchestrator/clarification-triage.mjs.
308
+ - Read scripts/wave-orchestrator/feedback.mjs.
309
+ - Read scripts/wave-orchestrator/launcher-supervisor.mjs (human feedback monitoring to keep but not expand).
310
+
311
+ File ownership (only touch these paths):
312
+ - scripts/wave-orchestrator/human-input-workflow.mjs
313
+ - scripts/wave-orchestrator/clarification-triage.mjs
314
+ - test/wave-orchestrator/human-input-workflow.test.ts
315
+ - .tmp/wave-5-state-proof/
316
+ ```
317
+
318
+ ## Agent A3: Projection Writer
319
+
320
+ ### Executor
321
+
322
+ - profile: implement-fast
323
+ - model: gpt-5-codex
324
+ - codex.add_dirs: scripts,test
325
+ - fallbacks: claude, opencode
326
+
327
+ ### Context7
328
+
329
+ - bundle: node-typescript
330
+
331
+ ### Components
332
+
333
+ - state-artifacts-and-feedback
334
+
335
+ ### Exit contract
336
+
337
+ - completion: contract
338
+ - durability: none
339
+ - proof: unit
340
+ - doc-impact: none
341
+
342
+ ### Deliverables
343
+
344
+ - scripts/wave-orchestrator/projection-writer.mjs
345
+ - test/wave-orchestrator/projection-writer.test.ts
346
+
347
+ ### Proof artifacts
348
+
349
+ - path: .tmp/wave-5-state-proof/projection-artifact-manifest.json | kind: artifact-manifest | required-for: pilot-live
350
+
351
+ ### Prompt
352
+
353
+ ```text
354
+ Implement the projection writer — the single module responsible for all non-canonical file writes.
355
+
356
+ The projection writer takes derived state from the materializer, gate verdicts from the gate engine, and wave state from the reducer, and writes:
357
+ - dashboards (global + per-wave) — artifactClass: human-projection
358
+ - markdown board projections — artifactClass: human-projection
359
+ - coordination board projection — artifactClass: human-projection
360
+ - trace bundles — artifactClass: canonical-snapshot
361
+ - quality metrics — artifactClass: derived-cache
362
+ - human-facing status summaries — artifactClass: human-projection
363
+ - wave manifest — artifactClass: human-projection
364
+
365
+ Rules:
366
+ 1. Never reads its own outputs.
367
+ 2. Always writes atomically (writeJsonAtomic / writeTextAtomic).
368
+ 3. Labels every artifact with _meta including artifactClass and schemaVersion.
369
+ 4. Consolidates dashboard writes currently scattered across launcher.mjs and dashboard-state.mjs.
370
+
371
+ Required context before coding:
372
+ - Read docs/reference/repository-guidance.md.
373
+ - Read docs/research/agent-context-sources.md.
374
+ - Read docs/plans/end-state-architecture.md (sections: Layer 3, Artifact Hierarchy).
375
+ - Read scripts/wave-orchestrator/dashboard-state.mjs (current dashboard writes to consolidate).
376
+ - Read scripts/wave-orchestrator/traces.mjs (trace bundle writes).
377
+
378
+ File ownership (only touch these paths):
379
+ - scripts/wave-orchestrator/projection-writer.mjs
380
+ - test/wave-orchestrator/projection-writer.test.ts
381
+ - .tmp/wave-5-state-proof/
382
+ ```
@@ -0,0 +1,321 @@
1
+ # Wave 6 - Proof Families, Workflow Backend, and Architecture Completion
2
+
3
+ **Commit message**: `Arch: add proof families, workflow backend boundary, and complete architecture refactor`
4
+
5
+ ## Component promotions
6
+
7
+ - wave-parser-and-launcher: pilot-live
8
+ - closure-sweep-and-role-gates: pilot-live
9
+ - executor-abstraction-and-prompt-transport: pilot-live
10
+
11
+ ## Context7 defaults
12
+
13
+ - bundle: node-typescript
14
+ - query: "Workflow backend abstraction, deployment verification, proof family validation in Node.js"
15
+
16
+ ## Agent A0: cont-QA
17
+
18
+ ### Role prompts
19
+
20
+ - docs/agents/wave-cont-qa-role.md
21
+
22
+ ### Executor
23
+
24
+ - id: codex
25
+ - model: gpt-5-codex
26
+ - codex.profile_name: review
27
+ - codex.search: true
28
+ - codex.json: true
29
+
30
+ ### Context7
31
+
32
+ - bundle: none
33
+
34
+ ### Prompt
35
+
36
+ ```text
37
+ Primary goal:
38
+ - Verify that the full end-state architecture is landed, internally consistent, and tested.
39
+
40
+ Required context before coding:
41
+ - Read docs/plans/end-state-architecture.md (all sections).
42
+ - Read docs/reference/repository-guidance.md.
43
+
44
+ Specific expectations:
45
+ - confirm proof families (code_proof, integration_proof, deploy_proof) are independently evaluated
46
+ - confirm the workflow backend boundary abstracts event persistence, state queries, timer management, and human input behind a clean interface
47
+ - confirm the local-file backend is the only implementation and passes all tests
48
+ - confirm the full end-state module architecture is realized:
49
+ Layer 1: canonical authority set (control-plane, coordination-store, wave-files)
50
+ Layer 2: phase engines (implementation, derived-state, gate, closure, retry, reducer)
51
+ Layer 3: session supervisor + projection writer
52
+ Layer 4: thin launcher orchestrator
53
+ - confirm every design principle from the architecture doc is implemented
54
+ - confirm all 10 feedback corrections are addressed
55
+ - do not PASS if any phase engine still reads from derived caches or projections
56
+
57
+ File ownership (only touch these paths):
58
+ - docs/plans/waves/reviews/wave-6-cont-qa.md
59
+ ```
60
+
61
+ ## Agent A8: Integration Steward
62
+
63
+ ### Role prompts
64
+
65
+ - docs/agents/wave-integration-role.md
66
+
67
+ ### Executor
68
+
69
+ - id: claude
70
+ - model: claude-sonnet-4-6
71
+
72
+ ### Context7
73
+
74
+ - bundle: none
75
+
76
+ ### Capabilities
77
+
78
+ - integration
79
+ - docs-shared-plan
80
+ - contradiction-recovery
81
+
82
+ ### Prompt
83
+
84
+ ```text
85
+ Final integration synthesis for the architecture refactor.
86
+
87
+ Required context before coding:
88
+ - Read docs/plans/end-state-architecture.md.
89
+ - Read docs/reference/repository-guidance.md.
90
+ - Read docs/research/agent-context-sources.md.
91
+
92
+ Verify end-to-end:
93
+ - a wave can run through the full pipeline: parse → reduce → plan → select → materialize → launch → wait → evaluate → close
94
+ - retry correctly uses task graph and two-phase proof for targeted reruns
95
+ - contradiction detection, repair, and resolution work end-to-end
96
+ - human input workflow blocks closure and supports escalation/reroute
97
+ - replay tests pass using stored events from waves 0-5
98
+ - the workflow backend boundary is clean enough that swapping the implementation would not require changes to phase engines
99
+
100
+ File ownership (only touch these paths):
101
+ - .tmp/main-wave-launcher/integration/wave-6.md
102
+ - .tmp/main-wave-launcher/integration/wave-6.json
103
+ ```
104
+
105
+ ## Agent A9: Documentation Steward
106
+
107
+ ### Role prompts
108
+
109
+ - docs/agents/wave-documentation-role.md
110
+
111
+ ### Executor
112
+
113
+ - id: opencode
114
+ - opencode.files: docs/plans/end-state-architecture.md,docs/plans/current-state.md
115
+
116
+ ### Context7
117
+
118
+ - bundle: none
119
+
120
+ ### Prompt
121
+
122
+ ```text
123
+ Final documentation update reflecting the completed architecture refactor.
124
+
125
+ Required context before coding:
126
+ - Read docs/reference/repository-guidance.md.
127
+ - Read docs/research/agent-context-sources.md.
128
+
129
+ Update all shared plan docs to reflect the final landed state.
130
+ Mark the end-state architecture doc as landed (not aspirational).
131
+ Update the component cutover matrix with all promotions.
132
+
133
+ File ownership (only touch these paths):
134
+ - docs/plans/current-state.md
135
+ - docs/plans/master-plan.md
136
+ - docs/plans/migration.md
137
+ - docs/plans/wave-orchestrator.md
138
+ - docs/plans/end-state-architecture.md
139
+ - docs/plans/component-cutover-matrix.md
140
+ - docs/plans/component-cutover-matrix.json
141
+ - docs/reference/proof-metrics.md
142
+ - docs/reference/wave-control.md
143
+ ```
144
+
145
+ ## Agent A1: Proof Family Split
146
+
147
+ ### Executor
148
+
149
+ - profile: implement-fast
150
+ - model: gpt-5-codex
151
+ - codex.add_dirs: scripts,test
152
+ - fallbacks: claude, opencode
153
+
154
+ ### Context7
155
+
156
+ - bundle: node-typescript
157
+ - query: "Proof validation, deployment health checks, test runner integration"
158
+
159
+ ### Components
160
+
161
+ - closure-sweep-and-role-gates
162
+
163
+ ### Exit contract
164
+
165
+ - completion: contract
166
+ - durability: none
167
+ - proof: unit
168
+ - doc-impact: owned
169
+
170
+ ### Deliverables
171
+
172
+ - scripts/wave-orchestrator/proof-families.mjs
173
+ - test/wave-orchestrator/proof-families.test.ts
174
+
175
+ ### Proof artifacts
176
+
177
+ - path: .tmp/wave-6-proof/proof-family-report.json | kind: proof-family-report | required-for: pilot-live
178
+
179
+ ### Prompt
180
+
181
+ ```text
182
+ Implement the three proof families: code_proof, integration_proof, deploy_proof.
183
+
184
+ code_proof — validates agent's owned deliverables:
185
+ - tests pass (unit/integration/live per contract)
186
+ - build succeeds
187
+ - diff clean outside owned paths
188
+ - deliverables exist and non-empty
189
+ - proof artifacts present and SHA256-valid
190
+ - component promotions meet target maturity
191
+
192
+ integration_proof — validates cross-cutting contracts:
193
+ - interface contracts consistent between components
194
+ - dependency resolution clean
195
+ - no open integration conflicts
196
+ - no open contradictions on shared state
197
+ - cross-lane dependencies resolved
198
+ - integration summary: zero unresolved blockers
199
+
200
+ deploy_proof — validates runtime behavior (opt-in):
201
+ - rollout artifact exists (if declared)
202
+ - runtime health check passes (if declared)
203
+ - post-deploy evidence collected (if declared)
204
+ - no deployment-blocking regressions
205
+ - deploy-kind specific validation (Railway, Docker, k8s, etc.)
206
+
207
+ The gate engine evaluates each family independently. A wave can be:
208
+ code_proof: satisfied, integration_proof: satisfied, deploy_proof: not_applicable
209
+
210
+ Implementation:
211
+ 1. Define proof family schema in proof-families.mjs.
212
+ 2. Update gate engine to evaluate each family.
213
+ 3. Update proof registry to tag bundles with proof family.
214
+ 4. Update result envelope role-specific payloads for deploy role.
215
+ 5. Write tests covering each family independently.
216
+
217
+ Required context before coding:
218
+ - Read docs/reference/repository-guidance.md.
219
+ - Read docs/research/agent-context-sources.md.
220
+ - Read docs/plans/end-state-architecture.md (section: Proof Families).
221
+ - Read scripts/wave-orchestrator/proof-registry.mjs.
222
+ - Read scripts/wave-orchestrator/launcher-gates.mjs.
223
+
224
+ File ownership (only touch these paths):
225
+ - scripts/wave-orchestrator/proof-families.mjs
226
+ - scripts/wave-orchestrator/proof-registry.mjs
227
+ - scripts/wave-orchestrator/launcher-gates.mjs
228
+ - test/wave-orchestrator/proof-families.test.ts
229
+ - .tmp/wave-6-proof/
230
+ ```
231
+
232
+ ## Agent A2: Workflow Backend Boundary
233
+
234
+ ### Executor
235
+
236
+ - profile: implement-fast
237
+ - model: gpt-5-codex
238
+ - codex.add_dirs: scripts,test
239
+ - fallbacks: claude, opencode
240
+
241
+ ### Context7
242
+
243
+ - bundle: node-typescript
244
+ - query: "Workflow engine abstraction, repository pattern, dependency injection in Node.js"
245
+
246
+ ### Components
247
+
248
+ - wave-parser-and-launcher
249
+ - executor-abstraction-and-prompt-transport
250
+
251
+ ### Exit contract
252
+
253
+ - completion: contract
254
+ - durability: none
255
+ - proof: unit
256
+ - doc-impact: none
257
+
258
+ ### Deliverables
259
+
260
+ - scripts/wave-orchestrator/workflow-backend.mjs
261
+ - scripts/wave-orchestrator/workflow-backend-local.mjs
262
+ - test/wave-orchestrator/workflow-backend.test.ts
263
+
264
+ ### Proof artifacts
265
+
266
+ - path: .tmp/wave-6-proof/workflow-backend-trace.json | kind: backend-trace | required-for: pilot-live
267
+
268
+ ### Prompt
269
+
270
+ ```text
271
+ Introduce the workflow backend abstraction boundary.
272
+
273
+ The workflow backend interface:
274
+ WorkflowBackend {
275
+ // Event persistence
276
+ appendEvent(event) → void
277
+ readEvents(filter) → [Event]
278
+
279
+ // State queries (backed by reducer)
280
+ getWaveState(lane, wave) → WaveState
281
+ getTaskState(taskId) → TaskState
282
+ getOpenBlockers(lane, wave) → [Blocker]
283
+ getClosureEligibility(lane, wave) → ClosureState
284
+
285
+ // Timer management
286
+ scheduleTimer(id, dueAt, payload) → void
287
+ cancelTimer(id) → void
288
+ getExpiredTimers() → [Timer]
289
+
290
+ // Human input
291
+ createHumanInput(request) → requestId
292
+ resolveHumanInput(requestId, response) → void
293
+ getOpenHumanInputs(filter) → [HumanInput]
294
+ }
295
+
296
+ Local-file backend implementation:
297
+ - appendEvent → JSONL append to control-plane log
298
+ - readEvents → parse JSONL with filter
299
+ - getWaveState → call wave-state-reducer.reduce()
300
+ - Timer management → file-based tracking under .tmp/<lane>-wave-launcher/timers/
301
+ - Human input → existing feedback queue + human-input-workflow.mjs
302
+
303
+ Design rules:
304
+ 1. Phase engines interact with state ONLY through the backend interface.
305
+ 2. The local-file backend is the only implementation for now.
306
+ 3. The interface is clean enough that a Temporal-backed or service-backed backend could replace it without rewriting phase engines.
307
+ 4. The backend does NOT own business logic — it persists events and answers queries.
308
+
309
+ Required context before coding:
310
+ - Read docs/reference/repository-guidance.md.
311
+ - Read docs/research/agent-context-sources.md.
312
+ - Read docs/plans/end-state-architecture.md (section: Workflow Backend Boundary).
313
+ - Read scripts/wave-orchestrator/control-plane.mjs (current event persistence).
314
+ - Read scripts/wave-orchestrator/wave-state-reducer.mjs (state queries).
315
+
316
+ File ownership (only touch these paths):
317
+ - scripts/wave-orchestrator/workflow-backend.mjs
318
+ - scripts/wave-orchestrator/workflow-backend-local.mjs
319
+ - test/wave-orchestrator/workflow-backend.test.ts
320
+ - .tmp/wave-6-proof/
321
+ ```