@intentius/chant 0.102.0 → 0.104.1

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 (471) hide show
  1. package/dist/audit/core.d.ts +2 -0
  2. package/dist/audit/core.d.ts.map +1 -1
  3. package/dist/audit/discover.d.ts.map +1 -1
  4. package/dist/change-set.d.ts +232 -0
  5. package/dist/change-set.d.ts.map +1 -0
  6. package/dist/cli/commands/audit.d.ts +7 -0
  7. package/dist/cli/commands/audit.d.ts.map +1 -1
  8. package/dist/cli/commands/build.d.ts.map +1 -1
  9. package/dist/cli/handlers/build.d.ts.map +1 -1
  10. package/dist/cli/handlers/change-set.d.ts +11 -0
  11. package/dist/cli/handlers/change-set.d.ts.map +1 -0
  12. package/dist/cli/handlers/fan-out.d.ts +33 -0
  13. package/dist/cli/handlers/fan-out.d.ts.map +1 -1
  14. package/dist/cli/handlers/operator.d.ts +7 -0
  15. package/dist/cli/handlers/operator.d.ts.map +1 -1
  16. package/dist/cli/handlers/pr.d.ts +31 -0
  17. package/dist/cli/handlers/pr.d.ts.map +1 -0
  18. package/dist/cli/handlers/run.d.ts.map +1 -1
  19. package/dist/cli/main.d.ts.map +1 -1
  20. package/dist/cli/mcp/op-tools.d.ts.map +1 -1
  21. package/dist/cli/mcp/workspace-tools.d.ts +3 -2
  22. package/dist/cli/mcp/workspace-tools.d.ts.map +1 -1
  23. package/dist/cli/registry.d.ts +63 -1
  24. package/dist/cli/registry.d.ts.map +1 -1
  25. package/dist/components/auto-release.d.ts +16 -0
  26. package/dist/components/auto-release.d.ts.map +1 -1
  27. package/dist/components/capability.d.ts +53 -0
  28. package/dist/components/capability.d.ts.map +1 -1
  29. package/dist/components/changed-files.d.ts +31 -0
  30. package/dist/components/changed-files.d.ts.map +1 -0
  31. package/dist/components/cli-support.d.ts +9 -1
  32. package/dist/components/cli-support.d.ts.map +1 -1
  33. package/dist/components/component.d.ts +24 -0
  34. package/dist/components/component.d.ts.map +1 -1
  35. package/dist/components/deploy-units.d.ts.map +1 -1
  36. package/dist/components/driver.d.ts +13 -0
  37. package/dist/components/driver.d.ts.map +1 -1
  38. package/dist/components/fan-out-output.d.ts +6 -0
  39. package/dist/components/fan-out-output.d.ts.map +1 -1
  40. package/dist/components/fan-out-record.d.ts +41 -0
  41. package/dist/components/fan-out-record.d.ts.map +1 -0
  42. package/dist/components/fan-out-run.d.ts +65 -0
  43. package/dist/components/fan-out-run.d.ts.map +1 -1
  44. package/dist/components/fan-out-support.d.ts +2 -0
  45. package/dist/components/fan-out-support.d.ts.map +1 -1
  46. package/dist/components/fan-out.d.ts +6 -0
  47. package/dist/components/fan-out.d.ts.map +1 -1
  48. package/dist/components/gated-wave-pipeline.d.ts +50 -0
  49. package/dist/components/gated-wave-pipeline.d.ts.map +1 -0
  50. package/dist/components/index.d.ts +1 -1
  51. package/dist/components/index.d.ts.map +1 -1
  52. package/dist/components/layers.d.ts +25 -0
  53. package/dist/components/layers.d.ts.map +1 -0
  54. package/dist/components/pr-pipeline.d.ts +61 -0
  55. package/dist/components/pr-pipeline.d.ts.map +1 -0
  56. package/dist/components/pr-run.d.ts +119 -0
  57. package/dist/components/pr-run.d.ts.map +1 -0
  58. package/dist/components/promote.d.ts.map +1 -1
  59. package/dist/components/verbs/shell.d.ts.map +1 -1
  60. package/dist/components/wave-plan.d.ts +49 -0
  61. package/dist/components/wave-plan.d.ts.map +1 -0
  62. package/dist/gated-waves.d.ts +147 -0
  63. package/dist/gated-waves.d.ts.map +1 -0
  64. package/dist/index.d.ts +1 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/lexicon.d.ts +48 -0
  67. package/dist/lexicon.d.ts.map +1 -1
  68. package/dist/lifecycle/gate-ledger.d.ts +7 -0
  69. package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
  70. package/dist/lifecycle/git.d.ts +46 -1
  71. package/dist/lifecycle/git.d.ts.map +1 -1
  72. package/dist/lint/post-synth.d.ts +18 -0
  73. package/dist/lint/post-synth.d.ts.map +1 -1
  74. package/dist/op/activities/activity-contracts.d.ts +126 -0
  75. package/dist/op/activities/activity-contracts.d.ts.map +1 -1
  76. package/dist/op/activities/change-set.d.ts +62 -0
  77. package/dist/op/activities/change-set.d.ts.map +1 -0
  78. package/dist/op/activities/decide.d.ts +2 -0
  79. package/dist/op/activities/decide.d.ts.map +1 -1
  80. package/dist/op/activities/factory.d.ts +137 -0
  81. package/dist/op/activities/factory.d.ts.map +1 -0
  82. package/dist/op/activities/index.d.ts +4 -0
  83. package/dist/op/activities/index.d.ts.map +1 -1
  84. package/dist/op/activity-contract.d.ts.map +1 -1
  85. package/dist/op/builders.d.ts +11 -0
  86. package/dist/op/builders.d.ts.map +1 -1
  87. package/dist/op/decide-backend.d.ts +5 -1
  88. package/dist/op/decide-backend.d.ts.map +1 -1
  89. package/dist/op/decide-read-inputs.d.ts +4 -2
  90. package/dist/op/decide-read-inputs.d.ts.map +1 -1
  91. package/dist/op/factory.d.ts +83 -0
  92. package/dist/op/factory.d.ts.map +1 -0
  93. package/dist/op/index.d.ts +4 -1
  94. package/dist/op/index.d.ts.map +1 -1
  95. package/dist/op/op-ir.d.ts +2 -0
  96. package/dist/op/op-ir.d.ts.map +1 -1
  97. package/dist/op/op-verb-class.d.ts.map +1 -1
  98. package/dist/op/types.d.ts +8 -0
  99. package/dist/op/types.d.ts.map +1 -1
  100. package/dist/op/work-lease-run.d.ts.map +1 -1
  101. package/dist/plan-summary.d.ts +207 -0
  102. package/dist/plan-summary.d.ts.map +1 -0
  103. package/dist/pr-forge.d.ts +105 -0
  104. package/dist/pr-forge.d.ts.map +1 -0
  105. package/dist/pr-loop.d.ts +178 -0
  106. package/dist/pr-loop.d.ts.map +1 -0
  107. package/dist/telemetry-attribution.d.ts +31 -0
  108. package/dist/telemetry-attribution.d.ts.map +1 -1
  109. package/dist/terraform/hcl2json.d.ts +45 -0
  110. package/dist/terraform/hcl2json.d.ts.map +1 -0
  111. package/dist/terraform/parse.d.ts +4 -40
  112. package/dist/terraform/parse.d.ts.map +1 -1
  113. package/dist/vendor/js-yaml-load.d.ts +56 -0
  114. package/dist/vendor/js-yaml-load.d.ts.map +1 -0
  115. package/dist/workspace/box-cli.d.ts +12 -0
  116. package/dist/workspace/box-cli.d.ts.map +1 -0
  117. package/dist/workspace/box-factory.d.ts +27 -3
  118. package/dist/workspace/box-factory.d.ts.map +1 -1
  119. package/dist/workspace/box-listing.d.ts +85 -0
  120. package/dist/workspace/box-listing.d.ts.map +1 -0
  121. package/dist/workspace/box-publish.d.ts +147 -0
  122. package/dist/workspace/box-publish.d.ts.map +1 -0
  123. package/dist/workspace/broker-protocol.d.ts +190 -0
  124. package/dist/workspace/broker-protocol.d.ts.map +1 -0
  125. package/dist/workspace/checks.d.ts.map +1 -1
  126. package/dist/workspace/composites.d.ts +2 -2
  127. package/dist/workspace/composites.d.ts.map +1 -1
  128. package/dist/workspace/conformance/__fixtures__/reference-broker.d.ts +17 -0
  129. package/dist/workspace/conformance/__fixtures__/reference-broker.d.ts.map +1 -0
  130. package/dist/workspace/conformance/broker.d.ts +202 -0
  131. package/dist/workspace/conformance/broker.d.ts.map +1 -0
  132. package/dist/workspace/conformance/index.d.ts +2 -1
  133. package/dist/workspace/conformance/index.d.ts.map +1 -1
  134. package/dist/workspace/conformance/vitest.d.ts +9 -2
  135. package/dist/workspace/conformance/vitest.d.ts.map +1 -1
  136. package/dist/workspace/conformance/writer.d.ts +108 -14
  137. package/dist/workspace/conformance/writer.d.ts.map +1 -1
  138. package/dist/workspace/decide.d.ts +126 -12
  139. package/dist/workspace/decide.d.ts.map +1 -1
  140. package/dist/workspace/decision-points.schema.json +11 -4
  141. package/dist/workspace/declaration.d.ts +65 -0
  142. package/dist/workspace/declaration.d.ts.map +1 -1
  143. package/dist/workspace/declaration.schema.json +153 -4
  144. package/dist/workspace/environments.d.ts +36 -10
  145. package/dist/workspace/environments.d.ts.map +1 -1
  146. package/dist/workspace/factory-rules.d.ts +180 -0
  147. package/dist/workspace/factory-rules.d.ts.map +1 -0
  148. package/dist/workspace/init.d.ts +21 -0
  149. package/dist/workspace/init.d.ts.map +1 -1
  150. package/dist/workspace/intent-cli.d.ts +1 -1
  151. package/dist/workspace/intent-cli.d.ts.map +1 -1
  152. package/dist/workspace/intent-record.d.ts +28 -1
  153. package/dist/workspace/intent-record.d.ts.map +1 -1
  154. package/dist/workspace/intent.d.ts +102 -5
  155. package/dist/workspace/intent.d.ts.map +1 -1
  156. package/dist/workspace/json-edit.d.ts +24 -0
  157. package/dist/workspace/json-edit.d.ts.map +1 -0
  158. package/dist/workspace/jsonc.d.ts +11 -0
  159. package/dist/workspace/jsonc.d.ts.map +1 -1
  160. package/dist/workspace/kinds.d.ts +48 -0
  161. package/dist/workspace/kinds.d.ts.map +1 -1
  162. package/dist/workspace/lexicon-symbols.d.ts +29 -0
  163. package/dist/workspace/lexicon-symbols.d.ts.map +1 -0
  164. package/dist/workspace/lineage-upgrade.d.ts +31 -2
  165. package/dist/workspace/lineage-upgrade.d.ts.map +1 -1
  166. package/dist/workspace/point-answer.schema.json +42 -2
  167. package/dist/workspace/points-cli.d.ts +10 -3
  168. package/dist/workspace/points-cli.d.ts.map +1 -1
  169. package/dist/workspace/points.d.ts +66 -5
  170. package/dist/workspace/points.d.ts.map +1 -1
  171. package/dist/workspace/reason-codes.d.ts +33 -4
  172. package/dist/workspace/reason-codes.d.ts.map +1 -1
  173. package/dist/workspace/record-sessions.d.ts +5 -7
  174. package/dist/workspace/record-sessions.d.ts.map +1 -1
  175. package/dist/workspace/records-cli.d.ts +7 -0
  176. package/dist/workspace/records-cli.d.ts.map +1 -1
  177. package/dist/workspace/records-close.d.ts +7 -3
  178. package/dist/workspace/records-close.d.ts.map +1 -1
  179. package/dist/workspace/records-write.d.ts +66 -6
  180. package/dist/workspace/records-write.d.ts.map +1 -1
  181. package/dist/workspace/records.d.ts +28 -9
  182. package/dist/workspace/records.d.ts.map +1 -1
  183. package/dist/workspace/runs-cli.d.ts +138 -6
  184. package/dist/workspace/runs-cli.d.ts.map +1 -1
  185. package/dist/workspace/runs.d.ts +132 -11
  186. package/dist/workspace/runs.d.ts.map +1 -1
  187. package/dist/workspace/session-kinds.d.ts +1 -1
  188. package/dist/workspace/session-kinds.d.ts.map +1 -1
  189. package/dist/workspace/squash.d.ts +80 -0
  190. package/dist/workspace/squash.d.ts.map +1 -0
  191. package/dist/workspace/status-gates.d.ts +2 -0
  192. package/dist/workspace/status-gates.d.ts.map +1 -1
  193. package/dist/workspace/status.d.ts +54 -0
  194. package/dist/workspace/status.d.ts.map +1 -1
  195. package/dist/workspace/symbols.d.ts +16 -5
  196. package/dist/workspace/symbols.d.ts.map +1 -1
  197. package/dist/workspace/trust/run-commits.d.ts +46 -0
  198. package/dist/workspace/trust/run-commits.d.ts.map +1 -0
  199. package/dist/workspace/trust/run-statement.d.ts +128 -0
  200. package/dist/workspace/trust/run-statement.d.ts.map +1 -0
  201. package/dist/workspace/trust/seal.d.ts +6 -1
  202. package/dist/workspace/trust/seal.d.ts.map +1 -1
  203. package/dist/workspace/trust/verify-cli.d.ts +1 -1
  204. package/dist/workspace/trust/verify.d.ts +16 -2
  205. package/dist/workspace/trust/verify.d.ts.map +1 -1
  206. package/dist/workspace/wip-cli.d.ts +21 -0
  207. package/dist/workspace/wip-cli.d.ts.map +1 -0
  208. package/dist/workspace/wip.d.ts +268 -0
  209. package/dist/workspace/wip.d.ts.map +1 -0
  210. package/dist/workspace/work-cli.d.ts.map +1 -1
  211. package/dist/workspace/work-evidence.d.ts +1 -1
  212. package/dist/workspace/work-evidence.d.ts.map +1 -1
  213. package/dist/workspace/work-size.d.ts +55 -0
  214. package/dist/workspace/work-size.d.ts.map +1 -0
  215. package/dist/workspace/workspace-kinds.schema.json +122 -0
  216. package/dist/workspace/write-lock-cli.d.ts +60 -0
  217. package/dist/workspace/write-lock-cli.d.ts.map +1 -0
  218. package/dist/workspace/write-lock.d.ts +152 -0
  219. package/dist/workspace/write-lock.d.ts.map +1 -0
  220. package/dist/workspace/write-scope.d.ts +6 -2
  221. package/dist/workspace/write-scope.d.ts.map +1 -1
  222. package/dist/yaml.d.ts +1 -1
  223. package/dist/yaml.d.ts.map +1 -1
  224. package/package.json +6 -1
  225. package/src/__fixtures__/change-set/lifecycle-plan.floci.json +59 -0
  226. package/src/__fixtures__/change-set/lifecycle-v1.ts.txt +4 -0
  227. package/src/__fixtures__/change-set/lifecycle-v2.ts.txt +4 -0
  228. package/src/__fixtures__/change-set/lifecycle.change-set.golden.json +95 -0
  229. package/src/__fixtures__/change-set/warden.change-set.golden.json +106 -0
  230. package/src/__fixtures__/change-set/warden.plan.json +44 -0
  231. package/src/__fixtures__/plan-summary/normalization-vectors.json +1593 -0
  232. package/src/__fixtures__/pr-loop/pr-apply-applied.note.golden.md +31 -0
  233. package/src/__fixtures__/pr-loop/pr-apply-refused.note.golden.md +31 -0
  234. package/src/__fixtures__/pr-loop/pr-plan.golden.json +127 -0
  235. package/src/__fixtures__/pr-loop/pr-plan.note.golden.md +37 -0
  236. package/src/audit/core.test.ts +15 -0
  237. package/src/audit/core.ts +8 -2
  238. package/src/audit/discover.test.ts +11 -0
  239. package/src/audit/discover.ts +7 -2
  240. package/src/change-set-bundle.test.ts +57 -0
  241. package/src/change-set.test.ts +215 -0
  242. package/src/change-set.ts +445 -0
  243. package/src/cli/commands/audit-opt-in.test.ts +54 -0
  244. package/src/cli/commands/audit.ts +29 -2
  245. package/src/cli/commands/build.test.ts +19 -0
  246. package/src/cli/commands/build.ts +3 -2
  247. package/src/cli/handlers/build.ts +13 -1
  248. package/src/cli/handlers/change-set.test.ts +56 -0
  249. package/src/cli/handlers/change-set.ts +44 -0
  250. package/src/cli/handlers/fan-out.test.ts +221 -2
  251. package/src/cli/handlers/fan-out.ts +165 -75
  252. package/src/cli/handlers/graph.ts +3 -0
  253. package/src/cli/handlers/operator.test.ts +21 -0
  254. package/src/cli/handlers/operator.ts +34 -3
  255. package/src/cli/handlers/pr.ts +373 -0
  256. package/src/cli/handlers/run.ts +1 -0
  257. package/src/cli/main.test.ts +20 -0
  258. package/src/cli/main.ts +185 -23
  259. package/src/cli/mcp/never-over-mcp.test.ts +101 -0
  260. package/src/cli/mcp/op-tools.ts +24 -2
  261. package/src/cli/mcp/workspace-tools.test.ts +1 -1
  262. package/src/cli/mcp/workspace-tools.ts +34 -6
  263. package/src/cli/registry.ts +63 -1
  264. package/src/components/auto-release.ts +1 -1
  265. package/src/components/capability.ts +55 -0
  266. package/src/components/changed-files.ts +66 -0
  267. package/src/components/cli-support.ts +28 -5
  268. package/src/components/component.schema.json +17 -0
  269. package/src/components/component.ts +25 -0
  270. package/src/components/deploy-units.ts +3 -0
  271. package/src/components/driver.test.ts +52 -0
  272. package/src/components/driver.ts +31 -13
  273. package/src/components/fan-out-output.ts +42 -1
  274. package/src/components/fan-out-record.ts +69 -0
  275. package/src/components/fan-out-run.test.ts +17 -0
  276. package/src/components/fan-out-run.ts +304 -1
  277. package/src/components/fan-out-support.ts +3 -0
  278. package/src/components/fan-out-waves.test.ts +375 -0
  279. package/src/components/fan-out.ts +18 -17
  280. package/src/components/gated-wave-pipeline.ts +82 -0
  281. package/src/components/index.ts +1 -0
  282. package/src/components/layers.ts +30 -0
  283. package/src/components/pr-pipeline.ts +91 -0
  284. package/src/components/pr-run.test.ts +205 -0
  285. package/src/components/pr-run.ts +280 -0
  286. package/src/components/promote.ts +5 -0
  287. package/src/components/verbs/shell.test.ts +11 -0
  288. package/src/components/verbs/shell.ts +7 -3
  289. package/src/components/wave-plan.ts +124 -0
  290. package/src/discovery/sandbox/bundle.ts +1 -1
  291. package/src/gated-waves-bundle.test.ts +62 -0
  292. package/src/gated-waves.test.ts +118 -0
  293. package/src/gated-waves.ts +240 -0
  294. package/src/index.ts +1 -0
  295. package/src/lexicon.ts +51 -0
  296. package/src/lifecycle/gate-ledger.ts +7 -0
  297. package/src/lifecycle/git.ts +102 -16
  298. package/src/lint/post-synth.test.ts +19 -0
  299. package/src/lint/post-synth.ts +19 -1
  300. package/src/meta/declared-imports.test.ts +1 -1
  301. package/src/op/activities/activity-contracts.ts +84 -0
  302. package/src/op/activities/change-set.ts +114 -0
  303. package/src/op/activities/decide.ts +3 -0
  304. package/src/op/activities/factory.ts +675 -0
  305. package/src/op/activities/index.ts +6 -0
  306. package/src/op/activity-contract.test.ts +21 -1
  307. package/src/op/activity-contract.ts +19 -9
  308. package/src/op/builders.ts +23 -0
  309. package/src/op/decide-backend.ts +5 -1
  310. package/src/op/decide-read-inputs.ts +33 -5
  311. package/src/op/factory.e2e.test.ts +232 -0
  312. package/src/op/factory.ts +118 -0
  313. package/src/op/index.ts +9 -1
  314. package/src/op/op-ir.test.ts +9 -0
  315. package/src/op/op-ir.ts +4 -0
  316. package/src/op/op-verb-class.ts +3 -0
  317. package/src/op/types.ts +8 -0
  318. package/src/op/work-lease-run.ts +3 -0
  319. package/src/plan-summary.test.ts +263 -0
  320. package/src/plan-summary.ts +845 -0
  321. package/src/pr-forge.test.ts +237 -0
  322. package/src/pr-forge.ts +332 -0
  323. package/src/pr-loop-bundle.test.ts +46 -0
  324. package/src/pr-loop.test.ts +171 -0
  325. package/src/pr-loop.ts +324 -0
  326. package/src/telemetry-attribution.test.ts +23 -1
  327. package/src/telemetry-attribution.ts +51 -0
  328. package/src/terraform/hcl2json.test.ts +21 -0
  329. package/src/terraform/hcl2json.ts +81 -0
  330. package/src/terraform/parse.ts +11 -74
  331. package/src/vendor/js-yaml-load.test.ts +115 -0
  332. package/src/vendor/js-yaml-load.ts +1939 -0
  333. package/src/workspace/__fixtures__/studio-template-84c8b21.json +1 -1
  334. package/src/workspace/app-kind.test.ts +196 -0
  335. package/src/workspace/box-cli.ts +113 -0
  336. package/src/workspace/box-factory.test.ts +4 -1
  337. package/src/workspace/box-factory.ts +37 -4
  338. package/src/workspace/box-listing-write.schema.json +204 -0
  339. package/src/workspace/box-listing.test.ts +234 -0
  340. package/src/workspace/box-listing.ts +324 -0
  341. package/src/workspace/box-publish.schema.json +498 -0
  342. package/src/workspace/box-publish.test.ts +204 -0
  343. package/src/workspace/box-publish.ts +420 -0
  344. package/src/workspace/box-ship.test.ts +96 -0
  345. package/src/workspace/broker-protocol.schema.json +186 -0
  346. package/src/workspace/broker-protocol.test.ts +122 -0
  347. package/src/workspace/broker-protocol.ts +317 -0
  348. package/src/workspace/builder-tiers.test.ts +146 -0
  349. package/src/workspace/change-set.schema.json +460 -0
  350. package/src/workspace/chant-migrations.e2e.test.ts +17 -5
  351. package/src/workspace/checks/boxes.test.ts +3 -0
  352. package/src/workspace/checks.ts +10 -3
  353. package/src/workspace/component-environments.test.ts +105 -0
  354. package/src/workspace/composites.schema.json +23 -4
  355. package/src/workspace/composites.test.ts +8 -8
  356. package/src/workspace/composites.ts +13 -2
  357. package/src/workspace/conformance/__fixture__/decisions/decision.schema.json +2 -2
  358. package/src/workspace/conformance/__fixtures__/reference-broker.ts +207 -0
  359. package/src/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +7 -2
  360. package/src/workspace/conformance/__writer_fixture__/answers/answer.schema.json +42 -2
  361. package/src/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  362. package/src/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  363. package/src/workspace/conformance/__writer_fixture__/decisions/points.json +96 -0
  364. package/src/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  365. package/src/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  366. package/src/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +14 -8
  367. package/src/workspace/conformance/__writer_fixture__/sessions/session.schema.json +187 -6
  368. package/src/workspace/conformance/__writer_fixture__/work/work.schema.json +25 -0
  369. package/src/workspace/conformance/broker.test.ts +122 -0
  370. package/src/workspace/conformance/broker.ts +792 -0
  371. package/src/workspace/conformance/conformance.e2e.test.ts +2 -1
  372. package/src/workspace/conformance/index.mjs +22 -1
  373. package/src/workspace/conformance/index.ts +5 -1
  374. package/src/workspace/conformance/vitest.ts +33 -1
  375. package/src/workspace/conformance/writer-conformance.e2e.test.ts +49 -3
  376. package/src/workspace/conformance/writer.test.ts +32 -2
  377. package/src/workspace/conformance/writer.ts +339 -28
  378. package/src/workspace/decide.test.ts +208 -4
  379. package/src/workspace/decide.ts +427 -73
  380. package/src/workspace/decision-points.schema.json +11 -4
  381. package/src/workspace/declaration.schema.json +153 -4
  382. package/src/workspace/declaration.ts +141 -0
  383. package/src/workspace/environments.ts +66 -14
  384. package/src/workspace/factory-rules.test.ts +62 -0
  385. package/src/workspace/factory-rules.ts +218 -0
  386. package/src/workspace/graph-cli.ts +2 -2
  387. package/src/workspace/graph.schema.json +67 -0
  388. package/src/workspace/identity.test.ts +23 -0
  389. package/src/workspace/init.ts +82 -2
  390. package/src/workspace/intent-cli.ts +26 -9
  391. package/src/workspace/intent-patch-id.test.ts +162 -0
  392. package/src/workspace/intent-record.schema.json +130 -3
  393. package/src/workspace/intent-record.ts +74 -28
  394. package/src/workspace/intent-reviews.test.ts +76 -0
  395. package/src/workspace/intent-squash.test.ts +213 -0
  396. package/src/workspace/intent-why.test.ts +5 -5
  397. package/src/workspace/intent.schema.json +234 -4
  398. package/src/workspace/intent.ts +260 -66
  399. package/src/workspace/json-edit.test.ts +121 -0
  400. package/src/workspace/json-edit.ts +142 -0
  401. package/src/workspace/jsonc.ts +20 -0
  402. package/src/workspace/kinds.ts +157 -2
  403. package/src/workspace/lexicon-symbols.test.ts +148 -0
  404. package/src/workspace/lexicon-symbols.ts +125 -0
  405. package/src/workspace/lineage-upgrade.test.ts +63 -0
  406. package/src/workspace/lineage-upgrade.ts +146 -5
  407. package/src/workspace/plan-summary.schema.json +155 -0
  408. package/src/workspace/point-answer.schema.json +42 -2
  409. package/src/workspace/points-cli.ts +42 -16
  410. package/src/workspace/points-write.schema.json +162 -4
  411. package/src/workspace/points.schema.json +157 -2
  412. package/src/workspace/points.test.ts +13 -1
  413. package/src/workspace/points.ts +118 -12
  414. package/src/workspace/pr-report.schema.json +95 -0
  415. package/src/workspace/profiles.test.ts +159 -0
  416. package/src/workspace/read-contract.test.ts +2 -2
  417. package/src/workspace/reason-codes.test.ts +13 -1
  418. package/src/workspace/reason-codes.ts +38 -4
  419. package/src/workspace/record-sessions.ts +9 -8
  420. package/src/workspace/records-amend.schema.json +78 -0
  421. package/src/workspace/records-cli.ts +20 -6
  422. package/src/workspace/records-close.schema.json +78 -0
  423. package/src/workspace/records-close.ts +31 -7
  424. package/src/workspace/records-concurrent.e2e.test.ts +135 -0
  425. package/src/workspace/records-concurrent.test.ts +145 -0
  426. package/src/workspace/records-formats.test.ts +46 -10
  427. package/src/workspace/records-new.schema.json +7 -0
  428. package/src/workspace/records-review.schema.json +78 -0
  429. package/src/workspace/records-sessions-write.test.ts +69 -0
  430. package/src/workspace/records-sessions.test.ts +22 -0
  431. package/src/workspace/records-write.ts +192 -25
  432. package/src/workspace/records.schema.json +16 -0
  433. package/src/workspace/records.ts +50 -9
  434. package/src/workspace/reference-kinds/app/package.json +10 -0
  435. package/src/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  436. package/src/workspace/run-statement.schema.json +622 -0
  437. package/src/workspace/runs-cli.ts +343 -14
  438. package/src/workspace/runs-statement.test.ts +239 -0
  439. package/src/workspace/runs-write.schema.json +416 -5
  440. package/src/workspace/runs.schema.json +451 -4
  441. package/src/workspace/runs.test.ts +39 -0
  442. package/src/workspace/runs.ts +296 -35
  443. package/src/workspace/session-kinds.ts +3 -3
  444. package/src/workspace/squash.ts +198 -0
  445. package/src/workspace/status-contract.test.ts +5 -2
  446. package/src/workspace/status-gates.ts +3 -1
  447. package/src/workspace/status.schema.json +126 -3
  448. package/src/workspace/status.ts +90 -1
  449. package/src/workspace/symbols.ts +20 -9
  450. package/src/workspace/trust/run-commits.ts +115 -0
  451. package/src/workspace/trust/run-statement.ts +226 -0
  452. package/src/workspace/trust/seal.ts +8 -2
  453. package/src/workspace/trust/verify-cli.ts +6 -5
  454. package/src/workspace/trust/verify.ts +39 -6
  455. package/src/workspace/wip-cli.ts +97 -0
  456. package/src/workspace/wip-write.schema.json +504 -0
  457. package/src/workspace/wip.schema.json +334 -0
  458. package/src/workspace/wip.test.ts +294 -0
  459. package/src/workspace/wip.ts +753 -0
  460. package/src/workspace/work-cli.ts +3 -0
  461. package/src/workspace/work-evidence.schema.json +3 -0
  462. package/src/workspace/work-size.test.ts +77 -0
  463. package/src/workspace/work-size.ts +93 -0
  464. package/src/workspace/workspace-kinds.schema.json +122 -0
  465. package/src/workspace/write-lock-cli.ts +131 -0
  466. package/src/workspace/write-lock.schema.json +172 -0
  467. package/src/workspace/write-lock.test.ts +189 -0
  468. package/src/workspace/write-lock.ts +474 -0
  469. package/src/workspace/write-scope.test.ts +16 -1
  470. package/src/workspace/write-scope.ts +33 -11
  471. package/src/yaml.ts +31 -21
@@ -0,0 +1,97 @@
1
+ /**
2
+ * `chant workspace wip` (#3172, ws-085): work in progress under
3
+ * `refs/chant/wip/<branch>`, and its replication.
4
+ *
5
+ * wip [--branch <branch>] [--json] every branch's snapshots, and where replication stands
6
+ * wip save [--label <text>] [--by <principal>] snapshot the working tree, then push if the policy says so
7
+ * wip restore [<snapshot>] [--by <principal>] put the working tree back as a snapshot holds it
8
+ * wip push push what the policy names, for the host's schedule
9
+ * wip fetch on a replacement box, bring back what was replicated
10
+ *
11
+ * The read prints `wip.schema.json` with `--json`; every write prints
12
+ * `wip-write.schema.json`, with or without `--json`.
13
+ */
14
+
15
+ import { formatError } from "../cli/format";
16
+ import type { CommandContext } from "../cli/registry";
17
+ import { readerVersion } from "./declaration";
18
+ import { wipFetch, wipPush, wipRestore, wipSave, workspaceWip, WIP_CONTRACT_VERSION, WIP_WRITE_SCHEMA_ID, type WipAction, type WipDocument, type WipWriteDocument } from "./wip";
19
+ import { AGENT_ENV } from "./write-scope";
20
+
21
+ const USAGE = "chant workspace wip [--branch <branch>] [--json] | wip save [--label <text>] [--by <principal>] | wip restore [<snapshot>] [--by <principal>] | wip push | wip fetch";
22
+
23
+ const VERBS: readonly WipAction[] = ["save", "restore", "push", "fetch"];
24
+
25
+ export async function runWorkspaceWip(ctx: CommandContext): Promise<number> {
26
+ const { args } = ctx;
27
+ const cwd = process.cwd();
28
+ // workspace wip [<verb> [<snapshot>]]
29
+ const [, verb, ...rest] = args.positionals ?? [];
30
+
31
+ if (verb === undefined) {
32
+ if (rest.length > 0 || args.label !== undefined) {
33
+ console.error(formatError({ message: "chant workspace wip lists work in progress; save, restore, push and fetch write it", hint: USAGE }));
34
+ return 1;
35
+ }
36
+ const doc = workspaceWip({ cwd, branch: args.branch });
37
+ if (args.json || "error" in doc) {
38
+ console.log(JSON.stringify(doc, null, 2));
39
+ return "error" in doc ? 1 : 0;
40
+ }
41
+ console.log(formatWip(doc));
42
+ return 0;
43
+ }
44
+
45
+ const print = (doc: WipWriteDocument): number => {
46
+ console.log(JSON.stringify(doc, null, 2));
47
+ return "error" in doc ? 1 : 0;
48
+ };
49
+ const usage = (action: WipAction | null, message: string) =>
50
+ print({ $schema: WIP_WRITE_SCHEMA_ID, contract: WIP_CONTRACT_VERSION, chant: readerVersion(), action, error: { code: "write-usage-invalid", message } });
51
+
52
+ if (!(VERBS as readonly string[]).includes(verb)) return usage(null, `chant workspace wip takes save, restore, push or fetch, not ${verb}: ${USAGE}`);
53
+ const action = verb as WipAction;
54
+ const agent = process.env[AGENT_ENV] || undefined;
55
+ if (args.branch !== undefined) return usage(action, `wip ${action} works on the branch checked out; --branch is for listing`);
56
+ switch (action) {
57
+ case "save":
58
+ if (rest.length > 0) return usage(action, `wip save takes no positional argument, and was given ${rest.join(" ")}; name the snapshot with --label`);
59
+ return print(wipSave({ cwd, label: args.label, by: args.by, agent }));
60
+ case "restore":
61
+ if (rest.length > 1) return usage(action, `wip restore takes at most one snapshot, and was given ${rest.join(" ")}`);
62
+ if (args.label !== undefined) return usage(action, "wip restore takes the snapshot's commit, not --label");
63
+ return print(wipRestore({ cwd, snapshot: rest[0], by: args.by, agent }));
64
+ case "push":
65
+ case "fetch":
66
+ if (rest.length > 0 || args.label !== undefined || args.by !== undefined) return usage(action, `wip ${action} takes no arguments: it does what the box's replicate policy says`);
67
+ return print(action === "push" ? wipPush({ cwd }) : wipFetch({ cwd }));
68
+ }
69
+ }
70
+
71
+ /** The text `chant workspace wip` prints without `--json`. */
72
+ export function formatWip(doc: Extract<WipDocument, { branches: unknown }>): string {
73
+ const lines: string[] = [];
74
+ if (doc.branches.length === 0) lines.push("No work in progress is kept under refs/chant/wip/.");
75
+ for (const b of doc.branches) {
76
+ const here = b.branch === doc.checkout.branch ? " (checked out)" : "";
77
+ lines.push(`${b.branch}${here}: ${b.snapshots.length} snapshot${b.snapshots.length === 1 ? "" : "s"}`);
78
+ for (const s of b.snapshots.slice(0, 10)) {
79
+ const what = [s.kind === "pre-restore" ? "before a restore" : null, s.label, s.by ? `by ${s.by}` : null].filter(Boolean).join(", ");
80
+ lines.push(` ${s.commit.slice(0, 12)} ${s.at} on ${s.head.slice(0, 12)}${what ? ` ${what}` : ""}`);
81
+ }
82
+ if (b.snapshots.length > 10) lines.push(` ... and ${b.snapshots.length - 10} older`);
83
+ }
84
+ const r = doc.replication;
85
+ if (r === null) {
86
+ lines.push("", "No box declares replicate, so work in progress stays on this disk.");
87
+ } else {
88
+ const behind = r.refs.filter((x) => !x.replicated);
89
+ lines.push(
90
+ "",
91
+ `Replicated to ${r.policy.remote} (${r.policy.box}'s box: ${r.policy.refs.join(", ")}; pushes on ${r.policy.on.join(" and ") || "wip push only"}${r.policy.every ? `, and every ${r.policy.every} by the host` : ""})${r.remoteConfigured ? "" : `; this checkout has no remote named ${r.policy.remote}`}`,
92
+ );
93
+ if (behind.length === 0) lines.push(` all ${r.refs.length} refs are on the remote`);
94
+ for (const x of behind) lines.push(` ${x.ref}: not on the remote${x.ahead > 0 ? `, ${x.ahead} commit${x.ahead === 1 ? "" : "s"} ahead` : ""}`);
95
+ }
96
+ return lines.join("\n");
97
+ }
@@ -0,0 +1,504 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://intentius.io/chant/schemas/workspace/wip-write/v1/wip-write.schema.json",
4
+ "title": "chant workspace wip save|restore|push|fetch output",
5
+ "description": "What `chant workspace wip save|restore|push|fetch` prints (#3172, ws-085), with or without --json. save takes a snapshot of the whole working tree, uncommitted records included, onto refs/chant/wip/<branch> through a temporary index, so the checkout's index, HEAD and branch never move; restore puts the working tree back as a snapshot holds it, after a snapshot of how it is now; push and fetch replicate the refs the box's replicate policy names. None of them commits to a branch or writes a record. Readers ignore fields they do not know; a field is only ever added within a version. The error 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.103.0 and newer.",
6
+ "oneOf": [
7
+ {
8
+ "$ref": "#/$defs/save"
9
+ },
10
+ {
11
+ "$ref": "#/$defs/restore"
12
+ },
13
+ {
14
+ "$ref": "#/$defs/push"
15
+ },
16
+ {
17
+ "$ref": "#/$defs/fetch"
18
+ },
19
+ {
20
+ "$ref": "#/$defs/failure"
21
+ }
22
+ ],
23
+ "$defs": {
24
+ "save": {
25
+ "type": "object",
26
+ "description": "The snapshot was taken, or the tip already was it. Exit code 0.",
27
+ "required": [
28
+ "$schema",
29
+ "contract",
30
+ "chant",
31
+ "action",
32
+ "branch",
33
+ "ref",
34
+ "created",
35
+ "snapshot",
36
+ "replication"
37
+ ],
38
+ "properties": {
39
+ "$schema": {
40
+ "const": "https://intentius.io/chant/schemas/workspace/wip-write/v1/wip-write.schema.json"
41
+ },
42
+ "contract": {
43
+ "const": 1
44
+ },
45
+ "chant": {
46
+ "type": "string"
47
+ },
48
+ "error": false,
49
+ "action": {
50
+ "const": "save"
51
+ },
52
+ "branch": {
53
+ "type": "string"
54
+ },
55
+ "ref": {
56
+ "type": "string",
57
+ "description": "refs/chant/wip/<branch>, the one ref the save moved."
58
+ },
59
+ "created": {
60
+ "type": "boolean",
61
+ "description": "False when the ref's tip already held this tree on this head with the same label and by, and nothing was written."
62
+ },
63
+ "snapshot": {
64
+ "$ref": "#/$defs/snapshot"
65
+ },
66
+ "replication": {
67
+ "description": "The push the policy makes after a save, or null when no policy is declared or its on leaves save out.",
68
+ "oneOf": [
69
+ {
70
+ "type": "null"
71
+ },
72
+ {
73
+ "$ref": "#/$defs/replicationPush"
74
+ }
75
+ ]
76
+ }
77
+ }
78
+ },
79
+ "restore": {
80
+ "type": "object",
81
+ "description": "The working tree holds what the snapshot holds. Exit code 0.",
82
+ "required": [
83
+ "$schema",
84
+ "contract",
85
+ "chant",
86
+ "action",
87
+ "branch",
88
+ "ref",
89
+ "head",
90
+ "snapshot",
91
+ "checkpoint",
92
+ "headMoved",
93
+ "paths"
94
+ ],
95
+ "properties": {
96
+ "$schema": {
97
+ "const": "https://intentius.io/chant/schemas/workspace/wip-write/v1/wip-write.schema.json"
98
+ },
99
+ "contract": {
100
+ "const": 1
101
+ },
102
+ "chant": {
103
+ "type": "string"
104
+ },
105
+ "error": false,
106
+ "action": {
107
+ "const": "restore"
108
+ },
109
+ "branch": {
110
+ "type": "string"
111
+ },
112
+ "ref": {
113
+ "type": "string"
114
+ },
115
+ "head": {
116
+ "type": "string",
117
+ "pattern": "^[0-9a-f]{40,64}$",
118
+ "description": "The commit HEAD names; it did not move."
119
+ },
120
+ "snapshot": {
121
+ "$ref": "#/$defs/snapshot",
122
+ "description": "The snapshot restored."
123
+ },
124
+ "checkpoint": {
125
+ "type": "object",
126
+ "required": [
127
+ "created",
128
+ "snapshot"
129
+ ],
130
+ "description": "The snapshot of the working tree taken before the restore changed it, kind pre-restore; created is false when the ref's tip already held that tree.",
131
+ "properties": {
132
+ "created": {
133
+ "type": "boolean"
134
+ },
135
+ "snapshot": {
136
+ "$ref": "#/$defs/snapshot"
137
+ }
138
+ }
139
+ },
140
+ "headMoved": {
141
+ "type": "boolean",
142
+ "description": "True when the snapshot was taken on another commit than HEAD names now: the files are restored over the current HEAD, as uncommitted changes against it."
143
+ },
144
+ "paths": {
145
+ "type": "array",
146
+ "items": {
147
+ "type": "string"
148
+ },
149
+ "description": "Every file the restore wrote or removed, from the repository root, sorted. The index is reset to HEAD as well."
150
+ }
151
+ }
152
+ },
153
+ "push": {
154
+ "type": "object",
155
+ "description": "The push ran; replication.rejected lists what did not go. Exit code 0.",
156
+ "required": [
157
+ "$schema",
158
+ "contract",
159
+ "chant",
160
+ "action",
161
+ "policy",
162
+ "replication"
163
+ ],
164
+ "properties": {
165
+ "$schema": {
166
+ "const": "https://intentius.io/chant/schemas/workspace/wip-write/v1/wip-write.schema.json"
167
+ },
168
+ "contract": {
169
+ "const": 1
170
+ },
171
+ "chant": {
172
+ "type": "string"
173
+ },
174
+ "error": false,
175
+ "action": {
176
+ "const": "push"
177
+ },
178
+ "policy": {
179
+ "$ref": "#/$defs/policy"
180
+ },
181
+ "replication": {
182
+ "$ref": "#/$defs/replicationPush"
183
+ }
184
+ }
185
+ },
186
+ "fetch": {
187
+ "type": "object",
188
+ "description": "The fetch ran. Exit code 0.",
189
+ "required": [
190
+ "$schema",
191
+ "contract",
192
+ "chant",
193
+ "action",
194
+ "policy",
195
+ "refs",
196
+ "failed"
197
+ ],
198
+ "properties": {
199
+ "$schema": {
200
+ "const": "https://intentius.io/chant/schemas/workspace/wip-write/v1/wip-write.schema.json"
201
+ },
202
+ "contract": {
203
+ "const": 1
204
+ },
205
+ "chant": {
206
+ "type": "string"
207
+ },
208
+ "error": false,
209
+ "action": {
210
+ "const": "fetch"
211
+ },
212
+ "policy": {
213
+ "$ref": "#/$defs/policy"
214
+ },
215
+ "refs": {
216
+ "type": "array",
217
+ "description": "Each ref the remote holds of the policy's, sorted by ref, and what the fetch did with the local ref.",
218
+ "items": {
219
+ "type": "object",
220
+ "required": [
221
+ "ref",
222
+ "class",
223
+ "remote",
224
+ "local",
225
+ "result"
226
+ ],
227
+ "properties": {
228
+ "ref": {
229
+ "type": "string"
230
+ },
231
+ "class": {
232
+ "enum": [
233
+ "work",
234
+ "kept",
235
+ "wip",
236
+ "ledger"
237
+ ]
238
+ },
239
+ "remote": {
240
+ "type": "string",
241
+ "pattern": "^[0-9a-f]{40,64}$"
242
+ },
243
+ "local": {
244
+ "type": [
245
+ "string",
246
+ "null"
247
+ ],
248
+ "pattern": "^[0-9a-f]{40,64}$",
249
+ "description": "The local ref before the fetch, or null when there was none."
250
+ },
251
+ "result": {
252
+ "enum": [
253
+ "created",
254
+ "fast-forward",
255
+ "up-to-date",
256
+ "ahead",
257
+ "diverged",
258
+ "checked-out"
259
+ ],
260
+ "description": "created and fast-forward moved the local ref; ahead, diverged and checked-out (a branch checked out in some worktree) left it as it was."
261
+ }
262
+ }
263
+ }
264
+ },
265
+ "failed": {
266
+ "type": [
267
+ "string",
268
+ "null"
269
+ ],
270
+ "description": "Why the remote could not be fetched from, or null. refs then lists what earlier fetches brought."
271
+ }
272
+ }
273
+ },
274
+ "failure": {
275
+ "type": "object",
276
+ "description": "Nothing was read or written. Exit code 1.",
277
+ "required": [
278
+ "$schema",
279
+ "contract",
280
+ "chant",
281
+ "action",
282
+ "error"
283
+ ],
284
+ "properties": {
285
+ "$schema": {
286
+ "const": "https://intentius.io/chant/schemas/workspace/wip-write/v1/wip-write.schema.json"
287
+ },
288
+ "contract": {
289
+ "const": 1
290
+ },
291
+ "chant": {
292
+ "type": "string"
293
+ },
294
+ "error": {
295
+ "type": "object",
296
+ "required": [
297
+ "code",
298
+ "message"
299
+ ],
300
+ "properties": {
301
+ "code": {
302
+ "enum": [
303
+ "declaration-missing",
304
+ "declaration-ambiguous",
305
+ "declaration-unparseable",
306
+ "declaration-invalid",
307
+ "placement-invalid",
308
+ "reader-too-old",
309
+ "root-chant-required",
310
+ "not-a-git-repository",
311
+ "revision-unknown",
312
+ "write-usage-invalid",
313
+ "wip-no-branch",
314
+ "wip-none",
315
+ "wip-snapshot-unknown",
316
+ "wip-branch-other",
317
+ "wip-race",
318
+ "wip-policy-none",
319
+ "wip-remote-unknown",
320
+ "principal-unidentified"
321
+ ]
322
+ },
323
+ "message": {
324
+ "type": "string"
325
+ }
326
+ }
327
+ },
328
+ "action": {
329
+ "enum": [
330
+ "save",
331
+ "restore",
332
+ "push",
333
+ "fetch",
334
+ null
335
+ ],
336
+ "description": "The verb refused, or null when there was none."
337
+ }
338
+ }
339
+ },
340
+ "snapshot": {
341
+ "type": "object",
342
+ "description": "One snapshot of a branch's working tree: a commit whose tree is the whole working tree, staged, unstaged and untracked files alike, ignored files left out. Its first parent is the snapshot before it on the same ref, when there is one, and its last parent is head.",
343
+ "required": [
344
+ "commit",
345
+ "tree",
346
+ "branch",
347
+ "head",
348
+ "kind",
349
+ "label",
350
+ "by",
351
+ "at"
352
+ ],
353
+ "properties": {
354
+ "commit": {
355
+ "type": "string",
356
+ "pattern": "^[0-9a-f]{40,64}$",
357
+ "description": "The snapshot commit. wip restore <commit> puts the working tree back as it holds it."
358
+ },
359
+ "tree": {
360
+ "type": "string",
361
+ "pattern": "^[0-9a-f]{40,64}$",
362
+ "description": "The tree of the working tree as it was. Two snapshots with the same tree hold the same files."
363
+ },
364
+ "branch": {
365
+ "type": "string",
366
+ "description": "The branch it was taken on (trailer Chant-Wip-Branch)."
367
+ },
368
+ "head": {
369
+ "type": "string",
370
+ "pattern": "^[0-9a-f]{40,64}$",
371
+ "description": "The commit HEAD named when it was taken (Chant-Wip-Head)."
372
+ },
373
+ "kind": {
374
+ "enum": [
375
+ "save",
376
+ "pre-restore"
377
+ ],
378
+ "description": "save for wip save; pre-restore for the snapshot wip restore takes of the working tree before it changes it, so a restore can be undone (Chant-Wip-Kind)."
379
+ },
380
+ "label": {
381
+ "type": [
382
+ "string",
383
+ "null"
384
+ ],
385
+ "description": "What the caller called it with --label, such as a turn id, or null (Chant-Wip-Label). A pre-restore snapshot is labelled before <the restored snapshot's first 12 characters>."
386
+ },
387
+ "by": {
388
+ "type": [
389
+ "string",
390
+ "null"
391
+ ],
392
+ "description": "Who took it, as --by named them, or null (Chant-Wip-By)."
393
+ },
394
+ "at": {
395
+ "type": "string",
396
+ "description": "When it was taken: the commit's committer time."
397
+ }
398
+ }
399
+ },
400
+ "policy": {
401
+ "type": "object",
402
+ "description": "The replicate policy the declaration in the working tree states (box.replicate), with every default filled in.",
403
+ "required": [
404
+ "box",
405
+ "remote",
406
+ "refs",
407
+ "on",
408
+ "every"
409
+ ],
410
+ "properties": {
411
+ "box": {
412
+ "type": "string",
413
+ "description": "The member whose box block declares it."
414
+ },
415
+ "remote": {
416
+ "type": "string",
417
+ "description": "The git remote it pushes to, by name."
418
+ },
419
+ "refs": {
420
+ "type": "array",
421
+ "items": {
422
+ "enum": [
423
+ "work",
424
+ "kept",
425
+ "wip",
426
+ "ledger"
427
+ ]
428
+ },
429
+ "description": "What it replicates, in this order: work (refs/heads/chant/work/...), kept (refs/chant/kept/...), wip (refs/chant/wip/...) and ledger (refs/heads/chant/lifecycle)."
430
+ },
431
+ "on": {
432
+ "type": "array",
433
+ "items": {
434
+ "enum": [
435
+ "save",
436
+ "release"
437
+ ]
438
+ },
439
+ "description": "When chant pushes on its own: after a wip save, after a work lease release."
440
+ },
441
+ "every": {
442
+ "type": [
443
+ "string",
444
+ "null"
445
+ ],
446
+ "description": "The interval at which the host runs wip push, or null."
447
+ }
448
+ }
449
+ },
450
+ "replicationPush": {
451
+ "type": "object",
452
+ "description": "What one push did. Each ref the remote doesn't hold as it is locally is pushed under its own name, never forced; a pre-push hook is not run.",
453
+ "required": [
454
+ "remote",
455
+ "pushed",
456
+ "rejected",
457
+ "upToDate"
458
+ ],
459
+ "properties": {
460
+ "remote": {
461
+ "type": "string"
462
+ },
463
+ "pushed": {
464
+ "type": "array",
465
+ "items": {
466
+ "$ref": "#/$defs/refPush"
467
+ },
468
+ "description": "The refs the remote took."
469
+ },
470
+ "rejected": {
471
+ "type": "array",
472
+ "items": {
473
+ "$ref": "#/$defs/refPush"
474
+ },
475
+ "description": "The refs the remote refused, or that could not be pushed because it was unreachable or not configured, each with the reason."
476
+ },
477
+ "upToDate": {
478
+ "type": "integer",
479
+ "minimum": 0,
480
+ "description": "How many refs were already on the remote as they are locally."
481
+ }
482
+ }
483
+ },
484
+ "refPush": {
485
+ "type": "object",
486
+ "required": [
487
+ "ref",
488
+ "commit"
489
+ ],
490
+ "properties": {
491
+ "ref": {
492
+ "type": "string"
493
+ },
494
+ "commit": {
495
+ "type": "string",
496
+ "pattern": "^[0-9a-f]{40,64}$"
497
+ },
498
+ "reason": {
499
+ "type": "string"
500
+ }
501
+ }
502
+ }
503
+ }
504
+ }