@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,508 @@
1
+ {
2
+ "jobs": [
3
+ {
4
+ "job": {
5
+ "wave": 1
6
+ },
7
+ "result": {
8
+ "exitCode": 0,
9
+ "applied": [
10
+ "vpc",
11
+ "dns",
12
+ "nat"
13
+ ],
14
+ "failed": [],
15
+ "moved": [],
16
+ "hooks": [
17
+ {
18
+ "moment": "after-gate",
19
+ "name": "report",
20
+ "exit": 0,
21
+ "outcome": "passed"
22
+ }
23
+ ],
24
+ "decision": {
25
+ "wave": 1,
26
+ "name": "net",
27
+ "op": "tf-apply",
28
+ "gate": "wave-1",
29
+ "policy": "never",
30
+ "approval": "ledger",
31
+ "policySource": "base",
32
+ "base": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
33
+ "digest": "jcs1-sha256:c9fbef43193e7e84d13a2cbde3a7f292071ab953affab1ce3b87ab3862dc6692",
34
+ "members": [
35
+ {
36
+ "member": "vpc",
37
+ "planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
38
+ "op": "tf-apply",
39
+ "denied": {
40
+ "rules": [
41
+ "no-public-s3"
42
+ ]
43
+ },
44
+ "override": {
45
+ "by": "github:carol",
46
+ "at": "2026-10-10T00:00:00Z",
47
+ "digest": "sha256:0d0e9069d1317d35567f7bf5d62cce772cc58f895d827d2bb3bc9cfaaade6507",
48
+ "reason": "the bucket is the docs site"
49
+ }
50
+ },
51
+ {
52
+ "member": "dns",
53
+ "planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
54
+ "op": "tf-apply"
55
+ },
56
+ {
57
+ "member": "nat",
58
+ "planDigest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
59
+ "op": "tf-apply",
60
+ "empty": true
61
+ }
62
+ ],
63
+ "status": "not-required",
64
+ "hooks": {
65
+ "after-gate": [
66
+ {
67
+ "name": "report",
68
+ "command": [
69
+ "hook",
70
+ "report",
71
+ "{runs}"
72
+ ]
73
+ }
74
+ ]
75
+ },
76
+ "digestOver": "changing",
77
+ "outcomes": [
78
+ {
79
+ "moment": "after-gate",
80
+ "name": "report",
81
+ "exit": 0,
82
+ "outcome": "passed"
83
+ }
84
+ ],
85
+ "overridesSpentAt": "2026-10-11T00:00:00.000Z"
86
+ }
87
+ },
88
+ "ledger": {
89
+ "appended": [],
90
+ "resolved": [],
91
+ "applied": [
92
+ {
93
+ "version": 1,
94
+ "kind": "applied",
95
+ "op": "policy-override",
96
+ "gate": "vpc",
97
+ "planDigest": "sha256:0d0e9069d1317d35567f7bf5d62cce772cc58f895d827d2bb3bc9cfaaade6507",
98
+ "approvedAt": "2026-10-10T00:00:00Z",
99
+ "approvedBy": "github:carol",
100
+ "timestamp": "2026-10-11T00:00:00.000Z"
101
+ }
102
+ ]
103
+ },
104
+ "calls": 3,
105
+ "logs": 3
106
+ }
107
+ ],
108
+ "calls": [
109
+ {
110
+ "argv": [
111
+ "tg",
112
+ "plan",
113
+ "net",
114
+ ".chant/op-waves/tf-apply/wave-1/runs.json",
115
+ ".chant/op-waves/tf-apply/wave-1/plans.json"
116
+ ],
117
+ "read": {
118
+ ".chant/op-waves/tf-apply/wave-1/runs.json": {
119
+ "wave": "net",
120
+ "number": 1,
121
+ "runs": [
122
+ {
123
+ "target": "vpc",
124
+ "op": "tf-apply"
125
+ },
126
+ {
127
+ "target": "dns",
128
+ "op": "tf-apply"
129
+ },
130
+ {
131
+ "target": "nat",
132
+ "op": "tf-apply"
133
+ }
134
+ ]
135
+ }
136
+ }
137
+ },
138
+ {
139
+ "argv": [
140
+ "hook",
141
+ "report",
142
+ ".chant/op-waves/tf-apply/wave-1/runs.json"
143
+ ],
144
+ "env": {
145
+ "CHANT_OP_WAVES": "tf-apply",
146
+ "CHANT_WAVE": "net",
147
+ "CHANT_WAVE_NUMBER": "1",
148
+ "CHANT_HOOK": "after-gate",
149
+ "CHANT_RUNS": ".chant/op-waves/tf-apply/wave-1/runs.json",
150
+ "CHANT_HOLD": ".chant/op-waves/tf-apply/wave-1/hold.json",
151
+ "CHANT_GATE_STATUS": "not-required",
152
+ "CHANT_GATE_OP": "tf-apply",
153
+ "CHANT_GATE": "wave-1",
154
+ "CHANT_GATE_DIGEST": "jcs1-sha256:c9fbef43193e7e84d13a2cbde3a7f292071ab953affab1ce3b87ab3862dc6692",
155
+ "CHANT_DECISION": ".chant/op-waves/tf-apply/wave-1.json"
156
+ },
157
+ "read": {
158
+ "CHANT_RUNS": {
159
+ "wave": "net",
160
+ "number": 1,
161
+ "digest": "jcs1-sha256:c9fbef43193e7e84d13a2cbde3a7f292071ab953affab1ce3b87ab3862dc6692",
162
+ "runs": [
163
+ {
164
+ "target": "vpc",
165
+ "op": "tf-apply",
166
+ "planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
167
+ },
168
+ {
169
+ "target": "dns",
170
+ "op": "tf-apply",
171
+ "planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
172
+ },
173
+ {
174
+ "target": "nat",
175
+ "op": "tf-apply",
176
+ "planDigest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
177
+ "empty": true
178
+ }
179
+ ]
180
+ },
181
+ "CHANT_DECISION": {
182
+ "wave": 1,
183
+ "name": "net",
184
+ "op": "tf-apply",
185
+ "gate": "wave-1",
186
+ "policy": "never",
187
+ "approval": "ledger",
188
+ "policySource": "base",
189
+ "base": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
190
+ "digest": "jcs1-sha256:c9fbef43193e7e84d13a2cbde3a7f292071ab953affab1ce3b87ab3862dc6692",
191
+ "members": [
192
+ {
193
+ "member": "vpc",
194
+ "planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
195
+ "op": "tf-apply",
196
+ "denied": {
197
+ "rules": [
198
+ "no-public-s3"
199
+ ]
200
+ },
201
+ "override": {
202
+ "by": "github:carol",
203
+ "at": "2026-10-10T00:00:00Z",
204
+ "digest": "sha256:0d0e9069d1317d35567f7bf5d62cce772cc58f895d827d2bb3bc9cfaaade6507",
205
+ "reason": "the bucket is the docs site"
206
+ }
207
+ },
208
+ {
209
+ "member": "dns",
210
+ "planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
211
+ "op": "tf-apply"
212
+ },
213
+ {
214
+ "member": "nat",
215
+ "planDigest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
216
+ "op": "tf-apply",
217
+ "empty": true
218
+ }
219
+ ],
220
+ "status": "not-required",
221
+ "hooks": {
222
+ "after-gate": [
223
+ {
224
+ "name": "report",
225
+ "command": [
226
+ "hook",
227
+ "report",
228
+ "{runs}"
229
+ ]
230
+ }
231
+ ]
232
+ },
233
+ "digestOver": "changing"
234
+ },
235
+ ".chant/op-waves/tf-apply/wave-1/runs.json": {
236
+ "wave": "net",
237
+ "number": 1,
238
+ "digest": "jcs1-sha256:c9fbef43193e7e84d13a2cbde3a7f292071ab953affab1ce3b87ab3862dc6692",
239
+ "runs": [
240
+ {
241
+ "target": "vpc",
242
+ "op": "tf-apply",
243
+ "planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
244
+ },
245
+ {
246
+ "target": "dns",
247
+ "op": "tf-apply",
248
+ "planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
249
+ },
250
+ {
251
+ "target": "nat",
252
+ "op": "tf-apply",
253
+ "planDigest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
254
+ "empty": true
255
+ }
256
+ ]
257
+ }
258
+ }
259
+ },
260
+ {
261
+ "argv": [
262
+ "tg",
263
+ "apply",
264
+ "net",
265
+ ".chant/op-waves/tf-apply/wave-1/runs.json",
266
+ ".chant/op-waves/tf-apply/wave-1/plans.json"
267
+ ],
268
+ "env": {
269
+ "CHANT_HOOKS": ".chant/op-waves/tf-apply/wave-1/hooks.json",
270
+ "CHANT_APPLY_OUTCOME": ".chant/op-waves/tf-apply/wave-1/hooks-outcome.json"
271
+ },
272
+ "read": {
273
+ "CHANT_HOOKS": {
274
+ "version": 1,
275
+ "opWaves": "tf-apply",
276
+ "op": "tf-apply",
277
+ "wave": "net",
278
+ "number": 1,
279
+ "base": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
280
+ "digest": "jcs1-sha256:c9fbef43193e7e84d13a2cbde3a7f292071ab953affab1ce3b87ab3862dc6692",
281
+ "approved": false,
282
+ "runBy": "chant",
283
+ "runs": [
284
+ {
285
+ "target": "vpc",
286
+ "op": "tf-apply",
287
+ "plan": ".chant/op-waves/tf-apply/wave-1/vpc.plan.json"
288
+ },
289
+ {
290
+ "target": "dns",
291
+ "op": "tf-apply",
292
+ "plan": ".chant/op-waves/tf-apply/wave-1/dns.plan.json"
293
+ },
294
+ {
295
+ "target": "nat",
296
+ "op": "tf-apply",
297
+ "plan": ".chant/op-waves/tf-apply/wave-1/nat.plan.json"
298
+ }
299
+ ],
300
+ "runsFile": ".chant/op-waves/tf-apply/wave-1/runs.json",
301
+ "hooks": {},
302
+ "outcomes": [
303
+ {
304
+ "moment": "after-gate",
305
+ "name": "report",
306
+ "exit": 0,
307
+ "outcome": "passed"
308
+ }
309
+ ]
310
+ },
311
+ ".chant/op-waves/tf-apply/wave-1/runs.json": {
312
+ "wave": "net",
313
+ "number": 1,
314
+ "digest": "jcs1-sha256:c9fbef43193e7e84d13a2cbde3a7f292071ab953affab1ce3b87ab3862dc6692",
315
+ "runs": [
316
+ {
317
+ "target": "vpc",
318
+ "op": "tf-apply",
319
+ "planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
320
+ },
321
+ {
322
+ "target": "dns",
323
+ "op": "tf-apply",
324
+ "planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
325
+ },
326
+ {
327
+ "target": "nat",
328
+ "op": "tf-apply",
329
+ "planDigest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
330
+ "empty": true
331
+ }
332
+ ]
333
+ }
334
+ }
335
+ }
336
+ ],
337
+ "logs": [
338
+ "vpc: the policy denial (no-public-s3) is overridden by github:carol at 2026-10-10T00:00:00Z: the bucket is the docs site",
339
+ "wave 1 (net): gate never (read at bbbbbbbbbbbb), digest jcs1-sha256:c9fbef43193e7e84d13a2cbde3a7f292071ab953affab1ce3b87ab3862dc6692: not-required",
340
+ "wave 1 (net) applies vpc under their overrides, which are now spent"
341
+ ],
342
+ "files": {
343
+ ".chant/op-waves/tf-apply/wave-1/dns.plan.json": {
344
+ "planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
345
+ },
346
+ ".chant/op-waves/tf-apply/wave-1/hooks.json": {
347
+ "version": 1,
348
+ "opWaves": "tf-apply",
349
+ "op": "tf-apply",
350
+ "wave": "net",
351
+ "number": 1,
352
+ "base": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
353
+ "digest": "jcs1-sha256:c9fbef43193e7e84d13a2cbde3a7f292071ab953affab1ce3b87ab3862dc6692",
354
+ "approved": false,
355
+ "runBy": "chant",
356
+ "runs": [
357
+ {
358
+ "target": "vpc",
359
+ "op": "tf-apply",
360
+ "plan": ".chant/op-waves/tf-apply/wave-1/vpc.plan.json"
361
+ },
362
+ {
363
+ "target": "dns",
364
+ "op": "tf-apply",
365
+ "plan": ".chant/op-waves/tf-apply/wave-1/dns.plan.json"
366
+ },
367
+ {
368
+ "target": "nat",
369
+ "op": "tf-apply",
370
+ "plan": ".chant/op-waves/tf-apply/wave-1/nat.plan.json"
371
+ }
372
+ ],
373
+ "runsFile": ".chant/op-waves/tf-apply/wave-1/runs.json",
374
+ "hooks": {},
375
+ "outcomes": [
376
+ {
377
+ "moment": "after-gate",
378
+ "name": "report",
379
+ "exit": 0,
380
+ "outcome": "passed"
381
+ }
382
+ ]
383
+ },
384
+ ".chant/op-waves/tf-apply/wave-1/nat.plan.json": {
385
+ "planDigest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
386
+ "empty": true
387
+ },
388
+ ".chant/op-waves/tf-apply/wave-1/plans.json": {
389
+ "runs": [
390
+ {
391
+ "target": "vpc",
392
+ "planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
393
+ "denied": {
394
+ "rules": [
395
+ "no-public-s3"
396
+ ]
397
+ }
398
+ },
399
+ {
400
+ "target": "dns",
401
+ "planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
402
+ },
403
+ {
404
+ "target": "nat",
405
+ "planDigest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
406
+ "empty": true
407
+ }
408
+ ],
409
+ "overriders": [
410
+ "github:carol"
411
+ ]
412
+ },
413
+ ".chant/op-waves/tf-apply/wave-1/runs.json": {
414
+ "wave": "net",
415
+ "number": 1,
416
+ "digest": "jcs1-sha256:c9fbef43193e7e84d13a2cbde3a7f292071ab953affab1ce3b87ab3862dc6692",
417
+ "runs": [
418
+ {
419
+ "target": "vpc",
420
+ "op": "tf-apply",
421
+ "planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
422
+ },
423
+ {
424
+ "target": "dns",
425
+ "op": "tf-apply",
426
+ "planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
427
+ },
428
+ {
429
+ "target": "nat",
430
+ "op": "tf-apply",
431
+ "planDigest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
432
+ "empty": true
433
+ }
434
+ ]
435
+ },
436
+ ".chant/op-waves/tf-apply/wave-1/vpc.plan.json": {
437
+ "planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
438
+ "denied": {
439
+ "rules": [
440
+ "no-public-s3"
441
+ ]
442
+ }
443
+ },
444
+ ".chant/op-waves/tf-apply/wave-1.json": {
445
+ "wave": 1,
446
+ "name": "net",
447
+ "op": "tf-apply",
448
+ "gate": "wave-1",
449
+ "policy": "never",
450
+ "approval": "ledger",
451
+ "policySource": "base",
452
+ "base": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
453
+ "digest": "jcs1-sha256:c9fbef43193e7e84d13a2cbde3a7f292071ab953affab1ce3b87ab3862dc6692",
454
+ "members": [
455
+ {
456
+ "member": "vpc",
457
+ "planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
458
+ "op": "tf-apply",
459
+ "denied": {
460
+ "rules": [
461
+ "no-public-s3"
462
+ ]
463
+ },
464
+ "override": {
465
+ "by": "github:carol",
466
+ "at": "2026-10-10T00:00:00Z",
467
+ "digest": "sha256:0d0e9069d1317d35567f7bf5d62cce772cc58f895d827d2bb3bc9cfaaade6507",
468
+ "reason": "the bucket is the docs site"
469
+ }
470
+ },
471
+ {
472
+ "member": "dns",
473
+ "planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
474
+ "op": "tf-apply"
475
+ },
476
+ {
477
+ "member": "nat",
478
+ "planDigest": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
479
+ "op": "tf-apply",
480
+ "empty": true
481
+ }
482
+ ],
483
+ "status": "not-required",
484
+ "hooks": {
485
+ "after-gate": [
486
+ {
487
+ "name": "report",
488
+ "command": [
489
+ "hook",
490
+ "report",
491
+ "{runs}"
492
+ ]
493
+ }
494
+ ]
495
+ },
496
+ "digestOver": "changing",
497
+ "outcomes": [
498
+ {
499
+ "moment": "after-gate",
500
+ "name": "report",
501
+ "exit": 0,
502
+ "outcome": "passed"
503
+ }
504
+ ],
505
+ "overridesSpentAt": "2026-10-11T00:00:00.000Z"
506
+ }
507
+ }
508
+ }