@intentius/chant 0.124.27 → 0.124.29

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 (681) hide show
  1. package/README.md +1 -1
  2. package/dist/__golden__/wave-loop/fan-out-gated.json +8 -0
  3. package/dist/__golden__/wave-loop/fan-out-no-members.json +4 -0
  4. package/dist/__golden__/wave-loop/fan-out-only.json +6 -0
  5. package/dist/__golden__/wave-loop/op-by-apply-hold.json +2 -0
  6. package/dist/__golden__/wave-loop/op-cost-member.json +3 -0
  7. package/dist/__golden__/wave-loop/op-held-on-before-apply.json +1 -0
  8. package/dist/__golden__/wave-loop/op-held-on.json +2 -0
  9. package/dist/__golden__/wave-loop/op-hooks-held.json +2 -0
  10. package/dist/__golden__/wave-loop/op-hooks-hold-before-apply.json +2 -0
  11. package/dist/__golden__/wave-loop/op-hooks-refused-at-base.json +3 -0
  12. package/dist/__golden__/wave-loop/op-hooks-share.json +3 -0
  13. package/dist/__golden__/wave-loop/op-per-run.json +7 -0
  14. package/dist/__golden__/wave-loop/op-pr-review.json +7 -0
  15. package/dist/__golden__/wave-loop/op-sealed.json +3 -0
  16. package/dist/__golden__/wave-loop/op-spend.json +3 -0
  17. package/dist/__golden__/wave-loop/op-wave-commands.json +7 -0
  18. package/dist/__golden__/wave-loop/op-wide-waiting.json +4 -0
  19. package/dist/build-params.d.ts +34 -1
  20. package/dist/build-params.d.ts.map +1 -1
  21. package/dist/build-params.js +31 -1
  22. package/dist/change-set-graph.d.ts +63 -0
  23. package/dist/change-set-graph.d.ts.map +1 -0
  24. package/dist/change-set-graph.js +130 -0
  25. package/dist/change-set.d.ts +62 -3
  26. package/dist/change-set.d.ts.map +1 -1
  27. package/dist/change-set.js +36 -4
  28. package/dist/chant-version.d.ts +9 -0
  29. package/dist/chant-version.d.ts.map +1 -0
  30. package/dist/chant-version.js +16 -0
  31. package/dist/cli/build-params-cli.d.ts +7 -1
  32. package/dist/cli/build-params-cli.d.ts.map +1 -1
  33. package/dist/cli/build-params-cli.js +17 -8
  34. package/dist/cli/commands/build.d.ts +8 -0
  35. package/dist/cli/commands/build.d.ts.map +1 -1
  36. package/dist/cli/commands/build.js +15 -11
  37. package/dist/cli/commands/check-lexicon-docs.d.ts.map +1 -1
  38. package/dist/cli/commands/check-lexicon-docs.js +30 -2
  39. package/dist/cli/commands/check-lexicon.d.ts.map +1 -1
  40. package/dist/cli/commands/check-lexicon.js +13 -2
  41. package/dist/cli/commands/init-lexicon/templates/docs.d.ts +4 -1
  42. package/dist/cli/commands/init-lexicon/templates/docs.d.ts.map +1 -1
  43. package/dist/cli/commands/init-lexicon/templates/docs.js +6 -6
  44. package/dist/cli/commands/init-lexicon.d.ts.map +1 -1
  45. package/dist/cli/commands/init-lexicon.js +17 -8
  46. package/dist/cli/handlers/approve.d.ts.map +1 -1
  47. package/dist/cli/handlers/approve.js +64 -4
  48. package/dist/cli/handlers/build.d.ts.map +1 -1
  49. package/dist/cli/handlers/build.js +43 -4
  50. package/dist/cli/handlers/change-set.d.ts +10 -0
  51. package/dist/cli/handlers/change-set.d.ts.map +1 -1
  52. package/dist/cli/handlers/change-set.js +51 -1
  53. package/dist/cli/handlers/fan-out.d.ts +10 -1
  54. package/dist/cli/handlers/fan-out.d.ts.map +1 -1
  55. package/dist/cli/handlers/fan-out.js +54 -6
  56. package/dist/cli/handlers/lifecycle-gc.d.ts +19 -0
  57. package/dist/cli/handlers/lifecycle-gc.d.ts.map +1 -0
  58. package/dist/cli/handlers/lifecycle-gc.js +143 -0
  59. package/dist/cli/handlers/pr.d.ts +16 -2
  60. package/dist/cli/handlers/pr.d.ts.map +1 -1
  61. package/dist/cli/handlers/pr.js +269 -37
  62. package/dist/cli/handlers/promote.d.ts +7 -0
  63. package/dist/cli/handlers/promote.d.ts.map +1 -1
  64. package/dist/cli/handlers/promote.js +440 -28
  65. package/dist/cli/handlers/release.d.ts +91 -0
  66. package/dist/cli/handlers/release.d.ts.map +1 -0
  67. package/dist/cli/handlers/release.js +589 -0
  68. package/dist/cli/handlers/run.d.ts +38 -2
  69. package/dist/cli/handlers/run.d.ts.map +1 -1
  70. package/dist/cli/handlers/run.js +234 -16
  71. package/dist/cli/main.d.ts.map +1 -1
  72. package/dist/cli/main.js +143 -17
  73. package/dist/cli/mcp/workspace-tools.js +1 -1
  74. package/dist/cli/parse-args.d.ts.map +1 -1
  75. package/dist/cli/parse-args.js +73 -5
  76. package/dist/cli/registry.d.ts +43 -5
  77. package/dist/cli/registry.d.ts.map +1 -1
  78. package/dist/cli/run-events.d.ts +30 -0
  79. package/dist/cli/run-events.d.ts.map +1 -0
  80. package/dist/cli/run-events.js +49 -0
  81. package/dist/cli/version.d.ts +3 -5
  82. package/dist/cli/version.d.ts.map +1 -1
  83. package/dist/cli/version.js +3 -13
  84. package/dist/codegen/docs-in-site.d.ts +71 -0
  85. package/dist/codegen/docs-in-site.d.ts.map +1 -0
  86. package/dist/codegen/docs-in-site.js +177 -0
  87. package/dist/codegen/docs-types.d.ts +14 -1
  88. package/dist/codegen/docs-types.d.ts.map +1 -1
  89. package/dist/codegen/docs.d.ts +18 -1
  90. package/dist/codegen/docs.d.ts.map +1 -1
  91. package/dist/codegen/docs.js +40 -7
  92. package/dist/codegen/rehype-base-url.mjs +15 -9
  93. package/dist/components/auto-release.d.ts +6 -1
  94. package/dist/components/auto-release.d.ts.map +1 -1
  95. package/dist/components/auto-release.js +3 -0
  96. package/dist/components/capability.d.ts +9 -0
  97. package/dist/components/capability.d.ts.map +1 -1
  98. package/dist/components/cli-support.d.ts +6 -0
  99. package/dist/components/cli-support.d.ts.map +1 -1
  100. package/dist/components/cli-support.js +10 -9
  101. package/dist/components/driver.d.ts +50 -9
  102. package/dist/components/driver.d.ts.map +1 -1
  103. package/dist/components/driver.js +116 -54
  104. package/dist/components/fan-out-inputs.d.ts +69 -0
  105. package/dist/components/fan-out-inputs.d.ts.map +1 -0
  106. package/dist/components/fan-out-inputs.js +169 -0
  107. package/dist/components/fan-out-record.d.ts +13 -0
  108. package/dist/components/fan-out-record.d.ts.map +1 -1
  109. package/dist/components/fan-out-record.js +16 -0
  110. package/dist/components/fan-out-run.d.ts +7 -0
  111. package/dist/components/fan-out-run.d.ts.map +1 -1
  112. package/dist/components/fan-out-run.js +85 -26
  113. package/dist/components/fan-out.d.ts +4 -0
  114. package/dist/components/fan-out.d.ts.map +1 -1
  115. package/dist/components/pr-pipeline.d.ts +25 -0
  116. package/dist/components/pr-pipeline.d.ts.map +1 -1
  117. package/dist/components/pr-pipeline.js +22 -4
  118. package/dist/components/pr-run.d.ts +11 -0
  119. package/dist/components/pr-run.d.ts.map +1 -1
  120. package/dist/components/pr-run.js +20 -1
  121. package/dist/components/promote-order.d.ts +38 -0
  122. package/dist/components/promote-order.d.ts.map +1 -0
  123. package/dist/components/promote-order.js +62 -0
  124. package/dist/components/promote.d.ts +38 -2
  125. package/dist/components/promote.d.ts.map +1 -1
  126. package/dist/components/promote.js +77 -2
  127. package/dist/components/release-compile.d.ts +142 -0
  128. package/dist/components/release-compile.d.ts.map +1 -0
  129. package/dist/components/release-compile.js +382 -0
  130. package/dist/components/release-gate.d.ts +135 -0
  131. package/dist/components/release-gate.d.ts.map +1 -0
  132. package/dist/components/release-gate.js +288 -0
  133. package/dist/components/release-promote.d.ts +96 -0
  134. package/dist/components/release-promote.d.ts.map +1 -0
  135. package/dist/components/release-promote.js +204 -0
  136. package/dist/components/run-progress.d.ts +7 -0
  137. package/dist/components/run-progress.d.ts.map +1 -1
  138. package/dist/components/wave-plan.d.ts +8 -1
  139. package/dist/components/wave-plan.d.ts.map +1 -1
  140. package/dist/components/wave-plan.js +11 -3
  141. package/dist/config.d.ts +45 -0
  142. package/dist/config.d.ts.map +1 -1
  143. package/dist/config.js +3 -0
  144. package/dist/flag-params.d.ts +54 -0
  145. package/dist/flag-params.d.ts.map +1 -0
  146. package/dist/flag-params.js +130 -0
  147. package/dist/index.d.ts +1 -0
  148. package/dist/index.d.ts.map +1 -1
  149. package/dist/index.js +2 -0
  150. package/dist/lifecycle/__fixtures__/publish-fakes.d.ts +120 -0
  151. package/dist/lifecycle/__fixtures__/publish-fakes.d.ts.map +1 -0
  152. package/dist/lifecycle/__fixtures__/publish-fakes.js +304 -0
  153. package/dist/lifecycle/change-set-store.d.ts +68 -0
  154. package/dist/lifecycle/change-set-store.d.ts.map +1 -0
  155. package/dist/lifecycle/change-set-store.js +97 -0
  156. package/dist/lifecycle/commit-sha.d.ts +13 -0
  157. package/dist/lifecycle/commit-sha.d.ts.map +1 -0
  158. package/dist/lifecycle/commit-sha.js +21 -0
  159. package/dist/lifecycle/delivery-metrics.d.ts +139 -0
  160. package/dist/lifecycle/delivery-metrics.d.ts.map +1 -0
  161. package/dist/lifecycle/delivery-metrics.js +145 -0
  162. package/dist/lifecycle/deploy-outcome.d.ts +81 -0
  163. package/dist/lifecycle/deploy-outcome.d.ts.map +1 -0
  164. package/dist/lifecycle/deploy-outcome.js +101 -0
  165. package/dist/lifecycle/gate-change-set.d.ts +78 -0
  166. package/dist/lifecycle/gate-change-set.d.ts.map +1 -0
  167. package/dist/lifecycle/gate-change-set.js +138 -0
  168. package/dist/lifecycle/gate-ledger.d.ts +51 -4
  169. package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
  170. package/dist/lifecycle/gate-ledger.js +18 -0
  171. package/dist/lifecycle/git.d.ts +30 -1
  172. package/dist/lifecycle/git.d.ts.map +1 -1
  173. package/dist/lifecycle/git.js +31 -5
  174. package/dist/lifecycle/index.d.ts +4 -0
  175. package/dist/lifecycle/index.d.ts.map +1 -1
  176. package/dist/lifecycle/index.js +4 -0
  177. package/dist/lifecycle/mixed-environment.d.ts +95 -0
  178. package/dist/lifecycle/mixed-environment.d.ts.map +1 -0
  179. package/dist/lifecycle/mixed-environment.js +154 -0
  180. package/dist/lifecycle/publish-attachments.d.ts +79 -0
  181. package/dist/lifecycle/publish-attachments.d.ts.map +1 -0
  182. package/dist/lifecycle/publish-attachments.js +179 -0
  183. package/dist/lifecycle/publish-credentials.d.ts +37 -0
  184. package/dist/lifecycle/publish-credentials.d.ts.map +1 -0
  185. package/dist/lifecycle/publish-credentials.js +69 -0
  186. package/dist/lifecycle/publish-declaration.d.ts +97 -0
  187. package/dist/lifecycle/publish-declaration.d.ts.map +1 -0
  188. package/dist/lifecycle/publish-declaration.js +83 -0
  189. package/dist/lifecycle/publish-forge.d.ts +53 -0
  190. package/dist/lifecycle/publish-forge.d.ts.map +1 -0
  191. package/dist/lifecycle/publish-forge.js +298 -0
  192. package/dist/lifecycle/publish-npm.d.ts +61 -0
  193. package/dist/lifecycle/publish-npm.d.ts.map +1 -0
  194. package/dist/lifecycle/publish-npm.js +242 -0
  195. package/dist/lifecycle/publish-oci.d.ts +64 -0
  196. package/dist/lifecycle/publish-oci.d.ts.map +1 -0
  197. package/dist/lifecycle/publish-oci.js +383 -0
  198. package/dist/lifecycle/publish-record.d.ts +66 -0
  199. package/dist/lifecycle/publish-record.d.ts.map +1 -0
  200. package/dist/lifecycle/publish-record.js +84 -0
  201. package/dist/lifecycle/publish-targets.d.ts +45 -0
  202. package/dist/lifecycle/publish-targets.d.ts.map +1 -0
  203. package/dist/lifecycle/publish-targets.js +85 -0
  204. package/dist/lifecycle/release-cut.d.ts +154 -0
  205. package/dist/lifecycle/release-cut.d.ts.map +1 -0
  206. package/dist/lifecycle/release-cut.js +366 -0
  207. package/dist/lifecycle/release-join.d.ts +95 -0
  208. package/dist/lifecycle/release-join.d.ts.map +1 -0
  209. package/dist/lifecycle/release-join.js +139 -0
  210. package/dist/lifecycle/release-ledger.d.ts +54 -0
  211. package/dist/lifecycle/release-ledger.d.ts.map +1 -1
  212. package/dist/lifecycle/release-ledger.js +53 -20
  213. package/dist/lifecycle/release-publish.d.ts +312 -0
  214. package/dist/lifecycle/release-publish.d.ts.map +1 -0
  215. package/dist/lifecycle/release-publish.js +335 -0
  216. package/dist/lifecycle/release-revocation.d.ts +80 -0
  217. package/dist/lifecycle/release-revocation.d.ts.map +1 -0
  218. package/dist/lifecycle/release-revocation.js +123 -0
  219. package/dist/lifecycle/release-store.d.ts +200 -0
  220. package/dist/lifecycle/release-store.d.ts.map +1 -0
  221. package/dist/lifecycle/release-store.js +320 -0
  222. package/dist/lifecycle/release-verify.d.ts +61 -0
  223. package/dist/lifecycle/release-verify.d.ts.map +1 -0
  224. package/dist/lifecycle/release-verify.js +92 -0
  225. package/dist/lifecycle/release-workstation.d.ts +91 -0
  226. package/dist/lifecycle/release-workstation.d.ts.map +1 -0
  227. package/dist/lifecycle/release-workstation.js +180 -0
  228. package/dist/lifecycle/retention-policy.d.ts +45 -0
  229. package/dist/lifecycle/retention-policy.d.ts.map +1 -0
  230. package/dist/lifecycle/retention-policy.js +43 -0
  231. package/dist/lifecycle/retention.d.ts +185 -0
  232. package/dist/lifecycle/retention.d.ts.map +1 -0
  233. package/dist/lifecycle/retention.js +400 -0
  234. package/dist/lifecycle/run-ledger.d.ts +4 -0
  235. package/dist/lifecycle/run-ledger.d.ts.map +1 -1
  236. package/dist/lifecycle/run-ledger.js +2 -0
  237. package/dist/op/activities/change-coverage.d.ts.map +1 -1
  238. package/dist/op/activities/change-coverage.js +4 -2
  239. package/dist/op/activities/source-release.d.ts.map +1 -1
  240. package/dist/op/activities/source-release.js +7 -3
  241. package/dist/op/activities/source-rollback.d.ts.map +1 -1
  242. package/dist/op/activities/source-rollback.js +7 -3
  243. package/dist/op/gate-name.d.ts +11 -2
  244. package/dist/op/gate-name.d.ts.map +1 -1
  245. package/dist/op/gate-name.js +12 -3
  246. package/dist/op/gate-run-locator.d.ts +22 -0
  247. package/dist/op/gate-run-locator.d.ts.map +1 -1
  248. package/dist/op/gate-run-locator.js +31 -0
  249. package/dist/op/gate.d.ts +27 -3
  250. package/dist/op/gate.d.ts.map +1 -1
  251. package/dist/op/gate.js +57 -3
  252. package/dist/op/local-executor.d.ts +36 -1
  253. package/dist/op/local-executor.d.ts.map +1 -1
  254. package/dist/op/local-executor.js +158 -52
  255. package/dist/op/op-waves-run.d.ts.map +1 -1
  256. package/dist/op/op-waves-run.js +4 -0
  257. package/dist/op/run-live.d.ts +2 -0
  258. package/dist/op/run-live.d.ts.map +1 -1
  259. package/dist/op/run-live.js +1 -1
  260. package/dist/op/runtime.d.ts +46 -0
  261. package/dist/op/runtime.d.ts.map +1 -1
  262. package/dist/op/runtimes/local.d.ts.map +1 -1
  263. package/dist/op/runtimes/local.js +8 -0
  264. package/dist/plan-summary.d.ts.map +1 -1
  265. package/dist/plan-summary.js +8 -2
  266. package/dist/point-decision.d.ts +2 -0
  267. package/dist/point-decision.d.ts.map +1 -1
  268. package/dist/point-decision.js +9 -2
  269. package/dist/pr-loop.d.ts +7 -0
  270. package/dist/pr-loop.d.ts.map +1 -1
  271. package/dist/pr-loop.js +23 -4
  272. package/dist/pr-report-url.d.ts +82 -0
  273. package/dist/pr-report-url.d.ts.map +1 -0
  274. package/dist/pr-report-url.js +174 -0
  275. package/dist/provenance.d.ts +2 -2
  276. package/dist/provenance.d.ts.map +1 -1
  277. package/dist/run-event-store.d.ts +104 -0
  278. package/dist/run-event-store.d.ts.map +1 -0
  279. package/dist/run-event-store.js +251 -0
  280. package/dist/run-event-stream.d.ts +133 -0
  281. package/dist/run-event-stream.d.ts.map +1 -0
  282. package/dist/run-event-stream.js +242 -0
  283. package/dist/run-event.d.ts +285 -0
  284. package/dist/run-event.d.ts.map +1 -0
  285. package/dist/run-event.js +209 -0
  286. package/dist/wave-runtime.mjs +262 -226
  287. package/dist/workspace/__fixtures__/flag-workspace.d.ts +31 -0
  288. package/dist/workspace/__fixtures__/flag-workspace.d.ts.map +1 -0
  289. package/dist/workspace/__fixtures__/flag-workspace.js +114 -0
  290. package/dist/workspace/__fixtures__/run-event-check.d.ts +19 -0
  291. package/dist/workspace/__fixtures__/run-event-check.d.ts.map +1 -0
  292. package/dist/workspace/__fixtures__/run-event-check.js +59 -0
  293. package/dist/workspace/change-set-show.d.ts +56 -0
  294. package/dist/workspace/change-set-show.d.ts.map +1 -0
  295. package/dist/workspace/change-set-show.js +54 -0
  296. package/dist/workspace/change-set-show.schema.json +102 -0
  297. package/dist/workspace/change-set.schema.json +32 -1
  298. package/dist/workspace/changes-cli.d.ts.map +1 -1
  299. package/dist/workspace/changes-cli.js +10 -1
  300. package/dist/workspace/changes.d.ts +37 -0
  301. package/dist/workspace/changes.d.ts.map +1 -1
  302. package/dist/workspace/changes.js +49 -2
  303. package/dist/workspace/changes.schema.json +135 -0
  304. package/dist/workspace/check.schema.json +4 -2
  305. package/dist/workspace/checks/records.d.ts +9 -1
  306. package/dist/workspace/checks/records.d.ts.map +1 -1
  307. package/dist/workspace/checks/records.js +35 -1
  308. package/dist/workspace/checks.d.ts +1 -0
  309. package/dist/workspace/checks.d.ts.map +1 -1
  310. package/dist/workspace/checks.js +2 -1
  311. package/dist/workspace/ci-green-cli.d.ts +19 -4
  312. package/dist/workspace/ci-green-cli.d.ts.map +1 -1
  313. package/dist/workspace/ci-green-cli.js +75 -12
  314. package/dist/workspace/ci-green-forge.d.ts +20 -3
  315. package/dist/workspace/ci-green-forge.d.ts.map +1 -1
  316. package/dist/workspace/ci-green-forge.js +6 -4
  317. package/dist/workspace/ci-green-workflow.d.ts +11 -0
  318. package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
  319. package/dist/workspace/ci-green-workflow.js +6 -0
  320. package/dist/workspace/ci-green.d.ts +281 -13
  321. package/dist/workspace/ci-green.d.ts.map +1 -1
  322. package/dist/workspace/ci-green.js +456 -38
  323. package/dist/workspace/ci-last-green.schema.json +32 -2
  324. package/dist/workspace/ci-list.schema.json +525 -0
  325. package/dist/workspace/commit-links.d.ts +85 -0
  326. package/dist/workspace/commit-links.d.ts.map +1 -0
  327. package/dist/workspace/commit-links.js +163 -0
  328. package/dist/workspace/declaration.d.ts +35 -0
  329. package/dist/workspace/declaration.d.ts.map +1 -1
  330. package/dist/workspace/declaration.js +27 -1
  331. package/dist/workspace/declaration.schema.json +76 -0
  332. package/dist/workspace/declared-kinds.d.ts +16 -0
  333. package/dist/workspace/declared-kinds.d.ts.map +1 -1
  334. package/dist/workspace/declared-kinds.js +25 -0
  335. package/dist/workspace/delivery-metrics.d.ts +91 -0
  336. package/dist/workspace/delivery-metrics.d.ts.map +1 -0
  337. package/dist/workspace/delivery-metrics.js +217 -0
  338. package/dist/workspace/delivery-metrics.schema.json +519 -0
  339. package/dist/workspace/flags-read.d.ts +37 -0
  340. package/dist/workspace/flags-read.d.ts.map +1 -0
  341. package/dist/workspace/flags-read.js +103 -0
  342. package/dist/workspace/flags.d.ts +100 -0
  343. package/dist/workspace/flags.d.ts.map +1 -0
  344. package/dist/workspace/flags.js +98 -0
  345. package/dist/workspace/graph-cli.js +1 -1
  346. package/dist/workspace/identity-gate-rule.d.ts +37 -0
  347. package/dist/workspace/identity-gate-rule.d.ts.map +1 -1
  348. package/dist/workspace/identity-gate-rule.js +72 -7
  349. package/dist/workspace/identity.d.ts +12 -0
  350. package/dist/workspace/identity.d.ts.map +1 -1
  351. package/dist/workspace/identity.js +13 -1
  352. package/dist/workspace/intent-cli.d.ts +11 -2
  353. package/dist/workspace/intent-cli.d.ts.map +1 -1
  354. package/dist/workspace/intent-cli.js +54 -5
  355. package/dist/workspace/intent-trace.d.ts +219 -0
  356. package/dist/workspace/intent-trace.d.ts.map +1 -0
  357. package/dist/workspace/intent-trace.js +314 -0
  358. package/dist/workspace/intent.d.ts +36 -7
  359. package/dist/workspace/intent.d.ts.map +1 -1
  360. package/dist/workspace/intent.js +192 -22
  361. package/dist/workspace/intent.schema.json +702 -6
  362. package/dist/workspace/ls.d.ts +4 -0
  363. package/dist/workspace/ls.d.ts.map +1 -1
  364. package/dist/workspace/ls.js +2 -0
  365. package/dist/workspace/ls.schema.json +3 -1
  366. package/dist/workspace/member-pipeline.d.ts +6 -0
  367. package/dist/workspace/member-pipeline.d.ts.map +1 -1
  368. package/dist/workspace/member-pipeline.js +6 -0
  369. package/dist/workspace/overlap.d.ts +146 -0
  370. package/dist/workspace/overlap.d.ts.map +1 -0
  371. package/dist/workspace/overlap.js +276 -0
  372. package/dist/workspace/promotion-order.d.ts +41 -0
  373. package/dist/workspace/promotion-order.d.ts.map +1 -0
  374. package/dist/workspace/promotion-order.js +95 -0
  375. package/dist/workspace/reason-codes.d.ts +4 -0
  376. package/dist/workspace/reason-codes.d.ts.map +1 -1
  377. package/dist/workspace/reason-codes.js +7 -1
  378. package/dist/workspace/records.d.ts +15 -2
  379. package/dist/workspace/records.d.ts.map +1 -1
  380. package/dist/workspace/records.js +32 -0
  381. package/dist/workspace/records.schema.json +21 -2
  382. package/dist/workspace/reference-kinds/flag/flag.kind.mjs +32 -0
  383. package/dist/workspace/reference-kinds/flag/flag.schema.json +53 -0
  384. package/dist/workspace/releases.d.ts +81 -0
  385. package/dist/workspace/releases.d.ts.map +1 -0
  386. package/dist/workspace/releases.js +103 -0
  387. package/dist/workspace/releases.schema.json +513 -0
  388. package/dist/workspace/run-event.schema.json +295 -0
  389. package/dist/workspace/status-gates.d.ts +34 -1
  390. package/dist/workspace/status-gates.d.ts.map +1 -1
  391. package/dist/workspace/status-gates.js +31 -2
  392. package/dist/workspace/status-stewards.d.ts +4 -0
  393. package/dist/workspace/status-stewards.d.ts.map +1 -1
  394. package/dist/workspace/status-stewards.js +2 -0
  395. package/dist/workspace/status.d.ts +117 -0
  396. package/dist/workspace/status.d.ts.map +1 -1
  397. package/dist/workspace/status.js +218 -4
  398. package/dist/workspace/status.schema.json +268 -2
  399. package/dist/workspace/trust/ci-tag-statement.d.ts +102 -0
  400. package/dist/workspace/trust/ci-tag-statement.d.ts.map +1 -0
  401. package/dist/workspace/trust/ci-tag-statement.js +123 -0
  402. package/dist/workspace/trust/op-run-statement.d.ts +91 -0
  403. package/dist/workspace/trust/op-run-statement.d.ts.map +1 -0
  404. package/dist/workspace/trust/op-run-statement.js +143 -0
  405. package/dist/workspace/trust/rotation.d.ts +18 -2
  406. package/dist/workspace/trust/rotation.d.ts.map +1 -1
  407. package/dist/workspace/trust/rotation.js +65 -16
  408. package/dist/workspace/trust/seal.d.ts +11 -0
  409. package/dist/workspace/trust/seal.d.ts.map +1 -1
  410. package/dist/workspace/trust/seal.js +9 -0
  411. package/dist/workspace/trust/ssh-commit.d.ts.map +1 -1
  412. package/dist/workspace/trust/ssh-commit.js +10 -10
  413. package/dist/workspace/wip.d.ts.map +1 -1
  414. package/dist/workspace/wip.js +11 -3
  415. package/package.json +1 -1
  416. package/src/__golden__/wave-loop/fan-out-gated.json +8 -0
  417. package/src/__golden__/wave-loop/fan-out-no-members.json +4 -0
  418. package/src/__golden__/wave-loop/fan-out-only.json +6 -0
  419. package/src/__golden__/wave-loop/op-by-apply-hold.json +2 -0
  420. package/src/__golden__/wave-loop/op-cost-member.json +3 -0
  421. package/src/__golden__/wave-loop/op-held-on-before-apply.json +1 -0
  422. package/src/__golden__/wave-loop/op-held-on.json +2 -0
  423. package/src/__golden__/wave-loop/op-hooks-held.json +2 -0
  424. package/src/__golden__/wave-loop/op-hooks-hold-before-apply.json +2 -0
  425. package/src/__golden__/wave-loop/op-hooks-refused-at-base.json +3 -0
  426. package/src/__golden__/wave-loop/op-hooks-share.json +3 -0
  427. package/src/__golden__/wave-loop/op-per-run.json +7 -0
  428. package/src/__golden__/wave-loop/op-pr-review.json +7 -0
  429. package/src/__golden__/wave-loop/op-sealed.json +3 -0
  430. package/src/__golden__/wave-loop/op-spend.json +3 -0
  431. package/src/__golden__/wave-loop/op-wave-commands.json +7 -0
  432. package/src/__golden__/wave-loop/op-wide-waiting.json +4 -0
  433. package/src/build-params.test.ts +46 -0
  434. package/src/build-params.ts +55 -1
  435. package/src/change-set-graph.test.ts +72 -0
  436. package/src/change-set-graph.ts +141 -0
  437. package/src/change-set.ts +87 -6
  438. package/src/chant-version.ts +16 -0
  439. package/src/cli/build-params-cli.ts +22 -9
  440. package/src/cli/commands/build.ts +25 -11
  441. package/src/cli/commands/check-lexicon-docs.test.ts +51 -0
  442. package/src/cli/commands/check-lexicon-docs.ts +39 -2
  443. package/src/cli/commands/check-lexicon.ts +14 -2
  444. package/src/cli/commands/init-lexicon/templates/docs.ts +7 -6
  445. package/src/cli/commands/init-lexicon.test.ts +25 -0
  446. package/src/cli/commands/init-lexicon.ts +18 -8
  447. package/src/cli/handlers/approve-release.test.ts +84 -0
  448. package/src/cli/handlers/approve-revoked.test.ts +155 -0
  449. package/src/cli/handlers/approve.ts +65 -2
  450. package/src/cli/handlers/build.test.ts +67 -0
  451. package/src/cli/handlers/build.ts +46 -4
  452. package/src/cli/handlers/change-set.ts +49 -1
  453. package/src/cli/handlers/fan-out.test.ts +228 -1
  454. package/src/cli/handlers/fan-out.ts +53 -6
  455. package/src/cli/handlers/intent-trace.e2e.test.ts +201 -0
  456. package/src/cli/handlers/lifecycle-gc.test.ts +126 -0
  457. package/src/cli/handlers/lifecycle-gc.ts +146 -0
  458. package/src/cli/handlers/operator.test.ts +37 -0
  459. package/src/cli/handlers/pr.test.ts +341 -0
  460. package/src/cli/handlers/pr.ts +292 -47
  461. package/src/cli/handlers/promote.test.ts +669 -7
  462. package/src/cli/handlers/promote.ts +464 -29
  463. package/src/cli/handlers/release-implicit.e2e.test.ts +161 -0
  464. package/src/cli/handlers/release-join.e2e.test.ts +185 -0
  465. package/src/cli/handlers/release-publish-targets.e2e.test.ts +295 -0
  466. package/src/cli/handlers/release-verify.e2e.test.ts +117 -0
  467. package/src/cli/handlers/release-workstation-ci.e2e.test.ts +135 -0
  468. package/src/cli/handlers/release.e2e.test.ts +199 -0
  469. package/src/cli/handlers/release.ts +593 -0
  470. package/src/cli/handlers/run-auto-release.test.ts +80 -0
  471. package/src/cli/handlers/run-events-cmd.test.ts +92 -0
  472. package/src/cli/handlers/run-release.test.ts +55 -0
  473. package/src/cli/handlers/run.test.ts +30 -0
  474. package/src/cli/handlers/run.ts +243 -18
  475. package/src/cli/main.test.ts +8 -0
  476. package/src/cli/main.ts +143 -17
  477. package/src/cli/mcp/never-over-mcp.test.ts +2 -0
  478. package/src/cli/mcp/workspace-tools.ts +1 -1
  479. package/src/cli/parse-args.ts +56 -5
  480. package/src/cli/registry.ts +43 -5
  481. package/src/cli/run-events.ts +57 -0
  482. package/src/cli/version.ts +3 -13
  483. package/src/codegen/docs-in-site.test.ts +166 -0
  484. package/src/codegen/docs-in-site.ts +182 -0
  485. package/src/codegen/docs-site/AgentPrompt.astro +26 -1
  486. package/src/codegen/docs-types.ts +14 -1
  487. package/src/codegen/docs.ts +60 -7
  488. package/src/codegen/rehype-base-url.d.mts +3 -1
  489. package/src/codegen/rehype-base-url.mjs +15 -9
  490. package/src/codegen/rehype-base-url.test.ts +34 -0
  491. package/src/components/auto-release.test.ts +30 -0
  492. package/src/components/auto-release.ts +9 -1
  493. package/src/components/capability.ts +9 -0
  494. package/src/components/cli-support.test.ts +82 -0
  495. package/src/components/cli-support.ts +16 -9
  496. package/src/components/driver.test.ts +24 -0
  497. package/src/components/driver.ts +165 -56
  498. package/src/components/fan-out-inputs.test.ts +85 -0
  499. package/src/components/fan-out-inputs.ts +192 -0
  500. package/src/components/fan-out-record.test.ts +10 -0
  501. package/src/components/fan-out-record.ts +19 -0
  502. package/src/components/fan-out-run.ts +104 -35
  503. package/src/components/fan-out.ts +4 -0
  504. package/src/components/pr-pipeline.ts +35 -4
  505. package/src/components/pr-run.ts +30 -1
  506. package/src/components/promote-order.test.ts +90 -0
  507. package/src/components/promote-order.ts +75 -0
  508. package/src/components/promote.test.ts +10 -1
  509. package/src/components/promote.ts +94 -3
  510. package/src/components/release-compile.test.ts +147 -0
  511. package/src/components/release-compile.ts +459 -0
  512. package/src/components/release-gate.test.ts +215 -0
  513. package/src/components/release-gate.ts +355 -0
  514. package/src/components/release-promote.test.ts +159 -0
  515. package/src/components/release-promote.ts +232 -0
  516. package/src/components/run-progress.ts +7 -0
  517. package/src/components/wave-plan.ts +16 -3
  518. package/src/config.ts +15 -1
  519. package/src/flag-params.test.ts +144 -0
  520. package/src/flag-params.ts +134 -0
  521. package/src/index.ts +2 -0
  522. package/src/lifecycle/__fixtures__/publish-fakes.ts +351 -0
  523. package/src/lifecycle/change-set-store.test.ts +217 -0
  524. package/src/lifecycle/change-set-store.ts +113 -0
  525. package/src/lifecycle/commit-sha.ts +23 -0
  526. package/src/lifecycle/delivery-metrics.ts +263 -0
  527. package/src/lifecycle/deploy-outcome.ts +147 -0
  528. package/src/lifecycle/gate-change-set.e2e.test.ts +122 -0
  529. package/src/lifecycle/gate-change-set.ts +164 -0
  530. package/src/lifecycle/gate-ledger.test.ts +33 -0
  531. package/src/lifecycle/gate-ledger.ts +68 -3
  532. package/src/lifecycle/git.ts +61 -8
  533. package/src/lifecycle/index.ts +4 -0
  534. package/src/lifecycle/mixed-environment.test.ts +97 -0
  535. package/src/lifecycle/mixed-environment.ts +204 -0
  536. package/src/lifecycle/publish-attachments.ts +196 -0
  537. package/src/lifecycle/publish-credentials.ts +84 -0
  538. package/src/lifecycle/publish-declaration.ts +95 -0
  539. package/src/lifecycle/publish-forge.ts +325 -0
  540. package/src/lifecycle/publish-npm.ts +259 -0
  541. package/src/lifecycle/publish-oci.ts +396 -0
  542. package/src/lifecycle/publish-record.ts +113 -0
  543. package/src/lifecycle/publish-resume.test.ts +168 -0
  544. package/src/lifecycle/publish-targets.test.ts +494 -0
  545. package/src/lifecycle/publish-targets.ts +100 -0
  546. package/src/lifecycle/release-cut-signed.test.ts +180 -0
  547. package/src/lifecycle/release-cut.test.ts +483 -0
  548. package/src/lifecycle/release-cut.ts +503 -0
  549. package/src/lifecycle/release-flag.test.ts +112 -0
  550. package/src/lifecycle/release-join.test.ts +68 -0
  551. package/src/lifecycle/release-join.ts +182 -0
  552. package/src/lifecycle/release-ledger.test.ts +14 -0
  553. package/src/lifecycle/release-ledger.ts +85 -17
  554. package/src/lifecycle/release-publish.test.ts +225 -0
  555. package/src/lifecycle/release-publish.ts +568 -0
  556. package/src/lifecycle/release-revocation.ts +147 -0
  557. package/src/lifecycle/release-store.ts +434 -0
  558. package/src/lifecycle/release-verify.test.ts +110 -0
  559. package/src/lifecycle/release-verify.ts +120 -0
  560. package/src/lifecycle/release-workstation.test.ts +204 -0
  561. package/src/lifecycle/release-workstation.ts +216 -0
  562. package/src/lifecycle/retention-growth.e2e.test.ts +279 -0
  563. package/src/lifecycle/retention-policy.ts +63 -0
  564. package/src/lifecycle/retention.test.ts +363 -0
  565. package/src/lifecycle/retention.ts +508 -0
  566. package/src/lifecycle/run-ledger.test.ts +10 -0
  567. package/src/lifecycle/run-ledger.ts +6 -0
  568. package/src/op/activities/change-coverage.ts +4 -1
  569. package/src/op/activities/source-release.ts +8 -3
  570. package/src/op/activities/source-rollback.ts +8 -4
  571. package/src/op/commit-run-gate-deploy-join.test.ts +117 -0
  572. package/src/op/gate-name.ts +13 -3
  573. package/src/op/gate-release.test.ts +126 -0
  574. package/src/op/gate-run-locator.test.ts +110 -0
  575. package/src/op/gate-run-locator.ts +35 -0
  576. package/src/op/gate.ts +88 -6
  577. package/src/op/local-executor.ts +207 -52
  578. package/src/op/op-waves-run.ts +4 -0
  579. package/src/op/run-events.test.ts +166 -0
  580. package/src/op/run-live.ts +1 -1
  581. package/src/op/runtime.ts +39 -0
  582. package/src/op/runtimes/local.test.ts +16 -0
  583. package/src/op/runtimes/local.ts +9 -0
  584. package/src/plan-summary.test.ts +20 -0
  585. package/src/plan-summary.ts +8 -1
  586. package/src/point-decision.ts +12 -2
  587. package/src/pr-loop.ts +25 -4
  588. package/src/pr-report-url.test.ts +131 -0
  589. package/src/pr-report-url.ts +209 -0
  590. package/src/provenance.ts +2 -2
  591. package/src/run-event-store.test.ts +144 -0
  592. package/src/run-event-store.ts +273 -0
  593. package/src/run-event-stream.test.ts +175 -0
  594. package/src/run-event-stream.ts +309 -0
  595. package/src/run-event.test.ts +277 -0
  596. package/src/run-event.ts +471 -0
  597. package/src/wave-loop-golden.test.ts +9 -0
  598. package/src/workspace/__fixtures__/flag-workspace.ts +132 -0
  599. package/src/workspace/__fixtures__/older-records/change-set-984534ea9.json +100 -0
  600. package/src/workspace/__fixtures__/older-records/older-records.json +326 -0
  601. package/src/workspace/__fixtures__/run-event-check.ts +58 -0
  602. package/src/workspace/ancestry-index.test.ts +93 -0
  603. package/src/workspace/change-set-show.schema.json +102 -0
  604. package/src/workspace/change-set-show.ts +72 -0
  605. package/src/workspace/change-set.schema.json +32 -1
  606. package/src/workspace/changes-cli.ts +10 -1
  607. package/src/workspace/changes.schema.json +135 -0
  608. package/src/workspace/changes.test.ts +1 -1
  609. package/src/workspace/changes.ts +84 -2
  610. package/src/workspace/check.schema.json +4 -2
  611. package/src/workspace/checks/records.ts +35 -1
  612. package/src/workspace/checks.ts +2 -1
  613. package/src/workspace/ci-green-cli.ts +75 -13
  614. package/src/workspace/ci-green-forge.ts +24 -4
  615. package/src/workspace/ci-green-runs.test.ts +242 -0
  616. package/src/workspace/ci-green-signed.test.ts +302 -0
  617. package/src/workspace/ci-green-workflow.test.ts +16 -0
  618. package/src/workspace/ci-green-workflow.ts +12 -0
  619. package/src/workspace/ci-green.test.ts +131 -2
  620. package/src/workspace/ci-green.ts +635 -42
  621. package/src/workspace/ci-last-green.schema.json +32 -2
  622. package/src/workspace/ci-list.schema.json +525 -0
  623. package/src/workspace/commit-links.test.ts +279 -0
  624. package/src/workspace/commit-links.ts +183 -0
  625. package/src/workspace/declaration.schema.json +76 -0
  626. package/src/workspace/declaration.test.ts +28 -0
  627. package/src/workspace/declaration.ts +60 -2
  628. package/src/workspace/declared-kinds.ts +40 -1
  629. package/src/workspace/delivery-metrics.schema.json +519 -0
  630. package/src/workspace/delivery-metrics.test.ts +236 -0
  631. package/src/workspace/delivery-metrics.ts +286 -0
  632. package/src/workspace/flags-read.ts +121 -0
  633. package/src/workspace/flags.test.ts +141 -0
  634. package/src/workspace/flags.ts +157 -0
  635. package/src/workspace/graph-cli.ts +1 -1
  636. package/src/workspace/identity-gate-rule.ts +91 -7
  637. package/src/workspace/identity.ts +14 -1
  638. package/src/workspace/intent-cli.ts +46 -5
  639. package/src/workspace/intent-trace.test.ts +173 -0
  640. package/src/workspace/intent-trace.ts +484 -0
  641. package/src/workspace/intent.schema.json +702 -6
  642. package/src/workspace/intent.ts +196 -26
  643. package/src/workspace/ls.schema.json +3 -1
  644. package/src/workspace/ls.ts +6 -0
  645. package/src/workspace/member-pipeline.test.ts +17 -0
  646. package/src/workspace/member-pipeline.ts +9 -0
  647. package/src/workspace/older-records.test.ts +412 -0
  648. package/src/workspace/overlap.test.ts +165 -0
  649. package/src/workspace/overlap.ts +340 -0
  650. package/src/workspace/promotion-order.ts +97 -0
  651. package/src/workspace/read-contract.e2e.test.ts +5 -1
  652. package/src/workspace/reason-codes.test.ts +7 -1
  653. package/src/workspace/reason-codes.ts +7 -1
  654. package/src/workspace/record-assets.test.ts +2 -1
  655. package/src/workspace/records-contract.e2e.test.ts +2 -1
  656. package/src/workspace/records.schema.json +21 -2
  657. package/src/workspace/records.ts +36 -2
  658. package/src/workspace/reference-kinds/flag/flag.kind.mjs +32 -0
  659. package/src/workspace/reference-kinds/flag/flag.schema.json +53 -0
  660. package/src/workspace/releases.schema.json +513 -0
  661. package/src/workspace/releases.test.ts +108 -0
  662. package/src/workspace/releases.ts +133 -0
  663. package/src/workspace/run-event.schema.json +295 -0
  664. package/src/workspace/status-contract.test.ts +81 -1
  665. package/src/workspace/status-gates.ts +64 -1
  666. package/src/workspace/status-mixed.test.ts +152 -0
  667. package/src/workspace/status-revoked.test.ts +153 -0
  668. package/src/workspace/status-stewards.ts +6 -0
  669. package/src/workspace/status.schema.json +268 -2
  670. package/src/workspace/status.ts +334 -4
  671. package/src/workspace/trust/ci-tag-statement.ts +151 -0
  672. package/src/workspace/trust/op-run-statement.ts +148 -0
  673. package/src/workspace/trust/rotation.ts +61 -14
  674. package/src/workspace/trust/seal.ts +10 -0
  675. package/src/workspace/trust/ssh-commit.ts +10 -9
  676. package/src/workspace/wip.ts +11 -2
  677. package/src/cli/commands/__fixtures__/init-lexicon-output/docs/astro.config.mjs +0 -14
  678. package/src/cli/commands/__fixtures__/init-lexicon-output/docs/package.json +0 -16
  679. package/src/cli/commands/__fixtures__/init-lexicon-output/docs/src/content/docs/index.mdx +0 -8
  680. package/src/cli/commands/__fixtures__/init-lexicon-output/docs/src/content.config.ts +0 -15
  681. package/src/cli/commands/__fixtures__/init-lexicon-output/docs/tsconfig.json +0 -10
@@ -565,6 +565,7 @@
565
565
  "timestamp": "2026-10-11T00:00:00.000Z",
566
566
  "expiresAt": "2026-10-13T00:00:00.000Z",
567
567
  "description": "wave 1 of 3: net",
568
+ "gitSha": "1111111111111111111111111111111111111111",
568
569
  "planDigest": ""
569
570
  },
570
571
  "waves": [
@@ -627,6 +628,7 @@
627
628
  "timestamp": "2026-10-11T00:00:00.000Z",
628
629
  "expiresAt": "2026-10-13T00:00:00.000Z",
629
630
  "description": "wave 1 of 3: net",
631
+ "gitSha": "1111111111111111111111111111111111111111",
630
632
  "planDigest": ""
631
633
  }
632
634
  ],
@@ -725,6 +727,7 @@
725
727
  "timestamp": "2026-10-11T00:00:00.000Z",
726
728
  "expiresAt": "2026-10-13T00:00:00.000Z",
727
729
  "description": "wave 2 of 3: a, b",
730
+ "gitSha": "1111111111111111111111111111111111111111",
728
731
  "planDigest": "jcs1-sha256:f56bc903abaf2bb2f593fcb6f83b48322c7079deed286c1439d2a4e0310e2bdd"
729
732
  },
730
733
  "waves": [
@@ -888,6 +891,7 @@
888
891
  "timestamp": "2026-10-11T00:00:00.000Z",
889
892
  "expiresAt": "2026-10-13T00:00:00.000Z",
890
893
  "description": "wave 2 of 3: a, b",
894
+ "gitSha": "1111111111111111111111111111111111111111",
891
895
  "planDigest": "jcs1-sha256:f56bc903abaf2bb2f593fcb6f83b48322c7079deed286c1439d2a4e0310e2bdd"
892
896
  }
893
897
  ],
@@ -119,6 +119,7 @@
119
119
  "timestamp": "2026-10-11T00:00:00.000Z",
120
120
  "expiresAt": "2026-10-13T00:00:00.000Z",
121
121
  "description": "wave 1 of 3: net",
122
+ "gitSha": "1111111111111111111111111111111111111111",
122
123
  "planDigest": "jcs1-sha256:95bbd78ad48471cefeb1cb32a3f308abde40b2d299eac36ab86b0614f23bcccf"
123
124
  },
124
125
  "waves": [
@@ -191,6 +192,7 @@
191
192
  "timestamp": "2026-10-11T00:00:00.000Z",
192
193
  "expiresAt": "2026-10-13T00:00:00.000Z",
193
194
  "description": "wave 1 of 3: net",
195
+ "gitSha": "1111111111111111111111111111111111111111",
194
196
  "planDigest": "jcs1-sha256:95bbd78ad48471cefeb1cb32a3f308abde40b2d299eac36ab86b0614f23bcccf"
195
197
  }
196
198
  ],
@@ -269,6 +271,7 @@
269
271
  "timestamp": "2026-10-11T00:00:00.000Z",
270
272
  "expiresAt": "2026-10-13T00:00:00.000Z",
271
273
  "description": "wave 2 of 3: a, b",
274
+ "gitSha": "1111111111111111111111111111111111111111",
272
275
  "planDigest": "jcs1-sha256:f56bc903abaf2bb2f593fcb6f83b48322c7079deed286c1439d2a4e0310e2bdd"
273
276
  },
274
277
  "waves": [
@@ -351,6 +354,7 @@
351
354
  "timestamp": "2026-10-11T00:00:00.000Z",
352
355
  "expiresAt": "2026-10-13T00:00:00.000Z",
353
356
  "description": "wave 2 of 3: a, b",
357
+ "gitSha": "1111111111111111111111111111111111111111",
354
358
  "planDigest": "jcs1-sha256:f56bc903abaf2bb2f593fcb6f83b48322c7079deed286c1439d2a4e0310e2bdd"
355
359
  }
356
360
  ],
@@ -432,6 +436,7 @@
432
436
  "timestamp": "2026-10-11T00:00:00.000Z",
433
437
  "expiresAt": "2026-10-13T00:00:00.000Z",
434
438
  "description": "wave 2 of 3: b",
439
+ "gitSha": "1111111111111111111111111111111111111111",
435
440
  "planDigest": "jcs1-sha256:cdbfa0d8006aa5a0b18a4cd6ca51375882107ad8395f4f12e0f2ae19a95a5483"
436
441
  },
437
442
  "waves": [
@@ -504,6 +509,7 @@
504
509
  "timestamp": "2026-10-11T00:00:00.000Z",
505
510
  "expiresAt": "2026-10-13T00:00:00.000Z",
506
511
  "description": "wave 2 of 3: b",
512
+ "gitSha": "1111111111111111111111111111111111111111",
507
513
  "planDigest": "jcs1-sha256:cdbfa0d8006aa5a0b18a4cd6ca51375882107ad8395f4f12e0f2ae19a95a5483"
508
514
  }
509
515
  ],
@@ -104,6 +104,7 @@
104
104
  "timestamp": "2026-10-11T00:00:00.000Z",
105
105
  "expiresAt": "2026-10-13T00:00:00.000Z",
106
106
  "description": "wave 1 (prod): 1 run, gate never, approval ledger, held by before-apply hook lag (t1)",
107
+ "gitSha": "1111111111111111111111111111111111111111",
107
108
  "planDigest": "jcs1-sha256:bd002be383b5e5991600692d985c09fb3ff0bc3370a8264d1ea8f118518dcc1e"
108
109
  },
109
110
  "recorded": true,
@@ -122,6 +123,7 @@
122
123
  "timestamp": "2026-10-11T00:00:00.000Z",
123
124
  "expiresAt": "2026-10-13T00:00:00.000Z",
124
125
  "description": "wave 1 (prod): 1 run, gate never, approval ledger, held by before-apply hook lag (t1)",
126
+ "gitSha": "1111111111111111111111111111111111111111",
125
127
  "planDigest": "jcs1-sha256:bd002be383b5e5991600692d985c09fb3ff0bc3370a8264d1ea8f118518dcc1e"
126
128
  }
127
129
  ],
@@ -53,6 +53,7 @@
53
53
  "timestamp": "2026-10-11T00:00:00.000Z",
54
54
  "expiresAt": "2026-10-13T00:00:00.000Z",
55
55
  "description": "wave 1 (layer): 2 runs, gate always, approval ledger",
56
+ "gitSha": "1111111111111111111111111111111111111111",
56
57
  "planDigest": "jcs1-sha256:138f28c4ef2e87abe7454a8f47db147636932e106e166a399866b5bf470a21af"
57
58
  },
58
59
  "recorded": true,
@@ -71,6 +72,7 @@
71
72
  "timestamp": "2026-10-11T00:00:00.000Z",
72
73
  "expiresAt": "2026-10-13T00:00:00.000Z",
73
74
  "description": "wave 1 (layer): 2 runs, gate always, approval ledger",
75
+ "gitSha": "1111111111111111111111111111111111111111",
74
76
  "planDigest": "jcs1-sha256:138f28c4ef2e87abe7454a8f47db147636932e106e166a399866b5bf470a21af"
75
77
  }
76
78
  ],
@@ -181,6 +183,7 @@
181
183
  "timestamp": "2026-10-11T00:00:00.000Z",
182
184
  "expiresAt": "2026-10-13T00:00:00.000Z",
183
185
  "description": "wave 1 (layer): 2 runs, gate always, approval ledger",
186
+ "gitSha": "1111111111111111111111111111111111111111",
184
187
  "planDigest": "jcs1-sha256:138f28c4ef2e87abe7454a8f47db147636932e106e166a399866b5bf470a21af"
185
188
  },
186
189
  "recorded": true,
@@ -140,6 +140,7 @@
140
140
  "timestamp": "2026-10-11T00:00:00.000Z",
141
141
  "expiresAt": "2026-10-13T00:00:00.000Z",
142
142
  "description": "move the queues",
143
+ "gitSha": "1111111111111111111111111111111111111111",
143
144
  "planDigest": "sha256:qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
144
145
  }
145
146
  ],
@@ -110,6 +110,7 @@
110
110
  "timestamp": "2026-10-11T00:00:00.000Z",
111
111
  "expiresAt": "2026-10-13T00:00:00.000Z",
112
112
  "description": "move the queues",
113
+ "gitSha": "1111111111111111111111111111111111111111",
113
114
  "planDigest": "sha256:qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
114
115
  }
115
116
  ],
@@ -250,6 +251,7 @@
250
251
  "timestamp": "2026-10-11T00:00:00.000Z",
251
252
  "expiresAt": "2026-10-13T00:00:00.000Z",
252
253
  "description": "move the topics",
254
+ "gitSha": "1111111111111111111111111111111111111111",
253
255
  "planDigest": "sha256:tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt"
254
256
  }
255
257
  ],
@@ -112,6 +112,7 @@
112
112
  "timestamp": "2026-10-11T00:00:00.000Z",
113
113
  "expiresAt": "2026-10-13T00:00:00.000Z",
114
114
  "description": "wave 1 (prod): 2 runs, gate never, approval ledger, held by after-plan hook check (t2)",
115
+ "gitSha": "1111111111111111111111111111111111111111",
115
116
  "planDigest": "jcs1-sha256:52d1b04601e89971eab0e24094024707e878042be4b79ad476d6230ac5ef383f"
116
117
  },
117
118
  "recorded": true,
@@ -152,6 +153,7 @@
152
153
  "timestamp": "2026-10-11T00:00:00.000Z",
153
154
  "expiresAt": "2026-10-13T00:00:00.000Z",
154
155
  "description": "wave 1 (prod): 2 runs, gate never, approval ledger, held by after-plan hook check (t2)",
156
+ "gitSha": "1111111111111111111111111111111111111111",
155
157
  "planDigest": "jcs1-sha256:52d1b04601e89971eab0e24094024707e878042be4b79ad476d6230ac5ef383f"
156
158
  }
157
159
  ],
@@ -95,6 +95,7 @@
95
95
  "timestamp": "2026-10-11T00:00:00.000Z",
96
96
  "expiresAt": "2026-10-13T00:00:00.000Z",
97
97
  "description": "wave 1 (prod): 2 runs, gate never, approval ledger, held by before-apply hook lag",
98
+ "gitSha": "1111111111111111111111111111111111111111",
98
99
  "planDigest": "jcs1-sha256:52d1b04601e89971eab0e24094024707e878042be4b79ad476d6230ac5ef383f"
99
100
  },
100
101
  "recorded": true,
@@ -113,6 +114,7 @@
113
114
  "timestamp": "2026-10-11T00:00:00.000Z",
114
115
  "expiresAt": "2026-10-13T00:00:00.000Z",
115
116
  "description": "wave 1 (prod): 2 runs, gate never, approval ledger, held by before-apply hook lag",
117
+ "gitSha": "1111111111111111111111111111111111111111",
116
118
  "planDigest": "jcs1-sha256:52d1b04601e89971eab0e24094024707e878042be4b79ad476d6230ac5ef383f"
117
119
  }
118
120
  ],
@@ -45,6 +45,7 @@
45
45
  "timestamp": "2026-10-11T00:00:00.000Z",
46
46
  "expiresAt": "2026-10-13T00:00:00.000Z",
47
47
  "description": "wave 1 (prod): 2 runs, gate never, approval ledger, held by the hooks at base cannot be run (waves.json at bbbbbbbbbbbb: `hooks.before.plan[0].command` must be a command as argv, a non-empty array of strings.)",
48
+ "gitSha": "1111111111111111111111111111111111111111",
48
49
  "planDigest": "jcs1-sha256:52d1b04601e89971eab0e24094024707e878042be4b79ad476d6230ac5ef383f"
49
50
  },
50
51
  "recorded": true,
@@ -63,6 +64,7 @@
63
64
  "timestamp": "2026-10-11T00:00:00.000Z",
64
65
  "expiresAt": "2026-10-13T00:00:00.000Z",
65
66
  "description": "wave 1 (prod): 2 runs, gate never, approval ledger, held by the hooks at base cannot be run (waves.json at bbbbbbbbbbbb: `hooks.before.plan[0].command` must be a command as argv, a non-empty array of strings.)",
67
+ "gitSha": "1111111111111111111111111111111111111111",
66
68
  "planDigest": "jcs1-sha256:52d1b04601e89971eab0e24094024707e878042be4b79ad476d6230ac5ef383f"
67
69
  }
68
70
  ],
@@ -138,6 +140,7 @@
138
140
  "timestamp": "2026-10-11T00:00:00.000Z",
139
141
  "expiresAt": "2026-10-13T00:00:00.000Z",
140
142
  "description": "wave 1 (prod): 2 runs, gate never, approval ledger, held by the hooks at base cannot be run (waves.json at bbbbbbbbbbbb: `hooks.before.plan[0].command` must be a command as argv, a non-empty array of strings.)",
143
+ "gitSha": "1111111111111111111111111111111111111111",
141
144
  "planDigest": "jcs1-sha256:52d1b04601e89971eab0e24094024707e878042be4b79ad476d6230ac5ef383f"
142
145
  },
143
146
  "recorded": true,
@@ -113,6 +113,7 @@
113
113
  "timestamp": "2026-10-11T00:00:00.000Z",
114
114
  "expiresAt": "2026-10-13T00:00:00.000Z",
115
115
  "description": "wave 1 (prod): 2 runs, gate never, approval ledger, held by after-plan hook check (t2)",
116
+ "gitSha": "1111111111111111111111111111111111111111",
116
117
  "planDigest": "jcs1-sha256:52d1b04601e89971eab0e24094024707e878042be4b79ad476d6230ac5ef383f"
117
118
  },
118
119
  "recorded": true,
@@ -153,6 +154,7 @@
153
154
  "timestamp": "2026-10-11T00:00:00.000Z",
154
155
  "expiresAt": "2026-10-13T00:00:00.000Z",
155
156
  "description": "wave 1 (prod): 2 runs, gate never, approval ledger, held by after-plan hook check (t2)",
157
+ "gitSha": "1111111111111111111111111111111111111111",
156
158
  "planDigest": "jcs1-sha256:52d1b04601e89971eab0e24094024707e878042be4b79ad476d6230ac5ef383f"
157
159
  }
158
160
  ],
@@ -254,6 +256,7 @@
254
256
  "timestamp": "2026-10-11T00:00:00.000Z",
255
257
  "expiresAt": "2026-10-13T00:00:00.000Z",
256
258
  "description": "wave 1 (prod): 2 runs, gate never, approval ledger, held by after-plan hook check (t2)",
259
+ "gitSha": "1111111111111111111111111111111111111111",
257
260
  "planDigest": "jcs1-sha256:52d1b04601e89971eab0e24094024707e878042be4b79ad476d6230ac5ef383f"
258
261
  },
259
262
  "recorded": true,
@@ -80,6 +80,7 @@
80
80
  "timestamp": "2026-10-11T00:00:00.000Z",
81
81
  "expiresAt": "2026-10-13T00:00:00.000Z",
82
82
  "description": "wave 2 (staging): 1 run, gate on-destructive, approval ledger",
83
+ "gitSha": "1111111111111111111111111111111111111111",
83
84
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
84
85
  },
85
86
  "recorded": true,
@@ -98,6 +99,7 @@
98
99
  "timestamp": "2026-10-11T00:00:00.000Z",
99
100
  "expiresAt": "2026-10-13T00:00:00.000Z",
100
101
  "description": "wave 2 (staging): 1 run, gate on-destructive, approval ledger",
102
+ "gitSha": "1111111111111111111111111111111111111111",
101
103
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
102
104
  }
103
105
  ],
@@ -146,6 +148,7 @@
146
148
  "timestamp": "2026-10-11T00:00:00.000Z",
147
149
  "expiresAt": "2026-10-13T00:00:00.000Z",
148
150
  "description": "wave 2 (staging): 1 run, gate on-destructive, approval ledger",
151
+ "gitSha": "1111111111111111111111111111111111111111",
149
152
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
150
153
  },
151
154
  "recorded": true,
@@ -164,6 +167,7 @@
164
167
  "timestamp": "2026-10-11T00:00:00.000Z",
165
168
  "expiresAt": "2026-10-13T00:00:00.000Z",
166
169
  "description": "wave 2 (staging): 1 run, gate on-destructive, approval ledger",
170
+ "gitSha": "1111111111111111111111111111111111111111",
167
171
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
168
172
  }
169
173
  ],
@@ -257,6 +261,7 @@
257
261
  "timestamp": "2026-10-11T00:00:00.000Z",
258
262
  "expiresAt": "2026-10-13T00:00:00.000Z",
259
263
  "description": "wave 2 (staging): 1 run, gate always, approval ledger",
264
+ "gitSha": "1111111111111111111111111111111111111111",
260
265
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
261
266
  },
262
267
  "recorded": true,
@@ -275,6 +280,7 @@
275
280
  "timestamp": "2026-10-11T00:00:00.000Z",
276
281
  "expiresAt": "2026-10-13T00:00:00.000Z",
277
282
  "description": "wave 2 (staging): 1 run, gate always, approval ledger",
283
+ "gitSha": "1111111111111111111111111111111111111111",
278
284
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
279
285
  }
280
286
  ],
@@ -508,6 +514,7 @@
508
514
  "timestamp": "2026-10-11T00:00:00.000Z",
509
515
  "expiresAt": "2026-10-13T00:00:00.000Z",
510
516
  "description": "wave 2 (staging): 1 run, gate always, approval ledger",
517
+ "gitSha": "1111111111111111111111111111111111111111",
511
518
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
512
519
  },
513
520
  "recorded": true,
@@ -56,6 +56,7 @@
56
56
  "timestamp": "2026-10-11T00:00:00.000Z",
57
57
  "expiresAt": "2026-10-13T00:00:00.000Z",
58
58
  "description": "wave 2 (staging): 1 run, gate on-destructive, approval pr-review",
59
+ "gitSha": "1111111111111111111111111111111111111111",
59
60
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
60
61
  }
61
62
  ],
@@ -70,6 +71,7 @@
70
71
  "approver": {
71
72
  "kind": "human"
72
73
  },
74
+ "gitSha": "hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh",
73
75
  "note": "approved by the review of #7 at hhhhhhhhhhhh: github:erin",
74
76
  "url": "https://example.test/pr/7",
75
77
  "review": {
@@ -125,6 +127,7 @@
125
127
  "timestamp": "2026-10-11T00:00:00.000Z",
126
128
  "expiresAt": "2026-10-13T00:00:00.000Z",
127
129
  "description": "wave 2 (staging): 1 run, gate on-destructive, approval pr-review",
130
+ "gitSha": "1111111111111111111111111111111111111111",
128
131
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
129
132
  },
130
133
  "recorded": true,
@@ -149,6 +152,7 @@
149
152
  "timestamp": "2026-10-11T00:00:00.000Z",
150
153
  "expiresAt": "2026-10-13T00:00:00.000Z",
151
154
  "description": "wave 2 (staging): 1 run, gate on-destructive, approval pr-review",
155
+ "gitSha": "1111111111111111111111111111111111111111",
152
156
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
153
157
  }
154
158
  ],
@@ -198,6 +202,7 @@
198
202
  "timestamp": "2026-10-11T00:00:00.000Z",
199
203
  "expiresAt": "2026-10-13T00:00:00.000Z",
200
204
  "description": "wave 2 (staging): 1 run, gate on-destructive, approval pr-review",
205
+ "gitSha": "1111111111111111111111111111111111111111",
201
206
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
202
207
  },
203
208
  "recorded": true,
@@ -225,6 +230,7 @@
225
230
  "timestamp": "2026-10-11T00:00:00.000Z",
226
231
  "expiresAt": "2026-10-13T00:00:00.000Z",
227
232
  "description": "wave 2 (staging): 1 run, gate on-destructive, approval pr-review",
233
+ "gitSha": "1111111111111111111111111111111111111111",
228
234
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
229
235
  }
230
236
  ],
@@ -378,6 +384,7 @@
378
384
  "timestamp": "2026-10-11T00:00:00.000Z",
379
385
  "expiresAt": "2026-10-13T00:00:00.000Z",
380
386
  "description": "wave 2 (staging): 1 run, gate on-destructive, approval pr-review",
387
+ "gitSha": "1111111111111111111111111111111111111111",
381
388
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
382
389
  },
383
390
  "recorded": true,
@@ -39,6 +39,7 @@
39
39
  "timestamp": "2026-10-11T00:00:00.000Z",
40
40
  "expiresAt": "2026-10-13T00:00:00.000Z",
41
41
  "description": "wave 2 (staging): 1 run, gate on-destructive, approval sealed",
42
+ "gitSha": "1111111111111111111111111111111111111111",
42
43
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
43
44
  },
44
45
  "recorded": true,
@@ -57,6 +58,7 @@
57
58
  "timestamp": "2026-10-11T00:00:00.000Z",
58
59
  "expiresAt": "2026-10-13T00:00:00.000Z",
59
60
  "description": "wave 2 (staging): 1 run, gate on-destructive, approval sealed",
61
+ "gitSha": "1111111111111111111111111111111111111111",
60
62
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
61
63
  }
62
64
  ],
@@ -115,6 +117,7 @@
115
117
  "timestamp": "2026-10-11T00:00:00.000Z",
116
118
  "expiresAt": "2026-10-13T00:00:00.000Z",
117
119
  "description": "wave 2 (staging): 1 run, gate on-destructive, approval sealed",
120
+ "gitSha": "1111111111111111111111111111111111111111",
118
121
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
119
122
  },
120
123
  "recorded": true,
@@ -50,6 +50,7 @@
50
50
  "timestamp": "2026-10-11T00:00:00.000Z",
51
51
  "expiresAt": "2026-10-13T00:00:00.000Z",
52
52
  "description": "wave 2 (staging): 1 run, gate on-destructive, approval ledger",
53
+ "gitSha": "1111111111111111111111111111111111111111",
53
54
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
54
55
  }
55
56
  ],
@@ -114,6 +115,7 @@
114
115
  "timestamp": "2026-10-11T00:00:00.000Z",
115
116
  "expiresAt": "2026-10-13T00:00:00.000Z",
116
117
  "description": "wave 2 (staging): 1 run, gate on-destructive, approval ledger",
118
+ "gitSha": "1111111111111111111111111111111111111111",
117
119
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
118
120
  },
119
121
  "recorded": true,
@@ -132,6 +134,7 @@
132
134
  "timestamp": "2026-10-11T00:00:00.000Z",
133
135
  "expiresAt": "2026-10-13T00:00:00.000Z",
134
136
  "description": "wave 2 (staging): 1 run, gate on-destructive, approval ledger",
137
+ "gitSha": "1111111111111111111111111111111111111111",
135
138
  "planDigest": "jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d"
136
139
  }
137
140
  ],
@@ -82,6 +82,7 @@
82
82
  "gate": "wave-1",
83
83
  "timestamp": "2026-10-11T00:00:00.000Z",
84
84
  "expiresAt": "2026-10-13T00:00:00.000Z",
85
+ "gitSha": "1111111111111111111111111111111111111111",
85
86
  "planDigest": "jcs1-sha256:e8c434b396fbbce2b501a5fb746548ad4db81a26543b4dc2c757ec148379f853",
86
87
  "neverOverMcp": true
87
88
  },
@@ -110,6 +111,7 @@
110
111
  "gate": "wave-1",
111
112
  "timestamp": "2026-10-11T00:00:00.000Z",
112
113
  "expiresAt": "2026-10-13T00:00:00.000Z",
114
+ "gitSha": "1111111111111111111111111111111111111111",
113
115
  "planDigest": "jcs1-sha256:e8c434b396fbbce2b501a5fb746548ad4db81a26543b4dc2c757ec148379f853",
114
116
  "neverOverMcp": true
115
117
  }
@@ -299,6 +301,7 @@
299
301
  "gate": "wave-1",
300
302
  "timestamp": "2026-10-11T00:00:00.000Z",
301
303
  "expiresAt": "2026-10-13T00:00:00.000Z",
304
+ "gitSha": "1111111111111111111111111111111111111111",
302
305
  "planDigest": "jcs1-sha256:e8c434b396fbbce2b501a5fb746548ad4db81a26543b4dc2c757ec148379f853",
303
306
  "neverOverMcp": true
304
307
  },
@@ -333,6 +336,7 @@
333
336
  "gate": "wave-1",
334
337
  "timestamp": "2026-10-11T00:00:00.000Z",
335
338
  "expiresAt": "2026-10-13T00:00:00.000Z",
339
+ "gitSha": "1111111111111111111111111111111111111111",
336
340
  "planDigest": "jcs1-sha256:e8c434b396fbbce2b501a5fb746548ad4db81a26543b4dc2c757ec148379f853",
337
341
  "neverOverMcp": true
338
342
  }
@@ -743,6 +747,7 @@
743
747
  "gate": "wave-1",
744
748
  "timestamp": "2026-10-11T00:00:00.000Z",
745
749
  "expiresAt": "2026-10-13T00:00:00.000Z",
750
+ "gitSha": "1111111111111111111111111111111111111111",
746
751
  "planDigest": "jcs1-sha256:e8c434b396fbbce2b501a5fb746548ad4db81a26543b4dc2c757ec148379f853",
747
752
  "neverOverMcp": true
748
753
  },
@@ -1150,6 +1155,7 @@
1150
1155
  "gate": "wave-1",
1151
1156
  "timestamp": "2026-10-11T00:00:00.000Z",
1152
1157
  "expiresAt": "2026-10-13T00:00:00.000Z",
1158
+ "gitSha": "1111111111111111111111111111111111111111",
1153
1159
  "planDigest": "jcs1-sha256:e8c434b396fbbce2b501a5fb746548ad4db81a26543b4dc2c757ec148379f853",
1154
1160
  "neverOverMcp": true
1155
1161
  },
@@ -1662,6 +1668,7 @@
1662
1668
  "gate": "wave-1",
1663
1669
  "timestamp": "2026-10-11T00:00:00.000Z",
1664
1670
  "expiresAt": "2026-10-13T00:00:00.000Z",
1671
+ "gitSha": "1111111111111111111111111111111111111111",
1665
1672
  "planDigest": "jcs1-sha256:e8c434b396fbbce2b501a5fb746548ad4db81a26543b4dc2c757ec148379f853",
1666
1673
  "neverOverMcp": true
1667
1674
  },
@@ -49,6 +49,7 @@
49
49
  "timestamp": "2026-10-11T00:00:00.000Z",
50
50
  "expiresAt": "2026-10-13T00:00:00.000Z",
51
51
  "description": "wave 3 (prod): 3 runs, gate always, approval ledger",
52
+ "gitSha": "1111111111111111111111111111111111111111",
52
53
  "planDigest": "jcs1-sha256:106d25f35ee6bc02e9aa253d0b2633a764396833c82e0c5ec5a4ad83a2a85b4e"
53
54
  },
54
55
  "recorded": true,
@@ -67,6 +68,7 @@
67
68
  "timestamp": "2026-10-11T00:00:00.000Z",
68
69
  "expiresAt": "2026-10-13T00:00:00.000Z",
69
70
  "description": "wave 3 (prod): 3 runs, gate always, approval ledger",
71
+ "gitSha": "1111111111111111111111111111111111111111",
70
72
  "planDigest": "jcs1-sha256:106d25f35ee6bc02e9aa253d0b2633a764396833c82e0c5ec5a4ad83a2a85b4e"
71
73
  }
72
74
  ],
@@ -125,6 +127,7 @@
125
127
  "timestamp": "2026-10-11T00:00:00.000Z",
126
128
  "expiresAt": "2026-10-13T00:00:00.000Z",
127
129
  "description": "wave 3 (prod): 3 runs, gate always, approval ledger",
130
+ "gitSha": "1111111111111111111111111111111111111111",
128
131
  "planDigest": "jcs1-sha256:106d25f35ee6bc02e9aa253d0b2633a764396833c82e0c5ec5a4ad83a2a85b4e"
129
132
  },
130
133
  "recorded": true,
@@ -221,6 +224,7 @@
221
224
  "timestamp": "2026-10-11T00:00:00.000Z",
222
225
  "expiresAt": "2026-10-13T00:00:00.000Z",
223
226
  "description": "wave 3 (prod): 3 runs, gate always, approval ledger",
227
+ "gitSha": "1111111111111111111111111111111111111111",
224
228
  "planDigest": "jcs1-sha256:106d25f35ee6bc02e9aa253d0b2633a764396833c82e0c5ec5a4ad83a2a85b4e"
225
229
  },
226
230
  "recorded": true,
@@ -194,3 +194,49 @@ describe("buildParamValues", () => {
194
194
  expect(buildParamValues([])).toEqual({});
195
195
  });
196
196
  });
197
+
198
+ describe("resolveBuildParams — workspace flags (#4024)", () => {
199
+ const defs: BuildParamsConfig = { newCheckout: { type: "boolean", default: false, env: "NEW_CHECKOUT" }, tier: { type: "string", default: "light" } };
200
+ const flags = (value: boolean | undefined, gated = false) => ({ env: "prod", byParam: { newCheckout: { flag: "new-checkout", value } }, ...(gated ? { gated: true } : {}) });
201
+
202
+ test("a flag's value for the environment is recorded with source flag:<name>, ahead of the default", () => {
203
+ const r = resolveBuildParams(defs, { flags: flags(true) });
204
+ expect(r.errors).toEqual([]);
205
+ expect(r.provenance).toEqual([
206
+ { name: "newCheckout", value: true, source: "flag:new-checkout" },
207
+ { name: "tier", value: "light", source: "default" },
208
+ ]);
209
+ });
210
+
211
+ test("a flag that gives the environment no value leaves the parameter at its default", () => {
212
+ expect(resolveBuildParams(defs, { flags: flags(undefined) }).provenance[0]).toEqual({ name: "newCheckout", value: false, source: "default" });
213
+ });
214
+
215
+ test("where the environment has no gate, --param, --params-file and the env var still win over the flag", () => {
216
+ expect(resolveBuildParams(defs, { cli: { newCheckout: "false" }, flags: flags(true) }).provenance[0].source).toBe("cli");
217
+ expect(resolveBuildParams(defs, { fromFile: { newCheckout: false }, flags: flags(true) }).provenance[0].source).toBe("params-file");
218
+ expect(resolveBuildParams(defs, { env: { NEW_CHECKOUT: "false" }, flags: flags(true) }).provenance[0].source).toBe("env");
219
+ });
220
+
221
+ test("where the environment has a gate, --param, --params-file and the env var can't set a flag-backed parameter", () => {
222
+ const viaCli = resolveBuildParams(defs, { cli: { newCheckout: "true" }, flags: flags(false, true) });
223
+ expect(viaCli.errors).toEqual([
224
+ 'build parameter "newCheckout" is backed by the flag "new-checkout", and "prod" has a gate, so --param can\'t set it; change the flag record and let the change go through the gate',
225
+ ]);
226
+ expect(viaCli.provenance.map((p) => p.name)).toEqual(["tier"]);
227
+ expect(resolveBuildParams(defs, { fromFile: { newCheckout: true }, flags: flags(false, true) }).errors[0]).toMatch(/so --params-file can't set it/);
228
+ expect(resolveBuildParams(defs, { env: { NEW_CHECKOUT: "true" }, flags: flags(false, true) }).errors[0]).toMatch(/so the env var NEW_CHECKOUT can't set it/);
229
+ // A parameter no flag backs is not affected.
230
+ expect(resolveBuildParams(defs, { cli: { tier: "big" }, flags: flags(false, true) }).errors).toEqual([]);
231
+ });
232
+
233
+ test("a flag that sets a parameter the config does not declare is an error", () => {
234
+ const r = resolveBuildParams({}, { flags: flags(true) });
235
+ expect(r.errors).toEqual([`flag "new-checkout" sets build parameter "newCheckout", which chant.config.ts's buildParams does not declare`]);
236
+ });
237
+
238
+ test("a flag value of the wrong type, or outside the enum, fails like any other source", () => {
239
+ const strict: BuildParamsConfig = { newCheckout: { type: "string", enum: ["a", "b"] } };
240
+ expect(resolveBuildParams(strict, { flags: { env: "prod", byParam: { newCheckout: { flag: "new-checkout", value: "c" } } } }).errors[0]).toMatch(/must be one of "a", "b", got "c"/);
241
+ });
242
+ });
@@ -73,6 +73,28 @@ export interface BuildParamsInput {
73
73
  fromFile?: Record<string, unknown>;
74
74
  /** The process environment, consulted only for a parameter that declares an `env` mapping, and only once `cli`/`fromFile` have no value for it. */
75
75
  env?: Record<string, string | undefined>;
76
+ /**
77
+ * The workspace flags that back parameters in this build's environment
78
+ * (#4024), read by `./flag-params.ts`. A flag-backed parameter takes the
79
+ * flag's value for the environment, recorded with `source: "flag:<id>"`,
80
+ * ahead of its `env` mapping and its default. Absent outside a workspace
81
+ * and without `--env`.
82
+ */
83
+ flags?: BuildParamFlags;
84
+ }
85
+
86
+ /** The flags that back parameters in one environment (#4024). */
87
+ export interface BuildParamFlags {
88
+ /** The environment the build is for. */
89
+ env: string;
90
+ /** Each flag-backed parameter by name: the flag's name, and its value in `env` (undefined when the flag gives it none). */
91
+ byParam: Record<string, { flag: string; value: BuildParamValue | undefined }>;
92
+ /**
93
+ * The environment has a gate (#4024's precedence rule): a `--param`,
94
+ * `--params-file` or env-var value for a flag-backed parameter is refused,
95
+ * so no path flips a flag around the gate.
96
+ */
97
+ gated?: boolean;
76
98
  }
77
99
 
78
100
  /** Result of resolving a project's declared parameters against one build invocation's inputs. */
@@ -118,7 +140,11 @@ function coerce(name: string, raw: BuildParamValue, def: BuildParamDef, errors:
118
140
  * Resolve a project's declared build-time parameters against one build's
119
141
  * supplied inputs. Precedence per parameter, most to least specific:
120
142
  * `cli` (`--param name=value`) > `fromFile` (`--params-file`) > the
121
- * parameter's own declared `env` mapping (only if set) > `def.default`.
143
+ * parameter's own declared `env` mapping (only if set) > a workspace flag's
144
+ * value for the build's environment (`input.flags`, #4024) > `def.default`.
145
+ * When `input.flags.gated` is set, a flag-backed parameter takes none of the
146
+ * first three: a value from any of them is a build error, so a flag can't be
147
+ * flipped around the environment's gate.
122
148
  *
123
149
  * A parameter with no declared `default` and no value from any source is a
124
150
  * build error, not a silently-`undefined` value — a build-time parameter
@@ -153,9 +179,26 @@ export function resolveBuildParams(defs: BuildParamsConfig | undefined, input: B
153
179
  }
154
180
  }
155
181
 
182
+ const flags = input.flags;
183
+ for (const [name, binding] of Object.entries(flags?.byParam ?? {})) {
184
+ if (!(name in declared)) {
185
+ errors.push(`flag "${binding.flag}" sets build parameter "${name}", which chant.config.ts's buildParams does not declare`);
186
+ }
187
+ }
188
+
156
189
  for (const [name, def] of Object.entries(declared)) {
157
190
  let raw: BuildParamValue | undefined;
158
191
  let source: BuildParamProvenance["source"] | undefined;
192
+ const binding = flags?.byParam[name];
193
+
194
+ if (binding && flags?.gated) {
195
+ // #4024: in an environment with a gate, the flag record is the only way to set the parameter.
196
+ const around = name in cli ? "--param" : name in fromFile ? "--params-file" : def.env && env[def.env] !== undefined ? `the env var ${def.env}` : null;
197
+ if (around !== null) {
198
+ errors.push(flagGateRefusal(name, binding.flag, flags.env, around));
199
+ continue;
200
+ }
201
+ }
159
202
 
160
203
  if (name in cli) {
161
204
  raw = cli[name];
@@ -171,6 +214,9 @@ export function resolveBuildParams(defs: BuildParamsConfig | undefined, input: B
171
214
  } else if (def.env && env[def.env] !== undefined) {
172
215
  raw = env[def.env];
173
216
  source = "env";
217
+ } else if (binding && binding.value !== undefined) {
218
+ raw = binding.value;
219
+ source = `flag:${binding.flag}`;
174
220
  } else if (def.default !== undefined) {
175
221
  raw = def.default;
176
222
  source = "default";
@@ -201,6 +247,14 @@ export function resolveBuildParams(defs: BuildParamsConfig | undefined, input: B
201
247
  return { provenance, errors };
202
248
  }
203
249
 
250
+ /**
251
+ * The build error for a flag-backed parameter that `around` (`--param`,
252
+ * `--params-file` or an env var) set in an environment with a gate (#4024).
253
+ */
254
+ export function flagGateRefusal(name: string, flag: string, env: string, around: string): string {
255
+ return `build parameter "${name}" is backed by the flag "${flag}", and "${env}" has a gate, so ${around} can't set it; change the flag record and let the change go through the gate`;
256
+ }
257
+
204
258
  /** Project the resolved provenance records down to a plain `{ name: value }` map — what actually gets bound to `params.<name>` (see ./params.ts). */
205
259
  export function buildParamValues(provenance: readonly BuildParamProvenance[]): Record<string, BuildParamValue> {
206
260
  return Object.fromEntries(provenance.map((p) => [p.name, p.value]));