@intentius/chant 0.124.13 → 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 (907) 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.js +260 -0
  306. package/dist/gate-resume-run.js +154 -0
  307. package/dist/gated-waves.js +165 -0
  308. package/dist/governance.js +43 -0
  309. package/dist/graph-declared.js +45 -0
  310. package/dist/graph-detail.js +207 -0
  311. package/dist/graph-dot.js +54 -0
  312. package/dist/graph-effective.js +107 -0
  313. package/dist/graph-ir.js +623 -0
  314. package/dist/graph-layout.js +184 -0
  315. package/dist/graph-lens.js +105 -0
  316. package/dist/graph-mermaid.js +83 -0
  317. package/dist/graph-ops.js +39 -0
  318. package/dist/graph-refs.js +156 -0
  319. package/dist/held-elsewhere.js +87 -0
  320. package/dist/identity.js +251 -0
  321. package/dist/import/base-parser.js +34 -0
  322. package/dist/import/embedded.js +255 -0
  323. package/dist/import/generator.js +1 -0
  324. package/dist/import/ir-utils.js +85 -0
  325. package/dist/import/parser-options.js +45 -0
  326. package/dist/import/parser.js +1 -0
  327. package/dist/index.js +118 -0
  328. package/dist/intrinsic-interpolation.js +73 -0
  329. package/dist/intrinsic.js +31 -0
  330. package/dist/join-key.js +35 -0
  331. package/dist/kubectl-context.js +150 -0
  332. package/dist/lexicon-config.js +58 -0
  333. package/dist/lexicon-integrity.js +47 -0
  334. package/dist/lexicon-manifest.js +70 -0
  335. package/dist/lexicon-module.d.ts.map +1 -1
  336. package/dist/lexicon-module.js +241 -0
  337. package/dist/lexicon-output.js +218 -0
  338. package/dist/lexicon-plugin-helpers.js +104 -0
  339. package/dist/lexicon-schema.js +136 -0
  340. package/dist/lexicon.js +130 -0
  341. package/dist/lifecycle/affected.js +224 -0
  342. package/dist/lifecycle/assert-live.js +110 -0
  343. package/dist/lifecycle/build-ledger-store.js +160 -0
  344. package/dist/lifecycle/build-ledger.js +155 -0
  345. package/dist/lifecycle/change-set.js +356 -0
  346. package/dist/lifecycle/converge-ledger.js +161 -0
  347. package/dist/lifecycle/deep-diff.js +233 -0
  348. package/dist/lifecycle/deep-observe.js +147 -0
  349. package/dist/lifecycle/digest.js +143 -0
  350. package/dist/lifecycle/disruption.js +135 -0
  351. package/dist/lifecycle/gate-applied.js +113 -0
  352. package/dist/lifecycle/gate-audit.js +341 -0
  353. package/dist/lifecycle/gate-ledger-select.js +89 -0
  354. package/dist/lifecycle/gate-ledger.js +193 -0
  355. package/dist/lifecycle/gate-origin.js +117 -0
  356. package/dist/lifecycle/gate-pending.js +58 -0
  357. package/dist/lifecycle/git.js +1182 -0
  358. package/dist/lifecycle/identity.js +58 -0
  359. package/dist/lifecycle/index.js +26 -0
  360. package/dist/lifecycle/lease.js +283 -0
  361. package/dist/lifecycle/ledger-port.js +1 -0
  362. package/dist/lifecycle/legacy-digest.js +91 -0
  363. package/dist/lifecycle/live-diff.js +274 -0
  364. package/dist/lifecycle/local-note.js +15 -0
  365. package/dist/lifecycle/member-ledger.js +122 -0
  366. package/dist/lifecycle/observation-baseline.js +155 -0
  367. package/dist/lifecycle/observe.js +375 -0
  368. package/dist/lifecycle/oras-referrer-lookup.js +82 -0
  369. package/dist/lifecycle/override-ledger.js +54 -0
  370. package/dist/lifecycle/plan-digest.js +110 -0
  371. package/dist/lifecycle/plan-ledger.js +129 -0
  372. package/dist/lifecycle/receipt-plan.js +192 -0
  373. package/dist/lifecycle/release-ledger.js +155 -0
  374. package/dist/lifecycle/release-read.js +64 -0
  375. package/dist/lifecycle/replay.js +193 -0
  376. package/dist/lifecycle/rollback.js +102 -0
  377. package/dist/lifecycle/run-ledger.js +183 -0
  378. package/dist/lifecycle/scenario-eval.js +204 -0
  379. package/dist/lifecycle/scenario.js +214 -0
  380. package/dist/lifecycle/snapshot.js +239 -0
  381. package/dist/lifecycle/status.js +447 -0
  382. package/dist/lifecycle/symptoms.js +117 -0
  383. package/dist/lifecycle/teardown.js +255 -0
  384. package/dist/lifecycle/types.js +1 -0
  385. package/dist/lifecycle/unobserved-gate.js +33 -0
  386. package/dist/lifecycle/wave-plans.js +68 -0
  387. package/dist/lifecycle/work-item-id.js +36 -0
  388. package/dist/lifecycle/work-lease.js +393 -0
  389. package/dist/lint/component-checks.js +87 -0
  390. package/dist/lint/config.js +483 -0
  391. package/dist/lint/declarative.js +122 -0
  392. package/dist/lint/discover.d.ts.map +1 -1
  393. package/dist/lint/discover.js +138 -0
  394. package/dist/lint/engine.js +246 -0
  395. package/dist/lint/knowledge-checks.js +64 -0
  396. package/dist/lint/named-checks.js +22 -0
  397. package/dist/lint/output-checks.js +87 -0
  398. package/dist/lint/output-docs.js +163 -0
  399. package/dist/lint/parser.js +33 -0
  400. package/dist/lint/pipeline-change-gate.js +70 -0
  401. package/dist/lint/policy-import.d.ts +1 -1
  402. package/dist/lint/policy-import.d.ts.map +1 -1
  403. package/dist/lint/policy-import.js +62 -0
  404. package/dist/lint/policy-sandbox.js +86 -0
  405. package/dist/lint/policy.js +122 -0
  406. package/dist/lint/post-synth.js +87 -0
  407. package/dist/lint/presets/relaxed.json +26 -0
  408. package/dist/lint/presets/strict.json +24 -24
  409. package/dist/lint/receipt-checks.js +83 -0
  410. package/dist/lint/rule-loader.d.ts.map +1 -1
  411. package/dist/lint/rule-loader.js +89 -0
  412. package/dist/lint/rule-registry.js +86 -0
  413. package/dist/lint/rule.js +1 -0
  414. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
  415. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
  416. package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
  417. package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
  418. package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
  419. package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
  420. package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
  421. package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
  422. package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
  423. package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
  424. package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
  425. package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
  426. package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
  427. package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
  428. package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
  429. package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
  430. package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
  431. package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
  432. package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
  433. package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
  434. package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
  435. package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
  436. package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
  437. package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
  438. package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
  439. package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
  440. package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
  441. package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
  442. package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
  443. package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
  444. package/dist/lint/rules/comp/index.js +33 -0
  445. package/dist/lint/rules/comp/support.js +129 -0
  446. package/dist/lint/rules/composite-scope.js +51 -0
  447. package/dist/lint/rules/cor017-composite-name-match.js +93 -0
  448. package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
  449. package/dist/lint/rules/cor021-env-literal-name.js +100 -0
  450. package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
  451. package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
  452. package/dist/lint/rules/declarable-naming-convention.js +62 -0
  453. package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
  454. package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
  455. package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
  456. package/dist/lint/rules/evl004-spread-non-const.js +94 -0
  457. package/dist/lint/rules/evl005-resource-block-body.js +41 -0
  458. package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
  459. package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
  460. package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
  461. package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
  462. package/dist/lint/rules/export-required.js +115 -0
  463. package/dist/lint/rules/file-declarable-limit.js +88 -0
  464. package/dist/lint/rules/flat-declarations.js +62 -0
  465. package/dist/lint/rules/index.js +90 -0
  466. package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
  467. package/dist/lint/rules/no-redundant-type-import.js +76 -0
  468. package/dist/lint/rules/no-redundant-value-cast.js +41 -0
  469. package/dist/lint/rules/no-string-ref.js +59 -0
  470. package/dist/lint/rules/no-unused-declarable-import.js +75 -0
  471. package/dist/lint/rules/no-unused-declarable.js +142 -0
  472. package/dist/lint/rules/op/index.js +28 -0
  473. package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
  474. package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
  475. package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
  476. package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
  477. package/dist/lint/rules/op/support.js +11 -0
  478. package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
  479. package/dist/lint/rules/property-kind.js +56 -0
  480. package/dist/lint/rules/single-concern-file.js +71 -0
  481. package/dist/lint/rules/sys001-no-literal-key.js +60 -0
  482. package/dist/lint/selectors.js +168 -0
  483. package/dist/lint/suppressions.js +129 -0
  484. package/dist/lint/typescript.js +17 -0
  485. package/dist/live-endpoint.js +113 -0
  486. package/dist/live-read-session.js +76 -0
  487. package/dist/lsp/lexicon-providers.js +163 -0
  488. package/dist/lsp/types.js +5 -0
  489. package/dist/managed-fields.js +293 -0
  490. package/dist/mcp/types.js +4 -0
  491. package/dist/notify-verify.js +0 -1
  492. package/dist/notify.js +0 -1
  493. package/dist/notify.schema.json +72 -0
  494. package/dist/observation.js +266 -0
  495. package/dist/okf-read.js +134 -0
  496. package/dist/okf.js +275 -0
  497. package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
  498. package/dist/op/activities/activity-contracts.js +313 -0
  499. package/dist/op/activities/apply.js +582 -0
  500. package/dist/op/activities/build.js +18 -0
  501. package/dist/op/activities/change-coverage.js +40 -0
  502. package/dist/op/activities/change-set.js +64 -0
  503. package/dist/op/activities/converge.js +492 -0
  504. package/dist/op/activities/decide.js +211 -0
  505. package/dist/op/activities/env-teardown.js +110 -0
  506. package/dist/op/activities/factory.js +591 -0
  507. package/dist/op/activities/forge-pull-request.js +82 -0
  508. package/dist/op/activities/gh-host.js +78 -0
  509. package/dist/op/activities/guard-validate.js +165 -0
  510. package/dist/op/activities/http-check.js +40 -0
  511. package/dist/op/activities/index.js +59 -0
  512. package/dist/op/activities/lexicon-upgrade.js +629 -0
  513. package/dist/op/activities/lifecycle.js +109 -0
  514. package/dist/op/activities/pipeline-audit.js +147 -0
  515. package/dist/op/activities/policy.js +26 -0
  516. package/dist/op/activities/predict-behaviour.js +341 -0
  517. package/dist/op/activities/propose-upgrade.js +165 -0
  518. package/dist/op/activities/reconcile.js +997 -0
  519. package/dist/op/activities/shell.js +118 -0
  520. package/dist/op/activities/source-release.js +97 -0
  521. package/dist/op/activities/source-rollback.js +165 -0
  522. package/dist/op/activities/teardown.js +17 -0
  523. package/dist/op/activities/util.js +6 -0
  524. package/dist/op/activities/wait.js +51 -0
  525. package/dist/op/activities/work-evidence.js +35 -0
  526. package/dist/op/activities/workflow-audit.js +133 -0
  527. package/dist/op/activity-contract-registry.js +106 -0
  528. package/dist/op/activity-contract.js +232 -0
  529. package/dist/op/activity-failure.js +31 -0
  530. package/dist/op/activity-profiles.js +129 -0
  531. package/dist/op/activity-registry.js +105 -0
  532. package/dist/op/activity-runtime.js +28 -0
  533. package/dist/op/builders.js +801 -0
  534. package/dist/op/change-signal.js +118 -0
  535. package/dist/op/composites/apply-op.js +151 -0
  536. package/dist/op/composites/behaviour-op.js +65 -0
  537. package/dist/op/composites/converge-op.js +141 -0
  538. package/dist/op/composites/index.js +19 -0
  539. package/dist/op/composites/lexicon-upgrade-op.js +107 -0
  540. package/dist/op/composites/pipeline-audit-op.js +50 -0
  541. package/dist/op/composites/reconcile-op.js +84 -0
  542. package/dist/op/composites/watch-op.js +69 -0
  543. package/dist/op/composites/workflow-audit-op.js +57 -0
  544. package/dist/op/converge-rule.js +205 -0
  545. package/dist/op/cron.js +146 -0
  546. package/dist/op/decide-backend.js +181 -0
  547. package/dist/op/decide-config.js +68 -0
  548. package/dist/op/decide-read-inputs.js +141 -0
  549. package/dist/op/discover.d.ts.map +1 -1
  550. package/dist/op/discover.js +213 -0
  551. package/dist/op/duration.js +21 -0
  552. package/dist/op/emulator-freshness.js +80 -0
  553. package/dist/op/emulator-lifecycle.js +269 -0
  554. package/dist/op/factory.js +83 -0
  555. package/dist/op/gate-approval.js +172 -0
  556. package/dist/op/gate-name.js +86 -0
  557. package/dist/op/gate-plan-context.js +167 -0
  558. package/dist/op/gate-point-run.js +67 -0
  559. package/dist/op/gate-point.js +111 -0
  560. package/dist/op/gate-resume-plan.js +155 -0
  561. package/dist/op/gate-resume.js +31 -0
  562. package/dist/op/gate-review.js +290 -0
  563. package/dist/op/gate-run-locator.js +85 -0
  564. package/dist/op/gate-summary.js +100 -0
  565. package/dist/op/gate-wait.js +56 -0
  566. package/dist/op/gate.js +449 -0
  567. package/dist/op/generate-pipeline.js +124 -0
  568. package/dist/op/index.js +51 -0
  569. package/dist/op/lifecycle-receipt-store.js +45 -0
  570. package/dist/op/local-executor.js +1164 -0
  571. package/dist/op/local-output.js +140 -0
  572. package/dist/op/op-ir.js +317 -0
  573. package/dist/op/op-verb-class.js +131 -0
  574. package/dist/op/op-waves-notify.js +136 -0
  575. package/dist/op/op-waves-run.js +1657 -0
  576. package/dist/op/op-waves.js +409 -0
  577. package/dist/op/operator.js +743 -0
  578. package/dist/op/receipt-store.js +94 -0
  579. package/dist/op/resource.js +23 -0
  580. package/dist/op/run-context.js +28 -0
  581. package/dist/op/run-live.js +256 -0
  582. package/dist/op/runtime.js +21 -0
  583. package/dist/op/runtimes/local.js +195 -0
  584. package/dist/op/source-archive.js +131 -0
  585. package/dist/op/step-output-ref.js +397 -0
  586. package/dist/op/steward-beside.js +169 -0
  587. package/dist/op/steward-points.js +138 -0
  588. package/dist/op/steward-turn.js +59 -0
  589. package/dist/op/steward.js +317 -0
  590. package/dist/op/types.js +25 -0
  591. package/dist/op/work-lease-decl.js +81 -0
  592. package/dist/op/work-lease-run.js +393 -0
  593. package/dist/override-gate.js +284 -0
  594. package/dist/owner-chain.js +74 -0
  595. package/dist/ownership.js +92 -0
  596. package/dist/params.js +61 -0
  597. package/dist/plan-summary.js +711 -0
  598. package/dist/point-decision.js +211 -0
  599. package/dist/pr-forge.js +810 -0
  600. package/dist/pr-loop.js +203 -0
  601. package/dist/project-codegen.js +191 -0
  602. package/dist/project-root.js +74 -0
  603. package/dist/project-validation.js +50 -0
  604. package/dist/provenance.js +157 -0
  605. package/dist/pseudo-parameter.js +40 -0
  606. package/dist/reconcile.js +450 -0
  607. package/dist/resource-attributes.js +33 -0
  608. package/dist/runtime-adapter.js +77 -0
  609. package/dist/runtime.js +66 -0
  610. package/dist/secret-materialization.js +153 -0
  611. package/dist/secret-provenance.js +250 -0
  612. package/dist/serializer-walker.js +112 -0
  613. package/dist/serializer.js +1 -0
  614. package/dist/sort.js +45 -0
  615. package/dist/stack-output.js +115 -0
  616. package/dist/telemetry-attribution.js +149 -0
  617. package/dist/terraform/__fixtures__/build-graph.js +63 -0
  618. package/dist/terraform/adopt-state.js +40 -0
  619. package/dist/terraform/aws-resources.js +384 -0
  620. package/dist/terraform/bridge.js +204 -0
  621. package/dist/terraform/carve-provider.js +155 -0
  622. package/dist/terraform/carve.js +138 -0
  623. package/dist/terraform/data-source-shape.js +57 -0
  624. package/dist/terraform/emit-source.js +36 -0
  625. package/dist/terraform/excise.js +123 -0
  626. package/dist/terraform/graduate.js +128 -0
  627. package/dist/terraform/graph.js +435 -0
  628. package/dist/terraform/hcl2json.js +60 -0
  629. package/dist/terraform/manifest.js +149 -0
  630. package/dist/terraform/parse.js +81 -0
  631. package/dist/terraform/providers/aws.js +146 -0
  632. package/dist/terraform/providers/gcp.js +294 -0
  633. package/dist/terraform/providers/index.js +17 -0
  634. package/dist/terraform/providers/kubernetes.js +253 -0
  635. package/dist/terraform/score.js +151 -0
  636. package/dist/terraform/state.js +67 -0
  637. package/dist/terraform/tier-map.js +74 -0
  638. package/dist/terraform/types.js +13 -0
  639. package/dist/terraform/unified-diff.js +132 -0
  640. package/dist/testing.js +295 -0
  641. package/dist/toml-emit.js +153 -0
  642. package/dist/toml-parse.js +355 -0
  643. package/dist/toml-utils.js +60 -0
  644. package/dist/toml.js +428 -0
  645. package/dist/ts-loader.d.ts +46 -0
  646. package/dist/ts-loader.d.ts.map +1 -0
  647. package/dist/ts-loader.js +103 -0
  648. package/dist/types.js +1 -0
  649. package/dist/utils.js +61 -0
  650. package/dist/validation.js +20 -0
  651. package/dist/vendor/js-yaml-load.js +1662 -0
  652. package/dist/workspace/__fixtures__/contract-repo.js +103 -0
  653. package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
  654. package/dist/workspace/__fixtures__/sessions.js +91 -0
  655. package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
  656. package/dist/workspace/agent-cli.js +99 -0
  657. package/dist/workspace/agent.schema.json +390 -0
  658. package/dist/workspace/answers-ledger.js +89 -0
  659. package/dist/workspace/box-cli.js +142 -0
  660. package/dist/workspace/box-factory-write.js +196 -0
  661. package/dist/workspace/box-factory-write.schema.json +342 -0
  662. package/dist/workspace/box-factory.js +88 -0
  663. package/dist/workspace/box-intent.js +126 -0
  664. package/dist/workspace/box-isolation.js +169 -0
  665. package/dist/workspace/box-listing-write.schema.json +204 -0
  666. package/dist/workspace/box-listing.js +298 -0
  667. package/dist/workspace/box-publish.js +352 -0
  668. package/dist/workspace/box-publish.schema.json +498 -0
  669. package/dist/workspace/box-services.js +39 -0
  670. package/dist/workspace/broker-protocol.js +359 -0
  671. package/dist/workspace/broker-protocol.schema.json +228 -0
  672. package/dist/workspace/change-set.schema.json +460 -0
  673. package/dist/workspace/changes-cli.js +56 -0
  674. package/dist/workspace/changes.js +446 -0
  675. package/dist/workspace/changes.schema.json +642 -0
  676. package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
  677. package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
  678. package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
  679. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
  680. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
  681. package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
  682. package/dist/workspace/chant-migrations.js +113 -0
  683. package/dist/workspace/check.schema.json +433 -0
  684. package/dist/workspace/checks/box-isolation.js +62 -0
  685. package/dist/workspace/checks/boxes.js +491 -0
  686. package/dist/workspace/checks/diagrams.js +104 -0
  687. package/dist/workspace/checks/generated.js +419 -0
  688. package/dist/workspace/checks/ledgers.js +212 -0
  689. package/dist/workspace/checks/links.js +191 -0
  690. package/dist/workspace/checks/live.js +100 -0
  691. package/dist/workspace/checks/pipelines.js +188 -0
  692. package/dist/workspace/checks/records.js +169 -0
  693. package/dist/workspace/checks.js +426 -0
  694. package/dist/workspace/ci-green-cli.js +125 -0
  695. package/dist/workspace/ci-green-forge.js +83 -0
  696. package/dist/workspace/ci-green-workflow.js +199 -0
  697. package/dist/workspace/ci-green.js +325 -0
  698. package/dist/workspace/ci-last-green.schema.json +158 -0
  699. package/dist/workspace/compose-graph.js +235 -0
  700. package/dist/workspace/compose-reports.js +146 -0
  701. package/dist/workspace/composites.js +264 -0
  702. package/dist/workspace/composites.schema.json +617 -0
  703. package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
  704. package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
  705. package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
  706. package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
  707. package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
  708. package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
  709. package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
  710. package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
  711. package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
  712. package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
  713. package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
  714. package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
  715. package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
  716. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  717. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  718. package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
  719. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  720. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  721. package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
  722. package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
  723. package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  724. package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  725. package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
  726. package/dist/workspace/conformance/broker.js +736 -0
  727. package/dist/workspace/conformance/index.js +673 -0
  728. package/dist/workspace/conformance/vitest.js +108 -0
  729. package/dist/workspace/conformance/writer.js +1080 -0
  730. package/dist/workspace/decide.js +879 -0
  731. package/dist/workspace/decision-points.schema.json +135 -135
  732. package/dist/workspace/declaration-write-cli.js +74 -0
  733. package/dist/workspace/declaration-write.js +238 -0
  734. package/dist/workspace/declaration.js +938 -0
  735. package/dist/workspace/declaration.schema.json +1413 -1413
  736. package/dist/workspace/declared-kinds.js +106 -0
  737. package/dist/workspace/environments.js +164 -0
  738. package/dist/workspace/evidence.schema.json +279 -0
  739. package/dist/workspace/export-cli.js +185 -0
  740. package/dist/workspace/export.js +499 -0
  741. package/dist/workspace/factory-rules.js +175 -0
  742. package/dist/workspace/generated-files.js +92 -0
  743. package/dist/workspace/glob.js +45 -0
  744. package/dist/workspace/graph-cache.js +352 -0
  745. package/dist/workspace/graph-cli.js +348 -0
  746. package/dist/workspace/graph.schema.json +1338 -0
  747. package/dist/workspace/identity-gate-rule.js +75 -0
  748. package/dist/workspace/identity.js +126 -0
  749. package/dist/workspace/import.js +283 -0
  750. package/dist/workspace/init.js +620 -0
  751. package/dist/workspace/intent-cli.js +263 -0
  752. package/dist/workspace/intent-joins.js +201 -0
  753. package/dist/workspace/intent-record.js +352 -0
  754. package/dist/workspace/intent-record.schema.json +864 -0
  755. package/dist/workspace/intent.js +1582 -0
  756. package/dist/workspace/intent.schema.json +2420 -0
  757. package/dist/workspace/json-edit.js +221 -0
  758. package/dist/workspace/jsonc.js +235 -0
  759. package/dist/workspace/kind-readers.js +103 -0
  760. package/dist/workspace/kinds.js +587 -0
  761. package/dist/workspace/lexicon-symbols.js +112 -0
  762. package/dist/workspace/lineage-adopt-cli.js +102 -0
  763. package/dist/workspace/lineage-adopt.js +360 -0
  764. package/dist/workspace/lineage-check.js +282 -0
  765. package/dist/workspace/lineage-cli.js +121 -0
  766. package/dist/workspace/lineage-hash-index.js +284 -0
  767. package/dist/workspace/lineage-init.js +507 -0
  768. package/dist/workspace/lineage-lock.js +387 -0
  769. package/dist/workspace/lineage-merge.js +45 -0
  770. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  771. package/dist/workspace/lineage-migrations.js +329 -0
  772. package/dist/workspace/lineage-provenance.js +36 -0
  773. package/dist/workspace/lineage-update.js +138 -0
  774. package/dist/workspace/lineage-upgrade-cli.js +131 -0
  775. package/dist/workspace/lineage-upgrade.js +889 -0
  776. package/dist/workspace/lineage-vendor.js +171 -0
  777. package/dist/workspace/lineage-version.js +128 -0
  778. package/dist/workspace/lineage-versions.js +275 -0
  779. package/dist/workspace/links.js +330 -0
  780. package/dist/workspace/ls-generated.js +95 -0
  781. package/dist/workspace/ls.js +277 -0
  782. package/dist/workspace/ls.schema.json +333 -0
  783. package/dist/workspace/member-commands.js +508 -0
  784. package/dist/workspace/member-handles.js +216 -0
  785. package/dist/workspace/member-pipeline.js +258 -0
  786. package/dist/workspace/member-run.js +117 -0
  787. package/dist/workspace/member-write.schema.json +193 -0
  788. package/dist/workspace/nested-graph.js +156 -0
  789. package/dist/workspace/nesting.js +38 -0
  790. package/dist/workspace/patch.js +301 -0
  791. package/dist/workspace/patch.schema.json +321 -0
  792. package/dist/workspace/pin-cli.js +55 -0
  793. package/dist/workspace/pin-integrity.js +100 -0
  794. package/dist/workspace/plan-summary.schema.json +155 -0
  795. package/dist/workspace/point-answer.schema.json +129 -129
  796. package/dist/workspace/points-cli.js +291 -0
  797. package/dist/workspace/points-write.schema.json +660 -0
  798. package/dist/workspace/points.js +521 -0
  799. package/dist/workspace/points.schema.json +916 -0
  800. package/dist/workspace/pr-report.schema.json +108 -0
  801. package/dist/workspace/principal-classes.js +245 -0
  802. package/dist/workspace/reason-codes.js +326 -0
  803. package/dist/workspace/record-assets.js +151 -0
  804. package/dist/workspace/record-decided.js +105 -0
  805. package/dist/workspace/record-sessions.js +96 -0
  806. package/dist/workspace/record-source.js +114 -0
  807. package/dist/workspace/records-amend.schema.json +284 -0
  808. package/dist/workspace/records-checkout.js +76 -0
  809. package/dist/workspace/records-cli.js +707 -0
  810. package/dist/workspace/records-close.js +116 -0
  811. package/dist/workspace/records-close.schema.json +278 -0
  812. package/dist/workspace/records-new.schema.json +202 -0
  813. package/dist/workspace/records-review.schema.json +367 -0
  814. package/dist/workspace/records-since.js +317 -0
  815. package/dist/workspace/records-since.schema.json +218 -0
  816. package/dist/workspace/records-write.js +1229 -0
  817. package/dist/workspace/records.js +1345 -0
  818. package/dist/workspace/records.schema.json +604 -0
  819. package/dist/workspace/reference-kinds/app/package.json +10 -0
  820. package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  821. package/dist/workspace/returns.js +303 -0
  822. package/dist/workspace/root-refusal.js +75 -0
  823. package/dist/workspace/run-statement.schema.json +622 -0
  824. package/dist/workspace/runs-cli.js +584 -0
  825. package/dist/workspace/runs-write.schema.json +994 -0
  826. package/dist/workspace/runs.js +708 -0
  827. package/dist/workspace/runs.schema.json +1257 -0
  828. package/dist/workspace/runtimes.js +76 -0
  829. package/dist/workspace/session-kinds.js +83 -0
  830. package/dist/workspace/signers.schema.json +206 -0
  831. package/dist/workspace/source-block.js +125 -0
  832. package/dist/workspace/squash.js +177 -0
  833. package/dist/workspace/status-gates.js +162 -0
  834. package/dist/workspace/status-stewards.js +330 -0
  835. package/dist/workspace/status.js +514 -0
  836. package/dist/workspace/status.schema.json +998 -0
  837. package/dist/workspace/steward-index.js +191 -0
  838. package/dist/workspace/symbols.js +188 -0
  839. package/dist/workspace/template-manifest.js +227 -0
  840. package/dist/workspace/template-pins.js +115 -0
  841. package/dist/workspace/trailer-joins.js +65 -0
  842. package/dist/workspace/trailers.js +111 -0
  843. package/dist/workspace/tree.js +136 -0
  844. package/dist/workspace/trust/attestor.js +63 -0
  845. package/dist/workspace/trust/dsse.js +108 -0
  846. package/dist/workspace/trust/evidence-cli.js +175 -0
  847. package/dist/workspace/trust/evidence.js +161 -0
  848. package/dist/workspace/trust/gate-seal.js +226 -0
  849. package/dist/workspace/trust/policy.js +190 -0
  850. package/dist/workspace/trust/provenance.js +180 -0
  851. package/dist/workspace/trust/rotation.js +298 -0
  852. package/dist/workspace/trust/run-commits.js +101 -0
  853. package/dist/workspace/trust/run-statement.js +182 -0
  854. package/dist/workspace/trust/seal.js +272 -0
  855. package/dist/workspace/trust/signers-cli.js +152 -0
  856. package/dist/workspace/trust/ssh-commit.js +178 -0
  857. package/dist/workspace/trust/test-repo.js +118 -0
  858. package/dist/workspace/trust/trust-files.js +193 -0
  859. package/dist/workspace/trust/verify-cli.js +63 -0
  860. package/dist/workspace/trust/verify.js +192 -0
  861. package/dist/workspace/which-chant.js +141 -0
  862. package/dist/workspace/wip-cli.js +95 -0
  863. package/dist/workspace/wip-write.schema.json +504 -0
  864. package/dist/workspace/wip.js +631 -0
  865. package/dist/workspace/wip.schema.json +334 -0
  866. package/dist/workspace/work-cli.js +448 -0
  867. package/dist/workspace/work-evidence.js +122 -0
  868. package/dist/workspace/work-evidence.schema.json +222 -0
  869. package/dist/workspace/work-history.schema.json +421 -0
  870. package/dist/workspace/work-lease.schema.json +246 -0
  871. package/dist/workspace/work-size.js +77 -0
  872. package/dist/workspace/work.js +283 -0
  873. package/dist/workspace/workspace-kinds.schema.json +259 -259
  874. package/dist/workspace/workspace-principals.schema.json +53 -53
  875. package/dist/workspace/write-lock-cli.js +105 -0
  876. package/dist/workspace/write-lock.js +424 -0
  877. package/dist/workspace/write-lock.schema.json +172 -0
  878. package/dist/workspace/write-scope.js +484 -0
  879. package/dist/yaml.js +459 -0
  880. package/package.json +2 -2
  881. package/src/cli/commands/check-lexicon-plugin.ts +2 -0
  882. package/src/cli/commands/lint.ts +3 -0
  883. package/src/cli/commands/migrate.ts +2 -0
  884. package/src/cli/compiled-cli.e2e.test.ts +165 -0
  885. package/src/cli/main.ts +121 -27
  886. package/src/cli/mcp/workspace-tools.ts +1 -1
  887. package/src/codegen/pinned-upgrade.ts +2 -0
  888. package/src/components/discover.ts +2 -0
  889. package/src/components/sandbox/driver.ts +3 -1
  890. package/src/config-import.ts +3 -0
  891. package/src/discovery/fold-import.ts +23 -14
  892. package/src/discovery/import.ts +2 -0
  893. package/src/discovery/sandbox/driver.ts +3 -1
  894. package/src/lexicon-module.ts +3 -0
  895. package/src/lint/config.ts +1 -1
  896. package/src/lint/discover.ts +28 -8
  897. package/src/lint/policy-import.ts +4 -1
  898. package/src/lint/rule-loader.ts +2 -0
  899. package/src/op/discover.ts +3 -0
  900. package/src/ts-loader.test.ts +23 -0
  901. package/src/ts-loader.ts +122 -0
  902. package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
  903. package/src/workspace/declaration.ts +1 -1
  904. package/src/workspace/kinds.ts +1 -1
  905. package/src/workspace/lineage-migrations.ts +2 -0
  906. package/src/workspace/points.ts +1 -1
  907. package/src/workspace/principal-classes.ts +1 -1
@@ -0,0 +1,801 @@
1
+ import { OpResource } from "./resource.js";
2
+ import { workLeaseProblems } from "./work-lease-decl.js";
3
+ import { WORK_LEASE_STEP_ID } from "./types.js";
4
+ import { isEffectReceipt } from "../effect-receipt.js";
5
+ import { receiptCheckInput } from "./receipt-store.js";
6
+ import { gateApprovalProblems } from "./gate-approval.js";
7
+ import { gatePointProblems } from "./gate-point.js";
8
+ import { makeOutProxy, stepOutput } from "./step-output-ref.js";
9
+ import { isValidCronExpression, cronSyntaxMessage } from "./cron.js";
10
+ // ── Core builders ─────────────────────────────────────────────────────────────
11
+ /**
12
+ * Declare a named, phased Op.
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * export default Op({
17
+ * name: "alb-deploy",
18
+ * overview: "Build and deploy the ALB multi-service stack",
19
+ * phases: [
20
+ * phase("Build", [build("examples/gitlab-aws-alb-infra")], { parallel: true }),
21
+ * phase("Deploy", [kubectlApply("dist/alb-infra.yaml")]),
22
+ * ],
23
+ * });
24
+ * ```
25
+ *
26
+ * A `schedule` may be supplied for an Op that runs on a cadence (#2120); its
27
+ * cron is validated here, at construction, so a typo fails on `chant build`
28
+ * rather than becoming a schedule that silently never fires.
29
+ */
30
+ export function Op(config) {
31
+ if (config.schedule && !isValidCronExpression(config.schedule.cron)) {
32
+ throw new Error(`Op "${config.name}": ${cronSyntaxMessage(config.schedule.cron)}`);
33
+ }
34
+ // #2748: a work lease declared badly, or a change to the checkout with none,
35
+ // fails on `chant build` rather than on the first run.
36
+ const leaseProblems = workLeaseProblems(config);
37
+ if (leaseProblems.length > 0)
38
+ throw new Error(leaseProblems.join("\n"));
39
+ return new OpResource(config);
40
+ }
41
+ /** Define a named execution phase containing one or more steps. */
42
+ export function phase(name, steps, opts) {
43
+ return { name, steps, ...(opts?.parallel ? { parallel: true } : {}) };
44
+ }
45
+ /**
46
+ * Reference a pre-built or custom activity by function name.
47
+ *
48
+ * The third argument is a profile string (unchanged) or, to name the step
49
+ * so a later step can reference its output (#1290), an options object:
50
+ * `activity("lifecycleDiff", { env: "prod" }, { id: "diff" })`. Named or
51
+ * not, the result carries `.out` — `diff.out.driftedStacks` builds a
52
+ * reference to this step's declared return value; see `stepOutput()` in
53
+ * `@intentius/chant/op` for the equivalent on a step authored as a plain
54
+ * object literal instead of via this builder.
55
+ */
56
+ export function activity(fn, args, opts) {
57
+ const profile = typeof opts === "string" ? opts : opts?.profile;
58
+ const id = typeof opts === "string" ? undefined : opts?.id;
59
+ const timeout = typeof opts === "string" ? undefined : opts?.timeout;
60
+ const step = {
61
+ kind: "activity",
62
+ fn,
63
+ ...(args && Object.keys(args).length > 0 ? { args } : {}),
64
+ ...(profile ? { profile } : {}),
65
+ ...(id ? { id } : {}),
66
+ ...(timeout !== undefined ? { timeout } : {}),
67
+ };
68
+ Object.defineProperty(step, "out", {
69
+ enumerable: false,
70
+ get() {
71
+ if (!step.id) {
72
+ throw new Error(`activity(${JSON.stringify(fn)}, ...).out: this step has no id — pass one via ` +
73
+ `activity(fn, args, { id: "..." }) before referencing its output.`);
74
+ }
75
+ return makeOutProxy(step.id);
76
+ },
77
+ });
78
+ return step;
79
+ }
80
+ /**
81
+ * Insert a human gate. A gate is a fact on the gate ledger, not a wait: a run
82
+ * that reaches this step with no resolution newer than its pending fact
83
+ * records the pending fact and ends `gated`. `chant approve <op> <gate>`
84
+ * writes the resolution, and the next run walks through carrying the approver.
85
+ *
86
+ * Pass `plan` to bind the approval to a specific plan (#2300) — normally the
87
+ * Plan phase's own digest, `plan.out.planDigest`. Then a resolution counts
88
+ * only for that plan, and a run whose fresh plan differs is refused by name
89
+ * instead of applying a change nobody approved. See {@link GateStep.plan}.
90
+ *
91
+ * Pass `approval` to require a quorum of human approvers, or to evaluate a
92
+ * policy for each approval (#2508). See {@link GateStep.approval}.
93
+ *
94
+ * Pass `point` to have the gate ask a declared decision point instead
95
+ * (#3170): `gate("apply", { plan: plan.out.digest, point: "prod-apply" })`.
96
+ * The point's deciders and quorum decide, `chant workspace points answer`
97
+ * answers an open question, and the run passes on the answer. See
98
+ * {@link GateStep.point}.
99
+ */
100
+ export function gate(name, opts) {
101
+ if (opts?.approval !== undefined) {
102
+ const problems = gateApprovalProblems(opts.approval);
103
+ if (problems.length > 0)
104
+ throw new Error(`gate(${JSON.stringify(name)}): ${problems[0]}`);
105
+ }
106
+ if (opts?.point !== undefined) {
107
+ const problems = gatePointProblems(opts.point, opts.approval !== undefined);
108
+ if (problems.length > 0)
109
+ throw new Error(`gate(${JSON.stringify(name)}): ${problems[0]}`);
110
+ }
111
+ return {
112
+ kind: "gate",
113
+ gate: name,
114
+ ...(opts?.timeout ? { timeout: opts.timeout } : {}),
115
+ ...(opts?.description ? { description: opts.description } : {}),
116
+ ...(opts?.plan !== undefined ? { plan: opts.plan } : {}),
117
+ ...(opts?.approval !== undefined ? { approval: opts.approval } : {}),
118
+ ...(opts?.point !== undefined ? { point: opts.point } : {}),
119
+ };
120
+ }
121
+ /**
122
+ * Wrap nested steps in read-compare-run-write over an effect receipt (#1834,
123
+ * epic #1703). At run: read the live receipt through the receipt store,
124
+ * compare it against the resolved expectation, and on a match skip the nested
125
+ * steps ("effect already applied"). On a mismatch the nested steps run in
126
+ * authored order, and ONLY when every one of them succeeds is the receipt
127
+ * written — last, once. This step is the sole writer of a receipt (decision
128
+ * 3); a nested-step failure leaves the receipt untouched (stale), so the next
129
+ * run re-proposes the effect.
130
+ *
131
+ * `receipt` is the typed EffectReceipt declaration — import the const from
132
+ * your receipts module. There is no string form: a receipt named by string
133
+ * would sever the step from the declaration that lint, plan, and the lexicon
134
+ * row all key on.
135
+ *
136
+ * A gate authored inside `steps` is reached only when the effect will fire
137
+ * (the matched path never reaches it). The receipt-store activities
138
+ * (`receiptRead`, `receiptWrite`) are provided by the receipt row's lexicon
139
+ * (#1835 aws, #2074 k8s), or in a sql-only project by the sql lexicon's
140
+ * store on the database server (#3657).
141
+ *
142
+ * @example
143
+ * ```ts
144
+ * import { seededReceipt } from "./receipts";
145
+ * phase("Seed", [
146
+ * effect(seededReceipt, [
147
+ * shell("npm run db:seed"),
148
+ * ]),
149
+ * ]),
150
+ * ```
151
+ */
152
+ export function effect(receipt, steps, opts) {
153
+ if (!isEffectReceipt(receipt)) {
154
+ throw new Error("effect(): `receipt` must be the EffectReceipt declaration itself — import the const; there is no string form");
155
+ }
156
+ for (const step of steps) {
157
+ if (step.kind === "effect") {
158
+ throw new Error(`effect("${receipt.name}"): effect steps do not nest — one receipt witnesses one effect`);
159
+ }
160
+ }
161
+ const { receipt: ref, expectation } = receiptCheckInput(receipt);
162
+ return {
163
+ kind: "effect",
164
+ receipt: ref,
165
+ ...(expectation !== undefined ? { expectation } : {}),
166
+ steps,
167
+ ...(opts?.description ? { description: opts.description } : {}),
168
+ };
169
+ }
170
+ // ── Pre-built activity shortcuts ──────────────────────────────────────────────
171
+ /**
172
+ * Pull an optional `profile` override out of an opts bag, returning the
173
+ * remaining keys (which become activity args) separately.
174
+ *
175
+ * Without this, a `profile` passed in opts would spread into the activity's
176
+ * **args** rather than set the step's `profile` — a silent no-op on the step's
177
+ * timeout. The activity then runs under the default profile, so a step the
178
+ * author tagged `longInfra` (20m) would still get the 5m default. Routing it
179
+ * here lets every shortcut accept a `profile` override that actually takes.
180
+ */
181
+ function takeProfile(opts) {
182
+ if (!opts)
183
+ return { args: {} };
184
+ const { profile, ...args } = opts;
185
+ return { args, profile };
186
+ }
187
+ /**
188
+ * {@link takeProfile}'s sibling for the typed, lexicon-owned step-builder
189
+ * wrappers added in chant #1288 Stage 2 (e.g. `kubectlApply` in
190
+ * `@intentius/chant-lexicon-k8s`): also pulls `id` out of the opts bag so it
191
+ * routes to the step's `id` field (enabling `.out` — #1290) instead of
192
+ * leaking into the activity's args, the same way `profile` would without
193
+ * this split.
194
+ */
195
+ export function takeProfileAndId(opts) {
196
+ if (!opts)
197
+ return { args: {} };
198
+ const { profile, id, ...args } = opts;
199
+ return { args, profile, id };
200
+ }
201
+ /**
202
+ * Run an npm build script in the given project directory. `opts` is
203
+ * {@link ChantBuildArgs} itself, minus the positional `path` — `script`
204
+ * selects the npm script (default `build`, e.g. `build:aws`), `env` adds
205
+ * env vars.
206
+ */
207
+ export const build = (path, opts) => {
208
+ const { args, profile, id } = takeProfileAndId(opts);
209
+ return activity("chantBuild", { path, ...args }, { ...(profile ? { profile } : {}), ...(id ? { id } : {}) });
210
+ };
211
+ /** Run `kubectl apply -f <manifest>`. Defaults to the `longInfra` profile (override via `opts.profile`). */
212
+ export const kubectlApply = (manifest, opts) => {
213
+ const { args, profile } = takeProfile(opts);
214
+ return activity("kubectlApply", { manifest, ...args }, profile ?? "longInfra");
215
+ };
216
+ /** Run `helm upgrade --install`. Defaults to the `longInfra` profile (override via `opts.profile`). */
217
+ export const helmInstall = (name, chart, opts) => {
218
+ const { args, profile } = takeProfile(opts);
219
+ return activity("helmInstall", { name, chart, ...args }, profile ?? "longInfra");
220
+ };
221
+ /**
222
+ * Deploy a recorded pinned render by its `sha256:` content digest (chant
223
+ * #1242): the helm lexicon's `helmInstall` activity loads the render from
224
+ * the render store, verifies the digest, and installs those exact bytes as
225
+ * a structure-preserving wrapper chart — no deploy-time render. Defaults to
226
+ * the `longInfra` profile (override via `opts.profile`).
227
+ */
228
+ export const helmInstallPinned = (name, contentDigest, opts) => {
229
+ const { args, profile } = takeProfile(opts);
230
+ return activity("helmInstall", { name, contentDigest, ...args }, profile ?? "longInfra");
231
+ };
232
+ /**
233
+ * Poll until a Kubernetes Deployment/StatefulSet is fully rolled out. `opts` is
234
+ * {@link WaitForStackArgs} itself, minus the positional `name`. Defaults to the
235
+ * `k8sWait` profile (override via `opts.profile`).
236
+ */
237
+ export const waitForStack = (name, opts) => {
238
+ const { args, profile, id } = takeProfileAndId(opts);
239
+ return activity("waitForStack", { name, ...args }, { profile: profile ?? "k8sWait", ...(id ? { id } : {}) });
240
+ };
241
+ /** Poll any operator-backed Kubernetes resource until it reports ready, driven by a data-only readiness spec (CRD-aware; #365). Defaults to the `k8sWait` profile (override via `opts.profile`). */
242
+ export const waitForReady = (kind, name, opts) => {
243
+ const { args, profile } = takeProfile(opts);
244
+ return activity("waitForReady", { kind, name, ...args }, profile ?? "k8sWait");
245
+ };
246
+ /** Trigger and wait for a GitLab CI pipeline to complete. Defaults to the `longInfra` profile (override via `opts.profile`). */
247
+ export const gitlabPipeline = (name, opts) => {
248
+ const { args, profile } = takeProfile(opts);
249
+ return activity("gitlabPipeline", { name, ...args }, profile ?? "longInfra");
250
+ };
251
+ /**
252
+ * Take a chant lifecycle snapshot for the given environment.
253
+ * {@link LifecycleSnapshotArgs} has only `env`, which is positional here, so
254
+ * `opts` carries nothing but the step's `id` (for `.out`).
255
+ */
256
+ export const lifecycleSnapshot = (env, opts) => activity("lifecycleSnapshot", { env }, opts?.id ? { id: opts.id } : undefined);
257
+ /**
258
+ * Run an arbitrary shell command.
259
+ *
260
+ * Defaults to the `atMostOnce` profile: twenty minutes, one attempt (#2411).
261
+ * This is the one activity chant cannot know is idempotent, because its
262
+ * purpose is to run something chant does not model, so a failed command is
263
+ * not repeated unless the author says it may be. Name `fastIdempotent` or
264
+ * `longInfra` to get retries back for a command that is safe to repeat.
265
+ *
266
+ * Give the step an `id` and later steps can read what it produced —
267
+ * `sh.out.stdout`, `sh.out.stderr`, `sh.out.exitCode` (#2413) — and a value
268
+ * from an earlier step reaches the command through `env` (#2414):
269
+ *
270
+ * ```ts
271
+ * const host = shell("terraform output -raw host", { id: "host" });
272
+ * shell("./smoke.sh", { env: { HOST: host.out.stdout } });
273
+ * ```
274
+ *
275
+ * With `json: true`, stdout is parsed as JSON and published as `json`
276
+ * (#2787), so a list or an object reaches the next step or the Op's work
277
+ * lease as itself. A pick step that prints `["W-3","W-7"]` hands
278
+ * `workLease.item` its candidates:
279
+ *
280
+ * ```ts
281
+ * const pick = shell("node pick.mjs", { id: "pick", json: true });
282
+ * Op({ workLease: { item: pick.out.json }, ... });
283
+ * ```
284
+ *
285
+ * `timeout` sets how long the one attempt may run, in place of the profile's
286
+ * twenty minutes, and keeps the profile's retries: `shell("./build.sh", {
287
+ * timeout: "45m" })`. At most six hours (`MAX_STEP_TIMEOUT`).
288
+ *
289
+ * `cmd` stays a plain `string` and takes no references. A value spliced into
290
+ * a command line is a quoting decision chant would then be making on the
291
+ * author's behalf, and `env` carries the same value into the same command
292
+ * with the shell's own rules intact.
293
+ */
294
+ export const shell = (cmd, opts) => {
295
+ const { timeout, ...rest } = (opts ?? {});
296
+ const { args, profile, id } = takeProfileAndId(rest);
297
+ return activity("shellCmd", { cmd, ...args }, { profile: profile ?? "atMostOnce", ...(id ? { id } : {}), ...(timeout !== undefined ? { timeout } : {}) });
298
+ };
299
+ /**
300
+ * Archive one directory of HEAD as a release artifact (#2782): a tar written by
301
+ * `git archive`, named by its sha256, the same bytes for the same commit.
302
+ * Defaults to the `fastIdempotent` profile.
303
+ *
304
+ * ```ts
305
+ * const archive = sourceArchive("../app", { id: "archive" });
306
+ * ```
307
+ */
308
+ export const sourceArchive = (path, opts) => {
309
+ const { args, profile, id } = takeProfileAndId(opts);
310
+ return activity("sourceArchive", { path, ...args }, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
311
+ };
312
+ /**
313
+ * Plan a release (#2782): a JSON object named by the sha256 of its canonical
314
+ * form, which the ship gate binds to (`gate("ship", { plan: plan.out.digest })`)
315
+ * and the release ledger records. Defaults to the `fastIdempotent` profile.
316
+ */
317
+ export const releasePlan = (args) => {
318
+ const { args: rest, profile, id } = takeProfileAndId(args);
319
+ return activity("releasePlan", rest, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
320
+ };
321
+ /**
322
+ * Join members' change-set parts into one document (#3181). Its `digest` is
323
+ * what a combined run's gate binds: `gate("approve", { plan:
324
+ * changeSet.out.digest })`. Defaults to the `fastIdempotent` profile.
325
+ */
326
+ export const composeChangeSet = (args) => {
327
+ const { args: rest, profile, id } = takeProfileAndId(args);
328
+ return activity("composeChangeSet", rest, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
329
+ };
330
+ /** A chant member's change-set part, from `chant lifecycle plan <env> --json` (#3181). Its `part` feeds {@link composeChangeSet}. */
331
+ export const lifecyclePlanChangeSet = (args) => {
332
+ const { args: rest, profile, id } = takeProfileAndId(args);
333
+ return activity("lifecyclePlanChangeSet", rest, { profile: profile ?? "longInfra", ...(id ? { id } : {}) });
334
+ };
335
+ /** A member's change-set part from a plan file a chant or warden run wrote (#3181). Its `part` feeds {@link composeChangeSet}. */
336
+ export const readChangeSetPart = (args) => {
337
+ const { args: rest, profile, id } = takeProfileAndId(args);
338
+ return activity("readChangeSetPart", rest, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
339
+ };
340
+ /**
341
+ * Record a release in the release ledger with its plan (#2782, ws-055), once:
342
+ * a retry whose release the ledger already names records nothing. Defaults to
343
+ * the `fastIdempotent` profile.
344
+ */
345
+ export const releaseRecord = (args) => {
346
+ const { args: rest, profile, id } = takeProfileAndId(args);
347
+ return activity("releaseRecord", rest, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
348
+ };
349
+ /**
350
+ * Ask a decision point and record its answer (ws-058, #2740): the `decide`
351
+ * activity, core's since #2828. `opts` is the activity's own
352
+ * {@link DecideArgs}, minus the positional `point`, so the builder and the
353
+ * activity cannot drift. Defaults to the `fastIdempotent` profile: asking
354
+ * again with the same point, declaration and inputs returns the record
355
+ * already written. An open question stops the run `waiting`.
356
+ *
357
+ * ```ts
358
+ * decide("slice-tier", { read: { "work-item": "W-002" }, subject: "W-002" })
359
+ * ```
360
+ */
361
+ export const decide = (point, opts) => {
362
+ const { args, profile, id } = takeProfileAndId(opts);
363
+ return activity("decide", { point, ...args }, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
364
+ };
365
+ /**
366
+ * Plan a rollback of a source release (#2800): the release the site served
367
+ * before the latest one (or `to`), its plan read back from the ledger, and its
368
+ * source tree archived again from its commit and refused unless it hashes to
369
+ * the digest that plan recorded. Writes a rollback plan named by its own
370
+ * sha256, which the rollback gate binds to (`gate("rollback", { plan:
371
+ * plan.out.digest })`). Defaults to the `fastIdempotent` profile.
372
+ */
373
+ export const releaseRollbackPlan = (args) => {
374
+ const { args: rest, profile, id } = takeProfileAndId(args);
375
+ return activity("releaseRollbackPlan", rest, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
376
+ };
377
+ /**
378
+ * Record a rollback in the release ledger (#2800): the restored release's
379
+ * digest and commit, `restores` naming that release, the actor and the gate's
380
+ * approver, once. Defaults to the `fastIdempotent` profile.
381
+ */
382
+ export const releaseRollbackRecord = (args) => {
383
+ const { args: rest, profile, id } = takeProfileAndId(args);
384
+ return activity("releaseRollbackRecord", rest, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
385
+ };
386
+ /**
387
+ * Ensure a `generated-once` secret exists in the target store (#1829, epic
388
+ * #1365). The op-step surface over the same engine as the `ensure-secret`
389
+ * capability verb (`ensureSecretMaterialization`, core's
390
+ * secret-materialization module): read-then-write — if the secret exists, its
391
+ * declared key-set and any declared `metadata` are verified and the step
392
+ * stops (present means done); if absent, one value per key is minted at
393
+ * apply time and written straight to the store. Never mints over an existing
394
+ * value, never rotates implicitly; a mismatch fails the step loudly, naming
395
+ * key names and metadata keys — never values. No output of the activity
396
+ * carries secret material. The backing activity is provided by the store's
397
+ * lexicon (k8s, #1830).
398
+ */
399
+ export const ensureSecret = (name, keys, opts) => {
400
+ const { args, profile } = takeProfile(opts);
401
+ return activity("ensureSecret", { name, keys, ...args }, profile);
402
+ };
403
+ /**
404
+ * Run `chant teardown` in the given project directory. Fixed `longInfra`
405
+ * profile (not overridable). {@link ChantTeardownArgs} has only `path`
406
+ * (positional), so `opts` is just the step's `id` (for `.out`).
407
+ */
408
+ export const teardown = (path, opts) => activity("chantTeardown", { path }, { profile: "longInfra", ...(opts?.id ? { id: opts.id } : {}) });
409
+ /**
410
+ * Tear down one environment's marker-owned resources — the durable form of
411
+ * `chant lifecycle teardown <env> --yes` (#1222). The activity runs core's
412
+ * teardown engine in-process: enumerate by ownership marker (this project's
413
+ * `ownership.stack` + `env`), delete through each lexicon's `executeTeardown`
414
+ * capability, retry failures once, and fail the step when any candidate is
415
+ * still failed. Distinct from {@link teardown}, which runs a project's own
416
+ * `npm run teardown` script.
417
+ *
418
+ * The CLI's guards apply unchanged, and a production-like environment name
419
+ * needs `confirmProd: true` in `opts` — the authored counterpart of
420
+ * `--confirm-prod`, since an Op never prompts. An ordinary {@link gate} step
421
+ * placed before this one composes as usual (steps run in authored order), so
422
+ * a human approval can precede the deletion:
423
+ *
424
+ * ```ts
425
+ * phase("Teardown", [
426
+ * gate("approve-teardown", { description: "Release the staging teardown" }),
427
+ * envTeardown("staging"),
428
+ * ]),
429
+ * ```
430
+ *
431
+ * `opts` also accepts `path` (the chant project directory, default the chant
432
+ * process's cwd). Defaults to the `longInfra` profile (override via
433
+ * `opts.profile`).
434
+ */
435
+ export const envTeardown = (env, opts) => {
436
+ const { args, profile, id } = takeProfileAndId(opts);
437
+ return activity("envTeardown", { env, ...args }, { profile: profile ?? "longInfra", ...(id ? { id } : {}) });
438
+ };
439
+ /**
440
+ * Create a local k3d cluster (vanilla Kubernetes in Docker). Idempotent: skips
441
+ * creation if a cluster of the same name already exists. Defaults to the
442
+ * `longInfra` profile (creating a cluster may pull the k3s image); override via
443
+ * `opts.profile`.
444
+ *
445
+ * The implementation lives in the k3d lexicon (chant #1410) — the project's
446
+ * `chant.config.ts` must list `"k3d"` in `lexicons` for the activity to load.
447
+ * Unlike the upstream CLI, the activity leaves the caller's default kubeconfig
448
+ * and current context alone by default (chant #1411); pass
449
+ * `updateDefaultKubeconfig: true` / `switchCurrentContext: true` to opt back
450
+ * in. It resolves `{ context, kubeconfigPath? }` for reaching the cluster.
451
+ *
452
+ * `opts` accepts `servers`, `agents`, `image`, `ports` (e.g.
453
+ * `["8080:80@loadbalancer"]`), `registryCreate`, `configFile`, `timeout`,
454
+ * `updateDefaultKubeconfig`, and `switchCurrentContext`.
455
+ */
456
+ export const k3dUp = (name, opts) => {
457
+ const { args, profile } = takeProfile(opts);
458
+ return activity("k3dUp", { name, ...args }, profile ?? "longInfra");
459
+ };
460
+ /**
461
+ * Delete a local k3d cluster. Defaults to the `fastIdempotent` profile
462
+ * (override via `opts.profile`). Implementation lives in the k3d lexicon
463
+ * (chant #1410) — requires `"k3d"` in the project's `lexicons`.
464
+ */
465
+ export const k3dDown = (name, opts) => {
466
+ const { args, profile } = takeProfile(opts);
467
+ return activity("k3dDown", { name, ...args }, profile ?? "fastIdempotent");
468
+ };
469
+ /**
470
+ * Run the pinned k3s installer against a reachable host (`role`: `"server"`
471
+ * or `"agent"`). Idempotent on an already-installed matching version.
472
+ * Defaults to the `longInfra` profile (the installer downloads and starts
473
+ * the binary); override via `opts.profile`.
474
+ *
475
+ * The implementation lives in the k3s lexicon (chant #1601) — the project's
476
+ * `chant.config.ts` must list `"k3s"` in `lexicons` for the activity to load.
477
+ * Bounded exactly as `k3dUp`/`k3dDown` (chant #1410): drives the reachable-host
478
+ * case only, no host provisioning, no SSH orchestration.
479
+ *
480
+ * `opts` accepts `configFile` (required — path to the chant-emitted
481
+ * config.yaml, passed as `--config`), `version` (overrides the lexicon's
482
+ * pinned `INSTALL_K3S_VERSION`), and `tokenFile` (path to a file holding the
483
+ * join token, passed to the installer as `K3S_TOKEN_FILE`). There is no
484
+ * `token` option — the join secret's value never travels through this step;
485
+ * only a file path does (the #1601 token boundary, same stance as #1365).
486
+ */
487
+ export const k3sInstall = (role, opts) => {
488
+ const { args, profile } = takeProfile(opts);
489
+ return activity("k3sInstall", { role, ...args }, profile ?? "longInfra");
490
+ };
491
+ /**
492
+ * Uninstall k3s from a reachable host (`role`: `"server"` or `"agent"`).
493
+ * Defaults to the `fastIdempotent` profile (override via `opts.profile`).
494
+ * Implementation lives in the k3s lexicon (chant #1601) — requires `"k3s"`
495
+ * in the project's `lexicons`. A host where k3s was never installed is a
496
+ * no-op success, the same shape as `k3dDown` against an already-gone
497
+ * cluster.
498
+ */
499
+ export const k3sUninstall = (role, opts) => {
500
+ const { args, profile } = takeProfile(opts);
501
+ return activity("k3sUninstall", { role, ...args }, profile ?? "fastIdempotent");
502
+ };
503
+ /**
504
+ * Boot a local Floci AWS emulator in Docker and point subsequent steps at it —
505
+ * sets `AWS_ENDPOINT_URL` + test creds in the process env so a following
506
+ * `cloudformation` apply targets the emulator (local executor). Idempotent:
507
+ * reuses a running container of the same name. Defaults to the `longInfra`
508
+ * profile (the image may pull); override via `opts.profile`.
509
+ *
510
+ * `opts` accepts `name`, `port`, `image`, `dockerSocket` (mount the docker
511
+ * socket for the ECR backing registry), `region`, `readyService`, `timeoutMs`.
512
+ */
513
+ export const flociUp = (opts) => {
514
+ const { args, profile } = takeProfile(opts);
515
+ return activity("flociUp", args, profile ?? "longInfra");
516
+ };
517
+ /** Stop and remove the local Floci emulator container. Defaults to the `fastIdempotent` profile (override via `opts.profile`). */
518
+ export const flociDown = (opts) => {
519
+ const { args, profile } = takeProfile(opts);
520
+ return activity("flociDown", args, profile ?? "fastIdempotent");
521
+ };
522
+ /**
523
+ * Boot a local floci-az (Azure emulator) and return its ARM `endpoint` — the
524
+ * typed twin of {@link flociUp} for `azApply`, so the emulator lifecycle is a
525
+ * modeled step, not a `docker run` shell. Provided by the azure lexicon; loaded
526
+ * when the project lists `azure`. Idempotent; defaults to the `longInfra`
527
+ * profile. `opts` accepts `name`, `port`, `image`, `timeoutMs`, `intervalMs`.
528
+ */
529
+ export const flociAzUp = (opts) => {
530
+ const { args, profile } = takeProfile(opts);
531
+ return activity("flociAzUp", args, profile ?? "longInfra");
532
+ };
533
+ /** Stop and remove the local floci-az container. Defaults to the `fastIdempotent` profile (override via `opts.profile`). */
534
+ export const flociAzDown = (opts) => {
535
+ const { args, profile } = takeProfile(opts);
536
+ return activity("flociAzDown", args, profile ?? "fastIdempotent");
537
+ };
538
+ /**
539
+ * Boot a local floci-gcp (GCP emulator) and return its `endpoint` — the typed
540
+ * twin of {@link flociUp} for `gcpApply`, so the emulator lifecycle is a modeled
541
+ * step, not a `docker run` shell. Provided by the gcp lexicon; loaded when the
542
+ * project lists `gcp`. Idempotent; defaults to the `longInfra` profile. `opts`
543
+ * accepts `name`, `port`, `image`, `timeoutMs`, `intervalMs`.
544
+ */
545
+ export const flociGcpUp = (opts) => {
546
+ const { args, profile } = takeProfile(opts);
547
+ return activity("flociGcpUp", args, profile ?? "longInfra");
548
+ };
549
+ /** Stop and remove the local floci-gcp container. Defaults to the `fastIdempotent` profile (override via `opts.profile`). */
550
+ export const flociGcpDown = (opts) => {
551
+ const { args, profile } = takeProfile(opts);
552
+ return activity("flociGcpDown", args, profile ?? "fastIdempotent");
553
+ };
554
+ /**
555
+ * Assert an HTTP endpoint responds as expected — a typed verify step replacing
556
+ * `shell("curl -fs ...")`. Fails the phase if the status/body doesn't match.
557
+ * Defaults to the `fastIdempotent` profile. `opts` accepts `method`, `status`
558
+ * (default any 2xx), `contains` (body substring), `retries`, `intervalMs`.
559
+ */
560
+ export const httpCheck = (url, opts) => {
561
+ const { args, profile, id } = takeProfileAndId(opts);
562
+ return activity("httpCheck", { url, ...args }, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
563
+ };
564
+ /**
565
+ * Ensure an Azure resource group exists before an ARM apply. `az deployment
566
+ * group create` (the `arm` apply target) fails without its group, so place this
567
+ * before the deploy phase. Idempotent. Defaults to the `fastIdempotent` profile
568
+ * (override via `opts.profile`). `opts` accepts `location` (default `eastus`).
569
+ */
570
+ export const azGroupEnsure = (resourceGroup, opts) => {
571
+ const { args, profile } = takeProfile(opts);
572
+ return activity("azGroupEnsure", { resourceGroup, ...args }, profile ?? "fastIdempotent");
573
+ };
574
+ /** Delete an Azure resource group and its contents (non-blocking). Defaults to the `fastIdempotent` profile (override via `opts.profile`). */
575
+ export const azGroupDelete = (resourceGroup, opts) => {
576
+ const { args, profile } = takeProfile(opts);
577
+ return activity("azGroupDelete", { resourceGroup, ...args }, profile ?? "fastIdempotent");
578
+ };
579
+ /**
580
+ * Apply chant's built ARM template directly to the ARM resource API — the Azure
581
+ * twin of {@link gcpApply}. Targets floci-az's resource CRUD (which `az deployment`
582
+ * can't, floci-az having no deployments provider) or real Azure by endpoint
583
+ * override; ensures the resource group first. Defaults to the `longInfra` profile.
584
+ *
585
+ * `opts` requires `resourceGroup`; accepts `location`, `endpoint` (floci-az
586
+ * `http://localhost:4577`), `subscriptionId`, and `prune` (owned-only prune of
587
+ * chant-managed resources no longer in the template — destructive, off by default).
588
+ */
589
+ export const azApply = (templatePath, opts) => {
590
+ const { args, profile } = takeProfile(opts);
591
+ return activity("azApply", { templatePath, ...args }, profile ?? "longInfra");
592
+ };
593
+ /** Delete the Azure (ARM) resources in a built template — the inverse of {@link azApply}. Defaults to the `longInfra` profile (override via `opts.profile`). `opts` requires `resourceGroup`. */
594
+ export const azDelete = (templatePath, opts) => {
595
+ const { args, profile } = takeProfile(opts);
596
+ return activity("azDelete", { templatePath, ...args }, profile ?? "longInfra");
597
+ };
598
+ /**
599
+ * Deploy a built CloudFormation template by calling the CloudFormation API
600
+ * directly (create-or-update + poll) — the direct twin of {@link azApply} /
601
+ * {@link gcpApply} for AWS, targeting a local Floci emulator or real AWS by
602
+ * endpoint override. Speaks the CFN API over HTTP rather than shelling `aws` —
603
+ * `nativeApply({ target: "cloudformation" })` routes here too (#1449). Provided by
604
+ * the aws lexicon; loaded when the project lists `aws`. Defaults to the
605
+ * `longInfra` profile. `opts` requires `stackName`; accepts `endpoint`, `region`,
606
+ * `capabilities`, `timeoutMs`, `intervalMs`.
607
+ */
608
+ export const awsApply = (templatePath, opts) => {
609
+ const { args, profile } = takeProfile(opts);
610
+ return activity("awsApply", { templatePath, ...args }, profile ?? "longInfra");
611
+ };
612
+ /** Delete a CloudFormation stack — the inverse of {@link awsApply}. Defaults to the `longInfra` profile (override via `opts.profile`). `opts` requires `stackName`. */
613
+ export const awsDelete = (templatePath, opts) => {
614
+ const { args, profile } = takeProfile(opts);
615
+ return activity("awsDelete", { templatePath, ...args }, profile ?? "longInfra");
616
+ };
617
+ /**
618
+ * Apply chant's built GCP (CNRM) resources directly to their GCP REST APIs,
619
+ * targeting a local floci-gcp emulator or real GCP by endpoint override — the
620
+ * native GCP applier (#706 starter #711). `nativeApply({ target: "gcp" })`
621
+ * routes here too (#1449). Defaults to the `longInfra` profile (override via
622
+ * `opts.profile`).
623
+ *
624
+ * `opts` accepts `endpoint` (default `GCP_ENDPOINT_URL` env / each kind's
625
+ * real-GCP host) and `project` (default `GOOGLE_CLOUD_PROJECT` env / the CNRM
626
+ * project-id annotation).
627
+ */
628
+ export const gcpApply = (manifestPath, opts) => {
629
+ const { args, profile } = takeProfile(opts);
630
+ return activity("gcpApply", { manifestPath, ...args }, profile ?? "longInfra");
631
+ };
632
+ /** Delete the GCP (CNRM) resources in a built manifest — the inverse of {@link gcpApply}. Defaults to the `longInfra` profile (override via `opts.profile`). */
633
+ export const gcpDelete = (manifestPath, opts) => {
634
+ const { args, profile } = takeProfile(opts);
635
+ return activity("gcpDelete", { manifestPath, ...args }, profile ?? "longInfra");
636
+ };
637
+ // ── Sprites (#762) — imperative, checkpointable sandbox steps ──────────────────
638
+ //
639
+ // The builder and the executor-side activity function share a name (e.g.
640
+ // `spriteCreate`), and that is intentional: the builder here returns an
641
+ // `activity("spriteCreate", ...)` step; `loadActivities` loads the function of
642
+ // the same name from the fly lexicon to run the HTTP. They live in
643
+ // different modules and are both exported — exactly how `flapsUp`/`flapsDown`
644
+ // already work. Op files import these builders; the executor resolves the
645
+ // function by name. Endpoint override + bearer are read by the activity from
646
+ // `SPRITES_BASE_URL` / `SPRITES_API_TOKEN` (or an explicit `endpoint` arg).
647
+ /** Create a sprite with a caller-chosen `name` (used as its id). Defaults to the `longInfra` profile (override via `profile`). */
648
+ export const spriteCreate = (args) => {
649
+ const { profile, ...rest } = args;
650
+ return activity("spriteCreate", rest, profile ?? "longInfra");
651
+ };
652
+ /** Run a command in a sprite; a non-zero exit fails the step. Defaults to the `longInfra` profile (override via `profile`). */
653
+ export const spriteExec = (args) => {
654
+ const { profile, ...rest } = args;
655
+ return activity("spriteExec", rest, profile ?? "longInfra");
656
+ };
657
+ /** Checkpoint a sprite under a caller-chosen `comment` (the transactional boundary). Defaults to the `longInfra` profile (override via `profile`). */
658
+ export const spriteCheckpoint = (args) => {
659
+ const { profile, ...rest } = args;
660
+ return activity("spriteCheckpoint", rest, profile ?? "longInfra");
661
+ };
662
+ /**
663
+ * Restore a sprite — the checkpoint-as-compensation step (S5). Target an
664
+ * explicit `checkpoint` id, or the newest checkpoint carrying `comment`, or (with
665
+ * neither) the newest checkpoint overall. Defaults to the `longInfra` profile
666
+ * (override via `profile`).
667
+ */
668
+ export const spriteRestore = (args) => {
669
+ const { profile, ...rest } = args;
670
+ return activity("spriteRestore", rest, profile ?? "longInfra");
671
+ };
672
+ /** List a sprite's checkpoints (`[{ id, comment, create_time, is_auto }]`). Defaults to the `fastIdempotent` profile (override via `profile`). */
673
+ export const listCheckpoints = (args) => {
674
+ const { profile, ...rest } = args;
675
+ return activity("listCheckpoints", rest, profile ?? "fastIdempotent");
676
+ };
677
+ /** Destroy a sprite (idempotent). Defaults to the `fastIdempotent` profile (override via `profile`). */
678
+ export const spriteDestroy = (args) => {
679
+ const { profile, ...rest } = args;
680
+ return activity("spriteDestroy", rest, profile ?? "fastIdempotent");
681
+ };
682
+ // ── Sprite filesystem steps (#848) — stage inputs / read results without exec ──
683
+ //
684
+ // Same builder/activity split as the lifecycle steps above: these author
685
+ // `activity("spriteWriteFile", ...)` steps; `loadActivities(["fly"])` binds them
686
+ // to the implementations in fly's `op/activities/sprite-fs.ts`. All default to
687
+ // `fastIdempotent` — write/remove converge on the same end state under retry.
688
+ /** Write a file into a sprite. Defaults to the `fastIdempotent` profile (override via `profile`). */
689
+ export const spriteWriteFile = (args) => {
690
+ const { profile, ...rest } = args;
691
+ return activity("spriteWriteFile", rest, profile ?? "fastIdempotent");
692
+ };
693
+ /** Read a file from a sprite (returns `{ content }`). Defaults to the `fastIdempotent` profile (override via `profile`). */
694
+ export const spriteReadFile = (args) => {
695
+ const { profile, ...rest } = args;
696
+ return activity("spriteReadFile", rest, profile ?? "fastIdempotent");
697
+ };
698
+ /** List a directory in a sprite (returns `[{ name, type, size? }]`). Defaults to the `fastIdempotent` profile (override via `profile`). */
699
+ export const spriteListDir = (args) => {
700
+ const { profile, ...rest } = args;
701
+ return activity("spriteListDir", rest, profile ?? "fastIdempotent");
702
+ };
703
+ /** Remove a path in a sprite (idempotent). Defaults to the `fastIdempotent` profile (override via `profile`). */
704
+ export const spriteRemove = (args) => {
705
+ const { profile, ...rest } = args;
706
+ return activity("spriteRemove", rest, profile ?? "fastIdempotent");
707
+ };
708
+ // ── Sprite config reconcile steps (#849) — desired-state on a live Sprite ──────
709
+ //
710
+ // Apply-activities, not a declarable resource: `spriteApplyNetworkPolicy`
711
+ // whole-object-replaces the outbound policy; `spriteApplyServices` create-or-
712
+ // updates each desired background service (optionally starting them in
713
+ // dependency order). Validation runs pure before any HTTP. `loadActivities(["fly"])`
714
+ // binds the impls in fly's `op/activities/sprite-config.ts`.
715
+ /** Reconcile a sprite's outbound network policy (whole-object replace). Defaults to the `fastIdempotent` profile (override via `profile`). */
716
+ export const spriteApplyNetworkPolicy = (args) => {
717
+ const { profile, ...rest } = args;
718
+ return activity("spriteApplyNetworkPolicy", rest, profile ?? "fastIdempotent");
719
+ };
720
+ /**
721
+ * Reconcile a sprite's background services (create-or-update, optionally
722
+ * start). With an `id`, through the Sprites API and its `services`; without
723
+ * one, inside the sprite through sprite-env, applying the box block's
724
+ * services (`box: true`, #2880): `only` names some of them, `start` starts
725
+ * the applied ones that are not running, `restart` restarts the converged
726
+ * ones. Defaults to the `fastIdempotent` profile (override via `profile`).
727
+ */
728
+ export const spriteApplyServices = (args) => {
729
+ const { profile, ...rest } = args;
730
+ return activity("spriteApplyServices", rest, profile ?? "fastIdempotent");
731
+ };
732
+ // ── Sprite keep-alive Task steps (#847) — hold a Sprite active for a session ──
733
+ //
734
+ // A hold stops the Sprite pausing while a session runs; release frees it. A
735
+ // session that can outlast the 1-hour task cap refreshes in its own loop.
736
+ // `loadActivities(["fly"])` binds the impls in fly's `op/activities/sprite-tasks.ts`.
737
+ /** Create a keep-alive task holding the sprite active. Defaults to the `fastIdempotent` profile (override via `profile`). */
738
+ export const spriteTaskCreate = (args) => {
739
+ const { profile, ...rest } = args;
740
+ return activity("spriteTaskCreate", rest, profile ?? "fastIdempotent");
741
+ };
742
+ /** Refresh a keep-alive task's expiry. Defaults to the `fastIdempotent` profile (override via `profile`). */
743
+ export const spriteTaskRefresh = (args) => {
744
+ const { profile, ...rest } = args;
745
+ return activity("spriteTaskRefresh", rest, profile ?? "fastIdempotent");
746
+ };
747
+ /** Release a keep-alive task (idempotent). Defaults to the `fastIdempotent` profile (override via `profile`). */
748
+ export const spriteTaskRelease = (args) => {
749
+ const { profile, ...rest } = args;
750
+ return activity("spriteTaskRelease", rest, profile ?? "fastIdempotent");
751
+ };
752
+ /**
753
+ * Boot a local spritzer (Fly Sprites API emulator) in Docker — the typed twin of
754
+ * `flociGcpUp` for Sprites. Resolves to the `spritesUp` activity. Defaults to the
755
+ * `longInfra` profile (the image may pull); override via `profile`.
756
+ */
757
+ export const spritesUp = (args = {}) => {
758
+ const { profile, ...rest } = args;
759
+ return activity("spritesUp", rest, profile ?? "longInfra");
760
+ };
761
+ /** Stop and remove the local spritzer container. Resolves to the `spritesDown` activity. Defaults to the `fastIdempotent` profile (override via `profile`). */
762
+ export const spritesDown = (args = {}) => {
763
+ const { profile, ...rest } = args;
764
+ return activity("spritesDown", rest, profile ?? "fastIdempotent");
765
+ };
766
+ /**
767
+ * Gate an apply on organizational policy: build the project and run its
768
+ * `lint.policies` over the resolved resources, failing the step on any
769
+ * violation so no later phase runs. Place it before the apply phase. `env` (or `ownership.env`) lets a
770
+ * policy branch on environment. Single-attempt (`policyCheck` profile) — a
771
+ * deterministic violation is not retried.
772
+ */
773
+ export const policyGate = (opts) => {
774
+ const path = opts?.path ?? ".";
775
+ const env = opts?.env;
776
+ return activity("policyGate", { path, ...(env !== undefined ? { env } : {}) }, { profile: "policyCheck", ...(opts?.id ? { id: opts.id } : {}) });
777
+ };
778
+ /**
779
+ * Attach evidence to an acceptance criterion of the work item the run holds
780
+ * the lease on (#2772), for an Op that declares `workLease`. The run's lease
781
+ * is passed for it, so the write happens only while the lease is still the
782
+ * run's. `opts` takes the `result` (pass or fail), a `title`, and a `url` or a
783
+ * workspace `path` to pin by hash. A `manual` criterion is refused: the run
784
+ * is the item's implementer. The `atMostOnce` profile: each attempt appends.
785
+ */
786
+ export const workEvidence = (criterion, opts) => {
787
+ const { id, ...rest } = opts;
788
+ return activity("workEvidence", { criterion, lease: stepOutput(WORK_LEASE_STEP_ID), ...rest }, { profile: "atMostOnce", ...(id ? { id } : {}) });
789
+ };
790
+ /**
791
+ * Run an external CloudFormation Guard rules pack against the project's built
792
+ * CloudFormation template (chant #522). `opts` is {@link GuardValidateArgs}
793
+ * itself, minus the positional `rules`; `template` defaults (inside the
794
+ * activity) to `<path>/template.json`. Fixed `policyCheck` profile — same
795
+ * reasoning as {@link policyGate}: a deterministic policy check is
796
+ * single-attempt — and not overridable.
797
+ */
798
+ export const guardValidate = (rules, opts) => {
799
+ const { id, ...rest } = (opts ?? {});
800
+ return activity("guardValidate", { rules, ...rest }, { profile: "policyCheck", ...(id ? { id } : {}) });
801
+ };