@intentius/chant 0.124.13 → 0.124.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (907) hide show
  1. package/bin/chant +11 -0
  2. package/dist/agents/checks.js +326 -0
  3. package/dist/agents/discover.js +885 -0
  4. package/dist/agents/importer.js +17 -0
  5. package/dist/agents/index.js +12 -0
  6. package/dist/agents/types.js +19 -0
  7. package/dist/apply.js +151 -0
  8. package/dist/attrref.js +70 -0
  9. package/dist/audit/catalog.js +350 -0
  10. package/dist/audit/core.js +252 -0
  11. package/dist/audit/discover.js +633 -0
  12. package/dist/audit/fetch.js +666 -0
  13. package/dist/audit/lineage.js +91 -0
  14. package/dist/audit/nginx.js +366 -0
  15. package/dist/audit/prior-art.js +132 -0
  16. package/dist/audit/proof.js +321 -0
  17. package/dist/audit/report-html.js +194 -0
  18. package/dist/audit/report-model.js +198 -0
  19. package/dist/audit/report.js +102 -0
  20. package/dist/audit/rules-doc.js +144 -0
  21. package/dist/audit/secrets.js +405 -0
  22. package/dist/audit/terraform-state.js +140 -0
  23. package/dist/audit/wrangler.js +262 -0
  24. package/dist/behaviour-delta.js +401 -0
  25. package/dist/behaviour-engine.js +357 -0
  26. package/dist/behaviour-graph.js +83 -0
  27. package/dist/behaviour-http.js +188 -0
  28. package/dist/behaviour-kinds.js +172 -0
  29. package/dist/behaviour-overlay.js +50 -0
  30. package/dist/behaviour-predict.js +188 -0
  31. package/dist/behaviour-request.js +194 -0
  32. package/dist/behaviour.js +1325 -0
  33. package/dist/build-params.js +108 -0
  34. package/dist/build.js +668 -0
  35. package/dist/builder.js +44 -0
  36. package/dist/cdk/advise.js +30 -0
  37. package/dist/cdk/assembly.js +122 -0
  38. package/dist/cdk/graph.js +444 -0
  39. package/dist/cdk/tier-map.js +64 -0
  40. package/dist/cdk/types.js +24 -0
  41. package/dist/change-set.js +312 -0
  42. package/dist/child-project.js +21 -0
  43. package/dist/claimed-fields.js +135 -0
  44. package/dist/cli/build-options.js +70 -0
  45. package/dist/cli/build-params-cli.js +139 -0
  46. package/dist/cli/command-group.js +123 -0
  47. package/dist/cli/commands/audit-agents.js +326 -0
  48. package/dist/cli/commands/audit.js +571 -0
  49. package/dist/cli/commands/build.js +920 -0
  50. package/dist/cli/commands/carve-apply.js +153 -0
  51. package/dist/cli/commands/carve-bridge.js +201 -0
  52. package/dist/cli/commands/carve-emit.js +332 -0
  53. package/dist/cli/commands/carve-status.js +119 -0
  54. package/dist/cli/commands/carve.js +204 -0
  55. package/dist/cli/commands/check-lexicon-docs.js +79 -0
  56. package/dist/cli/commands/check-lexicon-examples.js +177 -0
  57. package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
  58. package/dist/cli/commands/check-lexicon-mcp.js +82 -0
  59. package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
  60. package/dist/cli/commands/check-lexicon-plugin.js +104 -0
  61. package/dist/cli/commands/check-lexicon.js +766 -0
  62. package/dist/cli/commands/describe.js +85 -0
  63. package/dist/cli/commands/diff.js +175 -0
  64. package/dist/cli/commands/doctor.js +350 -0
  65. package/dist/cli/commands/import-agents.js +155 -0
  66. package/dist/cli/commands/import.js +670 -0
  67. package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
  68. package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
  69. package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
  70. package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
  71. package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
  72. package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
  73. package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
  74. package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
  75. package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
  76. package/dist/cli/commands/init-lexicon.js +172 -0
  77. package/dist/cli/commands/init.js +381 -0
  78. package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
  79. package/dist/cli/commands/lexicon-surface-diff.js +145 -0
  80. package/dist/cli/commands/licenses.js +125 -0
  81. package/dist/cli/commands/lint.d.ts.map +1 -1
  82. package/dist/cli/commands/lint.js +948 -0
  83. package/dist/cli/commands/list.js +63 -0
  84. package/dist/cli/commands/migrate.d.ts.map +1 -1
  85. package/dist/cli/commands/migrate.js +423 -0
  86. package/dist/cli/commands/onboard.js +403 -0
  87. package/dist/cli/commands/pinned-upgrade.js +191 -0
  88. package/dist/cli/commands/update.js +194 -0
  89. package/dist/cli/commands/vendor.js +217 -0
  90. package/dist/cli/conflict-check.js +104 -0
  91. package/dist/cli/debug.js +8 -0
  92. package/dist/cli/format.js +104 -0
  93. package/dist/cli/handlers/build.js +267 -0
  94. package/dist/cli/handlers/carve-apply.js +30 -0
  95. package/dist/cli/handlers/carve-bridge.js +28 -0
  96. package/dist/cli/handlers/carve-emit.js +50 -0
  97. package/dist/cli/handlers/carve-status.js +26 -0
  98. package/dist/cli/handlers/carve.js +40 -0
  99. package/dist/cli/handlers/change-set.js +46 -0
  100. package/dist/cli/handlers/components.js +730 -0
  101. package/dist/cli/handlers/dev.js +113 -0
  102. package/dist/cli/handlers/emulator.js +233 -0
  103. package/dist/cli/handlers/explain.js +54 -0
  104. package/dist/cli/handlers/fan-out.js +422 -0
  105. package/dist/cli/handlers/gate-resume.js +275 -0
  106. package/dist/cli/handlers/generate.js +84 -0
  107. package/dist/cli/handlers/graph.js +969 -0
  108. package/dist/cli/handlers/init.js +102 -0
  109. package/dist/cli/handlers/lifecycle.js +1727 -0
  110. package/dist/cli/handlers/lint.js +62 -0
  111. package/dist/cli/handlers/migrate.js +48 -0
  112. package/dist/cli/handlers/misc.js +391 -0
  113. package/dist/cli/handlers/operator.js +1162 -0
  114. package/dist/cli/handlers/override-approve.js +102 -0
  115. package/dist/cli/handlers/pr.js +503 -0
  116. package/dist/cli/handlers/promote.js +342 -0
  117. package/dist/cli/handlers/run-generate.js +206 -0
  118. package/dist/cli/handlers/run-wave.js +66 -0
  119. package/dist/cli/handlers/run.js +1191 -0
  120. package/dist/cli/handlers/scenario.js +325 -0
  121. package/dist/cli/handlers/search.js +924 -0
  122. package/dist/cli/handlers/serve.js +32 -0
  123. package/dist/cli/handlers/vendor.js +154 -0
  124. package/dist/cli/index.js +3 -0
  125. package/dist/cli/is-entry-point.js +23 -0
  126. package/dist/cli/lsp/capabilities.js +28 -0
  127. package/dist/cli/lsp/diagnostics.js +34 -0
  128. package/dist/cli/lsp/server.js +329 -0
  129. package/dist/cli/main.d.ts.map +1 -1
  130. package/dist/cli/main.js +2540 -0
  131. package/dist/cli/mcp/lifecycle-tools.js +80 -0
  132. package/dist/cli/mcp/op-tools.js +306 -0
  133. package/dist/cli/mcp/resource-handlers.js +258 -0
  134. package/dist/cli/mcp/resources/context.js +85 -0
  135. package/dist/cli/mcp/server.js +353 -0
  136. package/dist/cli/mcp/tools/build.js +111 -0
  137. package/dist/cli/mcp/tools/composites.js +95 -0
  138. package/dist/cli/mcp/tools/explain.js +166 -0
  139. package/dist/cli/mcp/tools/import.js +49 -0
  140. package/dist/cli/mcp/tools/lint.js +41 -0
  141. package/dist/cli/mcp/tools/scaffold.js +111 -0
  142. package/dist/cli/mcp/tools/search.js +112 -0
  143. package/dist/cli/mcp/types.js +1 -0
  144. package/dist/cli/mcp/workspace-plugins.js +91 -0
  145. package/dist/cli/mcp/workspace-tools.d.ts +1 -1
  146. package/dist/cli/mcp/workspace-tools.js +564 -0
  147. package/dist/cli/mcp-config.js +70 -0
  148. package/dist/cli/plugins.js +313 -0
  149. package/dist/cli/registry.js +23 -0
  150. package/dist/cli/reporters/stylish.js +329 -0
  151. package/dist/cli/version.js +15 -0
  152. package/dist/cli/watch.js +79 -0
  153. package/dist/codegen/bound-property-types.js +82 -0
  154. package/dist/codegen/coverage.js +119 -0
  155. package/dist/codegen/docs-file-markers.js +60 -0
  156. package/dist/codegen/docs-pages.js +115 -0
  157. package/dist/codegen/docs-rule-scanning.js +164 -0
  158. package/dist/codegen/docs-rules.js +76 -0
  159. package/dist/codegen/docs-sections.js +117 -0
  160. package/dist/codegen/docs-sidebar.js +65 -0
  161. package/dist/codegen/docs-types.js +4 -0
  162. package/dist/codegen/docs.js +356 -0
  163. package/dist/codegen/fetch.js +340 -0
  164. package/dist/codegen/generate-post-synth-barrel.js +63 -0
  165. package/dist/codegen/generate-registry.js +71 -0
  166. package/dist/codegen/generate-runtime-index.js +56 -0
  167. package/dist/codegen/generate-typescript.js +119 -0
  168. package/dist/codegen/generate.js +115 -0
  169. package/dist/codegen/json-patch.js +141 -0
  170. package/dist/codegen/json-schema-to-ts.js +344 -0
  171. package/dist/codegen/json-schema.js +246 -0
  172. package/dist/codegen/lexicon-regen.js +412 -0
  173. package/dist/codegen/naming.js +217 -0
  174. package/dist/codegen/okf-lexicon.js +245 -0
  175. package/dist/codegen/package.js +150 -0
  176. package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
  177. package/dist/codegen/pinned-upgrade.js +494 -0
  178. package/dist/codegen/registry.js +60 -0
  179. package/dist/codegen/rehype-base-url.mjs +68 -0
  180. package/dist/codegen/rolling-upgrade.js +217 -0
  181. package/dist/codegen/surface-snapshot.js +537 -0
  182. package/dist/codegen/testdata/postgres-tags.json +242 -0
  183. package/dist/codegen/topo-sort.js +36 -0
  184. package/dist/codegen/typecheck.js +115 -0
  185. package/dist/codegen/validate.js +200 -0
  186. package/dist/codegen/version-bump.js +35 -0
  187. package/dist/components/auto-release.js +143 -0
  188. package/dist/components/builders.js +47 -0
  189. package/dist/components/capability-plugin-loader.js +175 -0
  190. package/dist/components/capability-plugin-schema.js +46 -0
  191. package/dist/components/capability-plugin.js +99 -0
  192. package/dist/components/capability.js +60 -0
  193. package/dist/components/changed-files.js +72 -0
  194. package/dist/components/cli-support.js +427 -0
  195. package/dist/components/component.js +120 -0
  196. package/dist/components/component.schema.json +271 -0
  197. package/dist/components/config-defaults.js +130 -0
  198. package/dist/components/deploy-units.js +60 -0
  199. package/dist/components/discover.d.ts.map +1 -1
  200. package/dist/components/discover.js +189 -0
  201. package/dist/components/driver-output.js +86 -0
  202. package/dist/components/driver.js +728 -0
  203. package/dist/components/fan-out-output.js +165 -0
  204. package/dist/components/fan-out-record.js +94 -0
  205. package/dist/components/fan-out-run.js +373 -0
  206. package/dist/components/fan-out-support.js +60 -0
  207. package/dist/components/fan-out.js +273 -0
  208. package/dist/components/gate-plan.js +41 -0
  209. package/dist/components/gated-wave-pipeline.js +46 -0
  210. package/dist/components/index.js +24 -0
  211. package/dist/components/layers.js +28 -0
  212. package/dist/components/manifest-persistence.js +108 -0
  213. package/dist/components/pilots/alb-ecs.pilot.js +59 -0
  214. package/dist/components/pilots/dynamodb.pilot.js +51 -0
  215. package/dist/components/pilots/jar-emr.pilot.js +65 -0
  216. package/dist/components/pilots/lambda.pilot.js +52 -0
  217. package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
  218. package/dist/components/pilots/project.js +12 -0
  219. package/dist/components/pr-pipeline.js +134 -0
  220. package/dist/components/pr-run.js +363 -0
  221. package/dist/components/presets/ecs-fargate.js +72 -0
  222. package/dist/components/presets/index.js +28 -0
  223. package/dist/components/presets/lambda.js +34 -0
  224. package/dist/components/presets/single-host-compose.js +41 -0
  225. package/dist/components/promote.js +549 -0
  226. package/dist/components/registry.js +34 -0
  227. package/dist/components/run-progress.js +33 -0
  228. package/dist/components/sandbox/driver.d.ts.map +1 -1
  229. package/dist/components/sandbox/driver.js +93 -0
  230. package/dist/components/sandbox/run.js +115 -0
  231. package/dist/components/starter-plugin.js +104 -0
  232. package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
  233. package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
  234. package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
  235. package/dist/components/verbs/bom-writer.js +287 -0
  236. package/dist/components/verbs/build-archive.js +188 -0
  237. package/dist/components/verbs/build.js +142 -0
  238. package/dist/components/verbs/cloud-executor.js +110 -0
  239. package/dist/components/verbs/component-bom.js +125 -0
  240. package/dist/components/verbs/ensure-secret.js +50 -0
  241. package/dist/components/verbs/index.js +61 -0
  242. package/dist/components/verbs/license-policy.js +75 -0
  243. package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
  244. package/dist/components/verbs/process-runner.js +78 -0
  245. package/dist/components/verbs/r2-sync.js +93 -0
  246. package/dist/components/verbs/reproducibility.js +62 -0
  247. package/dist/components/verbs/run-agent.js +577 -0
  248. package/dist/components/verbs/sbom-generator.js +119 -0
  249. package/dist/components/verbs/sbom.js +97 -0
  250. package/dist/components/verbs/shell.js +32 -0
  251. package/dist/components/verbs/sign.js +221 -0
  252. package/dist/components/verbs/stub.js +28 -0
  253. package/dist/components/verbs/tool-sbom-generator.js +154 -0
  254. package/dist/components/verbs/verify.js +112 -0
  255. package/dist/components/verbs/vex.js +131 -0
  256. package/dist/components/verbs/vuln-gate.js +152 -0
  257. package/dist/components/verbs/vuln-scan.js +288 -0
  258. package/dist/components/verbs/wait-verify.js +106 -0
  259. package/dist/components/verbs/wrangler.js +179 -0
  260. package/dist/components/wave-plan.js +102 -0
  261. package/dist/composite.js +305 -0
  262. package/dist/config-import.d.ts.map +1 -1
  263. package/dist/config-import.js +22 -0
  264. package/dist/config-sandbox.js +122 -0
  265. package/dist/config-static.js +206 -0
  266. package/dist/config.js +605 -0
  267. package/dist/content-digest.js +23 -0
  268. package/dist/declarable.js +114 -0
  269. package/dist/deep-observation.js +437 -0
  270. package/dist/detectLexicon.js +54 -0
  271. package/dist/discovery/cache.js +70 -0
  272. package/dist/discovery/collect.js +208 -0
  273. package/dist/discovery/cycles.js +95 -0
  274. package/dist/discovery/entity-wire-codec.js +391 -0
  275. package/dist/discovery/entity-wire.js +42 -0
  276. package/dist/discovery/files.js +121 -0
  277. package/dist/discovery/fold-import.d.ts.map +1 -1
  278. package/dist/discovery/fold-import.js +4178 -0
  279. package/dist/discovery/fold-rank.js +292 -0
  280. package/dist/discovery/graph.js +115 -0
  281. package/dist/discovery/import.d.ts.map +1 -1
  282. package/dist/discovery/import.js +65 -0
  283. package/dist/discovery/index.js +333 -0
  284. package/dist/discovery/param-deps.js +487 -0
  285. package/dist/discovery/resolve.js +39 -0
  286. package/dist/discovery/sandbox/bundle.js +214 -0
  287. package/dist/discovery/sandbox/child-errors.js +26 -0
  288. package/dist/discovery/sandbox/config-run.js +100 -0
  289. package/dist/discovery/sandbox/config-wire.js +183 -0
  290. package/dist/discovery/sandbox/driver.d.ts.map +1 -1
  291. package/dist/discovery/sandbox/driver.js +333 -0
  292. package/dist/discovery/sandbox/fork.js +229 -0
  293. package/dist/discovery/sandbox/policy-run.js +142 -0
  294. package/dist/discovery/sandbox/policy-wire.js +152 -0
  295. package/dist/discovery/sandbox/run.js +77 -0
  296. package/dist/discovery/specifier-resolve.js +320 -0
  297. package/dist/discovery/walk.js +284 -0
  298. package/dist/effect-receipt.js +340 -0
  299. package/dist/env.js +55 -0
  300. package/dist/errors.js +62 -0
  301. package/dist/fold/fold.js +1434 -0
  302. package/dist/fold/foldable-helpers.js +229 -0
  303. package/dist/fold/subset.js +696 -0
  304. package/dist/fold-provenance.js +414 -0
  305. package/dist/gate-decision.js +260 -0
  306. package/dist/gate-resume-run.js +154 -0
  307. package/dist/gated-waves.js +165 -0
  308. package/dist/governance.js +43 -0
  309. package/dist/graph-declared.js +45 -0
  310. package/dist/graph-detail.js +207 -0
  311. package/dist/graph-dot.js +54 -0
  312. package/dist/graph-effective.js +107 -0
  313. package/dist/graph-ir.js +623 -0
  314. package/dist/graph-layout.js +184 -0
  315. package/dist/graph-lens.js +105 -0
  316. package/dist/graph-mermaid.js +83 -0
  317. package/dist/graph-ops.js +39 -0
  318. package/dist/graph-refs.js +156 -0
  319. package/dist/held-elsewhere.js +87 -0
  320. package/dist/identity.js +251 -0
  321. package/dist/import/base-parser.js +34 -0
  322. package/dist/import/embedded.js +255 -0
  323. package/dist/import/generator.js +1 -0
  324. package/dist/import/ir-utils.js +85 -0
  325. package/dist/import/parser-options.js +45 -0
  326. package/dist/import/parser.js +1 -0
  327. package/dist/index.js +118 -0
  328. package/dist/intrinsic-interpolation.js +73 -0
  329. package/dist/intrinsic.js +31 -0
  330. package/dist/join-key.js +35 -0
  331. package/dist/kubectl-context.js +150 -0
  332. package/dist/lexicon-config.js +58 -0
  333. package/dist/lexicon-integrity.js +47 -0
  334. package/dist/lexicon-manifest.js +70 -0
  335. package/dist/lexicon-module.d.ts.map +1 -1
  336. package/dist/lexicon-module.js +241 -0
  337. package/dist/lexicon-output.js +218 -0
  338. package/dist/lexicon-plugin-helpers.js +104 -0
  339. package/dist/lexicon-schema.js +136 -0
  340. package/dist/lexicon.js +130 -0
  341. package/dist/lifecycle/affected.js +224 -0
  342. package/dist/lifecycle/assert-live.js +110 -0
  343. package/dist/lifecycle/build-ledger-store.js +160 -0
  344. package/dist/lifecycle/build-ledger.js +155 -0
  345. package/dist/lifecycle/change-set.js +356 -0
  346. package/dist/lifecycle/converge-ledger.js +161 -0
  347. package/dist/lifecycle/deep-diff.js +233 -0
  348. package/dist/lifecycle/deep-observe.js +147 -0
  349. package/dist/lifecycle/digest.js +143 -0
  350. package/dist/lifecycle/disruption.js +135 -0
  351. package/dist/lifecycle/gate-applied.js +113 -0
  352. package/dist/lifecycle/gate-audit.js +341 -0
  353. package/dist/lifecycle/gate-ledger-select.js +89 -0
  354. package/dist/lifecycle/gate-ledger.js +193 -0
  355. package/dist/lifecycle/gate-origin.js +117 -0
  356. package/dist/lifecycle/gate-pending.js +58 -0
  357. package/dist/lifecycle/git.js +1182 -0
  358. package/dist/lifecycle/identity.js +58 -0
  359. package/dist/lifecycle/index.js +26 -0
  360. package/dist/lifecycle/lease.js +283 -0
  361. package/dist/lifecycle/ledger-port.js +1 -0
  362. package/dist/lifecycle/legacy-digest.js +91 -0
  363. package/dist/lifecycle/live-diff.js +274 -0
  364. package/dist/lifecycle/local-note.js +15 -0
  365. package/dist/lifecycle/member-ledger.js +122 -0
  366. package/dist/lifecycle/observation-baseline.js +155 -0
  367. package/dist/lifecycle/observe.js +375 -0
  368. package/dist/lifecycle/oras-referrer-lookup.js +82 -0
  369. package/dist/lifecycle/override-ledger.js +54 -0
  370. package/dist/lifecycle/plan-digest.js +110 -0
  371. package/dist/lifecycle/plan-ledger.js +129 -0
  372. package/dist/lifecycle/receipt-plan.js +192 -0
  373. package/dist/lifecycle/release-ledger.js +155 -0
  374. package/dist/lifecycle/release-read.js +64 -0
  375. package/dist/lifecycle/replay.js +193 -0
  376. package/dist/lifecycle/rollback.js +102 -0
  377. package/dist/lifecycle/run-ledger.js +183 -0
  378. package/dist/lifecycle/scenario-eval.js +204 -0
  379. package/dist/lifecycle/scenario.js +214 -0
  380. package/dist/lifecycle/snapshot.js +239 -0
  381. package/dist/lifecycle/status.js +447 -0
  382. package/dist/lifecycle/symptoms.js +117 -0
  383. package/dist/lifecycle/teardown.js +255 -0
  384. package/dist/lifecycle/types.js +1 -0
  385. package/dist/lifecycle/unobserved-gate.js +33 -0
  386. package/dist/lifecycle/wave-plans.js +68 -0
  387. package/dist/lifecycle/work-item-id.js +36 -0
  388. package/dist/lifecycle/work-lease.js +393 -0
  389. package/dist/lint/component-checks.js +87 -0
  390. package/dist/lint/config.js +483 -0
  391. package/dist/lint/declarative.js +122 -0
  392. package/dist/lint/discover.d.ts.map +1 -1
  393. package/dist/lint/discover.js +138 -0
  394. package/dist/lint/engine.js +246 -0
  395. package/dist/lint/knowledge-checks.js +64 -0
  396. package/dist/lint/named-checks.js +22 -0
  397. package/dist/lint/output-checks.js +87 -0
  398. package/dist/lint/output-docs.js +163 -0
  399. package/dist/lint/parser.js +33 -0
  400. package/dist/lint/pipeline-change-gate.js +70 -0
  401. package/dist/lint/policy-import.d.ts +1 -1
  402. package/dist/lint/policy-import.d.ts.map +1 -1
  403. package/dist/lint/policy-import.js +62 -0
  404. package/dist/lint/policy-sandbox.js +86 -0
  405. package/dist/lint/policy.js +122 -0
  406. package/dist/lint/post-synth.js +87 -0
  407. package/dist/lint/presets/relaxed.json +26 -0
  408. package/dist/lint/presets/strict.json +24 -24
  409. package/dist/lint/receipt-checks.js +83 -0
  410. package/dist/lint/rule-loader.d.ts.map +1 -1
  411. package/dist/lint/rule-loader.js +89 -0
  412. package/dist/lint/rule-registry.js +86 -0
  413. package/dist/lint/rule.js +1 -0
  414. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
  415. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
  416. package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
  417. package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
  418. package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
  419. package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
  420. package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
  421. package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
  422. package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
  423. package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
  424. package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
  425. package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
  426. package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
  427. package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
  428. package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
  429. package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
  430. package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
  431. package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
  432. package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
  433. package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
  434. package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
  435. package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
  436. package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
  437. package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
  438. package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
  439. package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
  440. package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
  441. package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
  442. package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
  443. package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
  444. package/dist/lint/rules/comp/index.js +33 -0
  445. package/dist/lint/rules/comp/support.js +129 -0
  446. package/dist/lint/rules/composite-scope.js +51 -0
  447. package/dist/lint/rules/cor017-composite-name-match.js +93 -0
  448. package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
  449. package/dist/lint/rules/cor021-env-literal-name.js +100 -0
  450. package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
  451. package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
  452. package/dist/lint/rules/declarable-naming-convention.js +62 -0
  453. package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
  454. package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
  455. package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
  456. package/dist/lint/rules/evl004-spread-non-const.js +94 -0
  457. package/dist/lint/rules/evl005-resource-block-body.js +41 -0
  458. package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
  459. package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
  460. package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
  461. package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
  462. package/dist/lint/rules/export-required.js +115 -0
  463. package/dist/lint/rules/file-declarable-limit.js +88 -0
  464. package/dist/lint/rules/flat-declarations.js +62 -0
  465. package/dist/lint/rules/index.js +90 -0
  466. package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
  467. package/dist/lint/rules/no-redundant-type-import.js +76 -0
  468. package/dist/lint/rules/no-redundant-value-cast.js +41 -0
  469. package/dist/lint/rules/no-string-ref.js +59 -0
  470. package/dist/lint/rules/no-unused-declarable-import.js +75 -0
  471. package/dist/lint/rules/no-unused-declarable.js +142 -0
  472. package/dist/lint/rules/op/index.js +28 -0
  473. package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
  474. package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
  475. package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
  476. package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
  477. package/dist/lint/rules/op/support.js +11 -0
  478. package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
  479. package/dist/lint/rules/property-kind.js +56 -0
  480. package/dist/lint/rules/single-concern-file.js +71 -0
  481. package/dist/lint/rules/sys001-no-literal-key.js +60 -0
  482. package/dist/lint/selectors.js +168 -0
  483. package/dist/lint/suppressions.js +129 -0
  484. package/dist/lint/typescript.js +17 -0
  485. package/dist/live-endpoint.js +113 -0
  486. package/dist/live-read-session.js +76 -0
  487. package/dist/lsp/lexicon-providers.js +163 -0
  488. package/dist/lsp/types.js +5 -0
  489. package/dist/managed-fields.js +293 -0
  490. package/dist/mcp/types.js +4 -0
  491. package/dist/notify-verify.js +0 -1
  492. package/dist/notify.js +0 -1
  493. package/dist/notify.schema.json +72 -0
  494. package/dist/observation.js +266 -0
  495. package/dist/okf-read.js +134 -0
  496. package/dist/okf.js +275 -0
  497. package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
  498. package/dist/op/activities/activity-contracts.js +313 -0
  499. package/dist/op/activities/apply.js +582 -0
  500. package/dist/op/activities/build.js +18 -0
  501. package/dist/op/activities/change-coverage.js +40 -0
  502. package/dist/op/activities/change-set.js +64 -0
  503. package/dist/op/activities/converge.js +492 -0
  504. package/dist/op/activities/decide.js +211 -0
  505. package/dist/op/activities/env-teardown.js +110 -0
  506. package/dist/op/activities/factory.js +591 -0
  507. package/dist/op/activities/forge-pull-request.js +82 -0
  508. package/dist/op/activities/gh-host.js +78 -0
  509. package/dist/op/activities/guard-validate.js +165 -0
  510. package/dist/op/activities/http-check.js +40 -0
  511. package/dist/op/activities/index.js +59 -0
  512. package/dist/op/activities/lexicon-upgrade.js +629 -0
  513. package/dist/op/activities/lifecycle.js +109 -0
  514. package/dist/op/activities/pipeline-audit.js +147 -0
  515. package/dist/op/activities/policy.js +26 -0
  516. package/dist/op/activities/predict-behaviour.js +341 -0
  517. package/dist/op/activities/propose-upgrade.js +165 -0
  518. package/dist/op/activities/reconcile.js +997 -0
  519. package/dist/op/activities/shell.js +118 -0
  520. package/dist/op/activities/source-release.js +97 -0
  521. package/dist/op/activities/source-rollback.js +165 -0
  522. package/dist/op/activities/teardown.js +17 -0
  523. package/dist/op/activities/util.js +6 -0
  524. package/dist/op/activities/wait.js +51 -0
  525. package/dist/op/activities/work-evidence.js +35 -0
  526. package/dist/op/activities/workflow-audit.js +133 -0
  527. package/dist/op/activity-contract-registry.js +106 -0
  528. package/dist/op/activity-contract.js +232 -0
  529. package/dist/op/activity-failure.js +31 -0
  530. package/dist/op/activity-profiles.js +129 -0
  531. package/dist/op/activity-registry.js +105 -0
  532. package/dist/op/activity-runtime.js +28 -0
  533. package/dist/op/builders.js +801 -0
  534. package/dist/op/change-signal.js +118 -0
  535. package/dist/op/composites/apply-op.js +151 -0
  536. package/dist/op/composites/behaviour-op.js +65 -0
  537. package/dist/op/composites/converge-op.js +141 -0
  538. package/dist/op/composites/index.js +19 -0
  539. package/dist/op/composites/lexicon-upgrade-op.js +107 -0
  540. package/dist/op/composites/pipeline-audit-op.js +50 -0
  541. package/dist/op/composites/reconcile-op.js +84 -0
  542. package/dist/op/composites/watch-op.js +69 -0
  543. package/dist/op/composites/workflow-audit-op.js +57 -0
  544. package/dist/op/converge-rule.js +205 -0
  545. package/dist/op/cron.js +146 -0
  546. package/dist/op/decide-backend.js +181 -0
  547. package/dist/op/decide-config.js +68 -0
  548. package/dist/op/decide-read-inputs.js +141 -0
  549. package/dist/op/discover.d.ts.map +1 -1
  550. package/dist/op/discover.js +213 -0
  551. package/dist/op/duration.js +21 -0
  552. package/dist/op/emulator-freshness.js +80 -0
  553. package/dist/op/emulator-lifecycle.js +269 -0
  554. package/dist/op/factory.js +83 -0
  555. package/dist/op/gate-approval.js +172 -0
  556. package/dist/op/gate-name.js +86 -0
  557. package/dist/op/gate-plan-context.js +167 -0
  558. package/dist/op/gate-point-run.js +67 -0
  559. package/dist/op/gate-point.js +111 -0
  560. package/dist/op/gate-resume-plan.js +155 -0
  561. package/dist/op/gate-resume.js +31 -0
  562. package/dist/op/gate-review.js +290 -0
  563. package/dist/op/gate-run-locator.js +85 -0
  564. package/dist/op/gate-summary.js +100 -0
  565. package/dist/op/gate-wait.js +56 -0
  566. package/dist/op/gate.js +449 -0
  567. package/dist/op/generate-pipeline.js +124 -0
  568. package/dist/op/index.js +51 -0
  569. package/dist/op/lifecycle-receipt-store.js +45 -0
  570. package/dist/op/local-executor.js +1164 -0
  571. package/dist/op/local-output.js +140 -0
  572. package/dist/op/op-ir.js +317 -0
  573. package/dist/op/op-verb-class.js +131 -0
  574. package/dist/op/op-waves-notify.js +136 -0
  575. package/dist/op/op-waves-run.js +1657 -0
  576. package/dist/op/op-waves.js +409 -0
  577. package/dist/op/operator.js +743 -0
  578. package/dist/op/receipt-store.js +94 -0
  579. package/dist/op/resource.js +23 -0
  580. package/dist/op/run-context.js +28 -0
  581. package/dist/op/run-live.js +256 -0
  582. package/dist/op/runtime.js +21 -0
  583. package/dist/op/runtimes/local.js +195 -0
  584. package/dist/op/source-archive.js +131 -0
  585. package/dist/op/step-output-ref.js +397 -0
  586. package/dist/op/steward-beside.js +169 -0
  587. package/dist/op/steward-points.js +138 -0
  588. package/dist/op/steward-turn.js +59 -0
  589. package/dist/op/steward.js +317 -0
  590. package/dist/op/types.js +25 -0
  591. package/dist/op/work-lease-decl.js +81 -0
  592. package/dist/op/work-lease-run.js +393 -0
  593. package/dist/override-gate.js +284 -0
  594. package/dist/owner-chain.js +74 -0
  595. package/dist/ownership.js +92 -0
  596. package/dist/params.js +61 -0
  597. package/dist/plan-summary.js +711 -0
  598. package/dist/point-decision.js +211 -0
  599. package/dist/pr-forge.js +810 -0
  600. package/dist/pr-loop.js +203 -0
  601. package/dist/project-codegen.js +191 -0
  602. package/dist/project-root.js +74 -0
  603. package/dist/project-validation.js +50 -0
  604. package/dist/provenance.js +157 -0
  605. package/dist/pseudo-parameter.js +40 -0
  606. package/dist/reconcile.js +450 -0
  607. package/dist/resource-attributes.js +33 -0
  608. package/dist/runtime-adapter.js +77 -0
  609. package/dist/runtime.js +66 -0
  610. package/dist/secret-materialization.js +153 -0
  611. package/dist/secret-provenance.js +250 -0
  612. package/dist/serializer-walker.js +112 -0
  613. package/dist/serializer.js +1 -0
  614. package/dist/sort.js +45 -0
  615. package/dist/stack-output.js +115 -0
  616. package/dist/telemetry-attribution.js +149 -0
  617. package/dist/terraform/__fixtures__/build-graph.js +63 -0
  618. package/dist/terraform/adopt-state.js +40 -0
  619. package/dist/terraform/aws-resources.js +384 -0
  620. package/dist/terraform/bridge.js +204 -0
  621. package/dist/terraform/carve-provider.js +155 -0
  622. package/dist/terraform/carve.js +138 -0
  623. package/dist/terraform/data-source-shape.js +57 -0
  624. package/dist/terraform/emit-source.js +36 -0
  625. package/dist/terraform/excise.js +123 -0
  626. package/dist/terraform/graduate.js +128 -0
  627. package/dist/terraform/graph.js +435 -0
  628. package/dist/terraform/hcl2json.js +60 -0
  629. package/dist/terraform/manifest.js +149 -0
  630. package/dist/terraform/parse.js +81 -0
  631. package/dist/terraform/providers/aws.js +146 -0
  632. package/dist/terraform/providers/gcp.js +294 -0
  633. package/dist/terraform/providers/index.js +17 -0
  634. package/dist/terraform/providers/kubernetes.js +253 -0
  635. package/dist/terraform/score.js +151 -0
  636. package/dist/terraform/state.js +67 -0
  637. package/dist/terraform/tier-map.js +74 -0
  638. package/dist/terraform/types.js +13 -0
  639. package/dist/terraform/unified-diff.js +132 -0
  640. package/dist/testing.js +295 -0
  641. package/dist/toml-emit.js +153 -0
  642. package/dist/toml-parse.js +355 -0
  643. package/dist/toml-utils.js +60 -0
  644. package/dist/toml.js +428 -0
  645. package/dist/ts-loader.d.ts +46 -0
  646. package/dist/ts-loader.d.ts.map +1 -0
  647. package/dist/ts-loader.js +103 -0
  648. package/dist/types.js +1 -0
  649. package/dist/utils.js +61 -0
  650. package/dist/validation.js +20 -0
  651. package/dist/vendor/js-yaml-load.js +1662 -0
  652. package/dist/workspace/__fixtures__/contract-repo.js +103 -0
  653. package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
  654. package/dist/workspace/__fixtures__/sessions.js +91 -0
  655. package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
  656. package/dist/workspace/agent-cli.js +99 -0
  657. package/dist/workspace/agent.schema.json +390 -0
  658. package/dist/workspace/answers-ledger.js +89 -0
  659. package/dist/workspace/box-cli.js +142 -0
  660. package/dist/workspace/box-factory-write.js +196 -0
  661. package/dist/workspace/box-factory-write.schema.json +342 -0
  662. package/dist/workspace/box-factory.js +88 -0
  663. package/dist/workspace/box-intent.js +126 -0
  664. package/dist/workspace/box-isolation.js +169 -0
  665. package/dist/workspace/box-listing-write.schema.json +204 -0
  666. package/dist/workspace/box-listing.js +298 -0
  667. package/dist/workspace/box-publish.js +352 -0
  668. package/dist/workspace/box-publish.schema.json +498 -0
  669. package/dist/workspace/box-services.js +39 -0
  670. package/dist/workspace/broker-protocol.js +359 -0
  671. package/dist/workspace/broker-protocol.schema.json +228 -0
  672. package/dist/workspace/change-set.schema.json +460 -0
  673. package/dist/workspace/changes-cli.js +56 -0
  674. package/dist/workspace/changes.js +446 -0
  675. package/dist/workspace/changes.schema.json +642 -0
  676. package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
  677. package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
  678. package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
  679. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
  680. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
  681. package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
  682. package/dist/workspace/chant-migrations.js +113 -0
  683. package/dist/workspace/check.schema.json +433 -0
  684. package/dist/workspace/checks/box-isolation.js +62 -0
  685. package/dist/workspace/checks/boxes.js +491 -0
  686. package/dist/workspace/checks/diagrams.js +104 -0
  687. package/dist/workspace/checks/generated.js +419 -0
  688. package/dist/workspace/checks/ledgers.js +212 -0
  689. package/dist/workspace/checks/links.js +191 -0
  690. package/dist/workspace/checks/live.js +100 -0
  691. package/dist/workspace/checks/pipelines.js +188 -0
  692. package/dist/workspace/checks/records.js +169 -0
  693. package/dist/workspace/checks.js +426 -0
  694. package/dist/workspace/ci-green-cli.js +125 -0
  695. package/dist/workspace/ci-green-forge.js +83 -0
  696. package/dist/workspace/ci-green-workflow.js +199 -0
  697. package/dist/workspace/ci-green.js +325 -0
  698. package/dist/workspace/ci-last-green.schema.json +158 -0
  699. package/dist/workspace/compose-graph.js +235 -0
  700. package/dist/workspace/compose-reports.js +146 -0
  701. package/dist/workspace/composites.js +264 -0
  702. package/dist/workspace/composites.schema.json +617 -0
  703. package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
  704. package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
  705. package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
  706. package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
  707. package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
  708. package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
  709. package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
  710. package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
  711. package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
  712. package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
  713. package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
  714. package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
  715. package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
  716. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  717. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  718. package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
  719. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  720. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  721. package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
  722. package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
  723. package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  724. package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  725. package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
  726. package/dist/workspace/conformance/broker.js +736 -0
  727. package/dist/workspace/conformance/index.js +673 -0
  728. package/dist/workspace/conformance/vitest.js +108 -0
  729. package/dist/workspace/conformance/writer.js +1080 -0
  730. package/dist/workspace/decide.js +879 -0
  731. package/dist/workspace/decision-points.schema.json +135 -135
  732. package/dist/workspace/declaration-write-cli.js +74 -0
  733. package/dist/workspace/declaration-write.js +238 -0
  734. package/dist/workspace/declaration.js +938 -0
  735. package/dist/workspace/declaration.schema.json +1413 -1413
  736. package/dist/workspace/declared-kinds.js +106 -0
  737. package/dist/workspace/environments.js +164 -0
  738. package/dist/workspace/evidence.schema.json +279 -0
  739. package/dist/workspace/export-cli.js +185 -0
  740. package/dist/workspace/export.js +499 -0
  741. package/dist/workspace/factory-rules.js +175 -0
  742. package/dist/workspace/generated-files.js +92 -0
  743. package/dist/workspace/glob.js +45 -0
  744. package/dist/workspace/graph-cache.js +352 -0
  745. package/dist/workspace/graph-cli.js +348 -0
  746. package/dist/workspace/graph.schema.json +1338 -0
  747. package/dist/workspace/identity-gate-rule.js +75 -0
  748. package/dist/workspace/identity.js +126 -0
  749. package/dist/workspace/import.js +283 -0
  750. package/dist/workspace/init.js +620 -0
  751. package/dist/workspace/intent-cli.js +263 -0
  752. package/dist/workspace/intent-joins.js +201 -0
  753. package/dist/workspace/intent-record.js +352 -0
  754. package/dist/workspace/intent-record.schema.json +864 -0
  755. package/dist/workspace/intent.js +1582 -0
  756. package/dist/workspace/intent.schema.json +2420 -0
  757. package/dist/workspace/json-edit.js +221 -0
  758. package/dist/workspace/jsonc.js +235 -0
  759. package/dist/workspace/kind-readers.js +103 -0
  760. package/dist/workspace/kinds.js +587 -0
  761. package/dist/workspace/lexicon-symbols.js +112 -0
  762. package/dist/workspace/lineage-adopt-cli.js +102 -0
  763. package/dist/workspace/lineage-adopt.js +360 -0
  764. package/dist/workspace/lineage-check.js +282 -0
  765. package/dist/workspace/lineage-cli.js +121 -0
  766. package/dist/workspace/lineage-hash-index.js +284 -0
  767. package/dist/workspace/lineage-init.js +507 -0
  768. package/dist/workspace/lineage-lock.js +387 -0
  769. package/dist/workspace/lineage-merge.js +45 -0
  770. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  771. package/dist/workspace/lineage-migrations.js +329 -0
  772. package/dist/workspace/lineage-provenance.js +36 -0
  773. package/dist/workspace/lineage-update.js +138 -0
  774. package/dist/workspace/lineage-upgrade-cli.js +131 -0
  775. package/dist/workspace/lineage-upgrade.js +889 -0
  776. package/dist/workspace/lineage-vendor.js +171 -0
  777. package/dist/workspace/lineage-version.js +128 -0
  778. package/dist/workspace/lineage-versions.js +275 -0
  779. package/dist/workspace/links.js +330 -0
  780. package/dist/workspace/ls-generated.js +95 -0
  781. package/dist/workspace/ls.js +277 -0
  782. package/dist/workspace/ls.schema.json +333 -0
  783. package/dist/workspace/member-commands.js +508 -0
  784. package/dist/workspace/member-handles.js +216 -0
  785. package/dist/workspace/member-pipeline.js +258 -0
  786. package/dist/workspace/member-run.js +117 -0
  787. package/dist/workspace/member-write.schema.json +193 -0
  788. package/dist/workspace/nested-graph.js +156 -0
  789. package/dist/workspace/nesting.js +38 -0
  790. package/dist/workspace/patch.js +301 -0
  791. package/dist/workspace/patch.schema.json +321 -0
  792. package/dist/workspace/pin-cli.js +55 -0
  793. package/dist/workspace/pin-integrity.js +100 -0
  794. package/dist/workspace/plan-summary.schema.json +155 -0
  795. package/dist/workspace/point-answer.schema.json +129 -129
  796. package/dist/workspace/points-cli.js +291 -0
  797. package/dist/workspace/points-write.schema.json +660 -0
  798. package/dist/workspace/points.js +521 -0
  799. package/dist/workspace/points.schema.json +916 -0
  800. package/dist/workspace/pr-report.schema.json +108 -0
  801. package/dist/workspace/principal-classes.js +245 -0
  802. package/dist/workspace/reason-codes.js +326 -0
  803. package/dist/workspace/record-assets.js +151 -0
  804. package/dist/workspace/record-decided.js +105 -0
  805. package/dist/workspace/record-sessions.js +96 -0
  806. package/dist/workspace/record-source.js +114 -0
  807. package/dist/workspace/records-amend.schema.json +284 -0
  808. package/dist/workspace/records-checkout.js +76 -0
  809. package/dist/workspace/records-cli.js +707 -0
  810. package/dist/workspace/records-close.js +116 -0
  811. package/dist/workspace/records-close.schema.json +278 -0
  812. package/dist/workspace/records-new.schema.json +202 -0
  813. package/dist/workspace/records-review.schema.json +367 -0
  814. package/dist/workspace/records-since.js +317 -0
  815. package/dist/workspace/records-since.schema.json +218 -0
  816. package/dist/workspace/records-write.js +1229 -0
  817. package/dist/workspace/records.js +1345 -0
  818. package/dist/workspace/records.schema.json +604 -0
  819. package/dist/workspace/reference-kinds/app/package.json +10 -0
  820. package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  821. package/dist/workspace/returns.js +303 -0
  822. package/dist/workspace/root-refusal.js +75 -0
  823. package/dist/workspace/run-statement.schema.json +622 -0
  824. package/dist/workspace/runs-cli.js +584 -0
  825. package/dist/workspace/runs-write.schema.json +994 -0
  826. package/dist/workspace/runs.js +708 -0
  827. package/dist/workspace/runs.schema.json +1257 -0
  828. package/dist/workspace/runtimes.js +76 -0
  829. package/dist/workspace/session-kinds.js +83 -0
  830. package/dist/workspace/signers.schema.json +206 -0
  831. package/dist/workspace/source-block.js +125 -0
  832. package/dist/workspace/squash.js +177 -0
  833. package/dist/workspace/status-gates.js +162 -0
  834. package/dist/workspace/status-stewards.js +330 -0
  835. package/dist/workspace/status.js +514 -0
  836. package/dist/workspace/status.schema.json +998 -0
  837. package/dist/workspace/steward-index.js +191 -0
  838. package/dist/workspace/symbols.js +188 -0
  839. package/dist/workspace/template-manifest.js +227 -0
  840. package/dist/workspace/template-pins.js +115 -0
  841. package/dist/workspace/trailer-joins.js +65 -0
  842. package/dist/workspace/trailers.js +111 -0
  843. package/dist/workspace/tree.js +136 -0
  844. package/dist/workspace/trust/attestor.js +63 -0
  845. package/dist/workspace/trust/dsse.js +108 -0
  846. package/dist/workspace/trust/evidence-cli.js +175 -0
  847. package/dist/workspace/trust/evidence.js +161 -0
  848. package/dist/workspace/trust/gate-seal.js +226 -0
  849. package/dist/workspace/trust/policy.js +190 -0
  850. package/dist/workspace/trust/provenance.js +180 -0
  851. package/dist/workspace/trust/rotation.js +298 -0
  852. package/dist/workspace/trust/run-commits.js +101 -0
  853. package/dist/workspace/trust/run-statement.js +182 -0
  854. package/dist/workspace/trust/seal.js +272 -0
  855. package/dist/workspace/trust/signers-cli.js +152 -0
  856. package/dist/workspace/trust/ssh-commit.js +178 -0
  857. package/dist/workspace/trust/test-repo.js +118 -0
  858. package/dist/workspace/trust/trust-files.js +193 -0
  859. package/dist/workspace/trust/verify-cli.js +63 -0
  860. package/dist/workspace/trust/verify.js +192 -0
  861. package/dist/workspace/which-chant.js +141 -0
  862. package/dist/workspace/wip-cli.js +95 -0
  863. package/dist/workspace/wip-write.schema.json +504 -0
  864. package/dist/workspace/wip.js +631 -0
  865. package/dist/workspace/wip.schema.json +334 -0
  866. package/dist/workspace/work-cli.js +448 -0
  867. package/dist/workspace/work-evidence.js +122 -0
  868. package/dist/workspace/work-evidence.schema.json +222 -0
  869. package/dist/workspace/work-history.schema.json +421 -0
  870. package/dist/workspace/work-lease.schema.json +246 -0
  871. package/dist/workspace/work-size.js +77 -0
  872. package/dist/workspace/work.js +283 -0
  873. package/dist/workspace/workspace-kinds.schema.json +259 -259
  874. package/dist/workspace/workspace-principals.schema.json +53 -53
  875. package/dist/workspace/write-lock-cli.js +105 -0
  876. package/dist/workspace/write-lock.js +424 -0
  877. package/dist/workspace/write-lock.schema.json +172 -0
  878. package/dist/workspace/write-scope.js +484 -0
  879. package/dist/yaml.js +459 -0
  880. package/package.json +2 -2
  881. package/src/cli/commands/check-lexicon-plugin.ts +2 -0
  882. package/src/cli/commands/lint.ts +3 -0
  883. package/src/cli/commands/migrate.ts +2 -0
  884. package/src/cli/compiled-cli.e2e.test.ts +165 -0
  885. package/src/cli/main.ts +121 -27
  886. package/src/cli/mcp/workspace-tools.ts +1 -1
  887. package/src/codegen/pinned-upgrade.ts +2 -0
  888. package/src/components/discover.ts +2 -0
  889. package/src/components/sandbox/driver.ts +3 -1
  890. package/src/config-import.ts +3 -0
  891. package/src/discovery/fold-import.ts +23 -14
  892. package/src/discovery/import.ts +2 -0
  893. package/src/discovery/sandbox/driver.ts +3 -1
  894. package/src/lexicon-module.ts +3 -0
  895. package/src/lint/config.ts +1 -1
  896. package/src/lint/discover.ts +28 -8
  897. package/src/lint/policy-import.ts +4 -1
  898. package/src/lint/rule-loader.ts +2 -0
  899. package/src/op/discover.ts +3 -0
  900. package/src/ts-loader.test.ts +23 -0
  901. package/src/ts-loader.ts +122 -0
  902. package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
  903. package/src/workspace/declaration.ts +1 -1
  904. package/src/workspace/kinds.ts +1 -1
  905. package/src/workspace/lineage-migrations.ts +2 -0
  906. package/src/workspace/points.ts +1 -1
  907. package/src/workspace/principal-classes.ts +1 -1
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Generic pseudo-parameter class for lexicon-provided global named references.
3
+ *
4
+ * AWS uses "AWS::StackName", Terraform has "path.module", Azure has
5
+ * "subscription().id" — every format needs the same class that serializes
6
+ * to a Ref-like structure and has the INTRINSIC_MARKER.
7
+ */
8
+ var _a;
9
+ import { INTRINSIC_MARKER } from "./intrinsic.js";
10
+ export class PseudoParameter {
11
+ constructor(refName) {
12
+ this[_a] = true;
13
+ this.refName = refName;
14
+ }
15
+ toJSON() {
16
+ return { Ref: this.refName };
17
+ }
18
+ toString() {
19
+ return `\${${this.refName}}`;
20
+ }
21
+ }
22
+ _a = INTRINSIC_MARKER;
23
+ /**
24
+ * Create a namespace of pseudo-parameters from a name map.
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * export const { StackName, Region } = createPseudoParameters({
29
+ * StackName: "AWS::StackName",
30
+ * Region: "AWS::Region",
31
+ * });
32
+ * ```
33
+ */
34
+ export function createPseudoParameters(nameMap) {
35
+ const result = {};
36
+ for (const [key, refName] of Object.entries(nameMap)) {
37
+ result[key] = new PseudoParameter(refName);
38
+ }
39
+ return result;
40
+ }
@@ -0,0 +1,450 @@
1
+ /**
2
+ * Provider-agnostic reconcile primitive.
3
+ *
4
+ * The reusable machinery behind a declarative reconcile loop, with NO knowledge
5
+ * of any specific provider (GitHub, GitLab, a cloud, …): the change-set model,
6
+ * the generic collection diff (selective-by-omission + ownership-gated deletes),
7
+ * the plan renderer, and the guardrail framework (rename resolution + a removal
8
+ * cap + a pluggable check runner).
9
+ *
10
+ * A consumer application (e.g. github-warden) builds its provider-specific resource diffing,
11
+ * live-state types, and domain guardrails on top of this, and drives them with
12
+ * the generic `runReconcile` loop + `Cycle` interface (below). It complements
13
+ * chant's `ownership.ts` marker contract: ownership markers make a `delete`
14
+ * precise; this module decides *which* entries are creates / updates / deletes
15
+ * in the first place.
16
+ *
17
+ * Consumed as `@intentius/chant/reconcile`. The diff and guardrail primitives
18
+ * are pure and clock-free; `runReconcile` is the orchestration loop and is the
19
+ * only part that drives I/O (through the provider's `Cycle` implementations).
20
+ */
21
+ import { GOVERNANCE_VERBS } from "./governance.js";
22
+ // ---------------------------------------------------------------------------
23
+ // Generic field/value diffing
24
+ // ---------------------------------------------------------------------------
25
+ /** Deep value equality via JSON for plain data (config/live snapshots). */
26
+ export function deepEqual(a, b) {
27
+ if (a === b)
28
+ return true;
29
+ if (a === null || b === null)
30
+ return false;
31
+ if (typeof a !== "object" || typeof b !== "object")
32
+ return false;
33
+ return JSON.stringify(a) === JSON.stringify(b);
34
+ }
35
+ /**
36
+ * Diff fields of `desired` against `live`, returning one `FieldChange` per
37
+ * differing field. When `keys` is given, only those keys are compared (and only
38
+ * when present in `desired`); otherwise every key in `desired` is compared.
39
+ * Selective-by-omission: keys absent from `desired` are never compared.
40
+ */
41
+ export function diffFields(desired, live, keys) {
42
+ const fields = [];
43
+ const compareKeys = keys ?? Object.keys(desired);
44
+ for (const key of compareKeys) {
45
+ if (keys && !Object.prototype.hasOwnProperty.call(desired, key))
46
+ continue;
47
+ const dv = desired[key];
48
+ const lv = live[key];
49
+ if (!deepEqual(dv, lv))
50
+ fields.push({ field: key, before: lv, after: dv });
51
+ }
52
+ return fields;
53
+ }
54
+ /**
55
+ * The generic managed-collection diff: creates for desired-not-live, updates
56
+ * when `compareFields` reports differences, and ownership-gated deletes for
57
+ * live-not-desired. This is the selective-by-omission + ownership-gated-delete
58
+ * pattern shared by every keyed-collection diff.
59
+ *
60
+ * Returns the live entry count for this collection, so the diff layer can sum
61
+ * `ChangeSet.managedCount` across the collections it diffs (#2067).
62
+ */
63
+ export function diffCollection(params) {
64
+ const { resourceType, keyPrefix = "", desired, live, compareFields, createAfter, updateAfter, opts, out, } = params;
65
+ for (const [key, d] of desired) {
66
+ const entryKey = `${keyPrefix}${key}`;
67
+ const l = live.get(key);
68
+ if (l === undefined) {
69
+ out.push({
70
+ kind: "create",
71
+ resourceType,
72
+ key: entryKey,
73
+ after: createAfter ? createAfter(key, d) : d,
74
+ });
75
+ continue;
76
+ }
77
+ const fields = compareFields(d, l);
78
+ if (fields.length > 0) {
79
+ out.push({
80
+ kind: "update",
81
+ resourceType,
82
+ key: entryKey,
83
+ before: l,
84
+ after: updateAfter ? updateAfter(key, d, l) : d,
85
+ fields,
86
+ });
87
+ }
88
+ }
89
+ for (const [key, l] of live) {
90
+ if (desired.has(key))
91
+ continue;
92
+ const entryKey = `${keyPrefix}${key}`;
93
+ if (opts.isOwned?.(resourceType, entryKey)) {
94
+ out.push({ kind: "delete", resourceType, key: entryKey, before: l });
95
+ }
96
+ }
97
+ return live.size;
98
+ }
99
+ // ---------------------------------------------------------------------------
100
+ // Summary / rendering
101
+ // ---------------------------------------------------------------------------
102
+ /** Count entries per change kind. */
103
+ export function summarizeChangeSet(cs) {
104
+ const counts = { create: 0, update: 0, delete: 0 };
105
+ for (const e of cs.entries)
106
+ counts[e.kind]++;
107
+ return counts;
108
+ }
109
+ /** Human-readable plan summary for dry-run output. Pure. */
110
+ export function renderChangeSet(cs) {
111
+ const counts = summarizeChangeSet(cs);
112
+ const header = `Plan for ${cs.org}: ${counts.create} to create, ${counts.update} to update, ${counts.delete} to delete`;
113
+ if (cs.entries.length === 0)
114
+ return `${header}\nNo changes.`;
115
+ const lines = [header];
116
+ const byKind = { create: [], update: [], delete: [] };
117
+ for (const e of cs.entries)
118
+ byKind[e.kind].push(e);
119
+ const ORDER = ["create", "update", "delete"];
120
+ for (const kind of ORDER) {
121
+ let group = byKind[kind];
122
+ if (group.length === 0)
123
+ continue;
124
+ // Verb-aware grouping: when entries carry governance verbs, order
125
+ // each section by verb (vocabulary order, unverbed entries last) so mixed
126
+ // plans read category-by-category. Stable, and line format is unchanged —
127
+ // a verbless change set renders exactly as before.
128
+ if (group.some((e) => e.verb)) {
129
+ const rank = (e) => e.verb ? GOVERNANCE_VERBS.indexOf(e.verb) : GOVERNANCE_VERBS.length;
130
+ group = [...group].sort((a, b) => rank(a) - rank(b));
131
+ }
132
+ lines.push(`\n${kind.toUpperCase()}:`);
133
+ for (const e of group) {
134
+ lines.push(` [${e.resourceType}] ${e.key}`);
135
+ for (const f of e.fields ?? []) {
136
+ lines.push(` ${f.field}: ${fmt(f.before)} → ${fmt(f.after)}`);
137
+ }
138
+ }
139
+ }
140
+ return lines.join("\n");
141
+ }
142
+ function fmt(v) {
143
+ if (v === undefined)
144
+ return "<unset>";
145
+ if (typeof v === "string")
146
+ return v.length > 60 ? `${v.slice(0, 57)}...` : v;
147
+ const json = JSON.stringify(v);
148
+ return json.length > 60 ? `${json.slice(0, 57)}...` : json;
149
+ }
150
+ /**
151
+ * Resolve rename aliases. A create entry carrying a `previously` key matching a
152
+ * delete entry's key OF THE SAME RESOURCE TYPE is collapsed into an update,
153
+ * removing the delete. Matching across resource types would let e.g. a team
154
+ * create with `previously: "old"` swallow an unrelated member delete keyed
155
+ * "old", hiding a real delete from guardrail counting. Returns a new ChangeSet
156
+ * with renames resolved. Provider-agnostic — works on any entry whose
157
+ * `after.previously` is a string.
158
+ */
159
+ export function resolveRenames(changeSet) {
160
+ // Keys and resource types are both free-form strings, so scope the lookup
161
+ // with an unambiguous composite key ("\u0000" cannot appear in either).
162
+ const typedKey = (resourceType, key) => `${resourceType}\u0000${key}`;
163
+ const deleteEntries = new Map();
164
+ for (const e of changeSet.entries) {
165
+ if (e.kind === "delete")
166
+ deleteEntries.set(typedKey(e.resourceType, e.key), e);
167
+ }
168
+ const resolvedDeletes = new Set();
169
+ const resolvedCreates = new Set();
170
+ const syntheticUpdates = [];
171
+ for (const e of changeSet.entries) {
172
+ if (e.kind !== "create")
173
+ continue;
174
+ const after = e.after;
175
+ if (!after)
176
+ continue;
177
+ const previously = after["previously"];
178
+ if (typeof previously !== "string")
179
+ continue;
180
+ const deleted = deleteEntries.get(typedKey(e.resourceType, previously));
181
+ if (!deleted)
182
+ continue;
183
+ resolvedDeletes.add(typedKey(e.resourceType, previously));
184
+ resolvedCreates.add(typedKey(e.resourceType, e.key));
185
+ syntheticUpdates.push({
186
+ kind: "update",
187
+ resourceType: e.resourceType,
188
+ key: e.key,
189
+ before: deleted.before,
190
+ after: e.after,
191
+ fields: [{ field: "key", before: previously, after: e.key }],
192
+ });
193
+ }
194
+ if (resolvedDeletes.size === 0)
195
+ return changeSet;
196
+ const filteredEntries = changeSet.entries.filter((e) => !(e.kind === "delete" && resolvedDeletes.has(typedKey(e.resourceType, e.key))) &&
197
+ !(e.kind === "create" && resolvedCreates.has(typedKey(e.resourceType, e.key))));
198
+ return { ...changeSet, entries: [...filteredEntries, ...syntheticUpdates] };
199
+ }
200
+ /**
201
+ * Refuse if deletes exceed `maxFraction` of the pre-existing managed entries
202
+ * (deletes + updates; creates excluded so a flood of new entries can't dilute
203
+ * the delete fraction). Guards against a typo wiping the config in one apply.
204
+ *
205
+ * With per-type live counts (`opts.managedTotals`, else
206
+ * `changeSet.managedCounts`) the cap is evaluated PER RESOURCE TYPE: for each
207
+ * type with deletes, that type's deletes divide by that type's live count when
208
+ * present and positive, else by that type's own plan non-creates. Any type
209
+ * over `maxFraction` blocks, and the diagnostic names the worst offender. The
210
+ * pooled denominator this replaces was unsafe — live entries of one type
211
+ * (team members, repos) diluted a wipe of another (teams, org secrets) below
212
+ * the cap.
213
+ *
214
+ * With only a pooled live denominator (`opts.managedTotal`, else
215
+ * `changeSet.managedCount`; #2067) deletes are measured against the pooled
216
+ * live entries under management — so a converged cycle's plan of exactly one
217
+ * stale delete does not trip at 1/1 = 100%. Without either, behavior is
218
+ * plan-relative as before.
219
+ *
220
+ * Throws on a `maxFraction` outside (0,1] (NaN included) — fail closed, never
221
+ * silently disable the cap.
222
+ *
223
+ * CONTRACT: pass a RENAME-RESOLVED change set (see {@link resolveRenames}).
224
+ */
225
+ export function removalDeltaCap(changeSet, opts = {}) {
226
+ const maxFraction = opts.maxFraction ?? 0.25;
227
+ if (!(maxFraction > 0 && maxFraction <= 1)) {
228
+ // The negated form catches NaN too. A bad cap must never pass silently:
229
+ // maxFraction: 5 would otherwise wave every wipe through.
230
+ throw new Error(`removalDeltaCap: maxFraction must be in (0, 1], got ${String(maxFraction)}`);
231
+ }
232
+ const managedTotals = opts.managedTotals ?? changeSet.managedCounts;
233
+ if (managedTotals !== undefined) {
234
+ return removalDeltaCapPerType(changeSet, managedTotals, maxFraction);
235
+ }
236
+ const deletes = changeSet.entries.filter((e) => e.kind === "delete").length;
237
+ const managedTotal = opts.managedTotal ?? changeSet.managedCount;
238
+ if (managedTotal !== undefined && managedTotal > 0) {
239
+ const fraction = deletes / managedTotal;
240
+ if (fraction > maxFraction) {
241
+ return {
242
+ guardrail: "removalDeltaCap",
243
+ message: `${deletes} of ${managedTotal} live managed entries (${Math.round(fraction * 100)}%) would be deleted, ` +
244
+ `exceeding the ${Math.round(maxFraction * 100)}% threshold. ` +
245
+ `Check for typos in config or raise maxFraction to proceed.`,
246
+ };
247
+ }
248
+ return null;
249
+ }
250
+ const total = changeSet.entries.filter((e) => e.kind !== "create").length;
251
+ if (total === 0)
252
+ return null;
253
+ const fraction = deletes / total;
254
+ if (fraction > maxFraction) {
255
+ return {
256
+ guardrail: "removalDeltaCap",
257
+ message: `${deletes} of ${total} managed entries (${Math.round(fraction * 100)}%) would be deleted, ` +
258
+ `exceeding the ${Math.round(maxFraction * 100)}% threshold. ` +
259
+ `Check for typos in config or raise maxFraction to proceed.`,
260
+ };
261
+ }
262
+ return null;
263
+ }
264
+ /**
265
+ * Per-resource-type evaluation for {@link removalDeltaCap}. Each type with
266
+ * deletes gets its own denominator: the type's live count from `managedTotals`
267
+ * when present and positive, else that type's plan non-creates (the same
268
+ * plan-relative rule as the typeless cap, scoped to the type). Blocks when ANY
269
+ * type exceeds `maxFraction`; the message leads with the worst offender and
270
+ * lists the rest.
271
+ */
272
+ function removalDeltaCapPerType(changeSet, managedTotals, maxFraction) {
273
+ const deletesByType = new Map();
274
+ const nonCreatesByType = new Map();
275
+ for (const e of changeSet.entries) {
276
+ if (e.kind === "create")
277
+ continue;
278
+ nonCreatesByType.set(e.resourceType, (nonCreatesByType.get(e.resourceType) ?? 0) + 1);
279
+ if (e.kind === "delete") {
280
+ deletesByType.set(e.resourceType, (deletesByType.get(e.resourceType) ?? 0) + 1);
281
+ }
282
+ }
283
+ const tripping = [];
284
+ for (const [resourceType, deletes] of deletesByType) {
285
+ const liveCount = managedTotals[resourceType];
286
+ // A zero (or negative) live count means "no live info for this type",
287
+ // never a looser or divide-by-zero cap — same rule as the pooled total.
288
+ const live = liveCount !== undefined && liveCount > 0;
289
+ const total = live ? liveCount : nonCreatesByType.get(resourceType);
290
+ const fraction = deletes / total;
291
+ if (fraction > maxFraction)
292
+ tripping.push({ resourceType, deletes, total, fraction, live });
293
+ }
294
+ if (tripping.length === 0)
295
+ return null;
296
+ // Worst offender first; deterministic tie-break by delete count then name.
297
+ tripping.sort((a, b) => b.fraction - a.fraction ||
298
+ b.deletes - a.deletes ||
299
+ a.resourceType.localeCompare(b.resourceType));
300
+ const [worst, ...rest] = tripping;
301
+ const pct = (f) => Math.round(f * 100);
302
+ const describe = (t) => `${t.deletes} of ${t.total} ${t.live ? "live" : "planned"} ${t.resourceType} entries (${pct(t.fraction)}%)`;
303
+ return {
304
+ guardrail: "removalDeltaCap",
305
+ message: `${describe(worst)} would be deleted, exceeding the ${pct(maxFraction)}% threshold. ` +
306
+ (rest.length > 0 ? `Also over the cap: ${rest.map(describe).join(", ")}. ` : "") +
307
+ `Check for typos in config or raise maxFraction to proceed.`,
308
+ };
309
+ }
310
+ /**
311
+ * Run a set of guardrail checks against a change set. Resolves renames ONCE,
312
+ * then runs every check on the resolved set, aggregating any diagnostics. The
313
+ * caller composes provider-specific checks (e.g. an admin floor) as closures.
314
+ * `ctx` (optional, #2067) threads live context — e.g. the managed-live count —
315
+ * to every check; single-argument checks ignore it.
316
+ */
317
+ export function runGuardrailChecks(changeSet, checks, ctx) {
318
+ const resolved = resolveRenames(changeSet);
319
+ const diagnostics = [];
320
+ for (const check of checks) {
321
+ const d = check(resolved, ctx);
322
+ if (d)
323
+ diagnostics.push(d);
324
+ }
325
+ return diagnostics.length > 0 ? { ok: false, diagnostics } : { ok: true };
326
+ }
327
+ /** Thrown when a cycle or apply step attempts to use an exhausted budget. */
328
+ export class BudgetExhaustedError extends Error {
329
+ constructor(message = "rate budget exhausted") {
330
+ super(message);
331
+ this.name = "BudgetExhaustedError";
332
+ }
333
+ }
334
+ class MutableRateBudget {
335
+ constructor(initial) {
336
+ this._remaining = initial;
337
+ }
338
+ get remaining() {
339
+ return this._remaining;
340
+ }
341
+ get exhausted() {
342
+ return this._remaining <= 0;
343
+ }
344
+ use(n = 1) {
345
+ if (this.exhausted)
346
+ throw new BudgetExhaustedError();
347
+ this._remaining = Math.max(0, this._remaining - n);
348
+ }
349
+ }
350
+ function errMsg(err) {
351
+ return err instanceof Error ? err.message : String(err);
352
+ }
353
+ /**
354
+ * Run the reconcile loop. For each scope in `scopes` and each cycle:
355
+ * 1. fetchLive 2. buildDesired 3. diff 4. guardrails
356
+ * 5a. dry-run: record the plan 5b. apply: apply each entry (if guardrails pass)
357
+ *
358
+ * Budget-aware (stops cleanly + records deferred work on exhaustion) and
359
+ * fault-tolerant (a cycle that errors is recorded and the run continues).
360
+ * Returns a structured `ReconcileResult`.
361
+ */
362
+ export async function runReconcile(opts) {
363
+ const { scopes, client, cycles, scope, mode = "dry-run", diff: diffFn, guardrails = () => ({ ok: true }), diffOptions = {}, allowGuardrailOverride = false, requestBudget = 1000, } = opts;
364
+ const budget = new MutableRateBudget(requestBudget);
365
+ const cycleResults = [];
366
+ const erroredCycles = [];
367
+ const deferred = { skippedCycles: [], skippedEntries: [] };
368
+ const scopeEntries = Object.entries(scopes);
369
+ for (const cycle of cycles) {
370
+ for (const [scopeId, scopeConfig] of scopeEntries) {
371
+ if (budget.exhausted) {
372
+ deferred.skippedCycles.push(`${cycle.name}@${scopeId}`);
373
+ continue;
374
+ }
375
+ let live;
376
+ try {
377
+ live = await cycle.fetchLive(client, scopeId, scope, budget);
378
+ }
379
+ catch (err) {
380
+ if (err instanceof BudgetExhaustedError) {
381
+ deferred.skippedCycles.push(`${cycle.name}@${scopeId}`);
382
+ continue;
383
+ }
384
+ erroredCycles.push({ name: cycle.name, org: scopeId, stage: "fetchLive", error: errMsg(err) });
385
+ continue;
386
+ }
387
+ let desired;
388
+ try {
389
+ desired = cycle.buildDesired(scopeConfig, scopeId, scope);
390
+ }
391
+ catch (err) {
392
+ erroredCycles.push({ name: cycle.name, org: scopeId, stage: "buildDesired", error: errMsg(err) });
393
+ continue;
394
+ }
395
+ const changeSet = diffFn(scopeId, desired, live, diffOptions);
396
+ // Stamp the cycle's governance verb onto entries that don't
397
+ // carry one, so provider diffs stay verb-unaware.
398
+ if (cycle.verb) {
399
+ for (const e of changeSet.entries)
400
+ e.verb ?? (e.verb = cycle.verb);
401
+ }
402
+ const guardrailResult = guardrails(changeSet, live);
403
+ const counts = { create: 0, update: 0, delete: 0 };
404
+ for (const e of changeSet.entries)
405
+ counts[e.kind]++;
406
+ const cycleResult = {
407
+ name: cycle.name,
408
+ verb: cycle.verb,
409
+ org: scopeId,
410
+ counts,
411
+ guardrails: guardrailResult,
412
+ applied: [],
413
+ failed: [],
414
+ plan: renderChangeSet(changeSet),
415
+ guardrailBlocked: false,
416
+ };
417
+ if (mode === "dry-run") {
418
+ cycleResults.push(cycleResult);
419
+ continue;
420
+ }
421
+ if (!guardrailResult.ok && !allowGuardrailOverride) {
422
+ cycleResult.guardrailBlocked = true;
423
+ cycleResults.push(cycleResult);
424
+ continue;
425
+ }
426
+ for (const entry of changeSet.entries) {
427
+ if (budget.exhausted) {
428
+ deferred.skippedEntries.push({ cycleName: cycle.name, entry });
429
+ continue;
430
+ }
431
+ try {
432
+ await cycle.apply(client, entry, scopeId, scope, budget);
433
+ cycleResult.applied.push(entry);
434
+ }
435
+ catch (err) {
436
+ if (err instanceof BudgetExhaustedError) {
437
+ deferred.skippedEntries.push({ cycleName: cycle.name, entry });
438
+ continue;
439
+ }
440
+ cycleResult.failed.push({ entry, error: errMsg(err) });
441
+ }
442
+ }
443
+ cycleResults.push(cycleResult);
444
+ }
445
+ }
446
+ const completed = deferred.skippedCycles.length === 0 &&
447
+ deferred.skippedEntries.length === 0 &&
448
+ erroredCycles.length === 0;
449
+ return { mode, completed, cycles: cycleResults, errored: erroredCycles, deferred, budgetRemaining: budget.remaining };
450
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Utilities for resolving resource-level attributes (DependsOn, Condition, etc.).
3
+ *
4
+ * Shared by lexicon serializers — the DependsOn resolution logic converts
5
+ * Declarable object references to logical names.
6
+ */
7
+ /**
8
+ * Resolve a DependsOn value (Declarable, string, or mixed array) into
9
+ * an array of logical resource names.
10
+ *
11
+ * - Strings pass through as-is (user-specified logical names)
12
+ * - Declarable objects are looked up in the entityNames map
13
+ * - Unknown values emit a console warning and are skipped
14
+ */
15
+ export function resolveDependsOn(deps, entityNames, resourceName) {
16
+ const items = Array.isArray(deps) ? deps : [deps];
17
+ const resolved = [];
18
+ for (const dep of items) {
19
+ if (typeof dep === "string") {
20
+ resolved.push(dep);
21
+ }
22
+ else if (typeof dep === "object" && dep !== null && "entityType" in dep) {
23
+ const depName = entityNames.get(dep);
24
+ if (depName) {
25
+ resolved.push(depName);
26
+ }
27
+ else {
28
+ console.warn(`[chant] warning: DependsOn in "${resourceName}" references a declarable not found in the build — is the target resource exported?`);
29
+ }
30
+ }
31
+ }
32
+ return resolved;
33
+ }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Runtime adapter — abstracts child-process and filesystem APIs for chant.
3
+ *
4
+ * The `target` parameter (from config) controls what commands get spawned
5
+ * (node/npx/npm), not which adapter class is used.
6
+ */
7
+ import { dirname } from "path";
8
+ import { fileURLToPath } from "url";
9
+ import { createHash } from "crypto";
10
+ import { execFile } from "child_process";
11
+ // @ts-ignore — picomatch has no types declaration
12
+ import picomatch from "picomatch";
13
+ // ── Node adapter ─────────────────────────────────────────────────
14
+ class NodeRuntimeAdapter {
15
+ constructor() {
16
+ this.name = "node";
17
+ this.hashAlgorithm = "sha256";
18
+ this.commands = { runner: "node", exec: "npx", packCmd: ["npm", "pack"] };
19
+ }
20
+ hash(content) {
21
+ return createHash("sha256").update(content).digest("hex");
22
+ }
23
+ globMatch(pattern, filePath) {
24
+ return picomatch(pattern)(filePath);
25
+ }
26
+ async spawn(cmd, opts) {
27
+ return new Promise((resolve) => {
28
+ const child = execFile(cmd[0], cmd.slice(1), {
29
+ cwd: opts?.cwd,
30
+ maxBuffer: 10 * 1024 * 1024,
31
+ ...(opts?.env ? { env: { ...process.env, ...opts.env } } : {}),
32
+ }, (err, stdout, stderr) => {
33
+ resolve({
34
+ stdout: stdout ?? "",
35
+ stderr: stderr ?? "",
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ exitCode: err ? err.code ?? 1 : 0,
38
+ });
39
+ });
40
+ // Content is written verbatim (utf-8) — no shell involved, so nothing
41
+ // reinterprets backslash-escape sequences or needs quote-escaping.
42
+ // The error handler is load-bearing: a child that exits without reading
43
+ // stdin (any command that ignores it) makes this write race the pipe
44
+ // teardown, and an unhandled EPIPE 'error' event crashes the process.
45
+ if (child.stdin) {
46
+ child.stdin.on("error", () => {
47
+ /* EPIPE: child exited without consuming stdin — harmless */
48
+ });
49
+ child.stdin.end(opts?.stdin ?? "");
50
+ }
51
+ });
52
+ }
53
+ }
54
+ // ── Singleton ────────────────────────────────────────────────────
55
+ let _runtime;
56
+ /**
57
+ * Initialize the runtime adapter singleton.
58
+ */
59
+ export function initRuntime() {
60
+ _runtime = new NodeRuntimeAdapter();
61
+ return _runtime;
62
+ }
63
+ /**
64
+ * Get the runtime adapter. Lazily initializes if not yet set.
65
+ */
66
+ export function getRuntime() {
67
+ if (!_runtime) {
68
+ return initRuntime();
69
+ }
70
+ return _runtime;
71
+ }
72
+ /**
73
+ * Convert `import.meta.url` to a directory path.
74
+ */
75
+ export function moduleDir(importMetaUrl) {
76
+ return dirname(fileURLToPath(importMetaUrl));
77
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Runtime factory constructors for generated resource and property classes.
3
+ *
4
+ * Creates classes that implement the Declarable interface with DECLARABLE_MARKER,
5
+ * lexicon, entityType, kind, and attribute references.
6
+ */
7
+ import { DECLARABLE_MARKER } from "./declarable.js";
8
+ import { AttrRef } from "./attrref.js";
9
+ /**
10
+ * Create a resource class for a given type.
11
+ * The returned constructor creates Declarable objects with:
12
+ * - DECLARABLE_MARKER for type identification
13
+ * - lexicon identifier
14
+ * - entityType set to the resource type
15
+ * - kind "resource"
16
+ * - props stored from constructor argument
17
+ * - AttrRef instances for each attribute
18
+ */
19
+ export function createResource(type, lexicon, attrMap) {
20
+ const ResourceClass = function (props, attributes) {
21
+ Object.defineProperty(this, DECLARABLE_MARKER, { value: true, enumerable: false });
22
+ Object.defineProperty(this, "lexicon", { value: lexicon, enumerable: false });
23
+ Object.defineProperty(this, "entityType", { value: type, enumerable: false });
24
+ Object.defineProperty(this, "kind", { value: "resource", enumerable: false });
25
+ Object.defineProperty(this, "props", { value: props ?? {}, enumerable: false, configurable: true });
26
+ Object.defineProperty(this, "attributes", { value: attributes ?? {}, enumerable: false, configurable: true });
27
+ // Ref returns the resource instance itself — the serializer walker
28
+ // detects Declarable objects and emits { Ref: logicalName }
29
+ Object.defineProperty(this, "Ref", { value: this, enumerable: false });
30
+ // Create AttrRef instances for each attribute
31
+ // Must be enumerable so getAttributes() can discover them for resolveAttrRefs()
32
+ for (const [camelName, attrName] of Object.entries(attrMap)) {
33
+ Object.defineProperty(this, camelName, {
34
+ value: new AttrRef(this, attrName),
35
+ enumerable: true,
36
+ writable: false,
37
+ });
38
+ }
39
+ };
40
+ // Set the constructor name for debugging
41
+ Object.defineProperty(ResourceClass, "name", { value: type.split("::").pop() ?? type });
42
+ return ResourceClass;
43
+ }
44
+ /**
45
+ * Create a property-kind class for a given property type.
46
+ *
47
+ * Instances carry DECLARABLE_MARKER/lexicon/entityType/kind at runtime (set
48
+ * via defineProperty below), so they already satisfy `Declarable` — the
49
+ * return type just needs to say so. Before this, the signature was
50
+ * `Record<string, unknown>` with no `Declarable`, so any composite that
51
+ * returned a property-kind instance as a top-level member only type-checked
52
+ * by accident: either the caller went through an untyped `require()` (losing
53
+ * the type entirely) or never assigned the instance where its `Declarable`-ness
54
+ * was checked statically. See chant #1068.
55
+ */
56
+ export function createProperty(type, lexicon) {
57
+ const PropertyClass = function (props) {
58
+ Object.defineProperty(this, DECLARABLE_MARKER, { value: true, enumerable: false });
59
+ Object.defineProperty(this, "lexicon", { value: lexicon, enumerable: false });
60
+ Object.defineProperty(this, "entityType", { value: type, enumerable: false });
61
+ Object.defineProperty(this, "kind", { value: "property", enumerable: false });
62
+ Object.defineProperty(this, "props", { value: props ?? {}, enumerable: false, configurable: true });
63
+ };
64
+ Object.defineProperty(PropertyClass, "name", { value: type.split(".").pop() ?? type });
65
+ return PropertyClass;
66
+ }