@intentius/chant 0.102.0 → 0.104.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. package/dist/audit/core.d.ts +2 -0
  2. package/dist/audit/core.d.ts.map +1 -1
  3. package/dist/audit/discover.d.ts.map +1 -1
  4. package/dist/change-set.d.ts +232 -0
  5. package/dist/change-set.d.ts.map +1 -0
  6. package/dist/cli/commands/audit.d.ts +7 -0
  7. package/dist/cli/commands/audit.d.ts.map +1 -1
  8. package/dist/cli/commands/build.d.ts.map +1 -1
  9. package/dist/cli/handlers/build.d.ts.map +1 -1
  10. package/dist/cli/handlers/change-set.d.ts +11 -0
  11. package/dist/cli/handlers/change-set.d.ts.map +1 -0
  12. package/dist/cli/handlers/fan-out.d.ts +33 -0
  13. package/dist/cli/handlers/fan-out.d.ts.map +1 -1
  14. package/dist/cli/handlers/operator.d.ts +7 -0
  15. package/dist/cli/handlers/operator.d.ts.map +1 -1
  16. package/dist/cli/handlers/pr.d.ts +31 -0
  17. package/dist/cli/handlers/pr.d.ts.map +1 -0
  18. package/dist/cli/handlers/run.d.ts.map +1 -1
  19. package/dist/cli/main.d.ts.map +1 -1
  20. package/dist/cli/mcp/op-tools.d.ts.map +1 -1
  21. package/dist/cli/mcp/workspace-tools.d.ts +3 -2
  22. package/dist/cli/mcp/workspace-tools.d.ts.map +1 -1
  23. package/dist/cli/registry.d.ts +63 -1
  24. package/dist/cli/registry.d.ts.map +1 -1
  25. package/dist/components/auto-release.d.ts +16 -0
  26. package/dist/components/auto-release.d.ts.map +1 -1
  27. package/dist/components/capability.d.ts +53 -0
  28. package/dist/components/capability.d.ts.map +1 -1
  29. package/dist/components/changed-files.d.ts +31 -0
  30. package/dist/components/changed-files.d.ts.map +1 -0
  31. package/dist/components/cli-support.d.ts +9 -1
  32. package/dist/components/cli-support.d.ts.map +1 -1
  33. package/dist/components/component.d.ts +24 -0
  34. package/dist/components/component.d.ts.map +1 -1
  35. package/dist/components/deploy-units.d.ts.map +1 -1
  36. package/dist/components/driver.d.ts +13 -0
  37. package/dist/components/driver.d.ts.map +1 -1
  38. package/dist/components/fan-out-output.d.ts +6 -0
  39. package/dist/components/fan-out-output.d.ts.map +1 -1
  40. package/dist/components/fan-out-record.d.ts +41 -0
  41. package/dist/components/fan-out-record.d.ts.map +1 -0
  42. package/dist/components/fan-out-run.d.ts +65 -0
  43. package/dist/components/fan-out-run.d.ts.map +1 -1
  44. package/dist/components/fan-out-support.d.ts +2 -0
  45. package/dist/components/fan-out-support.d.ts.map +1 -1
  46. package/dist/components/fan-out.d.ts +6 -0
  47. package/dist/components/fan-out.d.ts.map +1 -1
  48. package/dist/components/gated-wave-pipeline.d.ts +50 -0
  49. package/dist/components/gated-wave-pipeline.d.ts.map +1 -0
  50. package/dist/components/index.d.ts +1 -1
  51. package/dist/components/index.d.ts.map +1 -1
  52. package/dist/components/layers.d.ts +25 -0
  53. package/dist/components/layers.d.ts.map +1 -0
  54. package/dist/components/pr-pipeline.d.ts +61 -0
  55. package/dist/components/pr-pipeline.d.ts.map +1 -0
  56. package/dist/components/pr-run.d.ts +119 -0
  57. package/dist/components/pr-run.d.ts.map +1 -0
  58. package/dist/components/promote.d.ts.map +1 -1
  59. package/dist/components/verbs/shell.d.ts.map +1 -1
  60. package/dist/components/wave-plan.d.ts +49 -0
  61. package/dist/components/wave-plan.d.ts.map +1 -0
  62. package/dist/gated-waves.d.ts +147 -0
  63. package/dist/gated-waves.d.ts.map +1 -0
  64. package/dist/index.d.ts +1 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/lexicon.d.ts +48 -0
  67. package/dist/lexicon.d.ts.map +1 -1
  68. package/dist/lifecycle/gate-ledger.d.ts +7 -0
  69. package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
  70. package/dist/lifecycle/git.d.ts +46 -1
  71. package/dist/lifecycle/git.d.ts.map +1 -1
  72. package/dist/lint/post-synth.d.ts +18 -0
  73. package/dist/lint/post-synth.d.ts.map +1 -1
  74. package/dist/op/activities/activity-contracts.d.ts +126 -0
  75. package/dist/op/activities/activity-contracts.d.ts.map +1 -1
  76. package/dist/op/activities/change-set.d.ts +62 -0
  77. package/dist/op/activities/change-set.d.ts.map +1 -0
  78. package/dist/op/activities/decide.d.ts +2 -0
  79. package/dist/op/activities/decide.d.ts.map +1 -1
  80. package/dist/op/activities/factory.d.ts +137 -0
  81. package/dist/op/activities/factory.d.ts.map +1 -0
  82. package/dist/op/activities/index.d.ts +4 -0
  83. package/dist/op/activities/index.d.ts.map +1 -1
  84. package/dist/op/activity-contract.d.ts.map +1 -1
  85. package/dist/op/builders.d.ts +11 -0
  86. package/dist/op/builders.d.ts.map +1 -1
  87. package/dist/op/decide-backend.d.ts +5 -1
  88. package/dist/op/decide-backend.d.ts.map +1 -1
  89. package/dist/op/decide-read-inputs.d.ts +4 -2
  90. package/dist/op/decide-read-inputs.d.ts.map +1 -1
  91. package/dist/op/factory.d.ts +83 -0
  92. package/dist/op/factory.d.ts.map +1 -0
  93. package/dist/op/index.d.ts +4 -1
  94. package/dist/op/index.d.ts.map +1 -1
  95. package/dist/op/op-ir.d.ts +2 -0
  96. package/dist/op/op-ir.d.ts.map +1 -1
  97. package/dist/op/op-verb-class.d.ts.map +1 -1
  98. package/dist/op/types.d.ts +8 -0
  99. package/dist/op/types.d.ts.map +1 -1
  100. package/dist/op/work-lease-run.d.ts.map +1 -1
  101. package/dist/plan-summary.d.ts +207 -0
  102. package/dist/plan-summary.d.ts.map +1 -0
  103. package/dist/pr-forge.d.ts +105 -0
  104. package/dist/pr-forge.d.ts.map +1 -0
  105. package/dist/pr-loop.d.ts +178 -0
  106. package/dist/pr-loop.d.ts.map +1 -0
  107. package/dist/telemetry-attribution.d.ts +31 -0
  108. package/dist/telemetry-attribution.d.ts.map +1 -1
  109. package/dist/terraform/hcl2json.d.ts +45 -0
  110. package/dist/terraform/hcl2json.d.ts.map +1 -0
  111. package/dist/terraform/parse.d.ts +4 -40
  112. package/dist/terraform/parse.d.ts.map +1 -1
  113. package/dist/vendor/js-yaml-load.d.ts +56 -0
  114. package/dist/vendor/js-yaml-load.d.ts.map +1 -0
  115. package/dist/workspace/box-cli.d.ts +12 -0
  116. package/dist/workspace/box-cli.d.ts.map +1 -0
  117. package/dist/workspace/box-factory.d.ts +27 -3
  118. package/dist/workspace/box-factory.d.ts.map +1 -1
  119. package/dist/workspace/box-listing.d.ts +85 -0
  120. package/dist/workspace/box-listing.d.ts.map +1 -0
  121. package/dist/workspace/box-publish.d.ts +147 -0
  122. package/dist/workspace/box-publish.d.ts.map +1 -0
  123. package/dist/workspace/broker-protocol.d.ts +190 -0
  124. package/dist/workspace/broker-protocol.d.ts.map +1 -0
  125. package/dist/workspace/checks.d.ts.map +1 -1
  126. package/dist/workspace/composites.d.ts +2 -2
  127. package/dist/workspace/composites.d.ts.map +1 -1
  128. package/dist/workspace/conformance/__fixtures__/reference-broker.d.ts +17 -0
  129. package/dist/workspace/conformance/__fixtures__/reference-broker.d.ts.map +1 -0
  130. package/dist/workspace/conformance/broker.d.ts +202 -0
  131. package/dist/workspace/conformance/broker.d.ts.map +1 -0
  132. package/dist/workspace/conformance/index.d.ts +2 -1
  133. package/dist/workspace/conformance/index.d.ts.map +1 -1
  134. package/dist/workspace/conformance/vitest.d.ts +9 -2
  135. package/dist/workspace/conformance/vitest.d.ts.map +1 -1
  136. package/dist/workspace/conformance/writer.d.ts +108 -14
  137. package/dist/workspace/conformance/writer.d.ts.map +1 -1
  138. package/dist/workspace/decide.d.ts +126 -12
  139. package/dist/workspace/decide.d.ts.map +1 -1
  140. package/dist/workspace/decision-points.schema.json +11 -4
  141. package/dist/workspace/declaration.d.ts +65 -0
  142. package/dist/workspace/declaration.d.ts.map +1 -1
  143. package/dist/workspace/declaration.schema.json +153 -4
  144. package/dist/workspace/environments.d.ts +36 -10
  145. package/dist/workspace/environments.d.ts.map +1 -1
  146. package/dist/workspace/factory-rules.d.ts +180 -0
  147. package/dist/workspace/factory-rules.d.ts.map +1 -0
  148. package/dist/workspace/init.d.ts +21 -0
  149. package/dist/workspace/init.d.ts.map +1 -1
  150. package/dist/workspace/intent-cli.d.ts +1 -1
  151. package/dist/workspace/intent-cli.d.ts.map +1 -1
  152. package/dist/workspace/intent-record.d.ts +28 -1
  153. package/dist/workspace/intent-record.d.ts.map +1 -1
  154. package/dist/workspace/intent.d.ts +102 -5
  155. package/dist/workspace/intent.d.ts.map +1 -1
  156. package/dist/workspace/json-edit.d.ts +24 -0
  157. package/dist/workspace/json-edit.d.ts.map +1 -0
  158. package/dist/workspace/jsonc.d.ts +11 -0
  159. package/dist/workspace/jsonc.d.ts.map +1 -1
  160. package/dist/workspace/kinds.d.ts +48 -0
  161. package/dist/workspace/kinds.d.ts.map +1 -1
  162. package/dist/workspace/lexicon-symbols.d.ts +29 -0
  163. package/dist/workspace/lexicon-symbols.d.ts.map +1 -0
  164. package/dist/workspace/lineage-upgrade.d.ts +31 -2
  165. package/dist/workspace/lineage-upgrade.d.ts.map +1 -1
  166. package/dist/workspace/point-answer.schema.json +42 -2
  167. package/dist/workspace/points-cli.d.ts +10 -3
  168. package/dist/workspace/points-cli.d.ts.map +1 -1
  169. package/dist/workspace/points.d.ts +66 -5
  170. package/dist/workspace/points.d.ts.map +1 -1
  171. package/dist/workspace/reason-codes.d.ts +33 -4
  172. package/dist/workspace/reason-codes.d.ts.map +1 -1
  173. package/dist/workspace/record-sessions.d.ts +5 -7
  174. package/dist/workspace/record-sessions.d.ts.map +1 -1
  175. package/dist/workspace/records-cli.d.ts +7 -0
  176. package/dist/workspace/records-cli.d.ts.map +1 -1
  177. package/dist/workspace/records-close.d.ts +7 -3
  178. package/dist/workspace/records-close.d.ts.map +1 -1
  179. package/dist/workspace/records-write.d.ts +66 -6
  180. package/dist/workspace/records-write.d.ts.map +1 -1
  181. package/dist/workspace/records.d.ts +28 -9
  182. package/dist/workspace/records.d.ts.map +1 -1
  183. package/dist/workspace/runs-cli.d.ts +138 -6
  184. package/dist/workspace/runs-cli.d.ts.map +1 -1
  185. package/dist/workspace/runs.d.ts +132 -11
  186. package/dist/workspace/runs.d.ts.map +1 -1
  187. package/dist/workspace/session-kinds.d.ts +1 -1
  188. package/dist/workspace/session-kinds.d.ts.map +1 -1
  189. package/dist/workspace/squash.d.ts +80 -0
  190. package/dist/workspace/squash.d.ts.map +1 -0
  191. package/dist/workspace/status-gates.d.ts +2 -0
  192. package/dist/workspace/status-gates.d.ts.map +1 -1
  193. package/dist/workspace/status.d.ts +54 -0
  194. package/dist/workspace/status.d.ts.map +1 -1
  195. package/dist/workspace/symbols.d.ts +16 -5
  196. package/dist/workspace/symbols.d.ts.map +1 -1
  197. package/dist/workspace/trust/run-commits.d.ts +46 -0
  198. package/dist/workspace/trust/run-commits.d.ts.map +1 -0
  199. package/dist/workspace/trust/run-statement.d.ts +128 -0
  200. package/dist/workspace/trust/run-statement.d.ts.map +1 -0
  201. package/dist/workspace/trust/seal.d.ts +6 -1
  202. package/dist/workspace/trust/seal.d.ts.map +1 -1
  203. package/dist/workspace/trust/verify-cli.d.ts +1 -1
  204. package/dist/workspace/trust/verify.d.ts +16 -2
  205. package/dist/workspace/trust/verify.d.ts.map +1 -1
  206. package/dist/workspace/wip-cli.d.ts +21 -0
  207. package/dist/workspace/wip-cli.d.ts.map +1 -0
  208. package/dist/workspace/wip.d.ts +268 -0
  209. package/dist/workspace/wip.d.ts.map +1 -0
  210. package/dist/workspace/work-cli.d.ts.map +1 -1
  211. package/dist/workspace/work-evidence.d.ts +1 -1
  212. package/dist/workspace/work-evidence.d.ts.map +1 -1
  213. package/dist/workspace/work-size.d.ts +55 -0
  214. package/dist/workspace/work-size.d.ts.map +1 -0
  215. package/dist/workspace/workspace-kinds.schema.json +122 -0
  216. package/dist/workspace/write-lock-cli.d.ts +60 -0
  217. package/dist/workspace/write-lock-cli.d.ts.map +1 -0
  218. package/dist/workspace/write-lock.d.ts +152 -0
  219. package/dist/workspace/write-lock.d.ts.map +1 -0
  220. package/dist/workspace/write-scope.d.ts +6 -2
  221. package/dist/workspace/write-scope.d.ts.map +1 -1
  222. package/dist/yaml.d.ts +1 -1
  223. package/dist/yaml.d.ts.map +1 -1
  224. package/package.json +6 -1
  225. package/src/__fixtures__/change-set/lifecycle-plan.floci.json +59 -0
  226. package/src/__fixtures__/change-set/lifecycle-v1.ts.txt +4 -0
  227. package/src/__fixtures__/change-set/lifecycle-v2.ts.txt +4 -0
  228. package/src/__fixtures__/change-set/lifecycle.change-set.golden.json +95 -0
  229. package/src/__fixtures__/change-set/warden.change-set.golden.json +106 -0
  230. package/src/__fixtures__/change-set/warden.plan.json +44 -0
  231. package/src/__fixtures__/plan-summary/normalization-vectors.json +1593 -0
  232. package/src/__fixtures__/pr-loop/pr-apply-applied.note.golden.md +31 -0
  233. package/src/__fixtures__/pr-loop/pr-apply-refused.note.golden.md +31 -0
  234. package/src/__fixtures__/pr-loop/pr-plan.golden.json +127 -0
  235. package/src/__fixtures__/pr-loop/pr-plan.note.golden.md +37 -0
  236. package/src/audit/core.test.ts +15 -0
  237. package/src/audit/core.ts +8 -2
  238. package/src/audit/discover.test.ts +11 -0
  239. package/src/audit/discover.ts +7 -2
  240. package/src/change-set-bundle.test.ts +57 -0
  241. package/src/change-set.test.ts +215 -0
  242. package/src/change-set.ts +445 -0
  243. package/src/cli/commands/audit-opt-in.test.ts +54 -0
  244. package/src/cli/commands/audit.ts +29 -2
  245. package/src/cli/commands/build.test.ts +19 -0
  246. package/src/cli/commands/build.ts +3 -2
  247. package/src/cli/handlers/build.ts +13 -1
  248. package/src/cli/handlers/change-set.test.ts +56 -0
  249. package/src/cli/handlers/change-set.ts +44 -0
  250. package/src/cli/handlers/fan-out.test.ts +221 -2
  251. package/src/cli/handlers/fan-out.ts +165 -75
  252. package/src/cli/handlers/graph.ts +3 -0
  253. package/src/cli/handlers/operator.test.ts +21 -0
  254. package/src/cli/handlers/operator.ts +34 -3
  255. package/src/cli/handlers/pr.ts +373 -0
  256. package/src/cli/handlers/run.ts +1 -0
  257. package/src/cli/main.test.ts +20 -0
  258. package/src/cli/main.ts +185 -23
  259. package/src/cli/mcp/never-over-mcp.test.ts +101 -0
  260. package/src/cli/mcp/op-tools.ts +24 -2
  261. package/src/cli/mcp/workspace-tools.test.ts +1 -1
  262. package/src/cli/mcp/workspace-tools.ts +34 -6
  263. package/src/cli/registry.ts +63 -1
  264. package/src/components/auto-release.ts +1 -1
  265. package/src/components/capability.ts +55 -0
  266. package/src/components/changed-files.ts +66 -0
  267. package/src/components/cli-support.ts +28 -5
  268. package/src/components/component.schema.json +17 -0
  269. package/src/components/component.ts +25 -0
  270. package/src/components/deploy-units.ts +3 -0
  271. package/src/components/driver.test.ts +52 -0
  272. package/src/components/driver.ts +31 -13
  273. package/src/components/fan-out-output.ts +42 -1
  274. package/src/components/fan-out-record.ts +69 -0
  275. package/src/components/fan-out-run.test.ts +17 -0
  276. package/src/components/fan-out-run.ts +304 -1
  277. package/src/components/fan-out-support.ts +3 -0
  278. package/src/components/fan-out-waves.test.ts +375 -0
  279. package/src/components/fan-out.ts +18 -17
  280. package/src/components/gated-wave-pipeline.ts +82 -0
  281. package/src/components/index.ts +1 -0
  282. package/src/components/layers.ts +30 -0
  283. package/src/components/pr-pipeline.ts +91 -0
  284. package/src/components/pr-run.test.ts +205 -0
  285. package/src/components/pr-run.ts +280 -0
  286. package/src/components/promote.ts +5 -0
  287. package/src/components/verbs/shell.test.ts +11 -0
  288. package/src/components/verbs/shell.ts +7 -3
  289. package/src/components/wave-plan.ts +124 -0
  290. package/src/discovery/sandbox/bundle.ts +1 -1
  291. package/src/gated-waves-bundle.test.ts +62 -0
  292. package/src/gated-waves.test.ts +118 -0
  293. package/src/gated-waves.ts +240 -0
  294. package/src/index.ts +1 -0
  295. package/src/lexicon.ts +51 -0
  296. package/src/lifecycle/gate-ledger.ts +7 -0
  297. package/src/lifecycle/git.ts +102 -16
  298. package/src/lint/post-synth.test.ts +19 -0
  299. package/src/lint/post-synth.ts +19 -1
  300. package/src/meta/declared-imports.test.ts +1 -1
  301. package/src/op/activities/activity-contracts.ts +84 -0
  302. package/src/op/activities/change-set.ts +114 -0
  303. package/src/op/activities/decide.ts +3 -0
  304. package/src/op/activities/factory.ts +675 -0
  305. package/src/op/activities/index.ts +6 -0
  306. package/src/op/activity-contract.test.ts +21 -1
  307. package/src/op/activity-contract.ts +19 -9
  308. package/src/op/builders.ts +23 -0
  309. package/src/op/decide-backend.ts +5 -1
  310. package/src/op/decide-read-inputs.ts +33 -5
  311. package/src/op/factory.e2e.test.ts +232 -0
  312. package/src/op/factory.ts +118 -0
  313. package/src/op/index.ts +9 -1
  314. package/src/op/op-ir.test.ts +9 -0
  315. package/src/op/op-ir.ts +4 -0
  316. package/src/op/op-verb-class.ts +3 -0
  317. package/src/op/types.ts +8 -0
  318. package/src/op/work-lease-run.ts +3 -0
  319. package/src/plan-summary.test.ts +263 -0
  320. package/src/plan-summary.ts +845 -0
  321. package/src/pr-forge.test.ts +237 -0
  322. package/src/pr-forge.ts +332 -0
  323. package/src/pr-loop-bundle.test.ts +46 -0
  324. package/src/pr-loop.test.ts +171 -0
  325. package/src/pr-loop.ts +324 -0
  326. package/src/telemetry-attribution.test.ts +23 -1
  327. package/src/telemetry-attribution.ts +51 -0
  328. package/src/terraform/hcl2json.test.ts +21 -0
  329. package/src/terraform/hcl2json.ts +81 -0
  330. package/src/terraform/parse.ts +11 -74
  331. package/src/vendor/js-yaml-load.test.ts +115 -0
  332. package/src/vendor/js-yaml-load.ts +1939 -0
  333. package/src/workspace/__fixtures__/studio-template-84c8b21.json +1 -1
  334. package/src/workspace/app-kind.test.ts +196 -0
  335. package/src/workspace/box-cli.ts +113 -0
  336. package/src/workspace/box-factory.test.ts +4 -1
  337. package/src/workspace/box-factory.ts +37 -4
  338. package/src/workspace/box-listing-write.schema.json +204 -0
  339. package/src/workspace/box-listing.test.ts +234 -0
  340. package/src/workspace/box-listing.ts +324 -0
  341. package/src/workspace/box-publish.schema.json +498 -0
  342. package/src/workspace/box-publish.test.ts +204 -0
  343. package/src/workspace/box-publish.ts +420 -0
  344. package/src/workspace/box-ship.test.ts +96 -0
  345. package/src/workspace/broker-protocol.schema.json +186 -0
  346. package/src/workspace/broker-protocol.test.ts +122 -0
  347. package/src/workspace/broker-protocol.ts +317 -0
  348. package/src/workspace/builder-tiers.test.ts +146 -0
  349. package/src/workspace/change-set.schema.json +460 -0
  350. package/src/workspace/chant-migrations.e2e.test.ts +17 -5
  351. package/src/workspace/checks/boxes.test.ts +3 -0
  352. package/src/workspace/checks.ts +10 -3
  353. package/src/workspace/component-environments.test.ts +105 -0
  354. package/src/workspace/composites.schema.json +23 -4
  355. package/src/workspace/composites.test.ts +8 -8
  356. package/src/workspace/composites.ts +13 -2
  357. package/src/workspace/conformance/__fixture__/decisions/decision.schema.json +2 -2
  358. package/src/workspace/conformance/__fixtures__/reference-broker.ts +207 -0
  359. package/src/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +7 -2
  360. package/src/workspace/conformance/__writer_fixture__/answers/answer.schema.json +42 -2
  361. package/src/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  362. package/src/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  363. package/src/workspace/conformance/__writer_fixture__/decisions/points.json +96 -0
  364. package/src/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  365. package/src/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  366. package/src/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +14 -8
  367. package/src/workspace/conformance/__writer_fixture__/sessions/session.schema.json +187 -6
  368. package/src/workspace/conformance/__writer_fixture__/work/work.schema.json +25 -0
  369. package/src/workspace/conformance/broker.test.ts +122 -0
  370. package/src/workspace/conformance/broker.ts +792 -0
  371. package/src/workspace/conformance/conformance.e2e.test.ts +2 -1
  372. package/src/workspace/conformance/index.mjs +22 -1
  373. package/src/workspace/conformance/index.ts +5 -1
  374. package/src/workspace/conformance/vitest.ts +33 -1
  375. package/src/workspace/conformance/writer-conformance.e2e.test.ts +49 -3
  376. package/src/workspace/conformance/writer.test.ts +32 -2
  377. package/src/workspace/conformance/writer.ts +339 -28
  378. package/src/workspace/decide.test.ts +208 -4
  379. package/src/workspace/decide.ts +427 -73
  380. package/src/workspace/decision-points.schema.json +11 -4
  381. package/src/workspace/declaration.schema.json +153 -4
  382. package/src/workspace/declaration.ts +141 -0
  383. package/src/workspace/environments.ts +66 -14
  384. package/src/workspace/factory-rules.test.ts +62 -0
  385. package/src/workspace/factory-rules.ts +218 -0
  386. package/src/workspace/graph-cli.ts +2 -2
  387. package/src/workspace/graph.schema.json +67 -0
  388. package/src/workspace/identity.test.ts +23 -0
  389. package/src/workspace/init.ts +82 -2
  390. package/src/workspace/intent-cli.ts +26 -9
  391. package/src/workspace/intent-patch-id.test.ts +162 -0
  392. package/src/workspace/intent-record.schema.json +130 -3
  393. package/src/workspace/intent-record.ts +74 -28
  394. package/src/workspace/intent-reviews.test.ts +76 -0
  395. package/src/workspace/intent-squash.test.ts +213 -0
  396. package/src/workspace/intent-why.test.ts +5 -5
  397. package/src/workspace/intent.schema.json +234 -4
  398. package/src/workspace/intent.ts +260 -66
  399. package/src/workspace/json-edit.test.ts +121 -0
  400. package/src/workspace/json-edit.ts +142 -0
  401. package/src/workspace/jsonc.ts +20 -0
  402. package/src/workspace/kinds.ts +157 -2
  403. package/src/workspace/lexicon-symbols.test.ts +148 -0
  404. package/src/workspace/lexicon-symbols.ts +125 -0
  405. package/src/workspace/lineage-upgrade.test.ts +63 -0
  406. package/src/workspace/lineage-upgrade.ts +146 -5
  407. package/src/workspace/plan-summary.schema.json +155 -0
  408. package/src/workspace/point-answer.schema.json +42 -2
  409. package/src/workspace/points-cli.ts +42 -16
  410. package/src/workspace/points-write.schema.json +162 -4
  411. package/src/workspace/points.schema.json +157 -2
  412. package/src/workspace/points.test.ts +13 -1
  413. package/src/workspace/points.ts +118 -12
  414. package/src/workspace/pr-report.schema.json +95 -0
  415. package/src/workspace/profiles.test.ts +159 -0
  416. package/src/workspace/read-contract.test.ts +2 -2
  417. package/src/workspace/reason-codes.test.ts +13 -1
  418. package/src/workspace/reason-codes.ts +38 -4
  419. package/src/workspace/record-sessions.ts +9 -8
  420. package/src/workspace/records-amend.schema.json +78 -0
  421. package/src/workspace/records-cli.ts +20 -6
  422. package/src/workspace/records-close.schema.json +78 -0
  423. package/src/workspace/records-close.ts +31 -7
  424. package/src/workspace/records-concurrent.e2e.test.ts +135 -0
  425. package/src/workspace/records-concurrent.test.ts +145 -0
  426. package/src/workspace/records-formats.test.ts +46 -10
  427. package/src/workspace/records-new.schema.json +7 -0
  428. package/src/workspace/records-review.schema.json +78 -0
  429. package/src/workspace/records-sessions-write.test.ts +69 -0
  430. package/src/workspace/records-sessions.test.ts +22 -0
  431. package/src/workspace/records-write.ts +192 -25
  432. package/src/workspace/records.schema.json +16 -0
  433. package/src/workspace/records.ts +50 -9
  434. package/src/workspace/reference-kinds/app/package.json +10 -0
  435. package/src/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  436. package/src/workspace/run-statement.schema.json +622 -0
  437. package/src/workspace/runs-cli.ts +343 -14
  438. package/src/workspace/runs-statement.test.ts +239 -0
  439. package/src/workspace/runs-write.schema.json +416 -5
  440. package/src/workspace/runs.schema.json +451 -4
  441. package/src/workspace/runs.test.ts +39 -0
  442. package/src/workspace/runs.ts +296 -35
  443. package/src/workspace/session-kinds.ts +3 -3
  444. package/src/workspace/squash.ts +198 -0
  445. package/src/workspace/status-contract.test.ts +5 -2
  446. package/src/workspace/status-gates.ts +3 -1
  447. package/src/workspace/status.schema.json +126 -3
  448. package/src/workspace/status.ts +90 -1
  449. package/src/workspace/symbols.ts +20 -9
  450. package/src/workspace/trust/run-commits.ts +115 -0
  451. package/src/workspace/trust/run-statement.ts +226 -0
  452. package/src/workspace/trust/seal.ts +8 -2
  453. package/src/workspace/trust/verify-cli.ts +6 -5
  454. package/src/workspace/trust/verify.ts +39 -6
  455. package/src/workspace/wip-cli.ts +97 -0
  456. package/src/workspace/wip-write.schema.json +504 -0
  457. package/src/workspace/wip.schema.json +334 -0
  458. package/src/workspace/wip.test.ts +294 -0
  459. package/src/workspace/wip.ts +753 -0
  460. package/src/workspace/work-cli.ts +3 -0
  461. package/src/workspace/work-evidence.schema.json +3 -0
  462. package/src/workspace/work-size.test.ts +77 -0
  463. package/src/workspace/work-size.ts +93 -0
  464. package/src/workspace/workspace-kinds.schema.json +122 -0
  465. package/src/workspace/write-lock-cli.ts +131 -0
  466. package/src/workspace/write-lock.schema.json +172 -0
  467. package/src/workspace/write-lock.test.ts +189 -0
  468. package/src/workspace/write-lock.ts +474 -0
  469. package/src/workspace/write-scope.test.ts +16 -1
  470. package/src/workspace/write-scope.ts +33 -11
  471. package/src/yaml.ts +31 -21
@@ -0,0 +1,81 @@
1
+ /**
2
+ * The optional HCL parser, loaded lazily. Kept apart from `parse.ts` so a
3
+ * caller that only needs the loader (the terraform lexicon's HCL reader) does
4
+ * not pull in the dependency graph, the state reader and the carve tables.
5
+ *
6
+ * `@cdktn/hcl2json` is NOT a chant dependency: it carries a ~1.8 MB wasm blob
7
+ * and only HCL users need it. If it is absent the loader fails with a
8
+ * one-line install hint.
9
+ */
10
+
11
+ import { appendFileSync } from "fs";
12
+ import type { Hcl2JsonTree } from "./types";
13
+
14
+ /** Minimal shape of the parser exports we depend on. */
15
+ export interface Hcl2Json {
16
+ parse: (filename: string, hcl: string) => Promise<Hcl2JsonTree>;
17
+ /** Expression-AST reference extraction (#998) — one traversal accessor per reference. */
18
+ getReferencesInExpression: (filename: string, expression: string) => Promise<Array<{ value: string }>>;
19
+ }
20
+
21
+ export class Hcl2JsonNotInstalled extends Error {
22
+ constructor(cause: unknown) {
23
+ super(
24
+ "Terraform carve-out needs the HCL parser, which is not installed.\n" +
25
+ " Install it once: npm install -D @cdktn/hcl2json\n" +
26
+ `(underlying error: ${cause instanceof Error ? cause.message : String(cause)})`,
27
+ );
28
+ this.name = "Hcl2JsonNotInstalled";
29
+ }
30
+ }
31
+
32
+ /**
33
+ * The environment variable that turns on parser-input recording (chant #2483).
34
+ *
35
+ * When set to a file path, every `parse(filename, source)` and every
36
+ * `getReferencesInExpression(filename, expression)` this process makes is
37
+ * appended to that file as one JSON line before the real call runs. That is
38
+ * how `scripts/check-hcl-parser-parity.ts` gets hold of the inline HCL the
39
+ * test suite parses, which no corpus walk on disk would find: run the suite
40
+ * with this set, then replay the file through two parsers and compare. Off
41
+ * unless set, and never changes a result.
42
+ */
43
+ export const HCL2JSON_RECORD_ENV = "CHANT_HCL2JSON_RECORD";
44
+
45
+ /** One recorded parser input, as {@link HCL2JSON_RECORD_ENV} writes it. */
46
+ export interface Hcl2JsonRecordLine {
47
+ kind: "parse" | "refs";
48
+ filename: string;
49
+ text: string;
50
+ }
51
+
52
+ function recording(parser: Hcl2Json, path: string): Hcl2Json {
53
+ const note = (line: Hcl2JsonRecordLine): void => {
54
+ appendFileSync(path, `${JSON.stringify(line)}\n`);
55
+ };
56
+ return {
57
+ parse: (filename, hcl) => {
58
+ note({ kind: "parse", filename, text: hcl });
59
+ return parser.parse(filename, hcl);
60
+ },
61
+ getReferencesInExpression: (filename, expression) => {
62
+ note({ kind: "refs", filename, text: expression });
63
+ return parser.getReferencesInExpression(filename, expression);
64
+ },
65
+ };
66
+ }
67
+
68
+ /**
69
+ * Lazy-load the optional HCL parser. Throws `Hcl2JsonNotInstalled` with an
70
+ * install hint when the package is missing, rather than a raw MODULE_NOT_FOUND.
71
+ */
72
+ export async function loadHcl2json(): Promise<Hcl2Json> {
73
+ let parser: Hcl2Json;
74
+ try {
75
+ parser = (await import("@cdktn/hcl2json")) as Hcl2Json;
76
+ } catch (err) {
77
+ throw new Hcl2JsonNotInstalled(err);
78
+ }
79
+ const record = process.env[HCL2JSON_RECORD_ENV];
80
+ return record ? recording(parser, record) : parser;
81
+ }
@@ -1,87 +1,24 @@
1
1
  /**
2
2
  * Thin wasm glue for the carve-out advisor (#214 T1): read a Terraform estate's
3
3
  * `.tf` files, run them through `@cdktn/hcl2json`, merge into one tree, and hand
4
- * off to the pure `buildGraph`.
5
- *
6
- * `@cdktn/hcl2json` is NOT a chant dependency — it carries a ~1.8 MB wasm blob
7
- * and only carve-out users need it. It is lazy-loaded here and, if absent, the
8
- * advisor fails with a one-line install hint.
4
+ * off to the pure `buildGraph`. The parser loader lives in `./hcl2json`, which
5
+ * this module re-exports.
9
6
  */
10
7
 
11
- import { appendFileSync, readdirSync, readFileSync } from "fs";
8
+ import { readdirSync, readFileSync } from "fs";
12
9
  import { join } from "path";
13
10
  import { buildGraph, collectExpressions, type ExpressionRefs } from "./graph";
14
11
  import { readStateInstanceCounts, applyStateCounts } from "./state";
12
+ import { loadHcl2json, type Hcl2Json } from "./hcl2json";
15
13
  import type { Hcl2JsonTree, TfGraph } from "./types";
16
14
 
17
- /** Minimal shape of the parser exports we depend on. */
18
- export interface Hcl2Json {
19
- parse: (filename: string, hcl: string) => Promise<Hcl2JsonTree>;
20
- /** Expression-AST reference extraction (#998) — one traversal accessor per reference. */
21
- getReferencesInExpression: (filename: string, expression: string) => Promise<Array<{ value: string }>>;
22
- }
23
-
24
- export class Hcl2JsonNotInstalled extends Error {
25
- constructor(cause: unknown) {
26
- super(
27
- "Terraform carve-out needs the HCL parser, which is not installed.\n" +
28
- " Install it once: npm install -D @cdktn/hcl2json\n" +
29
- `(underlying error: ${cause instanceof Error ? cause.message : String(cause)})`,
30
- );
31
- this.name = "Hcl2JsonNotInstalled";
32
- }
33
- }
34
-
35
- /**
36
- * The environment variable that turns on parser-input recording (chant #2483).
37
- *
38
- * When set to a file path, every `parse(filename, source)` and every
39
- * `getReferencesInExpression(filename, expression)` this process makes is
40
- * appended to that file as one JSON line before the real call runs. That is
41
- * how `scripts/check-hcl-parser-parity.ts` gets hold of the inline HCL the
42
- * test suite parses, which no corpus walk on disk would find: run the suite
43
- * with this set, then replay the file through two parsers and compare. Off
44
- * unless set, and never changes a result.
45
- */
46
- export const HCL2JSON_RECORD_ENV = "CHANT_HCL2JSON_RECORD";
47
-
48
- /** One recorded parser input, as {@link HCL2JSON_RECORD_ENV} writes it. */
49
- export interface Hcl2JsonRecordLine {
50
- kind: "parse" | "refs";
51
- filename: string;
52
- text: string;
53
- }
54
-
55
- function recording(parser: Hcl2Json, path: string): Hcl2Json {
56
- const note = (line: Hcl2JsonRecordLine): void => {
57
- appendFileSync(path, `${JSON.stringify(line)}\n`);
58
- };
59
- return {
60
- parse: (filename, hcl) => {
61
- note({ kind: "parse", filename, text: hcl });
62
- return parser.parse(filename, hcl);
63
- },
64
- getReferencesInExpression: (filename, expression) => {
65
- note({ kind: "refs", filename, text: expression });
66
- return parser.getReferencesInExpression(filename, expression);
67
- },
68
- };
69
- }
70
-
71
- /**
72
- * Lazy-load the optional HCL parser. Throws `Hcl2JsonNotInstalled` with an
73
- * install hint when the package is missing, rather than a raw MODULE_NOT_FOUND.
74
- */
75
- export async function loadHcl2json(): Promise<Hcl2Json> {
76
- let parser: Hcl2Json;
77
- try {
78
- parser = (await import("@cdktn/hcl2json")) as Hcl2Json;
79
- } catch (err) {
80
- throw new Hcl2JsonNotInstalled(err);
81
- }
82
- const record = process.env[HCL2JSON_RECORD_ENV];
83
- return record ? recording(parser, record) : parser;
84
- }
15
+ export {
16
+ loadHcl2json,
17
+ Hcl2JsonNotInstalled,
18
+ HCL2JSON_RECORD_ENV,
19
+ type Hcl2Json,
20
+ type Hcl2JsonRecordLine,
21
+ } from "./hcl2json";
85
22
 
86
23
  /**
87
24
  * Resolve every interpolated string in the merged tree through the parser's
@@ -0,0 +1,115 @@
1
+ import { describe, expect, test } from "vitest";
2
+ import * as upstream from "js-yaml";
3
+ import { FLOAT_TYPE, INT_TYPE, load, MAP_TYPE, NULL_TYPE, SEQ_TYPE, STR_TYPE, YAMLException } from "./js-yaml-load";
4
+
5
+ const BOOL_TYPE = {
6
+ tag: "tag:yaml.org,2002:bool",
7
+ kind: "scalar",
8
+ resolve: (d: string | null) => d !== null && /^(?:true|True|TRUE|false|False|FALSE)$/.test(d),
9
+ construct: (d: string) => /^(?:true|True|TRUE)$/.test(d),
10
+ };
11
+ const MERGE_TYPE = { tag: "tag:yaml.org,2002:merge", kind: "scalar", resolve: (d: string | null) => d === "<<" || d === null };
12
+
13
+ const TYPES = {
14
+ implicit: [NULL_TYPE, BOOL_TYPE, INT_TYPE, FLOAT_TYPE, MERGE_TYPE],
15
+ explicit: [STR_TYPE, SEQ_TYPE, MAP_TYPE],
16
+ };
17
+
18
+ /** Documents spanning the loader's paths: block and flow collections, every scalar style, anchors, tags, merge keys. */
19
+ const OPTIONS = { schema: upstream.CORE_SCHEMA.extend({ implicit: [new upstream.Type("tag:yaml.org,2002:merge", { kind: "scalar", resolve: (d: string | null) => d === "<<" || d === null })] }), json: true };
20
+
21
+ const VALID = [
22
+ "",
23
+ "a: 1\nb: [1, 2, {c: d}]\n",
24
+ "- a\n- b: 1\n c: 2\n-\n - x\n - y\n",
25
+ "s: 'it''s'\nd: \"tab\\t \\u00e9 \\x41 \\\n folded\"\n",
26
+ "lit: |\n one\n two\n\nfold: >-\n a\n b\n\n c\nkeep: |+\n x\n\n",
27
+ "base: &b {x: 1}\nuse: *b\nm:\n <<: *b\n y: 2\n",
28
+ "n: ~\nm: null\nt: true\nT: True\nf: FALSE\nyes_: yes\n",
29
+ "big: 1e999\nz: 0x\ny: -0\n",
30
+ "i: 12\nh: 0x1F\no: 0o17\nbin: 0b101\nu: 1_000\nneg: -5\nfl: 1.5e3\ninf: .inf\nnan: .NaN\nd: .5\n",
31
+ "? complex\n: value\n? [a, b]\n: seq key\n",
32
+ "!!str 123: !!int '7'\nq: !!map {a: 1}\nz: !!seq [1]\n",
33
+ "key with spaces: value # comment\n# full comment\nother: 'x' # trailing\n",
34
+ "multi: first line\n second line\n third\n",
35
+ "a:\n b:\n c:\n - 1\n - 2\n",
36
+ "dup: 1\ndup: 2\n",
37
+ "{a: 1, b: [x, y], c: {d: e}}",
38
+ "[1, 2, 3]",
39
+ "\ufeffa: bom\n",
40
+ "a: 1\r\nb: 2\r\n",
41
+ "%YAML 1.2\n---\na: 1\n",
42
+ "__proto__: 1\nconstructor: 2\n",
43
+ "emoji: \"\\U0001F600\"\nunicode: héllo ✓\n",
44
+ ];
45
+
46
+ const INVALID = [
47
+ "[".repeat(200),
48
+ "a: 99999999999999999999999999\n" + "b: " + "[".repeat(150) + "]".repeat(150) + "\n",
49
+ "a: 1\njust text\nb: 2\n",
50
+ "a: [1, 2\n",
51
+ "a: 'unterminated\n",
52
+ "a: &x 1\nb: *y\n",
53
+ "- a\nb: 1\n",
54
+ "a:\n\t- b\n",
55
+ "a: !!binary x\n",
56
+ "a: 1\n---\nb: 2\n",
57
+ "a: \"bad \\q escape\"\n",
58
+ "a: b: c\n",
59
+ "a\u0000b: 1\n",
60
+ "{a: 1, a",
61
+ "%YAML 1.2\n%YAML 1.2\n---\na: 1\n",
62
+ ];
63
+
64
+ function outcome(fn: () => unknown): { ok: true; value: unknown } | { ok: false; reason: string; line: number | undefined } {
65
+ try {
66
+ return { ok: true, value: fn() };
67
+ } catch (err) {
68
+ const e = err as { reason: string; mark?: { line: number; column: number; position: number } };
69
+ return { ok: false, reason: e.reason, line: e.mark?.line };
70
+ }
71
+ }
72
+
73
+ describe("vendored js-yaml loader", () => {
74
+ for (const text of VALID) {
75
+ test(`reads ${JSON.stringify(text.slice(0, 40))} as js-yaml does`, () => {
76
+ const mine = outcome(() => load(text, TYPES));
77
+ const theirs = outcome(() => upstream.load(text, OPTIONS));
78
+ expect(mine.ok).toBe(true);
79
+ expect(mine).toEqual(theirs);
80
+ });
81
+ }
82
+
83
+ for (const text of INVALID) {
84
+ test(`rejects ${JSON.stringify(text.slice(0, 40))} with js-yaml's reason and line`, () => {
85
+ const mine = outcome(() => load(text, TYPES));
86
+ const theirs = outcome(() => upstream.load(text, OPTIONS));
87
+ expect(mine.ok).toBe(false);
88
+ expect(mine).toEqual(theirs);
89
+ });
90
+ }
91
+
92
+ test("throws YAMLException carrying a reason and a position", () => {
93
+ try {
94
+ load("a: [1\n", TYPES);
95
+ expect.unreachable();
96
+ } catch (err) {
97
+ expect(err).toBeInstanceOf(YAMLException);
98
+ expect((err as YAMLException).reason).toBeTruthy();
99
+ expect((err as { mark: { line: number } }).mark.line).toBe(1);
100
+ }
101
+ });
102
+
103
+ test("an empty stream is undefined", () => {
104
+ expect(load("", TYPES)).toBeUndefined();
105
+ expect(load("# only a comment\n", TYPES)).toBeNull();
106
+ });
107
+
108
+ test("a custom multi tag type is consulted by prefix", () => {
109
+ const types = {
110
+ implicit: TYPES.implicit,
111
+ explicit: [...TYPES.explicit, { tag: "!", kind: "scalar", multi: true, construct: (d: string, tag: string) => `${tag}:${d}` }],
112
+ };
113
+ expect(load("a: !Ref x\n", types)).toEqual({ a: "!Ref:x" });
114
+ });
115
+ });