@intentius/chant 0.102.0 → 0.104.0

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 (464) 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/workspace/box-cli.d.ts +12 -0
  114. package/dist/workspace/box-cli.d.ts.map +1 -0
  115. package/dist/workspace/box-factory.d.ts +27 -3
  116. package/dist/workspace/box-factory.d.ts.map +1 -1
  117. package/dist/workspace/box-listing.d.ts +85 -0
  118. package/dist/workspace/box-listing.d.ts.map +1 -0
  119. package/dist/workspace/box-publish.d.ts +147 -0
  120. package/dist/workspace/box-publish.d.ts.map +1 -0
  121. package/dist/workspace/broker-protocol.d.ts +190 -0
  122. package/dist/workspace/broker-protocol.d.ts.map +1 -0
  123. package/dist/workspace/checks.d.ts.map +1 -1
  124. package/dist/workspace/composites.d.ts +2 -2
  125. package/dist/workspace/composites.d.ts.map +1 -1
  126. package/dist/workspace/conformance/__fixtures__/reference-broker.d.ts +17 -0
  127. package/dist/workspace/conformance/__fixtures__/reference-broker.d.ts.map +1 -0
  128. package/dist/workspace/conformance/broker.d.ts +202 -0
  129. package/dist/workspace/conformance/broker.d.ts.map +1 -0
  130. package/dist/workspace/conformance/index.d.ts +2 -1
  131. package/dist/workspace/conformance/index.d.ts.map +1 -1
  132. package/dist/workspace/conformance/vitest.d.ts +9 -2
  133. package/dist/workspace/conformance/vitest.d.ts.map +1 -1
  134. package/dist/workspace/conformance/writer.d.ts +108 -14
  135. package/dist/workspace/conformance/writer.d.ts.map +1 -1
  136. package/dist/workspace/decide.d.ts +126 -12
  137. package/dist/workspace/decide.d.ts.map +1 -1
  138. package/dist/workspace/decision-points.schema.json +11 -4
  139. package/dist/workspace/declaration.d.ts +65 -0
  140. package/dist/workspace/declaration.d.ts.map +1 -1
  141. package/dist/workspace/declaration.schema.json +153 -4
  142. package/dist/workspace/environments.d.ts +36 -10
  143. package/dist/workspace/environments.d.ts.map +1 -1
  144. package/dist/workspace/factory-rules.d.ts +180 -0
  145. package/dist/workspace/factory-rules.d.ts.map +1 -0
  146. package/dist/workspace/init.d.ts +21 -0
  147. package/dist/workspace/init.d.ts.map +1 -1
  148. package/dist/workspace/intent-cli.d.ts +1 -1
  149. package/dist/workspace/intent-cli.d.ts.map +1 -1
  150. package/dist/workspace/intent-record.d.ts +28 -1
  151. package/dist/workspace/intent-record.d.ts.map +1 -1
  152. package/dist/workspace/intent.d.ts +102 -5
  153. package/dist/workspace/intent.d.ts.map +1 -1
  154. package/dist/workspace/json-edit.d.ts +24 -0
  155. package/dist/workspace/json-edit.d.ts.map +1 -0
  156. package/dist/workspace/jsonc.d.ts +11 -0
  157. package/dist/workspace/jsonc.d.ts.map +1 -1
  158. package/dist/workspace/kinds.d.ts +48 -0
  159. package/dist/workspace/kinds.d.ts.map +1 -1
  160. package/dist/workspace/lexicon-symbols.d.ts +29 -0
  161. package/dist/workspace/lexicon-symbols.d.ts.map +1 -0
  162. package/dist/workspace/lineage-upgrade.d.ts +31 -2
  163. package/dist/workspace/lineage-upgrade.d.ts.map +1 -1
  164. package/dist/workspace/point-answer.schema.json +42 -2
  165. package/dist/workspace/points-cli.d.ts +10 -3
  166. package/dist/workspace/points-cli.d.ts.map +1 -1
  167. package/dist/workspace/points.d.ts +66 -5
  168. package/dist/workspace/points.d.ts.map +1 -1
  169. package/dist/workspace/reason-codes.d.ts +33 -4
  170. package/dist/workspace/reason-codes.d.ts.map +1 -1
  171. package/dist/workspace/record-sessions.d.ts +5 -7
  172. package/dist/workspace/record-sessions.d.ts.map +1 -1
  173. package/dist/workspace/records-cli.d.ts +7 -0
  174. package/dist/workspace/records-cli.d.ts.map +1 -1
  175. package/dist/workspace/records-close.d.ts +7 -3
  176. package/dist/workspace/records-close.d.ts.map +1 -1
  177. package/dist/workspace/records-write.d.ts +66 -6
  178. package/dist/workspace/records-write.d.ts.map +1 -1
  179. package/dist/workspace/records.d.ts +28 -9
  180. package/dist/workspace/records.d.ts.map +1 -1
  181. package/dist/workspace/runs-cli.d.ts +138 -6
  182. package/dist/workspace/runs-cli.d.ts.map +1 -1
  183. package/dist/workspace/runs.d.ts +132 -11
  184. package/dist/workspace/runs.d.ts.map +1 -1
  185. package/dist/workspace/session-kinds.d.ts +1 -1
  186. package/dist/workspace/session-kinds.d.ts.map +1 -1
  187. package/dist/workspace/squash.d.ts +80 -0
  188. package/dist/workspace/squash.d.ts.map +1 -0
  189. package/dist/workspace/status-gates.d.ts +2 -0
  190. package/dist/workspace/status-gates.d.ts.map +1 -1
  191. package/dist/workspace/status.d.ts +54 -0
  192. package/dist/workspace/status.d.ts.map +1 -1
  193. package/dist/workspace/symbols.d.ts +16 -5
  194. package/dist/workspace/symbols.d.ts.map +1 -1
  195. package/dist/workspace/trust/run-commits.d.ts +46 -0
  196. package/dist/workspace/trust/run-commits.d.ts.map +1 -0
  197. package/dist/workspace/trust/run-statement.d.ts +128 -0
  198. package/dist/workspace/trust/run-statement.d.ts.map +1 -0
  199. package/dist/workspace/trust/seal.d.ts +6 -1
  200. package/dist/workspace/trust/seal.d.ts.map +1 -1
  201. package/dist/workspace/trust/verify-cli.d.ts +1 -1
  202. package/dist/workspace/trust/verify.d.ts +16 -2
  203. package/dist/workspace/trust/verify.d.ts.map +1 -1
  204. package/dist/workspace/wip-cli.d.ts +21 -0
  205. package/dist/workspace/wip-cli.d.ts.map +1 -0
  206. package/dist/workspace/wip.d.ts +268 -0
  207. package/dist/workspace/wip.d.ts.map +1 -0
  208. package/dist/workspace/work-cli.d.ts.map +1 -1
  209. package/dist/workspace/work-evidence.d.ts +1 -1
  210. package/dist/workspace/work-evidence.d.ts.map +1 -1
  211. package/dist/workspace/work-size.d.ts +55 -0
  212. package/dist/workspace/work-size.d.ts.map +1 -0
  213. package/dist/workspace/workspace-kinds.schema.json +122 -0
  214. package/dist/workspace/write-lock-cli.d.ts +60 -0
  215. package/dist/workspace/write-lock-cli.d.ts.map +1 -0
  216. package/dist/workspace/write-lock.d.ts +152 -0
  217. package/dist/workspace/write-lock.d.ts.map +1 -0
  218. package/dist/workspace/write-scope.d.ts +6 -2
  219. package/dist/workspace/write-scope.d.ts.map +1 -1
  220. package/package.json +6 -1
  221. package/src/__fixtures__/change-set/lifecycle-plan.floci.json +59 -0
  222. package/src/__fixtures__/change-set/lifecycle-v1.ts.txt +4 -0
  223. package/src/__fixtures__/change-set/lifecycle-v2.ts.txt +4 -0
  224. package/src/__fixtures__/change-set/lifecycle.change-set.golden.json +95 -0
  225. package/src/__fixtures__/change-set/warden.change-set.golden.json +106 -0
  226. package/src/__fixtures__/change-set/warden.plan.json +44 -0
  227. package/src/__fixtures__/plan-summary/normalization-vectors.json +1593 -0
  228. package/src/__fixtures__/pr-loop/pr-apply-applied.note.golden.md +31 -0
  229. package/src/__fixtures__/pr-loop/pr-apply-refused.note.golden.md +31 -0
  230. package/src/__fixtures__/pr-loop/pr-plan.golden.json +127 -0
  231. package/src/__fixtures__/pr-loop/pr-plan.note.golden.md +37 -0
  232. package/src/audit/core.test.ts +15 -0
  233. package/src/audit/core.ts +8 -2
  234. package/src/audit/discover.test.ts +11 -0
  235. package/src/audit/discover.ts +7 -2
  236. package/src/change-set-bundle.test.ts +57 -0
  237. package/src/change-set.test.ts +215 -0
  238. package/src/change-set.ts +445 -0
  239. package/src/cli/commands/audit-opt-in.test.ts +54 -0
  240. package/src/cli/commands/audit.ts +29 -2
  241. package/src/cli/commands/build.test.ts +19 -0
  242. package/src/cli/commands/build.ts +3 -2
  243. package/src/cli/handlers/build.ts +13 -1
  244. package/src/cli/handlers/change-set.test.ts +56 -0
  245. package/src/cli/handlers/change-set.ts +44 -0
  246. package/src/cli/handlers/fan-out.test.ts +221 -2
  247. package/src/cli/handlers/fan-out.ts +165 -75
  248. package/src/cli/handlers/graph.ts +3 -0
  249. package/src/cli/handlers/operator.test.ts +21 -0
  250. package/src/cli/handlers/operator.ts +34 -3
  251. package/src/cli/handlers/pr.ts +373 -0
  252. package/src/cli/handlers/run.ts +1 -0
  253. package/src/cli/main.test.ts +20 -0
  254. package/src/cli/main.ts +185 -23
  255. package/src/cli/mcp/never-over-mcp.test.ts +101 -0
  256. package/src/cli/mcp/op-tools.ts +24 -2
  257. package/src/cli/mcp/workspace-tools.test.ts +1 -1
  258. package/src/cli/mcp/workspace-tools.ts +34 -6
  259. package/src/cli/registry.ts +63 -1
  260. package/src/components/auto-release.ts +1 -1
  261. package/src/components/capability.ts +55 -0
  262. package/src/components/changed-files.ts +66 -0
  263. package/src/components/cli-support.ts +28 -5
  264. package/src/components/component.schema.json +17 -0
  265. package/src/components/component.ts +25 -0
  266. package/src/components/deploy-units.ts +3 -0
  267. package/src/components/driver.test.ts +52 -0
  268. package/src/components/driver.ts +31 -13
  269. package/src/components/fan-out-output.ts +42 -1
  270. package/src/components/fan-out-record.ts +69 -0
  271. package/src/components/fan-out-run.test.ts +17 -0
  272. package/src/components/fan-out-run.ts +304 -1
  273. package/src/components/fan-out-support.ts +3 -0
  274. package/src/components/fan-out-waves.test.ts +375 -0
  275. package/src/components/fan-out.ts +18 -17
  276. package/src/components/gated-wave-pipeline.ts +82 -0
  277. package/src/components/index.ts +1 -0
  278. package/src/components/layers.ts +30 -0
  279. package/src/components/pr-pipeline.ts +91 -0
  280. package/src/components/pr-run.test.ts +205 -0
  281. package/src/components/pr-run.ts +280 -0
  282. package/src/components/promote.ts +5 -0
  283. package/src/components/verbs/shell.test.ts +11 -0
  284. package/src/components/verbs/shell.ts +7 -3
  285. package/src/components/wave-plan.ts +124 -0
  286. package/src/discovery/sandbox/bundle.ts +1 -1
  287. package/src/gated-waves-bundle.test.ts +62 -0
  288. package/src/gated-waves.test.ts +118 -0
  289. package/src/gated-waves.ts +240 -0
  290. package/src/index.ts +1 -0
  291. package/src/lexicon.ts +51 -0
  292. package/src/lifecycle/gate-ledger.ts +7 -0
  293. package/src/lifecycle/git.ts +102 -16
  294. package/src/lint/post-synth.test.ts +19 -0
  295. package/src/lint/post-synth.ts +19 -1
  296. package/src/meta/declared-imports.test.ts +1 -1
  297. package/src/op/activities/activity-contracts.ts +84 -0
  298. package/src/op/activities/change-set.ts +114 -0
  299. package/src/op/activities/decide.ts +3 -0
  300. package/src/op/activities/factory.ts +675 -0
  301. package/src/op/activities/index.ts +6 -0
  302. package/src/op/activity-contract.test.ts +21 -1
  303. package/src/op/activity-contract.ts +19 -9
  304. package/src/op/builders.ts +23 -0
  305. package/src/op/decide-backend.ts +5 -1
  306. package/src/op/decide-read-inputs.ts +33 -5
  307. package/src/op/factory.e2e.test.ts +232 -0
  308. package/src/op/factory.ts +118 -0
  309. package/src/op/index.ts +9 -1
  310. package/src/op/op-ir.test.ts +9 -0
  311. package/src/op/op-ir.ts +4 -0
  312. package/src/op/op-verb-class.ts +3 -0
  313. package/src/op/types.ts +8 -0
  314. package/src/op/work-lease-run.ts +3 -0
  315. package/src/plan-summary.test.ts +263 -0
  316. package/src/plan-summary.ts +845 -0
  317. package/src/pr-forge.test.ts +237 -0
  318. package/src/pr-forge.ts +332 -0
  319. package/src/pr-loop-bundle.test.ts +46 -0
  320. package/src/pr-loop.test.ts +171 -0
  321. package/src/pr-loop.ts +324 -0
  322. package/src/telemetry-attribution.test.ts +23 -1
  323. package/src/telemetry-attribution.ts +51 -0
  324. package/src/terraform/hcl2json.test.ts +21 -0
  325. package/src/terraform/hcl2json.ts +81 -0
  326. package/src/terraform/parse.ts +11 -74
  327. package/src/workspace/__fixtures__/studio-template-84c8b21.json +1 -1
  328. package/src/workspace/app-kind.test.ts +196 -0
  329. package/src/workspace/box-cli.ts +113 -0
  330. package/src/workspace/box-factory.test.ts +4 -1
  331. package/src/workspace/box-factory.ts +37 -4
  332. package/src/workspace/box-listing-write.schema.json +204 -0
  333. package/src/workspace/box-listing.test.ts +234 -0
  334. package/src/workspace/box-listing.ts +324 -0
  335. package/src/workspace/box-publish.schema.json +498 -0
  336. package/src/workspace/box-publish.test.ts +204 -0
  337. package/src/workspace/box-publish.ts +420 -0
  338. package/src/workspace/box-ship.test.ts +96 -0
  339. package/src/workspace/broker-protocol.schema.json +186 -0
  340. package/src/workspace/broker-protocol.test.ts +122 -0
  341. package/src/workspace/broker-protocol.ts +317 -0
  342. package/src/workspace/builder-tiers.test.ts +146 -0
  343. package/src/workspace/change-set.schema.json +460 -0
  344. package/src/workspace/chant-migrations.e2e.test.ts +17 -5
  345. package/src/workspace/checks/boxes.test.ts +3 -0
  346. package/src/workspace/checks.ts +10 -3
  347. package/src/workspace/component-environments.test.ts +105 -0
  348. package/src/workspace/composites.schema.json +23 -4
  349. package/src/workspace/composites.test.ts +8 -8
  350. package/src/workspace/composites.ts +13 -2
  351. package/src/workspace/conformance/__fixture__/decisions/decision.schema.json +2 -2
  352. package/src/workspace/conformance/__fixtures__/reference-broker.ts +207 -0
  353. package/src/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +7 -2
  354. package/src/workspace/conformance/__writer_fixture__/answers/answer.schema.json +42 -2
  355. package/src/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  356. package/src/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  357. package/src/workspace/conformance/__writer_fixture__/decisions/points.json +96 -0
  358. package/src/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  359. package/src/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  360. package/src/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +14 -8
  361. package/src/workspace/conformance/__writer_fixture__/sessions/session.schema.json +187 -6
  362. package/src/workspace/conformance/__writer_fixture__/work/work.schema.json +25 -0
  363. package/src/workspace/conformance/broker.test.ts +122 -0
  364. package/src/workspace/conformance/broker.ts +792 -0
  365. package/src/workspace/conformance/conformance.e2e.test.ts +2 -1
  366. package/src/workspace/conformance/index.mjs +22 -1
  367. package/src/workspace/conformance/index.ts +5 -1
  368. package/src/workspace/conformance/vitest.ts +33 -1
  369. package/src/workspace/conformance/writer-conformance.e2e.test.ts +49 -3
  370. package/src/workspace/conformance/writer.test.ts +32 -2
  371. package/src/workspace/conformance/writer.ts +339 -28
  372. package/src/workspace/decide.test.ts +208 -4
  373. package/src/workspace/decide.ts +427 -73
  374. package/src/workspace/decision-points.schema.json +11 -4
  375. package/src/workspace/declaration.schema.json +153 -4
  376. package/src/workspace/declaration.ts +141 -0
  377. package/src/workspace/environments.ts +66 -14
  378. package/src/workspace/factory-rules.test.ts +62 -0
  379. package/src/workspace/factory-rules.ts +218 -0
  380. package/src/workspace/graph-cli.ts +2 -2
  381. package/src/workspace/graph.schema.json +67 -0
  382. package/src/workspace/identity.test.ts +23 -0
  383. package/src/workspace/init.ts +82 -2
  384. package/src/workspace/intent-cli.ts +26 -9
  385. package/src/workspace/intent-patch-id.test.ts +162 -0
  386. package/src/workspace/intent-record.schema.json +130 -3
  387. package/src/workspace/intent-record.ts +74 -28
  388. package/src/workspace/intent-reviews.test.ts +76 -0
  389. package/src/workspace/intent-squash.test.ts +213 -0
  390. package/src/workspace/intent-why.test.ts +5 -5
  391. package/src/workspace/intent.schema.json +234 -4
  392. package/src/workspace/intent.ts +260 -66
  393. package/src/workspace/json-edit.test.ts +121 -0
  394. package/src/workspace/json-edit.ts +142 -0
  395. package/src/workspace/jsonc.ts +20 -0
  396. package/src/workspace/kinds.ts +157 -2
  397. package/src/workspace/lexicon-symbols.test.ts +148 -0
  398. package/src/workspace/lexicon-symbols.ts +125 -0
  399. package/src/workspace/lineage-upgrade.test.ts +63 -0
  400. package/src/workspace/lineage-upgrade.ts +146 -5
  401. package/src/workspace/plan-summary.schema.json +155 -0
  402. package/src/workspace/point-answer.schema.json +42 -2
  403. package/src/workspace/points-cli.ts +42 -16
  404. package/src/workspace/points-write.schema.json +162 -4
  405. package/src/workspace/points.schema.json +157 -2
  406. package/src/workspace/points.test.ts +13 -1
  407. package/src/workspace/points.ts +118 -12
  408. package/src/workspace/pr-report.schema.json +95 -0
  409. package/src/workspace/profiles.test.ts +159 -0
  410. package/src/workspace/read-contract.test.ts +2 -2
  411. package/src/workspace/reason-codes.test.ts +13 -1
  412. package/src/workspace/reason-codes.ts +38 -4
  413. package/src/workspace/record-sessions.ts +9 -8
  414. package/src/workspace/records-amend.schema.json +78 -0
  415. package/src/workspace/records-cli.ts +20 -6
  416. package/src/workspace/records-close.schema.json +78 -0
  417. package/src/workspace/records-close.ts +31 -7
  418. package/src/workspace/records-concurrent.e2e.test.ts +135 -0
  419. package/src/workspace/records-concurrent.test.ts +145 -0
  420. package/src/workspace/records-formats.test.ts +46 -10
  421. package/src/workspace/records-new.schema.json +7 -0
  422. package/src/workspace/records-review.schema.json +78 -0
  423. package/src/workspace/records-sessions-write.test.ts +69 -0
  424. package/src/workspace/records-sessions.test.ts +22 -0
  425. package/src/workspace/records-write.ts +192 -25
  426. package/src/workspace/records.schema.json +16 -0
  427. package/src/workspace/records.ts +50 -9
  428. package/src/workspace/reference-kinds/app/package.json +10 -0
  429. package/src/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  430. package/src/workspace/run-statement.schema.json +622 -0
  431. package/src/workspace/runs-cli.ts +343 -14
  432. package/src/workspace/runs-statement.test.ts +239 -0
  433. package/src/workspace/runs-write.schema.json +416 -5
  434. package/src/workspace/runs.schema.json +451 -4
  435. package/src/workspace/runs.test.ts +39 -0
  436. package/src/workspace/runs.ts +296 -35
  437. package/src/workspace/session-kinds.ts +3 -3
  438. package/src/workspace/squash.ts +198 -0
  439. package/src/workspace/status-contract.test.ts +5 -2
  440. package/src/workspace/status-gates.ts +3 -1
  441. package/src/workspace/status.schema.json +126 -3
  442. package/src/workspace/status.ts +90 -1
  443. package/src/workspace/symbols.ts +20 -9
  444. package/src/workspace/trust/run-commits.ts +115 -0
  445. package/src/workspace/trust/run-statement.ts +226 -0
  446. package/src/workspace/trust/seal.ts +8 -2
  447. package/src/workspace/trust/verify-cli.ts +6 -5
  448. package/src/workspace/trust/verify.ts +39 -6
  449. package/src/workspace/wip-cli.ts +97 -0
  450. package/src/workspace/wip-write.schema.json +504 -0
  451. package/src/workspace/wip.schema.json +334 -0
  452. package/src/workspace/wip.test.ts +294 -0
  453. package/src/workspace/wip.ts +753 -0
  454. package/src/workspace/work-cli.ts +3 -0
  455. package/src/workspace/work-evidence.schema.json +3 -0
  456. package/src/workspace/work-size.test.ts +77 -0
  457. package/src/workspace/work-size.ts +93 -0
  458. package/src/workspace/workspace-kinds.schema.json +122 -0
  459. package/src/workspace/write-lock-cli.ts +131 -0
  460. package/src/workspace/write-lock.schema.json +172 -0
  461. package/src/workspace/write-lock.test.ts +189 -0
  462. package/src/workspace/write-lock.ts +474 -0
  463. package/src/workspace/write-scope.test.ts +16 -1
  464. package/src/workspace/write-scope.ts +33 -11
@@ -0,0 +1,213 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "urn:intentius:chant:contract:1",
4
+ "title": "Contract file front matter",
5
+ "description": "The front matter of one contract file in design/contracts/ (#3148, ws-082): an acceptance criterion made formal, with the criteria a check proves and the check pinned by hash. The Markdown body after the front matter is the story and any detail; the criteria are listed here, so a reader never parses the body. Values stay within what YAML and JSON share.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "patternProperties": {
9
+ "^x-": {}
10
+ },
11
+ "required": ["schema", "id", "title", "state", "criteria", "checks", "reviews", "approved_by"],
12
+ "properties": {
13
+ "schema": {
14
+ "description": "Format version of this file. Bumped only by a change to this schema.",
15
+ "const": 1
16
+ },
17
+ "id": {
18
+ "description": "Stable id: C, a dash and three or more digits, as studio numbers its contracts. Never reused, never renumbered.",
19
+ "$ref": "#/definitions/contractId"
20
+ },
21
+ "title": {
22
+ "description": "What a person can do once the contract holds, in a few words.",
23
+ "type": "string",
24
+ "minLength": 1
25
+ },
26
+ "state": {
27
+ "description": "draft: being written. approved: ready to build; only its state, checks and reviews change from here, and a changed contract is a new one that supersedes it. retired: nothing is built against it any more. Sealed once retired.",
28
+ "enum": ["draft", "approved", "retired"]
29
+ },
30
+ "tier": {
31
+ "description": "The builder tier the contract is built at, when it is fixed rather than asked of the slice-tier decision point: one of the tiers the work kind declares (#3147). Null or absent to leave it to the point.",
32
+ "type": ["string", "null"],
33
+ "pattern": "^[a-z][a-z0-9-]{0,31}$"
34
+ },
35
+ "criteria": {
36
+ "description": "The acceptance criteria, each with an id the check's tests are named after (a test named \"a1: ...\" checks a1) and the text it states. A work item that builds the contract lists criteria with the same ids in its acceptance, and an evidence record of a check run reports each by id. An approved contract states at least one.",
37
+ "type": "array",
38
+ "items": {
39
+ "type": "object",
40
+ "additionalProperties": false,
41
+ "required": ["id", "text"],
42
+ "properties": {
43
+ "id": { "$ref": "#/definitions/criterionId" },
44
+ "text": { "type": "string", "pattern": "\\S" }
45
+ }
46
+ }
47
+ },
48
+ "checks": {
49
+ "description": "The contract's checks: test files a runner runs against the app (studio runs them with node --test and APP_URL), each pinned by the hash of its bytes, so chant workspace records reports a check edited after it was pinned. Usually one. Empty while none is written; records then warns record-no-evidence, and a factory leaves the contract unchecked.",
50
+ "type": "array",
51
+ "items": { "$ref": "#/definitions/checkPin" }
52
+ },
53
+ "references": {
54
+ "description": "Design assets a criterion is checked against besides its tests, such as a section of a driver's design document (design/drivers/D-001/design.html#notes-page). Optional.",
55
+ "type": "array",
56
+ "items": {
57
+ "type": "object",
58
+ "additionalProperties": false,
59
+ "required": ["criterion", "asset"],
60
+ "properties": {
61
+ "criterion": { "$ref": "#/definitions/criterionId" },
62
+ "asset": {
63
+ "description": "A workspace path, from the workspace root, with an optional #fragment naming a section in it.",
64
+ "type": "string",
65
+ "pattern": "^(?!/)(?!(?:[^/#]*/)*\\.{1,2}(?:[/#]|$))(?!.*//)[^\\\\\\u0000-\\u001f#]*[^/\\\\\\u0000-\\u001f#](#[A-Za-z][A-Za-z0-9:._-]*)?$"
66
+ }
67
+ }
68
+ }
69
+ },
70
+ "supersedes": {
71
+ "description": "The contract or contracts this one replaces, by id: a bare id, as studio's contracts write it, or a list. Takes effect once this contract is approved or retired. Optional.",
72
+ "oneOf": [
73
+ { "$ref": "#/definitions/contractId" },
74
+ { "type": "array", "items": { "$ref": "#/definitions/contractId" }, "uniqueItems": true }
75
+ ]
76
+ },
77
+ "proposed_by": {
78
+ "description": "Who drafted the contract: the name chant workspace records new --by wrote (#2756). Null or absent when nobody named one.",
79
+ "type": ["string", "null"]
80
+ },
81
+ "approved_by": {
82
+ "description": "Who approved the contract: a forge login. A contract approved in a review session also carries the verdicts that approved it in reviews. Null while it is a draft.",
83
+ "type": ["string", "null"]
84
+ },
85
+ "approved_on": {
86
+ "description": "When it was approved, as YYYY-MM-DD. Quoted, so YAML reads it as a string. Null or absent while it is a draft.",
87
+ "type": ["string", "null"],
88
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
89
+ },
90
+ "reviews": {
91
+ "description": "Each reviewer's verdict on the contract, in the decision kind's shape: reviewer, verdict, on, and the digest of the text judged. A verdict given in a review session names it in session (chant workspace records review --session). Empty until a review happens.",
92
+ "type": "array",
93
+ "items": {
94
+ "type": "object",
95
+ "additionalProperties": false,
96
+ "required": ["reviewer", "verdict", "on"],
97
+ "properties": {
98
+ "reviewer": { "type": "string", "minLength": 1 },
99
+ "verdict": { "enum": ["agree", "dissent", "abstain"] },
100
+ "note": { "type": ["string", "null"] },
101
+ "on": { "type": "string", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" },
102
+ "digest": {
103
+ "description": "The digest of the contract text the verdict judged: the lowercase hex SHA-256 of the file with LF line endings and without its reviews block (#2672).",
104
+ "type": "string",
105
+ "pattern": "^[0-9a-f]{64}$"
106
+ },
107
+ "session": {
108
+ "description": "The id of the review session the verdict was given in.",
109
+ "type": "string",
110
+ "minLength": 1
111
+ },
112
+ "seal": {
113
+ "description": "The reviewer's ssh signature over the verdict (#2687), as chant workspace records review --sign writes it.",
114
+ "type": "object",
115
+ "additionalProperties": false,
116
+ "required": ["signer", "key", "signature"],
117
+ "properties": {
118
+ "signer": { "type": "string", "minLength": 1 },
119
+ "key": { "type": "string", "pattern": "^SHA256:[A-Za-z0-9+/]+=*$" },
120
+ "signature": { "type": "string", "pattern": "^-----BEGIN SSH SIGNATURE-----\\n" }
121
+ }
122
+ }
123
+ },
124
+ "dependencies": { "seal": ["digest"] },
125
+ "if": {
126
+ "required": ["verdict"],
127
+ "properties": { "verdict": { "const": "dissent" } }
128
+ },
129
+ "then": {
130
+ "description": "A dissent needs a reason: the dissent by {reviewer} has no note.",
131
+ "required": ["note"],
132
+ "properties": { "note": { "type": "string", "pattern": "\\S" } }
133
+ }
134
+ }
135
+ },
136
+ "seal": {
137
+ "description": "The author's ssh signature over the contract (#2688), as chant workspace records new --sign and amend --sign write it. Optional.",
138
+ "type": "object",
139
+ "additionalProperties": false,
140
+ "required": ["signer", "key", "signature"],
141
+ "properties": {
142
+ "signer": { "type": "string", "minLength": 1 },
143
+ "key": { "type": "string", "pattern": "^SHA256:[A-Za-z0-9+/]+=*$" },
144
+ "signature": { "type": "string", "pattern": "^-----BEGIN SSH SIGNATURE-----\\n" }
145
+ }
146
+ },
147
+ "closed_digest": {
148
+ "description": "The contract's whole-file seal (#2546, ws-063), written when it is retired: sha256: and the lowercase hex SHA-256 of the JCS form of {body, core}, line endings LF. chant workspace records reports record-seal-mismatch if the file changes afterwards.",
149
+ "type": "string",
150
+ "pattern": "^sha256:[0-9a-f]{64}$"
151
+ }
152
+ },
153
+ "allOf": [
154
+ {
155
+ "if": {
156
+ "required": ["state"],
157
+ "properties": { "state": { "enum": ["approved", "retired"] } }
158
+ },
159
+ "then": {
160
+ "description": "An approved or retired contract names who approved it.",
161
+ "properties": { "approved_by": { "type": "string", "minLength": 1 } }
162
+ }
163
+ },
164
+ {
165
+ "if": {
166
+ "required": ["state"],
167
+ "properties": { "state": { "const": "approved" } }
168
+ },
169
+ "then": {
170
+ "description": "An approved contract states at least one criterion.",
171
+ "properties": { "criteria": { "minItems": 1 } }
172
+ }
173
+ }
174
+ ],
175
+ "definitions": {
176
+ "contractId": {
177
+ "type": "string",
178
+ "pattern": "^C-[0-9]{3,}$"
179
+ },
180
+ "criterionId": {
181
+ "description": "A criterion's id, such as a1, unique in its contract.",
182
+ "type": "string",
183
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$"
184
+ },
185
+ "workspacePath": {
186
+ "description": "A path from the workspace root, with / separators: no leading /, no . or .. segment, no empty segment, no backslash and no trailing /.",
187
+ "type": "string",
188
+ "pattern": "^(?!/)(?!(?:[^/]*/)*\\.{1,2}(?:/|$))(?!.*//)[^\\\\\\u0000-\\u001f]*[^/\\\\\\u0000-\\u001f]$"
189
+ },
190
+ "checkPin": {
191
+ "description": "A check file in the workspace, pinned by the hash of its bytes (#2549).",
192
+ "type": "object",
193
+ "additionalProperties": false,
194
+ "required": ["title", "path", "sha256"],
195
+ "properties": {
196
+ "title": { "type": "string", "minLength": 1 },
197
+ "path": {
198
+ "description": "The check, from the workspace root, such as design/contracts/checks/C-001.test.mjs.",
199
+ "$ref": "#/definitions/workspacePath"
200
+ },
201
+ "sha256": {
202
+ "description": "Hex SHA-256 of the check's bytes when it was pinned. chant workspace records pin <path> prints it.",
203
+ "type": "string",
204
+ "pattern": "^[0-9a-f]{64}$"
205
+ },
206
+ "as_of": {
207
+ "description": "When the check was pinned, as an ISO 8601 timestamp.",
208
+ "type": ["string", "null"]
209
+ }
210
+ }
211
+ }
212
+ }
213
+ }
@@ -31,6 +31,36 @@
31
31
  { "kind": "quorum", "count": 1 }
32
32
  ]
33
33
  },
34
+ "understand": {
35
+ "title": "Is this ask understood well enough to build",
36
+ "question": {
37
+ "type": "choice",
38
+ "instructions": "A person asked for a change, and the ask is a work item whose source names what they said and who said it. The factory asks this before it builds the item. The state is the work item: its title and state, the person's words, who asked and where, and any acceptance criteria it has so far. Pick what happens next.",
39
+ "criteria": {
40
+ "proceed": "The ask is clear enough to build. The work item opens, and the factory builds it under its lease, writing its plan as acceptance criteria first.",
41
+ "redraft": "What the person wants is clear, but the work item does not say it well. Someone rewrites the item, which asks this point again, before anything is built.",
42
+ "ask": "The ask is unclear. Someone asks the person who made it what they mean before anything is built.",
43
+ "refuse": "The ask will not be built. The work item is dropped, with the reason."
44
+ }
45
+ },
46
+ "inputs": {
47
+ "work-item.state": "the work item's state: proposed for an ask nobody has kept yet",
48
+ "work-item.title": "the work item's title",
49
+ "work-item.source.ask.said": "what the person said, verbatim",
50
+ "work-item.source.ask.by": "who asked",
51
+ "work-item.source.ask.via": "where the ask came in, such as hud, shell or mcp",
52
+ "work-item.acceptance": "the acceptance criteria the item has so far"
53
+ },
54
+ "deciders": [
55
+ {
56
+ "kind": "table",
57
+ "rows": [
58
+ { "when": { "work-item.state": "open" }, "answer": "proceed", "note": "A person opened the item already, or it did not start as a proposal." }
59
+ ]
60
+ },
61
+ { "kind": "quorum", "count": 1 }
62
+ ]
63
+ },
34
64
  "ship-skip": {
35
65
  "title": "May this release skip the human gate",
36
66
  "question": {
@@ -127,6 +157,72 @@
127
157
  { "kind": "model", "backend": "systemone", "model": "jev-1.13.0", "threshold": 0.8 },
128
158
  { "kind": "quorum", "count": 1 }
129
159
  ]
160
+ },
161
+ "intent-origin": {
162
+ "title": "Where this change came from",
163
+ "question": {
164
+ "type": "choice",
165
+ "instructions": "An intent walk (chant workspace graph --intent) asks this at a commit no decision's window holds: was the change meant to carry out a decision? The state is the region walked and the commit's node.",
166
+ "criteria": {
167
+ "carried-out-decision": "The change carried out a decision, written down or not.",
168
+ "incidental": "The change was incidental: a fix, a rename or upkeep that no decision is about.",
169
+ "unknown": "The person walking the region does not know."
170
+ }
171
+ },
172
+ "inputs": {
173
+ "region.id": "the region walked, as graph --intent names it: region:<path>, with :<start>-<end> or #<symbol>",
174
+ "node.id": "the node of the walk the question is asked at, as graph --intent names it"
175
+ },
176
+ "deciders": [{ "kind": "quorum", "count": 1, "note": "The person walking the region answers. No table or model answers for them." }]
177
+ },
178
+ "intent-judgment": {
179
+ "title": "What the gap between this decision and the code is",
180
+ "question": {
181
+ "type": "choice",
182
+ "instructions": "An intent walk asks this at a decision, or at a commit made inside a decision's window that is not the decision's own work: does the code do what the decision says, and if not, why? The state is the region walked and the node.",
183
+ "criteria": {
184
+ "drift": "Drift: the code moved away from a decision that still holds.",
185
+ "unwritten-supersession": "A decision nobody wrote down superseded it.",
186
+ "decision-wrong": "The decision was wrong, and is reopened.",
187
+ "no-gap": "There is no gap: the code does what the decision says.",
188
+ "not-decidable": "It can't be decided from this walk."
189
+ }
190
+ },
191
+ "inputs": {
192
+ "region.id": "the region walked, as graph --intent names it: region:<path>, with :<start>-<end> or #<symbol>",
193
+ "node.id": "the node of the walk the question is asked at, as graph --intent names it"
194
+ },
195
+ "deciders": [{ "kind": "quorum", "count": 1, "note": "The person walking the region answers. No table or model answers for them." }]
196
+ },
197
+ "intent-disposition": {
198
+ "title": "What happens about this node",
199
+ "question": {
200
+ "type": "choice",
201
+ "instructions": "An intent walk asks this at any other node, such as a unit, contract, evidence, artifact or the region itself: what was done about the question the walk asks there? The state is the region walked and the node.",
202
+ "criteria": {
203
+ "handled": "Handled: it is done, or nothing needed doing.",
204
+ "skipped": "Skipped, and the note says why.",
205
+ "needs-discussion": "It needs a discussion or a decision first."
206
+ }
207
+ },
208
+ "inputs": {
209
+ "region.id": "the region walked, as graph --intent names it: region:<path>, with :<start>-<end> or #<symbol>",
210
+ "node.id": "the node of the walk the question is asked at, as graph --intent names it"
211
+ },
212
+ "deciders": [{ "kind": "quorum", "count": 1, "note": "The person walking the region answers. No table or model answers for them." }]
213
+ },
214
+ "agent-question": {
215
+ "title": "A question an agent asked the people working with it",
216
+ "adhoc": true,
217
+ "question": {
218
+ "type": "choice",
219
+ "instructions": "An agent asked the people working with it this question, with options of its own, and acts on the one they pick. The question and its options come with each ask, as hud's hud_ask and AskUserQuestion give them."
220
+ },
221
+ "inputs": {
222
+ "ask.id": "the asker's own id for this ask, such as hud's request id for the question, so each ask is a question of its own",
223
+ "ask.by": "who asked: the agent, or the session it asked in"
224
+ },
225
+ "deciders": [{ "kind": "quorum", "count": 1, "note": "A person in the room answers. No table or model answers an agent's question for them." }]
130
226
  }
131
227
  }
132
228
  }
@@ -0,0 +1,15 @@
1
+ // The driver record kind (#3148, ws-082), data only: no imports, no code.
2
+ //
3
+ // chant workspace records --kind design/drivers/driver.kind.mjs --json
4
+ //
5
+ // A driver groups contracts under one intent: what its member contracts add
6
+ // up to once all of them hold. Its body is the design notes. A driver has no
7
+ // lifecycle of its own; its contracts carry theirs. A review session may
8
+ // judge a driver beside decisions and contracts, as a sign-off on the group.
9
+ export const recordKind = {
10
+ name: "driver",
11
+ location: { dir: ".", match: "^D-[0-9]{3,}-.+\\.md$" },
12
+ format: "markdown-front-matter",
13
+ schema: { id: "urn:intentius:chant:driver:1", path: "driver.schema.json" },
14
+ idField: "id",
15
+ };
@@ -0,0 +1,38 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "urn:intentius:chant:driver:1",
4
+ "title": "Driver file front matter",
5
+ "description": "The front matter of one driver file in design/drivers/ (#3148, ws-082): contracts grouped under one intent. The Markdown body after the front matter is the design notes. Values stay within what YAML and JSON share.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "patternProperties": {
9
+ "^x-": {}
10
+ },
11
+ "required": ["schema", "id", "title", "intent", "members"],
12
+ "properties": {
13
+ "schema": {
14
+ "description": "Format version of this file. Bumped only by a change to this schema.",
15
+ "const": 1
16
+ },
17
+ "id": {
18
+ "description": "Stable id: D, a dash and three or more digits, as studio numbers its drivers. Never reused, never renumbered.",
19
+ "type": "string",
20
+ "pattern": "^D-[0-9]{3,}$"
21
+ },
22
+ "title": {
23
+ "type": "string",
24
+ "minLength": 1
25
+ },
26
+ "intent": {
27
+ "description": "What the member contracts add up to once all of them hold, in a sentence or two.",
28
+ "type": "string",
29
+ "pattern": "\\S"
30
+ },
31
+ "members": {
32
+ "description": "The contracts the driver groups, by id. May be empty while the driver is being planned.",
33
+ "type": "array",
34
+ "uniqueItems": true,
35
+ "items": { "type": "string", "pattern": "^C-[0-9]{3,}$" }
36
+ }
37
+ }
38
+ }
@@ -8,11 +8,16 @@
8
8
  //
9
9
  // A session is a group walking an agenda of records together. It keeps who
10
10
  // attended and the verdicts it produced, and it is sealed when it closes.
11
- // Each verdict it produced is also an entry in the judged decision's reviews
12
- // list, whose session field names the session. chud's session files (such
13
- // as sessions/S-0001.json) are the starting shape; sessions are markdown
14
- // front matter here because that is the only record format chant reads
15
- // (#2664).
11
+ // Each verdict it produced is also an entry in the judged record's reviews
12
+ // list, whose session field names the session. Its verdicts judge decisions,
13
+ // contracts and drivers (#3148, ws-082): studio's design sessions, which
14
+ // approved contracts and signed off drivers, are this kind, and so is a
15
+ // comment-mode review of the app's UI, one session per review batch, with
16
+ // its anchored comments, the agent's answers and the rounds of replies
17
+ // (#3350, ws-083). chud's session
18
+ // files (such as sessions/S-0001.json) are the starting shape; sessions are
19
+ // markdown front matter so that records new, amend, review and close write
20
+ // them.
16
21
  export const recordKind = {
17
22
  name: "session",
18
23
  location: { dir: ".", match: "^S-[0-9]{4,}-.+\\.md$" },
@@ -32,15 +37,16 @@ export const recordKind = {
32
37
  // of the session without closed_digest (front matter as core, the text
33
38
  // below it as body, line endings LF), written when the session closes
34
39
  // (#2546).
35
- // subjects: the decisions the verdicts name. Entries of their reviews list
36
- // (the decision kind's reviews.field) name a session.
40
+ // subjects: the kinds of the records the verdicts name, decisions,
41
+ // contracts and drivers. Entries of their reviews lists (each kind's
42
+ // reviews.field) name a session.
37
43
  // openedRev, closedRev and closedOn (#2693): the fields records new and
38
44
  // records close write, the commits the session opened and closed at and
39
45
  // the time it closed. records --since <session id> reads the commits.
40
46
  session: {
41
47
  verdicts: "verdicts",
42
48
  seal: "closed_digest",
43
- subjects: { kind: "../decisions/decision.kind.mjs" },
49
+ subjects: { kinds: ["../decisions/decision.kind.mjs", "../contracts/contract.kind.mjs", "../drivers/driver.kind.mjs"] },
44
50
  openedRev: "opened_rev",
45
51
  closedRev: "closed_rev",
46
52
  closedOn: "closed",