@intentius/chant 0.124.16 → 0.124.18

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 (154) hide show
  1. package/dist/__golden__/wave-loop/fan-out-applied.json +511 -0
  2. package/dist/__golden__/wave-loop/fan-out-apply-fails.json +406 -0
  3. package/dist/__golden__/wave-loop/fan-out-gated.json +707 -0
  4. package/dist/__golden__/wave-loop/fan-out-no-members.json +898 -0
  5. package/dist/__golden__/wave-loop/fan-out-only.json +514 -0
  6. package/dist/__golden__/wave-loop/fan-out-plan-fails.json +359 -0
  7. package/dist/__golden__/wave-loop/fan-out-same-root.json +311 -0
  8. package/dist/__golden__/wave-loop/op-by-apply-after-fails.json +401 -0
  9. package/dist/__golden__/wave-loop/op-by-apply-hold.json +756 -0
  10. package/dist/__golden__/wave-loop/op-by-apply-ignored.json +340 -0
  11. package/dist/__golden__/wave-loop/op-by-apply-pass.json +400 -0
  12. package/dist/__golden__/wave-loop/op-by-apply-skip.json +404 -0
  13. package/dist/__golden__/wave-loop/op-cost-member-clash.json +62 -0
  14. package/dist/__golden__/wave-loop/op-cost-member.json +191 -0
  15. package/dist/__golden__/wave-loop/op-denied-source.json +407 -0
  16. package/dist/__golden__/wave-loop/op-denied.json +399 -0
  17. package/dist/__golden__/wave-loop/op-discover-rest-short.json +92 -0
  18. package/dist/__golden__/wave-loop/op-discover-rest-stops.json +340 -0
  19. package/dist/__golden__/wave-loop/op-discover-rest.json +659 -0
  20. package/dist/__golden__/wave-loop/op-discover-wide.json +290 -0
  21. package/dist/__golden__/wave-loop/op-held-on-again.json +176 -0
  22. package/dist/__golden__/wave-loop/op-held-on-before-apply.json +689 -0
  23. package/dist/__golden__/wave-loop/op-held-on.json +1455 -0
  24. package/dist/__golden__/wave-loop/op-hooks-apply-fails.json +673 -0
  25. package/dist/__golden__/wave-loop/op-hooks-fail-after-apply.json +737 -0
  26. package/dist/__golden__/wave-loop/op-hooks-fail-before-apply.json +450 -0
  27. package/dist/__golden__/wave-loop/op-hooks-fail-before-plan.json +97 -0
  28. package/dist/__golden__/wave-loop/op-hooks-held.json +1059 -0
  29. package/dist/__golden__/wave-loop/op-hooks-hold-before-apply.json +693 -0
  30. package/dist/__golden__/wave-loop/op-hooks-pass.json +735 -0
  31. package/dist/__golden__/wave-loop/op-hooks-refused-at-base.json +148 -0
  32. package/dist/__golden__/wave-loop/op-hooks-share.json +1225 -0
  33. package/dist/__golden__/wave-loop/op-outcome-held.json +202 -0
  34. package/dist/__golden__/wave-loop/op-outcome-replan-approved.json +286 -0
  35. package/dist/__golden__/wave-loop/op-outcome-replan-forever.json +823 -0
  36. package/dist/__golden__/wave-loop/op-outcome-replan.json +259 -0
  37. package/dist/__golden__/wave-loop/op-outcome-stood-down.json +196 -0
  38. package/dist/__golden__/wave-loop/op-outcome-unreadable.json +193 -0
  39. package/dist/__golden__/wave-loop/op-overridden.json +508 -0
  40. package/dist/__golden__/wave-loop/op-per-run.json +518 -0
  41. package/dist/__golden__/wave-loop/op-point.json +495 -0
  42. package/dist/__golden__/wave-loop/op-pr-review.json +397 -0
  43. package/dist/__golden__/wave-loop/op-sealed.json +125 -0
  44. package/dist/__golden__/wave-loop/op-spend-change-only.json +168 -0
  45. package/dist/__golden__/wave-loop/op-spend.json +328 -0
  46. package/dist/__golden__/wave-loop/op-wave-commands.json +1808 -0
  47. package/dist/__golden__/wave-loop/op-wide-refused.json +291 -0
  48. package/dist/__golden__/wave-loop/op-wide-waiting.json +231 -0
  49. package/dist/__golden__/wave-loop/op-wide.json +440 -0
  50. package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
  51. package/dist/cli/commands/check-lexicon-plugin.js +2 -1
  52. package/dist/cli/commands/lint.d.ts.map +1 -1
  53. package/dist/cli/commands/lint.js +3 -2
  54. package/dist/components/discover.d.ts.map +1 -1
  55. package/dist/components/discover.js +2 -1
  56. package/dist/components/fan-out-run.d.ts +4 -3
  57. package/dist/components/fan-out-run.d.ts.map +1 -1
  58. package/dist/components/fan-out-run.js +138 -123
  59. package/dist/config-sandbox.d.ts.map +1 -1
  60. package/dist/config-sandbox.js +5 -1
  61. package/dist/discovery/import.d.ts.map +1 -1
  62. package/dist/discovery/import.js +2 -1
  63. package/dist/discovery/sandbox/driver.d.ts.map +1 -1
  64. package/dist/discovery/sandbox/driver.js +8 -3
  65. package/dist/lexicon-module.d.ts.map +1 -1
  66. package/dist/lexicon-module.js +4 -3
  67. package/dist/lint/policy-import.d.ts.map +1 -1
  68. package/dist/lint/policy-import.js +2 -1
  69. package/dist/lint/rule-loader.d.ts.map +1 -1
  70. package/dist/lint/rule-loader.js +2 -1
  71. package/dist/module-interop.d.ts +20 -0
  72. package/dist/module-interop.d.ts.map +1 -0
  73. package/dist/module-interop.js +39 -0
  74. package/dist/op/discover.d.ts.map +1 -1
  75. package/dist/op/discover.js +3 -2
  76. package/dist/op/op-waves-run.d.ts +7 -1
  77. package/dist/op/op-waves-run.d.ts.map +1 -1
  78. package/dist/op/op-waves-run.js +129 -72
  79. package/dist/wave-engine.d.ts +74 -5
  80. package/dist/wave-engine.d.ts.map +1 -1
  81. package/dist/wave-engine.js +47 -5
  82. package/dist/wave-runtime.mjs +218 -218
  83. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  84. package/dist/workspace/lineage-migrations.js +2 -1
  85. package/package.json +1 -1
  86. package/src/__golden__/wave-loop/fan-out-applied.json +511 -0
  87. package/src/__golden__/wave-loop/fan-out-apply-fails.json +406 -0
  88. package/src/__golden__/wave-loop/fan-out-gated.json +707 -0
  89. package/src/__golden__/wave-loop/fan-out-no-members.json +898 -0
  90. package/src/__golden__/wave-loop/fan-out-only.json +514 -0
  91. package/src/__golden__/wave-loop/fan-out-plan-fails.json +359 -0
  92. package/src/__golden__/wave-loop/fan-out-same-root.json +311 -0
  93. package/src/__golden__/wave-loop/op-by-apply-after-fails.json +401 -0
  94. package/src/__golden__/wave-loop/op-by-apply-hold.json +756 -0
  95. package/src/__golden__/wave-loop/op-by-apply-ignored.json +340 -0
  96. package/src/__golden__/wave-loop/op-by-apply-pass.json +400 -0
  97. package/src/__golden__/wave-loop/op-by-apply-skip.json +404 -0
  98. package/src/__golden__/wave-loop/op-cost-member-clash.json +62 -0
  99. package/src/__golden__/wave-loop/op-cost-member.json +191 -0
  100. package/src/__golden__/wave-loop/op-denied-source.json +407 -0
  101. package/src/__golden__/wave-loop/op-denied.json +399 -0
  102. package/src/__golden__/wave-loop/op-discover-rest-short.json +92 -0
  103. package/src/__golden__/wave-loop/op-discover-rest-stops.json +340 -0
  104. package/src/__golden__/wave-loop/op-discover-rest.json +659 -0
  105. package/src/__golden__/wave-loop/op-discover-wide.json +290 -0
  106. package/src/__golden__/wave-loop/op-held-on-again.json +176 -0
  107. package/src/__golden__/wave-loop/op-held-on-before-apply.json +689 -0
  108. package/src/__golden__/wave-loop/op-held-on.json +1455 -0
  109. package/src/__golden__/wave-loop/op-hooks-apply-fails.json +673 -0
  110. package/src/__golden__/wave-loop/op-hooks-fail-after-apply.json +737 -0
  111. package/src/__golden__/wave-loop/op-hooks-fail-before-apply.json +450 -0
  112. package/src/__golden__/wave-loop/op-hooks-fail-before-plan.json +97 -0
  113. package/src/__golden__/wave-loop/op-hooks-held.json +1059 -0
  114. package/src/__golden__/wave-loop/op-hooks-hold-before-apply.json +693 -0
  115. package/src/__golden__/wave-loop/op-hooks-pass.json +735 -0
  116. package/src/__golden__/wave-loop/op-hooks-refused-at-base.json +148 -0
  117. package/src/__golden__/wave-loop/op-hooks-share.json +1225 -0
  118. package/src/__golden__/wave-loop/op-outcome-held.json +202 -0
  119. package/src/__golden__/wave-loop/op-outcome-replan-approved.json +286 -0
  120. package/src/__golden__/wave-loop/op-outcome-replan-forever.json +823 -0
  121. package/src/__golden__/wave-loop/op-outcome-replan.json +259 -0
  122. package/src/__golden__/wave-loop/op-outcome-stood-down.json +196 -0
  123. package/src/__golden__/wave-loop/op-outcome-unreadable.json +193 -0
  124. package/src/__golden__/wave-loop/op-overridden.json +508 -0
  125. package/src/__golden__/wave-loop/op-per-run.json +518 -0
  126. package/src/__golden__/wave-loop/op-point.json +495 -0
  127. package/src/__golden__/wave-loop/op-pr-review.json +397 -0
  128. package/src/__golden__/wave-loop/op-sealed.json +125 -0
  129. package/src/__golden__/wave-loop/op-spend-change-only.json +168 -0
  130. package/src/__golden__/wave-loop/op-spend.json +328 -0
  131. package/src/__golden__/wave-loop/op-wave-commands.json +1808 -0
  132. package/src/__golden__/wave-loop/op-wide-refused.json +291 -0
  133. package/src/__golden__/wave-loop/op-wide-waiting.json +231 -0
  134. package/src/__golden__/wave-loop/op-wide.json +440 -0
  135. package/src/cli/commands/check-lexicon-plugin.ts +2 -1
  136. package/src/cli/commands/lint.ts +3 -2
  137. package/src/cli/compiled-cli.e2e.test.ts +42 -1
  138. package/src/components/discover.ts +2 -1
  139. package/src/components/fan-out-run.ts +156 -128
  140. package/src/config-sandbox.ts +5 -1
  141. package/src/discovery/import.ts +2 -1
  142. package/src/discovery/sandbox/driver.ts +8 -3
  143. package/src/lexicon-module.ts +4 -3
  144. package/src/lint/policy-import.ts +2 -1
  145. package/src/lint/rule-loader.ts +2 -1
  146. package/src/meta/peer-deps.test.ts +39 -0
  147. package/src/module-interop.test.ts +65 -0
  148. package/src/module-interop.ts +39 -0
  149. package/src/op/discover.ts +3 -2
  150. package/src/op/op-waves-run.ts +184 -68
  151. package/src/wave-engine.test.ts +38 -1
  152. package/src/wave-engine.ts +101 -5
  153. package/src/wave-loop-golden.test.ts +627 -0
  154. package/src/workspace/lineage-migrations.ts +2 -1
@@ -0,0 +1,898 @@
1
+ [
2
+ {
3
+ "label": "b plans nothing",
4
+ "plan": {
5
+ "order": [
6
+ "net",
7
+ "a",
8
+ "b",
9
+ "app"
10
+ ],
11
+ "waves": [
12
+ [
13
+ "net"
14
+ ],
15
+ [
16
+ "a",
17
+ "b"
18
+ ],
19
+ [
20
+ "app"
21
+ ]
22
+ ],
23
+ "skipped": [],
24
+ "seeds": [],
25
+ "indeterminate": [],
26
+ "digest": "jcs1-sha256:4eb61d657aecab33201cedb6d604c6be9ca99eb91ac05897766e49a2350b1cb2"
27
+ },
28
+ "result": {
29
+ "plan": {
30
+ "order": [
31
+ "net",
32
+ "a",
33
+ "b",
34
+ "app"
35
+ ],
36
+ "waves": [
37
+ [
38
+ "net"
39
+ ],
40
+ [
41
+ "a",
42
+ "b"
43
+ ],
44
+ [
45
+ "app"
46
+ ]
47
+ ],
48
+ "skipped": [],
49
+ "seeds": [],
50
+ "indeterminate": [],
51
+ "digest": "jcs1-sha256:4eb61d657aecab33201cedb6d604c6be9ca99eb91ac05897766e49a2350b1cb2"
52
+ },
53
+ "status": "ok",
54
+ "results": [
55
+ {
56
+ "component": "net",
57
+ "ok": true,
58
+ "status": "ok",
59
+ "records": [
60
+ {
61
+ "component": "net",
62
+ "phase": "Apply",
63
+ "kind": "fake-root",
64
+ "status": "ok",
65
+ "durationMs": 0,
66
+ "output": {
67
+ "outputs": {
68
+ "id": "net-id"
69
+ }
70
+ }
71
+ }
72
+ ]
73
+ },
74
+ {
75
+ "component": "a",
76
+ "ok": true,
77
+ "status": "ok",
78
+ "records": [
79
+ {
80
+ "component": "a",
81
+ "phase": "Apply",
82
+ "kind": "fake-root",
83
+ "status": "ok",
84
+ "durationMs": 0,
85
+ "output": {
86
+ "outputs": {
87
+ "id": "a-id"
88
+ }
89
+ }
90
+ }
91
+ ]
92
+ },
93
+ {
94
+ "component": "b",
95
+ "ok": true,
96
+ "status": "ok",
97
+ "records": [
98
+ {
99
+ "component": "b",
100
+ "phase": "Apply",
101
+ "kind": "fake-root",
102
+ "status": "ok",
103
+ "durationMs": 0,
104
+ "output": {
105
+ "outputs": {
106
+ "id": "b-id"
107
+ }
108
+ }
109
+ }
110
+ ]
111
+ },
112
+ {
113
+ "component": "app",
114
+ "ok": true,
115
+ "status": "ok",
116
+ "records": [
117
+ {
118
+ "component": "app",
119
+ "phase": "Apply",
120
+ "kind": "fake-root",
121
+ "status": "ok",
122
+ "durationMs": 0,
123
+ "output": {
124
+ "outputs": {
125
+ "id": "app-id"
126
+ }
127
+ }
128
+ }
129
+ ]
130
+ }
131
+ ],
132
+ "completed": [
133
+ "a",
134
+ "app",
135
+ "b",
136
+ "net"
137
+ ],
138
+ "failed": [],
139
+ "blocked": [],
140
+ "componentOutputs": {
141
+ "net": {
142
+ "id": "net-id"
143
+ },
144
+ "a": {
145
+ "id": "a-id"
146
+ },
147
+ "b": {
148
+ "id": "b-id"
149
+ },
150
+ "app": {
151
+ "id": "app-id"
152
+ }
153
+ },
154
+ "waves": [
155
+ {
156
+ "wave": 1,
157
+ "op": "fan-out",
158
+ "gate": "release-wave-1",
159
+ "components": [
160
+ "net"
161
+ ],
162
+ "digest": "jcs1-sha256:95bbd78ad48471cefeb1cb32a3f308abde40b2d299eac36ab86b0614f23bcccf",
163
+ "members": [
164
+ {
165
+ "member": "net",
166
+ "planDigest": "sha256:7b22726f6f74223a226e6574227d000000000000000000000000000000000000"
167
+ }
168
+ ],
169
+ "status": "applied",
170
+ "approvedBy": "ana"
171
+ },
172
+ {
173
+ "wave": 2,
174
+ "op": "fan-out",
175
+ "gate": "release-wave-2",
176
+ "components": [
177
+ "a",
178
+ "b"
179
+ ],
180
+ "digest": "jcs1-sha256:9361cf7219ec1d24e0fff2e3ee52ec3c6ac8648f1e67449ae9fc445fefdabd2f",
181
+ "members": [
182
+ {
183
+ "member": "a",
184
+ "planDigest": "sha256:7b22726f6f74223a2261227d0000000000000000000000000000000000000000"
185
+ }
186
+ ],
187
+ "status": "applied",
188
+ "approvedBy": "ana"
189
+ },
190
+ {
191
+ "wave": 3,
192
+ "op": "fan-out",
193
+ "gate": "release-wave-3",
194
+ "components": [
195
+ "app"
196
+ ],
197
+ "digest": "jcs1-sha256:7a62831fe9eb73d86761a06ac2723600b2ce02ce3c2d503ab0fe8d4a0ca6f34d",
198
+ "members": [
199
+ {
200
+ "member": "app",
201
+ "planDigest": "sha256:7b22726f6f74223a22617070222c2276617273223a7b22757073747265616d22"
202
+ }
203
+ ],
204
+ "status": "applied",
205
+ "approvedBy": "ana"
206
+ }
207
+ ]
208
+ },
209
+ "events": [
210
+ {
211
+ "type": "run-start",
212
+ "waves": [
213
+ [
214
+ "net"
215
+ ],
216
+ [
217
+ "a",
218
+ "b"
219
+ ],
220
+ [
221
+ "app"
222
+ ]
223
+ ]
224
+ },
225
+ {
226
+ "type": "wave-start",
227
+ "wave": 1,
228
+ "components": [
229
+ "net"
230
+ ]
231
+ },
232
+ {
233
+ "type": "component-start",
234
+ "wave": 1,
235
+ "component": "net"
236
+ },
237
+ {
238
+ "type": "phase-start",
239
+ "component": "net",
240
+ "phase": "Apply"
241
+ },
242
+ {
243
+ "type": "step",
244
+ "component": "net",
245
+ "phase": "Apply",
246
+ "step": "fake-root",
247
+ "status": "running"
248
+ },
249
+ {
250
+ "type": "step",
251
+ "component": "net",
252
+ "phase": "Apply",
253
+ "step": "fake-root",
254
+ "status": "ok"
255
+ },
256
+ {
257
+ "type": "phase-done",
258
+ "component": "net",
259
+ "phase": "Apply",
260
+ "status": "ok"
261
+ },
262
+ {
263
+ "type": "component-done",
264
+ "wave": 1,
265
+ "component": "net",
266
+ "status": "ok"
267
+ },
268
+ {
269
+ "type": "wave-done",
270
+ "wave": 1,
271
+ "status": "ok"
272
+ },
273
+ {
274
+ "type": "wave-start",
275
+ "wave": 2,
276
+ "components": [
277
+ "a",
278
+ "b"
279
+ ]
280
+ },
281
+ {
282
+ "type": "component-start",
283
+ "wave": 2,
284
+ "component": "a"
285
+ },
286
+ {
287
+ "type": "phase-start",
288
+ "component": "a",
289
+ "phase": "Apply"
290
+ },
291
+ {
292
+ "type": "component-start",
293
+ "wave": 2,
294
+ "component": "b"
295
+ },
296
+ {
297
+ "type": "phase-start",
298
+ "component": "b",
299
+ "phase": "Apply"
300
+ },
301
+ {
302
+ "type": "step",
303
+ "component": "a",
304
+ "phase": "Apply",
305
+ "step": "fake-root",
306
+ "status": "running"
307
+ },
308
+ {
309
+ "type": "step",
310
+ "component": "b",
311
+ "phase": "Apply",
312
+ "step": "fake-root",
313
+ "status": "running"
314
+ },
315
+ {
316
+ "type": "step",
317
+ "component": "a",
318
+ "phase": "Apply",
319
+ "step": "fake-root",
320
+ "status": "ok"
321
+ },
322
+ {
323
+ "type": "step",
324
+ "component": "b",
325
+ "phase": "Apply",
326
+ "step": "fake-root",
327
+ "status": "ok"
328
+ },
329
+ {
330
+ "type": "phase-done",
331
+ "component": "a",
332
+ "phase": "Apply",
333
+ "status": "ok"
334
+ },
335
+ {
336
+ "type": "phase-done",
337
+ "component": "b",
338
+ "phase": "Apply",
339
+ "status": "ok"
340
+ },
341
+ {
342
+ "type": "component-done",
343
+ "wave": 2,
344
+ "component": "a",
345
+ "status": "ok"
346
+ },
347
+ {
348
+ "type": "component-done",
349
+ "wave": 2,
350
+ "component": "b",
351
+ "status": "ok"
352
+ },
353
+ {
354
+ "type": "wave-done",
355
+ "wave": 2,
356
+ "status": "ok"
357
+ },
358
+ {
359
+ "type": "wave-start",
360
+ "wave": 3,
361
+ "components": [
362
+ "app"
363
+ ]
364
+ },
365
+ {
366
+ "type": "component-start",
367
+ "wave": 3,
368
+ "component": "app"
369
+ },
370
+ {
371
+ "type": "phase-start",
372
+ "component": "app",
373
+ "phase": "Apply"
374
+ },
375
+ {
376
+ "type": "step",
377
+ "component": "app",
378
+ "phase": "Apply",
379
+ "step": "fake-root",
380
+ "status": "running"
381
+ },
382
+ {
383
+ "type": "step",
384
+ "component": "app",
385
+ "phase": "Apply",
386
+ "step": "fake-root",
387
+ "status": "ok"
388
+ },
389
+ {
390
+ "type": "phase-done",
391
+ "component": "app",
392
+ "phase": "Apply",
393
+ "status": "ok"
394
+ },
395
+ {
396
+ "type": "component-done",
397
+ "wave": 3,
398
+ "component": "app",
399
+ "status": "ok"
400
+ },
401
+ {
402
+ "type": "wave-done",
403
+ "wave": 3,
404
+ "status": "ok"
405
+ },
406
+ {
407
+ "type": "run-done",
408
+ "status": "ok"
409
+ }
410
+ ],
411
+ "settled": [
412
+ {
413
+ "wave": 1,
414
+ "op": "fan-out",
415
+ "gate": "release-wave-1",
416
+ "components": [
417
+ "net"
418
+ ],
419
+ "digest": "jcs1-sha256:95bbd78ad48471cefeb1cb32a3f308abde40b2d299eac36ab86b0614f23bcccf",
420
+ "members": [
421
+ {
422
+ "member": "net",
423
+ "planDigest": "sha256:7b22726f6f74223a226e6574227d000000000000000000000000000000000000"
424
+ }
425
+ ],
426
+ "status": "applied",
427
+ "approvedBy": "ana"
428
+ },
429
+ {
430
+ "wave": 2,
431
+ "op": "fan-out",
432
+ "gate": "release-wave-2",
433
+ "components": [
434
+ "a",
435
+ "b"
436
+ ],
437
+ "digest": "jcs1-sha256:9361cf7219ec1d24e0fff2e3ee52ec3c6ac8648f1e67449ae9fc445fefdabd2f",
438
+ "members": [
439
+ {
440
+ "member": "a",
441
+ "planDigest": "sha256:7b22726f6f74223a2261227d0000000000000000000000000000000000000000"
442
+ }
443
+ ],
444
+ "status": "applied",
445
+ "approvedBy": "ana"
446
+ },
447
+ {
448
+ "wave": 3,
449
+ "op": "fan-out",
450
+ "gate": "release-wave-3",
451
+ "components": [
452
+ "app"
453
+ ],
454
+ "digest": "jcs1-sha256:7a62831fe9eb73d86761a06ac2723600b2ce02ce3c2d503ab0fe8d4a0ca6f34d",
455
+ "members": [
456
+ {
457
+ "member": "app",
458
+ "planDigest": "sha256:7b22726f6f74223a22617070222c2276617273223a7b22757073747265616d22"
459
+ }
460
+ ],
461
+ "status": "applied",
462
+ "approvedBy": "ana"
463
+ }
464
+ ],
465
+ "components": [
466
+ {
467
+ "component": "net",
468
+ "outputs": {
469
+ "id": "net-id"
470
+ }
471
+ },
472
+ {
473
+ "component": "a",
474
+ "outputs": {
475
+ "id": "a-id"
476
+ }
477
+ },
478
+ {
479
+ "component": "b",
480
+ "outputs": {
481
+ "id": "b-id"
482
+ }
483
+ },
484
+ {
485
+ "component": "app",
486
+ "outputs": {
487
+ "id": "app-id"
488
+ }
489
+ }
490
+ ],
491
+ "applied": [
492
+ "net",
493
+ "a",
494
+ "b",
495
+ "app"
496
+ ],
497
+ "ledger": {
498
+ "appended": [],
499
+ "resolved": [],
500
+ "applied": []
501
+ }
502
+ },
503
+ {
504
+ "label": "a wave where nothing planned asks its gate with an empty digest",
505
+ "plan": {
506
+ "order": [
507
+ "net",
508
+ "a",
509
+ "b",
510
+ "app"
511
+ ],
512
+ "waves": [
513
+ [
514
+ "net"
515
+ ],
516
+ [
517
+ "a",
518
+ "b"
519
+ ],
520
+ [
521
+ "app"
522
+ ]
523
+ ],
524
+ "skipped": [],
525
+ "seeds": [],
526
+ "indeterminate": [],
527
+ "digest": "jcs1-sha256:4eb61d657aecab33201cedb6d604c6be9ca99eb91ac05897766e49a2350b1cb2"
528
+ },
529
+ "result": {
530
+ "plan": {
531
+ "order": [
532
+ "net",
533
+ "a",
534
+ "b",
535
+ "app"
536
+ ],
537
+ "waves": [
538
+ [
539
+ "net"
540
+ ],
541
+ [
542
+ "a",
543
+ "b"
544
+ ],
545
+ [
546
+ "app"
547
+ ]
548
+ ],
549
+ "skipped": [],
550
+ "seeds": [],
551
+ "indeterminate": [],
552
+ "digest": "jcs1-sha256:4eb61d657aecab33201cedb6d604c6be9ca99eb91ac05897766e49a2350b1cb2"
553
+ },
554
+ "status": "gated",
555
+ "results": [],
556
+ "completed": [],
557
+ "failed": [],
558
+ "blocked": [],
559
+ "componentOutputs": {},
560
+ "gate": {
561
+ "version": 1,
562
+ "kind": "pending",
563
+ "op": "fan-out",
564
+ "gate": "release-wave-1",
565
+ "timestamp": "2026-10-11T00:00:00.000Z",
566
+ "expiresAt": "2026-10-13T00:00:00.000Z",
567
+ "description": "wave 1 of 3: net",
568
+ "planDigest": ""
569
+ },
570
+ "waves": [
571
+ {
572
+ "wave": 1,
573
+ "op": "fan-out",
574
+ "gate": "release-wave-1",
575
+ "components": [
576
+ "net"
577
+ ],
578
+ "digest": "",
579
+ "members": [],
580
+ "status": "gated"
581
+ }
582
+ ]
583
+ },
584
+ "events": [
585
+ {
586
+ "type": "run-start",
587
+ "waves": [
588
+ [
589
+ "net"
590
+ ],
591
+ [
592
+ "a",
593
+ "b"
594
+ ],
595
+ [
596
+ "app"
597
+ ]
598
+ ]
599
+ },
600
+ {
601
+ "type": "run-done",
602
+ "status": "gated"
603
+ }
604
+ ],
605
+ "settled": [
606
+ {
607
+ "wave": 1,
608
+ "op": "fan-out",
609
+ "gate": "release-wave-1",
610
+ "components": [
611
+ "net"
612
+ ],
613
+ "digest": "",
614
+ "members": [],
615
+ "status": "gated"
616
+ }
617
+ ],
618
+ "components": [],
619
+ "applied": [],
620
+ "ledger": {
621
+ "appended": [
622
+ {
623
+ "version": 1,
624
+ "kind": "pending",
625
+ "op": "fan-out",
626
+ "gate": "release-wave-1",
627
+ "timestamp": "2026-10-11T00:00:00.000Z",
628
+ "expiresAt": "2026-10-13T00:00:00.000Z",
629
+ "description": "wave 1 of 3: net",
630
+ "planDigest": ""
631
+ }
632
+ ],
633
+ "resolved": [],
634
+ "applied": []
635
+ }
636
+ },
637
+ {
638
+ "label": "approved at the empty digest",
639
+ "plan": {
640
+ "order": [
641
+ "net",
642
+ "a",
643
+ "b",
644
+ "app"
645
+ ],
646
+ "waves": [
647
+ [
648
+ "net"
649
+ ],
650
+ [
651
+ "a",
652
+ "b"
653
+ ],
654
+ [
655
+ "app"
656
+ ]
657
+ ],
658
+ "skipped": [],
659
+ "seeds": [],
660
+ "indeterminate": [],
661
+ "digest": "jcs1-sha256:4eb61d657aecab33201cedb6d604c6be9ca99eb91ac05897766e49a2350b1cb2"
662
+ },
663
+ "result": {
664
+ "plan": {
665
+ "order": [
666
+ "net",
667
+ "a",
668
+ "b",
669
+ "app"
670
+ ],
671
+ "waves": [
672
+ [
673
+ "net"
674
+ ],
675
+ [
676
+ "a",
677
+ "b"
678
+ ],
679
+ [
680
+ "app"
681
+ ]
682
+ ],
683
+ "skipped": [],
684
+ "seeds": [],
685
+ "indeterminate": [],
686
+ "digest": "jcs1-sha256:4eb61d657aecab33201cedb6d604c6be9ca99eb91ac05897766e49a2350b1cb2"
687
+ },
688
+ "status": "gated",
689
+ "results": [
690
+ {
691
+ "component": "net",
692
+ "ok": true,
693
+ "status": "ok",
694
+ "records": [
695
+ {
696
+ "component": "net",
697
+ "phase": "Apply",
698
+ "kind": "fake-root",
699
+ "status": "ok",
700
+ "durationMs": 0,
701
+ "output": {
702
+ "outputs": {
703
+ "id": "net-id"
704
+ }
705
+ }
706
+ }
707
+ ]
708
+ }
709
+ ],
710
+ "completed": [
711
+ "net"
712
+ ],
713
+ "failed": [],
714
+ "blocked": [],
715
+ "componentOutputs": {
716
+ "net": {
717
+ "id": "net-id"
718
+ }
719
+ },
720
+ "gate": {
721
+ "version": 1,
722
+ "kind": "pending",
723
+ "op": "fan-out",
724
+ "gate": "release-wave-2",
725
+ "timestamp": "2026-10-11T00:00:00.000Z",
726
+ "expiresAt": "2026-10-13T00:00:00.000Z",
727
+ "description": "wave 2 of 3: a, b",
728
+ "planDigest": "jcs1-sha256:f56bc903abaf2bb2f593fcb6f83b48322c7079deed286c1439d2a4e0310e2bdd"
729
+ },
730
+ "waves": [
731
+ {
732
+ "wave": 1,
733
+ "op": "fan-out",
734
+ "gate": "release-wave-1",
735
+ "components": [
736
+ "net"
737
+ ],
738
+ "digest": "",
739
+ "members": [],
740
+ "status": "applied",
741
+ "approvedBy": "ana"
742
+ },
743
+ {
744
+ "wave": 2,
745
+ "op": "fan-out",
746
+ "gate": "release-wave-2",
747
+ "components": [
748
+ "a",
749
+ "b"
750
+ ],
751
+ "digest": "jcs1-sha256:f56bc903abaf2bb2f593fcb6f83b48322c7079deed286c1439d2a4e0310e2bdd",
752
+ "members": [
753
+ {
754
+ "member": "a",
755
+ "planDigest": "sha256:7b22726f6f74223a2261227d0000000000000000000000000000000000000000"
756
+ },
757
+ {
758
+ "member": "b",
759
+ "planDigest": "sha256:7b22726f6f74223a2262227d0000000000000000000000000000000000000000"
760
+ }
761
+ ],
762
+ "status": "gated"
763
+ }
764
+ ]
765
+ },
766
+ "events": [
767
+ {
768
+ "type": "run-start",
769
+ "waves": [
770
+ [
771
+ "net"
772
+ ],
773
+ [
774
+ "a",
775
+ "b"
776
+ ],
777
+ [
778
+ "app"
779
+ ]
780
+ ]
781
+ },
782
+ {
783
+ "type": "wave-start",
784
+ "wave": 1,
785
+ "components": [
786
+ "net"
787
+ ]
788
+ },
789
+ {
790
+ "type": "component-start",
791
+ "wave": 1,
792
+ "component": "net"
793
+ },
794
+ {
795
+ "type": "phase-start",
796
+ "component": "net",
797
+ "phase": "Apply"
798
+ },
799
+ {
800
+ "type": "step",
801
+ "component": "net",
802
+ "phase": "Apply",
803
+ "step": "fake-root",
804
+ "status": "running"
805
+ },
806
+ {
807
+ "type": "step",
808
+ "component": "net",
809
+ "phase": "Apply",
810
+ "step": "fake-root",
811
+ "status": "ok"
812
+ },
813
+ {
814
+ "type": "phase-done",
815
+ "component": "net",
816
+ "phase": "Apply",
817
+ "status": "ok"
818
+ },
819
+ {
820
+ "type": "component-done",
821
+ "wave": 1,
822
+ "component": "net",
823
+ "status": "ok"
824
+ },
825
+ {
826
+ "type": "wave-done",
827
+ "wave": 1,
828
+ "status": "ok"
829
+ },
830
+ {
831
+ "type": "run-done",
832
+ "status": "gated"
833
+ }
834
+ ],
835
+ "settled": [
836
+ {
837
+ "wave": 1,
838
+ "op": "fan-out",
839
+ "gate": "release-wave-1",
840
+ "components": [
841
+ "net"
842
+ ],
843
+ "digest": "",
844
+ "members": [],
845
+ "status": "applied",
846
+ "approvedBy": "ana"
847
+ },
848
+ {
849
+ "wave": 2,
850
+ "op": "fan-out",
851
+ "gate": "release-wave-2",
852
+ "components": [
853
+ "a",
854
+ "b"
855
+ ],
856
+ "digest": "jcs1-sha256:f56bc903abaf2bb2f593fcb6f83b48322c7079deed286c1439d2a4e0310e2bdd",
857
+ "members": [
858
+ {
859
+ "member": "a",
860
+ "planDigest": "sha256:7b22726f6f74223a2261227d0000000000000000000000000000000000000000"
861
+ },
862
+ {
863
+ "member": "b",
864
+ "planDigest": "sha256:7b22726f6f74223a2262227d0000000000000000000000000000000000000000"
865
+ }
866
+ ],
867
+ "status": "gated"
868
+ }
869
+ ],
870
+ "components": [
871
+ {
872
+ "component": "net",
873
+ "outputs": {
874
+ "id": "net-id"
875
+ }
876
+ }
877
+ ],
878
+ "applied": [
879
+ "net"
880
+ ],
881
+ "ledger": {
882
+ "appended": [
883
+ {
884
+ "version": 1,
885
+ "kind": "pending",
886
+ "op": "fan-out",
887
+ "gate": "release-wave-2",
888
+ "timestamp": "2026-10-11T00:00:00.000Z",
889
+ "expiresAt": "2026-10-13T00:00:00.000Z",
890
+ "description": "wave 2 of 3: a, b",
891
+ "planDigest": "jcs1-sha256:f56bc903abaf2bb2f593fcb6f83b48322c7079deed286c1439d2a4e0310e2bdd"
892
+ }
893
+ ],
894
+ "resolved": [],
895
+ "applied": []
896
+ }
897
+ }
898
+ ]