@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,140 @@
1
+ /**
2
+ * Renderers for local Op execution. Both consume the same `OpRunResult`:
3
+ * `renderHuman` is the default (logs to stderr), `renderJson` prints the
4
+ * machine-readable record array to stdout and nothing else.
5
+ */
6
+ import { approveCommand } from "./gate.js";
7
+ import { LIFECYCLE_LOCAL_NOTE, isLifecycleLocalNote } from "../lifecycle/local-note.js";
8
+ const stderr = (line) => process.stderr.write(line + "\n");
9
+ const stdout = (line) => process.stdout.write(line + "\n");
10
+ function formatArgs(args) {
11
+ return Object.entries(args)
12
+ .map(([k, v]) => `${k}=${typeof v === "string" ? v : JSON.stringify(v)}`)
13
+ .join(", ");
14
+ }
15
+ function formatDuration(ms) {
16
+ return ms < 1000 ? `${ms}ms` : `${(ms / 1000).toFixed(1)}s`;
17
+ }
18
+ /**
19
+ * Render a run result as human-readable progress. Defaults to stderr so stdout
20
+ * stays clean for piping (the `--json` renderer owns stdout).
21
+ */
22
+ export function renderHuman(result, write = stderr, sealed = false) {
23
+ let currentPhase;
24
+ for (const record of result.records) {
25
+ if (record.phase !== currentPhase) {
26
+ currentPhase = record.phase;
27
+ write(`[phase] ${currentPhase}`);
28
+ }
29
+ const mark = record.status === "ok" ? "✓" : record.status === "fail" ? "✗" : "•";
30
+ const call = `${record.fn}(${formatArgs(record.args ?? {})})`;
31
+ if (record.status === "skipped") {
32
+ write(` ${mark} ${call} skipped`);
33
+ }
34
+ else {
35
+ write(` ${mark} ${call} ${formatDuration(record.durationMs)}`);
36
+ }
37
+ if (record.outcome) {
38
+ write(` [outcome] ${record.outcome.name}=${String(record.outcome.value)}`);
39
+ }
40
+ if (record.approval) {
41
+ write(` [approved] ${record.approval.resolvedBy} at ${record.approval.timestamp}` +
42
+ (record.approval.url ? ` (${record.approval.url})` : ""));
43
+ }
44
+ if (record.refusal) {
45
+ write(` [refused] ${record.refusal}`);
46
+ }
47
+ if (record.point) {
48
+ write(` [waiting] decision point ${record.point.point}: ${record.point.id} is ${record.point.state}`);
49
+ }
50
+ if (record.error) {
51
+ write(` ${record.error}`);
52
+ }
53
+ }
54
+ // The work lease (#2748): which item the run held, and how it ended.
55
+ const work = result.workLease;
56
+ if (work?.item) {
57
+ const end = work.lost
58
+ ? `lost (${work.lost})`
59
+ : work.released
60
+ ? `released ${work.outcome}`
61
+ : "not released; it runs out on its own";
62
+ write(`[work] ${work.item} held by ${work.holder}${work.branch ? ` on ${work.branch}` : ""}: ${end}${work.kept ? `; the attempt is kept at ${work.kept}` : ""}`);
63
+ }
64
+ else if (work?.refusal) {
65
+ write(`[work] nothing claimed: ${work.refusal}`);
66
+ }
67
+ const total = `${(result.totalMs / 1000).toFixed(1)}s`;
68
+ if (result.status === "ok") {
69
+ write(`Op "${result.op}" completed in ${total}`);
70
+ return;
71
+ }
72
+ if (result.status === "waiting" && result.point) {
73
+ // An open decision point (#2749): a fact like a gate. A person answers the
74
+ // question, through hud or at a shell, and the next run reads the answer.
75
+ const { point } = result;
76
+ write(`Op "${result.op}" is waiting on decision point "${point.point}" after ${total}`);
77
+ write(` question: ${point.id} (${point.state}) at ${point.path}`);
78
+ if (point.subject)
79
+ write(` subject : ${point.subject}`);
80
+ write(` answer : ${pointAnswerCommand(point.id)}`);
81
+ return;
82
+ }
83
+ if (result.status === "fail" || !result.gate) {
84
+ write(`Op "${result.op}" failed after ${total}`);
85
+ return;
86
+ }
87
+ // Gated (#2119): a standing fact and the one command that clears it. No
88
+ // hint at another runtime — the run ended here on purpose, and the next one
89
+ // re-reads the ledger.
90
+ const { gate } = result;
91
+ write(`Op "${result.op}" is gated on "${gate.gate}" after ${total}`);
92
+ if (gate.description)
93
+ write(` ${gate.description}`);
94
+ // #2300: the plan the approval will be bound to. Printed before the
95
+ // command, because it is what the command approves.
96
+ if (gate.planDigest)
97
+ write(` plan : ${gate.planDigest}`);
98
+ write(` approve : ${approveCommand(gate.op, gate.gate, undefined, gate.planDigest, sealed)}`);
99
+ if (gate.url)
100
+ write(` approve at: ${gate.url}`);
101
+ write(` expires : ${gate.expiresAt}`);
102
+ // #2310: this run's own append reached only the local chant/lifecycle
103
+ // branch, not the remote. The pending fact is still correct — the gate is
104
+ // still right to stand — but an operator working from a clone of the
105
+ // remote cannot see it to approve it, and nothing else here says so.
106
+ // #3677: with no remote at all, nobody elsewhere approves; one quiet line.
107
+ if (result.gatePushed === false && isLifecycleLocalNote(result.gatePushWarning)) {
108
+ write(` note : ${LIFECYCLE_LOCAL_NOTE}`);
109
+ }
110
+ else if (result.gatePushed === false) {
111
+ write(` warning : the pending fact was not pushed to the remote — ` +
112
+ (result.gatePushWarning ?? "it exists only in this checkout") +
113
+ `. An operator elsewhere cannot approve it until it does.`);
114
+ }
115
+ }
116
+ /**
117
+ * Render the run's ledger record as JSON on stdout (and nothing else on
118
+ * stdout).
119
+ *
120
+ * The record, not the whole `OpRunResult` (#2118): what `chant run <op> --json`
121
+ * emits is byte-for-byte what the run appended to `<env>/runs__<op>.jsonl`, so
122
+ * a consumer reading stdout and one reading the ledger back later agree on
123
+ * every field, the run id included. A gated run's record names the gate it
124
+ * stopped on; the `approve` command line rides alongside so a CI job reporting
125
+ * the gate doesn't have to reassemble it from the op and gate names.
126
+ */
127
+ export function renderJson(result, write = stdout, sealed = false) {
128
+ const approve = result.gate ? { approve: approveCommand(result.gate.op, result.gate.gate, undefined, result.gate.planDigest, sealed) } : {};
129
+ // #2310: whether this run's own append reached the remote — not part of
130
+ // the persisted ledger record (a replay has nothing new to report), but a
131
+ // live run's JSON consumer needs it exactly where the human render shows it.
132
+ const push = result.gatePushed === false
133
+ ? { pushed: false, pushWarning: result.gatePushWarning ?? "the pending fact was recorded locally only" }
134
+ : {};
135
+ write(JSON.stringify({ ...result.record, ...approve, ...push }));
136
+ }
137
+ /** The command a person answers an open decision point with (#2749). */
138
+ export function pointAnswerCommand(id) {
139
+ return `chant workspace points answer ${id} --answer <answer> --by <your name>`;
140
+ }
@@ -0,0 +1,317 @@
1
+ /**
2
+ * op.json IR — chant #1289 ("An Op compiles only to TypeScript, so walk-away
3
+ * cost is zero everywhere except Ops").
4
+ *
5
+ * `OpConfig` is already inert data: every field is a string, number, boolean,
6
+ * or a nested object of those (no functions, no closures, no runtime
7
+ * references — see `./types.ts`). This module is the "second, simpler output
8
+ * from the same walk" the issue asks for: a deterministic
9
+ * `dist/ops/<name>/op.json`, so a foreign runtime (or a dashboard, a policy
10
+ * check, an agent) can read what an Op does without importing chant or
11
+ * parsing generated TypeScript.
12
+ *
13
+ * It lives in core, not in a hosting lexicon (#2118, epic #2114). The IR is a
14
+ * restatement of `OpConfig`, and `OpConfig` is core's — as is the profile
15
+ * table a step's `profile` key names, since #2117. What core does not own is
16
+ * the activity contracts that give a step's args a schema: those stay
17
+ * decentralized, so `buildOpIR` takes the registry as a parameter and defaults
18
+ * it to empty. A caller holding a lexicon's contracts passes them in, and the
19
+ * `activityContracts` section fills out without core ever importing that
20
+ * lexicon.
21
+ *
22
+ * Two things beyond a literal restatement of `OpConfig` earn their place:
23
+ *
24
+ * - Every step's `profile` / gate `timeout` is resolved to its effective
25
+ * value (chant's own default when omitted), and every referenced profile's
26
+ * actual retry/timeout policy rides along out of `ACTIVITY_PROFILES`.
27
+ * Without it a foreign runtime would have to read chant's TypeScript to
28
+ * know what "fastIdempotent" means.
29
+ * - Every step whose `fn` has a registered {@link ActivityContract} in the
30
+ * contract registry the caller passes (chant #1288 Stage 1) gets its args/
31
+ * returns zod schema embedded as JSON Schema (via zod 4's built-in
32
+ * `z.toJSONSchema`), keyed by activity name. This is exactly the payoff
33
+ * the Stage 1 decision comment named: "#1289 (op.json IR) ... build on
34
+ * these [Stage 1] contracts." Ownership stays decentralized — only
35
+ * activities the passed registry knows are covered; a step calling an
36
+ * activity from a lexicon outside it (or one with no registered contract
37
+ * yet) simply has no entry here.
38
+ * - Every step whose contract declares entity-identifying args
39
+ * (`ActivityContract.entities`, chant #2022) gets those args' literal
40
+ * string values resolved into `entities` — the estate join a renderer
41
+ * otherwise had to invent off scope fields like `stackName`. The contract
42
+ * entry echoes the declared key list, so a consumer can resolve values
43
+ * this serialization could not (a step-output ref) itself.
44
+ * JSON-Schema-incompatible contracts (schemas containing transforms or
45
+ * custom types that zod cannot serialize) are skipped gracefully: the
46
+ * activity appears in the Op's step graph but has no entry in
47
+ * activityContracts, consistent with the decentralized and partial
48
+ * coverage philosophy.
49
+ *
50
+ * Resolving defaults loses nothing: parsing `op.json` back into an
51
+ * `OpConfig`-shaped object (`opConfigFromIR`) and re-serializing it produces
52
+ * a byte-identical `op.json`, and a lexicon serializer fed the reconstruction
53
+ * emits byte-identical code (verified by the round-trip tests here) — the
54
+ * issue's own verification criterion.
55
+ *
56
+ * ## Step-output references (chant #1290, #1288 Stage 2 follow-up)
57
+ *
58
+ * A step's `args` may hold a {@link StepOutputRef} (`./step-output-ref.ts`)
59
+ * anywhere in its structure — a placeholder for a
60
+ * prior step's declared return value, which the executor substitutes for at
61
+ * run time from the producing step's record. This module does not
62
+ * special-case it: `irActivityStep` copies `step.args` through as-is (same as
63
+ * every other value), and `JSON.stringify` — both the literal one in
64
+ * `serializeOpIR` and the structural-equality one `z.toJSONSchema`-adjacent
65
+ * consumers would use — drops a `StepOutputRef`'s brand (a `Symbol.for(...)`
66
+ * key; JSON has no symbols) while keeping its three own enumerable string
67
+ * properties. The result is a plain, first-class IR value at exactly the
68
+ * position the reference sat in `args`:
69
+ *
70
+ * ```json
71
+ * { "kind": "step-output-ref", "step": "build-step", "path": "manifestPath" }
72
+ * ```
73
+ *
74
+ * (`path` omitted when the reference is to the whole return value.) This is
75
+ * deliberate, not an accident of `JSON.stringify`'s symbol-dropping — a
76
+ * foreign consumer of op.json can match on `args.<field>.kind ===
77
+ * "step-output-ref"` to recognize a placeholder and resolve it against
78
+ * `steps[].id`/`activityContracts[fn].returns` itself, without ever loading
79
+ * chant's TypeScript. `op-ir.test.ts` asserts the shape directly so a future
80
+ * change to `StepOutputRef`'s own fields (`./step-output-ref.ts`) that would
81
+ * silently change this JSON shape gets caught here.
82
+ */
83
+ import { z } from "zod";
84
+ import { ACTIVITY_PROFILES } from "./activity-profiles.js";
85
+ import { gateName } from "./gate-name.js";
86
+ /**
87
+ * The op.json IR schema version. Bumped on a breaking change to this
88
+ * module's output shape — additive fields (a new optional key) do not
89
+ * require a bump.
90
+ *
91
+ * `2.0` (#2118): `taskQueue` and `namespace` are gone and `searchAttributes`
92
+ * is replaced by `labels`. Those three were the fields only a workflow engine
93
+ * read; an op.json now states what the Op does, not where it runs.
94
+ */
95
+ export const OP_IR_FORMAT_VERSION = "2.0";
96
+ // ── Step helpers ──────────────────────────────────────────────────────────────
97
+ function effectiveProfile(step) {
98
+ return step.profile ?? "fastIdempotent";
99
+ }
100
+ /**
101
+ * The step's entity-identifying arg values (#2022): the literal strings at
102
+ * the arg names its contract declares in `entities`. A non-string there (a
103
+ * step-output ref placeholder, a structured value) is skipped — the IR only
104
+ * states joins it can resolve at serialization; a consumer holding the
105
+ * contract's own `entities` key list can resolve the rest itself.
106
+ */
107
+ function stepEntities(step, contracts) {
108
+ const declared = contracts.get(step.fn)?.entities;
109
+ if (!declared || declared.length === 0)
110
+ return undefined;
111
+ const values = [];
112
+ for (const key of declared) {
113
+ const value = (step.args ?? {})[key];
114
+ if (typeof value === "string")
115
+ values.push(value);
116
+ }
117
+ return values.length > 0 ? values : undefined;
118
+ }
119
+ function irActivityStep(step, contracts) {
120
+ const entities = stepEntities(step, contracts);
121
+ return {
122
+ kind: "activity",
123
+ fn: step.fn,
124
+ args: step.args ?? {},
125
+ profile: effectiveProfile(step),
126
+ ...(step.timeout !== undefined ? { timeout: step.timeout } : {}),
127
+ ...(entities ? { entities } : {}),
128
+ ...(step.outcomeAttribute ? { outcomeAttribute: step.outcomeAttribute } : {}),
129
+ };
130
+ }
131
+ function irGateStep(step) {
132
+ return {
133
+ kind: "gate",
134
+ gate: gateName(step),
135
+ timeout: step.timeout ?? "48h",
136
+ ...(step.description ? { description: step.description } : {}),
137
+ ...(step.plan !== undefined ? { plan: step.plan } : {}),
138
+ ...(step.approval !== undefined ? { approval: step.approval } : {}),
139
+ ...(step.point !== undefined ? { point: step.point } : {}),
140
+ };
141
+ }
142
+ function irEffectStep(step, contracts) {
143
+ return {
144
+ kind: "effect",
145
+ receipt: step.receipt,
146
+ ...(step.expectation !== undefined ? { expectation: step.expectation } : {}),
147
+ steps: step.steps.map((s) => (s.kind === "activity" ? irActivityStep(s, contracts) : irGateStep(s))),
148
+ ...(step.description ? { description: step.description } : {}),
149
+ };
150
+ }
151
+ function irStep(step, contracts) {
152
+ if (step.kind === "activity")
153
+ return irActivityStep(step, contracts);
154
+ if (step.kind === "gate")
155
+ return irGateStep(step);
156
+ return irEffectStep(step, contracts);
157
+ }
158
+ function irPhase(phase, contracts) {
159
+ return {
160
+ name: phase.name,
161
+ parallel: phase.parallel ?? false,
162
+ steps: phase.steps.map((s) => irStep(s, contracts)),
163
+ };
164
+ }
165
+ // ── Referenced-activity collection ─────────────────────────────────────────────
166
+ /** Every `ActivityStep` reachable from a phase list, including ones nested inside an `EffectStep`. */
167
+ function activityStepsOf(phases) {
168
+ const out = [];
169
+ for (const phase of phases) {
170
+ for (const step of phase.steps) {
171
+ if (step.kind === "activity")
172
+ out.push(step);
173
+ else if (step.kind === "effect") {
174
+ for (const nested of step.steps)
175
+ if (nested.kind === "activity")
176
+ out.push(nested);
177
+ }
178
+ }
179
+ }
180
+ return out;
181
+ }
182
+ /** No contracts unless a caller supplies them — core does not own that registry. See the module doc. */
183
+ const NO_CONTRACTS = new Map();
184
+ /** Sort object keys for a set-like dictionary without a meaningful authored order (profiles/contracts, keyed by name). */
185
+ function sortedEntries(map) {
186
+ const out = {};
187
+ for (const key of [...map.keys()].sort())
188
+ out[key] = map.get(key);
189
+ return out;
190
+ }
191
+ // ── Public API ────────────────────────────────────────────────────────────────
192
+ /**
193
+ * Build the deterministic op.json IR for one Op's config.
194
+ *
195
+ * `contractRegistry` is the one thing core does not own (see the module doc):
196
+ * a caller holding a lexicon's activity contracts passes them in and
197
+ * `activityContracts` fills out. Omitted, that section is empty — the step
198
+ * graph, the labels and every step's resolved `profile` name are unaffected
199
+ * either way. `profileRegistry` defaults to core's own `ACTIVITY_PROFILES`;
200
+ * a test overrides it.
201
+ */
202
+ export function buildOpIR(config, contractRegistry = NO_CONTRACTS, profileRegistry = ACTIVITY_PROFILES) {
203
+ const allSteps = [...activityStepsOf(config.phases), ...activityStepsOf(config.onFailure ?? [])];
204
+ const profiles = new Map();
205
+ const contracts = new Map();
206
+ for (const step of allSteps) {
207
+ const prof = effectiveProfile(step);
208
+ if (!profiles.has(prof) && prof in profileRegistry) {
209
+ profiles.set(prof, profileRegistry[prof]);
210
+ }
211
+ if (!contracts.has(step.fn)) {
212
+ const contract = contractRegistry.get(step.fn);
213
+ if (contract) {
214
+ try {
215
+ const args = z.toJSONSchema(contract.args);
216
+ const returns = contract.returns ? z.toJSONSchema(contract.returns) : undefined;
217
+ contracts.set(step.fn, {
218
+ args,
219
+ ...(returns ? { returns } : {}),
220
+ ...(contract.entities && contract.entities.length > 0 ? { entities: contract.entities } : {}),
221
+ });
222
+ }
223
+ catch {
224
+ // zod 4's toJSONSchema throws on schemas containing transforms or custom types.
225
+ // Gracefully skip this contract — the activity remains in the step graph but
226
+ // has no entry in activityContracts. Consistent with the decentralized and
227
+ // partial coverage philosophy.
228
+ }
229
+ }
230
+ }
231
+ }
232
+ return {
233
+ formatVersion: OP_IR_FORMAT_VERSION,
234
+ name: config.name,
235
+ overview: config.overview,
236
+ depends: config.depends ?? [],
237
+ labels: config.labels ?? {},
238
+ ...(config.schedule ? { schedule: config.schedule } : {}),
239
+ ...(config.workLease ? { workLease: config.workLease } : {}),
240
+ ...(config.changesCheckout ? { changesCheckout: true } : {}),
241
+ ...(config.neverOverMcp ? { neverOverMcp: true } : {}),
242
+ ...(config.failOn ? { failOn: config.failOn } : {}),
243
+ phases: config.phases.map((p) => irPhase(p, contractRegistry)),
244
+ onFailure: (config.onFailure ?? []).map((p) => irPhase(p, contractRegistry)),
245
+ activityProfiles: sortedEntries(profiles),
246
+ activityContracts: sortedEntries(contracts),
247
+ };
248
+ }
249
+ /** Serialize one Op's op.json IR to a deterministic JSON string (stable key order, 2-space indent, trailing newline). Takes the same two optional registries as {@link buildOpIR}. */
250
+ export function serializeOpIR(config, contractRegistry, profileRegistry) {
251
+ return JSON.stringify(buildOpIR(config, contractRegistry, profileRegistry), null, 2) + "\n";
252
+ }
253
+ // ── Round trip (op.json → OpConfig) ────────────────────────────────────────────
254
+ //
255
+ // The inverse of `buildOpIR`. Exists primarily to prove the IR's own
256
+ // verification criterion (chant #1289): parsing `op.json` back into an
257
+ // `OpConfig`-shaped object and re-serializing it round-trips byte-identically,
258
+ // and a lexicon serializer fed the reconstruction emits identical code. Also
259
+ // the mechanical shape a foreign consumer would use to drive its own executor
260
+ // off the IR rather than the generated TypeScript.
261
+ function opStepFromIR(step) {
262
+ if (step.kind === "activity") {
263
+ return {
264
+ kind: "activity",
265
+ fn: step.fn,
266
+ args: step.args,
267
+ profile: step.profile,
268
+ ...(step.timeout !== undefined ? { timeout: step.timeout } : {}),
269
+ ...(step.outcomeAttribute ? { outcomeAttribute: step.outcomeAttribute } : {}),
270
+ };
271
+ }
272
+ if (step.kind === "gate") {
273
+ return {
274
+ kind: "gate",
275
+ gate: step.gate,
276
+ timeout: step.timeout,
277
+ ...(step.description ? { description: step.description } : {}),
278
+ ...(step.plan !== undefined ? { plan: step.plan } : {}),
279
+ ...(step.approval !== undefined ? { approval: step.approval } : {}),
280
+ ...(step.point !== undefined ? { point: step.point } : {}),
281
+ };
282
+ }
283
+ return {
284
+ kind: "effect",
285
+ receipt: step.receipt,
286
+ ...(step.expectation !== undefined ? { expectation: step.expectation } : {}),
287
+ steps: step.steps.map((s) => opStepFromIR(s)),
288
+ ...(step.description ? { description: step.description } : {}),
289
+ };
290
+ }
291
+ function opPhaseFromIR(phase) {
292
+ return {
293
+ name: phase.name,
294
+ steps: phase.steps.map(opStepFromIR),
295
+ ...(phase.parallel ? { parallel: true } : {}),
296
+ };
297
+ }
298
+ /** Reconstruct an `OpConfig` from its op.json IR. */
299
+ export function opConfigFromIR(ir) {
300
+ if (ir.formatVersion !== OP_IR_FORMAT_VERSION) {
301
+ throw new Error(`op.json IR format mismatch: expected "${OP_IR_FORMAT_VERSION}", got "${ir.formatVersion}". ` +
302
+ `This op.json may be stale or from a newer chant version.`);
303
+ }
304
+ return {
305
+ name: ir.name,
306
+ overview: ir.overview,
307
+ phases: ir.phases.map(opPhaseFromIR),
308
+ ...(ir.depends.length > 0 ? { depends: ir.depends } : {}),
309
+ ...(ir.onFailure.length > 0 ? { onFailure: ir.onFailure.map(opPhaseFromIR) } : {}),
310
+ ...(Object.keys(ir.labels).length > 0 ? { labels: ir.labels } : {}),
311
+ ...(ir.schedule ? { schedule: ir.schedule } : {}),
312
+ ...(ir.workLease ? { workLease: ir.workLease } : {}),
313
+ ...(ir.changesCheckout ? { changesCheckout: true } : {}),
314
+ ...(ir.neverOverMcp ? { neverOverMcp: true } : {}),
315
+ ...(ir.failOn ? { failOn: ir.failOn } : {}),
316
+ };
317
+ }
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Op verb classification (#1484) — generalizes `delete: "never" | "owned-only"
3
+ * | "gated"` (`../lifecycle` teardown/apply's `DeleteMode`) up one level, to
4
+ * the whole Op: read-only, mutating, or destructive. `ConvergeOp`'s
5
+ * dial × verb-class matrix (the issue's "Autonomy" table) needs to answer
6
+ * "what kind of thing is this dispatched Op, from the outside" for an
7
+ * arbitrary declared Op — including one this project's authors wrote, not
8
+ * just the pre-built composites — so classification walks `OpConfig`'s
9
+ * steps rather than trusting a self-reported tag.
10
+ *
11
+ * There is no existing per-Op verb-class field (`labels` is a free
12
+ * `Record<string,string>` an author may or may not set — `ApplyOp` tags
13
+ * `{ Apply: "true" }` but nothing requires it, and it carries no verb-class
14
+ * semantics on its own) and no existing "which activity names are
15
+ * destructive" registry (`../lint/pipeline-change-gate.ts`'s classifier is
16
+ * shaped for a `Component` composition's capability-verb steps, not an
17
+ * `OpConfig`'s activity steps — a genuinely different graph). This module is
18
+ * that registry's Op-shaped sibling: a small, explicit set of known
19
+ * mutating/destructive activity function names, plus the one piece of
20
+ * structured signal that already exists (`nativeApply`'s `deleteMode` arg).
21
+ *
22
+ * Fail-closed by construction: an activity `fn` this module doesn't
23
+ * recognize is classified `mutating`, never `read-only` — an unknown step
24
+ * might do anything, and "unknown never remediates" (the issue's own honesty
25
+ * requirement for symptoms) applies here too: this module never silently
26
+ * clears an Op to free-run just because its steps aren't in the known-safe
27
+ * list.
28
+ */
29
+ /** Activity function names known to be read-only — verification, observation, audit. Anything not in this set is treated as at least `mutating` (fail-closed). */
30
+ const READ_ONLY_ACTIVITY_FNS = new Set([
31
+ "lifecycleSnapshot",
32
+ "lifecycleDiff",
33
+ "composeChangeSet",
34
+ "lifecyclePlanChangeSet",
35
+ "readChangeSetPart",
36
+ "httpCheck",
37
+ "policyGate",
38
+ "workflowSupplyChainAudit",
39
+ "pipelineSupplyChainAudit",
40
+ "receiptStaleness",
41
+ "waitForStack",
42
+ "waitForReady",
43
+ "waitForArgoSync",
44
+ "spriteReadFile",
45
+ "spriteListDir",
46
+ "listCheckpoints",
47
+ "convergeTick",
48
+ "spriteUrl",
49
+ "spriteServiceGet",
50
+ "spriteServiceList",
51
+ "spriteServiceLogs",
52
+ "spriteServicesObserve",
53
+ ]);
54
+ /** Activity function names that always delete/destroy, regardless of args. */
55
+ const ALWAYS_DESTRUCTIVE_ACTIVITY_FNS = new Set([
56
+ "envTeardown",
57
+ "chantTeardown",
58
+ "azDelete",
59
+ "awsDelete",
60
+ "gcpDelete",
61
+ "spriteDestroy",
62
+ "spriteDelete",
63
+ "spriteServiceDelete",
64
+ "k3dDown",
65
+ "k3sUninstall",
66
+ ]);
67
+ function stepsOf(config) {
68
+ const all = [...config.phases, ...(config.onFailure ?? [])].flatMap((p) => p.steps);
69
+ const flat = [];
70
+ for (const step of all) {
71
+ if (step.kind === "activity")
72
+ flat.push(step);
73
+ else if (step.kind === "effect")
74
+ flat.push(...step.steps.filter((s) => s.kind === "activity"));
75
+ }
76
+ return flat;
77
+ }
78
+ /**
79
+ * Classify an Op's own composition. Pure — reads only the passed config, no
80
+ * I/O. `nativeApply`'s `deleteMode` (`"never" | "owned-only" | "gated"`) is
81
+ * read straight off the step's `args` — `"owned-only"`/`"gated"` are
82
+ * destructive (both can delete a live resource), `"never"`/absent is merely
83
+ * mutating (creates/updates only). A step whose `fn` matches neither the
84
+ * read-only nor the destructive set is `mutating` by default (fail-closed).
85
+ */
86
+ export function classifyOpVerbClass(config) {
87
+ let sawMutating = false;
88
+ for (const step of stepsOf(config)) {
89
+ if (ALWAYS_DESTRUCTIVE_ACTIVITY_FNS.has(step.fn))
90
+ return "destructive";
91
+ if (step.fn === "nativeApply") {
92
+ const deleteMode = step.args?.deleteMode;
93
+ if (deleteMode === "owned-only" || deleteMode === "gated")
94
+ return "destructive";
95
+ sawMutating = true;
96
+ continue;
97
+ }
98
+ if (step.fn === "compensateApply") {
99
+ // Rollback compensation — mutating (it re-applies a prior state), not
100
+ // itself a fresh destructive act.
101
+ sawMutating = true;
102
+ continue;
103
+ }
104
+ if (READ_ONLY_ACTIVITY_FNS.has(step.fn))
105
+ continue;
106
+ // Unknown or known-mutating fn: fail-closed to mutating.
107
+ sawMutating = true;
108
+ }
109
+ return sawMutating ? "mutating" : "read-only";
110
+ }
111
+ /**
112
+ * Does this Op have its own approval gate anywhere in its phases (main or
113
+ * `onFailure`), including one nested inside an effect step?
114
+ *
115
+ * A declaration-time question, not a run-time one: a gate is a fact the
116
+ * executor decides against the ledger when it reaches one (#2119,
117
+ * `./gate.ts`), so this says "this op can stop for a human", never "this op
118
+ * will stop". `OPS014`'s dispatch refusals are the caller that needs it.
119
+ */
120
+ export function isGated(config) {
121
+ const isGate = (s) => s.kind === "gate";
122
+ for (const phase of [...config.phases, ...(config.onFailure ?? [])]) {
123
+ for (const step of phase.steps) {
124
+ if (isGate(step))
125
+ return true;
126
+ if (step.kind === "effect" && step.steps.some(isGate))
127
+ return true;
128
+ }
129
+ }
130
+ return false;
131
+ }