@intentius/chant 0.124.13 → 0.124.15

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 (991) 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.d.ts +6 -0
  35. package/dist/build.d.ts.map +1 -1
  36. package/dist/build.js +669 -0
  37. package/dist/builder.js +44 -0
  38. package/dist/cdk/advise.js +30 -0
  39. package/dist/cdk/assembly.js +122 -0
  40. package/dist/cdk/graph.js +444 -0
  41. package/dist/cdk/tier-map.js +64 -0
  42. package/dist/cdk/types.js +24 -0
  43. package/dist/change-set.d.ts +24 -2
  44. package/dist/change-set.d.ts.map +1 -1
  45. package/dist/change-set.js +361 -0
  46. package/dist/child-project.js +21 -0
  47. package/dist/ci-jobs.d.ts +227 -0
  48. package/dist/ci-jobs.d.ts.map +1 -0
  49. package/dist/ci-jobs.js +448 -0
  50. package/dist/claimed-fields.js +135 -0
  51. package/dist/cli/build-options.js +70 -0
  52. package/dist/cli/build-params-cli.js +139 -0
  53. package/dist/cli/command-group.js +123 -0
  54. package/dist/cli/commands/audit-agents.js +326 -0
  55. package/dist/cli/commands/audit.js +571 -0
  56. package/dist/cli/commands/build.js +920 -0
  57. package/dist/cli/commands/carve-apply.js +153 -0
  58. package/dist/cli/commands/carve-bridge.js +201 -0
  59. package/dist/cli/commands/carve-emit.js +332 -0
  60. package/dist/cli/commands/carve-status.js +119 -0
  61. package/dist/cli/commands/carve.js +204 -0
  62. package/dist/cli/commands/check-lexicon-docs.js +79 -0
  63. package/dist/cli/commands/check-lexicon-examples.js +177 -0
  64. package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
  65. package/dist/cli/commands/check-lexicon-mcp.js +82 -0
  66. package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
  67. package/dist/cli/commands/check-lexicon-plugin.js +104 -0
  68. package/dist/cli/commands/check-lexicon.js +766 -0
  69. package/dist/cli/commands/describe.js +85 -0
  70. package/dist/cli/commands/diff.js +175 -0
  71. package/dist/cli/commands/doctor.js +350 -0
  72. package/dist/cli/commands/import-agents.js +155 -0
  73. package/dist/cli/commands/import.js +670 -0
  74. package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
  75. package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
  76. package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
  77. package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
  78. package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
  79. package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
  80. package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
  81. package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
  82. package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
  83. package/dist/cli/commands/init-lexicon.js +172 -0
  84. package/dist/cli/commands/init.js +381 -0
  85. package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
  86. package/dist/cli/commands/lexicon-surface-diff.js +145 -0
  87. package/dist/cli/commands/licenses.js +125 -0
  88. package/dist/cli/commands/lint.d.ts.map +1 -1
  89. package/dist/cli/commands/lint.js +948 -0
  90. package/dist/cli/commands/list.js +63 -0
  91. package/dist/cli/commands/migrate.d.ts.map +1 -1
  92. package/dist/cli/commands/migrate.js +423 -0
  93. package/dist/cli/commands/onboard.js +403 -0
  94. package/dist/cli/commands/pinned-upgrade.js +191 -0
  95. package/dist/cli/commands/update.js +194 -0
  96. package/dist/cli/commands/vendor.js +217 -0
  97. package/dist/cli/conflict-check.js +104 -0
  98. package/dist/cli/debug.js +8 -0
  99. package/dist/cli/format.js +104 -0
  100. package/dist/cli/handlers/build.js +267 -0
  101. package/dist/cli/handlers/carve-apply.js +30 -0
  102. package/dist/cli/handlers/carve-bridge.js +28 -0
  103. package/dist/cli/handlers/carve-emit.js +50 -0
  104. package/dist/cli/handlers/carve-status.js +26 -0
  105. package/dist/cli/handlers/carve.js +40 -0
  106. package/dist/cli/handlers/change-set.js +46 -0
  107. package/dist/cli/handlers/components.js +730 -0
  108. package/dist/cli/handlers/dev.js +113 -0
  109. package/dist/cli/handlers/emulator.js +233 -0
  110. package/dist/cli/handlers/explain.js +54 -0
  111. package/dist/cli/handlers/fan-out.js +422 -0
  112. package/dist/cli/handlers/gate-resume.js +275 -0
  113. package/dist/cli/handlers/generate.js +84 -0
  114. package/dist/cli/handlers/graph.js +969 -0
  115. package/dist/cli/handlers/init.js +102 -0
  116. package/dist/cli/handlers/lifecycle.js +1727 -0
  117. package/dist/cli/handlers/lint.js +62 -0
  118. package/dist/cli/handlers/migrate.js +48 -0
  119. package/dist/cli/handlers/misc.js +391 -0
  120. package/dist/cli/handlers/operator.js +1162 -0
  121. package/dist/cli/handlers/override-approve.js +102 -0
  122. package/dist/cli/handlers/pr.js +503 -0
  123. package/dist/cli/handlers/promote.js +342 -0
  124. package/dist/cli/handlers/run-generate.js +206 -0
  125. package/dist/cli/handlers/run-wave.js +66 -0
  126. package/dist/cli/handlers/run.js +1191 -0
  127. package/dist/cli/handlers/scenario.js +325 -0
  128. package/dist/cli/handlers/search.js +924 -0
  129. package/dist/cli/handlers/serve.js +32 -0
  130. package/dist/cli/handlers/vendor.js +154 -0
  131. package/dist/cli/index.js +3 -0
  132. package/dist/cli/is-entry-point.js +23 -0
  133. package/dist/cli/lsp/capabilities.js +28 -0
  134. package/dist/cli/lsp/diagnostics.js +34 -0
  135. package/dist/cli/lsp/server.js +329 -0
  136. package/dist/cli/main.d.ts.map +1 -1
  137. package/dist/cli/main.js +2540 -0
  138. package/dist/cli/mcp/lifecycle-tools.js +80 -0
  139. package/dist/cli/mcp/op-tools.js +306 -0
  140. package/dist/cli/mcp/resource-handlers.js +258 -0
  141. package/dist/cli/mcp/resources/context.js +85 -0
  142. package/dist/cli/mcp/server.js +353 -0
  143. package/dist/cli/mcp/tools/build.js +111 -0
  144. package/dist/cli/mcp/tools/composites.js +95 -0
  145. package/dist/cli/mcp/tools/explain.js +166 -0
  146. package/dist/cli/mcp/tools/import.js +49 -0
  147. package/dist/cli/mcp/tools/lint.js +41 -0
  148. package/dist/cli/mcp/tools/scaffold.js +111 -0
  149. package/dist/cli/mcp/tools/search.js +112 -0
  150. package/dist/cli/mcp/types.js +1 -0
  151. package/dist/cli/mcp/workspace-plugins.js +91 -0
  152. package/dist/cli/mcp/workspace-tools.d.ts +1 -1
  153. package/dist/cli/mcp/workspace-tools.js +564 -0
  154. package/dist/cli/mcp-config.js +70 -0
  155. package/dist/cli/plugins.js +313 -0
  156. package/dist/cli/registry.js +23 -0
  157. package/dist/cli/reporters/stylish.js +329 -0
  158. package/dist/cli/version.js +15 -0
  159. package/dist/cli/watch.js +79 -0
  160. package/dist/codegen/bound-property-types.js +82 -0
  161. package/dist/codegen/coverage.js +119 -0
  162. package/dist/codegen/docs-file-markers.js +60 -0
  163. package/dist/codegen/docs-pages.js +115 -0
  164. package/dist/codegen/docs-rule-scanning.js +164 -0
  165. package/dist/codegen/docs-rules.js +76 -0
  166. package/dist/codegen/docs-sections.js +117 -0
  167. package/dist/codegen/docs-sidebar.js +65 -0
  168. package/dist/codegen/docs-types.js +4 -0
  169. package/dist/codegen/docs.js +356 -0
  170. package/dist/codegen/fetch.js +340 -0
  171. package/dist/codegen/generate-post-synth-barrel.js +63 -0
  172. package/dist/codegen/generate-registry.js +71 -0
  173. package/dist/codegen/generate-runtime-index.js +56 -0
  174. package/dist/codegen/generate-typescript.js +119 -0
  175. package/dist/codegen/generate.js +115 -0
  176. package/dist/codegen/json-patch.js +141 -0
  177. package/dist/codegen/json-schema-to-ts.js +344 -0
  178. package/dist/codegen/json-schema.js +246 -0
  179. package/dist/codegen/lexicon-regen.js +412 -0
  180. package/dist/codegen/naming.js +217 -0
  181. package/dist/codegen/okf-lexicon.js +245 -0
  182. package/dist/codegen/package.js +150 -0
  183. package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
  184. package/dist/codegen/pinned-upgrade.js +494 -0
  185. package/dist/codegen/registry.js +60 -0
  186. package/dist/codegen/rehype-base-url.mjs +68 -0
  187. package/dist/codegen/rolling-upgrade.js +217 -0
  188. package/dist/codegen/surface-snapshot.js +537 -0
  189. package/dist/codegen/testdata/postgres-tags.json +242 -0
  190. package/dist/codegen/topo-sort.js +36 -0
  191. package/dist/codegen/typecheck.js +115 -0
  192. package/dist/codegen/validate.js +200 -0
  193. package/dist/codegen/version-bump.js +35 -0
  194. package/dist/components/auto-release.js +143 -0
  195. package/dist/components/builders.js +47 -0
  196. package/dist/components/capability-plugin-loader.js +175 -0
  197. package/dist/components/capability-plugin-schema.js +46 -0
  198. package/dist/components/capability-plugin.js +99 -0
  199. package/dist/components/capability.js +60 -0
  200. package/dist/components/changed-files.js +72 -0
  201. package/dist/components/cli-support.js +427 -0
  202. package/dist/components/component.js +120 -0
  203. package/dist/components/component.schema.json +271 -0
  204. package/dist/components/config-defaults.js +130 -0
  205. package/dist/components/deploy-units.js +60 -0
  206. package/dist/components/discover.d.ts.map +1 -1
  207. package/dist/components/discover.js +189 -0
  208. package/dist/components/driver-output.js +86 -0
  209. package/dist/components/driver.js +728 -0
  210. package/dist/components/fan-out-output.js +165 -0
  211. package/dist/components/fan-out-record.js +94 -0
  212. package/dist/components/fan-out-run.js +373 -0
  213. package/dist/components/fan-out-support.js +60 -0
  214. package/dist/components/fan-out.js +273 -0
  215. package/dist/components/gate-plan.js +41 -0
  216. package/dist/components/gated-wave-pipeline.js +46 -0
  217. package/dist/components/index.js +24 -0
  218. package/dist/components/layers.js +28 -0
  219. package/dist/components/manifest-persistence.js +108 -0
  220. package/dist/components/pilots/alb-ecs.pilot.js +59 -0
  221. package/dist/components/pilots/dynamodb.pilot.js +51 -0
  222. package/dist/components/pilots/jar-emr.pilot.js +65 -0
  223. package/dist/components/pilots/lambda.pilot.js +52 -0
  224. package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
  225. package/dist/components/pilots/project.js +12 -0
  226. package/dist/components/pr-pipeline.d.ts.map +1 -1
  227. package/dist/components/pr-pipeline.js +135 -0
  228. package/dist/components/pr-run.js +363 -0
  229. package/dist/components/presets/ecs-fargate.js +72 -0
  230. package/dist/components/presets/index.js +28 -0
  231. package/dist/components/presets/lambda.js +34 -0
  232. package/dist/components/presets/single-host-compose.js +41 -0
  233. package/dist/components/promote.js +549 -0
  234. package/dist/components/registry.js +34 -0
  235. package/dist/components/run-progress.js +33 -0
  236. package/dist/components/sandbox/driver.d.ts.map +1 -1
  237. package/dist/components/sandbox/driver.js +93 -0
  238. package/dist/components/sandbox/run.js +115 -0
  239. package/dist/components/starter-plugin.js +104 -0
  240. package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
  241. package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
  242. package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
  243. package/dist/components/verbs/bom-writer.js +287 -0
  244. package/dist/components/verbs/build-archive.js +188 -0
  245. package/dist/components/verbs/build.js +142 -0
  246. package/dist/components/verbs/cloud-executor.js +110 -0
  247. package/dist/components/verbs/component-bom.js +125 -0
  248. package/dist/components/verbs/ensure-secret.js +50 -0
  249. package/dist/components/verbs/index.js +61 -0
  250. package/dist/components/verbs/license-policy.js +75 -0
  251. package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
  252. package/dist/components/verbs/process-runner.js +78 -0
  253. package/dist/components/verbs/r2-sync.js +93 -0
  254. package/dist/components/verbs/reproducibility.js +62 -0
  255. package/dist/components/verbs/run-agent.js +577 -0
  256. package/dist/components/verbs/sbom-generator.js +119 -0
  257. package/dist/components/verbs/sbom.js +97 -0
  258. package/dist/components/verbs/shell.js +32 -0
  259. package/dist/components/verbs/sign.js +221 -0
  260. package/dist/components/verbs/stub.js +28 -0
  261. package/dist/components/verbs/tool-sbom-generator.js +154 -0
  262. package/dist/components/verbs/verify.js +112 -0
  263. package/dist/components/verbs/vex.js +131 -0
  264. package/dist/components/verbs/vuln-gate.js +152 -0
  265. package/dist/components/verbs/vuln-scan.js +288 -0
  266. package/dist/components/verbs/wait-verify.js +106 -0
  267. package/dist/components/verbs/wrangler.js +179 -0
  268. package/dist/components/wave-plan.js +102 -0
  269. package/dist/composite.d.ts +10 -2
  270. package/dist/composite.d.ts.map +1 -1
  271. package/dist/composite.js +313 -0
  272. package/dist/config-import.d.ts.map +1 -1
  273. package/dist/config-import.js +22 -0
  274. package/dist/config-sandbox.js +122 -0
  275. package/dist/config-static.js +206 -0
  276. package/dist/config.js +605 -0
  277. package/dist/content-digest.js +23 -0
  278. package/dist/declarable.js +114 -0
  279. package/dist/deep-observation.js +437 -0
  280. package/dist/detectLexicon.js +54 -0
  281. package/dist/discovery/cache.js +70 -0
  282. package/dist/discovery/collect.d.ts +2 -1
  283. package/dist/discovery/collect.d.ts.map +1 -1
  284. package/dist/discovery/collect.js +223 -0
  285. package/dist/discovery/cycles.js +95 -0
  286. package/dist/discovery/entity-wire-codec.js +391 -0
  287. package/dist/discovery/entity-wire.js +42 -0
  288. package/dist/discovery/files.js +121 -0
  289. package/dist/discovery/fold-import.d.ts.map +1 -1
  290. package/dist/discovery/fold-import.js +4073 -0
  291. package/dist/discovery/fold-rank.js +292 -0
  292. package/dist/discovery/graph.js +115 -0
  293. package/dist/discovery/host-composite.d.ts +35 -0
  294. package/dist/discovery/host-composite.d.ts.map +1 -0
  295. package/dist/discovery/host-composite.js +93 -0
  296. package/dist/discovery/import.d.ts.map +1 -1
  297. package/dist/discovery/import.js +65 -0
  298. package/dist/discovery/index.d.ts +9 -0
  299. package/dist/discovery/index.d.ts.map +1 -1
  300. package/dist/discovery/index.js +333 -0
  301. package/dist/discovery/param-deps.js +487 -0
  302. package/dist/discovery/resolve.js +39 -0
  303. package/dist/discovery/sandbox/bundle.js +214 -0
  304. package/dist/discovery/sandbox/child-errors.js +26 -0
  305. package/dist/discovery/sandbox/config-run.js +100 -0
  306. package/dist/discovery/sandbox/config-wire.js +183 -0
  307. package/dist/discovery/sandbox/driver.d.ts.map +1 -1
  308. package/dist/discovery/sandbox/driver.js +333 -0
  309. package/dist/discovery/sandbox/fork.js +229 -0
  310. package/dist/discovery/sandbox/policy-run.js +142 -0
  311. package/dist/discovery/sandbox/policy-wire.js +152 -0
  312. package/dist/discovery/sandbox/run.js +77 -0
  313. package/dist/discovery/specifier-resolve.js +320 -0
  314. package/dist/discovery/walk.js +284 -0
  315. package/dist/effect-receipt.js +340 -0
  316. package/dist/env.js +55 -0
  317. package/dist/errors.js +62 -0
  318. package/dist/fold/fold.js +1434 -0
  319. package/dist/fold/foldable-helpers.js +229 -0
  320. package/dist/fold/subset.js +696 -0
  321. package/dist/fold-provenance.js +414 -0
  322. package/dist/gate-decision.d.ts +20 -9
  323. package/dist/gate-decision.d.ts.map +1 -1
  324. package/dist/gate-decision.js +313 -0
  325. package/dist/gate-resume-run.js +154 -0
  326. package/dist/gated-waves.js +165 -0
  327. package/dist/governance.js +43 -0
  328. package/dist/graph-declared.js +45 -0
  329. package/dist/graph-detail.js +207 -0
  330. package/dist/graph-dot.js +54 -0
  331. package/dist/graph-effective.js +107 -0
  332. package/dist/graph-ir.js +623 -0
  333. package/dist/graph-layout.js +184 -0
  334. package/dist/graph-lens.js +105 -0
  335. package/dist/graph-mermaid.js +83 -0
  336. package/dist/graph-ops.js +39 -0
  337. package/dist/graph-refs.js +156 -0
  338. package/dist/held-elsewhere.js +87 -0
  339. package/dist/identity.js +251 -0
  340. package/dist/import/base-parser.js +34 -0
  341. package/dist/import/embedded.js +255 -0
  342. package/dist/import/generator.js +1 -0
  343. package/dist/import/ir-utils.js +85 -0
  344. package/dist/import/parser-options.js +45 -0
  345. package/dist/import/parser.js +1 -0
  346. package/dist/index.js +118 -0
  347. package/dist/intrinsic-interpolation.js +73 -0
  348. package/dist/intrinsic.js +31 -0
  349. package/dist/join-key.js +35 -0
  350. package/dist/kubectl-context.js +150 -0
  351. package/dist/lexicon-config.js +58 -0
  352. package/dist/lexicon-integrity.js +47 -0
  353. package/dist/lexicon-manifest.js +70 -0
  354. package/dist/lexicon-module.d.ts.map +1 -1
  355. package/dist/lexicon-module.js +241 -0
  356. package/dist/lexicon-output.js +218 -0
  357. package/dist/lexicon-plugin-helpers.js +104 -0
  358. package/dist/lexicon-schema.js +136 -0
  359. package/dist/lexicon.js +130 -0
  360. package/dist/lifecycle/affected.js +224 -0
  361. package/dist/lifecycle/assert-live.js +110 -0
  362. package/dist/lifecycle/build-ledger-store.js +160 -0
  363. package/dist/lifecycle/build-ledger.js +155 -0
  364. package/dist/lifecycle/change-set.js +356 -0
  365. package/dist/lifecycle/converge-ledger.js +161 -0
  366. package/dist/lifecycle/deep-diff.js +233 -0
  367. package/dist/lifecycle/deep-observe.js +147 -0
  368. package/dist/lifecycle/digest.js +143 -0
  369. package/dist/lifecycle/disruption.js +135 -0
  370. package/dist/lifecycle/gate-applied.js +113 -0
  371. package/dist/lifecycle/gate-audit.d.ts +69 -2
  372. package/dist/lifecycle/gate-audit.d.ts.map +1 -1
  373. package/dist/lifecycle/gate-audit.js +415 -0
  374. package/dist/lifecycle/gate-ledger-select.js +89 -0
  375. package/dist/lifecycle/gate-ledger.d.ts +24 -0
  376. package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
  377. package/dist/lifecycle/gate-ledger.js +201 -0
  378. package/dist/lifecycle/gate-origin.js +117 -0
  379. package/dist/lifecycle/gate-pending.js +58 -0
  380. package/dist/lifecycle/git.js +1182 -0
  381. package/dist/lifecycle/identity.js +58 -0
  382. package/dist/lifecycle/index.js +26 -0
  383. package/dist/lifecycle/lease.js +283 -0
  384. package/dist/lifecycle/ledger-port.js +1 -0
  385. package/dist/lifecycle/legacy-digest.js +91 -0
  386. package/dist/lifecycle/live-diff.js +274 -0
  387. package/dist/lifecycle/local-note.js +15 -0
  388. package/dist/lifecycle/member-ledger.js +122 -0
  389. package/dist/lifecycle/observation-baseline.js +155 -0
  390. package/dist/lifecycle/observe.js +375 -0
  391. package/dist/lifecycle/oras-referrer-lookup.js +82 -0
  392. package/dist/lifecycle/override-ledger.js +54 -0
  393. package/dist/lifecycle/plan-digest.js +110 -0
  394. package/dist/lifecycle/plan-ledger.js +129 -0
  395. package/dist/lifecycle/receipt-plan.js +192 -0
  396. package/dist/lifecycle/release-ledger.js +155 -0
  397. package/dist/lifecycle/release-read.js +64 -0
  398. package/dist/lifecycle/replay.js +193 -0
  399. package/dist/lifecycle/rollback.js +102 -0
  400. package/dist/lifecycle/run-ledger.js +183 -0
  401. package/dist/lifecycle/scenario-eval.js +204 -0
  402. package/dist/lifecycle/scenario.js +214 -0
  403. package/dist/lifecycle/snapshot.js +239 -0
  404. package/dist/lifecycle/status.js +447 -0
  405. package/dist/lifecycle/symptoms.js +117 -0
  406. package/dist/lifecycle/teardown.js +255 -0
  407. package/dist/lifecycle/types.js +1 -0
  408. package/dist/lifecycle/unobserved-gate.js +33 -0
  409. package/dist/lifecycle/wave-plans.js +68 -0
  410. package/dist/lifecycle/work-item-id.js +36 -0
  411. package/dist/lifecycle/work-lease.js +393 -0
  412. package/dist/lint/component-checks.js +87 -0
  413. package/dist/lint/config.js +483 -0
  414. package/dist/lint/declarative.js +122 -0
  415. package/dist/lint/discover.d.ts.map +1 -1
  416. package/dist/lint/discover.js +138 -0
  417. package/dist/lint/engine.js +246 -0
  418. package/dist/lint/knowledge-checks.js +64 -0
  419. package/dist/lint/named-checks.js +22 -0
  420. package/dist/lint/output-checks.js +87 -0
  421. package/dist/lint/output-docs.js +163 -0
  422. package/dist/lint/parser.js +33 -0
  423. package/dist/lint/pipeline-change-gate.js +70 -0
  424. package/dist/lint/policy-import.d.ts +1 -1
  425. package/dist/lint/policy-import.d.ts.map +1 -1
  426. package/dist/lint/policy-import.js +62 -0
  427. package/dist/lint/policy-sandbox.js +86 -0
  428. package/dist/lint/policy.js +122 -0
  429. package/dist/lint/post-synth.js +87 -0
  430. package/dist/lint/presets/relaxed.json +26 -0
  431. package/dist/lint/presets/strict.json +24 -24
  432. package/dist/lint/receipt-checks.js +83 -0
  433. package/dist/lint/rule-loader.d.ts.map +1 -1
  434. package/dist/lint/rule-loader.js +89 -0
  435. package/dist/lint/rule-registry.js +86 -0
  436. package/dist/lint/rule.js +1 -0
  437. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
  438. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
  439. package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
  440. package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
  441. package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
  442. package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
  443. package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
  444. package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
  445. package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
  446. package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
  447. package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
  448. package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
  449. package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
  450. package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
  451. package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
  452. package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
  453. package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
  454. package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
  455. package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
  456. package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
  457. package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
  458. package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
  459. package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
  460. package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
  461. package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
  462. package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
  463. package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
  464. package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
  465. package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
  466. package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
  467. package/dist/lint/rules/comp/index.js +33 -0
  468. package/dist/lint/rules/comp/support.js +129 -0
  469. package/dist/lint/rules/composite-scope.js +51 -0
  470. package/dist/lint/rules/cor017-composite-name-match.js +93 -0
  471. package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
  472. package/dist/lint/rules/cor021-env-literal-name.js +100 -0
  473. package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
  474. package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
  475. package/dist/lint/rules/declarable-naming-convention.js +62 -0
  476. package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
  477. package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
  478. package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
  479. package/dist/lint/rules/evl004-spread-non-const.js +94 -0
  480. package/dist/lint/rules/evl005-resource-block-body.js +41 -0
  481. package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
  482. package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
  483. package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
  484. package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
  485. package/dist/lint/rules/export-required.js +115 -0
  486. package/dist/lint/rules/file-declarable-limit.js +88 -0
  487. package/dist/lint/rules/flat-declarations.js +62 -0
  488. package/dist/lint/rules/index.js +90 -0
  489. package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
  490. package/dist/lint/rules/no-redundant-type-import.js +76 -0
  491. package/dist/lint/rules/no-redundant-value-cast.js +41 -0
  492. package/dist/lint/rules/no-string-ref.js +59 -0
  493. package/dist/lint/rules/no-unused-declarable-import.js +75 -0
  494. package/dist/lint/rules/no-unused-declarable.js +142 -0
  495. package/dist/lint/rules/op/index.js +28 -0
  496. package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
  497. package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
  498. package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
  499. package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
  500. package/dist/lint/rules/op/support.js +11 -0
  501. package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
  502. package/dist/lint/rules/property-kind.js +56 -0
  503. package/dist/lint/rules/single-concern-file.js +71 -0
  504. package/dist/lint/rules/sys001-no-literal-key.js +60 -0
  505. package/dist/lint/selectors.js +168 -0
  506. package/dist/lint/suppressions.js +129 -0
  507. package/dist/lint/typescript.js +17 -0
  508. package/dist/live-endpoint.js +113 -0
  509. package/dist/live-read-session.js +76 -0
  510. package/dist/lsp/lexicon-providers.js +163 -0
  511. package/dist/lsp/types.js +5 -0
  512. package/dist/managed-fields.js +293 -0
  513. package/dist/mcp/types.js +4 -0
  514. package/dist/notify-verify.js +0 -1
  515. package/dist/notify.js +0 -1
  516. package/dist/notify.schema.json +72 -0
  517. package/dist/observation.js +266 -0
  518. package/dist/okf-read.js +134 -0
  519. package/dist/okf.js +275 -0
  520. package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
  521. package/dist/op/activities/activity-contracts.d.ts +1 -1
  522. package/dist/op/activities/activity-contracts.js +313 -0
  523. package/dist/op/activities/apply.js +582 -0
  524. package/dist/op/activities/build.js +18 -0
  525. package/dist/op/activities/change-coverage.js +40 -0
  526. package/dist/op/activities/change-set.d.ts +8 -3
  527. package/dist/op/activities/change-set.d.ts.map +1 -1
  528. package/dist/op/activities/change-set.js +67 -0
  529. package/dist/op/activities/converge.js +492 -0
  530. package/dist/op/activities/decide.js +211 -0
  531. package/dist/op/activities/env-teardown.js +110 -0
  532. package/dist/op/activities/factory.js +591 -0
  533. package/dist/op/activities/forge-pull-request.js +82 -0
  534. package/dist/op/activities/gh-host.js +78 -0
  535. package/dist/op/activities/guard-validate.js +165 -0
  536. package/dist/op/activities/http-check.js +40 -0
  537. package/dist/op/activities/index.js +59 -0
  538. package/dist/op/activities/lexicon-upgrade.js +629 -0
  539. package/dist/op/activities/lifecycle.js +109 -0
  540. package/dist/op/activities/pipeline-audit.js +147 -0
  541. package/dist/op/activities/policy.js +26 -0
  542. package/dist/op/activities/predict-behaviour.js +341 -0
  543. package/dist/op/activities/propose-upgrade.js +165 -0
  544. package/dist/op/activities/reconcile.d.ts +28 -16
  545. package/dist/op/activities/reconcile.d.ts.map +1 -1
  546. package/dist/op/activities/reconcile.js +1011 -0
  547. package/dist/op/activities/shell.js +118 -0
  548. package/dist/op/activities/source-release.js +97 -0
  549. package/dist/op/activities/source-rollback.js +165 -0
  550. package/dist/op/activities/teardown.js +17 -0
  551. package/dist/op/activities/util.js +6 -0
  552. package/dist/op/activities/wait.js +51 -0
  553. package/dist/op/activities/work-evidence.js +35 -0
  554. package/dist/op/activities/workflow-audit.js +133 -0
  555. package/dist/op/activity-contract-registry.js +106 -0
  556. package/dist/op/activity-contract.js +232 -0
  557. package/dist/op/activity-failure.js +31 -0
  558. package/dist/op/activity-profiles.js +129 -0
  559. package/dist/op/activity-registry.js +105 -0
  560. package/dist/op/activity-runtime.js +28 -0
  561. package/dist/op/builders.d.ts +1 -1
  562. package/dist/op/builders.d.ts.map +1 -1
  563. package/dist/op/builders.js +801 -0
  564. package/dist/op/change-signal.js +118 -0
  565. package/dist/op/composites/apply-op.js +151 -0
  566. package/dist/op/composites/behaviour-op.js +65 -0
  567. package/dist/op/composites/converge-op.js +141 -0
  568. package/dist/op/composites/index.js +19 -0
  569. package/dist/op/composites/lexicon-upgrade-op.js +107 -0
  570. package/dist/op/composites/pipeline-audit-op.js +50 -0
  571. package/dist/op/composites/reconcile-op.js +84 -0
  572. package/dist/op/composites/watch-op.js +69 -0
  573. package/dist/op/composites/workflow-audit-op.js +57 -0
  574. package/dist/op/converge-rule.js +205 -0
  575. package/dist/op/cron.js +146 -0
  576. package/dist/op/decide-backend.js +181 -0
  577. package/dist/op/decide-config.js +68 -0
  578. package/dist/op/decide-read-inputs.js +141 -0
  579. package/dist/op/discover.d.ts.map +1 -1
  580. package/dist/op/discover.js +213 -0
  581. package/dist/op/duration.js +21 -0
  582. package/dist/op/emulator-freshness.js +80 -0
  583. package/dist/op/emulator-lifecycle.js +269 -0
  584. package/dist/op/factory.js +83 -0
  585. package/dist/op/gate-approval.js +172 -0
  586. package/dist/op/gate-name.js +86 -0
  587. package/dist/op/gate-plan-context.js +167 -0
  588. package/dist/op/gate-point-run.js +67 -0
  589. package/dist/op/gate-point.js +111 -0
  590. package/dist/op/gate-resume-plan.js +155 -0
  591. package/dist/op/gate-resume.js +31 -0
  592. package/dist/op/gate-review.js +290 -0
  593. package/dist/op/gate-run-locator.js +85 -0
  594. package/dist/op/gate-summary.js +100 -0
  595. package/dist/op/gate-wait.js +56 -0
  596. package/dist/op/gate.js +449 -0
  597. package/dist/op/generate-pipeline.js +124 -0
  598. package/dist/op/index.js +51 -0
  599. package/dist/op/lifecycle-receipt-store.js +45 -0
  600. package/dist/op/local-executor.js +1164 -0
  601. package/dist/op/local-output.js +140 -0
  602. package/dist/op/op-ir.js +317 -0
  603. package/dist/op/op-verb-class.js +131 -0
  604. package/dist/op/op-waves-notify.js +136 -0
  605. package/dist/op/op-waves-run.d.ts +1 -1
  606. package/dist/op/op-waves-run.d.ts.map +1 -1
  607. package/dist/op/op-waves-run.js +1657 -0
  608. package/dist/op/op-waves.js +409 -0
  609. package/dist/op/operator.js +743 -0
  610. package/dist/op/receipt-store.js +94 -0
  611. package/dist/op/resource.js +23 -0
  612. package/dist/op/run-context.js +28 -0
  613. package/dist/op/run-live.js +256 -0
  614. package/dist/op/runtime.js +21 -0
  615. package/dist/op/runtimes/local.js +195 -0
  616. package/dist/op/source-archive.js +131 -0
  617. package/dist/op/step-output-ref.js +397 -0
  618. package/dist/op/steward-beside.js +169 -0
  619. package/dist/op/steward-points.js +138 -0
  620. package/dist/op/steward-turn.js +59 -0
  621. package/dist/op/steward.js +317 -0
  622. package/dist/op/types.js +25 -0
  623. package/dist/op/work-lease-decl.js +81 -0
  624. package/dist/op/work-lease-run.js +393 -0
  625. package/dist/override-gate.js +284 -0
  626. package/dist/owner-chain.js +74 -0
  627. package/dist/ownership.js +92 -0
  628. package/dist/params.js +61 -0
  629. package/dist/plan-summary.js +711 -0
  630. package/dist/point-decision.js +211 -0
  631. package/dist/pr-forge.js +810 -0
  632. package/dist/pr-loop.js +203 -0
  633. package/dist/project-codegen.js +191 -0
  634. package/dist/project-root.js +74 -0
  635. package/dist/project-validation.js +50 -0
  636. package/dist/provenance.js +157 -0
  637. package/dist/pseudo-parameter.js +40 -0
  638. package/dist/reconcile.js +450 -0
  639. package/dist/resource-attributes.js +33 -0
  640. package/dist/runtime-adapter.js +77 -0
  641. package/dist/runtime.js +66 -0
  642. package/dist/secret-materialization.js +153 -0
  643. package/dist/secret-provenance.js +250 -0
  644. package/dist/serializer-walker.js +112 -0
  645. package/dist/serializer.js +1 -0
  646. package/dist/sort.js +45 -0
  647. package/dist/stack-output.js +115 -0
  648. package/dist/telemetry-attribution.js +149 -0
  649. package/dist/terraform/__fixtures__/build-graph.js +63 -0
  650. package/dist/terraform/adopt-state.js +40 -0
  651. package/dist/terraform/aws-resources.js +384 -0
  652. package/dist/terraform/bridge.js +204 -0
  653. package/dist/terraform/carve-provider.js +155 -0
  654. package/dist/terraform/carve.js +138 -0
  655. package/dist/terraform/data-source-shape.js +57 -0
  656. package/dist/terraform/emit-source.js +36 -0
  657. package/dist/terraform/excise.js +123 -0
  658. package/dist/terraform/graduate.js +128 -0
  659. package/dist/terraform/graph.js +435 -0
  660. package/dist/terraform/hcl2json.js +60 -0
  661. package/dist/terraform/manifest.js +149 -0
  662. package/dist/terraform/parse.js +81 -0
  663. package/dist/terraform/providers/aws.js +146 -0
  664. package/dist/terraform/providers/gcp.js +294 -0
  665. package/dist/terraform/providers/index.js +17 -0
  666. package/dist/terraform/providers/kubernetes.js +253 -0
  667. package/dist/terraform/score.js +151 -0
  668. package/dist/terraform/state.js +67 -0
  669. package/dist/terraform/tier-map.js +74 -0
  670. package/dist/terraform/types.js +13 -0
  671. package/dist/terraform/unified-diff.js +132 -0
  672. package/dist/testing.js +295 -0
  673. package/dist/toml-emit.js +153 -0
  674. package/dist/toml-parse.js +355 -0
  675. package/dist/toml-utils.js +60 -0
  676. package/dist/toml.js +428 -0
  677. package/dist/ts-loader.d.ts +46 -0
  678. package/dist/ts-loader.d.ts.map +1 -0
  679. package/dist/ts-loader.js +103 -0
  680. package/dist/types.js +1 -0
  681. package/dist/utils.js +61 -0
  682. package/dist/validation.js +20 -0
  683. package/dist/vendor/js-yaml-load.js +1662 -0
  684. package/dist/workspace/__fixtures__/contract-repo.d.ts +7 -0
  685. package/dist/workspace/__fixtures__/contract-repo.d.ts.map +1 -1
  686. package/dist/workspace/__fixtures__/contract-repo.js +119 -0
  687. package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
  688. package/dist/workspace/__fixtures__/sessions.d.ts +1 -1
  689. package/dist/workspace/__fixtures__/sessions.d.ts.map +1 -1
  690. package/dist/workspace/__fixtures__/sessions.js +91 -0
  691. package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
  692. package/dist/workspace/agent-cli.js +99 -0
  693. package/dist/workspace/agent.schema.json +390 -0
  694. package/dist/workspace/answers-ledger.js +89 -0
  695. package/dist/workspace/box-cli.js +142 -0
  696. package/dist/workspace/box-factory-write.js +196 -0
  697. package/dist/workspace/box-factory-write.schema.json +342 -0
  698. package/dist/workspace/box-factory.js +88 -0
  699. package/dist/workspace/box-intent.js +126 -0
  700. package/dist/workspace/box-isolation.js +169 -0
  701. package/dist/workspace/box-listing-write.schema.json +204 -0
  702. package/dist/workspace/box-listing.js +298 -0
  703. package/dist/workspace/box-publish.js +352 -0
  704. package/dist/workspace/box-publish.schema.json +498 -0
  705. package/dist/workspace/box-services.js +39 -0
  706. package/dist/workspace/broker-protocol.js +359 -0
  707. package/dist/workspace/broker-protocol.schema.json +228 -0
  708. package/dist/workspace/change-set.schema.json +462 -0
  709. package/dist/workspace/changes-cli.js +56 -0
  710. package/dist/workspace/changes.js +446 -0
  711. package/dist/workspace/changes.schema.json +642 -0
  712. package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
  713. package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
  714. package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
  715. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
  716. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
  717. package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
  718. package/dist/workspace/chant-migrations.js +113 -0
  719. package/dist/workspace/check.schema.json +433 -0
  720. package/dist/workspace/checks/box-isolation.js +62 -0
  721. package/dist/workspace/checks/boxes.js +491 -0
  722. package/dist/workspace/checks/diagrams.js +104 -0
  723. package/dist/workspace/checks/generated.js +419 -0
  724. package/dist/workspace/checks/ledgers.js +212 -0
  725. package/dist/workspace/checks/links.js +191 -0
  726. package/dist/workspace/checks/live.js +100 -0
  727. package/dist/workspace/checks/pipelines.js +188 -0
  728. package/dist/workspace/checks/records.js +169 -0
  729. package/dist/workspace/checks.js +426 -0
  730. package/dist/workspace/ci-green-cli.js +125 -0
  731. package/dist/workspace/ci-green-forge.js +83 -0
  732. package/dist/workspace/ci-green-workflow.d.ts +3 -1
  733. package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
  734. package/dist/workspace/ci-green-workflow.js +202 -0
  735. package/dist/workspace/ci-green.js +325 -0
  736. package/dist/workspace/ci-last-green.schema.json +158 -0
  737. package/dist/workspace/class-data.d.ts +84 -0
  738. package/dist/workspace/class-data.d.ts.map +1 -0
  739. package/dist/workspace/class-data.js +238 -0
  740. package/dist/workspace/compose-graph.js +235 -0
  741. package/dist/workspace/compose-reports.js +146 -0
  742. package/dist/workspace/composites.js +264 -0
  743. package/dist/workspace/composites.schema.json +617 -0
  744. package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
  745. package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
  746. package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
  747. package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
  748. package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
  749. package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
  750. package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
  751. package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
  752. package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
  753. package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
  754. package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
  755. package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
  756. package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
  757. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  758. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  759. package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
  760. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  761. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  762. package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
  763. package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
  764. package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  765. package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  766. package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
  767. package/dist/workspace/conformance/broker.js +736 -0
  768. package/dist/workspace/conformance/index.js +673 -0
  769. package/dist/workspace/conformance/vitest.js +108 -0
  770. package/dist/workspace/conformance/writer.js +1080 -0
  771. package/dist/workspace/decide.js +879 -0
  772. package/dist/workspace/decision-points.schema.json +135 -135
  773. package/dist/workspace/declaration-write-cli.js +74 -0
  774. package/dist/workspace/declaration-write.js +238 -0
  775. package/dist/workspace/declaration.js +938 -0
  776. package/dist/workspace/declaration.schema.json +1413 -1413
  777. package/dist/workspace/declared-kinds.js +106 -0
  778. package/dist/workspace/environments.js +164 -0
  779. package/dist/workspace/evidence.schema.json +279 -0
  780. package/dist/workspace/export-cli.js +185 -0
  781. package/dist/workspace/export.js +499 -0
  782. package/dist/workspace/factory-rules.js +175 -0
  783. package/dist/workspace/generated-files.js +92 -0
  784. package/dist/workspace/glob.js +45 -0
  785. package/dist/workspace/graph-cache.js +352 -0
  786. package/dist/workspace/graph-cli.js +348 -0
  787. package/dist/workspace/graph.schema.json +1338 -0
  788. package/dist/workspace/identity-gate-rule.js +75 -0
  789. package/dist/workspace/identity.js +126 -0
  790. package/dist/workspace/import.js +283 -0
  791. package/dist/workspace/init.js +620 -0
  792. package/dist/workspace/intent-cli.js +263 -0
  793. package/dist/workspace/intent-joins.js +201 -0
  794. package/dist/workspace/intent-record.js +352 -0
  795. package/dist/workspace/intent-record.schema.json +864 -0
  796. package/dist/workspace/intent.js +1582 -0
  797. package/dist/workspace/intent.schema.json +2420 -0
  798. package/dist/workspace/json-edit.js +221 -0
  799. package/dist/workspace/jsonc.js +235 -0
  800. package/dist/workspace/kind-readers.js +103 -0
  801. package/dist/workspace/kinds.d.ts +3 -7
  802. package/dist/workspace/kinds.d.ts.map +1 -1
  803. package/dist/workspace/kinds.js +553 -0
  804. package/dist/workspace/lexicon-symbols.js +112 -0
  805. package/dist/workspace/lineage-adopt-cli.js +102 -0
  806. package/dist/workspace/lineage-adopt.js +360 -0
  807. package/dist/workspace/lineage-check.js +282 -0
  808. package/dist/workspace/lineage-cli.js +121 -0
  809. package/dist/workspace/lineage-hash-index.js +284 -0
  810. package/dist/workspace/lineage-init.js +507 -0
  811. package/dist/workspace/lineage-lock.js +387 -0
  812. package/dist/workspace/lineage-merge.js +45 -0
  813. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  814. package/dist/workspace/lineage-migrations.js +329 -0
  815. package/dist/workspace/lineage-provenance.js +36 -0
  816. package/dist/workspace/lineage-update.js +138 -0
  817. package/dist/workspace/lineage-upgrade-cli.js +131 -0
  818. package/dist/workspace/lineage-upgrade.js +889 -0
  819. package/dist/workspace/lineage-vendor.js +171 -0
  820. package/dist/workspace/lineage-version.js +128 -0
  821. package/dist/workspace/lineage-versions.js +275 -0
  822. package/dist/workspace/links.js +330 -0
  823. package/dist/workspace/ls-generated.js +95 -0
  824. package/dist/workspace/ls.js +277 -0
  825. package/dist/workspace/ls.schema.json +333 -0
  826. package/dist/workspace/member-commands.js +508 -0
  827. package/dist/workspace/member-handles.js +216 -0
  828. package/dist/workspace/member-pipeline.js +258 -0
  829. package/dist/workspace/member-run.js +117 -0
  830. package/dist/workspace/member-write.schema.json +193 -0
  831. package/dist/workspace/nested-graph.js +156 -0
  832. package/dist/workspace/nesting.js +38 -0
  833. package/dist/workspace/patch.js +301 -0
  834. package/dist/workspace/patch.schema.json +321 -0
  835. package/dist/workspace/pin-cli.js +55 -0
  836. package/dist/workspace/pin-integrity.js +100 -0
  837. package/dist/workspace/plan-summary.schema.json +155 -0
  838. package/dist/workspace/point-answer.schema.json +129 -129
  839. package/dist/workspace/points-cli.js +291 -0
  840. package/dist/workspace/points-write.schema.json +660 -0
  841. package/dist/workspace/points.js +521 -0
  842. package/dist/workspace/points.schema.json +916 -0
  843. package/dist/workspace/pr-report.schema.json +108 -0
  844. package/dist/workspace/principal-classes.d.ts +4 -11
  845. package/dist/workspace/principal-classes.d.ts.map +1 -1
  846. package/dist/workspace/principal-classes.js +162 -0
  847. package/dist/workspace/reason-codes.js +326 -0
  848. package/dist/workspace/record-assets.js +151 -0
  849. package/dist/workspace/record-decided.js +105 -0
  850. package/dist/workspace/record-sessions.js +96 -0
  851. package/dist/workspace/record-source.js +114 -0
  852. package/dist/workspace/records-amend.schema.json +284 -0
  853. package/dist/workspace/records-checkout.js +76 -0
  854. package/dist/workspace/records-cli.js +707 -0
  855. package/dist/workspace/records-close.js +116 -0
  856. package/dist/workspace/records-close.schema.json +278 -0
  857. package/dist/workspace/records-new.schema.json +202 -0
  858. package/dist/workspace/records-review.schema.json +367 -0
  859. package/dist/workspace/records-since.js +317 -0
  860. package/dist/workspace/records-since.schema.json +218 -0
  861. package/dist/workspace/records-write.js +1229 -0
  862. package/dist/workspace/records.js +1345 -0
  863. package/dist/workspace/records.schema.json +604 -0
  864. package/dist/workspace/reference-kinds/app/package.json +10 -0
  865. package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  866. package/dist/workspace/returns.js +303 -0
  867. package/dist/workspace/root-refusal.js +75 -0
  868. package/dist/workspace/run-statement.schema.json +622 -0
  869. package/dist/workspace/runs-cli.js +584 -0
  870. package/dist/workspace/runs-write.schema.json +994 -0
  871. package/dist/workspace/runs.js +708 -0
  872. package/dist/workspace/runs.schema.json +1257 -0
  873. package/dist/workspace/runtimes.js +76 -0
  874. package/dist/workspace/session-kinds.js +83 -0
  875. package/dist/workspace/signers.schema.json +206 -0
  876. package/dist/workspace/source-block.js +125 -0
  877. package/dist/workspace/squash.js +177 -0
  878. package/dist/workspace/status-gates.js +162 -0
  879. package/dist/workspace/status-stewards.js +330 -0
  880. package/dist/workspace/status.js +514 -0
  881. package/dist/workspace/status.schema.json +998 -0
  882. package/dist/workspace/steward-index.js +191 -0
  883. package/dist/workspace/symbols.js +188 -0
  884. package/dist/workspace/template-manifest.js +227 -0
  885. package/dist/workspace/template-pins.js +115 -0
  886. package/dist/workspace/trailer-joins.js +65 -0
  887. package/dist/workspace/trailers.js +111 -0
  888. package/dist/workspace/tree.js +136 -0
  889. package/dist/workspace/trust/attestor.js +63 -0
  890. package/dist/workspace/trust/dsse.js +108 -0
  891. package/dist/workspace/trust/evidence-cli.js +175 -0
  892. package/dist/workspace/trust/evidence.js +161 -0
  893. package/dist/workspace/trust/gate-seal.js +226 -0
  894. package/dist/workspace/trust/policy.js +190 -0
  895. package/dist/workspace/trust/provenance.js +180 -0
  896. package/dist/workspace/trust/rotation.js +298 -0
  897. package/dist/workspace/trust/run-commits.js +101 -0
  898. package/dist/workspace/trust/run-statement.js +182 -0
  899. package/dist/workspace/trust/seal.js +272 -0
  900. package/dist/workspace/trust/signers-cli.js +152 -0
  901. package/dist/workspace/trust/ssh-commit.js +178 -0
  902. package/dist/workspace/trust/test-repo.js +118 -0
  903. package/dist/workspace/trust/trust-files.js +193 -0
  904. package/dist/workspace/trust/verify-cli.js +63 -0
  905. package/dist/workspace/trust/verify.js +192 -0
  906. package/dist/workspace/which-chant.js +141 -0
  907. package/dist/workspace/wip-cli.js +95 -0
  908. package/dist/workspace/wip-write.schema.json +504 -0
  909. package/dist/workspace/wip.js +631 -0
  910. package/dist/workspace/wip.schema.json +334 -0
  911. package/dist/workspace/work-cli.js +448 -0
  912. package/dist/workspace/work-evidence.js +122 -0
  913. package/dist/workspace/work-evidence.schema.json +222 -0
  914. package/dist/workspace/work-history.schema.json +421 -0
  915. package/dist/workspace/work-lease.schema.json +246 -0
  916. package/dist/workspace/work-size.js +77 -0
  917. package/dist/workspace/work.js +283 -0
  918. package/dist/workspace/workspace-kinds.schema.json +259 -259
  919. package/dist/workspace/workspace-principals.schema.json +53 -53
  920. package/dist/workspace/write-lock-cli.js +105 -0
  921. package/dist/workspace/write-lock.js +424 -0
  922. package/dist/workspace/write-lock.schema.json +172 -0
  923. package/dist/workspace/write-scope.js +484 -0
  924. package/dist/yaml.js +459 -0
  925. package/package.json +2 -2
  926. package/src/build.ts +8 -0
  927. package/src/change-set.test.ts +48 -0
  928. package/src/change-set.ts +52 -2
  929. package/src/ci-jobs.test.ts +49 -0
  930. package/src/ci-jobs.ts +515 -0
  931. package/src/cli/commands/check-lexicon-plugin.ts +2 -0
  932. package/src/cli/commands/lint.ts +3 -0
  933. package/src/cli/commands/migrate.ts +2 -0
  934. package/src/cli/compiled-cli.e2e.test.ts +165 -0
  935. package/src/cli/main.ts +121 -27
  936. package/src/cli/mcp/workspace-tools.ts +1 -1
  937. package/src/codegen/pinned-upgrade.ts +2 -0
  938. package/src/components/discover.ts +2 -0
  939. package/src/components/pr-pipeline.ts +3 -2
  940. package/src/components/sandbox/driver.ts +3 -1
  941. package/src/composite.ts +15 -3
  942. package/src/config-import.ts +3 -0
  943. package/src/discovery/collect.ts +15 -1
  944. package/src/discovery/fold-build-parity.test.ts +71 -0
  945. package/src/discovery/fold-import.ts +25 -127
  946. package/src/discovery/fold-project-provenance.test.ts +21 -4
  947. package/src/discovery/host-composite.ts +101 -0
  948. package/src/discovery/import.ts +2 -0
  949. package/src/discovery/index.ts +11 -1
  950. package/src/discovery/sandbox/driver.ts +3 -1
  951. package/src/gate-decision-bundle.test.ts +5 -4
  952. package/src/gate-decision-identity.test.ts +59 -6
  953. package/src/gate-decision.ts +81 -21
  954. package/src/lexicon-module.ts +3 -0
  955. package/src/lifecycle/gate-audit.test.ts +55 -1
  956. package/src/lifecycle/gate-audit.ts +116 -3
  957. package/src/lifecycle/gate-ledger.test.ts +20 -1
  958. package/src/lifecycle/gate-ledger.ts +33 -1
  959. package/src/lint/config.ts +1 -1
  960. package/src/lint/discover.ts +28 -8
  961. package/src/lint/policy-import.ts +4 -1
  962. package/src/lint/rule-loader.ts +2 -0
  963. package/src/op/activities/activity-contracts.ts +1 -1
  964. package/src/op/activities/change-set.ts +11 -3
  965. package/src/op/activities/lexicon-upgrade.test.ts +2 -0
  966. package/src/op/activities/reconcile.test.ts +62 -2
  967. package/src/op/activities/reconcile.ts +46 -22
  968. package/src/op/builders.ts +1 -1
  969. package/src/op/discover.ts +3 -0
  970. package/src/op/op-waves-run.ts +4 -3
  971. package/src/op/op-waves.test.ts +2 -0
  972. package/src/op/work-lease-run.test.ts +12 -4
  973. package/src/ts-loader.test.ts +23 -0
  974. package/src/ts-loader.ts +122 -0
  975. package/src/workspace/__fixtures__/contract-repo.ts +17 -1
  976. package/src/workspace/__fixtures__/sessions.ts +3 -3
  977. package/src/workspace/change-set.schema.json +5 -3
  978. package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
  979. package/src/workspace/ci-green-workflow.test.ts +4 -4
  980. package/src/workspace/ci-green-workflow.ts +5 -2
  981. package/src/workspace/class-data.test.ts +64 -0
  982. package/src/workspace/class-data.ts +236 -0
  983. package/src/workspace/declaration.ts +1 -1
  984. package/src/workspace/kinds.ts +7 -36
  985. package/src/workspace/lineage-migrations.ts +2 -0
  986. package/src/workspace/points.ts +1 -1
  987. package/src/workspace/principal-classes.ts +12 -95
  988. package/src/workspace/records-formats.test.ts +7 -2
  989. package/src/workspace/records-sessions-write.test.ts +3 -3
  990. package/src/workspace/status-contract.e2e.test.ts +37 -0
  991. package/src/workspace/status-contract.test.ts +23 -21
@@ -0,0 +1,728 @@
1
+ /**
2
+ * Thin interpret driver — Phase 1 (#556), saga rollback hardened in Phase 4
3
+ * (#565, epic #551).
4
+ *
5
+ * One generic orchestrator that runs an arbitrary set of components on the
6
+ * local in-process executor: it orders components by `dependsOn` (reusing the
7
+ * same Kahn-layering approach `computeStackGraph` uses for `chant graph
8
+ * --stacks`, see ../build.ts), then for each component in order runs its
9
+ * `deploy` composition by dispatching every step to the `CapabilityRegistry`
10
+ * by `kind`. It resolves the three wiring reference forms from
11
+ * component.schema.json (`@Phase.field` prior-step references,
12
+ * `@<component>.publish.<field>` cross-component artifact references, and
13
+ * passes through `$env.*`/`stackOutput` values as opaque env config), runs
14
+ * `parallel` phases concurrently, decides a `gate` against the gate ledger
15
+ * (#2119 — the same `../op/gate.ts` the Op executor uses, so `chant run
16
+ * --components` and `chant run <op>` can never disagree about what a gate
17
+ * means), and on terminal failure unwinds every executed step in reverse via
18
+ * that step's capability `rollback`, then runs `onFailure` phases in reverse
19
+ * order (best-effort), mirroring the Op local executor's saga semantics.
20
+ *
21
+ * A gate nobody has approved is not a failure: the component stops there with
22
+ * status `gated`, the pending fact is on the ledger, and no rollback and no
23
+ * `onFailure` phase runs — nothing failed and the steps that did run are the
24
+ * steps the author meant to run before the approval. The next run re-reads the
25
+ * ledger and continues past the gate if `chant approve` has answered it.
26
+ *
27
+ * A step whose capability declares no `rollback` is never silently passed
28
+ * over during unwind: it gets a `"rollback-opted-out"` record (see
29
+ * `rollbackExecuted`), carrying the step's `noRollback` reason when the
30
+ * composition declared one. This mirrors, at run time, the opt-out the
31
+ * COMP003 lint rule (../lint/rules/comp/comp003-mutating-no-rollback.ts)
32
+ * already requires at author time — the driver reports the same fact the
33
+ * lint rule already made a component author state.
34
+ *
35
+ * This unwind runs entirely in-process: if the process crashes mid-rollback,
36
+ * nothing resumes it — there is no persisted run state to resume from (see
37
+ * docs/components/orchestration.mdx#rollback-comes-free). The *mechanism*
38
+ * (reverse-order unwind calling each capability's `rollback`) is
39
+ * capability-agnostic; *durable resume of a rollback already in progress*
40
+ * would be a hosting runtime's to offer, the same boundary that already
41
+ * applies to forward `onFailure` compensation on an Op.
42
+ *
43
+ * Contains zero per-component logic: nothing in this module branches on a
44
+ * component or capability `kind`/name. All behavior is either generic
45
+ * (ordering, phase/step dispatch, wiring resolution) or delegated to the
46
+ * `CapabilityRegistry` the caller supplies.
47
+ */
48
+ import { topoSort } from "../codegen/topo-sort.js";
49
+ import { kahnLayers } from "./layers.js";
50
+ import { evaluateGate, gitGateLedgerPort } from "../op/gate.js";
51
+ import { gateName } from "../op/gate-name.js";
52
+ import { componentPlanDigest } from "./gate-plan.js";
53
+ import { isPromotedArtifact } from "./auto-release.js";
54
+ function isGateStep(step) {
55
+ return step.kind === "gate";
56
+ }
57
+ function isPhaseStep(step) {
58
+ return typeof step.phase === "string" && Array.isArray(step.steps);
59
+ }
60
+ // ── Errors ────────────────────────────────────────────────────────────────
61
+ /** Thrown when a dependency cycle is found among `dependsOn` edges. */
62
+ export class DependencyCycleError extends Error {
63
+ constructor(cycle) {
64
+ super(`dependency cycle among components: ${cycle.join(" -> ")}`);
65
+ this.cycle = cycle;
66
+ this.name = "DependencyCycleError";
67
+ }
68
+ }
69
+ /** Thrown when a component's `dependsOn` names a component not present in the run set. */
70
+ export class UnknownDependencyError extends Error {
71
+ constructor(component, dependency) {
72
+ super(`component "${component}" depends on unknown component "${dependency}"`);
73
+ this.component = component;
74
+ this.dependency = dependency;
75
+ this.name = "UnknownDependencyError";
76
+ }
77
+ }
78
+ /** Thrown on terminal run failure; carries the partial run result for rendering/inspection. */
79
+ export class DriverRunFailure extends Error {
80
+ constructor(result) {
81
+ super(`interpret run failed at component "${result.failedComponent ?? "unknown"}"`);
82
+ this.result = result;
83
+ this.name = "DriverRunFailure";
84
+ }
85
+ }
86
+ /**
87
+ * Resolve run order and parallel-safe waves from each component's `dependsOn`.
88
+ * Reuses the generic `topoSort` (../codegen/topo-sort.ts) for the flat order,
89
+ * and the same Kahn-layering approach `computeStackGraph` uses for `chant
90
+ * graph --stacks` (../build.ts) to additionally group independent components
91
+ * into waves. This is a plain string-graph algorithm — no lexicon/AttrRef
92
+ * machinery — since a component's `dependsOn` is already a flat name list.
93
+ */
94
+ export function resolveComponentGraph(components) {
95
+ const byName = new Map(components.map((c) => [c.name, c]));
96
+ for (const c of components) {
97
+ for (const dep of c.dependsOn ?? []) {
98
+ if (!byName.has(dep))
99
+ throw new UnknownDependencyError(c.name, dep);
100
+ }
101
+ }
102
+ // Kahn layering (mirrors computeStackGraph's wave computation in ../build.ts):
103
+ // a component is ready once every dependency it names has already been placed.
104
+ // Computed first because it doubles as cycle detection: `topoSort` below is a
105
+ // plain DFS with no cycle guard, so it must only run once a cycle is ruled out.
106
+ const deps = new Map();
107
+ for (const c of components)
108
+ deps.set(c.name, new Set(c.dependsOn ?? []));
109
+ const layered = kahnLayers(deps);
110
+ if (layered.cycle)
111
+ throw new DependencyCycleError(layered.cycle);
112
+ const waves = layered.waves;
113
+ const order = topoSort(components, (c) => c.name, (c) => c.dependsOn ?? []).map((c) => c.name);
114
+ return { order, waves };
115
+ }
116
+ // ── Wiring resolution ─────────────────────────────────────────────────────
117
+ const PRIOR_STEP_REF = /^@([A-Za-z0-9_ ]+)\.([A-Za-z0-9_.]+)$/;
118
+ const COMPONENT_ARTIFACT_REF = /^@([a-z0-9]+(?:-[a-z0-9]+)*)\.publish\.(uri|digest|key)$/;
119
+ /** Dot-path lookup, matching ../op/local-executor.ts's resolvePath. */
120
+ function resolvePath(value, path) {
121
+ return path
122
+ .split(".")
123
+ .reduce((acc, key) => (acc == null ? acc : acc[key]), value);
124
+ }
125
+ /**
126
+ * Resolve one wiring value against already-produced outputs. Three reference
127
+ * forms, all resolved here rather than by any component-specific code:
128
+ * - `@Phase.field` — a prior step's output within the same component, keyed
129
+ * by phase name (`phaseOutputs`).
130
+ * - `@<component>.publish.uri|digest|key` — another component's published
131
+ * artifact output (`componentOutputs`), per composition-and-wiring.mdx.
132
+ * - `{ stackOutput: { stack, name } }` — a cross-stack output; Phase 1 has no
133
+ * cross-stack apply-order integration (out of scope per #556), so this
134
+ * resolves via the same `componentOutputs` map keyed by `stack`/`name`,
135
+ * letting tests and callers seed cross-stack values the same way as
136
+ * artifact outputs. `$env.*` and plain literals pass through unchanged —
137
+ * env resolution is the caller's `DeployContext.vars`, not the driver's.
138
+ */
139
+ export function resolveWiring(value, phaseOutputs, componentOutputs) {
140
+ if (typeof value === "string") {
141
+ const priorStep = value.match(PRIOR_STEP_REF);
142
+ if (priorStep) {
143
+ const [, phaseName, field] = priorStep;
144
+ return resolvePath(phaseOutputs[phaseName], field);
145
+ }
146
+ const artifactRef = value.match(COMPONENT_ARTIFACT_REF);
147
+ if (artifactRef) {
148
+ const [, componentName, field] = artifactRef;
149
+ return resolvePath(componentOutputs[componentName]?.publish, field);
150
+ }
151
+ return value; // literal, or `$env.*` — left for the caller to resolve via DeployContext.
152
+ }
153
+ if (value && typeof value === "object" && "stackOutput" in value) {
154
+ const { stack, name } = value.stackOutput;
155
+ return resolvePath(componentOutputs[stack], name);
156
+ }
157
+ return value;
158
+ }
159
+ /**
160
+ * Deep-walk an object, resolving every string/stackOutput wiring value found.
161
+ * Arrays and nested objects are walked too.
162
+ *
163
+ * Exported (not just used internally) so a hosting runtime that runs steps
164
+ * out of process can resolve a step's wiring the same way — the orchestrator
165
+ * only accumulates `phaseOutputs`/`componentOutputs` and passes them through;
166
+ * resolution logic stays in one place so local and hosted execution can never
167
+ * silently diverge.
168
+ */
169
+ export function resolveStepInput(input, phaseOutputs, componentOutputs) {
170
+ const walk = (value) => {
171
+ if (typeof value === "string")
172
+ return resolveWiring(value, phaseOutputs, componentOutputs);
173
+ if (Array.isArray(value))
174
+ return value.map(walk);
175
+ if (value && typeof value === "object") {
176
+ if ("stackOutput" in value)
177
+ return resolveWiring(value, phaseOutputs, componentOutputs);
178
+ const out = {};
179
+ for (const [k, v] of Object.entries(value))
180
+ out[k] = walk(v);
181
+ return out;
182
+ }
183
+ return value;
184
+ };
185
+ return walk(input);
186
+ }
187
+ class StepFailure extends Error {
188
+ constructor(records, executed) {
189
+ super("step failed");
190
+ this.records = records;
191
+ this.executed = executed;
192
+ this.name = "StepFailure";
193
+ }
194
+ }
195
+ /** Internal: a phase stopped at an unapproved gate (#2119). Carries what ran before it, so the records survive; not a failure, so no unwind follows. */
196
+ class GateStop extends Error {
197
+ constructor(records, executed, pending,
198
+ /** Whether this run's own append reached the remote — see {@link DriverComponentResult.gatePushed} (#2310). */
199
+ pushed, pushWarning,
200
+ /** Set when an approval stands for this gate but not for this plan (#2574). */
201
+ mismatch) {
202
+ super(`gate "${pending.gate}" is pending approval`);
203
+ this.records = records;
204
+ this.executed = executed;
205
+ this.pending = pending;
206
+ this.pushed = pushed;
207
+ this.pushWarning = pushWarning;
208
+ this.mismatch = mismatch;
209
+ this.name = "GateStop";
210
+ }
211
+ }
212
+ /** A result status as the progress stream spells it — the only difference is `fail` vs `failed`, which the two vocabularies have always disagreed on. */
213
+ function progressStatus(status) {
214
+ return status === "fail" ? "failed" : status;
215
+ }
216
+ /** Run a single capability step. Never throws for a capability-run failure; returns a fail record instead. */
217
+ async function runCapabilityStep(step, phaseName, ctx, registry, phaseOutputs, componentOutputs) {
218
+ const { kind, ...rest } = step;
219
+ const resolvedInput = resolveStepInput(rest, phaseOutputs, componentOutputs);
220
+ const start = Date.now();
221
+ try {
222
+ const capability = registry.resolve(kind);
223
+ const output = await capability.run(ctx, resolvedInput);
224
+ return {
225
+ record: {
226
+ component: ctx.component,
227
+ phase: phaseName,
228
+ kind,
229
+ status: "ok",
230
+ durationMs: Date.now() - start,
231
+ output,
232
+ },
233
+ resolvedInput,
234
+ output,
235
+ };
236
+ }
237
+ catch (err) {
238
+ return {
239
+ record: {
240
+ component: ctx.component,
241
+ phase: phaseName,
242
+ kind,
243
+ status: "fail",
244
+ durationMs: Date.now() - start,
245
+ error: errMessage(err),
246
+ },
247
+ resolvedInput,
248
+ };
249
+ }
250
+ }
251
+ /**
252
+ * Run a phase's steps. A step may be a `Gate` (decided against the gate
253
+ * ledger, in authored order — a resolution newer than the gate's newest
254
+ * pending fact lets it pass carrying the approver, anything else records the
255
+ * fact and stops the component) or a nested `Phase` (a fan-out unit; recursed
256
+ * into, inheriting `parallel` from its own definition, not its parent's).
257
+ * Steps run sequentially unless `phase.parallel` is set, in which case they run
258
+ * via `Promise.all`, matching ../op/local-executor.ts's phase semantics — and
259
+ * as there, a gate in a parallel phase is decided before the fan-out, since a
260
+ * gate is a read of the ledger rather than work, and starting activities a
261
+ * pending gate is about to strand defeats the point of stopping at it.
262
+ *
263
+ * `onProgress`, when supplied, is called with a `phase-start` event before any
264
+ * step runs, a `step` event around each capability invocation (`"running"`
265
+ * then `"ok"`/`"failed"`), and a `phase-done` event once the phase settles —
266
+ * purely additive observation, never consulted for control flow. Recursion
267
+ * into a nested fan-out phase passes the same callback through, so a nested
268
+ * phase's events use its own name. Left `undefined` by every caller that
269
+ * doesn't opt into `--progress-json` (see ./run-progress.ts), in which case
270
+ * every `onProgress?.(...)` call below is a no-op and behavior is unchanged.
271
+ */
272
+ async function runPhase(phaseDef, ctx, registry, phaseOutputs, componentOutputs, gates, onProgress) {
273
+ /** Decide this phase's gates against the ledger, in authored order, before any of its work starts. Throws `GateStop` at the first one nobody has approved. */
274
+ const decideGates = async () => {
275
+ const gateRecords = [];
276
+ for (const gate of phaseDef.steps.filter(isGateStep)) {
277
+ const start = Date.now();
278
+ const check = await evaluateGate(gates.port, {
279
+ op: ctx.component,
280
+ gate: gateName(gate),
281
+ // #2574: an approval counts only for this environment and this plan.
282
+ environment: ctx.env,
283
+ ...(gates.planDigest !== undefined ? { planDigest: gates.planDigest } : {}),
284
+ ...(gate.description ? { description: gate.description } : {}),
285
+ ...(gate.timeout ? { timeout: gate.timeout } : {}),
286
+ ...(gates.now ? { now: gates.now } : {}),
287
+ });
288
+ const base = { component: ctx.component, phase: phaseDef.phase, kind: `gate:${gateName(gate)}` };
289
+ if (!check.satisfied) {
290
+ gateRecords.push({ ...base, status: "skipped", durationMs: Date.now() - start });
291
+ for (const skipped of phaseDef.steps.filter((s) => !isGateStep(s))) {
292
+ gateRecords.push(skippedRecord(skipped));
293
+ }
294
+ throw new GateStop(gateRecords, [], check.pending, check.pushed, check.pushWarning, check.mismatch);
295
+ }
296
+ gateRecords.push({
297
+ ...base,
298
+ status: "ok",
299
+ durationMs: Date.now() - start,
300
+ approval: {
301
+ gate: gateName(gate),
302
+ resolvedBy: check.resolution.resolvedBy,
303
+ timestamp: check.resolution.timestamp,
304
+ ...(check.resolution.url ? { url: check.resolution.url } : {}),
305
+ },
306
+ });
307
+ }
308
+ return gateRecords;
309
+ };
310
+ const entries = phaseDef.steps.filter((s) => !isGateStep(s));
311
+ const runEntry = async (entry) => {
312
+ if (isPhaseStep(entry)) {
313
+ try {
314
+ const nested = await runPhase(entry, ctx, registry, phaseOutputs, componentOutputs, gates, onProgress);
315
+ return { ...nested, failed: false };
316
+ }
317
+ catch (err) {
318
+ if (err instanceof StepFailure)
319
+ return { records: err.records, executed: err.executed, failed: true };
320
+ // A nested fan-out phase's gate stops the whole component, but the
321
+ // records it produced before the gate still belong in the run.
322
+ if (err instanceof GateStop) {
323
+ return {
324
+ records: err.records,
325
+ executed: err.executed,
326
+ failed: false,
327
+ pending: err.pending,
328
+ pushed: err.pushed,
329
+ pushWarning: err.pushWarning,
330
+ mismatch: err.mismatch,
331
+ };
332
+ }
333
+ throw err;
334
+ }
335
+ }
336
+ onProgress?.({ type: "step", component: ctx.component, phase: phaseDef.phase, step: entry.kind, status: "running" });
337
+ const { record, resolvedInput, output } = await runCapabilityStep(entry, phaseDef.phase, ctx, registry, phaseOutputs, componentOutputs);
338
+ onProgress?.({
339
+ type: "step",
340
+ component: ctx.component,
341
+ phase: phaseDef.phase,
342
+ step: entry.kind,
343
+ status: record.status === "ok" ? "ok" : "failed",
344
+ ...(record.error !== undefined ? { error: record.error } : {}),
345
+ });
346
+ if (record.status === "ok") {
347
+ phaseOutputs[phaseDef.phase] = { ...(phaseOutputs[phaseDef.phase] ?? {}), ...output };
348
+ // The release's service.version is the digest a later deploy step stamps (#3061): the
349
+ // last artifact this component promoted, the same one auto-release records.
350
+ if (ctx.release && isPromotedArtifact(output) && typeof output.digest === "string" && output.digest !== "") {
351
+ ctx.release.version = output.digest;
352
+ }
353
+ }
354
+ return {
355
+ records: [record],
356
+ executed: record.status === "ok" ? [{ step: entry, resolvedInput, phaseName: phaseDef.phase, output }] : [],
357
+ failed: record.status === "fail",
358
+ };
359
+ };
360
+ const skippedRecord = (entry) => ({
361
+ component: ctx.component,
362
+ phase: phaseDef.phase,
363
+ kind: isPhaseStep(entry) ? entry.phase : entry.kind,
364
+ status: "skipped",
365
+ durationMs: 0,
366
+ });
367
+ const runEntries = async () => {
368
+ const gateRecords = await decideGates();
369
+ if (phaseDef.parallel) {
370
+ const results = await Promise.all(entries.map(runEntry));
371
+ const records = gateRecords.concat(results.flatMap((r) => r.records));
372
+ const executed = results.flatMap((r) => r.executed);
373
+ const withPending = results.find((r) => r.pending);
374
+ if (withPending?.pending) {
375
+ throw new GateStop(records, executed, withPending.pending, withPending.pushed, withPending.pushWarning, withPending.mismatch);
376
+ }
377
+ if (results.some((r) => r.failed))
378
+ throw new StepFailure(records, executed);
379
+ return { records, executed };
380
+ }
381
+ const records = [...gateRecords];
382
+ const executed = [];
383
+ for (let i = 0; i < entries.length; i++) {
384
+ const result = await runEntry(entries[i]);
385
+ records.push(...result.records);
386
+ executed.push(...result.executed);
387
+ if (result.pending) {
388
+ for (const skipped of entries.slice(i + 1))
389
+ records.push(skippedRecord(skipped));
390
+ throw new GateStop(records, executed, result.pending, result.pushed, result.pushWarning, result.mismatch);
391
+ }
392
+ if (result.failed) {
393
+ for (const skipped of entries.slice(i + 1))
394
+ records.push(skippedRecord(skipped));
395
+ throw new StepFailure(records, executed);
396
+ }
397
+ }
398
+ return { records, executed };
399
+ };
400
+ onProgress?.({ type: "phase-start", component: ctx.component, phase: phaseDef.phase });
401
+ try {
402
+ const result = await runEntries();
403
+ onProgress?.({ type: "phase-done", component: ctx.component, phase: phaseDef.phase, status: "ok" });
404
+ return result;
405
+ }
406
+ catch (err) {
407
+ if (err instanceof GateStop) {
408
+ onProgress?.({ type: "phase-done", component: ctx.component, phase: phaseDef.phase, status: "gated" });
409
+ }
410
+ else if (err instanceof StepFailure) {
411
+ onProgress?.({ type: "phase-done", component: ctx.component, phase: phaseDef.phase, status: "failed" });
412
+ }
413
+ throw err;
414
+ }
415
+ }
416
+ /**
417
+ * Roll back every executed step in reverse order via its capability's
418
+ * `rollback`, if declared. Best-effort: a rollback failure is recorded but
419
+ * does not stop the unwind.
420
+ *
421
+ * A step whose capability declares no `rollback` is not silently passed over:
422
+ * it gets its own `"rollback-opted-out"` record, carrying the step's
423
+ * `noRollback` reason when the composition declared one (the same opt-out
424
+ * property COMP003 lint requires at author time — see
425
+ * ../lint/rules/comp/comp003-mutating-no-rollback.ts) or a generic fallback
426
+ * message otherwise. This is decided purely by whether `capability.rollback`
427
+ * exists — never by the step's `kind` or the component's name — so it stays
428
+ * capability-agnostic like the rest of this module.
429
+ */
430
+ async function rollbackExecuted(executed, ctx, registry) {
431
+ const records = [];
432
+ for (const { step, resolvedInput, phaseName, output } of [...executed].reverse()) {
433
+ const start = Date.now();
434
+ try {
435
+ const capability = registry.resolve(step.kind);
436
+ if (!capability.rollback) {
437
+ const reason = typeof step.noRollback === "string" ? step.noRollback : undefined;
438
+ records.push({
439
+ component: ctx.component,
440
+ phase: phaseName,
441
+ kind: step.kind,
442
+ status: "rollback-opted-out",
443
+ durationMs: Date.now() - start,
444
+ error: reason ?? `capability "${step.kind}" declares no rollback and the step has no "noRollback" reason`,
445
+ });
446
+ continue;
447
+ }
448
+ await capability.rollback(ctx, resolvedInput, output);
449
+ records.push({
450
+ component: ctx.component,
451
+ phase: phaseName,
452
+ kind: step.kind,
453
+ status: "rolled-back",
454
+ durationMs: Date.now() - start,
455
+ });
456
+ }
457
+ catch (err) {
458
+ records.push({
459
+ component: ctx.component,
460
+ phase: phaseName,
461
+ kind: step.kind,
462
+ status: "fail",
463
+ durationMs: Date.now() - start,
464
+ error: errMessage(err),
465
+ });
466
+ }
467
+ }
468
+ return records;
469
+ }
470
+ // ── Per-component deploy ─────────────────────────────────────────────────
471
+ /**
472
+ * Run one component's `deploy` composition. On terminal failure: unwind every
473
+ * executed step in reverse via its capability's `rollback` (saga
474
+ * compensation), then run the component's declared `rollback` phases in
475
+ * reverse order (best-effort), matching ../op/local-executor.ts's `onFailure`
476
+ * handling. Cross-component artifact outputs this component published (if
477
+ * any) are recorded into `componentOutputs` under its own name so downstream
478
+ * components can reference `@<name>.publish.*`.
479
+ *
480
+ * `onProgress`, when supplied, is forwarded to every `runPhase` call (both the
481
+ * forward `deploy` phases and, on failure, the component's own authored
482
+ * `rollback` phases) so a `--progress-json` consumer sees `phase-start`/
483
+ * `step`/`phase-done` events for whichever phases actually ran. The saga
484
+ * unwind step-by-step compensation (`rollbackExecuted` below) is not part of
485
+ * the `RunProgressEvent` contract and stays silent — it isn't a `deploy`
486
+ * phase, and its record statuses (`rolled-back`/`rollback-opted-out`) don't
487
+ * map onto the `step` event's `running`/`ok`/`failed` shape.
488
+ */
489
+ export async function runComponentDeploy(component, ctx, registry, componentOutputs, onProgress, gateContext = { port: gitGateLedgerPort() }) {
490
+ // Each component tracks its own release: a digest one component promoted never stamps another's deploy.
491
+ if (ctx.release)
492
+ ctx = { ...ctx, release: { ...ctx.release } };
493
+ const phaseOutputs = {};
494
+ // #2574: every gate this component reaches binds its approval to this
495
+ // environment and this composition, so an approval for staging or for last
496
+ // week's deploy cannot pass it.
497
+ const release = gateContext.releases?.get(component.name);
498
+ // A promote or rollback deploys a recorded digest without publishing one (#2574); that digest is the release's version.
499
+ if (ctx.release && release !== undefined && ctx.release.version === undefined)
500
+ ctx.release.version = release;
501
+ const gates = {
502
+ ...gateContext,
503
+ planDigest: componentPlanDigest({
504
+ environment: ctx.env,
505
+ component,
506
+ ...(ctx.vars ? { vars: ctx.vars } : {}),
507
+ ...(release !== undefined ? { release } : {}),
508
+ }),
509
+ };
510
+ const records = [];
511
+ const allExecuted = [];
512
+ try {
513
+ for (const phaseDef of component.deploy) {
514
+ const result = await runPhase(phaseDef, ctx, registry, phaseOutputs, componentOutputs, gates, onProgress);
515
+ records.push(...result.records);
516
+ allExecuted.push(...result.executed);
517
+ }
518
+ }
519
+ catch (err) {
520
+ // A pending gate stops the component where it stands (#2119): no saga
521
+ // unwind and no `rollback` phase. The steps before the gate ran on
522
+ // purpose and are meant to survive the wait for an approval — undoing
523
+ // them would make every gated run a no-op with a rollback attached.
524
+ if (err instanceof GateStop) {
525
+ records.push(...err.records);
526
+ return {
527
+ component: component.name,
528
+ ok: false,
529
+ status: "gated",
530
+ records,
531
+ gate: err.pending,
532
+ ...(err.pushed !== undefined ? { gatePushed: err.pushed } : {}),
533
+ ...(err.pushWarning ? { gatePushWarning: err.pushWarning } : {}),
534
+ ...(err.mismatch ? { gateMismatch: err.mismatch } : {}),
535
+ };
536
+ }
537
+ if (err instanceof StepFailure) {
538
+ records.push(...err.records);
539
+ allExecuted.push(...err.executed);
540
+ }
541
+ else {
542
+ throw err;
543
+ }
544
+ records.push(...(await rollbackExecuted(allExecuted, ctx, registry)));
545
+ for (const phaseDef of [...(component.rollback ?? [])].reverse()) {
546
+ try {
547
+ const result = await runPhase(phaseDef, ctx, registry, phaseOutputs, componentOutputs, gates, onProgress);
548
+ records.push(...result.records);
549
+ }
550
+ catch (compErr) {
551
+ if (compErr instanceof StepFailure || compErr instanceof GateStop)
552
+ records.push(...compErr.records);
553
+ else
554
+ throw compErr;
555
+ }
556
+ }
557
+ return { component: component.name, ok: false, status: "fail", records };
558
+ }
559
+ // Publish-family and stack outputs become this component's entry in
560
+ // `componentOutputs` — through the same exported accumulator a hosted
561
+ // runtime calls (#700), so local and hosted runs can never diverge on what
562
+ // downstream references see.
563
+ accumulateComponentOutputs(componentOutputs, component.name, phaseOutputs);
564
+ return { component: component.name, ok: true, status: "ok", records };
565
+ }
566
+ /**
567
+ * Collect the cross-component outputs one finished component exposes to its
568
+ * downstream consumers, from every phase output it produced:
569
+ *
570
+ * - publish-family outputs (publish-image / publish-artifact /
571
+ * load-image-on-host all return at least one of uri/digest/key — see
572
+ * ./verbs/publish.ts) are namespaced under `publish`, so downstream
573
+ * `@<name>.publish.*` references resolve;
574
+ * - stack outputs from an apply step (cfn-deploy returns
575
+ * `CfnDeployOutput.outputs`) are merged at the top level, peer to
576
+ * `publish`, so `resolveWiring`'s stackOutput branch —
577
+ * `resolvePath(componentOutputs[stack], name)` — finds each output by
578
+ * name (the cross-stack apply-order integration deferred in #556, closed
579
+ * in #699). The entry is keyed by the component's own name, which by
580
+ * convention is the stack name a `stackOutput` reference targets (see the
581
+ * pilots and composition-and-wiring.mdx).
582
+ *
583
+ * Both halves are generic by output *shape*, not by capability `kind`, keeping
584
+ * the driver free of per-capability branching. Returns `undefined` when the
585
+ * component exposed nothing.
586
+ *
587
+ * Exported, like `resolveStepInput`, so a hosting runtime accumulates outputs
588
+ * via this exact function rather than re-deriving it (#700). The resolver and the
589
+ * accumulator are the two halves of one contract; sharing only the resolver
590
+ * is how the cross-stack gap #699 closed locally could reopen durably.
591
+ */
592
+ export function collectComponentOutputs(phaseOutputs) {
593
+ const publishOutput = findPublishOutput(phaseOutputs);
594
+ const stackOutputs = findStackOutputs(phaseOutputs);
595
+ if (!publishOutput && !stackOutputs)
596
+ return undefined;
597
+ return { ...(stackOutputs ?? {}), ...(publishOutput ? { publish: publishOutput } : {}) };
598
+ }
599
+ /**
600
+ * Record a finished component's outputs (`collectComponentOutputs`) into the
601
+ * shared `componentOutputs` map under the component's own name, merging over
602
+ * any seeded entry (`--seed-outputs`, or a parent orchestrator's
603
+ * thread-through). Mutates and returns `componentOutputs`, so an out-of-process
604
+ * step can hand the updated map back over a JSON boundary — every value in it
605
+ * is plain result data, so the map is serializable by construction. A no-op
606
+ * when the component exposed nothing.
607
+ */
608
+ export function accumulateComponentOutputs(componentOutputs, componentName, phaseOutputs) {
609
+ const collected = collectComponentOutputs(phaseOutputs);
610
+ if (collected) {
611
+ componentOutputs[componentName] = { ...componentOutputs[componentName], ...collected };
612
+ }
613
+ return componentOutputs;
614
+ }
615
+ /**
616
+ * Find the output of the last step that looks like a publish result (carries
617
+ * `uri`, `digest`, or `key`) across every phase this component ran, so
618
+ * `collectComponentOutputs` can populate `@<component>.publish.*` for a
619
+ * downstream consumer.
620
+ */
621
+ function findPublishOutput(phaseOutputs) {
622
+ let found;
623
+ for (const output of Object.values(phaseOutputs)) {
624
+ if (output && ("uri" in output || "digest" in output || "key" in output)) {
625
+ found = { ...found, ...output };
626
+ }
627
+ }
628
+ return found;
629
+ }
630
+ /**
631
+ * Find the stack `outputs` map produced by an apply-style step (cfn-deploy
632
+ * returns `CfnDeployOutput.outputs`) across every phase this component ran, so
633
+ * a deployed stack's outputs can seed downstream `stackOutput()` resolution.
634
+ */
635
+ function findStackOutputs(phaseOutputs) {
636
+ let found;
637
+ for (const output of Object.values(phaseOutputs)) {
638
+ const outputs = output?.outputs;
639
+ if (outputs && typeof outputs === "object" && !Array.isArray(outputs)) {
640
+ found = { ...found, ...outputs };
641
+ }
642
+ }
643
+ return found;
644
+ }
645
+ function errMessage(err) {
646
+ return err instanceof Error ? err.message : String(err);
647
+ }
648
+ /**
649
+ * Run a set of components to completion on the local in-process executor:
650
+ * resolve dependency order and parallel-safe waves from `dependsOn`, then run
651
+ * each wave's components (independent components within a wave run
652
+ * concurrently; components across waves run in wave order), dispatching
653
+ * every step to `registry` by `kind`. Stops the whole run at the first failed
654
+ * component (after that component's own saga rollback completes), returning
655
+ * a result with `ok: false`; throws `DriverRunFailure` carrying that result
656
+ * so callers can choose to inspect or propagate it.
657
+ *
658
+ * A component that stops at an unapproved gate (#2119) ends the run the same
659
+ * way, with `status: "gated"` and the pending fact on `gate` — but it is
660
+ * *returned*, never thrown, because nothing failed. Downstream waves do not
661
+ * run: a gate is the author saying a human decides before the rest happens.
662
+ *
663
+ * Zero per-component logic: this function and everything it calls dispatches
664
+ * purely on the generic `Component`/`Phase`/`Step` shapes and the registry —
665
+ * no branch anywhere names a specific component or capability.
666
+ */
667
+ /** A component's `DeployContext` for a run: its env, vars and, when the caller knows it, its release. */
668
+ export function deployContext(options, component) {
669
+ const release = options.releaseIdentity?.(component);
670
+ return { env: options.env, component, ...(options.vars ? { vars: options.vars } : {}), ...(release ? { release: { ...release } } : {}) };
671
+ }
672
+ export async function runInterpretDriver(components, registry, options) {
673
+ const { order, waves } = resolveComponentGraph(components);
674
+ const byName = new Map(components.map((c) => [c.name, c]));
675
+ const componentOutputs = { ...(options.componentOutputs ?? {}) };
676
+ const { onProgress } = options;
677
+ const gates = {
678
+ port: options.gates ?? gitGateLedgerPort(),
679
+ ...(options.now ? { now: options.now } : {}),
680
+ ...(options.releases ? { releases: options.releases } : {}),
681
+ };
682
+ onProgress?.({ type: "run-start", waves });
683
+ const results = [];
684
+ let failedComponent;
685
+ let gated;
686
+ waveLoop: for (const [waveIndex, wave] of waves.entries()) {
687
+ const waveNum = waveIndex + 1;
688
+ onProgress?.({ type: "wave-start", wave: waveNum, components: wave });
689
+ const waveComponents = wave.map((name) => byName.get(name));
690
+ const waveResults = await Promise.all(waveComponents.map(async (component) => {
691
+ onProgress?.({ type: "component-start", wave: waveNum, component: component.name });
692
+ const result = await runComponentDeploy(component, deployContext(options, component.name), registry, componentOutputs, onProgress, gates);
693
+ onProgress?.({ type: "component-done", wave: waveNum, component: component.name, status: progressStatus(result.status) });
694
+ return result;
695
+ }));
696
+ results.push(...waveResults);
697
+ const stopped = waveResults.find((r) => r.status !== "ok");
698
+ onProgress?.({ type: "wave-done", wave: waveNum, status: progressStatus(stopped?.status ?? "ok") });
699
+ if (stopped) {
700
+ // A failure in the same wave outranks a gate: something is actually
701
+ // broken, and reporting the run as "waiting on a human" would hide it.
702
+ const failure = waveResults.find((r) => r.status === "fail");
703
+ if (failure)
704
+ failedComponent = failure.component;
705
+ else
706
+ gated = stopped;
707
+ break waveLoop;
708
+ }
709
+ }
710
+ const status = failedComponent ? "fail" : gated ? "gated" : "ok";
711
+ const ok = status === "ok";
712
+ onProgress?.({ type: "run-done", status: progressStatus(status) });
713
+ const result = {
714
+ order, waves, results, ok, status, failedComponent, componentOutputs,
715
+ ...(gated
716
+ ? {
717
+ gatedComponent: gated.component,
718
+ gate: gated.gate,
719
+ ...(gated.gatePushed !== undefined ? { gatePushed: gated.gatePushed } : {}),
720
+ ...(gated.gatePushWarning ? { gatePushWarning: gated.gatePushWarning } : {}),
721
+ ...(gated.gateMismatch ? { gateMismatch: gated.gateMismatch } : {}),
722
+ }
723
+ : {}),
724
+ };
725
+ if (status === "fail")
726
+ throw new DriverRunFailure(result);
727
+ return result;
728
+ }