@intentius/chant 0.124.28 → 0.124.30

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 (449) hide show
  1. package/dist/build-params.d.ts +34 -1
  2. package/dist/build-params.d.ts.map +1 -1
  3. package/dist/build-params.js +31 -1
  4. package/dist/change-set-graph.d.ts +8 -1
  5. package/dist/change-set-graph.d.ts.map +1 -1
  6. package/dist/change-set-graph.js +4 -2
  7. package/dist/change-set.d.ts +10 -0
  8. package/dist/change-set.d.ts.map +1 -1
  9. package/dist/change-set.js +4 -3
  10. package/dist/cli/build-params-cli.d.ts +7 -1
  11. package/dist/cli/build-params-cli.d.ts.map +1 -1
  12. package/dist/cli/build-params-cli.js +17 -8
  13. package/dist/cli/commands/build.d.ts.map +1 -1
  14. package/dist/cli/commands/build.js +6 -3
  15. package/dist/cli/handlers/approve.d.ts.map +1 -1
  16. package/dist/cli/handlers/approve.js +45 -0
  17. package/dist/cli/handlers/build.d.ts.map +1 -1
  18. package/dist/cli/handlers/build.js +18 -4
  19. package/dist/cli/handlers/fan-out.d.ts +9 -0
  20. package/dist/cli/handlers/fan-out.d.ts.map +1 -1
  21. package/dist/cli/handlers/fan-out.js +67 -8
  22. package/dist/cli/handlers/lifecycle-gc.d.ts +19 -0
  23. package/dist/cli/handlers/lifecycle-gc.d.ts.map +1 -0
  24. package/dist/cli/handlers/lifecycle-gc.js +143 -0
  25. package/dist/cli/handlers/pr.d.ts +11 -3
  26. package/dist/cli/handlers/pr.d.ts.map +1 -1
  27. package/dist/cli/handlers/pr.js +134 -26
  28. package/dist/cli/handlers/promote.d.ts +7 -0
  29. package/dist/cli/handlers/promote.d.ts.map +1 -1
  30. package/dist/cli/handlers/promote.js +210 -33
  31. package/dist/cli/handlers/release.d.ts +62 -5
  32. package/dist/cli/handlers/release.d.ts.map +1 -1
  33. package/dist/cli/handlers/release.js +414 -28
  34. package/dist/cli/handlers/run.d.ts +11 -1
  35. package/dist/cli/handlers/run.d.ts.map +1 -1
  36. package/dist/cli/handlers/run.js +67 -6
  37. package/dist/cli/main.d.ts.map +1 -1
  38. package/dist/cli/main.js +91 -10
  39. package/dist/cli/parse-args.d.ts.map +1 -1
  40. package/dist/cli/parse-args.js +73 -2
  41. package/dist/cli/registry.d.ts +32 -4
  42. package/dist/cli/registry.d.ts.map +1 -1
  43. package/dist/cli/run-events.d.ts +3 -2
  44. package/dist/cli/run-events.d.ts.map +1 -1
  45. package/dist/cli/run-events.js +5 -3
  46. package/dist/components/auto-release.d.ts +2 -0
  47. package/dist/components/auto-release.d.ts.map +1 -1
  48. package/dist/components/auto-release.js +1 -0
  49. package/dist/components/capability.d.ts +9 -0
  50. package/dist/components/capability.d.ts.map +1 -1
  51. package/dist/components/driver.d.ts +8 -0
  52. package/dist/components/driver.d.ts.map +1 -1
  53. package/dist/components/driver.js +35 -0
  54. package/dist/components/fan-out-inputs.d.ts +69 -0
  55. package/dist/components/fan-out-inputs.d.ts.map +1 -0
  56. package/dist/components/fan-out-inputs.js +169 -0
  57. package/dist/components/fan-out-record.d.ts +13 -0
  58. package/dist/components/fan-out-record.d.ts.map +1 -1
  59. package/dist/components/fan-out-record.js +16 -0
  60. package/dist/components/fan-out-run.d.ts.map +1 -1
  61. package/dist/components/fan-out-run.js +50 -0
  62. package/dist/components/fan-out.d.ts +4 -0
  63. package/dist/components/fan-out.d.ts.map +1 -1
  64. package/dist/components/pr-pipeline.d.ts +49 -0
  65. package/dist/components/pr-pipeline.d.ts.map +1 -1
  66. package/dist/components/pr-pipeline.js +38 -4
  67. package/dist/components/pr-run.d.ts +20 -2
  68. package/dist/components/pr-run.d.ts.map +1 -1
  69. package/dist/components/pr-run.js +26 -13
  70. package/dist/components/promote.d.ts +23 -0
  71. package/dist/components/promote.d.ts.map +1 -1
  72. package/dist/components/promote.js +60 -2
  73. package/dist/components/release-compile.d.ts +9 -0
  74. package/dist/components/release-compile.d.ts.map +1 -1
  75. package/dist/components/release-compile.js +9 -3
  76. package/dist/components/release-gate.d.ts +11 -1
  77. package/dist/components/release-gate.d.ts.map +1 -1
  78. package/dist/components/release-gate.js +10 -4
  79. package/dist/components/wave-plan.d.ts +16 -0
  80. package/dist/components/wave-plan.d.ts.map +1 -1
  81. package/dist/components/wave-plan.js +36 -2
  82. package/dist/config.d.ts +38 -0
  83. package/dist/config.d.ts.map +1 -1
  84. package/dist/config.js +2 -0
  85. package/dist/flag-params.d.ts +54 -0
  86. package/dist/flag-params.d.ts.map +1 -0
  87. package/dist/flag-params.js +130 -0
  88. package/dist/lifecycle/__fixtures__/publish-fakes.d.ts +120 -0
  89. package/dist/lifecycle/__fixtures__/publish-fakes.d.ts.map +1 -0
  90. package/dist/lifecycle/__fixtures__/publish-fakes.js +304 -0
  91. package/dist/lifecycle/change-set-store.d.ts +2 -1
  92. package/dist/lifecycle/change-set-store.d.ts.map +1 -1
  93. package/dist/lifecycle/change-set-store.js +2 -1
  94. package/dist/lifecycle/delivery-metrics.d.ts +139 -0
  95. package/dist/lifecycle/delivery-metrics.d.ts.map +1 -0
  96. package/dist/lifecycle/delivery-metrics.js +145 -0
  97. package/dist/lifecycle/deploy-outcome.d.ts +81 -0
  98. package/dist/lifecycle/deploy-outcome.d.ts.map +1 -0
  99. package/dist/lifecycle/deploy-outcome.js +101 -0
  100. package/dist/lifecycle/gate-change-set.d.ts +10 -1
  101. package/dist/lifecycle/gate-change-set.d.ts.map +1 -1
  102. package/dist/lifecycle/gate-change-set.js +35 -3
  103. package/dist/lifecycle/gate-ledger.d.ts +2 -3
  104. package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
  105. package/dist/lifecycle/git.d.ts +30 -1
  106. package/dist/lifecycle/git.d.ts.map +1 -1
  107. package/dist/lifecycle/git.js +31 -5
  108. package/dist/lifecycle/index.d.ts +4 -0
  109. package/dist/lifecycle/index.d.ts.map +1 -1
  110. package/dist/lifecycle/index.js +4 -0
  111. package/dist/lifecycle/mixed-environment.d.ts +95 -0
  112. package/dist/lifecycle/mixed-environment.d.ts.map +1 -0
  113. package/dist/lifecycle/mixed-environment.js +154 -0
  114. package/dist/lifecycle/publish-attachments.d.ts +79 -0
  115. package/dist/lifecycle/publish-attachments.d.ts.map +1 -0
  116. package/dist/lifecycle/publish-attachments.js +179 -0
  117. package/dist/lifecycle/publish-credentials.d.ts +37 -0
  118. package/dist/lifecycle/publish-credentials.d.ts.map +1 -0
  119. package/dist/lifecycle/publish-credentials.js +69 -0
  120. package/dist/lifecycle/publish-declaration.d.ts +97 -0
  121. package/dist/lifecycle/publish-declaration.d.ts.map +1 -0
  122. package/dist/lifecycle/publish-declaration.js +83 -0
  123. package/dist/lifecycle/publish-forge.d.ts +53 -0
  124. package/dist/lifecycle/publish-forge.d.ts.map +1 -0
  125. package/dist/lifecycle/publish-forge.js +298 -0
  126. package/dist/lifecycle/publish-npm.d.ts +61 -0
  127. package/dist/lifecycle/publish-npm.d.ts.map +1 -0
  128. package/dist/lifecycle/publish-npm.js +242 -0
  129. package/dist/lifecycle/publish-oci.d.ts +64 -0
  130. package/dist/lifecycle/publish-oci.d.ts.map +1 -0
  131. package/dist/lifecycle/publish-oci.js +383 -0
  132. package/dist/lifecycle/publish-record.d.ts +66 -0
  133. package/dist/lifecycle/publish-record.d.ts.map +1 -0
  134. package/dist/lifecycle/publish-record.js +84 -0
  135. package/dist/lifecycle/publish-targets.d.ts +45 -0
  136. package/dist/lifecycle/publish-targets.d.ts.map +1 -0
  137. package/dist/lifecycle/publish-targets.js +85 -0
  138. package/dist/lifecycle/release-cut.d.ts +48 -1
  139. package/dist/lifecycle/release-cut.d.ts.map +1 -1
  140. package/dist/lifecycle/release-cut.js +116 -23
  141. package/dist/lifecycle/release-join.d.ts +95 -0
  142. package/dist/lifecycle/release-join.d.ts.map +1 -0
  143. package/dist/lifecycle/release-join.js +139 -0
  144. package/dist/lifecycle/release-ledger.d.ts +8 -3
  145. package/dist/lifecycle/release-ledger.d.ts.map +1 -1
  146. package/dist/lifecycle/release-ledger.js +2 -0
  147. package/dist/lifecycle/release-publish.d.ts +312 -0
  148. package/dist/lifecycle/release-publish.d.ts.map +1 -0
  149. package/dist/lifecycle/release-publish.js +335 -0
  150. package/dist/lifecycle/release-revocation.d.ts +80 -0
  151. package/dist/lifecycle/release-revocation.d.ts.map +1 -0
  152. package/dist/lifecycle/release-revocation.js +123 -0
  153. package/dist/lifecycle/release-store.d.ts +12 -2
  154. package/dist/lifecycle/release-store.d.ts.map +1 -1
  155. package/dist/lifecycle/release-store.js +4 -2
  156. package/dist/lifecycle/release-verify.d.ts +61 -0
  157. package/dist/lifecycle/release-verify.d.ts.map +1 -0
  158. package/dist/lifecycle/release-verify.js +92 -0
  159. package/dist/lifecycle/release-workstation.d.ts +91 -0
  160. package/dist/lifecycle/release-workstation.d.ts.map +1 -0
  161. package/dist/lifecycle/release-workstation.js +180 -0
  162. package/dist/lifecycle/retention-policy.d.ts +45 -0
  163. package/dist/lifecycle/retention-policy.d.ts.map +1 -0
  164. package/dist/lifecycle/retention-policy.js +43 -0
  165. package/dist/lifecycle/retention.d.ts +185 -0
  166. package/dist/lifecycle/retention.d.ts.map +1 -0
  167. package/dist/lifecycle/retention.js +400 -0
  168. package/dist/lifecycle/run-ledger.d.ts +1 -1
  169. package/dist/lifecycle/run-ledger.d.ts.map +1 -1
  170. package/dist/lifecycle/run-ledger.js +9 -0
  171. package/dist/op/activities/activity-contracts.d.ts +1 -0
  172. package/dist/op/activities/activity-contracts.d.ts.map +1 -1
  173. package/dist/op/activities/activity-contracts.js +1 -0
  174. package/dist/op/activities/shell.d.ts +6 -0
  175. package/dist/op/activities/shell.d.ts.map +1 -1
  176. package/dist/op/activities/shell.js +1 -1
  177. package/dist/op/local-executor.d.ts +23 -1
  178. package/dist/op/local-executor.d.ts.map +1 -1
  179. package/dist/op/local-executor.js +9 -3
  180. package/dist/op/runtime.d.ts +27 -0
  181. package/dist/op/runtime.d.ts.map +1 -1
  182. package/dist/op/runtime.js +20 -0
  183. package/dist/plan-summary.d.ts.map +1 -1
  184. package/dist/plan-summary.js +8 -2
  185. package/dist/pr-forge.d.ts +23 -0
  186. package/dist/pr-forge.d.ts.map +1 -1
  187. package/dist/pr-forge.js +44 -0
  188. package/dist/pr-loop.d.ts +17 -0
  189. package/dist/pr-loop.d.ts.map +1 -1
  190. package/dist/pr-loop.js +30 -4
  191. package/dist/pr-report-url.d.ts +82 -0
  192. package/dist/pr-report-url.d.ts.map +1 -0
  193. package/dist/pr-report-url.js +174 -0
  194. package/dist/provenance.d.ts +2 -2
  195. package/dist/provenance.d.ts.map +1 -1
  196. package/dist/run-event-store.d.ts +29 -2
  197. package/dist/run-event-store.d.ts.map +1 -1
  198. package/dist/run-event-store.js +50 -3
  199. package/dist/run-event-stream.d.ts +4 -3
  200. package/dist/run-event-stream.d.ts.map +1 -1
  201. package/dist/run-event-stream.js +7 -3
  202. package/dist/run-event.d.ts +34 -1
  203. package/dist/run-event.d.ts.map +1 -1
  204. package/dist/run-event.js +4 -0
  205. package/dist/wave-runtime.mjs +260 -229
  206. package/dist/workspace/__fixtures__/flag-workspace.d.ts +31 -0
  207. package/dist/workspace/__fixtures__/flag-workspace.d.ts.map +1 -0
  208. package/dist/workspace/__fixtures__/flag-workspace.js +114 -0
  209. package/dist/workspace/change-set.schema.json +5 -1
  210. package/dist/workspace/check.schema.json +4 -2
  211. package/dist/workspace/checks/records.d.ts +9 -1
  212. package/dist/workspace/checks/records.d.ts.map +1 -1
  213. package/dist/workspace/checks/records.js +35 -1
  214. package/dist/workspace/checks.d.ts +1 -0
  215. package/dist/workspace/checks.d.ts.map +1 -1
  216. package/dist/workspace/checks.js +2 -1
  217. package/dist/workspace/ci-green-forge.d.ts +2 -0
  218. package/dist/workspace/ci-green-forge.d.ts.map +1 -1
  219. package/dist/workspace/ci-green.d.ts +10 -0
  220. package/dist/workspace/ci-green.d.ts.map +1 -1
  221. package/dist/workspace/ci-green.js +14 -5
  222. package/dist/workspace/ci-run.d.ts +222 -0
  223. package/dist/workspace/ci-run.d.ts.map +1 -0
  224. package/dist/workspace/ci-run.js +464 -0
  225. package/dist/workspace/ci-serve.d.ts +214 -0
  226. package/dist/workspace/ci-serve.d.ts.map +1 -0
  227. package/dist/workspace/ci-serve.js +412 -0
  228. package/dist/workspace/declaration.d.ts +16 -0
  229. package/dist/workspace/declaration.d.ts.map +1 -1
  230. package/dist/workspace/declaration.js +26 -0
  231. package/dist/workspace/declaration.schema.json +64 -0
  232. package/dist/workspace/declared-kinds.d.ts +16 -0
  233. package/dist/workspace/declared-kinds.d.ts.map +1 -1
  234. package/dist/workspace/declared-kinds.js +25 -0
  235. package/dist/workspace/delivery-metrics.d.ts +91 -0
  236. package/dist/workspace/delivery-metrics.d.ts.map +1 -0
  237. package/dist/workspace/delivery-metrics.js +217 -0
  238. package/dist/workspace/delivery-metrics.schema.json +519 -0
  239. package/dist/workspace/flags-read.d.ts +37 -0
  240. package/dist/workspace/flags-read.d.ts.map +1 -0
  241. package/dist/workspace/flags-read.js +103 -0
  242. package/dist/workspace/flags.d.ts +100 -0
  243. package/dist/workspace/flags.d.ts.map +1 -0
  244. package/dist/workspace/flags.js +98 -0
  245. package/dist/workspace/graph-cli.js +1 -1
  246. package/dist/workspace/intent-cli.d.ts +11 -2
  247. package/dist/workspace/intent-cli.d.ts.map +1 -1
  248. package/dist/workspace/intent-cli.js +54 -5
  249. package/dist/workspace/intent-trace.d.ts +219 -0
  250. package/dist/workspace/intent-trace.d.ts.map +1 -0
  251. package/dist/workspace/intent-trace.js +314 -0
  252. package/dist/workspace/intent.d.ts +30 -6
  253. package/dist/workspace/intent.d.ts.map +1 -1
  254. package/dist/workspace/intent.js +141 -21
  255. package/dist/workspace/intent.schema.json +702 -6
  256. package/dist/workspace/overlap.d.ts +146 -0
  257. package/dist/workspace/overlap.d.ts.map +1 -0
  258. package/dist/workspace/overlap.js +276 -0
  259. package/dist/workspace/pr-report.schema.json +5 -0
  260. package/dist/workspace/reason-codes.d.ts +2 -0
  261. package/dist/workspace/reason-codes.d.ts.map +1 -1
  262. package/dist/workspace/reason-codes.js +3 -0
  263. package/dist/workspace/records.d.ts +15 -2
  264. package/dist/workspace/records.d.ts.map +1 -1
  265. package/dist/workspace/records.js +32 -0
  266. package/dist/workspace/records.schema.json +21 -2
  267. package/dist/workspace/reference-kinds/flag/flag.kind.mjs +32 -0
  268. package/dist/workspace/reference-kinds/flag/flag.schema.json +53 -0
  269. package/dist/workspace/releases.d.ts +9 -0
  270. package/dist/workspace/releases.d.ts.map +1 -1
  271. package/dist/workspace/releases.js +9 -0
  272. package/dist/workspace/releases.schema.json +123 -1
  273. package/dist/workspace/run-event.schema.json +24 -6
  274. package/dist/workspace/status-gates.d.ts +8 -0
  275. package/dist/workspace/status-gates.d.ts.map +1 -1
  276. package/dist/workspace/status-stewards.d.ts +2 -0
  277. package/dist/workspace/status-stewards.d.ts.map +1 -1
  278. package/dist/workspace/status-stewards.js +1 -0
  279. package/dist/workspace/status.d.ts +78 -0
  280. package/dist/workspace/status.d.ts.map +1 -1
  281. package/dist/workspace/status.js +170 -3
  282. package/dist/workspace/status.schema.json +210 -2
  283. package/dist/workspace/wip.d.ts.map +1 -1
  284. package/dist/workspace/wip.js +11 -3
  285. package/package.json +1 -1
  286. package/src/build-params.test.ts +46 -0
  287. package/src/build-params.ts +55 -1
  288. package/src/change-set-graph.ts +10 -2
  289. package/src/change-set.ts +14 -3
  290. package/src/cli/build-params-cli.ts +22 -9
  291. package/src/cli/commands/build.ts +6 -3
  292. package/src/cli/handlers/approve-release.test.ts +5 -1
  293. package/src/cli/handlers/approve-revoked.test.ts +155 -0
  294. package/src/cli/handlers/approve.ts +47 -0
  295. package/src/cli/handlers/build.test.ts +30 -0
  296. package/src/cli/handlers/build.ts +20 -4
  297. package/src/cli/handlers/fan-out.test.ts +262 -1
  298. package/src/cli/handlers/fan-out.ts +72 -8
  299. package/src/cli/handlers/intent-trace.e2e.test.ts +201 -0
  300. package/src/cli/handlers/lifecycle-gc.test.ts +126 -0
  301. package/src/cli/handlers/lifecycle-gc.ts +146 -0
  302. package/src/cli/handlers/pr.test.ts +148 -1
  303. package/src/cli/handlers/pr.ts +144 -28
  304. package/src/cli/handlers/promote.test.ts +280 -2
  305. package/src/cli/handlers/promote.ts +210 -34
  306. package/src/cli/handlers/release-implicit.e2e.test.ts +12 -4
  307. package/src/cli/handlers/release-join.e2e.test.ts +185 -0
  308. package/src/cli/handlers/release-publish-targets.e2e.test.ts +295 -0
  309. package/src/cli/handlers/release-verify.e2e.test.ts +117 -0
  310. package/src/cli/handlers/release-workstation-ci.e2e.test.ts +135 -0
  311. package/src/cli/handlers/release.e2e.test.ts +146 -32
  312. package/src/cli/handlers/release.ts +415 -28
  313. package/src/cli/handlers/run-auto-release.test.ts +9 -0
  314. package/src/cli/handlers/run-release.test.ts +55 -0
  315. package/src/cli/handlers/run.ts +69 -5
  316. package/src/cli/main.test.ts +1 -0
  317. package/src/cli/main.ts +91 -10
  318. package/src/cli/parse-args.ts +54 -2
  319. package/src/cli/registry.ts +32 -4
  320. package/src/cli/run-events.ts +5 -2
  321. package/src/components/auto-release.test.ts +9 -0
  322. package/src/components/auto-release.ts +3 -0
  323. package/src/components/capability.ts +9 -0
  324. package/src/components/driver.test.ts +24 -0
  325. package/src/components/driver.ts +36 -0
  326. package/src/components/fan-out-inputs.test.ts +85 -0
  327. package/src/components/fan-out-inputs.ts +192 -0
  328. package/src/components/fan-out-record.test.ts +10 -0
  329. package/src/components/fan-out-record.ts +19 -0
  330. package/src/components/fan-out-run.ts +48 -0
  331. package/src/components/fan-out.ts +4 -0
  332. package/src/components/pr-pipeline.ts +67 -4
  333. package/src/components/pr-run.test.ts +127 -0
  334. package/src/components/pr-run.ts +32 -12
  335. package/src/components/promote.ts +68 -2
  336. package/src/components/release-compile.ts +17 -3
  337. package/src/components/release-gate.ts +18 -4
  338. package/src/components/wave-plan.ts +45 -2
  339. package/src/config.ts +8 -0
  340. package/src/flag-params.test.ts +144 -0
  341. package/src/flag-params.ts +134 -0
  342. package/src/lifecycle/__fixtures__/publish-fakes.ts +351 -0
  343. package/src/lifecycle/change-set-store.ts +2 -1
  344. package/src/lifecycle/delivery-metrics.ts +263 -0
  345. package/src/lifecycle/deploy-outcome.ts +147 -0
  346. package/src/lifecycle/gate-change-set.ts +37 -6
  347. package/src/lifecycle/gate-ledger.ts +2 -2
  348. package/src/lifecycle/git.ts +61 -8
  349. package/src/lifecycle/index.ts +4 -0
  350. package/src/lifecycle/mixed-environment.test.ts +97 -0
  351. package/src/lifecycle/mixed-environment.ts +204 -0
  352. package/src/lifecycle/publish-attachments.ts +196 -0
  353. package/src/lifecycle/publish-credentials.ts +84 -0
  354. package/src/lifecycle/publish-declaration.ts +95 -0
  355. package/src/lifecycle/publish-forge.ts +325 -0
  356. package/src/lifecycle/publish-npm.ts +259 -0
  357. package/src/lifecycle/publish-oci.ts +396 -0
  358. package/src/lifecycle/publish-record.ts +113 -0
  359. package/src/lifecycle/publish-resume.test.ts +168 -0
  360. package/src/lifecycle/publish-targets.test.ts +494 -0
  361. package/src/lifecycle/publish-targets.ts +100 -0
  362. package/src/lifecycle/release-cut.test.ts +74 -2
  363. package/src/lifecycle/release-cut.ts +158 -22
  364. package/src/lifecycle/release-flag.test.ts +112 -0
  365. package/src/lifecycle/release-join.test.ts +68 -0
  366. package/src/lifecycle/release-join.ts +182 -0
  367. package/src/lifecycle/release-ledger.ts +9 -3
  368. package/src/lifecycle/release-publish.test.ts +225 -0
  369. package/src/lifecycle/release-publish.ts +568 -0
  370. package/src/lifecycle/release-revocation.ts +147 -0
  371. package/src/lifecycle/release-store.ts +15 -4
  372. package/src/lifecycle/release-verify.test.ts +110 -0
  373. package/src/lifecycle/release-verify.ts +120 -0
  374. package/src/lifecycle/release-workstation.test.ts +204 -0
  375. package/src/lifecycle/release-workstation.ts +216 -0
  376. package/src/lifecycle/retention-growth.e2e.test.ts +279 -0
  377. package/src/lifecycle/retention-policy.ts +63 -0
  378. package/src/lifecycle/retention.test.ts +363 -0
  379. package/src/lifecycle/retention.ts +508 -0
  380. package/src/lifecycle/run-ledger.ts +7 -1
  381. package/src/op/activities/activity-contracts.ts +1 -0
  382. package/src/op/activities/shell.ts +7 -1
  383. package/src/op/local-executor.ts +27 -4
  384. package/src/op/runtime.ts +42 -0
  385. package/src/plan-summary.test.ts +20 -0
  386. package/src/plan-summary.ts +8 -1
  387. package/src/pr-forge.test.ts +25 -0
  388. package/src/pr-forge.ts +62 -0
  389. package/src/pr-loop.test.ts +13 -1
  390. package/src/pr-loop.ts +41 -4
  391. package/src/pr-report-url.test.ts +131 -0
  392. package/src/pr-report-url.ts +209 -0
  393. package/src/provenance.ts +2 -2
  394. package/src/run-event-store.ts +63 -3
  395. package/src/run-event-stream.ts +8 -4
  396. package/src/run-event.ts +38 -1
  397. package/src/workspace/__fixtures__/flag-workspace.ts +132 -0
  398. package/src/workspace/__fixtures__/older-records/change-set-984534ea9.json +100 -0
  399. package/src/workspace/__fixtures__/older-records/older-records.json +326 -0
  400. package/src/workspace/change-set.schema.json +5 -1
  401. package/src/workspace/check.schema.json +4 -2
  402. package/src/workspace/checks/records.ts +35 -1
  403. package/src/workspace/checks.ts +2 -1
  404. package/src/workspace/ci-green-forge.ts +2 -0
  405. package/src/workspace/ci-green.ts +20 -5
  406. package/src/workspace/ci-run.test.ts +416 -0
  407. package/src/workspace/ci-run.ts +571 -0
  408. package/src/workspace/ci-serve.test.ts +268 -0
  409. package/src/workspace/ci-serve.ts +521 -0
  410. package/src/workspace/declaration.schema.json +64 -0
  411. package/src/workspace/declaration.test.ts +28 -0
  412. package/src/workspace/declaration.ts +38 -0
  413. package/src/workspace/declared-kinds.ts +40 -1
  414. package/src/workspace/delivery-metrics.schema.json +519 -0
  415. package/src/workspace/delivery-metrics.test.ts +236 -0
  416. package/src/workspace/delivery-metrics.ts +286 -0
  417. package/src/workspace/flags-read.ts +121 -0
  418. package/src/workspace/flags.test.ts +141 -0
  419. package/src/workspace/flags.ts +157 -0
  420. package/src/workspace/graph-cli.ts +1 -1
  421. package/src/workspace/intent-cli.ts +46 -5
  422. package/src/workspace/intent-trace.test.ts +173 -0
  423. package/src/workspace/intent-trace.ts +484 -0
  424. package/src/workspace/intent.schema.json +702 -6
  425. package/src/workspace/intent.ts +148 -25
  426. package/src/workspace/older-records.test.ts +412 -0
  427. package/src/workspace/overlap.test.ts +165 -0
  428. package/src/workspace/overlap.ts +340 -0
  429. package/src/workspace/pr-report.schema.json +5 -0
  430. package/src/workspace/read-contract.e2e.test.ts +2 -1
  431. package/src/workspace/reason-codes.test.ts +5 -0
  432. package/src/workspace/reason-codes.ts +3 -0
  433. package/src/workspace/record-assets.test.ts +2 -1
  434. package/src/workspace/records-contract.e2e.test.ts +2 -1
  435. package/src/workspace/records.schema.json +21 -2
  436. package/src/workspace/records.ts +36 -2
  437. package/src/workspace/reference-kinds/flag/flag.kind.mjs +32 -0
  438. package/src/workspace/reference-kinds/flag/flag.schema.json +53 -0
  439. package/src/workspace/releases.schema.json +123 -1
  440. package/src/workspace/releases.ts +11 -0
  441. package/src/workspace/run-event.schema.json +24 -6
  442. package/src/workspace/status-contract.test.ts +29 -0
  443. package/src/workspace/status-gates.ts +8 -0
  444. package/src/workspace/status-mixed.test.ts +152 -0
  445. package/src/workspace/status-revoked.test.ts +153 -0
  446. package/src/workspace/status-stewards.ts +3 -0
  447. package/src/workspace/status.schema.json +210 -2
  448. package/src/workspace/status.ts +254 -3
  449. package/src/workspace/wip.ts +11 -2
@@ -16,6 +16,7 @@
16
16
  * runs. The level-0 goldens (#2526) fail if a level-0 command loads it.
17
17
  */
18
18
 
19
+ import { RETENTION_KINDS, type RetentionOverride } from "../lifecycle/retention-policy";
19
20
  import schema from "./declaration.schema.json" with { type: "json" };
20
21
  import { expandGlob } from "./glob";
21
22
  import { EXAMPLES_KIND, holdsChantProject } from "./kinds";
@@ -601,6 +602,19 @@ export interface Declaration {
601
602
  identity: IdentityPolicy | null;
602
603
  /** What the workspace's CI decides about its commits (#3573), or null when the declaration has no `ci` block. */
603
604
  ci: CiDeclaration | null;
605
+ /**
606
+ * The `retention` block as written (#4036): the kinds and fields it sets,
607
+ * which `resolveRetention` (../lifecycle/retention-policy.ts) lays over the
608
+ * defaults. Null when the declaration has no `retention` block.
609
+ */
610
+ retention: RetentionOverride | null;
611
+ /**
612
+ * The `metrics` block (#4039): `failureWindowDays`, the days after a deploy
613
+ * in which a revocation or a rollback counts it as failed, when set. Null
614
+ * when the declaration has no `metrics` block; `chant workspace metrics`
615
+ * then uses 7.
616
+ */
617
+ metrics: { failureWindowDays?: number } | null;
604
618
  /** The file, relative to the workspace root's tree (`chant.workspace.json` or `.jsonc`). */
605
619
  file: string;
606
620
  }
@@ -977,6 +991,8 @@ export function parseDeclaration(text: string, file: string, reader: string = re
977
991
  agents,
978
992
  identity: identityOf(obj.identity),
979
993
  ci,
994
+ retention: retentionOf(obj.retention),
995
+ metrics: metricsOf(obj.metrics),
980
996
  file,
981
997
  };
982
998
  written.set(declaration, raw);
@@ -1047,6 +1063,28 @@ function identityOf(raw: unknown): IdentityPolicy | null {
1047
1063
  * The `ci` block, already validated by the schema, with its defaults and the
1048
1064
  * rule the schema can't say (#3573): every phase `require` names is declared.
1049
1065
  */
1066
+ /** The `metrics` block, already validated by the schema, without its `x-` keys (#4039). */
1067
+ function metricsOf(raw: unknown): { failureWindowDays?: number } | null {
1068
+ if (!raw || typeof raw !== "object") return null;
1069
+ const days = (raw as { failureWindowDays?: unknown }).failureWindowDays;
1070
+ return typeof days === "number" ? { failureWindowDays: days } : {};
1071
+ }
1072
+
1073
+ /** The `retention` block, already validated by the schema, without its `x-` keys (#4036). */
1074
+ function retentionOf(raw: unknown): RetentionOverride | null {
1075
+ if (!raw || typeof raw !== "object") return null;
1076
+ const out: RetentionOverride = {};
1077
+ for (const kind of RETENTION_KINDS) {
1078
+ const k = (raw as Record<string, Record<string, unknown> | undefined>)[kind];
1079
+ if (!k) continue;
1080
+ out[kind] = {
1081
+ ...(typeof k.days === "number" ? { days: k.days } : {}),
1082
+ ...(typeof k.keep === "number" ? { keep: k.keep } : {}),
1083
+ };
1084
+ }
1085
+ return out;
1086
+ }
1087
+
1050
1088
  function ciOf(raw: unknown, at: (pointer: string, key?: boolean) => ErrorLocation): CiDeclaration | null {
1051
1089
  if (raw === undefined) return null;
1052
1090
  const block = raw as { green?: { branch: string; window?: string; phases: Record<string, string[] | { runs: string[]; skipped?: CiSkipped }>; require: string[]; signedSince?: string; source?: CiSource } };
@@ -43,6 +43,22 @@ export interface DeclaredKind {
43
43
  * and when its records can't be read (`records` reports why).
44
44
  */
45
45
  acceptance?: DeclaredAcceptance[];
46
+ /**
47
+ * For a flag kind (#4024), read with `flags: true`: each current flag
48
+ * record, with its `flag-stale` warning when it is due for removal. Absent
49
+ * for any other kind, when the kind wasn't loaded, and when its records
50
+ * can't be read (`records` reports why).
51
+ */
52
+ flags?: DeclaredFlag[];
53
+ }
54
+
55
+ /** One flag record, as `check` reads it for WSP118 (#4024). */
56
+ export interface DeclaredFlag {
57
+ flag: string;
58
+ /** The record file on disk, absolute. */
59
+ file: string;
60
+ /** The record's `flag-stale` warning, when the flag is due for removal; null otherwise. */
61
+ stale: string | null;
46
62
  }
47
63
 
48
64
  /** One work record's acceptance criteria, counted, as `ls`, `status` and `check` read them (#2772). */
@@ -72,7 +88,7 @@ export async function loadDeclaredKinds(
72
88
  declaration: Declaration,
73
89
  tree: WorkspaceTree,
74
90
  rootOnDisk: string,
75
- options: { load?: boolean; acceptance?: boolean; at?: string } = {},
91
+ options: { load?: boolean; acceptance?: boolean; flags?: boolean; at?: string } = {},
76
92
  ): Promise<DeclaredKind[]> {
77
93
  const declared = declaredRecordKinds(declaration);
78
94
  if (declared.length === 0) return [];
@@ -96,6 +112,10 @@ export async function loadDeclaredKinds(
96
112
  const counted = await countAcceptance(file, rootOnDisk, options.at);
97
113
  if (counted) entry.acceptance = counted;
98
114
  }
115
+ if (loaded.kind.flag && options.flags) {
116
+ const flags = await readFlags(file, rootOnDisk, options.at);
117
+ if (flags) entry.flags = flags;
118
+ }
99
119
  out.push(entry);
100
120
  } catch (err) {
101
121
  if (!(err instanceof records.RecordReadError)) throw err;
@@ -128,6 +148,25 @@ async function countAcceptance(file: string, rootOnDisk: string, at: string | un
128
148
  }
129
149
  }
130
150
 
151
+ /** A flag kind's current records with their stale warnings (#4024), or undefined when they can't be read. */
152
+ async function readFlags(file: string, rootOnDisk: string, at: string | undefined): Promise<DeclaredFlag[] | undefined> {
153
+ const { readRecordsFor } = await import("./records-cli");
154
+ const { RecordReadError } = await import("./records");
155
+ try {
156
+ const read = await readRecordsFor({ kind: file, cwd: rootOnDisk, current: true, ...(at !== undefined ? { at } : {}) });
157
+ return read.result.records
158
+ .filter((r): r is typeof r & { id: string } => r.id !== null)
159
+ .map((r) => ({
160
+ flag: r.id,
161
+ file: join(read.root, ...r.path.split("/")),
162
+ stale: r.warnings.find((w) => w.code === "flag-stale")?.message ?? null,
163
+ }));
164
+ } catch (err) {
165
+ if (err instanceof RecordReadError) return undefined;
166
+ throw err;
167
+ }
168
+ }
169
+
131
170
  /** An answer kind's points file (ws-058), read from `tree` and validated as `points ask` reads it. */
132
171
  async function checkPoints(abs: string, rootOnDisk: string, tree: WorkspaceTree): Promise<NonNullable<DeclaredKind["points"]>> {
133
172
  const file = relative(rootOnDisk, abs).split(sep).join("/");
@@ -0,0 +1,519 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://intentius.io/chant/schemas/workspace/delivery-metrics/v1/delivery-metrics.schema.json",
4
+ "title": "chant workspace metrics output",
5
+ "description": "What `chant workspace metrics --json` prints (#4039): the four DORA metrics (deployment frequency, lead time, change failure rate and time to restore) per member and environment, computed from the deploy records in <env>/releases.jsonl, the releases in _releases/, the release gate's resolutions and the counted ci/revoked/<sha> tags. It reads the local chant/lifecycle branch and local tags and never fetches. behold and a Grafana panel read the same numbers from it, and #3990's metrics contract can adopt it. Version 1 of the read contract. Readers ignore fields they do not know; a field is only ever added within a version. The codes are a closed list, each in the one closed list of `reason-codes.ts`. Contract version 1 of this document is written by chant 0.124.29 and newer; the read contract as a whole by chant 0.81.0 and newer.",
6
+ "oneOf": [
7
+ {
8
+ "$ref": "#/$defs/result"
9
+ },
10
+ {
11
+ "$ref": "#/$defs/failure"
12
+ }
13
+ ],
14
+ "$defs": {
15
+ "result": {
16
+ "type": "object",
17
+ "description": "Exit code 0, with or without deploys.",
18
+ "required": [
19
+ "$schema",
20
+ "contract",
21
+ "chant",
22
+ "workspace",
23
+ "lifecycle",
24
+ "window",
25
+ "failureWindowDays",
26
+ "members"
27
+ ],
28
+ "properties": {
29
+ "$schema": {
30
+ "const": "https://intentius.io/chant/schemas/workspace/delivery-metrics/v1/delivery-metrics.schema.json"
31
+ },
32
+ "contract": {
33
+ "const": 1
34
+ },
35
+ "chant": {
36
+ "type": "string"
37
+ },
38
+ "error": false,
39
+ "workspace": {
40
+ "description": "The workspace read, or null for a project outside a workspace, whose own ledger is read as one member with member null.",
41
+ "oneOf": [
42
+ {
43
+ "type": "null"
44
+ },
45
+ {
46
+ "type": "object",
47
+ "required": [
48
+ "name"
49
+ ],
50
+ "properties": {
51
+ "name": {
52
+ "type": "string"
53
+ }
54
+ }
55
+ }
56
+ ]
57
+ },
58
+ "lifecycle": {
59
+ "type": "object",
60
+ "description": "The branch read and its tip, null when the checkout has no chant/lifecycle branch.",
61
+ "required": [
62
+ "ref",
63
+ "commit"
64
+ ],
65
+ "properties": {
66
+ "ref": {
67
+ "const": "chant/lifecycle"
68
+ },
69
+ "commit": {
70
+ "type": [
71
+ "string",
72
+ "null"
73
+ ]
74
+ }
75
+ }
76
+ },
77
+ "window": {
78
+ "type": "object",
79
+ "description": "The span deploys are counted in, both ends inclusive. --since sets since; the default is 56 days (eight weeks) before until, which is now.",
80
+ "required": [
81
+ "since",
82
+ "until",
83
+ "days"
84
+ ],
85
+ "properties": {
86
+ "since": {
87
+ "type": "string",
88
+ "description": "ISO 8601."
89
+ },
90
+ "until": {
91
+ "type": "string",
92
+ "description": "ISO 8601."
93
+ },
94
+ "days": {
95
+ "type": "number",
96
+ "description": "The window's length in days, to two decimals."
97
+ }
98
+ }
99
+ },
100
+ "failureWindowDays": {
101
+ "type": "integer",
102
+ "minimum": 1,
103
+ "description": "The declaration's metrics.failureWindowDays, or 7. A deploy fails when, within this many days after it, the commit it deployed is revoked or the environment is rolled back from it."
104
+ },
105
+ "members": {
106
+ "type": "array",
107
+ "description": "Each member read, in declaration order. --member keeps only the members it names.",
108
+ "items": {
109
+ "$ref": "#/$defs/member"
110
+ }
111
+ }
112
+ }
113
+ },
114
+ "member": {
115
+ "type": "object",
116
+ "description": "One member's metrics.",
117
+ "required": [
118
+ "member",
119
+ "environments",
120
+ "reason"
121
+ ],
122
+ "properties": {
123
+ "member": {
124
+ "type": [
125
+ "string",
126
+ "null"
127
+ ],
128
+ "description": "The member's name, or null for a project outside a workspace."
129
+ },
130
+ "environments": {
131
+ "type": "array",
132
+ "description": "Each environment the member has a deploy ledger for, sorted by name. --env keeps only that one.",
133
+ "items": {
134
+ "$ref": "#/$defs/environment"
135
+ }
136
+ },
137
+ "reason": {
138
+ "description": "Null when everything was read. ledger-malformed when some deploy record lines or release files could not be read; the rest are counted. ledger-unreadable when the ledger could not be read, and environments is empty.",
139
+ "oneOf": [
140
+ {
141
+ "type": "null"
142
+ },
143
+ {
144
+ "type": "object",
145
+ "required": [
146
+ "code",
147
+ "message"
148
+ ],
149
+ "properties": {
150
+ "code": {
151
+ "enum": [
152
+ "ledger-unreadable",
153
+ "ledger-malformed"
154
+ ]
155
+ },
156
+ "message": {
157
+ "type": "string"
158
+ }
159
+ }
160
+ }
161
+ ]
162
+ }
163
+ }
164
+ },
165
+ "environment": {
166
+ "type": "object",
167
+ "description": "The four metrics of one member in one environment. A deploy is one deploy record: one component deployed once, by a promote, a run or a rollback. A redeploy is counted apart.",
168
+ "required": [
169
+ "env",
170
+ "deployments",
171
+ "leadTime",
172
+ "changeFailure",
173
+ "restore",
174
+ "failures"
175
+ ],
176
+ "properties": {
177
+ "env": {
178
+ "type": "string"
179
+ },
180
+ "deployments": {
181
+ "type": "object",
182
+ "description": "Deployment frequency.",
183
+ "required": [
184
+ "count",
185
+ "redeploys",
186
+ "runs",
187
+ "fromRelease",
188
+ "perWeek"
189
+ ],
190
+ "properties": {
191
+ "count": {
192
+ "type": "integer",
193
+ "minimum": 0,
194
+ "description": "Deploy records whose timestamp is in the window, leaving out redeploys. Rollbacks count."
195
+ },
196
+ "redeploys": {
197
+ "type": "integer",
198
+ "minimum": 0,
199
+ "description": "Redeploys in the window (records with redeploys set): they put the running release back, so they are counted here and in no other metric."
200
+ },
201
+ "runs": {
202
+ "type": "integer",
203
+ "minimum": 0,
204
+ "description": "Distinct runId values among them: a run that deploys several components counts once."
205
+ },
206
+ "fromRelease": {
207
+ "type": "integer",
208
+ "minimum": 0,
209
+ "description": "Of count, the deploys made from a release: the record names one in releaseDigest, or its release gate admission does."
210
+ },
211
+ "perWeek": {
212
+ "type": "number",
213
+ "minimum": 0,
214
+ "description": "count over the window's length in weeks, to two decimals."
215
+ }
216
+ }
217
+ },
218
+ "leadTime": {
219
+ "type": "object",
220
+ "description": "Lead time from commit to running release. A change is a release, timed at the first deploy record in this environment that names it, or a commit deployed from no release, timed at the first deploy record with that gitSha. Its lead time runs from the commit's committer time to that deploy. Only changes whose first deploy here is in the window count.",
221
+ "required": [
222
+ "changes",
223
+ "fromRelease",
224
+ "fromCommit",
225
+ "unknown",
226
+ "medianSeconds"
227
+ ],
228
+ "properties": {
229
+ "changes": {
230
+ "type": "integer",
231
+ "minimum": 0
232
+ },
233
+ "fromRelease": {
234
+ "type": "integer",
235
+ "minimum": 0,
236
+ "description": "Of changes, releases."
237
+ },
238
+ "fromCommit": {
239
+ "type": "integer",
240
+ "minimum": 0,
241
+ "description": "Of changes, commits deployed from no release."
242
+ },
243
+ "unknown": {
244
+ "type": "integer",
245
+ "minimum": 0,
246
+ "description": "Changes left out because their commit is not in this repository."
247
+ },
248
+ "medianSeconds": {
249
+ "type": [
250
+ "integer",
251
+ "null"
252
+ ],
253
+ "minimum": 0,
254
+ "description": "The median lead time, or null when changes is 0."
255
+ }
256
+ }
257
+ },
258
+ "changeFailure": {
259
+ "type": "object",
260
+ "description": "Change failure rate.",
261
+ "required": [
262
+ "deployments",
263
+ "failed",
264
+ "revoked",
265
+ "rolledBack",
266
+ "rate"
267
+ ],
268
+ "properties": {
269
+ "deployments": {
270
+ "type": "integer",
271
+ "minimum": 0,
272
+ "description": "The same as deployments.count."
273
+ },
274
+ "failed": {
275
+ "type": "integer",
276
+ "minimum": 0,
277
+ "description": "Deploys in the window that failed: the commit they deployed (a release's commit, or the record's gitSha for a deploy made from no release) carries a counted ci/revoked tag made no later than failureWindowDays after the deploy, or the environment was rolled back from them within failureWindowDays. A revoked tag with no time counts whenever it was made."
278
+ },
279
+ "revoked": {
280
+ "type": "integer",
281
+ "minimum": 0,
282
+ "description": "Of failed, those whose commit was revoked."
283
+ },
284
+ "rolledBack": {
285
+ "type": "integer",
286
+ "minimum": 0,
287
+ "description": "Of failed, those rolled back from: the next deploy record of the same component in the environment, leaving out redeploys, is a rollback."
288
+ },
289
+ "rate": {
290
+ "type": [
291
+ "number",
292
+ "null"
293
+ ],
294
+ "minimum": 0,
295
+ "maximum": 1,
296
+ "description": "failed over deployments, to four decimals, or null with no deployments."
297
+ }
298
+ }
299
+ },
300
+ "restore": {
301
+ "type": "object",
302
+ "description": "Time to restore. A failed deploy is restored by the next deploy record of the same component in the environment, leaving out redeploys, whose commit is not revoked.",
303
+ "required": [
304
+ "restored",
305
+ "open",
306
+ "medianSeconds"
307
+ ],
308
+ "properties": {
309
+ "restored": {
310
+ "type": "integer",
311
+ "minimum": 0
312
+ },
313
+ "open": {
314
+ "type": "integer",
315
+ "minimum": 0,
316
+ "description": "Failed deploys with no restore yet."
317
+ },
318
+ "medianSeconds": {
319
+ "type": [
320
+ "integer",
321
+ "null"
322
+ ],
323
+ "minimum": 0,
324
+ "description": "The median time from a failed deploy to its restore, or null when none is restored."
325
+ }
326
+ }
327
+ },
328
+ "failures": {
329
+ "type": "array",
330
+ "description": "Each failed deploy in the window, oldest first.",
331
+ "items": {
332
+ "$ref": "#/$defs/failure-entry"
333
+ }
334
+ }
335
+ }
336
+ },
337
+ "failure-entry": {
338
+ "type": "object",
339
+ "description": "One failed deploy.",
340
+ "required": [
341
+ "component",
342
+ "timestamp",
343
+ "runId",
344
+ "releaseDigest",
345
+ "label",
346
+ "commit",
347
+ "causes",
348
+ "revoked",
349
+ "rolledBackBy",
350
+ "restoredBy",
351
+ "restoreSeconds"
352
+ ],
353
+ "properties": {
354
+ "component": {
355
+ "type": "string"
356
+ },
357
+ "timestamp": {
358
+ "type": "string"
359
+ },
360
+ "runId": {
361
+ "type": "string"
362
+ },
363
+ "releaseDigest": {
364
+ "type": [
365
+ "string",
366
+ "null"
367
+ ],
368
+ "description": "The release it deployed, or null for a deploy made from no release."
369
+ },
370
+ "label": {
371
+ "type": [
372
+ "string",
373
+ "null"
374
+ ],
375
+ "description": "That release's label, or null."
376
+ },
377
+ "commit": {
378
+ "type": "string",
379
+ "description": "The commit it deployed."
380
+ },
381
+ "causes": {
382
+ "type": "array",
383
+ "minItems": 1,
384
+ "items": {
385
+ "enum": [
386
+ "revoked",
387
+ "rolled-back"
388
+ ]
389
+ }
390
+ },
391
+ "revoked": {
392
+ "description": "The counted revoked tag on the commit, when revoked is a cause, else null.",
393
+ "oneOf": [
394
+ {
395
+ "type": "null"
396
+ },
397
+ {
398
+ "type": "object",
399
+ "required": [
400
+ "tag",
401
+ "tagged"
402
+ ],
403
+ "properties": {
404
+ "tag": {
405
+ "type": "string"
406
+ },
407
+ "tagged": {
408
+ "type": [
409
+ "string",
410
+ "null"
411
+ ],
412
+ "description": "When the tag was made, or null for a lightweight tag."
413
+ }
414
+ }
415
+ }
416
+ ]
417
+ },
418
+ "rolledBackBy": {
419
+ "oneOf": [
420
+ {
421
+ "type": "null"
422
+ },
423
+ {
424
+ "type": "object",
425
+ "required": [
426
+ "runId",
427
+ "timestamp"
428
+ ],
429
+ "properties": {
430
+ "runId": {
431
+ "type": "string"
432
+ },
433
+ "timestamp": {
434
+ "type": "string"
435
+ }
436
+ }
437
+ }
438
+ ],
439
+ "description": "The rollback record, named by runId and timestamp, when rolled-back is a cause, else null."
440
+ },
441
+ "restoredBy": {
442
+ "oneOf": [
443
+ {
444
+ "type": "null"
445
+ },
446
+ {
447
+ "type": "object",
448
+ "required": [
449
+ "runId",
450
+ "timestamp"
451
+ ],
452
+ "properties": {
453
+ "runId": {
454
+ "type": "string"
455
+ },
456
+ "timestamp": {
457
+ "type": "string"
458
+ }
459
+ }
460
+ }
461
+ ],
462
+ "description": "The deploy record that restored it, or null while it is not restored."
463
+ },
464
+ "restoreSeconds": {
465
+ "type": [
466
+ "integer",
467
+ "null"
468
+ ],
469
+ "minimum": 0
470
+ }
471
+ }
472
+ },
473
+ "failure": {
474
+ "type": "object",
475
+ "description": "Nothing was read. Exit code 1.",
476
+ "required": [
477
+ "$schema",
478
+ "contract",
479
+ "chant",
480
+ "error"
481
+ ],
482
+ "properties": {
483
+ "$schema": {
484
+ "const": "https://intentius.io/chant/schemas/workspace/delivery-metrics/v1/delivery-metrics.schema.json"
485
+ },
486
+ "contract": {
487
+ "const": 1
488
+ },
489
+ "chant": {
490
+ "type": "string"
491
+ },
492
+ "error": {
493
+ "type": "object",
494
+ "required": [
495
+ "code",
496
+ "message"
497
+ ],
498
+ "properties": {
499
+ "code": {
500
+ "enum": [
501
+ "declaration-ambiguous",
502
+ "declaration-unparseable",
503
+ "declaration-invalid",
504
+ "placement-invalid",
505
+ "reader-too-old",
506
+ "root-chant-required",
507
+ "not-a-git-repository",
508
+ "environment-invalid"
509
+ ]
510
+ },
511
+ "message": {
512
+ "type": "string"
513
+ }
514
+ }
515
+ }
516
+ }
517
+ }
518
+ }
519
+ }