@intentius/chant 0.101.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 (739) hide show
  1. package/dist/agents/checks.d.ts.map +1 -1
  2. package/dist/attrref.d.ts.map +1 -1
  3. package/dist/audit/core.d.ts +2 -0
  4. package/dist/audit/core.d.ts.map +1 -1
  5. package/dist/audit/discover.d.ts.map +1 -1
  6. package/dist/audit/nginx.d.ts.map +1 -1
  7. package/dist/audit/prior-art.d.ts +48 -0
  8. package/dist/audit/prior-art.d.ts.map +1 -1
  9. package/dist/behaviour-kinds.d.ts.map +1 -1
  10. package/dist/builder.d.ts.map +1 -1
  11. package/dist/change-set.d.ts +232 -0
  12. package/dist/change-set.d.ts.map +1 -0
  13. package/dist/cli/commands/audit.d.ts +7 -0
  14. package/dist/cli/commands/audit.d.ts.map +1 -1
  15. package/dist/cli/commands/build.d.ts.map +1 -1
  16. package/dist/cli/commands/carve-emit.d.ts.map +1 -1
  17. package/dist/cli/commands/check-lexicon.d.ts +16 -0
  18. package/dist/cli/commands/check-lexicon.d.ts.map +1 -1
  19. package/dist/cli/commands/import.d.ts +8 -0
  20. package/dist/cli/commands/import.d.ts.map +1 -1
  21. package/dist/cli/commands/init-lexicon.d.ts.map +1 -1
  22. package/dist/cli/commands/init.d.ts +19 -0
  23. package/dist/cli/commands/init.d.ts.map +1 -1
  24. package/dist/cli/commands/onboard.d.ts +9 -0
  25. package/dist/cli/commands/onboard.d.ts.map +1 -1
  26. package/dist/cli/commands/pinned-upgrade.d.ts +19 -5
  27. package/dist/cli/commands/pinned-upgrade.d.ts.map +1 -1
  28. package/dist/cli/handlers/build.d.ts.map +1 -1
  29. package/dist/cli/handlers/change-set.d.ts +11 -0
  30. package/dist/cli/handlers/change-set.d.ts.map +1 -0
  31. package/dist/cli/handlers/dev.d.ts.map +1 -1
  32. package/dist/cli/handlers/fan-out.d.ts +33 -0
  33. package/dist/cli/handlers/fan-out.d.ts.map +1 -1
  34. package/dist/cli/handlers/lifecycle.d.ts.map +1 -1
  35. package/dist/cli/handlers/misc.d.ts.map +1 -1
  36. package/dist/cli/handlers/operator.d.ts +16 -0
  37. package/dist/cli/handlers/operator.d.ts.map +1 -1
  38. package/dist/cli/handlers/pr.d.ts +31 -0
  39. package/dist/cli/handlers/pr.d.ts.map +1 -0
  40. package/dist/cli/handlers/run.d.ts.map +1 -1
  41. package/dist/cli/lsp/server.d.ts.map +1 -1
  42. package/dist/cli/main.d.ts.map +1 -1
  43. package/dist/cli/mcp/op-tools.d.ts.map +1 -1
  44. package/dist/cli/mcp/server.d.ts.map +1 -1
  45. package/dist/cli/mcp/tools/build.d.ts.map +1 -1
  46. package/dist/cli/mcp/tools/composites.d.ts.map +1 -1
  47. package/dist/cli/mcp/tools/explain.d.ts.map +1 -1
  48. package/dist/cli/mcp/tools/import.d.ts.map +1 -1
  49. package/dist/cli/mcp/tools/lint.d.ts.map +1 -1
  50. package/dist/cli/mcp/tools/scaffold.d.ts.map +1 -1
  51. package/dist/cli/mcp/tools/search.d.ts.map +1 -1
  52. package/dist/cli/mcp/workspace-tools.d.ts +4 -3
  53. package/dist/cli/mcp/workspace-tools.d.ts.map +1 -1
  54. package/dist/cli/registry.d.ts +74 -3
  55. package/dist/cli/registry.d.ts.map +1 -1
  56. package/dist/codegen/fetch.d.ts.map +1 -1
  57. package/dist/codegen/naming.d.ts.map +1 -1
  58. package/dist/codegen/pinned-upgrade.d.ts +67 -3
  59. package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
  60. package/dist/codegen/registry.d.ts.map +1 -1
  61. package/dist/components/auto-release.d.ts +16 -0
  62. package/dist/components/auto-release.d.ts.map +1 -1
  63. package/dist/components/capability-plugin-loader.d.ts.map +1 -1
  64. package/dist/components/capability.d.ts +53 -0
  65. package/dist/components/capability.d.ts.map +1 -1
  66. package/dist/components/changed-files.d.ts +31 -0
  67. package/dist/components/changed-files.d.ts.map +1 -0
  68. package/dist/components/cli-support.d.ts +9 -1
  69. package/dist/components/cli-support.d.ts.map +1 -1
  70. package/dist/components/component.d.ts +24 -0
  71. package/dist/components/component.d.ts.map +1 -1
  72. package/dist/components/deploy-units.d.ts.map +1 -1
  73. package/dist/components/driver.d.ts +13 -0
  74. package/dist/components/driver.d.ts.map +1 -1
  75. package/dist/components/fan-out-output.d.ts +6 -0
  76. package/dist/components/fan-out-output.d.ts.map +1 -1
  77. package/dist/components/fan-out-record.d.ts +41 -0
  78. package/dist/components/fan-out-record.d.ts.map +1 -0
  79. package/dist/components/fan-out-run.d.ts +65 -0
  80. package/dist/components/fan-out-run.d.ts.map +1 -1
  81. package/dist/components/fan-out-support.d.ts +2 -0
  82. package/dist/components/fan-out-support.d.ts.map +1 -1
  83. package/dist/components/fan-out.d.ts +6 -0
  84. package/dist/components/fan-out.d.ts.map +1 -1
  85. package/dist/components/gated-wave-pipeline.d.ts +50 -0
  86. package/dist/components/gated-wave-pipeline.d.ts.map +1 -0
  87. package/dist/components/index.d.ts +1 -1
  88. package/dist/components/index.d.ts.map +1 -1
  89. package/dist/components/layers.d.ts +25 -0
  90. package/dist/components/layers.d.ts.map +1 -0
  91. package/dist/components/pr-pipeline.d.ts +61 -0
  92. package/dist/components/pr-pipeline.d.ts.map +1 -0
  93. package/dist/components/pr-run.d.ts +119 -0
  94. package/dist/components/pr-run.d.ts.map +1 -0
  95. package/dist/components/promote.d.ts.map +1 -1
  96. package/dist/components/starter-plugin.d.ts.map +1 -1
  97. package/dist/components/verbs/process-runner.d.ts.map +1 -1
  98. package/dist/components/verbs/r2-sync.d.ts.map +1 -1
  99. package/dist/components/verbs/run-agent.d.ts.map +1 -1
  100. package/dist/components/verbs/sbom-generator.d.ts.map +1 -1
  101. package/dist/components/verbs/shell.d.ts.map +1 -1
  102. package/dist/components/verbs/sign.d.ts.map +1 -1
  103. package/dist/components/verbs/verify.d.ts.map +1 -1
  104. package/dist/components/verbs/vuln-gate.d.ts.map +1 -1
  105. package/dist/components/verbs/vuln-scan.d.ts.map +1 -1
  106. package/dist/components/verbs/wrangler.d.ts.map +1 -1
  107. package/dist/components/wave-plan.d.ts +49 -0
  108. package/dist/components/wave-plan.d.ts.map +1 -0
  109. package/dist/composite.d.ts.map +1 -1
  110. package/dist/config.d.ts +19 -7
  111. package/dist/config.d.ts.map +1 -1
  112. package/dist/declarable.d.ts +16 -0
  113. package/dist/declarable.d.ts.map +1 -1
  114. package/dist/discovery/cache.d.ts.map +1 -1
  115. package/dist/discovery/fold-import.d.ts +15 -5
  116. package/dist/discovery/fold-import.d.ts.map +1 -1
  117. package/dist/discovery/param-deps.d.ts +16 -0
  118. package/dist/discovery/param-deps.d.ts.map +1 -1
  119. package/dist/discovery/sandbox/policy-wire.d.ts.map +1 -1
  120. package/dist/discovery/specifier-resolve.d.ts +37 -0
  121. package/dist/discovery/specifier-resolve.d.ts.map +1 -0
  122. package/dist/errors.d.ts.map +1 -1
  123. package/dist/fold/fold.d.ts +3 -1
  124. package/dist/fold/fold.d.ts.map +1 -1
  125. package/dist/gated-waves.d.ts +147 -0
  126. package/dist/gated-waves.d.ts.map +1 -0
  127. package/dist/graph-detail.d.ts.map +1 -1
  128. package/dist/graph-ir.d.ts.map +1 -1
  129. package/dist/graph-layout.d.ts.map +1 -1
  130. package/dist/import/base-parser.d.ts.map +1 -1
  131. package/dist/import/embedded.d.ts +7 -0
  132. package/dist/import/embedded.d.ts.map +1 -1
  133. package/dist/import/parser-options.d.ts +14 -0
  134. package/dist/import/parser-options.d.ts.map +1 -0
  135. package/dist/import/parser.d.ts +17 -0
  136. package/dist/import/parser.d.ts.map +1 -1
  137. package/dist/index.d.ts +1 -0
  138. package/dist/index.d.ts.map +1 -1
  139. package/dist/kubectl-context.d.ts.map +1 -1
  140. package/dist/lexicon-output.d.ts.map +1 -1
  141. package/dist/lexicon-schema.d.ts +3 -3
  142. package/dist/lexicon.d.ts +103 -3
  143. package/dist/lexicon.d.ts.map +1 -1
  144. package/dist/lifecycle/assert-live.d.ts.map +1 -1
  145. package/dist/lifecycle/gate-ledger.d.ts +22 -0
  146. package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
  147. package/dist/lifecycle/git.d.ts +46 -1
  148. package/dist/lifecycle/git.d.ts.map +1 -1
  149. package/dist/lifecycle/member-ledger.d.ts.map +1 -1
  150. package/dist/lifecycle/observe.d.ts.map +1 -1
  151. package/dist/lifecycle/plan-ledger.d.ts.map +1 -1
  152. package/dist/lifecycle/release-ledger.d.ts.map +1 -1
  153. package/dist/lifecycle/scenario.d.ts.map +1 -1
  154. package/dist/lifecycle/status.d.ts.map +1 -1
  155. package/dist/lifecycle/work-lease.d.ts +61 -2
  156. package/dist/lifecycle/work-lease.d.ts.map +1 -1
  157. package/dist/lint/config.d.ts +8 -8
  158. package/dist/lint/engine.d.ts +6 -0
  159. package/dist/lint/engine.d.ts.map +1 -1
  160. package/dist/lint/post-synth.d.ts +18 -0
  161. package/dist/lint/post-synth.d.ts.map +1 -1
  162. package/dist/lsp/lexicon-providers.d.ts.map +1 -1
  163. package/dist/op/activities/activity-contracts.d.ts +137 -11
  164. package/dist/op/activities/activity-contracts.d.ts.map +1 -1
  165. package/dist/op/activities/apply.d.ts +79 -9
  166. package/dist/op/activities/apply.d.ts.map +1 -1
  167. package/dist/op/activities/change-set.d.ts +62 -0
  168. package/dist/op/activities/change-set.d.ts.map +1 -0
  169. package/dist/op/activities/decide.d.ts +2 -0
  170. package/dist/op/activities/decide.d.ts.map +1 -1
  171. package/dist/op/activities/factory.d.ts +137 -0
  172. package/dist/op/activities/factory.d.ts.map +1 -0
  173. package/dist/op/activities/index.d.ts +5 -1
  174. package/dist/op/activities/index.d.ts.map +1 -1
  175. package/dist/op/activities/lexicon-upgrade.d.ts +44 -12
  176. package/dist/op/activities/lexicon-upgrade.d.ts.map +1 -1
  177. package/dist/op/activity-contract.d.ts +1 -1
  178. package/dist/op/activity-contract.d.ts.map +1 -1
  179. package/dist/op/activity-failure.d.ts.map +1 -1
  180. package/dist/op/activity-profiles.d.ts.map +1 -1
  181. package/dist/op/builders.d.ts +11 -0
  182. package/dist/op/builders.d.ts.map +1 -1
  183. package/dist/op/composites/apply-op.d.ts +12 -5
  184. package/dist/op/composites/apply-op.d.ts.map +1 -1
  185. package/dist/op/composites/lexicon-upgrade-op.d.ts +22 -6
  186. package/dist/op/composites/lexicon-upgrade-op.d.ts.map +1 -1
  187. package/dist/op/decide-backend.d.ts +5 -1
  188. package/dist/op/decide-backend.d.ts.map +1 -1
  189. package/dist/op/decide-read-inputs.d.ts +4 -2
  190. package/dist/op/decide-read-inputs.d.ts.map +1 -1
  191. package/dist/op/emulator-lifecycle.d.ts +21 -2
  192. package/dist/op/emulator-lifecycle.d.ts.map +1 -1
  193. package/dist/op/factory.d.ts +83 -0
  194. package/dist/op/factory.d.ts.map +1 -0
  195. package/dist/op/gate-approval.d.ts +5 -1
  196. package/dist/op/gate-approval.d.ts.map +1 -1
  197. package/dist/op/gate-wait.d.ts.map +1 -1
  198. package/dist/op/gate.d.ts +19 -3
  199. package/dist/op/gate.d.ts.map +1 -1
  200. package/dist/op/index.d.ts +6 -1
  201. package/dist/op/index.d.ts.map +1 -1
  202. package/dist/op/local-executor.d.ts +6 -0
  203. package/dist/op/local-executor.d.ts.map +1 -1
  204. package/dist/op/op-ir.d.ts +2 -0
  205. package/dist/op/op-ir.d.ts.map +1 -1
  206. package/dist/op/op-verb-class.d.ts.map +1 -1
  207. package/dist/op/operator.d.ts.map +1 -1
  208. package/dist/op/run-context.d.ts +39 -0
  209. package/dist/op/run-context.d.ts.map +1 -0
  210. package/dist/op/run-live.d.ts.map +1 -1
  211. package/dist/op/runtimes/local.d.ts.map +1 -1
  212. package/dist/op/source-archive.d.ts.map +1 -1
  213. package/dist/op/steward-beside.d.ts.map +1 -1
  214. package/dist/op/steward-points.d.ts.map +1 -1
  215. package/dist/op/steward.d.ts.map +1 -1
  216. package/dist/op/types.d.ts +16 -3
  217. package/dist/op/types.d.ts.map +1 -1
  218. package/dist/op/work-lease-run.d.ts +24 -4
  219. package/dist/op/work-lease-run.d.ts.map +1 -1
  220. package/dist/plan-summary.d.ts +207 -0
  221. package/dist/plan-summary.d.ts.map +1 -0
  222. package/dist/pr-forge.d.ts +105 -0
  223. package/dist/pr-forge.d.ts.map +1 -0
  224. package/dist/pr-loop.d.ts +178 -0
  225. package/dist/pr-loop.d.ts.map +1 -0
  226. package/dist/project-root.d.ts.map +1 -1
  227. package/dist/provenance.d.ts +21 -0
  228. package/dist/provenance.d.ts.map +1 -1
  229. package/dist/pseudo-parameter.d.ts.map +1 -1
  230. package/dist/reconcile.d.ts.map +1 -1
  231. package/dist/secret-materialization.d.ts.map +1 -1
  232. package/dist/telemetry-attribution.d.ts +31 -0
  233. package/dist/telemetry-attribution.d.ts.map +1 -1
  234. package/dist/terraform/emit-source.d.ts.map +1 -1
  235. package/dist/terraform/hcl2json.d.ts +45 -0
  236. package/dist/terraform/hcl2json.d.ts.map +1 -0
  237. package/dist/terraform/parse.d.ts +4 -40
  238. package/dist/terraform/parse.d.ts.map +1 -1
  239. package/dist/testing.d.ts.map +1 -1
  240. package/dist/workspace/__fixtures__/contract-repo.d.ts.map +1 -1
  241. package/dist/workspace/__fixtures__/decide-workspace.d.ts +1 -1
  242. package/dist/workspace/__fixtures__/decide-workspace.d.ts.map +1 -1
  243. package/dist/workspace/agent-cli.d.ts +5 -0
  244. package/dist/workspace/agent-cli.d.ts.map +1 -1
  245. package/dist/workspace/box-cli.d.ts +12 -0
  246. package/dist/workspace/box-cli.d.ts.map +1 -0
  247. package/dist/workspace/box-factory.d.ts +97 -0
  248. package/dist/workspace/box-factory.d.ts.map +1 -0
  249. package/dist/workspace/box-listing.d.ts +85 -0
  250. package/dist/workspace/box-listing.d.ts.map +1 -0
  251. package/dist/workspace/box-publish.d.ts +147 -0
  252. package/dist/workspace/box-publish.d.ts.map +1 -0
  253. package/dist/workspace/broker-protocol.d.ts +190 -0
  254. package/dist/workspace/broker-protocol.d.ts.map +1 -0
  255. package/dist/workspace/changes.d.ts.map +1 -1
  256. package/dist/workspace/chant-migrations/chud-lexicon-exit.d.ts.map +1 -1
  257. package/dist/workspace/checks/boxes.d.ts.map +1 -1
  258. package/dist/workspace/checks.d.ts +5 -0
  259. package/dist/workspace/checks.d.ts.map +1 -1
  260. package/dist/workspace/compose-graph.d.ts +10 -0
  261. package/dist/workspace/compose-graph.d.ts.map +1 -1
  262. package/dist/workspace/composites.d.ts +2 -2
  263. package/dist/workspace/composites.d.ts.map +1 -1
  264. package/dist/workspace/conformance/__fixtures__/reference-broker.d.ts +17 -0
  265. package/dist/workspace/conformance/__fixtures__/reference-broker.d.ts.map +1 -0
  266. package/dist/workspace/conformance/broker.d.ts +202 -0
  267. package/dist/workspace/conformance/broker.d.ts.map +1 -0
  268. package/dist/workspace/conformance/index.d.ts +68 -6
  269. package/dist/workspace/conformance/index.d.ts.map +1 -1
  270. package/dist/workspace/conformance/vitest.d.ts +19 -3
  271. package/dist/workspace/conformance/vitest.d.ts.map +1 -1
  272. package/dist/workspace/conformance/writer.d.ts +462 -0
  273. package/dist/workspace/conformance/writer.d.ts.map +1 -0
  274. package/dist/workspace/decide.d.ts +126 -12
  275. package/dist/workspace/decide.d.ts.map +1 -1
  276. package/dist/workspace/decision-points.schema.json +11 -4
  277. package/dist/workspace/declaration.d.ts +156 -4
  278. package/dist/workspace/declaration.d.ts.map +1 -1
  279. package/dist/workspace/declaration.schema.json +383 -5
  280. package/dist/workspace/environments.d.ts +36 -10
  281. package/dist/workspace/environments.d.ts.map +1 -1
  282. package/dist/workspace/factory-rules.d.ts +180 -0
  283. package/dist/workspace/factory-rules.d.ts.map +1 -0
  284. package/dist/workspace/generated-files.d.ts.map +1 -1
  285. package/dist/workspace/graph-cache.d.ts.map +1 -1
  286. package/dist/workspace/graph-cli.d.ts +2 -0
  287. package/dist/workspace/graph-cli.d.ts.map +1 -1
  288. package/dist/workspace/identity.d.ts +111 -0
  289. package/dist/workspace/identity.d.ts.map +1 -0
  290. package/dist/workspace/init.d.ts +21 -0
  291. package/dist/workspace/init.d.ts.map +1 -1
  292. package/dist/workspace/intent-cli.d.ts +7 -4
  293. package/dist/workspace/intent-cli.d.ts.map +1 -1
  294. package/dist/workspace/intent-record.d.ts +36 -2
  295. package/dist/workspace/intent-record.d.ts.map +1 -1
  296. package/dist/workspace/intent.d.ts +249 -8
  297. package/dist/workspace/intent.d.ts.map +1 -1
  298. package/dist/workspace/json-edit.d.ts +24 -0
  299. package/dist/workspace/json-edit.d.ts.map +1 -0
  300. package/dist/workspace/jsonc.d.ts +11 -0
  301. package/dist/workspace/jsonc.d.ts.map +1 -1
  302. package/dist/workspace/kinds.d.ts +66 -4
  303. package/dist/workspace/kinds.d.ts.map +1 -1
  304. package/dist/workspace/lexicon-symbols.d.ts +29 -0
  305. package/dist/workspace/lexicon-symbols.d.ts.map +1 -0
  306. package/dist/workspace/lineage-hash-index.d.ts.map +1 -1
  307. package/dist/workspace/lineage-lock.d.ts +2 -2
  308. package/dist/workspace/lineage-lock.d.ts.map +1 -1
  309. package/dist/workspace/lineage-upgrade.d.ts +31 -2
  310. package/dist/workspace/lineage-upgrade.d.ts.map +1 -1
  311. package/dist/workspace/links.d.ts.map +1 -1
  312. package/dist/workspace/point-answer.schema.json +42 -2
  313. package/dist/workspace/points-cli.d.ts +10 -3
  314. package/dist/workspace/points-cli.d.ts.map +1 -1
  315. package/dist/workspace/points.d.ts +66 -5
  316. package/dist/workspace/points.d.ts.map +1 -1
  317. package/dist/workspace/principal-classes.d.ts +114 -0
  318. package/dist/workspace/principal-classes.d.ts.map +1 -0
  319. package/dist/workspace/reason-codes.d.ts +53 -4
  320. package/dist/workspace/reason-codes.d.ts.map +1 -1
  321. package/dist/workspace/record-assets.d.ts.map +1 -1
  322. package/dist/workspace/record-sessions.d.ts +5 -7
  323. package/dist/workspace/record-sessions.d.ts.map +1 -1
  324. package/dist/workspace/records-checkout.d.ts +54 -0
  325. package/dist/workspace/records-checkout.d.ts.map +1 -0
  326. package/dist/workspace/records-cli.d.ts +34 -1
  327. package/dist/workspace/records-cli.d.ts.map +1 -1
  328. package/dist/workspace/records-close.d.ts +7 -3
  329. package/dist/workspace/records-close.d.ts.map +1 -1
  330. package/dist/workspace/records-since.d.ts.map +1 -1
  331. package/dist/workspace/records-write.d.ts +68 -7
  332. package/dist/workspace/records-write.d.ts.map +1 -1
  333. package/dist/workspace/records.d.ts +43 -9
  334. package/dist/workspace/records.d.ts.map +1 -1
  335. package/dist/workspace/runs-cli.d.ts +296 -0
  336. package/dist/workspace/runs-cli.d.ts.map +1 -0
  337. package/dist/workspace/runs.d.ts +544 -0
  338. package/dist/workspace/runs.d.ts.map +1 -0
  339. package/dist/workspace/session-kinds.d.ts +1 -1
  340. package/dist/workspace/session-kinds.d.ts.map +1 -1
  341. package/dist/workspace/source-block.d.ts +1 -1
  342. package/dist/workspace/source-block.d.ts.map +1 -1
  343. package/dist/workspace/squash.d.ts +80 -0
  344. package/dist/workspace/squash.d.ts.map +1 -0
  345. package/dist/workspace/status-gates.d.ts +17 -3
  346. package/dist/workspace/status-gates.d.ts.map +1 -1
  347. package/dist/workspace/status.d.ts +64 -0
  348. package/dist/workspace/status.d.ts.map +1 -1
  349. package/dist/workspace/symbols.d.ts +63 -0
  350. package/dist/workspace/symbols.d.ts.map +1 -0
  351. package/dist/workspace/trailer-joins.d.ts +46 -0
  352. package/dist/workspace/trailer-joins.d.ts.map +1 -0
  353. package/dist/workspace/trailers.d.ts +89 -0
  354. package/dist/workspace/trailers.d.ts.map +1 -0
  355. package/dist/workspace/trust/attestor.d.ts.map +1 -1
  356. package/dist/workspace/trust/rotation.d.ts.map +1 -1
  357. package/dist/workspace/trust/run-commits.d.ts +46 -0
  358. package/dist/workspace/trust/run-commits.d.ts.map +1 -0
  359. package/dist/workspace/trust/run-statement.d.ts +128 -0
  360. package/dist/workspace/trust/run-statement.d.ts.map +1 -0
  361. package/dist/workspace/trust/seal.d.ts +38 -0
  362. package/dist/workspace/trust/seal.d.ts.map +1 -1
  363. package/dist/workspace/trust/test-repo.d.ts.map +1 -1
  364. package/dist/workspace/trust/verify-cli.d.ts +1 -1
  365. package/dist/workspace/trust/verify.d.ts +16 -2
  366. package/dist/workspace/trust/verify.d.ts.map +1 -1
  367. package/dist/workspace/wip-cli.d.ts +21 -0
  368. package/dist/workspace/wip-cli.d.ts.map +1 -0
  369. package/dist/workspace/wip.d.ts +268 -0
  370. package/dist/workspace/wip.d.ts.map +1 -0
  371. package/dist/workspace/work-cli.d.ts +39 -3
  372. package/dist/workspace/work-cli.d.ts.map +1 -1
  373. package/dist/workspace/work-evidence.d.ts +1 -1
  374. package/dist/workspace/work-evidence.d.ts.map +1 -1
  375. package/dist/workspace/work-size.d.ts +55 -0
  376. package/dist/workspace/work-size.d.ts.map +1 -0
  377. package/dist/workspace/work.d.ts +26 -1
  378. package/dist/workspace/work.d.ts.map +1 -1
  379. package/dist/workspace/workspace-kinds.schema.json +122 -0
  380. package/dist/workspace/workspace-principals.schema.json +60 -0
  381. package/dist/workspace/write-lock-cli.d.ts +60 -0
  382. package/dist/workspace/write-lock-cli.d.ts.map +1 -0
  383. package/dist/workspace/write-lock.d.ts +152 -0
  384. package/dist/workspace/write-lock.d.ts.map +1 -0
  385. package/dist/workspace/write-scope.d.ts +83 -19
  386. package/dist/workspace/write-scope.d.ts.map +1 -1
  387. package/dist/yaml.d.ts +21 -39
  388. package/dist/yaml.d.ts.map +1 -1
  389. package/package.json +7 -2
  390. package/src/__fixtures__/change-set/lifecycle-plan.floci.json +59 -0
  391. package/src/__fixtures__/change-set/lifecycle-v1.ts.txt +4 -0
  392. package/src/__fixtures__/change-set/lifecycle-v2.ts.txt +4 -0
  393. package/src/__fixtures__/change-set/lifecycle.change-set.golden.json +95 -0
  394. package/src/__fixtures__/change-set/warden.change-set.golden.json +106 -0
  395. package/src/__fixtures__/change-set/warden.plan.json +44 -0
  396. package/src/__fixtures__/plan-summary/normalization-vectors.json +1593 -0
  397. package/src/__fixtures__/pr-loop/pr-apply-applied.note.golden.md +31 -0
  398. package/src/__fixtures__/pr-loop/pr-apply-refused.note.golden.md +31 -0
  399. package/src/__fixtures__/pr-loop/pr-plan.golden.json +127 -0
  400. package/src/__fixtures__/pr-loop/pr-plan.note.golden.md +37 -0
  401. package/src/audit/core.test.ts +15 -0
  402. package/src/audit/core.ts +8 -2
  403. package/src/audit/discover.test.ts +11 -0
  404. package/src/audit/discover.ts +7 -2
  405. package/src/audit/prior-art.ts +15 -0
  406. package/src/change-set-bundle.test.ts +57 -0
  407. package/src/change-set.test.ts +215 -0
  408. package/src/change-set.ts +445 -0
  409. package/src/cli/commands/__fixtures__/init-lexicon-output/package.json +1 -1
  410. package/src/cli/commands/audit-opt-in.test.ts +54 -0
  411. package/src/cli/commands/audit.ts +29 -2
  412. package/src/cli/commands/build.test.ts +19 -0
  413. package/src/cli/commands/build.ts +3 -2
  414. package/src/cli/commands/carve-emit-state.test.ts +4 -0
  415. package/src/cli/commands/carve-emit.ts +5 -19
  416. package/src/cli/commands/check-lexicon.test.ts +62 -1
  417. package/src/cli/commands/check-lexicon.ts +36 -6
  418. package/src/cli/commands/import-live.test.ts +18 -0
  419. package/src/cli/commands/import-parser-options.test.ts +133 -0
  420. package/src/cli/commands/import.ts +21 -3
  421. package/src/cli/commands/init-lexicon/templates/project.ts +1 -1
  422. package/src/cli/commands/init.test.ts +8 -1
  423. package/src/cli/commands/init.ts +23 -8
  424. package/src/cli/commands/lint.test.ts +37 -0
  425. package/src/cli/commands/onboard.test.ts +53 -3
  426. package/src/cli/commands/onboard.ts +52 -4
  427. package/src/cli/commands/pinned-upgrade.ts +73 -33
  428. package/src/cli/handlers/__snapshots__/build-member.test.ts.snap +2 -2
  429. package/src/cli/handlers/build.ts +13 -1
  430. package/src/cli/handlers/change-set.test.ts +56 -0
  431. package/src/cli/handlers/change-set.ts +44 -0
  432. package/src/cli/handlers/components.ts +2 -2
  433. package/src/cli/handlers/dev.ts +8 -6
  434. package/src/cli/handlers/fan-out.test.ts +221 -2
  435. package/src/cli/handlers/fan-out.ts +165 -75
  436. package/src/cli/handlers/graph.ts +3 -0
  437. package/src/cli/handlers/lifecycle.test.ts +67 -0
  438. package/src/cli/handlers/lifecycle.ts +6 -5
  439. package/src/cli/handlers/misc.ts +2 -0
  440. package/src/cli/handlers/operator.test.ts +21 -0
  441. package/src/cli/handlers/operator.ts +121 -6
  442. package/src/cli/handlers/pr.ts +373 -0
  443. package/src/cli/handlers/run.test.ts +111 -0
  444. package/src/cli/handlers/run.ts +86 -24
  445. package/src/cli/handlers/scenario.ts +2 -2
  446. package/src/cli/main.test.ts +21 -0
  447. package/src/cli/main.ts +246 -30
  448. package/src/cli/mcp/never-over-mcp.test.ts +101 -0
  449. package/src/cli/mcp/op-tools.ts +24 -2
  450. package/src/cli/mcp/workspace-tools.test.ts +5 -2
  451. package/src/cli/mcp/workspace-tools.ts +62 -7
  452. package/src/cli/registry.ts +74 -3
  453. package/src/codegen/pinned-upgrade-multi.test.ts +157 -0
  454. package/src/codegen/pinned-upgrade-tags.test.ts +112 -0
  455. package/src/codegen/pinned-upgrade.test.ts +104 -0
  456. package/src/codegen/pinned-upgrade.ts +250 -56
  457. package/src/codegen/testdata/postgres-tags.json +242 -0
  458. package/src/components/auto-release.ts +1 -1
  459. package/src/components/capability.ts +55 -0
  460. package/src/components/changed-files.ts +66 -0
  461. package/src/components/cli-support.ts +28 -5
  462. package/src/components/component.schema.json +17 -0
  463. package/src/components/component.ts +25 -0
  464. package/src/components/deploy-units.ts +3 -0
  465. package/src/components/driver.test.ts +52 -0
  466. package/src/components/driver.ts +31 -13
  467. package/src/components/fan-out-output.ts +42 -1
  468. package/src/components/fan-out-record.ts +69 -0
  469. package/src/components/fan-out-run.test.ts +17 -0
  470. package/src/components/fan-out-run.ts +304 -1
  471. package/src/components/fan-out-support.ts +3 -0
  472. package/src/components/fan-out-waves.test.ts +375 -0
  473. package/src/components/fan-out.ts +18 -17
  474. package/src/components/gated-wave-pipeline.ts +82 -0
  475. package/src/components/index.ts +1 -0
  476. package/src/components/layers.ts +30 -0
  477. package/src/components/pr-pipeline.ts +91 -0
  478. package/src/components/pr-run.test.ts +205 -0
  479. package/src/components/pr-run.ts +280 -0
  480. package/src/components/promote.ts +5 -0
  481. package/src/components/verbs/shell.test.ts +11 -0
  482. package/src/components/verbs/shell.ts +7 -3
  483. package/src/components/wave-plan.ts +124 -0
  484. package/src/config.test.ts +21 -0
  485. package/src/config.ts +15 -0
  486. package/src/declarable.test.ts +21 -0
  487. package/src/declarable.ts +19 -0
  488. package/src/discovery/fold-composite.test.ts +41 -5
  489. package/src/discovery/fold-import.test.ts +129 -0
  490. package/src/discovery/fold-import.ts +643 -131
  491. package/src/discovery/fold-package-composite.test.ts +264 -0
  492. package/src/discovery/fold-specifiers.test.ts +191 -0
  493. package/src/discovery/param-deps.test.ts +66 -1
  494. package/src/discovery/param-deps.ts +45 -0
  495. package/src/discovery/sandbox/bundle.ts +1 -1
  496. package/src/discovery/specifier-resolve.ts +344 -0
  497. package/src/fold/fold.test.ts +39 -1
  498. package/src/fold/fold.ts +83 -9
  499. package/src/fold-provenance.test.ts +140 -0
  500. package/src/gated-waves-bundle.test.ts +62 -0
  501. package/src/gated-waves.test.ts +118 -0
  502. package/src/gated-waves.ts +240 -0
  503. package/src/graph-ir.test.ts +83 -0
  504. package/src/graph-ir.ts +29 -0
  505. package/src/import/embedded.test.ts +20 -0
  506. package/src/import/embedded.ts +13 -0
  507. package/src/import/parser-options.ts +46 -0
  508. package/src/import/parser.ts +20 -0
  509. package/src/index.ts +1 -0
  510. package/src/lexicon.ts +106 -3
  511. package/src/lifecycle/gate-ledger.ts +23 -0
  512. package/src/lifecycle/git.ts +102 -16
  513. package/src/lifecycle/observe.test.ts +18 -0
  514. package/src/lifecycle/observe.ts +6 -4
  515. package/src/lifecycle/snapshot.ts +2 -2
  516. package/src/lifecycle/work-lease.test.ts +1 -1
  517. package/src/lifecycle/work-lease.ts +93 -2
  518. package/src/lint/engine.test.ts +55 -0
  519. package/src/lint/engine.ts +30 -4
  520. package/src/lint/output-docs.test.ts +59 -56
  521. package/src/lint/post-synth.test.ts +19 -0
  522. package/src/lint/post-synth.ts +19 -1
  523. package/src/meta/declared-imports.test.ts +1 -1
  524. package/src/op/activities/activity-contracts.ts +84 -0
  525. package/src/op/activities/apply.test.ts +189 -5
  526. package/src/op/activities/apply.ts +230 -8
  527. package/src/op/activities/change-set.ts +114 -0
  528. package/src/op/activities/decide.ts +3 -0
  529. package/src/op/activities/factory.ts +675 -0
  530. package/src/op/activities/index.ts +9 -0
  531. package/src/op/activities/lexicon-upgrade.test.ts +160 -6
  532. package/src/op/activities/lexicon-upgrade.ts +154 -51
  533. package/src/op/activity-contract.test.ts +21 -1
  534. package/src/op/activity-contract.ts +19 -9
  535. package/src/op/builders.ts +23 -0
  536. package/src/op/composites/apply-op.ts +12 -5
  537. package/src/op/composites/composites.test.ts +30 -3
  538. package/src/op/composites/lexicon-upgrade-op.test.ts +7 -2
  539. package/src/op/composites/lexicon-upgrade-op.ts +29 -8
  540. package/src/op/decide-backend.ts +5 -1
  541. package/src/op/decide-read-inputs.ts +33 -5
  542. package/src/op/emulator-lifecycle.test.ts +23 -0
  543. package/src/op/emulator-lifecycle.ts +52 -14
  544. package/src/op/factory.e2e.test.ts +232 -0
  545. package/src/op/factory.ts +118 -0
  546. package/src/op/gate-approval.test.ts +74 -0
  547. package/src/op/gate-approval.ts +5 -1
  548. package/src/op/gate.ts +31 -5
  549. package/src/op/index.ts +11 -1
  550. package/src/op/local-executor.test.ts +15 -0
  551. package/src/op/local-executor.ts +40 -12
  552. package/src/op/local-output.ts +1 -1
  553. package/src/op/op-ir.test.ts +9 -0
  554. package/src/op/op-ir.ts +4 -0
  555. package/src/op/op-verb-class.ts +3 -0
  556. package/src/op/operator.ts +4 -0
  557. package/src/op/run-context.test.ts +141 -0
  558. package/src/op/run-context.ts +51 -0
  559. package/src/op/runtimes/local.test.ts +14 -0
  560. package/src/op/runtimes/local.ts +2 -0
  561. package/src/op/steward-beside.ts +2 -0
  562. package/src/op/types.ts +16 -3
  563. package/src/op/work-lease-run.test.ts +47 -0
  564. package/src/op/work-lease-run.ts +76 -11
  565. package/src/plan-summary.test.ts +263 -0
  566. package/src/plan-summary.ts +845 -0
  567. package/src/pr-forge.test.ts +237 -0
  568. package/src/pr-forge.ts +332 -0
  569. package/src/pr-loop-bundle.test.ts +46 -0
  570. package/src/pr-loop.test.ts +171 -0
  571. package/src/pr-loop.ts +324 -0
  572. package/src/provenance.ts +35 -0
  573. package/src/telemetry-attribution.test.ts +23 -1
  574. package/src/telemetry-attribution.ts +51 -0
  575. package/src/terraform/hcl2json.test.ts +21 -0
  576. package/src/terraform/hcl2json.ts +81 -0
  577. package/src/terraform/parse.ts +11 -74
  578. package/src/workspace/agent-cli.ts +7 -3
  579. package/src/workspace/agent.schema.json +22 -0
  580. package/src/workspace/app-kind.test.ts +196 -0
  581. package/src/workspace/box-cli.ts +113 -0
  582. package/src/workspace/box-factory.test.ts +323 -0
  583. package/src/workspace/box-factory.ts +136 -0
  584. package/src/workspace/box-listing-write.schema.json +204 -0
  585. package/src/workspace/box-listing.test.ts +234 -0
  586. package/src/workspace/box-listing.ts +324 -0
  587. package/src/workspace/box-publish.schema.json +498 -0
  588. package/src/workspace/box-publish.test.ts +204 -0
  589. package/src/workspace/box-publish.ts +420 -0
  590. package/src/workspace/box-ship.test.ts +96 -0
  591. package/src/workspace/broker-protocol.schema.json +186 -0
  592. package/src/workspace/broker-protocol.test.ts +122 -0
  593. package/src/workspace/broker-protocol.ts +317 -0
  594. package/src/workspace/builder-tiers.test.ts +146 -0
  595. package/src/workspace/change-set.schema.json +460 -0
  596. package/src/workspace/changes.schema.json +12 -20
  597. package/src/workspace/changes.ts +4 -1
  598. package/src/workspace/chant-migrations.e2e.test.ts +17 -5
  599. package/src/workspace/checks/boxes.test.ts +5 -0
  600. package/src/workspace/checks.ts +39 -8
  601. package/src/workspace/component-environments.test.ts +105 -0
  602. package/src/workspace/compose-graph.ts +7 -0
  603. package/src/workspace/composites.schema.json +23 -4
  604. package/src/workspace/composites.test.ts +8 -8
  605. package/src/workspace/composites.ts +13 -2
  606. package/src/workspace/conformance/__fixture__/decisions/decision.schema.json +2 -2
  607. package/src/workspace/conformance/__fixtures__/reference-broker.ts +207 -0
  608. package/src/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
  609. package/src/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
  610. package/src/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  611. package/src/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  612. package/src/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
  613. package/src/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  614. package/src/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  615. package/src/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
  616. package/src/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
  617. package/src/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  618. package/src/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  619. package/src/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
  620. package/src/workspace/conformance/broker.test.ts +122 -0
  621. package/src/workspace/conformance/broker.ts +792 -0
  622. package/src/workspace/conformance/conformance.e2e.test.ts +36 -3
  623. package/src/workspace/conformance/index.mjs +51 -3
  624. package/src/workspace/conformance/index.ts +107 -15
  625. package/src/workspace/conformance/vitest.ts +76 -2
  626. package/src/workspace/conformance/writer-conformance.e2e.test.ts +177 -0
  627. package/src/workspace/conformance/writer.test.ts +186 -0
  628. package/src/workspace/conformance/writer.ts +1191 -0
  629. package/src/workspace/decide.test.ts +208 -4
  630. package/src/workspace/decide.ts +433 -73
  631. package/src/workspace/decision-points.schema.json +11 -4
  632. package/src/workspace/declaration.schema.json +383 -5
  633. package/src/workspace/declaration.ts +315 -10
  634. package/src/workspace/environments.ts +66 -14
  635. package/src/workspace/factory-rules.test.ts +62 -0
  636. package/src/workspace/factory-rules.ts +218 -0
  637. package/src/workspace/graph-cli.ts +6 -3
  638. package/src/workspace/graph.schema.json +314 -0
  639. package/src/workspace/identity.test.ts +219 -0
  640. package/src/workspace/identity.ts +186 -0
  641. package/src/workspace/init.ts +82 -2
  642. package/src/workspace/intent-cli.ts +84 -13
  643. package/src/workspace/intent-patch-id.test.ts +162 -0
  644. package/src/workspace/intent-record.schema.json +336 -1
  645. package/src/workspace/intent-record.ts +96 -16
  646. package/src/workspace/intent-reviews.test.ts +76 -0
  647. package/src/workspace/intent-squash.test.ts +213 -0
  648. package/src/workspace/intent-why.test.ts +274 -0
  649. package/src/workspace/intent.schema.json +950 -9
  650. package/src/workspace/intent.test.ts +11 -2
  651. package/src/workspace/intent.ts +722 -65
  652. package/src/workspace/json-edit.test.ts +121 -0
  653. package/src/workspace/json-edit.ts +142 -0
  654. package/src/workspace/jsonc.ts +20 -0
  655. package/src/workspace/kinds.ts +201 -39
  656. package/src/workspace/lexicon-symbols.test.ts +148 -0
  657. package/src/workspace/lexicon-symbols.ts +125 -0
  658. package/src/workspace/lineage-upgrade.test.ts +63 -0
  659. package/src/workspace/lineage-upgrade.ts +146 -5
  660. package/src/workspace/plan-summary.schema.json +155 -0
  661. package/src/workspace/point-answer.schema.json +42 -2
  662. package/src/workspace/points-cli.ts +42 -16
  663. package/src/workspace/points-write.schema.json +163 -4
  664. package/src/workspace/points.schema.json +157 -2
  665. package/src/workspace/points.test.ts +13 -1
  666. package/src/workspace/points.ts +118 -12
  667. package/src/workspace/pr-report.schema.json +95 -0
  668. package/src/workspace/principal-classes.test.ts +175 -0
  669. package/src/workspace/principal-classes.ts +307 -0
  670. package/src/workspace/profiles.test.ts +159 -0
  671. package/src/workspace/read-contract.test.ts +2 -2
  672. package/src/workspace/reason-codes.test.ts +23 -3
  673. package/src/workspace/reason-codes.ts +61 -4
  674. package/src/workspace/record-sessions.ts +9 -8
  675. package/src/workspace/records-amend.schema.json +80 -0
  676. package/src/workspace/records-checkout.ts +106 -0
  677. package/src/workspace/records-cli.ts +123 -17
  678. package/src/workspace/records-close.schema.json +79 -0
  679. package/src/workspace/records-close.ts +31 -7
  680. package/src/workspace/records-concurrent.e2e.test.ts +135 -0
  681. package/src/workspace/records-concurrent.test.ts +145 -0
  682. package/src/workspace/records-formats.test.ts +46 -10
  683. package/src/workspace/records-new.schema.json +9 -0
  684. package/src/workspace/records-review.schema.json +80 -0
  685. package/src/workspace/records-sessions-write.test.ts +69 -0
  686. package/src/workspace/records-sessions.test.ts +22 -0
  687. package/src/workspace/records-uncommitted.test.ts +171 -0
  688. package/src/workspace/records-write.ts +219 -30
  689. package/src/workspace/records.schema.json +88 -1
  690. package/src/workspace/records.ts +76 -8
  691. package/src/workspace/reference-kinds/app/package.json +10 -0
  692. package/src/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  693. package/src/workspace/run-statement.schema.json +622 -0
  694. package/src/workspace/runs-cli.ts +710 -0
  695. package/src/workspace/runs-statement.test.ts +239 -0
  696. package/src/workspace/runs-write.schema.json +994 -0
  697. package/src/workspace/runs.schema.json +1257 -0
  698. package/src/workspace/runs.test.ts +281 -0
  699. package/src/workspace/runs.ts +970 -0
  700. package/src/workspace/session-kinds.ts +3 -3
  701. package/src/workspace/squash.ts +198 -0
  702. package/src/workspace/status-contract.test.ts +10 -2
  703. package/src/workspace/status-gates.ts +25 -9
  704. package/src/workspace/status.schema.json +252 -4
  705. package/src/workspace/status.ts +110 -1
  706. package/src/workspace/symbols.ts +191 -0
  707. package/src/workspace/trailer-joins.test.ts +171 -0
  708. package/src/workspace/trailer-joins.ts +82 -0
  709. package/src/workspace/trailers.ts +148 -0
  710. package/src/workspace/trust/run-commits.ts +115 -0
  711. package/src/workspace/trust/run-statement.ts +226 -0
  712. package/src/workspace/trust/seal.ts +58 -1
  713. package/src/workspace/trust/verify-cli.ts +6 -5
  714. package/src/workspace/trust/verify.ts +39 -6
  715. package/src/workspace/wip-cli.ts +97 -0
  716. package/src/workspace/wip-write.schema.json +504 -0
  717. package/src/workspace/wip.schema.json +334 -0
  718. package/src/workspace/wip.test.ts +294 -0
  719. package/src/workspace/wip.ts +753 -0
  720. package/src/workspace/work-cli.e2e.test.ts +28 -1
  721. package/src/workspace/work-cli.ts +136 -8
  722. package/src/workspace/work-evidence.schema.json +5 -0
  723. package/src/workspace/work-history.schema.json +73 -1
  724. package/src/workspace/work-history.test.ts +48 -5
  725. package/src/workspace/work-kind-fields.test.ts +154 -0
  726. package/src/workspace/work-lease.schema.json +14 -1
  727. package/src/workspace/work-size.test.ts +77 -0
  728. package/src/workspace/work-size.ts +93 -0
  729. package/src/workspace/work.ts +82 -0
  730. package/src/workspace/workspace-kinds.schema.json +122 -0
  731. package/src/workspace/workspace-principals.schema.json +60 -0
  732. package/src/workspace/write-lock-cli.ts +131 -0
  733. package/src/workspace/write-lock.schema.json +172 -0
  734. package/src/workspace/write-lock.test.ts +189 -0
  735. package/src/workspace/write-lock.ts +474 -0
  736. package/src/workspace/write-scope.test.ts +144 -3
  737. package/src/workspace/write-scope.ts +192 -45
  738. package/src/yaml.test.ts +111 -1
  739. package/src/yaml.ts +141 -549
@@ -5,6 +5,7 @@
5
5
  * ships.
6
6
  */
7
7
 
8
+ import { execFileSync } from "node:child_process";
8
9
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
9
10
  import { join, resolve } from "node:path";
10
11
  import { afterAll, beforeAll, describe, expect, test } from "vitest";
@@ -12,6 +13,7 @@ import {
12
13
  checkReaderRead,
13
14
  CONFORMANCE_FIXTURE_DIR,
14
15
  createConformanceWorkspace,
16
+ UNCOMMITTED_DECISION,
15
17
  READ_CONTRACT_COMMANDS,
16
18
  REFERENCE_READS,
17
19
  runWorkspaceReaderConformance,
@@ -32,8 +34,11 @@ const JSON_FLAG: Record<ReadContractCommand, string[]> = {
32
34
  check: ["--format", "json"],
33
35
  status: ["--json"],
34
36
  records: ["--json"],
37
+ "records --uncommitted": ["--json"],
35
38
  "graph --intent": ["--json"],
36
39
  "graph --composites": ["--json"],
40
+ runs: ["--json"],
41
+ wip: ["--json"],
37
42
  };
38
43
 
39
44
  /** The smallest reader that conforms, with a hook to misbehave. */
@@ -48,7 +53,7 @@ function reader(twist: (doc: Record<string, unknown>, chant: ChantTransport) =>
48
53
 
49
54
  let ws: ConformanceWorkspace;
50
55
  beforeAll(() => {
51
- ws = createConformanceWorkspace();
56
+ ws = createConformanceWorkspace({ uncommitted: true });
52
57
  }, 300_000);
53
58
  afterAll(() => ws?.dispose());
54
59
 
@@ -72,9 +77,37 @@ describe("the generated conformance workspace (#2679)", () => {
72
77
  test("the decision record and the region the intent read names are in the workspace", async () => {
73
78
  const docs: Record<string, unknown>[] = [];
74
79
  await runWorkspaceReaderConformance(reader((doc) => (docs.push(doc), doc)), { workspaceDir: ws.dir, commands: ["records", "graph --intent"] });
75
- expect((docs[0].records as { id: string }[]).map((r) => r.id)).toEqual(["fix-001"]);
80
+ expect((docs[0].records as { id: string; worktree: string }[]).map((r) => [r.id, r.worktree])).toEqual([
81
+ ["fix-001", "committed"],
82
+ ["fix-002", "new"],
83
+ ]);
76
84
  expect(docs[1].region).toBe(`region:${REFERENCE_READS["graph --intent"][0]}`);
77
85
  }, 300_000);
86
+
87
+ test("records --uncommitted lists the decision the workspace leaves uncommitted, with the branch, head and base (#3160)", async () => {
88
+ const docs: Record<string, unknown>[] = [];
89
+ const report = await runWorkspaceReaderConformance(reader((doc) => (docs.push(doc), doc)), { workspaceDir: ws.dir, commands: ["records --uncommitted"] });
90
+ expect(report.problems).toEqual([]);
91
+ const head = execFileSync("git", ["rev-parse", "HEAD"], { cwd: ws.dir, encoding: "utf-8" }).trim();
92
+ expect(docs[0]).toMatchObject({
93
+ uncommitted: true,
94
+ checkout: { branch: "main", head, base: head, baseFrom: "main", deleted: [] },
95
+ records: [{ id: "fix-002", path: UNCOMMITTED_DECISION.path, worktree: "new", state: "proposed", valid: true }],
96
+ summary: { total: 1, valid: 1, invalid: 0 },
97
+ });
98
+ }, 300_000);
99
+ });
100
+
101
+ describe("the generated workspace's agent run (#3033)", () => {
102
+ test("runs reads the run the workspace commit names, joined by its trailer and its record", async () => {
103
+ const docs: Record<string, unknown>[] = [];
104
+ const report = await runWorkspaceReaderConformance(reader((doc) => (docs.push(doc), doc)), { workspaceDir: ws.dir, commands: ["runs"] });
105
+ expect(report.problems).toEqual([]);
106
+ expect(docs[0]).toMatchObject({
107
+ runs: [{ id: "conformance-run", state: "ended", by: "conformance", cost: { amount: 0.01, currency: "USD" }, commits: [{ joinedBy: ["record", "trailer"] }] }],
108
+ totals: { all: { runs: 1, unpriced: [] } },
109
+ });
110
+ }, 300_000);
78
111
  });
79
112
 
80
113
  describe("commands (#2679)", () => {
@@ -87,7 +120,7 @@ describe("commands (#2679)", () => {
87
120
  expect(report.problems).toEqual([]);
88
121
  expect(read).toEqual(["ls", "status", "graph --composites"]);
89
122
  expect(report.checked).toEqual(["ls", "status", "graph --composites"]);
90
- expect(report.skipped).toEqual(["graph", "check", "records", "graph --intent"]);
123
+ expect(report.skipped).toEqual(["graph", "check", "records", "records --uncommitted", "graph --intent", "runs", "wip"]);
91
124
  }, 300_000);
92
125
 
93
126
  test("a name that is not a contract command, or an empty list, is refused", () => {
@@ -1,7 +1,8 @@
1
1
  // The entry of `@intentius/chant/workspace/conformance` for plain Node
2
- // (#2679). The suite is written in TypeScript like the rest of the package,
3
- // and Node does not strip types under node_modules, so this file loads it
4
- // through tsx, a dependency of this package. `node --test` runs a reader's
2
+ // (#2679): the reader suite, the writer suite (#3159), and the broker suite (#3164). The suites are
3
+ // written in TypeScript like the rest of the package, and Node does not
4
+ // strip types under node_modules, so this file loads them through tsx, a
5
+ // dependency of this package. `node --test` runs a reader's or a writer's
5
6
  // test file that imports it with no loader flag. Types come from
6
7
  // dist/workspace/conformance/index.d.ts.
7
8
 
@@ -15,6 +16,7 @@ export const {
15
16
  READ_CONTRACT_JSON_FLAGS,
16
17
  REFERENCE_READS,
17
18
  CONFORMANCE_FIXTURE_DIR,
19
+ UNCOMMITTED_DECISION,
18
20
  defaultChantCommand,
19
21
  referenceWorkspaceDir,
20
22
  readContractSchema,
@@ -32,4 +34,50 @@ export const {
32
34
  recordingTransport,
33
35
  readAndCheck,
34
36
  runWorkspaceReaderConformance,
37
+ runChant,
38
+ WRITE_CONTRACT_ACTIONS,
39
+ WRITE_CONTRACT_SCHEMAS,
40
+ WRITE_CONTRACT_JSON_FLAGS,
41
+ WRITER_KINDS,
42
+ WRITER_PRINCIPALS,
43
+ WRITER_SCRIPT,
44
+ WRITER_FIXTURE_DIR,
45
+ WRITER_BOX,
46
+ WRITER_INPUTS,
47
+ writeWriterInputs,
48
+ readListing,
49
+ readWip,
50
+ PRIVATE_STATE_CATEGORIES,
51
+ writeArgv,
52
+ writeContractSchema,
53
+ worktreeDigest,
54
+ gitRefs,
55
+ refChanges,
56
+ isReadCall,
57
+ writerCallProblems,
58
+ writerDocumentProblems,
59
+ reportedWrites,
60
+ unreportedChanges,
61
+ buildStep,
62
+ referenceWriter,
63
+ createWriterConformanceWorkspace,
64
+ selectActions,
65
+ undeclaredState,
66
+ runWorkspaceWriterConformance,
67
+ CONCURRENT_AMENDS,
68
+ concurrentAmendStep,
69
+ concurrentAmends,
70
+ BROKER_CONFORMANCE_CAPABILITIES,
71
+ LOBBY_CAPABILITIES,
72
+ CONFORMANCE_BOXES,
73
+ CONFORMANCE_SECRET,
74
+ CONFORMANCE_UNHELD_SECRET,
75
+ BROKER_CHECKS,
76
+ brokerChecks,
77
+ brokerSchemaValidator,
78
+ schemaInstance,
79
+ startBrokerConformance,
80
+ runBrokerCheck,
81
+ runBrokerConformance,
82
+ upstreamHandlers,
35
83
  } = suite;
@@ -35,6 +35,14 @@
35
35
  * app, and a chant member with one composite and one component), declared
36
36
  * by `chant workspace init --yes`, so {@link REFERENCE_READS} resolve in
37
37
  * both. `workspaceDir` names another workspace with the same files.
38
+ *
39
+ * The workspace the suite generates for a run also holds one decision,
40
+ * proposed and never committed ({@link UNCOMMITTED_DECISION}), so
41
+ * `records --uncommitted` (#3160) has a record to list with its `worktree`.
42
+ * {@link createConformanceWorkspace} called directly leaves it out unless
43
+ * asked, so a test that writes records there allocates the ids it always
44
+ * did. In the chant repository the reference workspace holds whatever the
45
+ * checkout does, often nothing uncommitted.
38
46
  */
39
47
 
40
48
  import { execFileSync, spawn } from "node:child_process";
@@ -48,7 +56,7 @@ import { isDeepStrictEqual } from "node:util";
48
56
  import { READ_CONTRACT_VERSION } from "../reason-codes";
49
57
 
50
58
  /** The read-contract commands, as a reader names them. */
51
- export const READ_CONTRACT_COMMANDS = ["ls", "graph", "check", "status", "records", "graph --intent", "graph --composites"] as const;
59
+ export const READ_CONTRACT_COMMANDS = ["ls", "graph", "check", "status", "records", "records --uncommitted", "graph --intent", "graph --composites", "runs", "wip"] as const;
52
60
  export type ReadContractCommand = (typeof READ_CONTRACT_COMMANDS)[number];
53
61
 
54
62
  /**
@@ -62,8 +70,11 @@ export const READ_CONTRACT_SCHEMAS: Record<ReadContractCommand, string> = {
62
70
  check: "check.schema.json",
63
71
  status: "status.schema.json",
64
72
  records: "records.schema.json",
73
+ "records --uncommitted": "records.schema.json",
65
74
  "graph --intent": "intent.schema.json",
66
75
  "graph --composites": "composites.schema.json",
76
+ runs: "runs.schema.json",
77
+ wip: "wip.schema.json",
67
78
  };
68
79
 
69
80
  /** The flags that ask each command for its JSON document. A reader adds one of these and nothing else. */
@@ -73,8 +84,11 @@ export const READ_CONTRACT_JSON_FLAGS: Record<ReadContractCommand, readonly (rea
73
84
  check: [["--format", "json"]],
74
85
  status: [["--json"]],
75
86
  records: [["--json"]],
87
+ "records --uncommitted": [["--json"]],
76
88
  "graph --intent": [["--json"]],
77
89
  "graph --composites": [[], ["--json"]],
90
+ runs: [["--json"]],
91
+ wip: [["--json"]],
78
92
  };
79
93
 
80
94
  /** The arguments the suite passes each read, on the reference workspace or the generated one. */
@@ -84,21 +98,31 @@ export const REFERENCE_READS: Record<ReadContractCommand, string[]> = {
84
98
  check: [],
85
99
  status: ["dev"],
86
100
  records: ["--kind", "decisions/decision.kind.mjs"],
101
+ "records --uncommitted": ["--kind", "decisions/decision.kind.mjs"],
87
102
  "graph --intent": ["app/src/server.mjs:19", "--kind", "decisions/decision.kind.mjs"],
88
103
  "graph --composites": [],
104
+ runs: [],
105
+ wip: [],
89
106
  };
90
107
 
91
- /** One chant run: the arguments after `chant`, and what it printed. */
108
+ /** One chant run: the arguments after `chant`, what it was given on stdin, and what it printed. */
92
109
  export interface ChantRun {
93
110
  argv: string[];
111
+ /** What the caller gave chant on stdin, such as a record's fields for `--from -` (#3159). Absent when nothing was. */
112
+ input?: string;
94
113
  status: number | null;
95
114
  stdout: string;
96
115
  stderr: string;
97
116
  }
98
117
 
99
- /** How a reader runs chant. It runs in the workspace; the reader never sees the path. */
118
+ /**
119
+ * How a reader or a writer runs chant. It runs in the workspace; the caller
120
+ * never sees the path. A writer passes `input` for a command that reads its
121
+ * fields from stdin (`--from -`, `--set -`, `--inputs -`, #3159); a reader
122
+ * never needs it.
123
+ */
100
124
  export interface ChantTransport {
101
- run(argv: string[]): Promise<ChantRun>;
125
+ run(argv: string[], options?: { input?: string }): Promise<ChantRun>;
102
126
  }
103
127
 
104
128
  export interface WorkspaceReader {
@@ -316,8 +340,10 @@ export const MCP_READ_TOOLS: Partial<Record<ReadContractCommand, string>> = {
316
340
  graph: "workspace-graph",
317
341
  status: "workspace-status",
318
342
  records: "workspace-records",
343
+ "records --uncommitted": "workspace-records",
319
344
  "graph --intent": "workspace-graph",
320
345
  "graph --composites": "workspace-graph",
346
+ runs: "workspace-runs",
321
347
  };
322
348
 
323
349
  /**
@@ -350,6 +376,10 @@ export function mcpToolCall(argv: readonly string[]): { name: string; arguments:
350
376
  else if (a === "--work") args.work = value();
351
377
  else if (a === "--severity") args.severity = value();
352
378
  else if (a === "--current") args.current = true;
379
+ else if (a === "--unit") args.unit = value();
380
+ else if (a === "--decision") args.decision = value();
381
+ else if (a === "--by") args.by = value();
382
+ else if (a === "--uncommitted") args.uncommitted = true;
353
383
  else if (a === "--composites") args.composites = true;
354
384
  else if (a.startsWith("-")) return undefined;
355
385
  else positional.push(a);
@@ -365,6 +395,8 @@ export function mcpToolCall(argv: readonly string[]): { name: string; arguments:
365
395
  return positional.length === 0 && args.range !== undefined ? { name: "workspace-changes", arguments: { ...args, ...(kinds.length ? { kind: kinds } : {}) } } : undefined;
366
396
  case "graph":
367
397
  return positional.length === 0 ? { name: "workspace-graph", arguments: { ...args, ...(kinds.length ? { kind: kinds } : {}) } } : undefined;
398
+ case "runs":
399
+ return positional.length === 0 && kinds.length === 0 ? { name: "workspace-runs", arguments: args } : undefined;
368
400
  default:
369
401
  return undefined;
370
402
  }
@@ -457,6 +489,47 @@ function git(cwd: string, ...args: string[]): void {
457
489
  });
458
490
  }
459
491
 
492
+ /**
493
+ * The decision the generated workspace leaves uncommitted (#3160): proposed,
494
+ * about the delivery member only, so the app region the intent read walks
495
+ * is unchanged. Its path from the workspace root, and its text.
496
+ */
497
+ export const UNCOMMITTED_DECISION = {
498
+ path: "decisions/fix-002-where-kept-records-wait.md",
499
+ text: `---
500
+ schema: 1
501
+ id: "fix-002"
502
+ title: "Where kept records wait"
503
+ state: "proposed"
504
+ area: "delivery"
505
+ source:
506
+ kind: "workspace"
507
+ member: "delivery"
508
+ question: "Where does a record wait between being kept and being applied?"
509
+ options:
510
+ - id: "a"
511
+ label: "uncommitted in the working tree"
512
+ how: "The record stays a file in the checkout until it is committed or applied."
513
+ tradeoff: "A reader lists it with records --uncommitted, and nothing else holds it."
514
+ choice: null
515
+ rejected: []
516
+ supersedes: []
517
+ evidence:
518
+ - title: "INTENTIUS/chant#3160, uncommitted records in the read contract"
519
+ url: "https://github.com/INTENTIUS/chant/issues/3160"
520
+ decided_by: null
521
+ decided_on: null
522
+ reviews: []
523
+ constrains:
524
+ - "member:delivery"
525
+ ---
526
+
527
+ # Where kept records wait
528
+
529
+ The reader conformance workspace leaves this decision uncommitted, so \`records --uncommitted\` has one record to list.
530
+ `,
531
+ } as const;
532
+
460
533
  /** A workspace generated for a conformance run, and how to remove it. */
461
534
  export interface ConformanceWorkspace {
462
535
  dir: string;
@@ -468,9 +541,10 @@ export interface ConformanceWorkspace {
468
541
  * `__fixture__/`, link this package in as `node_modules/@intentius/chant`
469
542
  * so the chant member resolves it, declare the workspace with
470
543
  * `chant workspace init --yes --name conformance` and commit it all to a new
471
- * git repository on `main`.
544
+ * git repository on `main`. With `uncommitted`, then write
545
+ * {@link UNCOMMITTED_DECISION} and leave it uncommitted (#3160).
472
546
  */
473
- export function createConformanceWorkspace(options: { chantCommand?: string[]; timeoutMs?: number } = {}): ConformanceWorkspace {
547
+ export function createConformanceWorkspace(options: { chantCommand?: string[]; timeoutMs?: number; uncommitted?: boolean } = {}): ConformanceWorkspace {
474
548
  const chant = options.chantCommand ?? defaultChantCommand();
475
549
  const scratch = realpathSync(mkdtempSync(join(tmpdir(), "chant-reader-conformance-")));
476
550
  const dispose = () => rmSync(scratch, { recursive: true, force: true });
@@ -489,7 +563,18 @@ export function createConformanceWorkspace(options: { chantCommand?: string[]; t
489
563
  timeout: options.timeoutMs ?? 120_000,
490
564
  });
491
565
  git(dir, "add", "-A");
492
- git(dir, "commit", "--quiet", "-m", "the reader conformance workspace");
566
+ git(dir, "commit", "--quiet", "-m", "the reader conformance workspace", "-m", "Chant-Run: conformance-run");
567
+ // One agent run in the run ledger (#3033), which made that commit, so `runs` reads a run with every field.
568
+ const head = execFileSync("git", ["rev-parse", "HEAD"], { cwd: dir, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"] }).trim();
569
+ const run = { id: "conformance-run", harness: { name: "conformance", version: "1" }, model: "none", provider: "none", by: "conformance", startedAt: "2026-01-01T00:00:00Z", endedAt: "2026-01-01T00:01:00Z", outcome: "done", usage: { turns: 1, inputTokens: 10, outputTokens: 5 }, cost: { amount: 0.01, currency: "USD", source: "conformance" }, transcript: { sha256: "0".repeat(64), ref: "conformance" }, commits: [head] };
570
+ execFileSync(chant[0], [...chant.slice(1), "workspace", "runs", "record", "--from", "-"], {
571
+ cwd: dir,
572
+ input: JSON.stringify(run),
573
+ env: { ...process.env, ...GIT_ENV, NO_COLOR: "1" },
574
+ stdio: ["pipe", "pipe", "pipe"],
575
+ timeout: options.timeoutMs ?? 120_000,
576
+ });
577
+ if (options.uncommitted) writeFileSync(join(dir, ...UNCOMMITTED_DECISION.path.split("/")), UNCOMMITTED_DECISION.text);
493
578
  return { dir, dispose };
494
579
  } catch (e) {
495
580
  dispose();
@@ -503,14 +588,17 @@ export function conformanceTarget(options: WorkspaceReaderConformanceOptions = {
503
588
  const chantCommand = options.chantCommand ?? defaultChantCommand();
504
589
  const given = options.workspaceDir ?? referenceWorkspaceDir();
505
590
  if (given) return { workspaceDir: given, chantCommand, dispose: () => {} };
506
- const ws = createConformanceWorkspace({ chantCommand, timeoutMs: options.timeoutMs });
591
+ const ws = createConformanceWorkspace({ chantCommand, timeoutMs: options.timeoutMs, uncommitted: true });
507
592
  return { workspaceDir: ws.dir, chantCommand, dispose: ws.dispose };
508
593
  }
509
594
 
510
- /** Run `command` in `cwd`, collecting what it printed. Resolves, never rejects. */
511
- function runChant(command: string[], argv: string[], cwd: string, timeoutMs: number): Promise<ChantRun> {
595
+ /** Run `command` in `cwd`, with `input` on stdin when given, collecting what it printed. Resolves, never rejects. */
596
+ export function runChant(command: string[], argv: string[], cwd: string, timeoutMs: number, input?: string): Promise<ChantRun> {
512
597
  return new Promise((settle) => {
513
- const child = spawn(command[0], [...command.slice(1), ...argv], { cwd, env: { ...process.env, NO_COLOR: "1" }, stdio: ["ignore", "pipe", "pipe"] });
598
+ const child = spawn(command[0], [...command.slice(1), ...argv], { cwd, env: { ...process.env, NO_COLOR: "1" }, stdio: ["pipe", "pipe", "pipe"] });
599
+ const given = input === undefined ? {} : { input };
600
+ // Without input, stdin is closed at once, as it was when it was ignored.
601
+ child.stdin.on("error", () => {}).end(input ?? "");
514
602
  let stdout = "";
515
603
  let stderr = "";
516
604
  child.stdout.setEncoding("utf-8").on("data", (s: string) => (stdout += s));
@@ -518,11 +606,11 @@ function runChant(command: string[], argv: string[], cwd: string, timeoutMs: num
518
606
  const timer = setTimeout(() => child.kill("SIGKILL"), timeoutMs);
519
607
  child.on("error", (e) => {
520
608
  clearTimeout(timer);
521
- settle({ argv: [...argv], status: null, stdout, stderr: `${stderr}${e.message}` });
609
+ settle({ argv: [...argv], ...given, status: null, stdout, stderr: `${stderr}${e.message}` });
522
610
  });
523
611
  child.on("close", (status) => {
524
612
  clearTimeout(timer);
525
- settle({ argv: [...argv], status, stdout, stderr });
613
+ settle({ argv: [...argv], ...given, status, stdout, stderr });
526
614
  });
527
615
  });
528
616
  }
@@ -582,10 +670,10 @@ export function recordingTransport(target: () => { workspaceDir: string; chantCo
582
670
  return { argv: [...argv], status: 0, stdout: JSON.stringify(doc), stderr: "" };
583
671
  };
584
672
  const transport: ChantTransport = {
585
- async run(argv) {
673
+ async run(argv, options) {
586
674
  calls.push([...argv]);
587
675
  const t = target();
588
- const run = over === "mcp" ? await viaMcp(argv) : await runChant(t.chantCommand, argv, t.workspaceDir, timeoutMs);
676
+ const run = over === "mcp" ? await viaMcp(argv) : await runChant(t.chantCommand, argv, t.workspaceDir, timeoutMs, options?.input);
589
677
  printed.push(run);
590
678
  return run;
591
679
  },
@@ -656,3 +744,7 @@ export async function runWorkspaceReaderConformance(reader: WorkspaceReaderFacto
656
744
  target.dispose();
657
745
  }
658
746
  }
747
+
748
+ // The writer suite (#3159), published from this same entry.
749
+ export * from "./writer";
750
+ export * from "./broker";
@@ -2,8 +2,12 @@
2
2
  * The workspace reader conformance suite for vitest (#2657, #2679):
3
3
  * {@link describeWorkspaceReaderConformance} wraps the runner-neutral checks
4
4
  * of `./index` in `describe` and `it`, one test per listed command and one
5
- * for the workspace's files. This is the only module of the suite that
6
- * imports vitest; `@intentius/chant/workspace/conformance` imports no runner.
5
+ * for the workspace's files. {@link describeWorkspaceWriterConformance}
6
+ * (#3159) does the same for the writer suite: one test per step of the
7
+ * script, and one per check after it. This is the only module of the suite
8
+ * that imports vitest; `@intentius/chant/workspace/conformance` imports no
9
+ * runner. {@link describeBrokerConformance} (#3164) makes one test per check
10
+ * of the broker suite.
7
11
  */
8
12
 
9
13
  import { afterAll, beforeAll, describe, expect, it } from "vitest";
@@ -17,7 +21,16 @@ import {
17
21
  selectCommands,
18
22
  treeChanges,
19
23
  treeDigest,
24
+ runWorkspaceWriterConformance,
25
+ selectActions,
26
+ WRITER_SCRIPT,
20
27
  type WorkspaceReaderConformanceConfig,
28
+ type WorkspaceWriterConformanceConfig,
29
+ type WorkspaceWriterConformanceReport,
30
+ brokerChecks,
31
+ runBrokerCheck,
32
+ startBrokerConformance,
33
+ type BrokerConformanceConfig,
21
34
  } from "./index";
22
35
 
23
36
  export function describeWorkspaceReaderConformance(config: WorkspaceReaderConformanceConfig): void {
@@ -68,4 +81,65 @@ export function describeWorkspaceReaderConformance(config: WorkspaceReaderConfor
68
81
  });
69
82
  }
70
83
 
84
+ /**
85
+ * The writer suite in vitest: the runner-neutral run happens once, before the
86
+ * tests, and each test reports its part of it. A step whose action the writer
87
+ * does not list is skipped, as not applicable; the suite still performed it.
88
+ */
89
+ export function describeWorkspaceWriterConformance(config: WorkspaceWriterConformanceConfig): void {
90
+ const { checked } = selectActions(config.actions);
91
+ describe(`workspace writer conformance (#3159): ${config.name}`, () => {
92
+ let report: WorkspaceWriterConformanceReport | undefined;
93
+ beforeAll(async () => {
94
+ report = await runWorkspaceWriterConformance(config.writer, config);
95
+ }, 900_000);
96
+ const ran = () => {
97
+ expect(report, "the writer suite did not run").toBeDefined();
98
+ return report!;
99
+ };
100
+
101
+ for (const s of WRITER_SCRIPT) {
102
+ if (!checked.includes(s.action)) {
103
+ it.skip(`${s.id}: ${s.action} is not applicable, the writer does not list it in actions`, () => {});
104
+ continue;
105
+ }
106
+ it(`${s.id}: writes through chant workspace ${s.action} alone, and every change it made is one chant reports`, () => {
107
+ expect(ran().results.find((r) => r.id === s.id)?.problems).toEqual([]);
108
+ });
109
+ }
110
+ it("facts() reads only through the read contract and changes nothing", () => expect(ran().after.facts).toEqual([]));
111
+ it("the state directory holds only what privateState declares", () => expect(ran().after.state).toEqual([]));
112
+ it("amnesia: with its private state deleted, the writer shows the same facts", () => expect(ran().after.amnesia).toEqual([]));
113
+ it("everything the writer holds is in the repository, or one of ws-074's four exceptions", () => expect(ran().after.holds).toEqual([]));
114
+ it("every fact the script produced reads back through the read contract, uncommitted ones included", () => expect(ran().after.readBack).toEqual([]));
115
+ });
116
+ }
117
+
118
+ /**
119
+ * The broker suite in vitest (#3164): the upstreams and the broker start
120
+ * before the tests, and each check is one test, run in order. A check of a
121
+ * capability the broker does not serve is skipped.
122
+ */
123
+ export function describeBrokerConformance(config: BrokerConformanceConfig): void {
124
+ describe(`broker conformance (#3164): ${config.name}`, () => {
125
+ let run: Awaited<ReturnType<typeof startBrokerConformance>> | undefined;
126
+ beforeAll(async () => {
127
+ run = await startBrokerConformance(config);
128
+ }, 120_000);
129
+ afterAll(async () => {
130
+ await run?.close();
131
+ });
132
+ for (const { check, skipped } of brokerChecks(config)) {
133
+ if (skipped) {
134
+ it.skip(`${check.id}: not applicable, ${skipped}`, () => {});
135
+ continue;
136
+ }
137
+ it(`${check.id}: ${check.title}`, async () => {
138
+ expect(run, "the broker did not start").toBeDefined();
139
+ expect(await runBrokerCheck(run!.ctx, check)).toEqual([]);
140
+ }, 60_000);
141
+ }
142
+ });
143
+ }
144
+
71
145
  export * from "./index";