@intentius/chant 0.124.12 → 0.124.14

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 (928) hide show
  1. package/bin/chant +11 -0
  2. package/dist/agents/checks.js +326 -0
  3. package/dist/agents/discover.js +885 -0
  4. package/dist/agents/importer.js +17 -0
  5. package/dist/agents/index.js +12 -0
  6. package/dist/agents/types.js +19 -0
  7. package/dist/apply.js +151 -0
  8. package/dist/attrref.js +70 -0
  9. package/dist/audit/catalog.js +350 -0
  10. package/dist/audit/core.js +252 -0
  11. package/dist/audit/discover.js +633 -0
  12. package/dist/audit/fetch.js +666 -0
  13. package/dist/audit/lineage.js +91 -0
  14. package/dist/audit/nginx.js +366 -0
  15. package/dist/audit/prior-art.js +132 -0
  16. package/dist/audit/proof.js +321 -0
  17. package/dist/audit/report-html.js +194 -0
  18. package/dist/audit/report-model.js +198 -0
  19. package/dist/audit/report.js +102 -0
  20. package/dist/audit/rules-doc.js +144 -0
  21. package/dist/audit/secrets.js +405 -0
  22. package/dist/audit/terraform-state.js +140 -0
  23. package/dist/audit/wrangler.js +262 -0
  24. package/dist/behaviour-delta.js +401 -0
  25. package/dist/behaviour-engine.js +357 -0
  26. package/dist/behaviour-graph.js +83 -0
  27. package/dist/behaviour-http.js +188 -0
  28. package/dist/behaviour-kinds.js +172 -0
  29. package/dist/behaviour-overlay.js +50 -0
  30. package/dist/behaviour-predict.js +188 -0
  31. package/dist/behaviour-request.js +194 -0
  32. package/dist/behaviour.js +1325 -0
  33. package/dist/build-params.js +108 -0
  34. package/dist/build.js +668 -0
  35. package/dist/builder.js +44 -0
  36. package/dist/cdk/advise.js +30 -0
  37. package/dist/cdk/assembly.js +122 -0
  38. package/dist/cdk/graph.js +444 -0
  39. package/dist/cdk/tier-map.js +64 -0
  40. package/dist/cdk/types.js +24 -0
  41. package/dist/change-set.js +312 -0
  42. package/dist/child-project.js +21 -0
  43. package/dist/claimed-fields.js +135 -0
  44. package/dist/cli/build-options.js +70 -0
  45. package/dist/cli/build-params-cli.js +139 -0
  46. package/dist/cli/command-group.js +123 -0
  47. package/dist/cli/commands/audit-agents.js +326 -0
  48. package/dist/cli/commands/audit.js +571 -0
  49. package/dist/cli/commands/build.js +920 -0
  50. package/dist/cli/commands/carve-apply.js +153 -0
  51. package/dist/cli/commands/carve-bridge.js +201 -0
  52. package/dist/cli/commands/carve-emit.js +332 -0
  53. package/dist/cli/commands/carve-status.js +119 -0
  54. package/dist/cli/commands/carve.js +204 -0
  55. package/dist/cli/commands/check-lexicon-docs.js +79 -0
  56. package/dist/cli/commands/check-lexicon-examples.js +177 -0
  57. package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
  58. package/dist/cli/commands/check-lexicon-mcp.js +82 -0
  59. package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
  60. package/dist/cli/commands/check-lexicon-plugin.js +104 -0
  61. package/dist/cli/commands/check-lexicon.js +766 -0
  62. package/dist/cli/commands/describe.js +85 -0
  63. package/dist/cli/commands/diff.js +175 -0
  64. package/dist/cli/commands/doctor.js +350 -0
  65. package/dist/cli/commands/import-agents.js +155 -0
  66. package/dist/cli/commands/import.js +670 -0
  67. package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
  68. package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
  69. package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
  70. package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
  71. package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
  72. package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
  73. package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
  74. package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
  75. package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
  76. package/dist/cli/commands/init-lexicon.js +172 -0
  77. package/dist/cli/commands/init.js +381 -0
  78. package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
  79. package/dist/cli/commands/lexicon-surface-diff.js +145 -0
  80. package/dist/cli/commands/licenses.js +125 -0
  81. package/dist/cli/commands/lint.d.ts.map +1 -1
  82. package/dist/cli/commands/lint.js +948 -0
  83. package/dist/cli/commands/list.js +63 -0
  84. package/dist/cli/commands/migrate.d.ts.map +1 -1
  85. package/dist/cli/commands/migrate.js +423 -0
  86. package/dist/cli/commands/onboard.js +403 -0
  87. package/dist/cli/commands/pinned-upgrade.js +191 -0
  88. package/dist/cli/commands/update.js +194 -0
  89. package/dist/cli/commands/vendor.js +217 -0
  90. package/dist/cli/conflict-check.js +104 -0
  91. package/dist/cli/debug.js +8 -0
  92. package/dist/cli/format.js +104 -0
  93. package/dist/cli/handlers/build.js +267 -0
  94. package/dist/cli/handlers/carve-apply.js +30 -0
  95. package/dist/cli/handlers/carve-bridge.js +28 -0
  96. package/dist/cli/handlers/carve-emit.js +50 -0
  97. package/dist/cli/handlers/carve-status.js +26 -0
  98. package/dist/cli/handlers/carve.js +40 -0
  99. package/dist/cli/handlers/change-set.js +46 -0
  100. package/dist/cli/handlers/components.js +730 -0
  101. package/dist/cli/handlers/dev.js +113 -0
  102. package/dist/cli/handlers/emulator.js +233 -0
  103. package/dist/cli/handlers/explain.js +54 -0
  104. package/dist/cli/handlers/fan-out.js +422 -0
  105. package/dist/cli/handlers/gate-resume.js +275 -0
  106. package/dist/cli/handlers/generate.js +84 -0
  107. package/dist/cli/handlers/graph.js +969 -0
  108. package/dist/cli/handlers/init.js +102 -0
  109. package/dist/cli/handlers/lifecycle.js +1727 -0
  110. package/dist/cli/handlers/lint.js +62 -0
  111. package/dist/cli/handlers/migrate.js +48 -0
  112. package/dist/cli/handlers/misc.js +391 -0
  113. package/dist/cli/handlers/operator.js +1162 -0
  114. package/dist/cli/handlers/override-approve.js +102 -0
  115. package/dist/cli/handlers/pr.js +503 -0
  116. package/dist/cli/handlers/promote.js +342 -0
  117. package/dist/cli/handlers/run-generate.js +206 -0
  118. package/dist/cli/handlers/run-wave.js +66 -0
  119. package/dist/cli/handlers/run.js +1191 -0
  120. package/dist/cli/handlers/scenario.js +325 -0
  121. package/dist/cli/handlers/search.js +924 -0
  122. package/dist/cli/handlers/serve.js +32 -0
  123. package/dist/cli/handlers/vendor.js +154 -0
  124. package/dist/cli/index.js +3 -0
  125. package/dist/cli/is-entry-point.js +23 -0
  126. package/dist/cli/lsp/capabilities.js +28 -0
  127. package/dist/cli/lsp/diagnostics.js +34 -0
  128. package/dist/cli/lsp/server.js +329 -0
  129. package/dist/cli/main.d.ts.map +1 -1
  130. package/dist/cli/main.js +2540 -0
  131. package/dist/cli/mcp/lifecycle-tools.js +80 -0
  132. package/dist/cli/mcp/op-tools.js +306 -0
  133. package/dist/cli/mcp/resource-handlers.js +258 -0
  134. package/dist/cli/mcp/resources/context.js +85 -0
  135. package/dist/cli/mcp/server.js +353 -0
  136. package/dist/cli/mcp/tools/build.js +111 -0
  137. package/dist/cli/mcp/tools/composites.js +95 -0
  138. package/dist/cli/mcp/tools/explain.js +166 -0
  139. package/dist/cli/mcp/tools/import.js +49 -0
  140. package/dist/cli/mcp/tools/lint.js +41 -0
  141. package/dist/cli/mcp/tools/scaffold.js +111 -0
  142. package/dist/cli/mcp/tools/search.js +112 -0
  143. package/dist/cli/mcp/types.js +1 -0
  144. package/dist/cli/mcp/workspace-plugins.js +91 -0
  145. package/dist/cli/mcp/workspace-tools.d.ts +1 -1
  146. package/dist/cli/mcp/workspace-tools.js +564 -0
  147. package/dist/cli/mcp-config.js +70 -0
  148. package/dist/cli/plugins.js +313 -0
  149. package/dist/cli/registry.js +23 -0
  150. package/dist/cli/reporters/stylish.js +329 -0
  151. package/dist/cli/version.js +15 -0
  152. package/dist/cli/watch.js +79 -0
  153. package/dist/codegen/bound-property-types.js +82 -0
  154. package/dist/codegen/coverage.js +119 -0
  155. package/dist/codegen/docs-file-markers.js +60 -0
  156. package/dist/codegen/docs-pages.js +115 -0
  157. package/dist/codegen/docs-rule-scanning.js +164 -0
  158. package/dist/codegen/docs-rules.js +76 -0
  159. package/dist/codegen/docs-sections.js +117 -0
  160. package/dist/codegen/docs-sidebar.js +65 -0
  161. package/dist/codegen/docs-types.js +4 -0
  162. package/dist/codegen/docs.js +356 -0
  163. package/dist/codegen/fetch.js +340 -0
  164. package/dist/codegen/generate-post-synth-barrel.js +63 -0
  165. package/dist/codegen/generate-registry.js +71 -0
  166. package/dist/codegen/generate-runtime-index.js +56 -0
  167. package/dist/codegen/generate-typescript.js +119 -0
  168. package/dist/codegen/generate.js +115 -0
  169. package/dist/codegen/json-patch.js +141 -0
  170. package/dist/codegen/json-schema-to-ts.js +344 -0
  171. package/dist/codegen/json-schema.js +246 -0
  172. package/dist/codegen/lexicon-regen.js +412 -0
  173. package/dist/codegen/naming.js +217 -0
  174. package/dist/codegen/okf-lexicon.js +245 -0
  175. package/dist/codegen/package.js +150 -0
  176. package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
  177. package/dist/codegen/pinned-upgrade.js +494 -0
  178. package/dist/codegen/registry.js +60 -0
  179. package/dist/codegen/rehype-base-url.mjs +68 -0
  180. package/dist/codegen/rolling-upgrade.js +217 -0
  181. package/dist/codegen/surface-snapshot.js +537 -0
  182. package/dist/codegen/testdata/postgres-tags.json +242 -0
  183. package/dist/codegen/topo-sort.js +36 -0
  184. package/dist/codegen/typecheck.js +115 -0
  185. package/dist/codegen/validate.js +200 -0
  186. package/dist/codegen/version-bump.js +35 -0
  187. package/dist/components/auto-release.js +143 -0
  188. package/dist/components/builders.js +47 -0
  189. package/dist/components/capability-plugin-loader.js +175 -0
  190. package/dist/components/capability-plugin-schema.js +46 -0
  191. package/dist/components/capability-plugin.js +99 -0
  192. package/dist/components/capability.js +60 -0
  193. package/dist/components/changed-files.js +72 -0
  194. package/dist/components/cli-support.js +427 -0
  195. package/dist/components/component.js +120 -0
  196. package/dist/components/component.schema.json +271 -0
  197. package/dist/components/config-defaults.js +130 -0
  198. package/dist/components/deploy-units.js +60 -0
  199. package/dist/components/discover.d.ts.map +1 -1
  200. package/dist/components/discover.js +189 -0
  201. package/dist/components/driver-output.js +86 -0
  202. package/dist/components/driver.js +728 -0
  203. package/dist/components/fan-out-output.js +165 -0
  204. package/dist/components/fan-out-record.js +94 -0
  205. package/dist/components/fan-out-run.js +373 -0
  206. package/dist/components/fan-out-support.js +60 -0
  207. package/dist/components/fan-out.js +273 -0
  208. package/dist/components/gate-plan.js +41 -0
  209. package/dist/components/gated-wave-pipeline.js +46 -0
  210. package/dist/components/index.js +24 -0
  211. package/dist/components/layers.js +28 -0
  212. package/dist/components/manifest-persistence.js +108 -0
  213. package/dist/components/pilots/alb-ecs.pilot.js +59 -0
  214. package/dist/components/pilots/dynamodb.pilot.js +51 -0
  215. package/dist/components/pilots/jar-emr.pilot.js +65 -0
  216. package/dist/components/pilots/lambda.pilot.js +52 -0
  217. package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
  218. package/dist/components/pilots/project.js +12 -0
  219. package/dist/components/pr-pipeline.js +134 -0
  220. package/dist/components/pr-run.js +363 -0
  221. package/dist/components/presets/ecs-fargate.js +72 -0
  222. package/dist/components/presets/index.js +28 -0
  223. package/dist/components/presets/lambda.js +34 -0
  224. package/dist/components/presets/single-host-compose.js +41 -0
  225. package/dist/components/promote.js +549 -0
  226. package/dist/components/registry.js +34 -0
  227. package/dist/components/run-progress.js +33 -0
  228. package/dist/components/sandbox/driver.d.ts.map +1 -1
  229. package/dist/components/sandbox/driver.js +93 -0
  230. package/dist/components/sandbox/run.js +115 -0
  231. package/dist/components/starter-plugin.js +104 -0
  232. package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
  233. package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
  234. package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
  235. package/dist/components/verbs/bom-writer.js +287 -0
  236. package/dist/components/verbs/build-archive.js +188 -0
  237. package/dist/components/verbs/build.js +142 -0
  238. package/dist/components/verbs/cloud-executor.js +110 -0
  239. package/dist/components/verbs/component-bom.js +125 -0
  240. package/dist/components/verbs/ensure-secret.js +50 -0
  241. package/dist/components/verbs/index.js +61 -0
  242. package/dist/components/verbs/license-policy.js +75 -0
  243. package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
  244. package/dist/components/verbs/process-runner.js +78 -0
  245. package/dist/components/verbs/r2-sync.js +93 -0
  246. package/dist/components/verbs/reproducibility.js +62 -0
  247. package/dist/components/verbs/run-agent.js +577 -0
  248. package/dist/components/verbs/sbom-generator.js +119 -0
  249. package/dist/components/verbs/sbom.js +97 -0
  250. package/dist/components/verbs/shell.js +32 -0
  251. package/dist/components/verbs/sign.js +221 -0
  252. package/dist/components/verbs/stub.js +28 -0
  253. package/dist/components/verbs/tool-sbom-generator.js +154 -0
  254. package/dist/components/verbs/verify.js +112 -0
  255. package/dist/components/verbs/vex.js +131 -0
  256. package/dist/components/verbs/vuln-gate.js +152 -0
  257. package/dist/components/verbs/vuln-scan.js +288 -0
  258. package/dist/components/verbs/wait-verify.js +106 -0
  259. package/dist/components/verbs/wrangler.js +179 -0
  260. package/dist/components/wave-plan.js +102 -0
  261. package/dist/composite.js +305 -0
  262. package/dist/config-import.d.ts.map +1 -1
  263. package/dist/config-import.js +22 -0
  264. package/dist/config-sandbox.js +122 -0
  265. package/dist/config-static.js +206 -0
  266. package/dist/config.js +605 -0
  267. package/dist/content-digest.js +23 -0
  268. package/dist/declarable.js +114 -0
  269. package/dist/deep-observation.js +437 -0
  270. package/dist/detectLexicon.js +54 -0
  271. package/dist/discovery/cache.js +70 -0
  272. package/dist/discovery/collect.js +208 -0
  273. package/dist/discovery/cycles.js +95 -0
  274. package/dist/discovery/entity-wire-codec.js +391 -0
  275. package/dist/discovery/entity-wire.js +42 -0
  276. package/dist/discovery/files.js +121 -0
  277. package/dist/discovery/fold-import.d.ts.map +1 -1
  278. package/dist/discovery/fold-import.js +4178 -0
  279. package/dist/discovery/fold-rank.js +292 -0
  280. package/dist/discovery/graph.js +115 -0
  281. package/dist/discovery/import.d.ts.map +1 -1
  282. package/dist/discovery/import.js +65 -0
  283. package/dist/discovery/index.js +333 -0
  284. package/dist/discovery/param-deps.js +487 -0
  285. package/dist/discovery/resolve.js +39 -0
  286. package/dist/discovery/sandbox/bundle.js +214 -0
  287. package/dist/discovery/sandbox/child-errors.js +26 -0
  288. package/dist/discovery/sandbox/config-run.js +100 -0
  289. package/dist/discovery/sandbox/config-wire.js +183 -0
  290. package/dist/discovery/sandbox/driver.d.ts.map +1 -1
  291. package/dist/discovery/sandbox/driver.js +333 -0
  292. package/dist/discovery/sandbox/fork.js +229 -0
  293. package/dist/discovery/sandbox/policy-run.js +142 -0
  294. package/dist/discovery/sandbox/policy-wire.js +152 -0
  295. package/dist/discovery/sandbox/run.js +77 -0
  296. package/dist/discovery/specifier-resolve.js +320 -0
  297. package/dist/discovery/walk.js +284 -0
  298. package/dist/effect-receipt.js +340 -0
  299. package/dist/env.js +55 -0
  300. package/dist/errors.js +62 -0
  301. package/dist/fold/fold.js +1434 -0
  302. package/dist/fold/foldable-helpers.js +229 -0
  303. package/dist/fold/subset.js +696 -0
  304. package/dist/fold-provenance.js +414 -0
  305. package/dist/gate-decision.d.ts +36 -4
  306. package/dist/gate-decision.d.ts.map +1 -1
  307. package/dist/gate-decision.js +260 -0
  308. package/dist/gate-resume-run.js +154 -0
  309. package/dist/gated-waves.js +165 -0
  310. package/dist/governance.js +43 -0
  311. package/dist/graph-declared.js +45 -0
  312. package/dist/graph-detail.js +207 -0
  313. package/dist/graph-dot.js +54 -0
  314. package/dist/graph-effective.js +107 -0
  315. package/dist/graph-ir.js +623 -0
  316. package/dist/graph-layout.js +184 -0
  317. package/dist/graph-lens.js +105 -0
  318. package/dist/graph-mermaid.js +83 -0
  319. package/dist/graph-ops.js +39 -0
  320. package/dist/graph-refs.js +156 -0
  321. package/dist/held-elsewhere.js +87 -0
  322. package/dist/identity.js +251 -0
  323. package/dist/import/base-parser.js +34 -0
  324. package/dist/import/embedded.js +255 -0
  325. package/dist/import/generator.js +1 -0
  326. package/dist/import/ir-utils.js +85 -0
  327. package/dist/import/parser-options.js +45 -0
  328. package/dist/import/parser.js +1 -0
  329. package/dist/index.js +118 -0
  330. package/dist/intrinsic-interpolation.js +73 -0
  331. package/dist/intrinsic.js +31 -0
  332. package/dist/join-key.js +35 -0
  333. package/dist/kubectl-context.js +150 -0
  334. package/dist/lexicon-config.js +58 -0
  335. package/dist/lexicon-integrity.js +47 -0
  336. package/dist/lexicon-manifest.js +70 -0
  337. package/dist/lexicon-module.d.ts.map +1 -1
  338. package/dist/lexicon-module.js +241 -0
  339. package/dist/lexicon-output.js +218 -0
  340. package/dist/lexicon-plugin-helpers.js +104 -0
  341. package/dist/lexicon-schema.js +136 -0
  342. package/dist/lexicon.js +130 -0
  343. package/dist/lifecycle/affected.js +224 -0
  344. package/dist/lifecycle/assert-live.js +110 -0
  345. package/dist/lifecycle/build-ledger-store.js +160 -0
  346. package/dist/lifecycle/build-ledger.js +155 -0
  347. package/dist/lifecycle/change-set.js +356 -0
  348. package/dist/lifecycle/converge-ledger.js +161 -0
  349. package/dist/lifecycle/deep-diff.js +233 -0
  350. package/dist/lifecycle/deep-observe.js +147 -0
  351. package/dist/lifecycle/digest.js +143 -0
  352. package/dist/lifecycle/disruption.js +135 -0
  353. package/dist/lifecycle/gate-applied.js +113 -0
  354. package/dist/lifecycle/gate-audit.js +341 -0
  355. package/dist/lifecycle/gate-ledger-select.js +89 -0
  356. package/dist/lifecycle/gate-ledger.d.ts +8 -0
  357. package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
  358. package/dist/lifecycle/gate-ledger.js +193 -0
  359. package/dist/lifecycle/gate-origin.js +117 -0
  360. package/dist/lifecycle/gate-pending.js +58 -0
  361. package/dist/lifecycle/git.js +1182 -0
  362. package/dist/lifecycle/identity.js +58 -0
  363. package/dist/lifecycle/index.js +26 -0
  364. package/dist/lifecycle/lease.js +283 -0
  365. package/dist/lifecycle/ledger-port.js +1 -0
  366. package/dist/lifecycle/legacy-digest.js +91 -0
  367. package/dist/lifecycle/live-diff.js +274 -0
  368. package/dist/lifecycle/local-note.js +15 -0
  369. package/dist/lifecycle/member-ledger.js +122 -0
  370. package/dist/lifecycle/observation-baseline.js +155 -0
  371. package/dist/lifecycle/observe.js +375 -0
  372. package/dist/lifecycle/oras-referrer-lookup.js +82 -0
  373. package/dist/lifecycle/override-ledger.js +54 -0
  374. package/dist/lifecycle/plan-digest.js +110 -0
  375. package/dist/lifecycle/plan-ledger.js +129 -0
  376. package/dist/lifecycle/receipt-plan.js +192 -0
  377. package/dist/lifecycle/release-ledger.js +155 -0
  378. package/dist/lifecycle/release-read.js +64 -0
  379. package/dist/lifecycle/replay.js +193 -0
  380. package/dist/lifecycle/rollback.js +102 -0
  381. package/dist/lifecycle/run-ledger.js +183 -0
  382. package/dist/lifecycle/scenario-eval.js +204 -0
  383. package/dist/lifecycle/scenario.js +214 -0
  384. package/dist/lifecycle/snapshot.js +239 -0
  385. package/dist/lifecycle/status.js +447 -0
  386. package/dist/lifecycle/symptoms.js +117 -0
  387. package/dist/lifecycle/teardown.js +255 -0
  388. package/dist/lifecycle/types.js +1 -0
  389. package/dist/lifecycle/unobserved-gate.js +33 -0
  390. package/dist/lifecycle/wave-plans.js +68 -0
  391. package/dist/lifecycle/work-item-id.js +36 -0
  392. package/dist/lifecycle/work-lease.js +393 -0
  393. package/dist/lint/component-checks.js +87 -0
  394. package/dist/lint/config.js +483 -0
  395. package/dist/lint/declarative.js +122 -0
  396. package/dist/lint/discover.d.ts.map +1 -1
  397. package/dist/lint/discover.js +138 -0
  398. package/dist/lint/engine.js +246 -0
  399. package/dist/lint/knowledge-checks.js +64 -0
  400. package/dist/lint/named-checks.js +22 -0
  401. package/dist/lint/output-checks.js +87 -0
  402. package/dist/lint/output-docs.js +163 -0
  403. package/dist/lint/parser.js +33 -0
  404. package/dist/lint/pipeline-change-gate.js +70 -0
  405. package/dist/lint/policy-import.d.ts +1 -1
  406. package/dist/lint/policy-import.d.ts.map +1 -1
  407. package/dist/lint/policy-import.js +62 -0
  408. package/dist/lint/policy-sandbox.js +86 -0
  409. package/dist/lint/policy.js +122 -0
  410. package/dist/lint/post-synth.js +87 -0
  411. package/dist/lint/presets/relaxed.json +26 -0
  412. package/dist/lint/presets/strict.json +24 -24
  413. package/dist/lint/receipt-checks.js +83 -0
  414. package/dist/lint/rule-loader.d.ts.map +1 -1
  415. package/dist/lint/rule-loader.js +89 -0
  416. package/dist/lint/rule-registry.js +86 -0
  417. package/dist/lint/rule.js +1 -0
  418. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
  419. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
  420. package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
  421. package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
  422. package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
  423. package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
  424. package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
  425. package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
  426. package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
  427. package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
  428. package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
  429. package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
  430. package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
  431. package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
  432. package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
  433. package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
  434. package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
  435. package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
  436. package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
  437. package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
  438. package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
  439. package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
  440. package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
  441. package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
  442. package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
  443. package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
  444. package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
  445. package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
  446. package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
  447. package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
  448. package/dist/lint/rules/comp/index.js +33 -0
  449. package/dist/lint/rules/comp/support.js +129 -0
  450. package/dist/lint/rules/composite-scope.js +51 -0
  451. package/dist/lint/rules/cor017-composite-name-match.js +93 -0
  452. package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
  453. package/dist/lint/rules/cor021-env-literal-name.js +100 -0
  454. package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
  455. package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
  456. package/dist/lint/rules/declarable-naming-convention.js +62 -0
  457. package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
  458. package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
  459. package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
  460. package/dist/lint/rules/evl004-spread-non-const.js +94 -0
  461. package/dist/lint/rules/evl005-resource-block-body.js +41 -0
  462. package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
  463. package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
  464. package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
  465. package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
  466. package/dist/lint/rules/export-required.js +115 -0
  467. package/dist/lint/rules/file-declarable-limit.js +88 -0
  468. package/dist/lint/rules/flat-declarations.js +62 -0
  469. package/dist/lint/rules/index.js +90 -0
  470. package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
  471. package/dist/lint/rules/no-redundant-type-import.js +76 -0
  472. package/dist/lint/rules/no-redundant-value-cast.js +41 -0
  473. package/dist/lint/rules/no-string-ref.js +59 -0
  474. package/dist/lint/rules/no-unused-declarable-import.js +75 -0
  475. package/dist/lint/rules/no-unused-declarable.js +142 -0
  476. package/dist/lint/rules/op/index.js +28 -0
  477. package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
  478. package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
  479. package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
  480. package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
  481. package/dist/lint/rules/op/support.js +11 -0
  482. package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
  483. package/dist/lint/rules/property-kind.js +56 -0
  484. package/dist/lint/rules/single-concern-file.js +71 -0
  485. package/dist/lint/rules/sys001-no-literal-key.js +60 -0
  486. package/dist/lint/selectors.js +168 -0
  487. package/dist/lint/suppressions.js +129 -0
  488. package/dist/lint/typescript.js +17 -0
  489. package/dist/live-endpoint.js +113 -0
  490. package/dist/live-read-session.js +76 -0
  491. package/dist/lsp/lexicon-providers.js +163 -0
  492. package/dist/lsp/types.js +5 -0
  493. package/dist/managed-fields.js +293 -0
  494. package/dist/mcp/types.js +4 -0
  495. package/dist/notify-verify.js +0 -1
  496. package/dist/notify.js +0 -1
  497. package/dist/notify.schema.json +72 -0
  498. package/dist/observation.js +266 -0
  499. package/dist/okf-read.js +134 -0
  500. package/dist/okf.js +275 -0
  501. package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
  502. package/dist/op/activities/activity-contracts.js +313 -0
  503. package/dist/op/activities/apply.js +582 -0
  504. package/dist/op/activities/build.js +18 -0
  505. package/dist/op/activities/change-coverage.js +40 -0
  506. package/dist/op/activities/change-set.js +64 -0
  507. package/dist/op/activities/converge.js +492 -0
  508. package/dist/op/activities/decide.js +211 -0
  509. package/dist/op/activities/env-teardown.js +110 -0
  510. package/dist/op/activities/factory.js +591 -0
  511. package/dist/op/activities/forge-pull-request.js +82 -0
  512. package/dist/op/activities/gh-host.js +78 -0
  513. package/dist/op/activities/guard-validate.js +165 -0
  514. package/dist/op/activities/http-check.js +40 -0
  515. package/dist/op/activities/index.js +59 -0
  516. package/dist/op/activities/lexicon-upgrade.js +629 -0
  517. package/dist/op/activities/lifecycle.js +109 -0
  518. package/dist/op/activities/pipeline-audit.js +147 -0
  519. package/dist/op/activities/policy.js +26 -0
  520. package/dist/op/activities/predict-behaviour.js +341 -0
  521. package/dist/op/activities/propose-upgrade.js +165 -0
  522. package/dist/op/activities/reconcile.js +997 -0
  523. package/dist/op/activities/shell.js +118 -0
  524. package/dist/op/activities/source-release.js +97 -0
  525. package/dist/op/activities/source-rollback.js +165 -0
  526. package/dist/op/activities/teardown.js +17 -0
  527. package/dist/op/activities/util.js +6 -0
  528. package/dist/op/activities/wait.js +51 -0
  529. package/dist/op/activities/work-evidence.js +35 -0
  530. package/dist/op/activities/workflow-audit.js +133 -0
  531. package/dist/op/activity-contract-registry.js +106 -0
  532. package/dist/op/activity-contract.js +232 -0
  533. package/dist/op/activity-failure.js +31 -0
  534. package/dist/op/activity-profiles.js +129 -0
  535. package/dist/op/activity-registry.js +105 -0
  536. package/dist/op/activity-runtime.js +28 -0
  537. package/dist/op/builders.js +801 -0
  538. package/dist/op/change-signal.js +118 -0
  539. package/dist/op/composites/apply-op.js +151 -0
  540. package/dist/op/composites/behaviour-op.js +65 -0
  541. package/dist/op/composites/converge-op.js +141 -0
  542. package/dist/op/composites/index.js +19 -0
  543. package/dist/op/composites/lexicon-upgrade-op.js +107 -0
  544. package/dist/op/composites/pipeline-audit-op.js +50 -0
  545. package/dist/op/composites/reconcile-op.js +84 -0
  546. package/dist/op/composites/watch-op.js +69 -0
  547. package/dist/op/composites/workflow-audit-op.js +57 -0
  548. package/dist/op/converge-rule.js +205 -0
  549. package/dist/op/cron.js +146 -0
  550. package/dist/op/decide-backend.js +181 -0
  551. package/dist/op/decide-config.js +68 -0
  552. package/dist/op/decide-read-inputs.js +141 -0
  553. package/dist/op/discover.d.ts.map +1 -1
  554. package/dist/op/discover.js +213 -0
  555. package/dist/op/duration.js +21 -0
  556. package/dist/op/emulator-freshness.js +80 -0
  557. package/dist/op/emulator-lifecycle.js +269 -0
  558. package/dist/op/factory.js +83 -0
  559. package/dist/op/gate-approval.js +172 -0
  560. package/dist/op/gate-name.js +86 -0
  561. package/dist/op/gate-plan-context.js +167 -0
  562. package/dist/op/gate-point-run.js +67 -0
  563. package/dist/op/gate-point.js +111 -0
  564. package/dist/op/gate-resume-plan.js +155 -0
  565. package/dist/op/gate-resume.js +31 -0
  566. package/dist/op/gate-review.js +290 -0
  567. package/dist/op/gate-run-locator.js +85 -0
  568. package/dist/op/gate-summary.js +100 -0
  569. package/dist/op/gate-wait.js +56 -0
  570. package/dist/op/gate.js +449 -0
  571. package/dist/op/generate-pipeline.js +124 -0
  572. package/dist/op/index.js +51 -0
  573. package/dist/op/lifecycle-receipt-store.js +45 -0
  574. package/dist/op/local-executor.js +1164 -0
  575. package/dist/op/local-output.js +140 -0
  576. package/dist/op/op-ir.js +317 -0
  577. package/dist/op/op-verb-class.js +131 -0
  578. package/dist/op/op-waves-notify.js +136 -0
  579. package/dist/op/op-waves-run.d.ts +1 -1
  580. package/dist/op/op-waves-run.d.ts.map +1 -1
  581. package/dist/op/op-waves-run.js +1657 -0
  582. package/dist/op/op-waves.js +409 -0
  583. package/dist/op/operator.js +743 -0
  584. package/dist/op/receipt-store.js +94 -0
  585. package/dist/op/resource.js +23 -0
  586. package/dist/op/run-context.js +28 -0
  587. package/dist/op/run-live.js +256 -0
  588. package/dist/op/runtime.js +21 -0
  589. package/dist/op/runtimes/local.js +195 -0
  590. package/dist/op/source-archive.js +131 -0
  591. package/dist/op/step-output-ref.js +397 -0
  592. package/dist/op/steward-beside.js +169 -0
  593. package/dist/op/steward-points.js +138 -0
  594. package/dist/op/steward-turn.js +59 -0
  595. package/dist/op/steward.js +317 -0
  596. package/dist/op/types.js +25 -0
  597. package/dist/op/work-lease-decl.js +81 -0
  598. package/dist/op/work-lease-run.js +393 -0
  599. package/dist/override-gate.js +284 -0
  600. package/dist/owner-chain.js +74 -0
  601. package/dist/ownership.js +92 -0
  602. package/dist/params.js +61 -0
  603. package/dist/plan-summary.js +711 -0
  604. package/dist/point-decision.js +211 -0
  605. package/dist/pr-forge.js +810 -0
  606. package/dist/pr-loop.js +203 -0
  607. package/dist/project-codegen.js +191 -0
  608. package/dist/project-root.js +74 -0
  609. package/dist/project-validation.js +50 -0
  610. package/dist/provenance.js +157 -0
  611. package/dist/pseudo-parameter.js +40 -0
  612. package/dist/reconcile.js +450 -0
  613. package/dist/resource-attributes.js +33 -0
  614. package/dist/runtime-adapter.js +77 -0
  615. package/dist/runtime.js +66 -0
  616. package/dist/secret-materialization.js +153 -0
  617. package/dist/secret-provenance.js +250 -0
  618. package/dist/serializer-walker.js +112 -0
  619. package/dist/serializer.js +1 -0
  620. package/dist/sort.js +45 -0
  621. package/dist/stack-output.js +115 -0
  622. package/dist/telemetry-attribution.js +149 -0
  623. package/dist/terraform/__fixtures__/build-graph.js +63 -0
  624. package/dist/terraform/adopt-state.js +40 -0
  625. package/dist/terraform/aws-resources.js +384 -0
  626. package/dist/terraform/bridge.js +204 -0
  627. package/dist/terraform/carve-provider.js +155 -0
  628. package/dist/terraform/carve.js +138 -0
  629. package/dist/terraform/data-source-shape.js +57 -0
  630. package/dist/terraform/emit-source.js +36 -0
  631. package/dist/terraform/excise.js +123 -0
  632. package/dist/terraform/graduate.js +128 -0
  633. package/dist/terraform/graph.js +435 -0
  634. package/dist/terraform/hcl2json.js +60 -0
  635. package/dist/terraform/manifest.js +149 -0
  636. package/dist/terraform/parse.js +81 -0
  637. package/dist/terraform/providers/aws.js +146 -0
  638. package/dist/terraform/providers/gcp.js +294 -0
  639. package/dist/terraform/providers/index.js +17 -0
  640. package/dist/terraform/providers/kubernetes.js +253 -0
  641. package/dist/terraform/score.js +151 -0
  642. package/dist/terraform/state.js +67 -0
  643. package/dist/terraform/tier-map.js +74 -0
  644. package/dist/terraform/types.js +13 -0
  645. package/dist/terraform/unified-diff.js +132 -0
  646. package/dist/testing.js +295 -0
  647. package/dist/toml-emit.js +153 -0
  648. package/dist/toml-parse.js +355 -0
  649. package/dist/toml-utils.js +60 -0
  650. package/dist/toml.js +428 -0
  651. package/dist/ts-loader.d.ts +46 -0
  652. package/dist/ts-loader.d.ts.map +1 -0
  653. package/dist/ts-loader.js +103 -0
  654. package/dist/types.js +1 -0
  655. package/dist/utils.js +61 -0
  656. package/dist/validation.js +20 -0
  657. package/dist/vendor/js-yaml-load.js +1662 -0
  658. package/dist/workspace/__fixtures__/contract-repo.js +103 -0
  659. package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
  660. package/dist/workspace/__fixtures__/sessions.js +91 -0
  661. package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
  662. package/dist/workspace/agent-cli.js +99 -0
  663. package/dist/workspace/agent.schema.json +390 -0
  664. package/dist/workspace/answers-ledger.js +89 -0
  665. package/dist/workspace/box-cli.js +142 -0
  666. package/dist/workspace/box-factory-write.js +196 -0
  667. package/dist/workspace/box-factory-write.schema.json +342 -0
  668. package/dist/workspace/box-factory.js +88 -0
  669. package/dist/workspace/box-intent.js +126 -0
  670. package/dist/workspace/box-isolation.js +169 -0
  671. package/dist/workspace/box-listing-write.schema.json +204 -0
  672. package/dist/workspace/box-listing.js +298 -0
  673. package/dist/workspace/box-publish.js +352 -0
  674. package/dist/workspace/box-publish.schema.json +498 -0
  675. package/dist/workspace/box-services.js +39 -0
  676. package/dist/workspace/broker-protocol.js +359 -0
  677. package/dist/workspace/broker-protocol.schema.json +228 -0
  678. package/dist/workspace/change-set.schema.json +460 -0
  679. package/dist/workspace/changes-cli.js +56 -0
  680. package/dist/workspace/changes.js +446 -0
  681. package/dist/workspace/changes.schema.json +642 -0
  682. package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
  683. package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
  684. package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
  685. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
  686. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
  687. package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
  688. package/dist/workspace/chant-migrations.js +113 -0
  689. package/dist/workspace/check.schema.json +433 -0
  690. package/dist/workspace/checks/box-isolation.js +62 -0
  691. package/dist/workspace/checks/boxes.js +491 -0
  692. package/dist/workspace/checks/diagrams.js +104 -0
  693. package/dist/workspace/checks/generated.js +419 -0
  694. package/dist/workspace/checks/ledgers.js +212 -0
  695. package/dist/workspace/checks/links.js +191 -0
  696. package/dist/workspace/checks/live.js +100 -0
  697. package/dist/workspace/checks/pipelines.js +188 -0
  698. package/dist/workspace/checks/records.js +169 -0
  699. package/dist/workspace/checks.js +426 -0
  700. package/dist/workspace/ci-green-cli.js +125 -0
  701. package/dist/workspace/ci-green-forge.js +83 -0
  702. package/dist/workspace/ci-green-workflow.js +199 -0
  703. package/dist/workspace/ci-green.js +325 -0
  704. package/dist/workspace/ci-last-green.schema.json +158 -0
  705. package/dist/workspace/compose-graph.js +235 -0
  706. package/dist/workspace/compose-reports.js +146 -0
  707. package/dist/workspace/composites.js +264 -0
  708. package/dist/workspace/composites.schema.json +617 -0
  709. package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
  710. package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
  711. package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
  712. package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
  713. package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
  714. package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
  715. package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
  716. package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
  717. package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
  718. package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
  719. package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
  720. package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
  721. package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
  722. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  723. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  724. package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
  725. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  726. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  727. package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
  728. package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
  729. package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  730. package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  731. package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
  732. package/dist/workspace/conformance/broker.js +736 -0
  733. package/dist/workspace/conformance/index.js +673 -0
  734. package/dist/workspace/conformance/vitest.js +108 -0
  735. package/dist/workspace/conformance/writer.js +1080 -0
  736. package/dist/workspace/decide.js +879 -0
  737. package/dist/workspace/decision-points.schema.json +135 -135
  738. package/dist/workspace/declaration-write-cli.js +74 -0
  739. package/dist/workspace/declaration-write.js +238 -0
  740. package/dist/workspace/declaration.js +938 -0
  741. package/dist/workspace/declaration.schema.json +1413 -1413
  742. package/dist/workspace/declared-kinds.js +106 -0
  743. package/dist/workspace/environments.js +164 -0
  744. package/dist/workspace/evidence.schema.json +279 -0
  745. package/dist/workspace/export-cli.js +185 -0
  746. package/dist/workspace/export.js +499 -0
  747. package/dist/workspace/factory-rules.js +175 -0
  748. package/dist/workspace/generated-files.js +92 -0
  749. package/dist/workspace/glob.js +45 -0
  750. package/dist/workspace/graph-cache.js +352 -0
  751. package/dist/workspace/graph-cli.js +348 -0
  752. package/dist/workspace/graph.schema.json +1338 -0
  753. package/dist/workspace/identity-gate-rule.d.ts +65 -0
  754. package/dist/workspace/identity-gate-rule.d.ts.map +1 -0
  755. package/dist/workspace/identity-gate-rule.js +75 -0
  756. package/dist/workspace/identity.d.ts +4 -2
  757. package/dist/workspace/identity.d.ts.map +1 -1
  758. package/dist/workspace/identity.js +126 -0
  759. package/dist/workspace/import.js +283 -0
  760. package/dist/workspace/init.js +620 -0
  761. package/dist/workspace/intent-cli.js +263 -0
  762. package/dist/workspace/intent-joins.js +201 -0
  763. package/dist/workspace/intent-record.js +352 -0
  764. package/dist/workspace/intent-record.schema.json +864 -0
  765. package/dist/workspace/intent.js +1582 -0
  766. package/dist/workspace/intent.schema.json +2420 -0
  767. package/dist/workspace/json-edit.js +221 -0
  768. package/dist/workspace/jsonc.js +235 -0
  769. package/dist/workspace/kind-readers.js +103 -0
  770. package/dist/workspace/kinds.js +587 -0
  771. package/dist/workspace/lexicon-symbols.js +112 -0
  772. package/dist/workspace/lineage-adopt-cli.js +102 -0
  773. package/dist/workspace/lineage-adopt.js +360 -0
  774. package/dist/workspace/lineage-check.js +282 -0
  775. package/dist/workspace/lineage-cli.js +121 -0
  776. package/dist/workspace/lineage-hash-index.js +284 -0
  777. package/dist/workspace/lineage-init.js +507 -0
  778. package/dist/workspace/lineage-lock.js +387 -0
  779. package/dist/workspace/lineage-merge.js +45 -0
  780. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  781. package/dist/workspace/lineage-migrations.js +329 -0
  782. package/dist/workspace/lineage-provenance.js +36 -0
  783. package/dist/workspace/lineage-update.js +138 -0
  784. package/dist/workspace/lineage-upgrade-cli.js +131 -0
  785. package/dist/workspace/lineage-upgrade.js +889 -0
  786. package/dist/workspace/lineage-vendor.js +171 -0
  787. package/dist/workspace/lineage-version.js +128 -0
  788. package/dist/workspace/lineage-versions.js +275 -0
  789. package/dist/workspace/links.js +330 -0
  790. package/dist/workspace/ls-generated.js +95 -0
  791. package/dist/workspace/ls.js +277 -0
  792. package/dist/workspace/ls.schema.json +333 -0
  793. package/dist/workspace/member-commands.js +508 -0
  794. package/dist/workspace/member-handles.js +216 -0
  795. package/dist/workspace/member-pipeline.js +258 -0
  796. package/dist/workspace/member-run.js +117 -0
  797. package/dist/workspace/member-write.schema.json +193 -0
  798. package/dist/workspace/nested-graph.js +156 -0
  799. package/dist/workspace/nesting.js +38 -0
  800. package/dist/workspace/patch.js +301 -0
  801. package/dist/workspace/patch.schema.json +321 -0
  802. package/dist/workspace/pin-cli.js +55 -0
  803. package/dist/workspace/pin-integrity.js +100 -0
  804. package/dist/workspace/plan-summary.schema.json +155 -0
  805. package/dist/workspace/point-answer.schema.json +129 -129
  806. package/dist/workspace/points-cli.js +291 -0
  807. package/dist/workspace/points-write.schema.json +660 -0
  808. package/dist/workspace/points.js +521 -0
  809. package/dist/workspace/points.schema.json +916 -0
  810. package/dist/workspace/pr-report.schema.json +108 -0
  811. package/dist/workspace/principal-classes.d.ts +3 -14
  812. package/dist/workspace/principal-classes.d.ts.map +1 -1
  813. package/dist/workspace/principal-classes.js +245 -0
  814. package/dist/workspace/reason-codes.js +326 -0
  815. package/dist/workspace/record-assets.js +151 -0
  816. package/dist/workspace/record-decided.js +105 -0
  817. package/dist/workspace/record-sessions.js +96 -0
  818. package/dist/workspace/record-source.js +114 -0
  819. package/dist/workspace/records-amend.schema.json +284 -0
  820. package/dist/workspace/records-checkout.js +76 -0
  821. package/dist/workspace/records-cli.js +707 -0
  822. package/dist/workspace/records-close.js +116 -0
  823. package/dist/workspace/records-close.schema.json +278 -0
  824. package/dist/workspace/records-new.schema.json +202 -0
  825. package/dist/workspace/records-review.schema.json +367 -0
  826. package/dist/workspace/records-since.js +317 -0
  827. package/dist/workspace/records-since.schema.json +218 -0
  828. package/dist/workspace/records-write.js +1229 -0
  829. package/dist/workspace/records.js +1345 -0
  830. package/dist/workspace/records.schema.json +604 -0
  831. package/dist/workspace/reference-kinds/app/package.json +10 -0
  832. package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  833. package/dist/workspace/returns.js +303 -0
  834. package/dist/workspace/root-refusal.js +75 -0
  835. package/dist/workspace/run-statement.schema.json +622 -0
  836. package/dist/workspace/runs-cli.js +584 -0
  837. package/dist/workspace/runs-write.schema.json +994 -0
  838. package/dist/workspace/runs.js +708 -0
  839. package/dist/workspace/runs.schema.json +1257 -0
  840. package/dist/workspace/runtimes.js +76 -0
  841. package/dist/workspace/session-kinds.js +83 -0
  842. package/dist/workspace/signers.schema.json +206 -0
  843. package/dist/workspace/source-block.js +125 -0
  844. package/dist/workspace/squash.js +177 -0
  845. package/dist/workspace/status-gates.js +162 -0
  846. package/dist/workspace/status-stewards.js +330 -0
  847. package/dist/workspace/status.js +514 -0
  848. package/dist/workspace/status.schema.json +998 -0
  849. package/dist/workspace/steward-index.js +191 -0
  850. package/dist/workspace/symbols.js +188 -0
  851. package/dist/workspace/template-manifest.js +227 -0
  852. package/dist/workspace/template-pins.js +115 -0
  853. package/dist/workspace/trailer-joins.js +65 -0
  854. package/dist/workspace/trailers.js +111 -0
  855. package/dist/workspace/tree.js +136 -0
  856. package/dist/workspace/trust/attestor.js +63 -0
  857. package/dist/workspace/trust/dsse.js +108 -0
  858. package/dist/workspace/trust/evidence-cli.js +175 -0
  859. package/dist/workspace/trust/evidence.js +161 -0
  860. package/dist/workspace/trust/gate-seal.js +226 -0
  861. package/dist/workspace/trust/policy.js +190 -0
  862. package/dist/workspace/trust/provenance.js +180 -0
  863. package/dist/workspace/trust/rotation.js +298 -0
  864. package/dist/workspace/trust/run-commits.js +101 -0
  865. package/dist/workspace/trust/run-statement.js +182 -0
  866. package/dist/workspace/trust/seal.js +272 -0
  867. package/dist/workspace/trust/signers-cli.js +152 -0
  868. package/dist/workspace/trust/ssh-commit.js +178 -0
  869. package/dist/workspace/trust/test-repo.js +118 -0
  870. package/dist/workspace/trust/trust-files.js +193 -0
  871. package/dist/workspace/trust/verify-cli.js +63 -0
  872. package/dist/workspace/trust/verify.js +192 -0
  873. package/dist/workspace/which-chant.js +141 -0
  874. package/dist/workspace/wip-cli.js +95 -0
  875. package/dist/workspace/wip-write.schema.json +504 -0
  876. package/dist/workspace/wip.js +631 -0
  877. package/dist/workspace/wip.schema.json +334 -0
  878. package/dist/workspace/work-cli.js +448 -0
  879. package/dist/workspace/work-evidence.js +122 -0
  880. package/dist/workspace/work-evidence.schema.json +222 -0
  881. package/dist/workspace/work-history.schema.json +421 -0
  882. package/dist/workspace/work-lease.schema.json +246 -0
  883. package/dist/workspace/work-size.js +77 -0
  884. package/dist/workspace/work.js +283 -0
  885. package/dist/workspace/workspace-kinds.schema.json +259 -259
  886. package/dist/workspace/workspace-principals.schema.json +53 -53
  887. package/dist/workspace/write-lock-cli.js +105 -0
  888. package/dist/workspace/write-lock.js +424 -0
  889. package/dist/workspace/write-lock.schema.json +172 -0
  890. package/dist/workspace/write-scope.js +484 -0
  891. package/dist/yaml.js +459 -0
  892. package/package.json +2 -2
  893. package/src/cli/commands/check-lexicon-plugin.ts +2 -0
  894. package/src/cli/commands/lint.ts +36 -6
  895. package/src/cli/commands/migrate.ts +2 -0
  896. package/src/cli/compiled-cli.e2e.test.ts +165 -0
  897. package/src/cli/main.ts +121 -27
  898. package/src/cli/mcp/workspace-tools.ts +1 -1
  899. package/src/codegen/pinned-upgrade.ts +2 -0
  900. package/src/components/discover.ts +2 -0
  901. package/src/components/sandbox/driver.ts +3 -1
  902. package/src/config-import.ts +3 -0
  903. package/src/discovery/fold-import.ts +23 -14
  904. package/src/discovery/import.ts +2 -0
  905. package/src/discovery/sandbox/driver.ts +3 -1
  906. package/src/gate-decision-bundle.test.ts +3 -2
  907. package/src/gate-decision-identity.test.ts +176 -0
  908. package/src/gate-decision.ts +100 -22
  909. package/src/lexicon-module.ts +3 -0
  910. package/src/lifecycle/gate-ledger.ts +8 -0
  911. package/src/lint/config.ts +1 -1
  912. package/src/lint/discover.ts +28 -8
  913. package/src/lint/policy-import.ts +4 -1
  914. package/src/lint/rule-loader.ts +2 -0
  915. package/src/op/discover.ts +3 -0
  916. package/src/op/op-waves-point.test.ts +1 -0
  917. package/src/op/op-waves-run.ts +5 -4
  918. package/src/op/op-waves.test.ts +14 -0
  919. package/src/ts-loader.test.ts +23 -0
  920. package/src/ts-loader.ts +122 -0
  921. package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
  922. package/src/workspace/declaration.ts +1 -1
  923. package/src/workspace/identity-gate-rule.ts +109 -0
  924. package/src/workspace/identity.ts +8 -18
  925. package/src/workspace/kinds.ts +1 -1
  926. package/src/workspace/lineage-migrations.ts +2 -0
  927. package/src/workspace/points.ts +1 -1
  928. package/src/workspace/principal-classes.ts +5 -30
@@ -0,0 +1,582 @@
1
+ /**
2
+ * `nativeApply` — push declared source to the cloud through the target's own
3
+ * mechanism. Authority stays with the platform; chant hosts no state file.
4
+ *
5
+ * ## Where the shell went (chant #1075, #1448, #1449)
6
+ *
7
+ * This used to build a shell command for every target — `kubectl apply -f`,
8
+ * `az deployment group create`, `aws cloudformation deploy`. Two things were
9
+ * wrong with that. The shell commands carried product knowledge that belongs to
10
+ * each product's lexicon, against the one-lexicon-per-product rule that already
11
+ * moved `kubectlApply`, `k3dUp`/`k3dDown` and `waitForArgoSync` out (chant
12
+ * #809). And each CLI's semantics diverged from what the docblocks promised —
13
+ * `kubectl apply`'s client-side merge gave the diff engine nothing to key on
14
+ * (#1075), and ARM Complete mode deleted resources chant never applied (#1448).
15
+ *
16
+ * So each branch moved to its product's lexicon: `kubectl`/`kustomize` are a
17
+ * server-side apply over the k8s lexicon's typed client (#1075, #1548), `arm`
18
+ * is the azure lexicon's per-resource `azApply` (#1448), `cloudformation`
19
+ * is the aws lexicon's `awsApply` — the CloudFormation Query API directly, no
20
+ * CLI in the path (#1449) — and `gcp`/`fly` are the gcp lexicon's
21
+ * per-resource `gcpApply` and the fly lexicon's `flyApply`, which never had a
22
+ * CLI in the path to begin with: gcp maps each CNRM kind to its REST API
23
+ * itself, and fly speaks the Machines API (flaps) directly, no flyctl.
24
+ * `grafana` joined later (#3011): the grafana lexicon's `grafanaApply`, which
25
+ * writes folders, library panels and dashboards over Grafana's HTTP API.
26
+ * `clickhouse` joined after it (#3208): the sql lexicon's `clickhouseApply`,
27
+ * which sends a ClickHouse server the CREATE and ALTER statements a build's
28
+ * classified changes need, over its HTTP interface. `postgres` joined after
29
+ * that (#3280): the sql lexicon's `postgresApply`, which sends a Postgres
30
+ * server the statements a build's classified changes need, grouped into
31
+ * transactions, with `CONCURRENTLY` statements outside them. `ruler` joined
32
+ * last (#3372): the prometheus lexicon's `rulerApply`, which posts rule groups
33
+ * to a Mimir, Cortex or Loki ruler and uploads a Mimir or Cortex Alertmanager
34
+ * config, inside the namespaces the project declares.
35
+ * **The dispatcher stayed here**, because "which
36
+ * mechanism applies this target" is not any one product's knowledge — and
37
+ * because the activity keeps its name, its arguments and its place in
38
+ * `ApplyOp`, so no existing Op changes shape.
39
+ *
40
+ * The lexicons are reached by dynamic import at call time, never by a static
41
+ * one: this package must not depend on them. A project applying a target
42
+ * already lists that lexicon in its config, so the module is there; when it is
43
+ * not, the failure names the package to install.
44
+ */
45
+ import { exec } from "node:child_process";
46
+ import { promisify } from "node:util";
47
+ import { normalizeApply } from "../../apply.js";
48
+ import { importLexiconPackage } from "../../lexicon-module.js";
49
+ const execAsync = promisify(exec);
50
+ /**
51
+ * Render a kustomization directory to parsed documents (#1548): `kustomize
52
+ * build`, falling back to kubectl's vendored kustomize when the standalone
53
+ * binary is absent. The 64MiB buffer matches the k8s/helm lexicons' bound —
54
+ * a big overlay renders megabytes. YAML parsing is js-yaml's multi-doc
55
+ * loader, the same one the k8s applier uses on files.
56
+ */
57
+ async function renderKustomization(dir) {
58
+ const quoted = `'${dir.replace(/'/g, "'\\''")}'`;
59
+ const run = (cmd) => execAsync(cmd, { maxBuffer: 64 * 1024 * 1024 });
60
+ let stdout;
61
+ try {
62
+ ({ stdout } = await run(`kustomize build ${quoted}`));
63
+ }
64
+ catch (err) {
65
+ const message = err instanceof Error ? err.message : String(err);
66
+ if (!/ENOENT|not found|command not found|127/.test(message))
67
+ throw err;
68
+ ({ stdout } = await run(`kubectl kustomize ${quoted}`));
69
+ }
70
+ const { loadAll } = await import("js-yaml");
71
+ const documents = [];
72
+ for (const doc of loadAll(stdout)) {
73
+ if (doc && typeof doc === "object" && !Array.isArray(doc))
74
+ documents.push(doc);
75
+ }
76
+ return documents;
77
+ }
78
+ /**
79
+ * Load the k8s lexicon's apply. A variable specifier, so `tsc` does not
80
+ * statically resolve a package this one deliberately does not depend on — the
81
+ * same mechanism core's activity registry uses to load a lexicon's activities.
82
+ */
83
+ async function loadK8sApplier() {
84
+ const spec = "@intentius/chant-lexicon-k8s/op/activities";
85
+ let mod;
86
+ try {
87
+ mod = (await importLexiconPackage(spec));
88
+ }
89
+ catch (err) {
90
+ throw new Error(`apply target "kubectl" needs @intentius/chant-lexicon-k8s, which could not be loaded ` +
91
+ `(${err instanceof Error ? err.message : String(err)}). Kubernetes applies moved out of the ` +
92
+ `op lexicon in chant #1075; install the k8s lexicon and list it in chant.config.ts.`);
93
+ }
94
+ if (typeof mod.applyManifest !== "function") {
95
+ throw new Error("the installed @intentius/chant-lexicon-k8s exports no applyManifest — it predates chant #1075");
96
+ }
97
+ return mod.applyManifest;
98
+ }
99
+ /**
100
+ * Load the azure lexicon's `azApply` (#1448). Same variable-specifier trick as
101
+ * {@link loadK8sApplier}, for the same reason.
102
+ */
103
+ async function loadAzureApplier() {
104
+ const spec = "@intentius/chant-lexicon-azure/op/activities";
105
+ let mod;
106
+ try {
107
+ mod = (await importLexiconPackage(spec));
108
+ }
109
+ catch (err) {
110
+ throw new Error(`apply target "arm" needs @intentius/chant-lexicon-azure, which could not be loaded ` +
111
+ `(${err instanceof Error ? err.message : String(err)}). ARM applies go through the azure ` +
112
+ `lexicon's per-resource applier since chant #1448; install the azure lexicon and list it ` +
113
+ `in chant.config.ts.`);
114
+ }
115
+ const { azApply, toApplyResult } = mod;
116
+ if (typeof azApply !== "function") {
117
+ throw new Error("the installed @intentius/chant-lexicon-azure exports no azApply — it predates chant #707");
118
+ }
119
+ if (typeof toApplyResult !== "function") {
120
+ throw new Error("the installed @intentius/chant-lexicon-azure exports no toApplyResult — it predates chant #1449");
121
+ }
122
+ return async (args, signal) => toApplyResult(await azApply(args, signal));
123
+ }
124
+ /**
125
+ * Load the gcp lexicon's `gcpApply` (#1449). Same variable-specifier trick as
126
+ * {@link loadK8sApplier}, for the same reason.
127
+ */
128
+ async function loadGcpApplier() {
129
+ const spec = "@intentius/chant-lexicon-gcp/op/activities";
130
+ let mod;
131
+ try {
132
+ mod = (await importLexiconPackage(spec));
133
+ }
134
+ catch (err) {
135
+ throw new Error(`apply target "gcp" needs @intentius/chant-lexicon-gcp, which could not be loaded ` +
136
+ `(${err instanceof Error ? err.message : String(err)}). GCP applies go through the gcp ` +
137
+ `lexicon's native applier since chant #1449; install the gcp lexicon and list it ` +
138
+ `in chant.config.ts.`);
139
+ }
140
+ const { gcpApply, toApplyResult } = mod;
141
+ if (typeof gcpApply !== "function") {
142
+ throw new Error("the installed @intentius/chant-lexicon-gcp exports no gcpApply — it predates chant #706");
143
+ }
144
+ if (typeof toApplyResult !== "function") {
145
+ throw new Error("the installed @intentius/chant-lexicon-gcp exports no toApplyResult — it predates chant #1449");
146
+ }
147
+ return async (args, signal) => toApplyResult(await gcpApply(args, signal));
148
+ }
149
+ /**
150
+ * Load the fly lexicon's `flyApply` (#1449). Same variable-specifier trick as
151
+ * {@link loadK8sApplier}, for the same reason.
152
+ */
153
+ async function loadFlyApplier() {
154
+ const spec = "@intentius/chant-lexicon-fly/op/activities";
155
+ let mod;
156
+ try {
157
+ mod = (await importLexiconPackage(spec));
158
+ }
159
+ catch (err) {
160
+ throw new Error(`apply target "fly" needs @intentius/chant-lexicon-fly, which could not be loaded ` +
161
+ `(${err instanceof Error ? err.message : String(err)}). Fly applies go through the fly ` +
162
+ `lexicon's native flaps applier since chant #1449; install the fly lexicon and list it ` +
163
+ `in chant.config.ts.`);
164
+ }
165
+ const { flyApply, toApplyResult } = mod;
166
+ if (typeof flyApply !== "function") {
167
+ throw new Error("the installed @intentius/chant-lexicon-fly exports no flyApply — it predates chant #739");
168
+ }
169
+ if (typeof toApplyResult !== "function") {
170
+ throw new Error("the installed @intentius/chant-lexicon-fly exports no toApplyResult — it predates chant #1449");
171
+ }
172
+ return async (args, signal) => toApplyResult(await flyApply(args, signal));
173
+ }
174
+ /**
175
+ * Load the grafana lexicon's `grafanaApply` (#3011). Same variable-specifier
176
+ * trick as {@link loadK8sApplier}, for the same reason. The activities subpath,
177
+ * not the package root or `op/builders`: those hold the typed step builder,
178
+ * while the activity itself (and its `toApplyResult`) lives here.
179
+ */
180
+ async function loadGrafanaApplier() {
181
+ const spec = "@intentius/chant-lexicon-grafana/op/activities";
182
+ let mod;
183
+ try {
184
+ mod = (await importLexiconPackage(spec));
185
+ }
186
+ catch (err) {
187
+ throw new Error(`apply target "grafana" needs @intentius/chant-lexicon-grafana, which could not be loaded ` +
188
+ `(${err instanceof Error ? err.message : String(err)}). Grafana applies go through the grafana ` +
189
+ `lexicon's API applier (chant #2948); install the grafana lexicon and list it in chant.config.ts.`);
190
+ }
191
+ const { grafanaApply, toApplyResult } = mod;
192
+ if (typeof grafanaApply !== "function") {
193
+ throw new Error("the installed @intentius/chant-lexicon-grafana exports no grafanaApply — it predates chant #2948");
194
+ }
195
+ if (typeof toApplyResult !== "function") {
196
+ throw new Error("the installed @intentius/chant-lexicon-grafana exports no toApplyResult — it predates chant #2948");
197
+ }
198
+ return async (args, signal) => toApplyResult(await grafanaApply(args, signal));
199
+ }
200
+ /**
201
+ * Load the sql lexicon's `clickhouseApply` (#3208). Same variable-specifier
202
+ * trick as {@link loadK8sApplier}, for the same reason.
203
+ */
204
+ async function loadClickHouseApplier() {
205
+ const spec = "@intentius/chant-lexicon-sql/op/activities";
206
+ let mod;
207
+ try {
208
+ mod = (await importLexiconPackage(spec));
209
+ }
210
+ catch (err) {
211
+ throw new Error(`apply target "clickhouse" needs @intentius/chant-lexicon-sql, which could not be loaded ` +
212
+ `(${err instanceof Error ? err.message : String(err)}). ClickHouse applies go through the sql ` +
213
+ `lexicon's applier (chant #3208); install the sql lexicon and list it in chant.config.ts.`);
214
+ }
215
+ const { clickhouseApply, toApplyResult } = mod;
216
+ if (typeof clickhouseApply !== "function") {
217
+ throw new Error("the installed @intentius/chant-lexicon-sql exports no clickhouseApply — it predates chant #3208");
218
+ }
219
+ if (typeof toApplyResult !== "function") {
220
+ throw new Error("the installed @intentius/chant-lexicon-sql exports no toApplyResult — it predates chant #3208");
221
+ }
222
+ return async (args, signal) => toApplyResult(await clickhouseApply(args, signal));
223
+ }
224
+ /**
225
+ * Load the sql lexicon's `postgresApply` (#3280). Same variable-specifier
226
+ * trick as {@link loadK8sApplier}, for the same reason.
227
+ */
228
+ async function loadPostgresApplier() {
229
+ const spec = "@intentius/chant-lexicon-sql/op/activities";
230
+ let mod;
231
+ try {
232
+ mod = (await importLexiconPackage(spec));
233
+ }
234
+ catch (err) {
235
+ throw new Error(`apply target "postgres" needs @intentius/chant-lexicon-sql, which could not be loaded ` +
236
+ `(${err instanceof Error ? err.message : String(err)}). Postgres applies go through the sql ` +
237
+ `lexicon's applier (chant #3280); install the sql lexicon and list it in chant.config.ts.`);
238
+ }
239
+ const { postgresApply, toApplyResult } = mod;
240
+ if (typeof postgresApply !== "function") {
241
+ throw new Error("the installed @intentius/chant-lexicon-sql exports no postgresApply — it predates chant #3280");
242
+ }
243
+ if (typeof toApplyResult !== "function") {
244
+ throw new Error("the installed @intentius/chant-lexicon-sql exports no toApplyResult — it predates chant #3208");
245
+ }
246
+ return async (args, signal) => toApplyResult(await postgresApply(args, signal));
247
+ }
248
+ /**
249
+ * Load the prometheus lexicon's `rulerApply` (#3372). Same variable-specifier
250
+ * trick as {@link loadK8sApplier}, for the same reason.
251
+ */
252
+ async function loadRulerApplier() {
253
+ const spec = "@intentius/chant-lexicon-prometheus/api/apply";
254
+ let mod;
255
+ try {
256
+ mod = (await importLexiconPackage(spec));
257
+ }
258
+ catch (err) {
259
+ throw new Error(`apply target "ruler" needs @intentius/chant-lexicon-prometheus, which could not be loaded ` +
260
+ `(${err instanceof Error ? err.message : String(err)}). Ruler applies go through the prometheus ` +
261
+ `lexicon's applier (chant #3372); install the prometheus lexicon and list it in chant.config.ts.`);
262
+ }
263
+ const { rulerApply, toApplyResult } = mod;
264
+ if (typeof rulerApply !== "function" || typeof toApplyResult !== "function") {
265
+ throw new Error("the installed @intentius/chant-lexicon-prometheus exports no rulerApply — it predates chant #3372");
266
+ }
267
+ return async (args, signal) => toApplyResult(await rulerApply(args, signal));
268
+ }
269
+ /** Load the prometheus lexicon's `rulerRollback` (#3372), the compensation twin of {@link loadRulerApplier}. */
270
+ async function loadRulerRollback() {
271
+ const spec = "@intentius/chant-lexicon-prometheus/api/apply";
272
+ let mod;
273
+ try {
274
+ mod = (await importLexiconPackage(spec));
275
+ }
276
+ catch (err) {
277
+ throw new Error(`rollback for target "ruler" needs @intentius/chant-lexicon-prometheus, which could not be loaded ` +
278
+ `(${err instanceof Error ? err.message : String(err)}). Install the prometheus lexicon and list it in chant.config.ts.`);
279
+ }
280
+ if (typeof mod.rulerRollback !== "function") {
281
+ throw new Error("the installed @intentius/chant-lexicon-prometheus exports no rulerRollback — it predates chant #3372");
282
+ }
283
+ return mod.rulerRollback;
284
+ }
285
+ /**
286
+ * Load the aws lexicon's `awsApply` (#1449). Same variable-specifier trick as
287
+ * {@link loadK8sApplier}, for the same reason.
288
+ */
289
+ async function loadAwsApplier() {
290
+ const spec = "@intentius/chant-lexicon-aws/op/activities";
291
+ let mod;
292
+ try {
293
+ mod = (await importLexiconPackage(spec));
294
+ }
295
+ catch (err) {
296
+ throw new Error(`apply target "cloudformation" needs @intentius/chant-lexicon-aws, which could not be loaded ` +
297
+ `(${err instanceof Error ? err.message : String(err)}). CloudFormation applies go through the ` +
298
+ `aws lexicon's native applier since chant #1449; install the aws lexicon and list it ` +
299
+ `in chant.config.ts.`);
300
+ }
301
+ if (typeof mod.awsApply !== "function") {
302
+ throw new Error("the installed @intentius/chant-lexicon-aws exports no awsApply — it predates chant #1446");
303
+ }
304
+ return mod.awsApply;
305
+ }
306
+ /**
307
+ * Load the aws lexicon's `rollbackStack` (#1449) — the compensation twin of
308
+ * {@link loadAwsApplier}.
309
+ */
310
+ async function loadAwsRollback() {
311
+ const spec = "@intentius/chant-lexicon-aws/op/activities";
312
+ let mod;
313
+ try {
314
+ mod = (await importLexiconPackage(spec));
315
+ }
316
+ catch (err) {
317
+ throw new Error(`rollback for target "cloudformation" needs @intentius/chant-lexicon-aws, which could not be ` +
318
+ `loaded (${err instanceof Error ? err.message : String(err)}). CloudFormation rollback goes ` +
319
+ `through the aws lexicon's rollbackStack since chant #1449; install the aws lexicon and ` +
320
+ `list it in chant.config.ts.`);
321
+ }
322
+ if (typeof mod.rollbackStack !== "function") {
323
+ throw new Error("the installed @intentius/chant-lexicon-aws exports no rollbackStack — it predates chant #1449");
324
+ }
325
+ return mod.rollbackStack;
326
+ }
327
+ /**
328
+ * Sensible default build output per target. kubectl takes a directory (all
329
+ * manifests), so `dist`; kustomize's "output" is the kustomization DIRECTORY
330
+ * the render reads. The file targets take the file their lexicon's build
331
+ * conventionally emits: `template.json` for CloudFormation/ARM, `dist/gcp.yaml`
332
+ * (the CNRM manifest) for gcp, `dist/fly.json` (the serialized plan) for fly,
333
+ * `dist/grafana.json` (the index the grafana serializer writes, with the
334
+ * dashboard files beside it) for grafana, `dist/schema.json` (the sql
335
+ * lexicon's build output) for clickhouse and postgres, `dist/rules.yml` (the
336
+ * rule file, with `alertmanager.yml` beside it) for ruler. Pure — exported for
337
+ * testing.
338
+ */
339
+ export function defaultOutput(target) {
340
+ switch (target) {
341
+ case "kubectl":
342
+ case "kustomize":
343
+ return "dist";
344
+ case "gcp":
345
+ return "dist/gcp.yaml";
346
+ case "fly":
347
+ return "dist/fly.json";
348
+ case "ruler":
349
+ return "dist/rules.yml";
350
+ case "grafana":
351
+ return "dist/grafana.json";
352
+ case "clickhouse":
353
+ case "postgres":
354
+ return "dist/schema.json";
355
+ default:
356
+ return "template.json";
357
+ }
358
+ }
359
+ /**
360
+ * Collapse a #1446 apply envelope onto the one result shape this activity
361
+ * returns, logging the counts (and warning on skips) as it goes. The envelope
362
+ * is normalized through core's `normalizeApply`, so the counts are the lengths
363
+ * of `NormalizedApply`'s three arrays — nothing re-derived, nothing invented.
364
+ */
365
+ function collapseEnvelope(envelope, label) {
366
+ const n = normalizeApply(envelope);
367
+ console.log(`[${label}] applied ${n.applied.length} resource(s)` +
368
+ (n.pruned.length > 0 ? `; pruned ${n.pruned.length}` : ""));
369
+ // #1447: a resource the applier made no call for is reported, not dropped —
370
+ // otherwise a partial apply reads as a full one. The per-resource reasons
371
+ // ride the envelope; the count is what a later step reads.
372
+ if (n.notAttempted.length > 0) {
373
+ console.warn(`[${label}] NOT attempted: ${n.notAttempted.length} resource(s)`);
374
+ for (const skip of n.notAttempted) {
375
+ console.warn(`[${label}] ${skip.kind}/${skip.name}: ${skip.reason}${skip.detail ? ` (${skip.detail})` : ""}`);
376
+ }
377
+ }
378
+ return {
379
+ applied: n.applied.length,
380
+ pruned: n.pruned.length,
381
+ notAttempted: n.notAttempted.length,
382
+ };
383
+ }
384
+ /**
385
+ * Apply declared source to the cloud via the target's native mechanism.
386
+ * Deletes (when enabled) ride that mechanism's own delete path — marker-scoped
387
+ * on `kubectl`, tag-scoped on `arm`, label-scoped on `gcp`, marker- and
388
+ * app-scoped on `fly`, label-scoped on `grafana`, comment-marker-scoped on
389
+ * `clickhouse` and `postgres`, and stack-scoped on
390
+ * `cloudformation`, where the deploy
391
+ * itself removes resources dropped from the template and `deleteMode` changes
392
+ * nothing: a resource CFN did not create is not in the stack. See
393
+ * {@link DeleteMode}.
394
+ *
395
+ * The appliers are injectable so this dispatcher can be tested without the
396
+ * product lexicons present; production resolves them through
397
+ * {@link loadK8sApplier} / {@link loadAzureApplier} / {@link loadAwsApplier} /
398
+ * {@link loadGcpApplier} / {@link loadFlyApplier} / {@link loadGrafanaApplier}.
399
+ */
400
+ export async function nativeApply(args, signal, applier, azureApplier, renderer = renderKustomization, awsApplier, gcpApplier, flyApplier, grafanaApplier, clickhouseApplier, postgresApplier, rulerApplier) {
401
+ const output = args.output ?? defaultOutput(args.target);
402
+ const deleteMode = args.deleteMode ?? "never";
403
+ if (args.target === "kubectl" || args.target === "kustomize") {
404
+ const apply = applier ?? (await loadK8sApplier());
405
+ // kustomize (#1548): `output` is the kustomization DIRECTORY; render it
406
+ // and hand the documents to the SAME k8s applier inline — stamping, the
407
+ // marker-scoped prune, and the conflict semantics are identical.
408
+ const kustomized = args.target === "kustomize"
409
+ ? { documents: await renderer(output), manifest: `kustomize:${output}` }
410
+ : { manifest: output };
411
+ const result = await apply({
412
+ ...kustomized,
413
+ environment: args.env,
414
+ deleteMode,
415
+ ...(args.forceConflicts !== undefined ? { force: args.forceConflicts } : {}),
416
+ }, signal);
417
+ // The field manager is the operator's detail and stays on the log; the
418
+ // result is the count projection like every other target's. The k8s
419
+ // applier's contract has no skip path — a document it cannot classify
420
+ // throws — so NOT-ATTEMPTED is structurally zero here.
421
+ console.log(`applied ${result.applied.length} object(s) as field manager "${result.fieldManager}"` +
422
+ (result.pruned.length > 0 ? `; pruned ${result.pruned.length}` : ""));
423
+ return {
424
+ applied: result.applied.length,
425
+ pruned: result.pruned.length,
426
+ notAttempted: 0,
427
+ };
428
+ }
429
+ if (args.target === "arm") {
430
+ const apply = azureApplier ?? (await loadAzureApplier());
431
+ const envelope = await apply({
432
+ templatePath: output,
433
+ resourceGroup: args.env,
434
+ // The same variable azure's read path honours, so an ARM apply lands
435
+ // wherever `--live` is already looking (floci-az, or real Azure when
436
+ // unset).
437
+ ...(process.env.AZURE_ENDPOINT_URL ? { endpoint: process.env.AZURE_ENDPOINT_URL } : {}),
438
+ prune: deleteMode !== "never",
439
+ }, signal);
440
+ return collapseEnvelope(envelope, args.env);
441
+ }
442
+ if (args.target === "gcp") {
443
+ // gcp (#1449): the gcp lexicon's per-resource applier. Only the manifest
444
+ // path and the prune switch cross this seam — endpoint (`GCP_ENDPOINT_URL`)
445
+ // and project (`GOOGLE_CLOUD_PROJECT` / CNRM annotation) are gcpApply's own
446
+ // env resolution, and `env` is a log label here: GCP has no stack or
447
+ // resource-group equivalent for it to name.
448
+ const apply = gcpApplier ?? (await loadGcpApplier());
449
+ const envelope = await apply({ manifestPath: output, prune: deleteMode !== "never" }, signal);
450
+ // #1447's skips and the not-prunable kinds both ride the envelope as
451
+ // NOT-ATTEMPTED entries — one bucket, per-entry reasons, one count out.
452
+ return collapseEnvelope(envelope, args.env);
453
+ }
454
+ if (args.target === "fly") {
455
+ // fly (#1449): the fly lexicon's flaps applier. Only the plan path and the
456
+ // prune switch cross this seam — the endpoint (`FLY_FLAPS_BASE_URL`,
457
+ // mudflaps locally) and token (`FLY_API_TOKEN`) are flyApply's own env
458
+ // resolution, and `env` is a log label here: the app names live in the
459
+ // plan itself.
460
+ const apply = flyApplier ?? (await loadFlyApplier());
461
+ const envelope = await apply({ planPath: output, prune: deleteMode !== "never" }, signal);
462
+ // The six applied classes and five pruned classes are already flattened
463
+ // into the envelope by fly's own toApplyResult; here they are just counts.
464
+ return collapseEnvelope(envelope, args.env);
465
+ }
466
+ if (args.target === "grafana") {
467
+ // grafana (#3011): the grafana lexicon's API applier. Unlike gcp and fly,
468
+ // env is not just a label here: it selects `grafana.profiles.<env>`, the
469
+ // Grafana observe and export already read. The ownership marker comes from
470
+ // the project's chant.config.ts inside grafanaApply.
471
+ const apply = grafanaApplier ?? (await loadGrafanaApplier());
472
+ const envelope = await apply({ indexPath: output, environment: args.env, prune: deleteMode !== "never" }, signal);
473
+ // No binding or a refused token rides the envelope as NOT-ATTEMPTED for
474
+ // every resource, as do library panels and anything else prune could
475
+ // not consider.
476
+ return collapseEnvelope(envelope, args.env);
477
+ }
478
+ if (args.target === "clickhouse") {
479
+ // clickhouse (#3208): the sql lexicon's applier. env selects
480
+ // `sql.profiles.<env>`, the server observe and import read; the marker
481
+ // comes from the project's chant.config.ts inside clickhouseApply.
482
+ const apply = clickhouseApplier ?? (await loadClickHouseApplier());
483
+ const envelope = await apply({ buildPath: output, environment: args.env, prune: deleteMode !== "never" }, signal);
484
+ // A refused rebuild and a column drop an additive apply withholds ride the
485
+ // envelope as NOT-ATTEMPTED, so an Op can gate on them.
486
+ return collapseEnvelope(envelope, args.env);
487
+ }
488
+ if (args.target === "postgres") {
489
+ // postgres (#3280): the sql lexicon's applier. env selects
490
+ // `sql.profiles.<env>`; the marker and the lock and statement timeouts
491
+ // come from the project's chant.config.ts inside postgresApply.
492
+ const apply = postgresApplier ?? (await loadPostgresApplier());
493
+ const envelope = await apply({ buildPath: output, environment: args.env, prune: deleteMode !== "never" }, signal);
494
+ // A refused expand-and-contract change, a column drop an additive apply
495
+ // withholds, and the objects of a rolled-back transaction ride the
496
+ // envelope as NOT-ATTEMPTED, so an Op can gate on them.
497
+ return collapseEnvelope(envelope, args.env);
498
+ }
499
+ if (args.target === "ruler") {
500
+ // ruler (#3372): the prometheus lexicon's applier. env selects
501
+ // `prometheus.profiles.<env>`, whose ruler names the tenant and the
502
+ // namespaces the project owns. A delete stays inside those namespaces.
503
+ const apply = rulerApplier ?? (await loadRulerApplier());
504
+ const envelope = await apply({ buildPath: output, environment: args.env, prune: deleteMode !== "never" }, signal);
505
+ // A group with no declared namespace, a plain Prometheus or Alertmanager
506
+ // with no upload API, and a refused write ride the envelope as
507
+ // NOT-ATTEMPTED, so an Op can gate on them.
508
+ return collapseEnvelope(envelope, args.env);
509
+ }
510
+ // cloudformation (#1449): the aws lexicon's native applier. env is the stack
511
+ // name and output the template path; endpoint resolution (#1694) and
512
+ // capability derivation (#980) are awsApply's own, so nothing else is passed.
513
+ const apply = awsApplier ?? (await loadAwsApplier());
514
+ const result = await apply({ templatePath: output, stackName: args.env }, signal);
515
+ // The stack, its settled status and the action are the operator's detail and
516
+ // stay on the log. The result is the same count projection as every other
517
+ // target's, with the stack as the unit: one settled deploy, one applied.
518
+ console.log(`${result.action}: stack ${result.stackName} (${result.status})`);
519
+ return { applied: 1, pruned: 0, notAttempted: 0 };
520
+ }
521
+ /**
522
+ * Whether a target has a mapped native rollback for {@link compensateApply} to
523
+ * run without an explicit `compensate.command`. `cloudformation` is the only
524
+ * one today — the aws lexicon's `rollbackStack`. This is the totality
525
+ * predicate `ApplyOp` checks at build time (#1449): a target outside it with
526
+ * no command has nothing a compensation could run, so the op refuses to build
527
+ * with compensation on rather than warn at rollback time.
528
+ */
529
+ export function hasNativeRollback(target) {
530
+ return target === "cloudformation" || target === "ruler";
531
+ }
532
+ /**
533
+ * Compensation step (saga rollback) for a partial apply failure. Runs the
534
+ * explicit `command` if given; otherwise `cloudformation` rolls back natively
535
+ * through the aws lexicon's `rollbackStack` (#1449 — CloudFormation
536
+ * `RollbackStack` over the Query API, no CLI in the path).
537
+ *
538
+ * Compensation is total for built ops: `ApplyOp` refuses at build time to wire
539
+ * this activity for a target with neither a native rollback
540
+ * ({@link hasNativeRollback}) nor an explicit `command`, so the no-rollback
541
+ * branch below is unreachable from an op it built. It stays as a throw, not a
542
+ * warn — a hand-assembled op that reaches it must fail loudly, because partial
543
+ * state should never look reverted when it isn't.
544
+ *
545
+ * `rollback` is injectable for tests; production resolves it through
546
+ * {@link loadAwsRollback}.
547
+ */
548
+ export async function compensateApply(args, signal, rollback, rulerRollback) {
549
+ if (args.command) {
550
+ const { stdout, stderr } = await execAsync(args.command, { signal });
551
+ if (stdout)
552
+ console.log(stdout);
553
+ if (stderr)
554
+ console.error(stderr);
555
+ return { command: args.command };
556
+ }
557
+ if (args.target === "cloudformation") {
558
+ const roll = rollback ?? (await loadAwsRollback());
559
+ const result = await roll({ stackName: args.env }, signal);
560
+ return {
561
+ stackName: result.stackName,
562
+ rolledBack: result.rolledBack,
563
+ ...(result.status !== undefined ? { status: result.status } : {}),
564
+ };
565
+ }
566
+ if (args.target === "ruler") {
567
+ // ruler (#3372): re-apply the previous group set the last apply saved.
568
+ const roll = rulerRollback ?? (await loadRulerRollback());
569
+ const result = await roll({ buildPath: args.output ?? defaultOutput("ruler"), environment: args.env }, signal);
570
+ console.log(result.hadSnapshot
571
+ ? `[${args.env}] ruler rollback: restored ${result.restored} group(s), removed ${result.removed}` +
572
+ (result.alertmanagerRestored ? ", restored the Alertmanager config" : "")
573
+ : `[${args.env}] ruler rollback: no apply left a snapshot, nothing to restore`);
574
+ return { restored: result.restored, removed: result.removed };
575
+ }
576
+ // Defensive: unreachable from an ApplyOp, which refuses this combination at
577
+ // build time (#1449). Reaching it means the op was assembled without that
578
+ // check, and the honest outcome is a failure that says the state stands.
579
+ throw new Error(`no automatic rollback for target "${args.target}" — the partial apply to ${args.env} was NOT ` +
580
+ `reverted and cannot be. ApplyOp refuses compensate for this target at build time; either ` +
581
+ `supply compensate.command or use a target with a mapped rollback (cloudformation, ruler).`);
582
+ }
@@ -0,0 +1,18 @@
1
+ import { exec } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ const execAsync = promisify(exec);
4
+ /**
5
+ * Run an npm build script (`build` by default) in the given project directory.
6
+ * Uses fastIdempotent profile — 5m timeout, 3 retries.
7
+ */
8
+ export async function chantBuild(args, signal) {
9
+ const { stdout, stderr } = await execAsync(`npm run ${args.script ?? "build"}`, {
10
+ cwd: args.path,
11
+ env: { ...process.env, ...args.env },
12
+ signal,
13
+ });
14
+ if (stdout)
15
+ console.log(stdout);
16
+ if (stderr)
17
+ console.error(stderr);
18
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * changeCoverage — the forward coverage check (#2773) as an Op activity, for
3
+ * an Op that changes the checkout (#2748) to run on its own diff.
4
+ *
5
+ * Such an Op's leased steps work in a worktree of their own on
6
+ * `chant/work/[<member>/]<item>`. Given that worktree as `cwd`
7
+ * (`workLeaseOutput("worktree")`) and no `range`, the activity checks the
8
+ * commits the branch holds beyond the main worktree's HEAD, with the branch's
9
+ * item as the work item in hand, exactly as `chant workspace check --changes
10
+ * <base>..HEAD --work <item>` would. A `range` or `work` given replaces what
11
+ * the branch says.
12
+ *
13
+ * The step fails when the check's severity is `fail` and it has a finding,
14
+ * or when the check can't run; otherwise it returns the document's findings
15
+ * and summary for later steps. The workspace code loads on first call, so
16
+ * importing core's activities loads nothing under `workspace/` (#2525 rule 5).
17
+ */
18
+ export async function changeCoverage(args = {}) {
19
+ const { checkChanges, workBranchChanges } = await import("../../workspace/changes.js");
20
+ const cwd = args.cwd ?? process.cwd();
21
+ const branch = args.range === undefined ? workBranchChanges(cwd) : undefined;
22
+ const range = args.range ?? branch?.range;
23
+ if (range === undefined)
24
+ throw new Error(`changeCoverage: ${cwd} is not on a chant/work/ branch, so give the range to check`);
25
+ const work = args.work ?? branch?.work;
26
+ const { doc } = await checkChanges({ cwd, range, ...(work !== undefined ? { work } : {}), ...(args.severity ? { severity: args.severity } : {}) });
27
+ if ("error" in doc)
28
+ throw new Error(`changeCoverage: ${doc.error.code}: ${doc.error.message}`);
29
+ const result = {
30
+ ok: doc.ok,
31
+ range: doc.range,
32
+ work: doc.work?.record ?? null,
33
+ severity: doc.severity,
34
+ findings: doc.findings.map(({ code, path, message, severity, records, triage }) => ({ code, path, message, severity, records, triage })),
35
+ summary: doc.summary,
36
+ };
37
+ if (!doc.ok)
38
+ throw new Error(`changeCoverage: ${doc.findings.length} change ${doc.findings.length === 1 ? "finding" : "findings"} at severity fail: ${doc.findings.map((f) => `${f.code} ${f.path}`).join(", ")}`);
39
+ return result;
40
+ }