@intentius/chant 0.124.13 → 0.124.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (907) hide show
  1. package/bin/chant +11 -0
  2. package/dist/agents/checks.js +326 -0
  3. package/dist/agents/discover.js +885 -0
  4. package/dist/agents/importer.js +17 -0
  5. package/dist/agents/index.js +12 -0
  6. package/dist/agents/types.js +19 -0
  7. package/dist/apply.js +151 -0
  8. package/dist/attrref.js +70 -0
  9. package/dist/audit/catalog.js +350 -0
  10. package/dist/audit/core.js +252 -0
  11. package/dist/audit/discover.js +633 -0
  12. package/dist/audit/fetch.js +666 -0
  13. package/dist/audit/lineage.js +91 -0
  14. package/dist/audit/nginx.js +366 -0
  15. package/dist/audit/prior-art.js +132 -0
  16. package/dist/audit/proof.js +321 -0
  17. package/dist/audit/report-html.js +194 -0
  18. package/dist/audit/report-model.js +198 -0
  19. package/dist/audit/report.js +102 -0
  20. package/dist/audit/rules-doc.js +144 -0
  21. package/dist/audit/secrets.js +405 -0
  22. package/dist/audit/terraform-state.js +140 -0
  23. package/dist/audit/wrangler.js +262 -0
  24. package/dist/behaviour-delta.js +401 -0
  25. package/dist/behaviour-engine.js +357 -0
  26. package/dist/behaviour-graph.js +83 -0
  27. package/dist/behaviour-http.js +188 -0
  28. package/dist/behaviour-kinds.js +172 -0
  29. package/dist/behaviour-overlay.js +50 -0
  30. package/dist/behaviour-predict.js +188 -0
  31. package/dist/behaviour-request.js +194 -0
  32. package/dist/behaviour.js +1325 -0
  33. package/dist/build-params.js +108 -0
  34. package/dist/build.js +668 -0
  35. package/dist/builder.js +44 -0
  36. package/dist/cdk/advise.js +30 -0
  37. package/dist/cdk/assembly.js +122 -0
  38. package/dist/cdk/graph.js +444 -0
  39. package/dist/cdk/tier-map.js +64 -0
  40. package/dist/cdk/types.js +24 -0
  41. package/dist/change-set.js +312 -0
  42. package/dist/child-project.js +21 -0
  43. package/dist/claimed-fields.js +135 -0
  44. package/dist/cli/build-options.js +70 -0
  45. package/dist/cli/build-params-cli.js +139 -0
  46. package/dist/cli/command-group.js +123 -0
  47. package/dist/cli/commands/audit-agents.js +326 -0
  48. package/dist/cli/commands/audit.js +571 -0
  49. package/dist/cli/commands/build.js +920 -0
  50. package/dist/cli/commands/carve-apply.js +153 -0
  51. package/dist/cli/commands/carve-bridge.js +201 -0
  52. package/dist/cli/commands/carve-emit.js +332 -0
  53. package/dist/cli/commands/carve-status.js +119 -0
  54. package/dist/cli/commands/carve.js +204 -0
  55. package/dist/cli/commands/check-lexicon-docs.js +79 -0
  56. package/dist/cli/commands/check-lexicon-examples.js +177 -0
  57. package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
  58. package/dist/cli/commands/check-lexicon-mcp.js +82 -0
  59. package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
  60. package/dist/cli/commands/check-lexicon-plugin.js +104 -0
  61. package/dist/cli/commands/check-lexicon.js +766 -0
  62. package/dist/cli/commands/describe.js +85 -0
  63. package/dist/cli/commands/diff.js +175 -0
  64. package/dist/cli/commands/doctor.js +350 -0
  65. package/dist/cli/commands/import-agents.js +155 -0
  66. package/dist/cli/commands/import.js +670 -0
  67. package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
  68. package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
  69. package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
  70. package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
  71. package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
  72. package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
  73. package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
  74. package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
  75. package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
  76. package/dist/cli/commands/init-lexicon.js +172 -0
  77. package/dist/cli/commands/init.js +381 -0
  78. package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
  79. package/dist/cli/commands/lexicon-surface-diff.js +145 -0
  80. package/dist/cli/commands/licenses.js +125 -0
  81. package/dist/cli/commands/lint.d.ts.map +1 -1
  82. package/dist/cli/commands/lint.js +948 -0
  83. package/dist/cli/commands/list.js +63 -0
  84. package/dist/cli/commands/migrate.d.ts.map +1 -1
  85. package/dist/cli/commands/migrate.js +423 -0
  86. package/dist/cli/commands/onboard.js +403 -0
  87. package/dist/cli/commands/pinned-upgrade.js +191 -0
  88. package/dist/cli/commands/update.js +194 -0
  89. package/dist/cli/commands/vendor.js +217 -0
  90. package/dist/cli/conflict-check.js +104 -0
  91. package/dist/cli/debug.js +8 -0
  92. package/dist/cli/format.js +104 -0
  93. package/dist/cli/handlers/build.js +267 -0
  94. package/dist/cli/handlers/carve-apply.js +30 -0
  95. package/dist/cli/handlers/carve-bridge.js +28 -0
  96. package/dist/cli/handlers/carve-emit.js +50 -0
  97. package/dist/cli/handlers/carve-status.js +26 -0
  98. package/dist/cli/handlers/carve.js +40 -0
  99. package/dist/cli/handlers/change-set.js +46 -0
  100. package/dist/cli/handlers/components.js +730 -0
  101. package/dist/cli/handlers/dev.js +113 -0
  102. package/dist/cli/handlers/emulator.js +233 -0
  103. package/dist/cli/handlers/explain.js +54 -0
  104. package/dist/cli/handlers/fan-out.js +422 -0
  105. package/dist/cli/handlers/gate-resume.js +275 -0
  106. package/dist/cli/handlers/generate.js +84 -0
  107. package/dist/cli/handlers/graph.js +969 -0
  108. package/dist/cli/handlers/init.js +102 -0
  109. package/dist/cli/handlers/lifecycle.js +1727 -0
  110. package/dist/cli/handlers/lint.js +62 -0
  111. package/dist/cli/handlers/migrate.js +48 -0
  112. package/dist/cli/handlers/misc.js +391 -0
  113. package/dist/cli/handlers/operator.js +1162 -0
  114. package/dist/cli/handlers/override-approve.js +102 -0
  115. package/dist/cli/handlers/pr.js +503 -0
  116. package/dist/cli/handlers/promote.js +342 -0
  117. package/dist/cli/handlers/run-generate.js +206 -0
  118. package/dist/cli/handlers/run-wave.js +66 -0
  119. package/dist/cli/handlers/run.js +1191 -0
  120. package/dist/cli/handlers/scenario.js +325 -0
  121. package/dist/cli/handlers/search.js +924 -0
  122. package/dist/cli/handlers/serve.js +32 -0
  123. package/dist/cli/handlers/vendor.js +154 -0
  124. package/dist/cli/index.js +3 -0
  125. package/dist/cli/is-entry-point.js +23 -0
  126. package/dist/cli/lsp/capabilities.js +28 -0
  127. package/dist/cli/lsp/diagnostics.js +34 -0
  128. package/dist/cli/lsp/server.js +329 -0
  129. package/dist/cli/main.d.ts.map +1 -1
  130. package/dist/cli/main.js +2540 -0
  131. package/dist/cli/mcp/lifecycle-tools.js +80 -0
  132. package/dist/cli/mcp/op-tools.js +306 -0
  133. package/dist/cli/mcp/resource-handlers.js +258 -0
  134. package/dist/cli/mcp/resources/context.js +85 -0
  135. package/dist/cli/mcp/server.js +353 -0
  136. package/dist/cli/mcp/tools/build.js +111 -0
  137. package/dist/cli/mcp/tools/composites.js +95 -0
  138. package/dist/cli/mcp/tools/explain.js +166 -0
  139. package/dist/cli/mcp/tools/import.js +49 -0
  140. package/dist/cli/mcp/tools/lint.js +41 -0
  141. package/dist/cli/mcp/tools/scaffold.js +111 -0
  142. package/dist/cli/mcp/tools/search.js +112 -0
  143. package/dist/cli/mcp/types.js +1 -0
  144. package/dist/cli/mcp/workspace-plugins.js +91 -0
  145. package/dist/cli/mcp/workspace-tools.d.ts +1 -1
  146. package/dist/cli/mcp/workspace-tools.js +564 -0
  147. package/dist/cli/mcp-config.js +70 -0
  148. package/dist/cli/plugins.js +313 -0
  149. package/dist/cli/registry.js +23 -0
  150. package/dist/cli/reporters/stylish.js +329 -0
  151. package/dist/cli/version.js +15 -0
  152. package/dist/cli/watch.js +79 -0
  153. package/dist/codegen/bound-property-types.js +82 -0
  154. package/dist/codegen/coverage.js +119 -0
  155. package/dist/codegen/docs-file-markers.js +60 -0
  156. package/dist/codegen/docs-pages.js +115 -0
  157. package/dist/codegen/docs-rule-scanning.js +164 -0
  158. package/dist/codegen/docs-rules.js +76 -0
  159. package/dist/codegen/docs-sections.js +117 -0
  160. package/dist/codegen/docs-sidebar.js +65 -0
  161. package/dist/codegen/docs-types.js +4 -0
  162. package/dist/codegen/docs.js +356 -0
  163. package/dist/codegen/fetch.js +340 -0
  164. package/dist/codegen/generate-post-synth-barrel.js +63 -0
  165. package/dist/codegen/generate-registry.js +71 -0
  166. package/dist/codegen/generate-runtime-index.js +56 -0
  167. package/dist/codegen/generate-typescript.js +119 -0
  168. package/dist/codegen/generate.js +115 -0
  169. package/dist/codegen/json-patch.js +141 -0
  170. package/dist/codegen/json-schema-to-ts.js +344 -0
  171. package/dist/codegen/json-schema.js +246 -0
  172. package/dist/codegen/lexicon-regen.js +412 -0
  173. package/dist/codegen/naming.js +217 -0
  174. package/dist/codegen/okf-lexicon.js +245 -0
  175. package/dist/codegen/package.js +150 -0
  176. package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
  177. package/dist/codegen/pinned-upgrade.js +494 -0
  178. package/dist/codegen/registry.js +60 -0
  179. package/dist/codegen/rehype-base-url.mjs +68 -0
  180. package/dist/codegen/rolling-upgrade.js +217 -0
  181. package/dist/codegen/surface-snapshot.js +537 -0
  182. package/dist/codegen/testdata/postgres-tags.json +242 -0
  183. package/dist/codegen/topo-sort.js +36 -0
  184. package/dist/codegen/typecheck.js +115 -0
  185. package/dist/codegen/validate.js +200 -0
  186. package/dist/codegen/version-bump.js +35 -0
  187. package/dist/components/auto-release.js +143 -0
  188. package/dist/components/builders.js +47 -0
  189. package/dist/components/capability-plugin-loader.js +175 -0
  190. package/dist/components/capability-plugin-schema.js +46 -0
  191. package/dist/components/capability-plugin.js +99 -0
  192. package/dist/components/capability.js +60 -0
  193. package/dist/components/changed-files.js +72 -0
  194. package/dist/components/cli-support.js +427 -0
  195. package/dist/components/component.js +120 -0
  196. package/dist/components/component.schema.json +271 -0
  197. package/dist/components/config-defaults.js +130 -0
  198. package/dist/components/deploy-units.js +60 -0
  199. package/dist/components/discover.d.ts.map +1 -1
  200. package/dist/components/discover.js +189 -0
  201. package/dist/components/driver-output.js +86 -0
  202. package/dist/components/driver.js +728 -0
  203. package/dist/components/fan-out-output.js +165 -0
  204. package/dist/components/fan-out-record.js +94 -0
  205. package/dist/components/fan-out-run.js +373 -0
  206. package/dist/components/fan-out-support.js +60 -0
  207. package/dist/components/fan-out.js +273 -0
  208. package/dist/components/gate-plan.js +41 -0
  209. package/dist/components/gated-wave-pipeline.js +46 -0
  210. package/dist/components/index.js +24 -0
  211. package/dist/components/layers.js +28 -0
  212. package/dist/components/manifest-persistence.js +108 -0
  213. package/dist/components/pilots/alb-ecs.pilot.js +59 -0
  214. package/dist/components/pilots/dynamodb.pilot.js +51 -0
  215. package/dist/components/pilots/jar-emr.pilot.js +65 -0
  216. package/dist/components/pilots/lambda.pilot.js +52 -0
  217. package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
  218. package/dist/components/pilots/project.js +12 -0
  219. package/dist/components/pr-pipeline.js +134 -0
  220. package/dist/components/pr-run.js +363 -0
  221. package/dist/components/presets/ecs-fargate.js +72 -0
  222. package/dist/components/presets/index.js +28 -0
  223. package/dist/components/presets/lambda.js +34 -0
  224. package/dist/components/presets/single-host-compose.js +41 -0
  225. package/dist/components/promote.js +549 -0
  226. package/dist/components/registry.js +34 -0
  227. package/dist/components/run-progress.js +33 -0
  228. package/dist/components/sandbox/driver.d.ts.map +1 -1
  229. package/dist/components/sandbox/driver.js +93 -0
  230. package/dist/components/sandbox/run.js +115 -0
  231. package/dist/components/starter-plugin.js +104 -0
  232. package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
  233. package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
  234. package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
  235. package/dist/components/verbs/bom-writer.js +287 -0
  236. package/dist/components/verbs/build-archive.js +188 -0
  237. package/dist/components/verbs/build.js +142 -0
  238. package/dist/components/verbs/cloud-executor.js +110 -0
  239. package/dist/components/verbs/component-bom.js +125 -0
  240. package/dist/components/verbs/ensure-secret.js +50 -0
  241. package/dist/components/verbs/index.js +61 -0
  242. package/dist/components/verbs/license-policy.js +75 -0
  243. package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
  244. package/dist/components/verbs/process-runner.js +78 -0
  245. package/dist/components/verbs/r2-sync.js +93 -0
  246. package/dist/components/verbs/reproducibility.js +62 -0
  247. package/dist/components/verbs/run-agent.js +577 -0
  248. package/dist/components/verbs/sbom-generator.js +119 -0
  249. package/dist/components/verbs/sbom.js +97 -0
  250. package/dist/components/verbs/shell.js +32 -0
  251. package/dist/components/verbs/sign.js +221 -0
  252. package/dist/components/verbs/stub.js +28 -0
  253. package/dist/components/verbs/tool-sbom-generator.js +154 -0
  254. package/dist/components/verbs/verify.js +112 -0
  255. package/dist/components/verbs/vex.js +131 -0
  256. package/dist/components/verbs/vuln-gate.js +152 -0
  257. package/dist/components/verbs/vuln-scan.js +288 -0
  258. package/dist/components/verbs/wait-verify.js +106 -0
  259. package/dist/components/verbs/wrangler.js +179 -0
  260. package/dist/components/wave-plan.js +102 -0
  261. package/dist/composite.js +305 -0
  262. package/dist/config-import.d.ts.map +1 -1
  263. package/dist/config-import.js +22 -0
  264. package/dist/config-sandbox.js +122 -0
  265. package/dist/config-static.js +206 -0
  266. package/dist/config.js +605 -0
  267. package/dist/content-digest.js +23 -0
  268. package/dist/declarable.js +114 -0
  269. package/dist/deep-observation.js +437 -0
  270. package/dist/detectLexicon.js +54 -0
  271. package/dist/discovery/cache.js +70 -0
  272. package/dist/discovery/collect.js +208 -0
  273. package/dist/discovery/cycles.js +95 -0
  274. package/dist/discovery/entity-wire-codec.js +391 -0
  275. package/dist/discovery/entity-wire.js +42 -0
  276. package/dist/discovery/files.js +121 -0
  277. package/dist/discovery/fold-import.d.ts.map +1 -1
  278. package/dist/discovery/fold-import.js +4178 -0
  279. package/dist/discovery/fold-rank.js +292 -0
  280. package/dist/discovery/graph.js +115 -0
  281. package/dist/discovery/import.d.ts.map +1 -1
  282. package/dist/discovery/import.js +65 -0
  283. package/dist/discovery/index.js +333 -0
  284. package/dist/discovery/param-deps.js +487 -0
  285. package/dist/discovery/resolve.js +39 -0
  286. package/dist/discovery/sandbox/bundle.js +214 -0
  287. package/dist/discovery/sandbox/child-errors.js +26 -0
  288. package/dist/discovery/sandbox/config-run.js +100 -0
  289. package/dist/discovery/sandbox/config-wire.js +183 -0
  290. package/dist/discovery/sandbox/driver.d.ts.map +1 -1
  291. package/dist/discovery/sandbox/driver.js +333 -0
  292. package/dist/discovery/sandbox/fork.js +229 -0
  293. package/dist/discovery/sandbox/policy-run.js +142 -0
  294. package/dist/discovery/sandbox/policy-wire.js +152 -0
  295. package/dist/discovery/sandbox/run.js +77 -0
  296. package/dist/discovery/specifier-resolve.js +320 -0
  297. package/dist/discovery/walk.js +284 -0
  298. package/dist/effect-receipt.js +340 -0
  299. package/dist/env.js +55 -0
  300. package/dist/errors.js +62 -0
  301. package/dist/fold/fold.js +1434 -0
  302. package/dist/fold/foldable-helpers.js +229 -0
  303. package/dist/fold/subset.js +696 -0
  304. package/dist/fold-provenance.js +414 -0
  305. package/dist/gate-decision.js +260 -0
  306. package/dist/gate-resume-run.js +154 -0
  307. package/dist/gated-waves.js +165 -0
  308. package/dist/governance.js +43 -0
  309. package/dist/graph-declared.js +45 -0
  310. package/dist/graph-detail.js +207 -0
  311. package/dist/graph-dot.js +54 -0
  312. package/dist/graph-effective.js +107 -0
  313. package/dist/graph-ir.js +623 -0
  314. package/dist/graph-layout.js +184 -0
  315. package/dist/graph-lens.js +105 -0
  316. package/dist/graph-mermaid.js +83 -0
  317. package/dist/graph-ops.js +39 -0
  318. package/dist/graph-refs.js +156 -0
  319. package/dist/held-elsewhere.js +87 -0
  320. package/dist/identity.js +251 -0
  321. package/dist/import/base-parser.js +34 -0
  322. package/dist/import/embedded.js +255 -0
  323. package/dist/import/generator.js +1 -0
  324. package/dist/import/ir-utils.js +85 -0
  325. package/dist/import/parser-options.js +45 -0
  326. package/dist/import/parser.js +1 -0
  327. package/dist/index.js +118 -0
  328. package/dist/intrinsic-interpolation.js +73 -0
  329. package/dist/intrinsic.js +31 -0
  330. package/dist/join-key.js +35 -0
  331. package/dist/kubectl-context.js +150 -0
  332. package/dist/lexicon-config.js +58 -0
  333. package/dist/lexicon-integrity.js +47 -0
  334. package/dist/lexicon-manifest.js +70 -0
  335. package/dist/lexicon-module.d.ts.map +1 -1
  336. package/dist/lexicon-module.js +241 -0
  337. package/dist/lexicon-output.js +218 -0
  338. package/dist/lexicon-plugin-helpers.js +104 -0
  339. package/dist/lexicon-schema.js +136 -0
  340. package/dist/lexicon.js +130 -0
  341. package/dist/lifecycle/affected.js +224 -0
  342. package/dist/lifecycle/assert-live.js +110 -0
  343. package/dist/lifecycle/build-ledger-store.js +160 -0
  344. package/dist/lifecycle/build-ledger.js +155 -0
  345. package/dist/lifecycle/change-set.js +356 -0
  346. package/dist/lifecycle/converge-ledger.js +161 -0
  347. package/dist/lifecycle/deep-diff.js +233 -0
  348. package/dist/lifecycle/deep-observe.js +147 -0
  349. package/dist/lifecycle/digest.js +143 -0
  350. package/dist/lifecycle/disruption.js +135 -0
  351. package/dist/lifecycle/gate-applied.js +113 -0
  352. package/dist/lifecycle/gate-audit.js +341 -0
  353. package/dist/lifecycle/gate-ledger-select.js +89 -0
  354. package/dist/lifecycle/gate-ledger.js +193 -0
  355. package/dist/lifecycle/gate-origin.js +117 -0
  356. package/dist/lifecycle/gate-pending.js +58 -0
  357. package/dist/lifecycle/git.js +1182 -0
  358. package/dist/lifecycle/identity.js +58 -0
  359. package/dist/lifecycle/index.js +26 -0
  360. package/dist/lifecycle/lease.js +283 -0
  361. package/dist/lifecycle/ledger-port.js +1 -0
  362. package/dist/lifecycle/legacy-digest.js +91 -0
  363. package/dist/lifecycle/live-diff.js +274 -0
  364. package/dist/lifecycle/local-note.js +15 -0
  365. package/dist/lifecycle/member-ledger.js +122 -0
  366. package/dist/lifecycle/observation-baseline.js +155 -0
  367. package/dist/lifecycle/observe.js +375 -0
  368. package/dist/lifecycle/oras-referrer-lookup.js +82 -0
  369. package/dist/lifecycle/override-ledger.js +54 -0
  370. package/dist/lifecycle/plan-digest.js +110 -0
  371. package/dist/lifecycle/plan-ledger.js +129 -0
  372. package/dist/lifecycle/receipt-plan.js +192 -0
  373. package/dist/lifecycle/release-ledger.js +155 -0
  374. package/dist/lifecycle/release-read.js +64 -0
  375. package/dist/lifecycle/replay.js +193 -0
  376. package/dist/lifecycle/rollback.js +102 -0
  377. package/dist/lifecycle/run-ledger.js +183 -0
  378. package/dist/lifecycle/scenario-eval.js +204 -0
  379. package/dist/lifecycle/scenario.js +214 -0
  380. package/dist/lifecycle/snapshot.js +239 -0
  381. package/dist/lifecycle/status.js +447 -0
  382. package/dist/lifecycle/symptoms.js +117 -0
  383. package/dist/lifecycle/teardown.js +255 -0
  384. package/dist/lifecycle/types.js +1 -0
  385. package/dist/lifecycle/unobserved-gate.js +33 -0
  386. package/dist/lifecycle/wave-plans.js +68 -0
  387. package/dist/lifecycle/work-item-id.js +36 -0
  388. package/dist/lifecycle/work-lease.js +393 -0
  389. package/dist/lint/component-checks.js +87 -0
  390. package/dist/lint/config.js +483 -0
  391. package/dist/lint/declarative.js +122 -0
  392. package/dist/lint/discover.d.ts.map +1 -1
  393. package/dist/lint/discover.js +138 -0
  394. package/dist/lint/engine.js +246 -0
  395. package/dist/lint/knowledge-checks.js +64 -0
  396. package/dist/lint/named-checks.js +22 -0
  397. package/dist/lint/output-checks.js +87 -0
  398. package/dist/lint/output-docs.js +163 -0
  399. package/dist/lint/parser.js +33 -0
  400. package/dist/lint/pipeline-change-gate.js +70 -0
  401. package/dist/lint/policy-import.d.ts +1 -1
  402. package/dist/lint/policy-import.d.ts.map +1 -1
  403. package/dist/lint/policy-import.js +62 -0
  404. package/dist/lint/policy-sandbox.js +86 -0
  405. package/dist/lint/policy.js +122 -0
  406. package/dist/lint/post-synth.js +87 -0
  407. package/dist/lint/presets/relaxed.json +26 -0
  408. package/dist/lint/presets/strict.json +24 -24
  409. package/dist/lint/receipt-checks.js +83 -0
  410. package/dist/lint/rule-loader.d.ts.map +1 -1
  411. package/dist/lint/rule-loader.js +89 -0
  412. package/dist/lint/rule-registry.js +86 -0
  413. package/dist/lint/rule.js +1 -0
  414. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
  415. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
  416. package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
  417. package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
  418. package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
  419. package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
  420. package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
  421. package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
  422. package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
  423. package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
  424. package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
  425. package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
  426. package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
  427. package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
  428. package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
  429. package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
  430. package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
  431. package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
  432. package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
  433. package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
  434. package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
  435. package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
  436. package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
  437. package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
  438. package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
  439. package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
  440. package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
  441. package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
  442. package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
  443. package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
  444. package/dist/lint/rules/comp/index.js +33 -0
  445. package/dist/lint/rules/comp/support.js +129 -0
  446. package/dist/lint/rules/composite-scope.js +51 -0
  447. package/dist/lint/rules/cor017-composite-name-match.js +93 -0
  448. package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
  449. package/dist/lint/rules/cor021-env-literal-name.js +100 -0
  450. package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
  451. package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
  452. package/dist/lint/rules/declarable-naming-convention.js +62 -0
  453. package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
  454. package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
  455. package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
  456. package/dist/lint/rules/evl004-spread-non-const.js +94 -0
  457. package/dist/lint/rules/evl005-resource-block-body.js +41 -0
  458. package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
  459. package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
  460. package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
  461. package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
  462. package/dist/lint/rules/export-required.js +115 -0
  463. package/dist/lint/rules/file-declarable-limit.js +88 -0
  464. package/dist/lint/rules/flat-declarations.js +62 -0
  465. package/dist/lint/rules/index.js +90 -0
  466. package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
  467. package/dist/lint/rules/no-redundant-type-import.js +76 -0
  468. package/dist/lint/rules/no-redundant-value-cast.js +41 -0
  469. package/dist/lint/rules/no-string-ref.js +59 -0
  470. package/dist/lint/rules/no-unused-declarable-import.js +75 -0
  471. package/dist/lint/rules/no-unused-declarable.js +142 -0
  472. package/dist/lint/rules/op/index.js +28 -0
  473. package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
  474. package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
  475. package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
  476. package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
  477. package/dist/lint/rules/op/support.js +11 -0
  478. package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
  479. package/dist/lint/rules/property-kind.js +56 -0
  480. package/dist/lint/rules/single-concern-file.js +71 -0
  481. package/dist/lint/rules/sys001-no-literal-key.js +60 -0
  482. package/dist/lint/selectors.js +168 -0
  483. package/dist/lint/suppressions.js +129 -0
  484. package/dist/lint/typescript.js +17 -0
  485. package/dist/live-endpoint.js +113 -0
  486. package/dist/live-read-session.js +76 -0
  487. package/dist/lsp/lexicon-providers.js +163 -0
  488. package/dist/lsp/types.js +5 -0
  489. package/dist/managed-fields.js +293 -0
  490. package/dist/mcp/types.js +4 -0
  491. package/dist/notify-verify.js +0 -1
  492. package/dist/notify.js +0 -1
  493. package/dist/notify.schema.json +72 -0
  494. package/dist/observation.js +266 -0
  495. package/dist/okf-read.js +134 -0
  496. package/dist/okf.js +275 -0
  497. package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
  498. package/dist/op/activities/activity-contracts.js +313 -0
  499. package/dist/op/activities/apply.js +582 -0
  500. package/dist/op/activities/build.js +18 -0
  501. package/dist/op/activities/change-coverage.js +40 -0
  502. package/dist/op/activities/change-set.js +64 -0
  503. package/dist/op/activities/converge.js +492 -0
  504. package/dist/op/activities/decide.js +211 -0
  505. package/dist/op/activities/env-teardown.js +110 -0
  506. package/dist/op/activities/factory.js +591 -0
  507. package/dist/op/activities/forge-pull-request.js +82 -0
  508. package/dist/op/activities/gh-host.js +78 -0
  509. package/dist/op/activities/guard-validate.js +165 -0
  510. package/dist/op/activities/http-check.js +40 -0
  511. package/dist/op/activities/index.js +59 -0
  512. package/dist/op/activities/lexicon-upgrade.js +629 -0
  513. package/dist/op/activities/lifecycle.js +109 -0
  514. package/dist/op/activities/pipeline-audit.js +147 -0
  515. package/dist/op/activities/policy.js +26 -0
  516. package/dist/op/activities/predict-behaviour.js +341 -0
  517. package/dist/op/activities/propose-upgrade.js +165 -0
  518. package/dist/op/activities/reconcile.js +997 -0
  519. package/dist/op/activities/shell.js +118 -0
  520. package/dist/op/activities/source-release.js +97 -0
  521. package/dist/op/activities/source-rollback.js +165 -0
  522. package/dist/op/activities/teardown.js +17 -0
  523. package/dist/op/activities/util.js +6 -0
  524. package/dist/op/activities/wait.js +51 -0
  525. package/dist/op/activities/work-evidence.js +35 -0
  526. package/dist/op/activities/workflow-audit.js +133 -0
  527. package/dist/op/activity-contract-registry.js +106 -0
  528. package/dist/op/activity-contract.js +232 -0
  529. package/dist/op/activity-failure.js +31 -0
  530. package/dist/op/activity-profiles.js +129 -0
  531. package/dist/op/activity-registry.js +105 -0
  532. package/dist/op/activity-runtime.js +28 -0
  533. package/dist/op/builders.js +801 -0
  534. package/dist/op/change-signal.js +118 -0
  535. package/dist/op/composites/apply-op.js +151 -0
  536. package/dist/op/composites/behaviour-op.js +65 -0
  537. package/dist/op/composites/converge-op.js +141 -0
  538. package/dist/op/composites/index.js +19 -0
  539. package/dist/op/composites/lexicon-upgrade-op.js +107 -0
  540. package/dist/op/composites/pipeline-audit-op.js +50 -0
  541. package/dist/op/composites/reconcile-op.js +84 -0
  542. package/dist/op/composites/watch-op.js +69 -0
  543. package/dist/op/composites/workflow-audit-op.js +57 -0
  544. package/dist/op/converge-rule.js +205 -0
  545. package/dist/op/cron.js +146 -0
  546. package/dist/op/decide-backend.js +181 -0
  547. package/dist/op/decide-config.js +68 -0
  548. package/dist/op/decide-read-inputs.js +141 -0
  549. package/dist/op/discover.d.ts.map +1 -1
  550. package/dist/op/discover.js +213 -0
  551. package/dist/op/duration.js +21 -0
  552. package/dist/op/emulator-freshness.js +80 -0
  553. package/dist/op/emulator-lifecycle.js +269 -0
  554. package/dist/op/factory.js +83 -0
  555. package/dist/op/gate-approval.js +172 -0
  556. package/dist/op/gate-name.js +86 -0
  557. package/dist/op/gate-plan-context.js +167 -0
  558. package/dist/op/gate-point-run.js +67 -0
  559. package/dist/op/gate-point.js +111 -0
  560. package/dist/op/gate-resume-plan.js +155 -0
  561. package/dist/op/gate-resume.js +31 -0
  562. package/dist/op/gate-review.js +290 -0
  563. package/dist/op/gate-run-locator.js +85 -0
  564. package/dist/op/gate-summary.js +100 -0
  565. package/dist/op/gate-wait.js +56 -0
  566. package/dist/op/gate.js +449 -0
  567. package/dist/op/generate-pipeline.js +124 -0
  568. package/dist/op/index.js +51 -0
  569. package/dist/op/lifecycle-receipt-store.js +45 -0
  570. package/dist/op/local-executor.js +1164 -0
  571. package/dist/op/local-output.js +140 -0
  572. package/dist/op/op-ir.js +317 -0
  573. package/dist/op/op-verb-class.js +131 -0
  574. package/dist/op/op-waves-notify.js +136 -0
  575. package/dist/op/op-waves-run.js +1657 -0
  576. package/dist/op/op-waves.js +409 -0
  577. package/dist/op/operator.js +743 -0
  578. package/dist/op/receipt-store.js +94 -0
  579. package/dist/op/resource.js +23 -0
  580. package/dist/op/run-context.js +28 -0
  581. package/dist/op/run-live.js +256 -0
  582. package/dist/op/runtime.js +21 -0
  583. package/dist/op/runtimes/local.js +195 -0
  584. package/dist/op/source-archive.js +131 -0
  585. package/dist/op/step-output-ref.js +397 -0
  586. package/dist/op/steward-beside.js +169 -0
  587. package/dist/op/steward-points.js +138 -0
  588. package/dist/op/steward-turn.js +59 -0
  589. package/dist/op/steward.js +317 -0
  590. package/dist/op/types.js +25 -0
  591. package/dist/op/work-lease-decl.js +81 -0
  592. package/dist/op/work-lease-run.js +393 -0
  593. package/dist/override-gate.js +284 -0
  594. package/dist/owner-chain.js +74 -0
  595. package/dist/ownership.js +92 -0
  596. package/dist/params.js +61 -0
  597. package/dist/plan-summary.js +711 -0
  598. package/dist/point-decision.js +211 -0
  599. package/dist/pr-forge.js +810 -0
  600. package/dist/pr-loop.js +203 -0
  601. package/dist/project-codegen.js +191 -0
  602. package/dist/project-root.js +74 -0
  603. package/dist/project-validation.js +50 -0
  604. package/dist/provenance.js +157 -0
  605. package/dist/pseudo-parameter.js +40 -0
  606. package/dist/reconcile.js +450 -0
  607. package/dist/resource-attributes.js +33 -0
  608. package/dist/runtime-adapter.js +77 -0
  609. package/dist/runtime.js +66 -0
  610. package/dist/secret-materialization.js +153 -0
  611. package/dist/secret-provenance.js +250 -0
  612. package/dist/serializer-walker.js +112 -0
  613. package/dist/serializer.js +1 -0
  614. package/dist/sort.js +45 -0
  615. package/dist/stack-output.js +115 -0
  616. package/dist/telemetry-attribution.js +149 -0
  617. package/dist/terraform/__fixtures__/build-graph.js +63 -0
  618. package/dist/terraform/adopt-state.js +40 -0
  619. package/dist/terraform/aws-resources.js +384 -0
  620. package/dist/terraform/bridge.js +204 -0
  621. package/dist/terraform/carve-provider.js +155 -0
  622. package/dist/terraform/carve.js +138 -0
  623. package/dist/terraform/data-source-shape.js +57 -0
  624. package/dist/terraform/emit-source.js +36 -0
  625. package/dist/terraform/excise.js +123 -0
  626. package/dist/terraform/graduate.js +128 -0
  627. package/dist/terraform/graph.js +435 -0
  628. package/dist/terraform/hcl2json.js +60 -0
  629. package/dist/terraform/manifest.js +149 -0
  630. package/dist/terraform/parse.js +81 -0
  631. package/dist/terraform/providers/aws.js +146 -0
  632. package/dist/terraform/providers/gcp.js +294 -0
  633. package/dist/terraform/providers/index.js +17 -0
  634. package/dist/terraform/providers/kubernetes.js +253 -0
  635. package/dist/terraform/score.js +151 -0
  636. package/dist/terraform/state.js +67 -0
  637. package/dist/terraform/tier-map.js +74 -0
  638. package/dist/terraform/types.js +13 -0
  639. package/dist/terraform/unified-diff.js +132 -0
  640. package/dist/testing.js +295 -0
  641. package/dist/toml-emit.js +153 -0
  642. package/dist/toml-parse.js +355 -0
  643. package/dist/toml-utils.js +60 -0
  644. package/dist/toml.js +428 -0
  645. package/dist/ts-loader.d.ts +46 -0
  646. package/dist/ts-loader.d.ts.map +1 -0
  647. package/dist/ts-loader.js +103 -0
  648. package/dist/types.js +1 -0
  649. package/dist/utils.js +61 -0
  650. package/dist/validation.js +20 -0
  651. package/dist/vendor/js-yaml-load.js +1662 -0
  652. package/dist/workspace/__fixtures__/contract-repo.js +103 -0
  653. package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
  654. package/dist/workspace/__fixtures__/sessions.js +91 -0
  655. package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
  656. package/dist/workspace/agent-cli.js +99 -0
  657. package/dist/workspace/agent.schema.json +390 -0
  658. package/dist/workspace/answers-ledger.js +89 -0
  659. package/dist/workspace/box-cli.js +142 -0
  660. package/dist/workspace/box-factory-write.js +196 -0
  661. package/dist/workspace/box-factory-write.schema.json +342 -0
  662. package/dist/workspace/box-factory.js +88 -0
  663. package/dist/workspace/box-intent.js +126 -0
  664. package/dist/workspace/box-isolation.js +169 -0
  665. package/dist/workspace/box-listing-write.schema.json +204 -0
  666. package/dist/workspace/box-listing.js +298 -0
  667. package/dist/workspace/box-publish.js +352 -0
  668. package/dist/workspace/box-publish.schema.json +498 -0
  669. package/dist/workspace/box-services.js +39 -0
  670. package/dist/workspace/broker-protocol.js +359 -0
  671. package/dist/workspace/broker-protocol.schema.json +228 -0
  672. package/dist/workspace/change-set.schema.json +460 -0
  673. package/dist/workspace/changes-cli.js +56 -0
  674. package/dist/workspace/changes.js +446 -0
  675. package/dist/workspace/changes.schema.json +642 -0
  676. package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
  677. package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
  678. package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
  679. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
  680. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
  681. package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
  682. package/dist/workspace/chant-migrations.js +113 -0
  683. package/dist/workspace/check.schema.json +433 -0
  684. package/dist/workspace/checks/box-isolation.js +62 -0
  685. package/dist/workspace/checks/boxes.js +491 -0
  686. package/dist/workspace/checks/diagrams.js +104 -0
  687. package/dist/workspace/checks/generated.js +419 -0
  688. package/dist/workspace/checks/ledgers.js +212 -0
  689. package/dist/workspace/checks/links.js +191 -0
  690. package/dist/workspace/checks/live.js +100 -0
  691. package/dist/workspace/checks/pipelines.js +188 -0
  692. package/dist/workspace/checks/records.js +169 -0
  693. package/dist/workspace/checks.js +426 -0
  694. package/dist/workspace/ci-green-cli.js +125 -0
  695. package/dist/workspace/ci-green-forge.js +83 -0
  696. package/dist/workspace/ci-green-workflow.js +199 -0
  697. package/dist/workspace/ci-green.js +325 -0
  698. package/dist/workspace/ci-last-green.schema.json +158 -0
  699. package/dist/workspace/compose-graph.js +235 -0
  700. package/dist/workspace/compose-reports.js +146 -0
  701. package/dist/workspace/composites.js +264 -0
  702. package/dist/workspace/composites.schema.json +617 -0
  703. package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
  704. package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
  705. package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
  706. package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
  707. package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
  708. package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
  709. package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
  710. package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
  711. package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
  712. package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
  713. package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
  714. package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
  715. package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
  716. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  717. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  718. package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
  719. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  720. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  721. package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
  722. package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
  723. package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  724. package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  725. package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
  726. package/dist/workspace/conformance/broker.js +736 -0
  727. package/dist/workspace/conformance/index.js +673 -0
  728. package/dist/workspace/conformance/vitest.js +108 -0
  729. package/dist/workspace/conformance/writer.js +1080 -0
  730. package/dist/workspace/decide.js +879 -0
  731. package/dist/workspace/decision-points.schema.json +135 -135
  732. package/dist/workspace/declaration-write-cli.js +74 -0
  733. package/dist/workspace/declaration-write.js +238 -0
  734. package/dist/workspace/declaration.js +938 -0
  735. package/dist/workspace/declaration.schema.json +1413 -1413
  736. package/dist/workspace/declared-kinds.js +106 -0
  737. package/dist/workspace/environments.js +164 -0
  738. package/dist/workspace/evidence.schema.json +279 -0
  739. package/dist/workspace/export-cli.js +185 -0
  740. package/dist/workspace/export.js +499 -0
  741. package/dist/workspace/factory-rules.js +175 -0
  742. package/dist/workspace/generated-files.js +92 -0
  743. package/dist/workspace/glob.js +45 -0
  744. package/dist/workspace/graph-cache.js +352 -0
  745. package/dist/workspace/graph-cli.js +348 -0
  746. package/dist/workspace/graph.schema.json +1338 -0
  747. package/dist/workspace/identity-gate-rule.js +75 -0
  748. package/dist/workspace/identity.js +126 -0
  749. package/dist/workspace/import.js +283 -0
  750. package/dist/workspace/init.js +620 -0
  751. package/dist/workspace/intent-cli.js +263 -0
  752. package/dist/workspace/intent-joins.js +201 -0
  753. package/dist/workspace/intent-record.js +352 -0
  754. package/dist/workspace/intent-record.schema.json +864 -0
  755. package/dist/workspace/intent.js +1582 -0
  756. package/dist/workspace/intent.schema.json +2420 -0
  757. package/dist/workspace/json-edit.js +221 -0
  758. package/dist/workspace/jsonc.js +235 -0
  759. package/dist/workspace/kind-readers.js +103 -0
  760. package/dist/workspace/kinds.js +587 -0
  761. package/dist/workspace/lexicon-symbols.js +112 -0
  762. package/dist/workspace/lineage-adopt-cli.js +102 -0
  763. package/dist/workspace/lineage-adopt.js +360 -0
  764. package/dist/workspace/lineage-check.js +282 -0
  765. package/dist/workspace/lineage-cli.js +121 -0
  766. package/dist/workspace/lineage-hash-index.js +284 -0
  767. package/dist/workspace/lineage-init.js +507 -0
  768. package/dist/workspace/lineage-lock.js +387 -0
  769. package/dist/workspace/lineage-merge.js +45 -0
  770. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  771. package/dist/workspace/lineage-migrations.js +329 -0
  772. package/dist/workspace/lineage-provenance.js +36 -0
  773. package/dist/workspace/lineage-update.js +138 -0
  774. package/dist/workspace/lineage-upgrade-cli.js +131 -0
  775. package/dist/workspace/lineage-upgrade.js +889 -0
  776. package/dist/workspace/lineage-vendor.js +171 -0
  777. package/dist/workspace/lineage-version.js +128 -0
  778. package/dist/workspace/lineage-versions.js +275 -0
  779. package/dist/workspace/links.js +330 -0
  780. package/dist/workspace/ls-generated.js +95 -0
  781. package/dist/workspace/ls.js +277 -0
  782. package/dist/workspace/ls.schema.json +333 -0
  783. package/dist/workspace/member-commands.js +508 -0
  784. package/dist/workspace/member-handles.js +216 -0
  785. package/dist/workspace/member-pipeline.js +258 -0
  786. package/dist/workspace/member-run.js +117 -0
  787. package/dist/workspace/member-write.schema.json +193 -0
  788. package/dist/workspace/nested-graph.js +156 -0
  789. package/dist/workspace/nesting.js +38 -0
  790. package/dist/workspace/patch.js +301 -0
  791. package/dist/workspace/patch.schema.json +321 -0
  792. package/dist/workspace/pin-cli.js +55 -0
  793. package/dist/workspace/pin-integrity.js +100 -0
  794. package/dist/workspace/plan-summary.schema.json +155 -0
  795. package/dist/workspace/point-answer.schema.json +129 -129
  796. package/dist/workspace/points-cli.js +291 -0
  797. package/dist/workspace/points-write.schema.json +660 -0
  798. package/dist/workspace/points.js +521 -0
  799. package/dist/workspace/points.schema.json +916 -0
  800. package/dist/workspace/pr-report.schema.json +108 -0
  801. package/dist/workspace/principal-classes.js +245 -0
  802. package/dist/workspace/reason-codes.js +326 -0
  803. package/dist/workspace/record-assets.js +151 -0
  804. package/dist/workspace/record-decided.js +105 -0
  805. package/dist/workspace/record-sessions.js +96 -0
  806. package/dist/workspace/record-source.js +114 -0
  807. package/dist/workspace/records-amend.schema.json +284 -0
  808. package/dist/workspace/records-checkout.js +76 -0
  809. package/dist/workspace/records-cli.js +707 -0
  810. package/dist/workspace/records-close.js +116 -0
  811. package/dist/workspace/records-close.schema.json +278 -0
  812. package/dist/workspace/records-new.schema.json +202 -0
  813. package/dist/workspace/records-review.schema.json +367 -0
  814. package/dist/workspace/records-since.js +317 -0
  815. package/dist/workspace/records-since.schema.json +218 -0
  816. package/dist/workspace/records-write.js +1229 -0
  817. package/dist/workspace/records.js +1345 -0
  818. package/dist/workspace/records.schema.json +604 -0
  819. package/dist/workspace/reference-kinds/app/package.json +10 -0
  820. package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  821. package/dist/workspace/returns.js +303 -0
  822. package/dist/workspace/root-refusal.js +75 -0
  823. package/dist/workspace/run-statement.schema.json +622 -0
  824. package/dist/workspace/runs-cli.js +584 -0
  825. package/dist/workspace/runs-write.schema.json +994 -0
  826. package/dist/workspace/runs.js +708 -0
  827. package/dist/workspace/runs.schema.json +1257 -0
  828. package/dist/workspace/runtimes.js +76 -0
  829. package/dist/workspace/session-kinds.js +83 -0
  830. package/dist/workspace/signers.schema.json +206 -0
  831. package/dist/workspace/source-block.js +125 -0
  832. package/dist/workspace/squash.js +177 -0
  833. package/dist/workspace/status-gates.js +162 -0
  834. package/dist/workspace/status-stewards.js +330 -0
  835. package/dist/workspace/status.js +514 -0
  836. package/dist/workspace/status.schema.json +998 -0
  837. package/dist/workspace/steward-index.js +191 -0
  838. package/dist/workspace/symbols.js +188 -0
  839. package/dist/workspace/template-manifest.js +227 -0
  840. package/dist/workspace/template-pins.js +115 -0
  841. package/dist/workspace/trailer-joins.js +65 -0
  842. package/dist/workspace/trailers.js +111 -0
  843. package/dist/workspace/tree.js +136 -0
  844. package/dist/workspace/trust/attestor.js +63 -0
  845. package/dist/workspace/trust/dsse.js +108 -0
  846. package/dist/workspace/trust/evidence-cli.js +175 -0
  847. package/dist/workspace/trust/evidence.js +161 -0
  848. package/dist/workspace/trust/gate-seal.js +226 -0
  849. package/dist/workspace/trust/policy.js +190 -0
  850. package/dist/workspace/trust/provenance.js +180 -0
  851. package/dist/workspace/trust/rotation.js +298 -0
  852. package/dist/workspace/trust/run-commits.js +101 -0
  853. package/dist/workspace/trust/run-statement.js +182 -0
  854. package/dist/workspace/trust/seal.js +272 -0
  855. package/dist/workspace/trust/signers-cli.js +152 -0
  856. package/dist/workspace/trust/ssh-commit.js +178 -0
  857. package/dist/workspace/trust/test-repo.js +118 -0
  858. package/dist/workspace/trust/trust-files.js +193 -0
  859. package/dist/workspace/trust/verify-cli.js +63 -0
  860. package/dist/workspace/trust/verify.js +192 -0
  861. package/dist/workspace/which-chant.js +141 -0
  862. package/dist/workspace/wip-cli.js +95 -0
  863. package/dist/workspace/wip-write.schema.json +504 -0
  864. package/dist/workspace/wip.js +631 -0
  865. package/dist/workspace/wip.schema.json +334 -0
  866. package/dist/workspace/work-cli.js +448 -0
  867. package/dist/workspace/work-evidence.js +122 -0
  868. package/dist/workspace/work-evidence.schema.json +222 -0
  869. package/dist/workspace/work-history.schema.json +421 -0
  870. package/dist/workspace/work-lease.schema.json +246 -0
  871. package/dist/workspace/work-size.js +77 -0
  872. package/dist/workspace/work.js +283 -0
  873. package/dist/workspace/workspace-kinds.schema.json +259 -259
  874. package/dist/workspace/workspace-principals.schema.json +53 -53
  875. package/dist/workspace/write-lock-cli.js +105 -0
  876. package/dist/workspace/write-lock.js +424 -0
  877. package/dist/workspace/write-lock.schema.json +172 -0
  878. package/dist/workspace/write-scope.js +484 -0
  879. package/dist/yaml.js +459 -0
  880. package/package.json +2 -2
  881. package/src/cli/commands/check-lexicon-plugin.ts +2 -0
  882. package/src/cli/commands/lint.ts +3 -0
  883. package/src/cli/commands/migrate.ts +2 -0
  884. package/src/cli/compiled-cli.e2e.test.ts +165 -0
  885. package/src/cli/main.ts +121 -27
  886. package/src/cli/mcp/workspace-tools.ts +1 -1
  887. package/src/codegen/pinned-upgrade.ts +2 -0
  888. package/src/components/discover.ts +2 -0
  889. package/src/components/sandbox/driver.ts +3 -1
  890. package/src/config-import.ts +3 -0
  891. package/src/discovery/fold-import.ts +23 -14
  892. package/src/discovery/import.ts +2 -0
  893. package/src/discovery/sandbox/driver.ts +3 -1
  894. package/src/lexicon-module.ts +3 -0
  895. package/src/lint/config.ts +1 -1
  896. package/src/lint/discover.ts +28 -8
  897. package/src/lint/policy-import.ts +4 -1
  898. package/src/lint/rule-loader.ts +2 -0
  899. package/src/op/discover.ts +3 -0
  900. package/src/ts-loader.test.ts +23 -0
  901. package/src/ts-loader.ts +122 -0
  902. package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
  903. package/src/workspace/declaration.ts +1 -1
  904. package/src/workspace/kinds.ts +1 -1
  905. package/src/workspace/lineage-migrations.ts +2 -0
  906. package/src/workspace/points.ts +1 -1
  907. package/src/workspace/principal-classes.ts +1 -1
package/dist/build.js ADDED
@@ -0,0 +1,668 @@
1
+ import { getProvenance } from "./provenance.js";
2
+ import { foldProvenanceOfEntities } from "./fold-provenance.js";
3
+ import { DiscoveryError, BuildError as BuildErrorClass } from "./errors.js";
4
+ import { LexiconOutput, isLexiconOutput } from "./lexicon-output.js";
5
+ import { isSecretDeclaration } from "./secret-provenance.js";
6
+ import { splitReceiptEntities } from "./effect-receipt.js";
7
+ import { isScenario } from "./lifecycle/scenario.js";
8
+ import { isOpEntity } from "./op/resource.js";
9
+ import { isAttrRefLike } from "./utils.js";
10
+ import { isChildProject } from "./child-project.js";
11
+ import { discover } from "./discovery/index.js";
12
+ import { decodeEntitySet } from "./discovery/entity-wire.js";
13
+ import { buildDependencyGraph } from "./discovery/graph.js";
14
+ import { topologicalSort } from "./sort.js";
15
+ import { statSync } from "node:fs";
16
+ import { resolve } from "node:path";
17
+ /**
18
+ * Compute the cross-stack apply-ordering graph from resolved entities. Edges are
19
+ * inferred from cross-lexicon attribute references (a resource in lexicon A
20
+ * referencing an attribute of a resource in lexicon B ⇒ A depends on B). Returns
21
+ * the edge set plus a topological order, parallel-safe waves, and any cycles.
22
+ */
23
+ /**
24
+ * Is this entity a member of a lexicon stack?
25
+ *
26
+ * Four kinds are not, and every one of them is serializer-neutral: a
27
+ * `LexiconOutput` is collected separately, a secret provenance declaration
28
+ * (#1828) and a plan scenario (#1292) are data lint and the CLI read off the
29
+ * entity map, and an Op (#2118) builds to its own `op.json` rather than
30
+ * through a lexicon serializer.
31
+ *
32
+ * {@link partitionByLexicon} has skipped all four since each landed, and
33
+ * {@link computeStackGraph}'s walk did not — so an entity with no `lexicon`
34
+ * (a `LexiconOutput`) entered `edges`, `order` and `waves` as `undefined`
35
+ * while `nodes`, built from the partition, could never contain it (#2480).
36
+ * One predicate for both sites, so they cannot drift apart again.
37
+ */
38
+ export function isStackMember(entity) {
39
+ return (!isLexiconOutput(entity) &&
40
+ !isSecretDeclaration(entity) &&
41
+ !isScenario(entity) &&
42
+ !isOpEntity(entity));
43
+ }
44
+ export function computeStackGraph(entities, lexiconNames) {
45
+ const edges = [];
46
+ const edgeSet = new Set();
47
+ const addEdge = (from, to) => {
48
+ // A structural guard, not a defensive one: `nodes` comes from the
49
+ // partition, so an endpoint the partition would have dropped can never be
50
+ // a legitimate member of this graph (#2480).
51
+ if (typeof from !== "string" || typeof to !== "string")
52
+ return;
53
+ if (from === to)
54
+ return;
55
+ const key = `${from}\0${to}`;
56
+ if (edgeSet.has(key))
57
+ return;
58
+ edgeSet.add(key);
59
+ edges.push({ from, to });
60
+ };
61
+ const walk = (value, consumer, visited) => {
62
+ if (value === null || value === undefined || typeof value !== "object")
63
+ return;
64
+ if (visited.has(value))
65
+ return;
66
+ visited.add(value);
67
+ // Duck-type, not `instanceof` (chant #1137): a lexicon built against a
68
+ // separate copy of `@intentius/chant` produces AttrRefs that fail
69
+ // `instanceof AttrRef` here but carry the same shape. Without this, a
70
+ // real cross-stack dependency silently falls through to the generic
71
+ // object walk below instead of producing an edge, which can misorder —
72
+ // or entirely drop — the apply order this graph exists to compute.
73
+ if (isAttrRefLike(value)) {
74
+ const parent = value.parent.deref();
75
+ const producer = parent ? parent.lexicon : undefined;
76
+ if (typeof producer === "string" && producer !== consumer)
77
+ addEdge(consumer, producer);
78
+ return;
79
+ }
80
+ if (isLexiconOutput(value))
81
+ return;
82
+ if (Array.isArray(value)) {
83
+ for (const item of value)
84
+ walk(item, consumer, visited);
85
+ return;
86
+ }
87
+ for (const val of Object.values(value))
88
+ walk(val, consumer, visited);
89
+ };
90
+ for (const [, entity] of entities) {
91
+ // #2480: the same four kinds `partitionByLexicon` drops. Walking one as a
92
+ // consumer takes its absent `lexicon` as the edge's `from`.
93
+ if (!isStackMember(entity))
94
+ continue;
95
+ const consumer = entity.lexicon;
96
+ const visited = new Set();
97
+ for (const val of Object.values(entity)) {
98
+ walk(val, consumer, visited);
99
+ }
100
+ if ("props" in entity && typeof entity.props === "object" && entity.props !== null) {
101
+ walk(entity.props, consumer, visited);
102
+ }
103
+ }
104
+ // Dependency map: node → producers it depends on.
105
+ const nodes = lexiconNames.length
106
+ ? [...lexiconNames]
107
+ : // The same predicate, rather than the partial copy of it this branch
108
+ // carried: it filtered secrets and scenarios but not outputs or Ops, so
109
+ // it could mint a node the partition would have dropped (#2480).
110
+ [...new Set([...entities.values()].filter(isStackMember).map((e) => e.lexicon))];
111
+ const deps = new Map();
112
+ for (const n of nodes)
113
+ deps.set(n, new Set());
114
+ for (const { from, to } of edges) {
115
+ if (!deps.has(from))
116
+ deps.set(from, new Set());
117
+ if (!deps.has(to))
118
+ deps.set(to, new Set());
119
+ deps.get(from).add(to);
120
+ }
121
+ // Kahn layering: a node is ready once every producer it depends on is placed.
122
+ const remaining = new Set(deps.keys());
123
+ const waves = [];
124
+ const order = [];
125
+ while (remaining.size > 0) {
126
+ const wave = [...remaining]
127
+ .filter((n) => [...deps.get(n)].every((d) => !remaining.has(d)))
128
+ .sort();
129
+ if (wave.length === 0)
130
+ break; // remaining nodes form a cycle
131
+ for (const n of wave) {
132
+ remaining.delete(n);
133
+ order.push(n);
134
+ }
135
+ waves.push(wave);
136
+ }
137
+ const cycles = remaining.size > 0 ? [[...remaining].sort()] : [];
138
+ edges.sort((a, b) => `${a.from}\0${a.to}`.localeCompare(`${b.from}\0${b.to}`));
139
+ return { nodes: [...nodes].sort(), edges, order, waves, cycles };
140
+ }
141
+ /**
142
+ * Partitions entities by their lexicon field.
143
+ * Property-kind Declarables are included in the same partition as their parent
144
+ * (they get inlined during serialization).
145
+ *
146
+ * @param entities - Map of entity name to Declarable
147
+ * @returns Map of lexicon name to Map of entity name to Declarable
148
+ */
149
+ export function partitionByLexicon(entities) {
150
+ const partitions = new Map();
151
+ for (const [name, entity] of entities) {
152
+ // The four serializer-neutral kinds, each explained on {@link isStackMember}:
153
+ // a LexiconOutput is collected separately, and a secret declaration
154
+ // (#1828), a plan scenario (#1292) and an Op (#2118) are read off the
155
+ // entity map rather than routed through a lexicon serializer. Keeping them
156
+ // out of every partition is what stops a "No serializer found" warning
157
+ // firing for a pseudo-lexicon.
158
+ if (!isStackMember(entity))
159
+ continue;
160
+ const lexicon = entity.lexicon;
161
+ if (!partitions.has(lexicon)) {
162
+ partitions.set(lexicon, new Map());
163
+ }
164
+ partitions.get(lexicon).set(name, entity);
165
+ }
166
+ return partitions;
167
+ }
168
+ /**
169
+ * Collect LexiconOutput instances from all entity property trees.
170
+ * Walks entity properties recursively to find LexiconOutput values.
171
+ */
172
+ export function collectLexiconOutputs(entities) {
173
+ const outputs = [];
174
+ const visited = new Set();
175
+ function walk(value) {
176
+ if (value === null || value === undefined || typeof value !== "object") {
177
+ return;
178
+ }
179
+ if (visited.has(value))
180
+ return;
181
+ visited.add(value);
182
+ if (isLexiconOutput(value)) {
183
+ outputs.push(value);
184
+ return;
185
+ }
186
+ if (Array.isArray(value)) {
187
+ for (const item of value) {
188
+ walk(item);
189
+ }
190
+ return;
191
+ }
192
+ for (const val of Object.values(value)) {
193
+ walk(val);
194
+ }
195
+ }
196
+ for (const [name, entity] of entities) {
197
+ if (isLexiconOutput(entity)) {
198
+ const lexiconOutput = entity;
199
+ // A literal-valued output (chant #1121) has no source entity at all —
200
+ // it isn't a reference to anything, so it must not fall back to the
201
+ // output's OWN map key the way an AttrRef whose parent didn't resolve
202
+ // would. Leaving `sourceEntity` empty keeps `getOutputValue()`'s
203
+ // (never-reached, for a literal) `Fn::GetAtt` fallback from ever being
204
+ // handed a bogus source, and keeps consumers that read `sourceEntity`
205
+ // directly (e.g. `graph-ir.ts`'s cross-stack export, the build
206
+ // manifest) from reporting the output as its own source.
207
+ if (lexiconOutput._literalValue === null) {
208
+ // Resolve source entity name from the WeakRef parent identity
209
+ const parent = lexiconOutput._sourceParent?.deref();
210
+ let sourceName = name;
211
+ if (parent) {
212
+ for (const [entityName, e] of entities) {
213
+ if (e === parent) {
214
+ sourceName = entityName;
215
+ break;
216
+ }
217
+ }
218
+ }
219
+ lexiconOutput._setSourceEntity(sourceName);
220
+ }
221
+ outputs.push(lexiconOutput);
222
+ continue;
223
+ }
224
+ if ("props" in entity && typeof entity.props === "object" && entity.props !== null) {
225
+ // Set source entity name for any LexiconOutputs found in props
226
+ const prevLength = outputs.length;
227
+ walk(entity.props);
228
+ for (let i = prevLength; i < outputs.length; i++) {
229
+ // Same #1121 guard as above — a literal has no source entity to name.
230
+ if (!outputs[i].sourceEntity && outputs[i]._literalValue === null) {
231
+ outputs[i]._setSourceEntity(name);
232
+ }
233
+ }
234
+ }
235
+ }
236
+ return outputs;
237
+ }
238
+ /**
239
+ * Detect cross-lexicon AttrRefs by walking each entity's property tree.
240
+ * For each AttrRef whose parent entity belongs to a different lexicon than
241
+ * the consuming entity, auto-create a LexiconOutput.
242
+ *
243
+ * @param entities - Map of entity name to Declarable
244
+ * @returns Array of auto-detected LexiconOutput instances
245
+ */
246
+ export function detectCrossLexiconRefs(entities) {
247
+ const outputs = [];
248
+ // Track by "sourceEntityName_attribute" to avoid duplicates
249
+ const seen = new Set();
250
+ // Build a reverse lookup: object identity -> entity name
251
+ const objectToName = new Map();
252
+ for (const [name, entity] of entities) {
253
+ objectToName.set(entity, name);
254
+ }
255
+ function walk(value, consumingLexicon, visited) {
256
+ if (value === null || value === undefined || typeof value !== "object") {
257
+ return;
258
+ }
259
+ if (visited.has(value))
260
+ return;
261
+ visited.add(value);
262
+ // Duck-type, not `instanceof` (chant #1137): a lexicon built against a
263
+ // separate copy of `@intentius/chant` produces AttrRefs that fail
264
+ // `instanceof AttrRef` here but carry the same shape. Without this, a
265
+ // real cross-lexicon reference silently falls through to the generic
266
+ // object walk below instead of auto-creating a `LexiconOutput`, and the
267
+ // whole `Outputs` entry for it vanishes (same failure shape as #1122).
268
+ if (isAttrRefLike(value)) {
269
+ const parent = value.parent.deref();
270
+ if (!parent)
271
+ return;
272
+ const parentLexicon = parent.lexicon;
273
+ if (typeof parentLexicon !== "string")
274
+ return;
275
+ if (parentLexicon !== consumingLexicon) {
276
+ // Find the parent's entity name
277
+ const parentName = objectToName.get(parent);
278
+ if (!parentName)
279
+ return;
280
+ const key = `${parentName}_${value.attribute}`;
281
+ if (!seen.has(key)) {
282
+ seen.add(key);
283
+ outputs.push(LexiconOutput.auto(value, parentName));
284
+ }
285
+ }
286
+ return;
287
+ }
288
+ // Skip LexiconOutput instances — these are explicit outputs
289
+ if (isLexiconOutput(value))
290
+ return;
291
+ // Do not descend into a whole resource entity (e.g. `Ref(bucket)` embeds
292
+ // the resource object). Every resource instance carries a latent AttrRef
293
+ // for *every* attribute in its spec (see runtime.ts) — most are never
294
+ // referenced and, for config-gated attributes (S3 `WebsiteURL`,
295
+ // `MetadataConfiguration.*`), don't exist at deploy time unless the
296
+ // matching config block is set. Harvesting those as cross-lexicon outputs
297
+ // emits `Fn::GetAtt` outputs for nonexistent attributes, which real
298
+ // CloudFormation rejects (#959). Only an explicitly-accessed attribute
299
+ // (a standalone AttrRef value, handled above) should produce an output.
300
+ if (objectToName.has(value))
301
+ return;
302
+ if (Array.isArray(value)) {
303
+ for (const item of value) {
304
+ walk(item, consumingLexicon, visited);
305
+ }
306
+ return;
307
+ }
308
+ for (const val of Object.values(value)) {
309
+ walk(val, consumingLexicon, visited);
310
+ }
311
+ }
312
+ for (const [, entity] of entities) {
313
+ const visited = new Set();
314
+ const consumingLexicon = entity.lexicon;
315
+ // Walk entity-level properties (AttrRefs could be direct properties)
316
+ for (const val of Object.values(entity)) {
317
+ walk(val, consumingLexicon, visited);
318
+ }
319
+ // Walk props if present
320
+ if ("props" in entity &&
321
+ typeof entity.props === "object" &&
322
+ entity.props !== null) {
323
+ walk(entity.props, consumingLexicon, visited);
324
+ }
325
+ }
326
+ return outputs;
327
+ }
328
+ /**
329
+ * Compute deploy order: source lexicons before consuming lexicons.
330
+ */
331
+ function computeDeployOrder(lexiconNames, lexiconOutputs) {
332
+ // Build a dependency graph: consuming lexicons depend on source lexicons
333
+ const deps = new Map();
334
+ for (const name of lexiconNames) {
335
+ deps.set(name, new Set());
336
+ }
337
+ for (const output of lexiconOutputs) {
338
+ // All lexicons other than the source lexicon implicitly depend on it
339
+ for (const name of lexiconNames) {
340
+ if (name !== output.sourceLexicon) {
341
+ deps.get(name)?.add(output.sourceLexicon);
342
+ }
343
+ }
344
+ }
345
+ // Simple topological sort for deploy order
346
+ const sorted = [];
347
+ const visited = new Set();
348
+ const visiting = new Set();
349
+ function visit(name) {
350
+ if (visited.has(name))
351
+ return;
352
+ if (visiting.has(name))
353
+ return; // cycle, just skip
354
+ visiting.add(name);
355
+ for (const dep of deps.get(name) ?? []) {
356
+ visit(dep);
357
+ }
358
+ visiting.delete(name);
359
+ visited.add(name);
360
+ sorted.push(name);
361
+ }
362
+ for (const name of lexiconNames) {
363
+ visit(name);
364
+ }
365
+ return sorted;
366
+ }
367
+ /**
368
+ * Generate the build manifest
369
+ */
370
+ function generateManifest(lexiconNames, lexiconOutputs, entities) {
371
+ const outputsRecord = {};
372
+ for (const output of lexiconOutputs) {
373
+ outputsRecord[output.outputName] = {
374
+ source: output.sourceLexicon,
375
+ entity: output.sourceEntity,
376
+ attribute: output.sourceAttribute ?? "",
377
+ };
378
+ }
379
+ return {
380
+ lexicons: lexiconNames,
381
+ outputs: outputsRecord,
382
+ deployOrder: computeDeployOrder(lexiconNames, lexiconOutputs),
383
+ stackGraph: computeStackGraph(entities, lexiconNames),
384
+ };
385
+ }
386
+ /** The directory a build discovered from, for build-root contributors; undefined when the build's path is not one (an entity-set JSON's label). */
387
+ function sourceDirOf(path) {
388
+ try {
389
+ return statSync(path).isDirectory() ? resolve(path) : undefined;
390
+ }
391
+ catch {
392
+ return undefined;
393
+ }
394
+ }
395
+ /**
396
+ * Run each build-root contributor (#1548 piece 3) and merge its rendered
397
+ * entities into `entities`, in place. THE one merge implementation — `build()`
398
+ * uses it for step 4b, and the graph handler's discover-based paths reuse it
399
+ * so a rendered kustomize root joins the graphed entity set under exactly the
400
+ * rules the build applies (#1626):
401
+ *
402
+ * - a contributed name colliding with an existing entity is an error, never a
403
+ * silent overwrite;
404
+ * - a contributor that throws becomes an error carrying its message (the k8s
405
+ * hook's missing-binary refusal names the binaries), not a stack trace.
406
+ *
407
+ * Errors come back as plain messages; each caller wraps them in its own error
408
+ * vocabulary (`BuildErrorClass` in `build()`, the CLI's `formatError` on the
409
+ * graph paths).
410
+ */
411
+ export async function mergeBuildRootEntities(entities, contributors, sourceDir) {
412
+ const warnings = [];
413
+ const errors = [];
414
+ for (const contribute of contributors) {
415
+ try {
416
+ // The discovered set, read-only, so a contributor can react to what the
417
+ // project DECLARED (a committed-encrypted `declareSecret()` naming a
418
+ // ciphertext file to resolve). Contributors run in order, so this also
419
+ // carries what earlier contributors added; the merge below is still the
420
+ // only writer, which is what keeps the collision refusal meaningful.
421
+ const contribution = await contribute({ entities, ...(sourceDir !== undefined ? { sourceDir } : {}) });
422
+ warnings.push(...(contribution.warnings ?? []));
423
+ for (const [name, entity] of contribution.entities) {
424
+ if (entities.has(name)) {
425
+ errors.push(`Build-root entity "${name}" collides with a discovered entity of the same name`);
426
+ continue;
427
+ }
428
+ entities.set(name, entity);
429
+ }
430
+ }
431
+ catch (error) {
432
+ errors.push(error instanceof Error ? error.message : String(error));
433
+ }
434
+ }
435
+ return { warnings, errors };
436
+ }
437
+ /**
438
+ * Builds a lexicon specification by discovering entities, sorting them
439
+ * topologically, and serializing them using the lexicon serializers.
440
+ *
441
+ * @param path - The directory path containing the specification files
442
+ * @param serializers - The serializers to use for serialization
443
+ * @returns BuildResult with outputs, entities, warnings, and errors
444
+ */
445
+ export async function build(path, serializers, parentBuildStack, options) {
446
+ // Step 1: Discover entities and dependencies
447
+ const discoveryResult = await discover(path, {
448
+ fold: options?.fold,
449
+ intrinsics: options?.intrinsics,
450
+ lexicons: options?.lexicons,
451
+ sandbox: options?.sandbox,
452
+ executing: options?.executing,
453
+ buildParams: options?.buildParams,
454
+ });
455
+ return buildFromDiscoveryResult(discoveryResult, path, serializers, parentBuildStack, options);
456
+ }
457
+ /**
458
+ * chant #1045 (Phase 1) — build from a discovery result produced OUTSIDE the
459
+ * normal `discover(path)` call, i.e. decoded from {@link DiscoveredEntitiesJson}
460
+ * (see {@link buildFromEntitiesJson}). Everything from here on (topological
461
+ * sort, recursive child-project builds, partitioning, output detection,
462
+ * serialization, manifest) is exactly what `build()` already does after its
463
+ * own `discover()` call — extracted so the JSON path reuses it verbatim
464
+ * instead of forking it.
465
+ *
466
+ * @param resolvedPathForChildStack - Used only to seed the circular-nested-
467
+ * stack detection (`buildStack`); the JSON path has no single directory a
468
+ * decoded entity set came from, so callers without one may pass any stable
469
+ * label (child projects aren't supported by the JSON boundary yet — see
470
+ * `discovery/entity-wire.ts` — so this is inert for that path today).
471
+ */
472
+ async function buildFromDiscoveryResult(discoveryResult, resolvedPathForChildStack, serializers, parentBuildStack, options) {
473
+ const warnings = [];
474
+ const errors = [];
475
+ // Collect discovery errors
476
+ errors.push(...discoveryResult.errors);
477
+ // Step 2: Convert Map<string, Set<string>> to Record<string, string[]> for topologicalSort
478
+ const dependenciesRecord = {};
479
+ for (const [entityName, deps] of discoveryResult.dependencies) {
480
+ dependenciesRecord[entityName] = Array.from(deps);
481
+ }
482
+ // Step 3: Perform topological sort
483
+ try {
484
+ topologicalSort(dependenciesRecord);
485
+ }
486
+ catch (error) {
487
+ // BuildError from cycle detection
488
+ if (error instanceof Error && error.name === "BuildError") {
489
+ errors.push(error);
490
+ }
491
+ else {
492
+ // Unexpected error
493
+ errors.push(new BuildErrorClass("", error instanceof Error ? error.message : String(error)));
494
+ }
495
+ }
496
+ // Step 4: Recursively build child projects
497
+ const resolvedPath = resolve(resolvedPathForChildStack);
498
+ const buildStack = parentBuildStack
499
+ ? new Set(parentBuildStack)
500
+ : new Set();
501
+ buildStack.add(resolvedPath);
502
+ for (const [name, entity] of discoveryResult.entities) {
503
+ if (isChildProject(entity)) {
504
+ const childPath = resolve(entity.projectPath);
505
+ if (buildStack.has(childPath)) {
506
+ errors.push(new BuildErrorClass(childPath, `Circular nested stack: ${[...buildStack].join(" → ")} → ${childPath}`));
507
+ continue;
508
+ }
509
+ const childResult = await build(childPath, serializers, buildStack, options);
510
+ entity.buildResult = childResult;
511
+ if (childResult.errors.length > 0) {
512
+ for (const err of childResult.errors) {
513
+ errors.push(err);
514
+ }
515
+ }
516
+ }
517
+ }
518
+ // Step 4b (#1548 piece 3): lexicon-contributed build roots — rendered
519
+ // non-source roots (kustomize dirs) joining the entity set before
520
+ // partitioning, so everything downstream (serialization with ownership
521
+ // stamping, post-synth checks, observation) treats them as declared.
522
+ // Top-level build only: nested child builds receive the same options
523
+ // object, and re-running the contributors there would duplicate every
524
+ // contributed entity once per child.
525
+ if (!parentBuildStack && options?.buildRoots) {
526
+ const merged = await mergeBuildRootEntities(discoveryResult.entities, options.buildRoots, sourceDirOf(resolvedPathForChildStack));
527
+ warnings.push(...merged.warnings);
528
+ for (const message of merged.errors) {
529
+ errors.push(new BuildErrorClass("", message));
530
+ }
531
+ }
532
+ // Step 5: Partition entities by lexicon
533
+ const partitions = partitionByLexicon(discoveryResult.entities);
534
+ // Build a serializer lookup by name
535
+ const serializersByName = new Map();
536
+ for (const serializer of serializers) {
537
+ serializersByName.set(serializer.name, serializer);
538
+ }
539
+ // Step 6: Collect explicit LexiconOutputs from all entities
540
+ const explicitOutputs = collectLexiconOutputs(discoveryResult.entities);
541
+ // Step 6b: Auto-detect cross-lexicon AttrRefs
542
+ const autoOutputs = detectCrossLexiconRefs(discoveryResult.entities);
543
+ // Merge: explicit outputs take precedence over auto-detected ones.
544
+ // Match by parent object identity + attribute to detect collisions.
545
+ const explicitRefs = explicitOutputs.map((o) => ({
546
+ parent: o._sourceParent?.deref(),
547
+ attribute: o.sourceAttribute,
548
+ }));
549
+ const lexiconOutputs = [
550
+ ...explicitOutputs,
551
+ ...autoOutputs.filter((auto) => {
552
+ const autoParent = auto._sourceParent?.deref();
553
+ return !explicitRefs.some((e) => e.parent === autoParent && e.attribute === auto.sourceAttribute);
554
+ }),
555
+ ];
556
+ // Group outputs by source lexicon.
557
+ // Intrinsic-based outputs (sourceLexicon === "") have no source entity to derive a lexicon from,
558
+ // so they are included in every lexicon's output list.
559
+ const outputsByLexicon = new Map();
560
+ const unassignedOutputs = [];
561
+ for (const output of lexiconOutputs) {
562
+ if (!output.sourceLexicon) {
563
+ unassignedOutputs.push(output);
564
+ continue;
565
+ }
566
+ if (!outputsByLexicon.has(output.sourceLexicon)) {
567
+ outputsByLexicon.set(output.sourceLexicon, []);
568
+ }
569
+ outputsByLexicon.get(output.sourceLexicon).push(output);
570
+ }
571
+ // Step 7: Serialize each lexicon's entities
572
+ const outputs = new Map();
573
+ for (const [lexiconName, lexiconEntities] of partitions) {
574
+ const serializer = serializersByName.get(lexiconName);
575
+ // #1832: effect receipts are withheld from the apply-bound entity set at
576
+ // this seam — the narrowest choke point every applier's input flows
577
+ // through, since appliers consume the serialized outputs assembled here.
578
+ // Receipts ride `SerializeContext.receipts` instead, so a lexicon can
579
+ // render them for visibility (#1835) without them ever entering the
580
+ // document an applier writes (or prunes) from. The `effect()` step is the
581
+ // sole receipt writer (epic #1703, decision 3).
582
+ const { applyBound, receipts } = splitReceiptEntities(lexiconEntities);
583
+ if (serializer) {
584
+ const lexiconLexiconOutputs = [
585
+ ...(outputsByLexicon.get(lexiconName) ?? []),
586
+ ...unassignedOutputs,
587
+ ];
588
+ const serialized = serializer.serialize(applyBound, lexiconLexiconOutputs, {
589
+ ownership: options?.ownership,
590
+ config: options?.config,
591
+ ...(options?.telemetry ? { telemetry: options.telemetry } : {}),
592
+ ...(receipts.size > 0 ? { receipts } : {}),
593
+ });
594
+ // Collect any non-fatal serializer diagnostics into the build warnings.
595
+ if (typeof serialized !== "string" && serialized.warnings) {
596
+ for (const w of serialized.warnings)
597
+ warnings.push(w);
598
+ }
599
+ outputs.set(lexiconName, serialized);
600
+ }
601
+ else if (applyBound.size === 0 && receipts.size > 0) {
602
+ // A partition holding only receipts (the core factory's "chant"
603
+ // pseudo-lexicon) has nothing apply-bound to serialize; that is the
604
+ // designed shape until a lexicon materializes the receipt (#1835), not
605
+ // a missing-serializer problem.
606
+ }
607
+ else {
608
+ warnings.push(`No serializer found for lexicon "${lexiconName}". List the lexicon in chant.config.ts.`);
609
+ }
610
+ }
611
+ // Step 8: Generate manifest
612
+ const lexiconNames = Array.from(partitions.keys());
613
+ const manifest = generateManifest(lexiconNames, lexiconOutputs, discoveryResult.entities);
614
+ return {
615
+ outputs,
616
+ entities: discoveryResult.entities,
617
+ dependencies: discoveryResult.dependencies,
618
+ warnings,
619
+ errors,
620
+ manifest,
621
+ sourceFileCount: discoveryResult.sourceFiles.length,
622
+ foldDecisions: discoveryResult.foldDecisions,
623
+ lexiconVersions: { ...(options?.lexiconVersions ?? {}) },
624
+ buildParams: options?.buildParams ?? [],
625
+ // chant #2161 — read off the entities AFTER every step that can change
626
+ // them (the shared-props merge in `expandComposite`, the build-root merge
627
+ // above), and deliberately after Step 7, so nothing about computing it can
628
+ // reach a serializer.
629
+ foldProvenance: foldProvenanceOfEntities(discoveryResult.entities, getProvenance),
630
+ };
631
+ }
632
+ /**
633
+ * chant #1045 (Phase 1) — build directly from a JSON-encoded discovery
634
+ * result (see {@link discoverEntitySetJson} in `./discovery/entity-wire.ts`)
635
+ * instead of pointing `build()` at a directory.
636
+ *
637
+ * Decodes the wire entity set back into a live entities map — see
638
+ * `decodeEntitySet`'s doc for why the decoded entities are functionally
639
+ * indistinguishable from what `discover()` produces in-process (real
640
+ * `AttrRef` instances, whole-entity identity preserved by reference, not by
641
+ * clone) — then runs the exact same post-discovery pipeline `build()` uses
642
+ * ({@link buildFromDiscoveryResult}), so partitioning, output detection,
643
+ * serialization, and the manifest are the SAME code path, not a fork of it.
644
+ *
645
+ * Dependencies aren't part of the wire format: unlike entities, a dependency
646
+ * graph is plain name-to-name data with no identity problem, so it's cheaper
647
+ * and more honest to recompute it from the decoded entities via the same
648
+ * `buildDependencyGraph()` `discover()` itself uses than to carry a second,
649
+ * redundant wire shape across the boundary.
650
+ *
651
+ * @param label - Used only to seed circular-nested-stack detection; a JSON
652
+ * entity set has no single source directory the way a `build(path, …)`
653
+ * call does. Inert today — child projects (`nestedStack()`) aren't
654
+ * supported by the JSON boundary yet (see `discovery/entity-wire.ts`).
655
+ */
656
+ export async function buildFromEntitiesJson(json, serializers, label = "<json-entity-set>", parentBuildStack, options) {
657
+ const entities = decodeEntitySet(json.entitySet);
658
+ const dependencies = buildDependencyGraph(entities);
659
+ const errors = json.errors.map((e) => new DiscoveryError(e.file, e.message, e.type));
660
+ const discoveryResult = {
661
+ entities,
662
+ dependencies,
663
+ sourceFiles: json.sourceFiles,
664
+ errors,
665
+ foldDecisions: json.foldDecisions,
666
+ };
667
+ return buildFromDiscoveryResult(discoveryResult, label, serializers, parentBuildStack, options);
668
+ }