@intentius/chant 0.124.17 → 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 (115) 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/components/fan-out-run.d.ts +4 -3
  51. package/dist/components/fan-out-run.d.ts.map +1 -1
  52. package/dist/components/fan-out-run.js +138 -123
  53. package/dist/op/op-waves-run.d.ts +7 -1
  54. package/dist/op/op-waves-run.d.ts.map +1 -1
  55. package/dist/op/op-waves-run.js +129 -72
  56. package/dist/wave-engine.d.ts +74 -5
  57. package/dist/wave-engine.d.ts.map +1 -1
  58. package/dist/wave-engine.js +47 -5
  59. package/dist/wave-runtime.mjs +202 -202
  60. package/package.json +1 -1
  61. package/src/__golden__/wave-loop/fan-out-applied.json +511 -0
  62. package/src/__golden__/wave-loop/fan-out-apply-fails.json +406 -0
  63. package/src/__golden__/wave-loop/fan-out-gated.json +707 -0
  64. package/src/__golden__/wave-loop/fan-out-no-members.json +898 -0
  65. package/src/__golden__/wave-loop/fan-out-only.json +514 -0
  66. package/src/__golden__/wave-loop/fan-out-plan-fails.json +359 -0
  67. package/src/__golden__/wave-loop/fan-out-same-root.json +311 -0
  68. package/src/__golden__/wave-loop/op-by-apply-after-fails.json +401 -0
  69. package/src/__golden__/wave-loop/op-by-apply-hold.json +756 -0
  70. package/src/__golden__/wave-loop/op-by-apply-ignored.json +340 -0
  71. package/src/__golden__/wave-loop/op-by-apply-pass.json +400 -0
  72. package/src/__golden__/wave-loop/op-by-apply-skip.json +404 -0
  73. package/src/__golden__/wave-loop/op-cost-member-clash.json +62 -0
  74. package/src/__golden__/wave-loop/op-cost-member.json +191 -0
  75. package/src/__golden__/wave-loop/op-denied-source.json +407 -0
  76. package/src/__golden__/wave-loop/op-denied.json +399 -0
  77. package/src/__golden__/wave-loop/op-discover-rest-short.json +92 -0
  78. package/src/__golden__/wave-loop/op-discover-rest-stops.json +340 -0
  79. package/src/__golden__/wave-loop/op-discover-rest.json +659 -0
  80. package/src/__golden__/wave-loop/op-discover-wide.json +290 -0
  81. package/src/__golden__/wave-loop/op-held-on-again.json +176 -0
  82. package/src/__golden__/wave-loop/op-held-on-before-apply.json +689 -0
  83. package/src/__golden__/wave-loop/op-held-on.json +1455 -0
  84. package/src/__golden__/wave-loop/op-hooks-apply-fails.json +673 -0
  85. package/src/__golden__/wave-loop/op-hooks-fail-after-apply.json +737 -0
  86. package/src/__golden__/wave-loop/op-hooks-fail-before-apply.json +450 -0
  87. package/src/__golden__/wave-loop/op-hooks-fail-before-plan.json +97 -0
  88. package/src/__golden__/wave-loop/op-hooks-held.json +1059 -0
  89. package/src/__golden__/wave-loop/op-hooks-hold-before-apply.json +693 -0
  90. package/src/__golden__/wave-loop/op-hooks-pass.json +735 -0
  91. package/src/__golden__/wave-loop/op-hooks-refused-at-base.json +148 -0
  92. package/src/__golden__/wave-loop/op-hooks-share.json +1225 -0
  93. package/src/__golden__/wave-loop/op-outcome-held.json +202 -0
  94. package/src/__golden__/wave-loop/op-outcome-replan-approved.json +286 -0
  95. package/src/__golden__/wave-loop/op-outcome-replan-forever.json +823 -0
  96. package/src/__golden__/wave-loop/op-outcome-replan.json +259 -0
  97. package/src/__golden__/wave-loop/op-outcome-stood-down.json +196 -0
  98. package/src/__golden__/wave-loop/op-outcome-unreadable.json +193 -0
  99. package/src/__golden__/wave-loop/op-overridden.json +508 -0
  100. package/src/__golden__/wave-loop/op-per-run.json +518 -0
  101. package/src/__golden__/wave-loop/op-point.json +495 -0
  102. package/src/__golden__/wave-loop/op-pr-review.json +397 -0
  103. package/src/__golden__/wave-loop/op-sealed.json +125 -0
  104. package/src/__golden__/wave-loop/op-spend-change-only.json +168 -0
  105. package/src/__golden__/wave-loop/op-spend.json +328 -0
  106. package/src/__golden__/wave-loop/op-wave-commands.json +1808 -0
  107. package/src/__golden__/wave-loop/op-wide-refused.json +291 -0
  108. package/src/__golden__/wave-loop/op-wide-waiting.json +231 -0
  109. package/src/__golden__/wave-loop/op-wide.json +440 -0
  110. package/src/components/fan-out-run.ts +156 -128
  111. package/src/meta/peer-deps.test.ts +39 -0
  112. package/src/op/op-waves-run.ts +184 -68
  113. package/src/wave-engine.test.ts +38 -1
  114. package/src/wave-engine.ts +101 -5
  115. package/src/wave-loop-golden.test.ts +627 -0
@@ -0,0 +1,407 @@
1
+ {
2
+ "jobs": [
3
+ {
4
+ "job": {
5
+ "wave": 1
6
+ },
7
+ "result": {
8
+ "exitCode": 7,
9
+ "applied": [],
10
+ "failed": [],
11
+ "moved": [],
12
+ "hooks": [
13
+ {
14
+ "moment": "after-gate",
15
+ "name": "report",
16
+ "exit": 0,
17
+ "outcome": "passed"
18
+ }
19
+ ],
20
+ "decision": {
21
+ "wave": 1,
22
+ "name": "net",
23
+ "op": "tf-apply",
24
+ "gate": "wave-1",
25
+ "policy": "always",
26
+ "approval": "ledger",
27
+ "policySource": "base",
28
+ "base": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
29
+ "digest": "jcs1-sha256:c9fbef43193e7e84d13a2cbde3a7f292071ab953affab1ce3b87ab3862dc6692",
30
+ "members": [
31
+ {
32
+ "member": "vpc",
33
+ "planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
34
+ "op": "tf-apply",
35
+ "denied": {
36
+ "rules": [
37
+ "no-public-s3"
38
+ ]
39
+ }
40
+ },
41
+ {
42
+ "member": "dns",
43
+ "planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
44
+ "op": "tf-apply"
45
+ },
46
+ {
47
+ "member": "nat",
48
+ "planDigest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
49
+ "op": "tf-apply",
50
+ "empty": true
51
+ }
52
+ ],
53
+ "status": "refused",
54
+ "hooks": {
55
+ "after-gate": [
56
+ {
57
+ "name": "report",
58
+ "command": [
59
+ "hook",
60
+ "report",
61
+ "{runs}"
62
+ ]
63
+ }
64
+ ]
65
+ },
66
+ "digestOver": "changing",
67
+ "refused": {
68
+ "reason": "policy",
69
+ "runs": [
70
+ "vpc"
71
+ ],
72
+ "overridersSource": "policy.override in terragucci.yml"
73
+ },
74
+ "outcomes": [
75
+ {
76
+ "moment": "after-gate",
77
+ "name": "report",
78
+ "exit": 0,
79
+ "outcome": "passed"
80
+ }
81
+ ]
82
+ }
83
+ },
84
+ "ledger": {
85
+ "appended": [
86
+ {
87
+ "version": 1,
88
+ "kind": "pending",
89
+ "op": "policy-override",
90
+ "gate": "vpc",
91
+ "timestamp": "2026-10-11T00:00:00.000Z",
92
+ "expiresAt": "2026-10-13T00:00:00.000Z",
93
+ "planDigest": "sha256:0d0e9069d1317d35567f7bf5d62cce772cc58f895d827d2bb3bc9cfaaade6507",
94
+ "plan": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
95
+ "rules": [
96
+ "no-public-s3"
97
+ ],
98
+ "description": "wave 1 (net) of tf-apply: vpc: plan sha256:1111111111111111111111111111111111111111111111111111111111111111 denied by no-public-s3",
99
+ "members": [
100
+ {
101
+ "member": "vpc",
102
+ "planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
103
+ }
104
+ ],
105
+ "wave": {
106
+ "number": 1,
107
+ "name": "net",
108
+ "op": "tf-apply"
109
+ }
110
+ }
111
+ ],
112
+ "resolved": [],
113
+ "applied": []
114
+ },
115
+ "calls": 2,
116
+ "logs": 3
117
+ }
118
+ ],
119
+ "calls": [
120
+ {
121
+ "argv": [
122
+ "tg",
123
+ "plan",
124
+ "net",
125
+ ".chant/op-waves/tf-apply/wave-1/runs.json",
126
+ ".chant/op-waves/tf-apply/wave-1/plans.json"
127
+ ],
128
+ "read": {
129
+ ".chant/op-waves/tf-apply/wave-1/runs.json": {
130
+ "wave": "net",
131
+ "number": 1,
132
+ "runs": [
133
+ {
134
+ "target": "vpc",
135
+ "op": "tf-apply"
136
+ },
137
+ {
138
+ "target": "dns",
139
+ "op": "tf-apply"
140
+ },
141
+ {
142
+ "target": "nat",
143
+ "op": "tf-apply"
144
+ }
145
+ ]
146
+ }
147
+ }
148
+ },
149
+ {
150
+ "argv": [
151
+ "hook",
152
+ "report",
153
+ ".chant/op-waves/tf-apply/wave-1/runs.json"
154
+ ],
155
+ "env": {
156
+ "CHANT_OP_WAVES": "tf-apply",
157
+ "CHANT_WAVE": "net",
158
+ "CHANT_WAVE_NUMBER": "1",
159
+ "CHANT_HOOK": "after-gate",
160
+ "CHANT_RUNS": ".chant/op-waves/tf-apply/wave-1/runs.json",
161
+ "CHANT_HOLD": ".chant/op-waves/tf-apply/wave-1/hold.json",
162
+ "CHANT_GATE_STATUS": "refused",
163
+ "CHANT_GATE_OP": "tf-apply",
164
+ "CHANT_GATE": "wave-1",
165
+ "CHANT_GATE_DIGEST": "jcs1-sha256:c9fbef43193e7e84d13a2cbde3a7f292071ab953affab1ce3b87ab3862dc6692",
166
+ "CHANT_DECISION": ".chant/op-waves/tf-apply/wave-1.json"
167
+ },
168
+ "read": {
169
+ "CHANT_RUNS": {
170
+ "wave": "net",
171
+ "number": 1,
172
+ "digest": "jcs1-sha256:c9fbef43193e7e84d13a2cbde3a7f292071ab953affab1ce3b87ab3862dc6692",
173
+ "runs": [
174
+ {
175
+ "target": "vpc",
176
+ "op": "tf-apply",
177
+ "planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
178
+ },
179
+ {
180
+ "target": "dns",
181
+ "op": "tf-apply",
182
+ "planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
183
+ },
184
+ {
185
+ "target": "nat",
186
+ "op": "tf-apply",
187
+ "planDigest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
188
+ "empty": true
189
+ }
190
+ ]
191
+ },
192
+ "CHANT_DECISION": {
193
+ "wave": 1,
194
+ "name": "net",
195
+ "op": "tf-apply",
196
+ "gate": "wave-1",
197
+ "policy": "always",
198
+ "approval": "ledger",
199
+ "policySource": "base",
200
+ "base": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
201
+ "digest": "jcs1-sha256:c9fbef43193e7e84d13a2cbde3a7f292071ab953affab1ce3b87ab3862dc6692",
202
+ "members": [
203
+ {
204
+ "member": "vpc",
205
+ "planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
206
+ "op": "tf-apply",
207
+ "denied": {
208
+ "rules": [
209
+ "no-public-s3"
210
+ ]
211
+ }
212
+ },
213
+ {
214
+ "member": "dns",
215
+ "planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
216
+ "op": "tf-apply"
217
+ },
218
+ {
219
+ "member": "nat",
220
+ "planDigest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
221
+ "op": "tf-apply",
222
+ "empty": true
223
+ }
224
+ ],
225
+ "status": "refused",
226
+ "hooks": {
227
+ "after-gate": [
228
+ {
229
+ "name": "report",
230
+ "command": [
231
+ "hook",
232
+ "report",
233
+ "{runs}"
234
+ ]
235
+ }
236
+ ]
237
+ },
238
+ "digestOver": "changing",
239
+ "refused": {
240
+ "reason": "policy",
241
+ "runs": [
242
+ "vpc"
243
+ ],
244
+ "overridersSource": "policy.override in terragucci.yml"
245
+ }
246
+ },
247
+ ".chant/op-waves/tf-apply/wave-1/runs.json": {
248
+ "wave": "net",
249
+ "number": 1,
250
+ "digest": "jcs1-sha256:c9fbef43193e7e84d13a2cbde3a7f292071ab953affab1ce3b87ab3862dc6692",
251
+ "runs": [
252
+ {
253
+ "target": "vpc",
254
+ "op": "tf-apply",
255
+ "planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
256
+ },
257
+ {
258
+ "target": "dns",
259
+ "op": "tf-apply",
260
+ "planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
261
+ },
262
+ {
263
+ "target": "nat",
264
+ "op": "tf-apply",
265
+ "planDigest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
266
+ "empty": true
267
+ }
268
+ ]
269
+ }
270
+ }
271
+ }
272
+ ],
273
+ "logs": [
274
+ "vpc: an override does not count: github:carol is not listed in policy.override in terragucci.yml at base (github:dave)",
275
+ "vpc: github:dave may override it with: chant approve policy-override vpc --rule no-public-s3 --reason \"<why>\"",
276
+ "Nothing in wave 1 (net) or after it ran: the policy denied vpc, and no override counts for it."
277
+ ],
278
+ "files": {
279
+ ".chant/op-waves/tf-apply/wave-1/dns.plan.json": {
280
+ "planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
281
+ },
282
+ ".chant/op-waves/tf-apply/wave-1/nat.plan.json": {
283
+ "planDigest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
284
+ "empty": true
285
+ },
286
+ ".chant/op-waves/tf-apply/wave-1/plans.json": {
287
+ "runs": [
288
+ {
289
+ "target": "vpc",
290
+ "planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
291
+ "denied": {
292
+ "rules": [
293
+ "no-public-s3"
294
+ ]
295
+ }
296
+ },
297
+ {
298
+ "target": "dns",
299
+ "planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
300
+ },
301
+ {
302
+ "target": "nat",
303
+ "planDigest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
304
+ "empty": true
305
+ }
306
+ ],
307
+ "overriders": [
308
+ "github:dave"
309
+ ],
310
+ "overridersSource": "policy.override in terragucci.yml"
311
+ },
312
+ ".chant/op-waves/tf-apply/wave-1/runs.json": {
313
+ "wave": "net",
314
+ "number": 1,
315
+ "digest": "jcs1-sha256:c9fbef43193e7e84d13a2cbde3a7f292071ab953affab1ce3b87ab3862dc6692",
316
+ "runs": [
317
+ {
318
+ "target": "vpc",
319
+ "op": "tf-apply",
320
+ "planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
321
+ },
322
+ {
323
+ "target": "dns",
324
+ "op": "tf-apply",
325
+ "planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
326
+ },
327
+ {
328
+ "target": "nat",
329
+ "op": "tf-apply",
330
+ "planDigest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
331
+ "empty": true
332
+ }
333
+ ]
334
+ },
335
+ ".chant/op-waves/tf-apply/wave-1/vpc.plan.json": {
336
+ "planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
337
+ "denied": {
338
+ "rules": [
339
+ "no-public-s3"
340
+ ]
341
+ }
342
+ },
343
+ ".chant/op-waves/tf-apply/wave-1.json": {
344
+ "wave": 1,
345
+ "name": "net",
346
+ "op": "tf-apply",
347
+ "gate": "wave-1",
348
+ "policy": "always",
349
+ "approval": "ledger",
350
+ "policySource": "base",
351
+ "base": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
352
+ "digest": "jcs1-sha256:c9fbef43193e7e84d13a2cbde3a7f292071ab953affab1ce3b87ab3862dc6692",
353
+ "members": [
354
+ {
355
+ "member": "vpc",
356
+ "planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
357
+ "op": "tf-apply",
358
+ "denied": {
359
+ "rules": [
360
+ "no-public-s3"
361
+ ]
362
+ }
363
+ },
364
+ {
365
+ "member": "dns",
366
+ "planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
367
+ "op": "tf-apply"
368
+ },
369
+ {
370
+ "member": "nat",
371
+ "planDigest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
372
+ "op": "tf-apply",
373
+ "empty": true
374
+ }
375
+ ],
376
+ "status": "refused",
377
+ "hooks": {
378
+ "after-gate": [
379
+ {
380
+ "name": "report",
381
+ "command": [
382
+ "hook",
383
+ "report",
384
+ "{runs}"
385
+ ]
386
+ }
387
+ ]
388
+ },
389
+ "digestOver": "changing",
390
+ "refused": {
391
+ "reason": "policy",
392
+ "runs": [
393
+ "vpc"
394
+ ],
395
+ "overridersSource": "policy.override in terragucci.yml"
396
+ },
397
+ "outcomes": [
398
+ {
399
+ "moment": "after-gate",
400
+ "name": "report",
401
+ "exit": 0,
402
+ "outcome": "passed"
403
+ }
404
+ ]
405
+ }
406
+ }
407
+ }