@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,106 @@
1
+ /**
2
+ * Activity contract registry — the schema-shaped sibling of
3
+ * `./activity-registry.ts` (chant #2101).
4
+ *
5
+ * `activity-contract.ts` left contract ownership per-caller on purpose: an
6
+ * activity declares its contract alongside its implementation, and whoever
7
+ * builds a contract map decides which activities it covers. What was missing
8
+ * was the other half of that arrangement, a way for the checks that validate
9
+ * Op steps to SEE a contract a lexicon declared. OPS012 and OPS013
10
+ * (`../lint/rules/op/`) walk every Op entity in the build, including steps
11
+ * calling `terraformPlan`, `k3sInstall`, `flyApply` or `gcpApply`, over
12
+ * core's own static table alone. Since #2122 moved those checks into core
13
+ * they fire on every project that declares an Op, so an Op built out of one
14
+ * lexicon's steps failed `chant build` outright even though `loadActivities`
15
+ * resolves the very same names at run time. Both terraform examples that
16
+ * carry an Op kept it outside `src/` because of the older, lexicon-hosted
17
+ * form of the same gap, which meant no example ever proved its Op builds.
18
+ *
19
+ * The resolution mirrors activities exactly, by convention:
20
+ * `@intentius/chant-lexicon-<name>/op/activity-contracts` is imported for
21
+ * every configured lexicon and every {@link ActivityContract} it exports is
22
+ * collected, keyed by the contract's declared `name`. A lexicon that ships
23
+ * no such module is skipped, the same way `loadActivities` skips one that
24
+ * contributes no activities. A plugin may also hand its contracts over
25
+ * directly through {@link LexiconActivityContractContributor}, for a lexicon
26
+ * whose contracts are not reachable at a subpath (a bundled single-file
27
+ * plugin, a project-local one).
28
+ *
29
+ * The merged map reaches a post-synth check as
30
+ * `PostSynthContext.activityContracts` (`../lint/post-synth.ts`), filled in
31
+ * by whoever runs the checks: `chant build`, `chant lint` and
32
+ * `check-lexicon`'s example harness all do. A check merges it over its own
33
+ * base table rather than replacing it, so a context that carries none (a
34
+ * hand-built one in a test) behaves exactly as before this existed.
35
+ */
36
+ import * as coreContracts from "./activities/activity-contracts.js";
37
+ import { collectActivityContracts } from "./activity-contract.js";
38
+ import { importLexiconModule, importLexiconPackage } from "../lexicon-module.js";
39
+ /**
40
+ * Build the activity-contract map for build-time validation: core's own
41
+ * contracts (`./activities/activity-contracts`, a static import so a project
42
+ * that has installed nothing but chant still gets them) plus every contract
43
+ * the named lexicons contribute.
44
+ *
45
+ * `lexicons` may be plain names or plugin-shaped objects; a plugin's
46
+ * `activityContracts()` is read after its conventional module, so a plugin
47
+ * that declares both wins on a name collision with itself. Across lexicons,
48
+ * last one in wins, which is the same rule `loadActivities` applies to
49
+ * implementations.
50
+ *
51
+ * Never throws: an absent lexicon, a missing subpath, or a plugin member that
52
+ * throws all leave the map as it was.
53
+ */
54
+ export async function loadActivityContracts(lexicons = []) {
55
+ const contracts = new Map();
56
+ collectActivityContracts(coreContracts, contracts);
57
+ for (const entry of lexicons) {
58
+ const name = typeof entry === "string" ? entry : entry.name;
59
+ let contributor = typeof entry === "string" ? undefined : entry;
60
+ try {
61
+ // chant #2520 — a lexicon declared by module path has no subpath to
62
+ // import. Its plugin's `activityContracts()` member stands in for it;
63
+ // given only the name, the plugin is read from the declared module.
64
+ const local = await importLexiconModule(name);
65
+ if (local !== undefined) {
66
+ contributor ?? (contributor = Object.values(local).find((v) => typeof v === "object" && v !== null && v.name === name &&
67
+ typeof v.activityContracts === "function"));
68
+ }
69
+ else {
70
+ const spec = `@intentius/chant-lexicon-${name}/op/activity-contracts`;
71
+ collectActivityContracts((await importLexiconPackage(spec)), contracts);
72
+ }
73
+ }
74
+ catch {
75
+ // Lexicon absent or declares no contracts at the conventional subpath.
76
+ }
77
+ if (contributor !== undefined && typeof contributor.activityContracts === "function") {
78
+ try {
79
+ for (const contract of contributor.activityContracts())
80
+ contracts.set(contract.name, contract);
81
+ }
82
+ catch {
83
+ // A plugin member that throws contributes nothing, the same as one that is absent.
84
+ }
85
+ }
86
+ }
87
+ return contracts;
88
+ }
89
+ /**
90
+ * Merge a check's own base contracts with the ones the build loaded, into the
91
+ * map `validateActivitySteps`/`validateStepOutputRefs` take. The loaded set
92
+ * wins on a name collision: it is the one resolved against the lexicons this
93
+ * build actually configured, whereas the base table is whatever the check
94
+ * imported statically.
95
+ *
96
+ * `loaded` being `undefined` is the ordinary case for a hand-built
97
+ * `PostSynthContext` and yields the base table unchanged.
98
+ */
99
+ export function mergeActivityContracts(base, loaded) {
100
+ if (!loaded || loaded.size === 0)
101
+ return base;
102
+ const merged = new Map(base);
103
+ for (const [name, contract] of loaded)
104
+ merged.set(name, contract);
105
+ return merged;
106
+ }
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Activity contracts — the Stage 1 fix for chant #1288 ("Ops are the one
3
+ * place chant accepts untyped arguments and resolves names at runtime").
4
+ *
5
+ * Maintainer decision (#1288, 2026-08-25): a staged approach. Stage 1 (this
6
+ * module) is registered args/return schemas per activity, validated by
7
+ * `chant build` against every step — non-breaking, no change to
8
+ * {@link ActivityStep.args}'s `Record<string, unknown>` shape or the step
9
+ * builders. Stage 2 (a separate PR) regenerates the step builders as fully
10
+ * typed wrappers for editor completion and go-to-definition. #1289 (op.json
11
+ * IR) and #1290 (step-output references) build on these contracts — #1290
12
+ * specifically needs a declared `returns` schema to validate a later step's
13
+ * reference into an earlier one's output against, which is why `returns` is
14
+ * part of the shape here even though nothing in Stage 1 reads it for that.
15
+ *
16
+ * An activity declares a contract alongside its implementation — the same
17
+ * "registration surface" the issue asked for (`activity-registry.ts`'s
18
+ * `collectActivities` already does this for implementations; this is the
19
+ * schema-shaped sibling). `chant build` resolves each step's `fn` against a
20
+ * contract map built from `Object.values()` of an activity-contracts module
21
+ * and validates `args` and `outcomeAttribute.from` — core's own OPS012
22
+ * (`../lint/rules/op/ops012-activity-contract.ts`, chant #2122) does this
23
+ * for every declared Op regardless of which lexicons are configured; a
24
+ * lexicon's own post-synth check can additionally validate against its own
25
+ * roster the same way (a lexicon-owned check did this before #2122 moved the
26
+ * op-model checks to core). A step whose `fn` has no registered
27
+ * contract is skipped (not an error): this is deliberately incremental — a
28
+ * contract map opts an activity in by declaring one for it, and the
29
+ * k8s/aws/azure/gcp/fly activity sets are expected to pick this up one at a
30
+ * time rather than all at once (see the issue's "worth checking this lands
31
+ * cleanly" note).
32
+ *
33
+ * Ownership of a contract map is per-caller, not a shared cross-lexicon
34
+ * registry: whoever builds the map (core's OPS012/OPS013, or a lexicon's own
35
+ * check) decides which activities it covers. A `Chant::Op` step can call an
36
+ * activity contributed by any lexicon, and `PostSynthContext.entities`
37
+ * already carries the whole resolved graph to every check, so no new
38
+ * plumbing is needed for that to work.
39
+ */
40
+ import { z } from "zod";
41
+ import { outcomeAttributesOf } from "./types.js";
42
+ import { ACTIVITY_PROFILE_NAMES, stepTimeoutProblem } from "./activity-profiles.js";
43
+ /**
44
+ * Every literal value {@link ActivityStep.profile} may hold, read off
45
+ * {@link ACTIVITY_PROFILES} itself so the runtime list cannot drift from the
46
+ * table the type is derived from.
47
+ */
48
+ export const KNOWN_ACTIVITY_PROFILES = ACTIVITY_PROFILE_NAMES;
49
+ const CONTRACT_BRAND = Symbol.for("chant.op.activityContract");
50
+ /** Declare an activity contract. */
51
+ export function activityContract(name, args, returns, opts) {
52
+ return {
53
+ [CONTRACT_BRAND]: true,
54
+ name,
55
+ args,
56
+ ...(returns ? { returns } : {}),
57
+ ...(opts?.entities && opts.entities.length > 0 ? { entities: opts.entities } : {}),
58
+ };
59
+ }
60
+ /** Structural guard for a value produced by {@link activityContract}. */
61
+ export function isActivityContract(value) {
62
+ return typeof value === "object" && value !== null && value[CONTRACT_BRAND] === true;
63
+ }
64
+ /**
65
+ * Add every {@link ActivityContract} exported from an activity-contracts
66
+ * module to `into`, keyed by its declared `name` — the schema-shaped sibling
67
+ * of `activity-registry.ts`'s `collectActivities`.
68
+ */
69
+ export function collectActivityContracts(mod, into) {
70
+ for (const value of Object.values(mod)) {
71
+ if (isActivityContract(value))
72
+ into.set(value.name, value);
73
+ }
74
+ }
75
+ /** Every `ActivityStep` in a phase, including ones nested inside an `EffectStep`. */
76
+ function activityStepsOf(steps) {
77
+ return steps.flatMap((s) => (s.kind === "activity" ? [s] : s.kind === "effect" ? s.steps.filter((n) => n.kind === "activity") : []));
78
+ }
79
+ // Same global symbol `step-output-ref.ts` brands a `StepOutputRef` with —
80
+ // `Symbol.for(...)` interns by string key, so this recognizes one without
81
+ // importing that module (which itself imports `pathExistsInSchema` below;
82
+ // importing the other way would make the two files a cycle).
83
+ const STEP_OUTPUT_REF_BRAND = Symbol.for("chant.op.stepOutputRef");
84
+ function isStepOutputRefValue(value) {
85
+ return typeof value === "object" && value !== null && value[STEP_OUTPUT_REF_BRAND] === true;
86
+ }
87
+ /**
88
+ * Does any prefix of `path` (a zod issue's `.path`) inside `obj` land on a
89
+ * step-output reference? A reference stands in for the whole value at its
90
+ * position, so an issue at or below it describes the placeholder, not the
91
+ * value it resolves to. "Below" matters for a whole-value reference in a
92
+ * record-typed arg (`inputs: step.out.json`, #3299): zod walks the
93
+ * reference's own keys, brand symbol included, and reports issues inside it.
94
+ */
95
+ function pathCrossesStepOutputRef(obj, path) {
96
+ let current = obj;
97
+ for (const segment of path) {
98
+ if (current === null || typeof current !== "object")
99
+ return false;
100
+ current = current[segment];
101
+ if (isStepOutputRefValue(current))
102
+ return true;
103
+ }
104
+ return false;
105
+ }
106
+ /** Unwrap `ZodOptional`/`ZodNullable`/`ZodDefault` (and similar) down to the schema they wrap. */
107
+ function unwrap(schema) {
108
+ let current = schema;
109
+ while (typeof current.unwrap === "function") {
110
+ current = current.unwrap();
111
+ }
112
+ return current;
113
+ }
114
+ /**
115
+ * Does dot-path `path` resolve to a field that exists on `schema`? Object
116
+ * shapes only — a return schema whose root (or an intermediate segment) is
117
+ * a `z.record(...)`/`z.array(...)` rather than a `z.object(...)` hard-errors
118
+ * (returns `false`) instead of skipping, deliberately (chant #1290 comment
119
+ * on #1288's pre-merge review): a record's keys are dynamic and an array's
120
+ * elements are index-addressed, neither of which a dot-path segment can
121
+ * check against in any way that's more meaningful than "the author probably
122
+ * meant something else." No declared `returns` schema needs this today, so
123
+ * there's no live case to design against yet. The escape hatch is an empty
124
+ * path — `outcomeAttribute.from` omitted, or a {@link StepOutputRef}'s
125
+ * `path` omitted — which references the whole return value and never calls
126
+ * this function; a record/array-returning activity's whole value is always
127
+ * a valid reference target.
128
+ */
129
+ export function pathExistsInSchema(schema, path) {
130
+ return schemaAtPath(schema, path.split(".")) !== undefined;
131
+ }
132
+ /**
133
+ * The zod schema at property-key path `path` inside `schema`, walking
134
+ * through `z.ZodObject` shapes only (unwrapping optional/nullable/default at
135
+ * each level, same as {@link pathExistsInSchema}). `undefined` when a
136
+ * segment doesn't resolve, or an intermediate schema isn't a `z.ZodObject` —
137
+ * same record/array hard-stop {@link pathExistsInSchema} documents. An empty
138
+ * `path` returns `schema` itself (unwrapped).
139
+ */
140
+ export function schemaAtPath(schema, path) {
141
+ let current = unwrap(schema);
142
+ for (const segment of path) {
143
+ if (!(current instanceof z.ZodObject))
144
+ return undefined;
145
+ const shape = current.shape;
146
+ if (!(segment in shape))
147
+ return undefined;
148
+ current = unwrap(shape[segment]);
149
+ }
150
+ return current;
151
+ }
152
+ export function primitiveKindOf(schema) {
153
+ const s = unwrap(schema);
154
+ if (s instanceof z.ZodString)
155
+ return "string";
156
+ if (s instanceof z.ZodNumber)
157
+ return "number";
158
+ if (s instanceof z.ZodBoolean)
159
+ return "boolean";
160
+ if (s instanceof z.ZodObject)
161
+ return "object";
162
+ if (s instanceof z.ZodArray)
163
+ return "array";
164
+ return undefined;
165
+ }
166
+ /**
167
+ * Validate every activity step in an Op's phases (main and `onFailure`)
168
+ * against a contract map. A step whose `fn` has no entry in `contracts` is
169
+ * skipped — Stage 1 is opt-in per activity, not a hard requirement that
170
+ * every activity have a declared contract.
171
+ *
172
+ * Catches the four failure classes chant #1288 names:
173
+ * - an unrecognized `profile` (checked against {@link KNOWN_ACTIVITY_PROFILES}, independent of whether `fn` has a contract),
174
+ * - a step's own `timeout` that is not a duration, or is longer than `MAX_STEP_TIMEOUT` (#2787),
175
+ * - an args key the declared schema doesn't recognize,
176
+ * - an args value of the wrong type (including a required key that's missing),
177
+ * - an `outcomeAttribute.from` path that can't exist on the declared return type.
178
+ */
179
+ export function validateActivitySteps(config, contracts) {
180
+ const issues = [];
181
+ const phasesToWalk = [...config.phases, ...(config.onFailure ?? [])];
182
+ for (const phase of phasesToWalk) {
183
+ for (const step of activityStepsOf(phase.steps)) {
184
+ if (step.profile && !KNOWN_ACTIVITY_PROFILES.includes(step.profile)) {
185
+ issues.push({
186
+ opName: config.name,
187
+ phase: phase.name,
188
+ fn: step.fn,
189
+ message: `unknown profile "${step.profile}" (known: ${KNOWN_ACTIVITY_PROFILES.join(", ")})`,
190
+ });
191
+ }
192
+ if (step.timeout !== undefined) {
193
+ const problem = stepTimeoutProblem(step.timeout);
194
+ if (problem)
195
+ issues.push({ opName: config.name, phase: phase.name, fn: step.fn, message: problem });
196
+ }
197
+ const contract = contracts.get(step.fn);
198
+ if (!contract)
199
+ continue;
200
+ const parsed = contract.args.safeParse(step.args ?? {});
201
+ if (!parsed.success) {
202
+ for (const issue of parsed.error.issues) {
203
+ // A step-output reference (#1290) sitting at this path, or above
204
+ // it, is a placeholder object at build time, not the value it
205
+ // will resolve to — so an args-schema issue there is a false
206
+ // positive; OPS013 (`validateStepOutputRefs`) is what validates
207
+ // a reference, against the *producer's* declared return schema.
208
+ // An unrecognized-key issue's path is the parent object (`[]`
209
+ // for a top-level extra key), which is never itself a reference,
210
+ // so a genuinely misspelled key is still caught either way.
211
+ if (pathCrossesStepOutputRef(step.args, issue.path))
212
+ continue;
213
+ // String(), not join(): a zod path can hold a symbol key, and
214
+ // join() throws converting one (#3299).
215
+ const path = issue.path.length > 0 ? issue.path.map((segment) => String(segment)).join(".") : "(args)";
216
+ issues.push({ opName: config.name, phase: phase.name, fn: step.fn, message: `args.${path}: ${issue.message}` });
217
+ }
218
+ }
219
+ for (const attr of outcomeAttributesOf(step)) {
220
+ if (attr.from && contract.returns && !pathExistsInSchema(contract.returns, attr.from)) {
221
+ issues.push({
222
+ opName: config.name,
223
+ phase: phase.name,
224
+ fn: step.fn,
225
+ message: `outcomeAttribute.from "${attr.from}" does not exist on "${step.fn}"'s declared return type`,
226
+ });
227
+ }
228
+ }
229
+ }
230
+ }
231
+ return issues;
232
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * A terminal activity failure.
3
+ *
4
+ * Some activities fail deterministically: an organizational policy violation
5
+ * (`policyGate`) or a cfn-guard finding (`guardValidate`) reads the same on the
6
+ * second attempt as on the first, so a retry only delays the report. Those
7
+ * activities used to raise an orchestrator SDK's non-retryable failure type,
8
+ * which put that SDK on the import path of every base activity. Core owns the
9
+ * base activities now (chant #2114), and depends on no runtime SDK — this is
10
+ * the same signal in a plain `Error`.
11
+ *
12
+ * `name` is the failure type, not the class name, so the local executor's
13
+ * `retry.nonRetryableErrorTypes` (which matches on `Error.name`) can name it in
14
+ * a profile. `type` and `nonRetryable` are kept alongside it because that is
15
+ * the shape callers and tests already read.
16
+ */
17
+ export class NonRetryableActivityError extends Error {
18
+ constructor(message,
19
+ /** Failure type, e.g. `"PolicyViolation"`. Also this error's `name`. */
20
+ type) {
21
+ super(message);
22
+ this.type = type;
23
+ /** Always true — present so a caller can branch without an `instanceof`. */
24
+ this.nonRetryable = true;
25
+ this.name = type;
26
+ }
27
+ }
28
+ /** Build a {@link NonRetryableActivityError} — a non-retryable failure with no SDK behind it. */
29
+ export function nonRetryableFailure(message, type) {
30
+ return new NonRetryableActivityError(message, type);
31
+ }
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Activity timeout and retry profiles.
3
+ *
4
+ * A profile is a named retry/timeout shape an Op step opts into
5
+ * (`activity("chantBuild", …, "fastIdempotent")`), so tuning lives in one table
6
+ * instead of inline at every call site. The six names cover the shapes infra
7
+ * steps actually take: fast idempotent work, long infra, K8s wait loops, a
8
+ * human gate, an Argo sync wait, and a deterministic policy check.
9
+ *
10
+ * These lived in a hosting lexicon, under its own prefixed name, until chant
11
+ * #2114 moved the base activities into core. Nothing about a timeout or a
12
+ * backoff coefficient belonged to that runtime, so the table came with them and
13
+ * lost the prefix. `heartbeatTimeout` did not come along: it configured a
14
+ * liveness protocol between a worker and a server, and no in-process step
15
+ * heartbeats to anything.
16
+ */
17
+ import { parseDuration } from "./duration.js";
18
+ /** Named activity profiles for common infrastructure step patterns. */
19
+ export const ACTIVITY_PROFILES = {
20
+ /**
21
+ * Fast, idempotent operations: `chant build`, `kubectl apply` without `--wait`,
22
+ * fetching nameservers, reading cluster status.
23
+ */
24
+ fastIdempotent: {
25
+ timeout: "5m",
26
+ retry: { maximumAttempts: 3, initialInterval: "5s", backoffCoefficient: 2 },
27
+ },
28
+ /**
29
+ * Long-running infra: GKE cluster creation via Config Connector (~10-20 min),
30
+ * `kubectl apply --wait` for large resource sets, Helm installs.
31
+ */
32
+ longInfra: {
33
+ timeout: "20m",
34
+ retry: { maximumAttempts: 3, initialInterval: "30s", backoffCoefficient: 2 },
35
+ },
36
+ /**
37
+ * K8s wait loops: polling for StatefulSet rollout, ExternalDNS A-records,
38
+ * DNS propagation.
39
+ */
40
+ k8sWait: {
41
+ timeout: "15m",
42
+ // A terminal-state resource (waitForReady's ReadinessFailedError) will never
43
+ // become ready — fail fast instead of exhausting retries.
44
+ retry: {
45
+ maximumAttempts: 3,
46
+ initialInterval: "10s",
47
+ backoffCoefficient: 2,
48
+ nonRetryableErrorTypes: ["ReadinessFailedError"],
49
+ },
50
+ },
51
+ /**
52
+ * A command chant did not write and cannot know is safe to repeat (#2411).
53
+ *
54
+ * `shellCmd` is the escape hatch: its whole purpose is to run something
55
+ * outside the model, so nothing here can judge whether a second attempt is
56
+ * harmless or a second deployment. Every other activity carrying a retrying
57
+ * profile is one chant authored and knows the shape of.
58
+ *
59
+ * Twenty minutes, because a shell step is as likely to be a long build as a
60
+ * quick script, and one attempt, because retrying is the claim that needs
61
+ * evidence. An author who knows their command is idempotent names
62
+ * `fastIdempotent` or `longInfra` and gets retries back.
63
+ */
64
+ atMostOnce: {
65
+ timeout: "20m",
66
+ retry: { maximumAttempts: 1 },
67
+ },
68
+ /**
69
+ * Human-gate steps: waiting for an operator action (DNS delegation, approval).
70
+ * Very long timeout, single attempt — no retry on human-gate timeouts.
71
+ */
72
+ humanGate: {
73
+ timeout: "48h",
74
+ retry: { maximumAttempts: 1 },
75
+ },
76
+ /**
77
+ * Argo CD sync waits: poll an Application until `health=Healthy && sync=Synced`
78
+ * (`waitForArgoSync`). Long timeout for slow first syncs, cheap idempotent
79
+ * retries — re-polling is free. A terminal-unhealthy Application fails fast
80
+ * via `ArgoSyncFailedError` (non-retryable).
81
+ */
82
+ argoSync: {
83
+ timeout: "30m",
84
+ retry: {
85
+ maximumAttempts: 5,
86
+ initialInterval: "10s",
87
+ backoffCoefficient: 2,
88
+ maximumInterval: "1m",
89
+ nonRetryableErrorTypes: ["ArgoSyncFailedError"],
90
+ },
91
+ },
92
+ /**
93
+ * Organizational policy gate (`policyGate`): build the project and evaluate
94
+ * `lint.policies`. Deterministic — a violation is the same on every attempt —
95
+ * so a single attempt, short timeout, no retry.
96
+ */
97
+ policyCheck: {
98
+ timeout: "5m",
99
+ retry: { maximumAttempts: 1 },
100
+ },
101
+ };
102
+ /** Every profile name, as a runtime list (`KNOWN_ACTIVITY_PROFILES`'s source). */
103
+ export const ACTIVITY_PROFILE_NAMES = Object.keys(ACTIVITY_PROFILES);
104
+ /**
105
+ * The longest timeout one step may declare for itself (#2787): six hours, the
106
+ * ceiling hosted CI puts on a single job. A step's own `timeout` replaces its
107
+ * profile's and keeps the profile's retries, so a builder `shell` step can
108
+ * run 45 minutes on its one attempt. Anything that waits longer is waiting on
109
+ * someone, which is a gate's job (`humanGate`, 48 hours), not a step's.
110
+ */
111
+ export const MAX_STEP_TIMEOUT = "6h";
112
+ /** {@link MAX_STEP_TIMEOUT} in milliseconds. */
113
+ export const MAX_STEP_TIMEOUT_MS = 6 * 3600000;
114
+ /**
115
+ * Why `timeout` can't be a step's own timeout, or null when it can: it must
116
+ * be a duration such as `45m` or `1h30m`, more than zero, and at most
117
+ * {@link MAX_STEP_TIMEOUT}.
118
+ */
119
+ export function stepTimeoutProblem(timeout) {
120
+ if (typeof timeout !== "string" || !/^(\d+(ms|s|m|h|d))+$/.test(timeout)) {
121
+ return `timeout ${JSON.stringify(timeout)} is not a duration such as "45m" or "1h30m"`;
122
+ }
123
+ const ms = parseDuration(timeout);
124
+ if (ms <= 0)
125
+ return `timeout "${timeout}" must be more than zero`;
126
+ if (ms > MAX_STEP_TIMEOUT_MS)
127
+ return `timeout "${timeout}" is longer than a step may run (${MAX_STEP_TIMEOUT}); a longer wait is a gate's`;
128
+ return null;
129
+ }
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Activity registry — resolves an Op step's `fn` name to a callable activity
3
+ * implementation for local execution.
4
+ *
5
+ * The base activities are core's own (`./activities`): plain async functions
6
+ * taking a single args object, with no workflow engine anywhere in the call
7
+ * path. They are imported statically, so `loadActivities([])` works in a
8
+ * project that has installed nothing but chant. Product-specific appliers stay
9
+ * in their owning lexicon (#809) and are pulled in dynamically per the
10
+ * project's configured lexicon list.
11
+ */
12
+ import * as baseActivities from "./activities/index.js";
13
+ import { ACTIVITY_PROFILES } from "./activity-profiles.js";
14
+ import { importLexiconModule, importLexiconPackage } from "../lexicon-module.js";
15
+ /**
16
+ * The export an activity module lists its fallback activities under: names it
17
+ * provides only when no other configured lexicon does (#3657). The sql
18
+ * lexicon's `receiptRead` / `receiptWrite` / `receiptStaleness` are the case:
19
+ * a project that uses only sql keeps its `effect()` receipts on its database
20
+ * server, and one that also configures aws or k8s keeps them in that
21
+ * lexicon's receipt row, whichever order `lexicons` lists them in.
22
+ */
23
+ export const ACTIVITY_FALLBACKS_EXPORT = "ACTIVITY_FALLBACKS";
24
+ /**
25
+ * Add every exported function from an activity module to `into`, keyed by
26
+ * name. A name the module lists in {@link ACTIVITY_FALLBACKS_EXPORT} is added
27
+ * only when nothing provides it yet; any other export replaces what is there,
28
+ * a fallback included.
29
+ */
30
+ function collectActivities(mod, into) {
31
+ const listed = mod[ACTIVITY_FALLBACKS_EXPORT];
32
+ const fallbacks = new Set(Array.isArray(listed) ? listed.filter((n) => typeof n === "string") : []);
33
+ for (const [name, value] of Object.entries(mod)) {
34
+ if (typeof value !== "function")
35
+ continue;
36
+ if (fallbacks.has(name) && into.has(name))
37
+ continue;
38
+ into.set(name, value);
39
+ }
40
+ }
41
+ /**
42
+ * Build the activity map for local execution: core's base activities plus every
43
+ * activity module the project's configured lexicons contribute, keyed by export
44
+ * name (`shellCmd`, `kubectlApply`, `gcpApply`, …).
45
+ *
46
+ * Cloud-specific appliers live in their own lexicon (aws → `flociUp`/`flociDown`,
47
+ * gcp → `gcpApply`, azure → `azGroupEnsure`/`azGroupDelete`), so `lexicons` —
48
+ * the project's configured lexicon list — is consulted to pull those in. A
49
+ * lexicon that ships no `op/activities` module is skipped. A lexicon's
50
+ * fallback activities ({@link ACTIVITY_FALLBACKS_EXPORT}) give way to another
51
+ * lexicon's activity of the same name; otherwise a later lexicon's export
52
+ * replaces an earlier one's.
53
+ *
54
+ * Never throws: the base library is a static import, so there is no "no
55
+ * activities registered" state to report.
56
+ */
57
+ export async function loadActivities(lexicons = []) {
58
+ const activities = new Map();
59
+ collectActivities(baseActivities, activities);
60
+ for (const name of lexicons) {
61
+ try {
62
+ // chant #2520 — a lexicon declared by module path has no subpath to
63
+ // import; its plugin's `activities()` member stands in for it.
64
+ const local = await importLexiconModule(name);
65
+ if (local !== undefined) {
66
+ const plugin = Object.values(local).find((v) => isActivityContributor(v) && v.name === name);
67
+ if (plugin)
68
+ collectActivities(await plugin.activities(), activities);
69
+ continue;
70
+ }
71
+ const spec = `@intentius/chant-lexicon-${name}/op/activities`;
72
+ collectActivities((await importLexiconPackage(spec)), activities);
73
+ }
74
+ catch {
75
+ // Lexicon absent or contributes no activities — fine.
76
+ }
77
+ }
78
+ return activities;
79
+ }
80
+ function isActivityContributor(value) {
81
+ return (typeof value === "object" &&
82
+ value !== null &&
83
+ typeof value.name === "string" &&
84
+ typeof value.activities === "function");
85
+ }
86
+ /**
87
+ * The built-in profile table. Kept async because it is awaited on the CLI's
88
+ * run path alongside {@link loadActivities}, and because a hosted runtime may
89
+ * one day resolve profiles from somewhere less immediate.
90
+ */
91
+ export async function loadProfiles() {
92
+ return ACTIVITY_PROFILES;
93
+ }
94
+ /**
95
+ * Resolve a step's `fn` against the loaded activity map.
96
+ * Throws a clear error listing known names if the activity is missing.
97
+ */
98
+ export function resolveActivity(activities, fn) {
99
+ const activity = activities.get(fn);
100
+ if (!activity) {
101
+ const known = [...activities.keys()].sort().join(", ");
102
+ throw new Error(`no activity named "${fn}" (known: ${known})`);
103
+ }
104
+ return activity;
105
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Activity runtime helpers shared by every Op activity implementation, wherever
3
+ * it lives — the base activities in `./activities` and the product-specific
4
+ * appliers in the aws/gcp/azure/k8s/fly lexicons. Hosting them in core keeps a
5
+ * lexicon from depending on another lexicon just to sleep between polls.
6
+ */
7
+ /**
8
+ * Sleep for `ms`, rejecting early if `signal` aborts. Polling activities use
9
+ * this between attempts so a local-executor timeout or Ctrl-C interrupts the
10
+ * wait instead of running it to completion.
11
+ */
12
+ export function sleep(ms, signal) {
13
+ return new Promise((resolve, reject) => {
14
+ if (signal?.aborted) {
15
+ reject(new Error("aborted"));
16
+ return;
17
+ }
18
+ const onAbort = () => {
19
+ clearTimeout(timer);
20
+ reject(new Error("aborted"));
21
+ };
22
+ const timer = setTimeout(() => {
23
+ signal?.removeEventListener("abort", onAbort);
24
+ resolve();
25
+ }, ms);
26
+ signal?.addEventListener("abort", onAbort, { once: true });
27
+ });
28
+ }