@intentius/chant 0.124.12 → 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 (928) 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.d.ts +36 -4
  306. package/dist/gate-decision.d.ts.map +1 -1
  307. package/dist/gate-decision.js +260 -0
  308. package/dist/gate-resume-run.js +154 -0
  309. package/dist/gated-waves.js +165 -0
  310. package/dist/governance.js +43 -0
  311. package/dist/graph-declared.js +45 -0
  312. package/dist/graph-detail.js +207 -0
  313. package/dist/graph-dot.js +54 -0
  314. package/dist/graph-effective.js +107 -0
  315. package/dist/graph-ir.js +623 -0
  316. package/dist/graph-layout.js +184 -0
  317. package/dist/graph-lens.js +105 -0
  318. package/dist/graph-mermaid.js +83 -0
  319. package/dist/graph-ops.js +39 -0
  320. package/dist/graph-refs.js +156 -0
  321. package/dist/held-elsewhere.js +87 -0
  322. package/dist/identity.js +251 -0
  323. package/dist/import/base-parser.js +34 -0
  324. package/dist/import/embedded.js +255 -0
  325. package/dist/import/generator.js +1 -0
  326. package/dist/import/ir-utils.js +85 -0
  327. package/dist/import/parser-options.js +45 -0
  328. package/dist/import/parser.js +1 -0
  329. package/dist/index.js +118 -0
  330. package/dist/intrinsic-interpolation.js +73 -0
  331. package/dist/intrinsic.js +31 -0
  332. package/dist/join-key.js +35 -0
  333. package/dist/kubectl-context.js +150 -0
  334. package/dist/lexicon-config.js +58 -0
  335. package/dist/lexicon-integrity.js +47 -0
  336. package/dist/lexicon-manifest.js +70 -0
  337. package/dist/lexicon-module.d.ts.map +1 -1
  338. package/dist/lexicon-module.js +241 -0
  339. package/dist/lexicon-output.js +218 -0
  340. package/dist/lexicon-plugin-helpers.js +104 -0
  341. package/dist/lexicon-schema.js +136 -0
  342. package/dist/lexicon.js +130 -0
  343. package/dist/lifecycle/affected.js +224 -0
  344. package/dist/lifecycle/assert-live.js +110 -0
  345. package/dist/lifecycle/build-ledger-store.js +160 -0
  346. package/dist/lifecycle/build-ledger.js +155 -0
  347. package/dist/lifecycle/change-set.js +356 -0
  348. package/dist/lifecycle/converge-ledger.js +161 -0
  349. package/dist/lifecycle/deep-diff.js +233 -0
  350. package/dist/lifecycle/deep-observe.js +147 -0
  351. package/dist/lifecycle/digest.js +143 -0
  352. package/dist/lifecycle/disruption.js +135 -0
  353. package/dist/lifecycle/gate-applied.js +113 -0
  354. package/dist/lifecycle/gate-audit.js +341 -0
  355. package/dist/lifecycle/gate-ledger-select.js +89 -0
  356. package/dist/lifecycle/gate-ledger.d.ts +8 -0
  357. package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
  358. package/dist/lifecycle/gate-ledger.js +193 -0
  359. package/dist/lifecycle/gate-origin.js +117 -0
  360. package/dist/lifecycle/gate-pending.js +58 -0
  361. package/dist/lifecycle/git.js +1182 -0
  362. package/dist/lifecycle/identity.js +58 -0
  363. package/dist/lifecycle/index.js +26 -0
  364. package/dist/lifecycle/lease.js +283 -0
  365. package/dist/lifecycle/ledger-port.js +1 -0
  366. package/dist/lifecycle/legacy-digest.js +91 -0
  367. package/dist/lifecycle/live-diff.js +274 -0
  368. package/dist/lifecycle/local-note.js +15 -0
  369. package/dist/lifecycle/member-ledger.js +122 -0
  370. package/dist/lifecycle/observation-baseline.js +155 -0
  371. package/dist/lifecycle/observe.js +375 -0
  372. package/dist/lifecycle/oras-referrer-lookup.js +82 -0
  373. package/dist/lifecycle/override-ledger.js +54 -0
  374. package/dist/lifecycle/plan-digest.js +110 -0
  375. package/dist/lifecycle/plan-ledger.js +129 -0
  376. package/dist/lifecycle/receipt-plan.js +192 -0
  377. package/dist/lifecycle/release-ledger.js +155 -0
  378. package/dist/lifecycle/release-read.js +64 -0
  379. package/dist/lifecycle/replay.js +193 -0
  380. package/dist/lifecycle/rollback.js +102 -0
  381. package/dist/lifecycle/run-ledger.js +183 -0
  382. package/dist/lifecycle/scenario-eval.js +204 -0
  383. package/dist/lifecycle/scenario.js +214 -0
  384. package/dist/lifecycle/snapshot.js +239 -0
  385. package/dist/lifecycle/status.js +447 -0
  386. package/dist/lifecycle/symptoms.js +117 -0
  387. package/dist/lifecycle/teardown.js +255 -0
  388. package/dist/lifecycle/types.js +1 -0
  389. package/dist/lifecycle/unobserved-gate.js +33 -0
  390. package/dist/lifecycle/wave-plans.js +68 -0
  391. package/dist/lifecycle/work-item-id.js +36 -0
  392. package/dist/lifecycle/work-lease.js +393 -0
  393. package/dist/lint/component-checks.js +87 -0
  394. package/dist/lint/config.js +483 -0
  395. package/dist/lint/declarative.js +122 -0
  396. package/dist/lint/discover.d.ts.map +1 -1
  397. package/dist/lint/discover.js +138 -0
  398. package/dist/lint/engine.js +246 -0
  399. package/dist/lint/knowledge-checks.js +64 -0
  400. package/dist/lint/named-checks.js +22 -0
  401. package/dist/lint/output-checks.js +87 -0
  402. package/dist/lint/output-docs.js +163 -0
  403. package/dist/lint/parser.js +33 -0
  404. package/dist/lint/pipeline-change-gate.js +70 -0
  405. package/dist/lint/policy-import.d.ts +1 -1
  406. package/dist/lint/policy-import.d.ts.map +1 -1
  407. package/dist/lint/policy-import.js +62 -0
  408. package/dist/lint/policy-sandbox.js +86 -0
  409. package/dist/lint/policy.js +122 -0
  410. package/dist/lint/post-synth.js +87 -0
  411. package/dist/lint/presets/relaxed.json +26 -0
  412. package/dist/lint/presets/strict.json +24 -24
  413. package/dist/lint/receipt-checks.js +83 -0
  414. package/dist/lint/rule-loader.d.ts.map +1 -1
  415. package/dist/lint/rule-loader.js +89 -0
  416. package/dist/lint/rule-registry.js +86 -0
  417. package/dist/lint/rule.js +1 -0
  418. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
  419. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
  420. package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
  421. package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
  422. package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
  423. package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
  424. package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
  425. package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
  426. package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
  427. package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
  428. package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
  429. package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
  430. package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
  431. package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
  432. package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
  433. package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
  434. package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
  435. package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
  436. package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
  437. package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
  438. package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
  439. package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
  440. package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
  441. package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
  442. package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
  443. package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
  444. package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
  445. package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
  446. package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
  447. package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
  448. package/dist/lint/rules/comp/index.js +33 -0
  449. package/dist/lint/rules/comp/support.js +129 -0
  450. package/dist/lint/rules/composite-scope.js +51 -0
  451. package/dist/lint/rules/cor017-composite-name-match.js +93 -0
  452. package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
  453. package/dist/lint/rules/cor021-env-literal-name.js +100 -0
  454. package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
  455. package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
  456. package/dist/lint/rules/declarable-naming-convention.js +62 -0
  457. package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
  458. package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
  459. package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
  460. package/dist/lint/rules/evl004-spread-non-const.js +94 -0
  461. package/dist/lint/rules/evl005-resource-block-body.js +41 -0
  462. package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
  463. package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
  464. package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
  465. package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
  466. package/dist/lint/rules/export-required.js +115 -0
  467. package/dist/lint/rules/file-declarable-limit.js +88 -0
  468. package/dist/lint/rules/flat-declarations.js +62 -0
  469. package/dist/lint/rules/index.js +90 -0
  470. package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
  471. package/dist/lint/rules/no-redundant-type-import.js +76 -0
  472. package/dist/lint/rules/no-redundant-value-cast.js +41 -0
  473. package/dist/lint/rules/no-string-ref.js +59 -0
  474. package/dist/lint/rules/no-unused-declarable-import.js +75 -0
  475. package/dist/lint/rules/no-unused-declarable.js +142 -0
  476. package/dist/lint/rules/op/index.js +28 -0
  477. package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
  478. package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
  479. package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
  480. package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
  481. package/dist/lint/rules/op/support.js +11 -0
  482. package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
  483. package/dist/lint/rules/property-kind.js +56 -0
  484. package/dist/lint/rules/single-concern-file.js +71 -0
  485. package/dist/lint/rules/sys001-no-literal-key.js +60 -0
  486. package/dist/lint/selectors.js +168 -0
  487. package/dist/lint/suppressions.js +129 -0
  488. package/dist/lint/typescript.js +17 -0
  489. package/dist/live-endpoint.js +113 -0
  490. package/dist/live-read-session.js +76 -0
  491. package/dist/lsp/lexicon-providers.js +163 -0
  492. package/dist/lsp/types.js +5 -0
  493. package/dist/managed-fields.js +293 -0
  494. package/dist/mcp/types.js +4 -0
  495. package/dist/notify-verify.js +0 -1
  496. package/dist/notify.js +0 -1
  497. package/dist/notify.schema.json +72 -0
  498. package/dist/observation.js +266 -0
  499. package/dist/okf-read.js +134 -0
  500. package/dist/okf.js +275 -0
  501. package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
  502. package/dist/op/activities/activity-contracts.js +313 -0
  503. package/dist/op/activities/apply.js +582 -0
  504. package/dist/op/activities/build.js +18 -0
  505. package/dist/op/activities/change-coverage.js +40 -0
  506. package/dist/op/activities/change-set.js +64 -0
  507. package/dist/op/activities/converge.js +492 -0
  508. package/dist/op/activities/decide.js +211 -0
  509. package/dist/op/activities/env-teardown.js +110 -0
  510. package/dist/op/activities/factory.js +591 -0
  511. package/dist/op/activities/forge-pull-request.js +82 -0
  512. package/dist/op/activities/gh-host.js +78 -0
  513. package/dist/op/activities/guard-validate.js +165 -0
  514. package/dist/op/activities/http-check.js +40 -0
  515. package/dist/op/activities/index.js +59 -0
  516. package/dist/op/activities/lexicon-upgrade.js +629 -0
  517. package/dist/op/activities/lifecycle.js +109 -0
  518. package/dist/op/activities/pipeline-audit.js +147 -0
  519. package/dist/op/activities/policy.js +26 -0
  520. package/dist/op/activities/predict-behaviour.js +341 -0
  521. package/dist/op/activities/propose-upgrade.js +165 -0
  522. package/dist/op/activities/reconcile.js +997 -0
  523. package/dist/op/activities/shell.js +118 -0
  524. package/dist/op/activities/source-release.js +97 -0
  525. package/dist/op/activities/source-rollback.js +165 -0
  526. package/dist/op/activities/teardown.js +17 -0
  527. package/dist/op/activities/util.js +6 -0
  528. package/dist/op/activities/wait.js +51 -0
  529. package/dist/op/activities/work-evidence.js +35 -0
  530. package/dist/op/activities/workflow-audit.js +133 -0
  531. package/dist/op/activity-contract-registry.js +106 -0
  532. package/dist/op/activity-contract.js +232 -0
  533. package/dist/op/activity-failure.js +31 -0
  534. package/dist/op/activity-profiles.js +129 -0
  535. package/dist/op/activity-registry.js +105 -0
  536. package/dist/op/activity-runtime.js +28 -0
  537. package/dist/op/builders.js +801 -0
  538. package/dist/op/change-signal.js +118 -0
  539. package/dist/op/composites/apply-op.js +151 -0
  540. package/dist/op/composites/behaviour-op.js +65 -0
  541. package/dist/op/composites/converge-op.js +141 -0
  542. package/dist/op/composites/index.js +19 -0
  543. package/dist/op/composites/lexicon-upgrade-op.js +107 -0
  544. package/dist/op/composites/pipeline-audit-op.js +50 -0
  545. package/dist/op/composites/reconcile-op.js +84 -0
  546. package/dist/op/composites/watch-op.js +69 -0
  547. package/dist/op/composites/workflow-audit-op.js +57 -0
  548. package/dist/op/converge-rule.js +205 -0
  549. package/dist/op/cron.js +146 -0
  550. package/dist/op/decide-backend.js +181 -0
  551. package/dist/op/decide-config.js +68 -0
  552. package/dist/op/decide-read-inputs.js +141 -0
  553. package/dist/op/discover.d.ts.map +1 -1
  554. package/dist/op/discover.js +213 -0
  555. package/dist/op/duration.js +21 -0
  556. package/dist/op/emulator-freshness.js +80 -0
  557. package/dist/op/emulator-lifecycle.js +269 -0
  558. package/dist/op/factory.js +83 -0
  559. package/dist/op/gate-approval.js +172 -0
  560. package/dist/op/gate-name.js +86 -0
  561. package/dist/op/gate-plan-context.js +167 -0
  562. package/dist/op/gate-point-run.js +67 -0
  563. package/dist/op/gate-point.js +111 -0
  564. package/dist/op/gate-resume-plan.js +155 -0
  565. package/dist/op/gate-resume.js +31 -0
  566. package/dist/op/gate-review.js +290 -0
  567. package/dist/op/gate-run-locator.js +85 -0
  568. package/dist/op/gate-summary.js +100 -0
  569. package/dist/op/gate-wait.js +56 -0
  570. package/dist/op/gate.js +449 -0
  571. package/dist/op/generate-pipeline.js +124 -0
  572. package/dist/op/index.js +51 -0
  573. package/dist/op/lifecycle-receipt-store.js +45 -0
  574. package/dist/op/local-executor.js +1164 -0
  575. package/dist/op/local-output.js +140 -0
  576. package/dist/op/op-ir.js +317 -0
  577. package/dist/op/op-verb-class.js +131 -0
  578. package/dist/op/op-waves-notify.js +136 -0
  579. package/dist/op/op-waves-run.d.ts +1 -1
  580. package/dist/op/op-waves-run.d.ts.map +1 -1
  581. package/dist/op/op-waves-run.js +1657 -0
  582. package/dist/op/op-waves.js +409 -0
  583. package/dist/op/operator.js +743 -0
  584. package/dist/op/receipt-store.js +94 -0
  585. package/dist/op/resource.js +23 -0
  586. package/dist/op/run-context.js +28 -0
  587. package/dist/op/run-live.js +256 -0
  588. package/dist/op/runtime.js +21 -0
  589. package/dist/op/runtimes/local.js +195 -0
  590. package/dist/op/source-archive.js +131 -0
  591. package/dist/op/step-output-ref.js +397 -0
  592. package/dist/op/steward-beside.js +169 -0
  593. package/dist/op/steward-points.js +138 -0
  594. package/dist/op/steward-turn.js +59 -0
  595. package/dist/op/steward.js +317 -0
  596. package/dist/op/types.js +25 -0
  597. package/dist/op/work-lease-decl.js +81 -0
  598. package/dist/op/work-lease-run.js +393 -0
  599. package/dist/override-gate.js +284 -0
  600. package/dist/owner-chain.js +74 -0
  601. package/dist/ownership.js +92 -0
  602. package/dist/params.js +61 -0
  603. package/dist/plan-summary.js +711 -0
  604. package/dist/point-decision.js +211 -0
  605. package/dist/pr-forge.js +810 -0
  606. package/dist/pr-loop.js +203 -0
  607. package/dist/project-codegen.js +191 -0
  608. package/dist/project-root.js +74 -0
  609. package/dist/project-validation.js +50 -0
  610. package/dist/provenance.js +157 -0
  611. package/dist/pseudo-parameter.js +40 -0
  612. package/dist/reconcile.js +450 -0
  613. package/dist/resource-attributes.js +33 -0
  614. package/dist/runtime-adapter.js +77 -0
  615. package/dist/runtime.js +66 -0
  616. package/dist/secret-materialization.js +153 -0
  617. package/dist/secret-provenance.js +250 -0
  618. package/dist/serializer-walker.js +112 -0
  619. package/dist/serializer.js +1 -0
  620. package/dist/sort.js +45 -0
  621. package/dist/stack-output.js +115 -0
  622. package/dist/telemetry-attribution.js +149 -0
  623. package/dist/terraform/__fixtures__/build-graph.js +63 -0
  624. package/dist/terraform/adopt-state.js +40 -0
  625. package/dist/terraform/aws-resources.js +384 -0
  626. package/dist/terraform/bridge.js +204 -0
  627. package/dist/terraform/carve-provider.js +155 -0
  628. package/dist/terraform/carve.js +138 -0
  629. package/dist/terraform/data-source-shape.js +57 -0
  630. package/dist/terraform/emit-source.js +36 -0
  631. package/dist/terraform/excise.js +123 -0
  632. package/dist/terraform/graduate.js +128 -0
  633. package/dist/terraform/graph.js +435 -0
  634. package/dist/terraform/hcl2json.js +60 -0
  635. package/dist/terraform/manifest.js +149 -0
  636. package/dist/terraform/parse.js +81 -0
  637. package/dist/terraform/providers/aws.js +146 -0
  638. package/dist/terraform/providers/gcp.js +294 -0
  639. package/dist/terraform/providers/index.js +17 -0
  640. package/dist/terraform/providers/kubernetes.js +253 -0
  641. package/dist/terraform/score.js +151 -0
  642. package/dist/terraform/state.js +67 -0
  643. package/dist/terraform/tier-map.js +74 -0
  644. package/dist/terraform/types.js +13 -0
  645. package/dist/terraform/unified-diff.js +132 -0
  646. package/dist/testing.js +295 -0
  647. package/dist/toml-emit.js +153 -0
  648. package/dist/toml-parse.js +355 -0
  649. package/dist/toml-utils.js +60 -0
  650. package/dist/toml.js +428 -0
  651. package/dist/ts-loader.d.ts +46 -0
  652. package/dist/ts-loader.d.ts.map +1 -0
  653. package/dist/ts-loader.js +103 -0
  654. package/dist/types.js +1 -0
  655. package/dist/utils.js +61 -0
  656. package/dist/validation.js +20 -0
  657. package/dist/vendor/js-yaml-load.js +1662 -0
  658. package/dist/workspace/__fixtures__/contract-repo.js +103 -0
  659. package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
  660. package/dist/workspace/__fixtures__/sessions.js +91 -0
  661. package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
  662. package/dist/workspace/agent-cli.js +99 -0
  663. package/dist/workspace/agent.schema.json +390 -0
  664. package/dist/workspace/answers-ledger.js +89 -0
  665. package/dist/workspace/box-cli.js +142 -0
  666. package/dist/workspace/box-factory-write.js +196 -0
  667. package/dist/workspace/box-factory-write.schema.json +342 -0
  668. package/dist/workspace/box-factory.js +88 -0
  669. package/dist/workspace/box-intent.js +126 -0
  670. package/dist/workspace/box-isolation.js +169 -0
  671. package/dist/workspace/box-listing-write.schema.json +204 -0
  672. package/dist/workspace/box-listing.js +298 -0
  673. package/dist/workspace/box-publish.js +352 -0
  674. package/dist/workspace/box-publish.schema.json +498 -0
  675. package/dist/workspace/box-services.js +39 -0
  676. package/dist/workspace/broker-protocol.js +359 -0
  677. package/dist/workspace/broker-protocol.schema.json +228 -0
  678. package/dist/workspace/change-set.schema.json +460 -0
  679. package/dist/workspace/changes-cli.js +56 -0
  680. package/dist/workspace/changes.js +446 -0
  681. package/dist/workspace/changes.schema.json +642 -0
  682. package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
  683. package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
  684. package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
  685. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
  686. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
  687. package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
  688. package/dist/workspace/chant-migrations.js +113 -0
  689. package/dist/workspace/check.schema.json +433 -0
  690. package/dist/workspace/checks/box-isolation.js +62 -0
  691. package/dist/workspace/checks/boxes.js +491 -0
  692. package/dist/workspace/checks/diagrams.js +104 -0
  693. package/dist/workspace/checks/generated.js +419 -0
  694. package/dist/workspace/checks/ledgers.js +212 -0
  695. package/dist/workspace/checks/links.js +191 -0
  696. package/dist/workspace/checks/live.js +100 -0
  697. package/dist/workspace/checks/pipelines.js +188 -0
  698. package/dist/workspace/checks/records.js +169 -0
  699. package/dist/workspace/checks.js +426 -0
  700. package/dist/workspace/ci-green-cli.js +125 -0
  701. package/dist/workspace/ci-green-forge.js +83 -0
  702. package/dist/workspace/ci-green-workflow.js +199 -0
  703. package/dist/workspace/ci-green.js +325 -0
  704. package/dist/workspace/ci-last-green.schema.json +158 -0
  705. package/dist/workspace/compose-graph.js +235 -0
  706. package/dist/workspace/compose-reports.js +146 -0
  707. package/dist/workspace/composites.js +264 -0
  708. package/dist/workspace/composites.schema.json +617 -0
  709. package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
  710. package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
  711. package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
  712. package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
  713. package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
  714. package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
  715. package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
  716. package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
  717. package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
  718. package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
  719. package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
  720. package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
  721. package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
  722. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  723. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  724. package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
  725. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  726. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  727. package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
  728. package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
  729. package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  730. package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  731. package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
  732. package/dist/workspace/conformance/broker.js +736 -0
  733. package/dist/workspace/conformance/index.js +673 -0
  734. package/dist/workspace/conformance/vitest.js +108 -0
  735. package/dist/workspace/conformance/writer.js +1080 -0
  736. package/dist/workspace/decide.js +879 -0
  737. package/dist/workspace/decision-points.schema.json +135 -135
  738. package/dist/workspace/declaration-write-cli.js +74 -0
  739. package/dist/workspace/declaration-write.js +238 -0
  740. package/dist/workspace/declaration.js +938 -0
  741. package/dist/workspace/declaration.schema.json +1413 -1413
  742. package/dist/workspace/declared-kinds.js +106 -0
  743. package/dist/workspace/environments.js +164 -0
  744. package/dist/workspace/evidence.schema.json +279 -0
  745. package/dist/workspace/export-cli.js +185 -0
  746. package/dist/workspace/export.js +499 -0
  747. package/dist/workspace/factory-rules.js +175 -0
  748. package/dist/workspace/generated-files.js +92 -0
  749. package/dist/workspace/glob.js +45 -0
  750. package/dist/workspace/graph-cache.js +352 -0
  751. package/dist/workspace/graph-cli.js +348 -0
  752. package/dist/workspace/graph.schema.json +1338 -0
  753. package/dist/workspace/identity-gate-rule.d.ts +65 -0
  754. package/dist/workspace/identity-gate-rule.d.ts.map +1 -0
  755. package/dist/workspace/identity-gate-rule.js +75 -0
  756. package/dist/workspace/identity.d.ts +4 -2
  757. package/dist/workspace/identity.d.ts.map +1 -1
  758. package/dist/workspace/identity.js +126 -0
  759. package/dist/workspace/import.js +283 -0
  760. package/dist/workspace/init.js +620 -0
  761. package/dist/workspace/intent-cli.js +263 -0
  762. package/dist/workspace/intent-joins.js +201 -0
  763. package/dist/workspace/intent-record.js +352 -0
  764. package/dist/workspace/intent-record.schema.json +864 -0
  765. package/dist/workspace/intent.js +1582 -0
  766. package/dist/workspace/intent.schema.json +2420 -0
  767. package/dist/workspace/json-edit.js +221 -0
  768. package/dist/workspace/jsonc.js +235 -0
  769. package/dist/workspace/kind-readers.js +103 -0
  770. package/dist/workspace/kinds.js +587 -0
  771. package/dist/workspace/lexicon-symbols.js +112 -0
  772. package/dist/workspace/lineage-adopt-cli.js +102 -0
  773. package/dist/workspace/lineage-adopt.js +360 -0
  774. package/dist/workspace/lineage-check.js +282 -0
  775. package/dist/workspace/lineage-cli.js +121 -0
  776. package/dist/workspace/lineage-hash-index.js +284 -0
  777. package/dist/workspace/lineage-init.js +507 -0
  778. package/dist/workspace/lineage-lock.js +387 -0
  779. package/dist/workspace/lineage-merge.js +45 -0
  780. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  781. package/dist/workspace/lineage-migrations.js +329 -0
  782. package/dist/workspace/lineage-provenance.js +36 -0
  783. package/dist/workspace/lineage-update.js +138 -0
  784. package/dist/workspace/lineage-upgrade-cli.js +131 -0
  785. package/dist/workspace/lineage-upgrade.js +889 -0
  786. package/dist/workspace/lineage-vendor.js +171 -0
  787. package/dist/workspace/lineage-version.js +128 -0
  788. package/dist/workspace/lineage-versions.js +275 -0
  789. package/dist/workspace/links.js +330 -0
  790. package/dist/workspace/ls-generated.js +95 -0
  791. package/dist/workspace/ls.js +277 -0
  792. package/dist/workspace/ls.schema.json +333 -0
  793. package/dist/workspace/member-commands.js +508 -0
  794. package/dist/workspace/member-handles.js +216 -0
  795. package/dist/workspace/member-pipeline.js +258 -0
  796. package/dist/workspace/member-run.js +117 -0
  797. package/dist/workspace/member-write.schema.json +193 -0
  798. package/dist/workspace/nested-graph.js +156 -0
  799. package/dist/workspace/nesting.js +38 -0
  800. package/dist/workspace/patch.js +301 -0
  801. package/dist/workspace/patch.schema.json +321 -0
  802. package/dist/workspace/pin-cli.js +55 -0
  803. package/dist/workspace/pin-integrity.js +100 -0
  804. package/dist/workspace/plan-summary.schema.json +155 -0
  805. package/dist/workspace/point-answer.schema.json +129 -129
  806. package/dist/workspace/points-cli.js +291 -0
  807. package/dist/workspace/points-write.schema.json +660 -0
  808. package/dist/workspace/points.js +521 -0
  809. package/dist/workspace/points.schema.json +916 -0
  810. package/dist/workspace/pr-report.schema.json +108 -0
  811. package/dist/workspace/principal-classes.d.ts +3 -14
  812. package/dist/workspace/principal-classes.d.ts.map +1 -1
  813. package/dist/workspace/principal-classes.js +245 -0
  814. package/dist/workspace/reason-codes.js +326 -0
  815. package/dist/workspace/record-assets.js +151 -0
  816. package/dist/workspace/record-decided.js +105 -0
  817. package/dist/workspace/record-sessions.js +96 -0
  818. package/dist/workspace/record-source.js +114 -0
  819. package/dist/workspace/records-amend.schema.json +284 -0
  820. package/dist/workspace/records-checkout.js +76 -0
  821. package/dist/workspace/records-cli.js +707 -0
  822. package/dist/workspace/records-close.js +116 -0
  823. package/dist/workspace/records-close.schema.json +278 -0
  824. package/dist/workspace/records-new.schema.json +202 -0
  825. package/dist/workspace/records-review.schema.json +367 -0
  826. package/dist/workspace/records-since.js +317 -0
  827. package/dist/workspace/records-since.schema.json +218 -0
  828. package/dist/workspace/records-write.js +1229 -0
  829. package/dist/workspace/records.js +1345 -0
  830. package/dist/workspace/records.schema.json +604 -0
  831. package/dist/workspace/reference-kinds/app/package.json +10 -0
  832. package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  833. package/dist/workspace/returns.js +303 -0
  834. package/dist/workspace/root-refusal.js +75 -0
  835. package/dist/workspace/run-statement.schema.json +622 -0
  836. package/dist/workspace/runs-cli.js +584 -0
  837. package/dist/workspace/runs-write.schema.json +994 -0
  838. package/dist/workspace/runs.js +708 -0
  839. package/dist/workspace/runs.schema.json +1257 -0
  840. package/dist/workspace/runtimes.js +76 -0
  841. package/dist/workspace/session-kinds.js +83 -0
  842. package/dist/workspace/signers.schema.json +206 -0
  843. package/dist/workspace/source-block.js +125 -0
  844. package/dist/workspace/squash.js +177 -0
  845. package/dist/workspace/status-gates.js +162 -0
  846. package/dist/workspace/status-stewards.js +330 -0
  847. package/dist/workspace/status.js +514 -0
  848. package/dist/workspace/status.schema.json +998 -0
  849. package/dist/workspace/steward-index.js +191 -0
  850. package/dist/workspace/symbols.js +188 -0
  851. package/dist/workspace/template-manifest.js +227 -0
  852. package/dist/workspace/template-pins.js +115 -0
  853. package/dist/workspace/trailer-joins.js +65 -0
  854. package/dist/workspace/trailers.js +111 -0
  855. package/dist/workspace/tree.js +136 -0
  856. package/dist/workspace/trust/attestor.js +63 -0
  857. package/dist/workspace/trust/dsse.js +108 -0
  858. package/dist/workspace/trust/evidence-cli.js +175 -0
  859. package/dist/workspace/trust/evidence.js +161 -0
  860. package/dist/workspace/trust/gate-seal.js +226 -0
  861. package/dist/workspace/trust/policy.js +190 -0
  862. package/dist/workspace/trust/provenance.js +180 -0
  863. package/dist/workspace/trust/rotation.js +298 -0
  864. package/dist/workspace/trust/run-commits.js +101 -0
  865. package/dist/workspace/trust/run-statement.js +182 -0
  866. package/dist/workspace/trust/seal.js +272 -0
  867. package/dist/workspace/trust/signers-cli.js +152 -0
  868. package/dist/workspace/trust/ssh-commit.js +178 -0
  869. package/dist/workspace/trust/test-repo.js +118 -0
  870. package/dist/workspace/trust/trust-files.js +193 -0
  871. package/dist/workspace/trust/verify-cli.js +63 -0
  872. package/dist/workspace/trust/verify.js +192 -0
  873. package/dist/workspace/which-chant.js +141 -0
  874. package/dist/workspace/wip-cli.js +95 -0
  875. package/dist/workspace/wip-write.schema.json +504 -0
  876. package/dist/workspace/wip.js +631 -0
  877. package/dist/workspace/wip.schema.json +334 -0
  878. package/dist/workspace/work-cli.js +448 -0
  879. package/dist/workspace/work-evidence.js +122 -0
  880. package/dist/workspace/work-evidence.schema.json +222 -0
  881. package/dist/workspace/work-history.schema.json +421 -0
  882. package/dist/workspace/work-lease.schema.json +246 -0
  883. package/dist/workspace/work-size.js +77 -0
  884. package/dist/workspace/work.js +283 -0
  885. package/dist/workspace/workspace-kinds.schema.json +259 -259
  886. package/dist/workspace/workspace-principals.schema.json +53 -53
  887. package/dist/workspace/write-lock-cli.js +105 -0
  888. package/dist/workspace/write-lock.js +424 -0
  889. package/dist/workspace/write-lock.schema.json +172 -0
  890. package/dist/workspace/write-scope.js +484 -0
  891. package/dist/yaml.js +459 -0
  892. package/package.json +2 -2
  893. package/src/cli/commands/check-lexicon-plugin.ts +2 -0
  894. package/src/cli/commands/lint.ts +36 -6
  895. package/src/cli/commands/migrate.ts +2 -0
  896. package/src/cli/compiled-cli.e2e.test.ts +165 -0
  897. package/src/cli/main.ts +121 -27
  898. package/src/cli/mcp/workspace-tools.ts +1 -1
  899. package/src/codegen/pinned-upgrade.ts +2 -0
  900. package/src/components/discover.ts +2 -0
  901. package/src/components/sandbox/driver.ts +3 -1
  902. package/src/config-import.ts +3 -0
  903. package/src/discovery/fold-import.ts +23 -14
  904. package/src/discovery/import.ts +2 -0
  905. package/src/discovery/sandbox/driver.ts +3 -1
  906. package/src/gate-decision-bundle.test.ts +3 -2
  907. package/src/gate-decision-identity.test.ts +176 -0
  908. package/src/gate-decision.ts +100 -22
  909. package/src/lexicon-module.ts +3 -0
  910. package/src/lifecycle/gate-ledger.ts +8 -0
  911. package/src/lint/config.ts +1 -1
  912. package/src/lint/discover.ts +28 -8
  913. package/src/lint/policy-import.ts +4 -1
  914. package/src/lint/rule-loader.ts +2 -0
  915. package/src/op/discover.ts +3 -0
  916. package/src/op/op-waves-point.test.ts +1 -0
  917. package/src/op/op-waves-run.ts +5 -4
  918. package/src/op/op-waves.test.ts +14 -0
  919. package/src/ts-loader.test.ts +23 -0
  920. package/src/ts-loader.ts +122 -0
  921. package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
  922. package/src/workspace/declaration.ts +1 -1
  923. package/src/workspace/identity-gate-rule.ts +109 -0
  924. package/src/workspace/identity.ts +8 -18
  925. package/src/workspace/kinds.ts +1 -1
  926. package/src/workspace/lineage-migrations.ts +2 -0
  927. package/src/workspace/points.ts +1 -1
  928. package/src/workspace/principal-classes.ts +5 -30
@@ -0,0 +1,64 @@
1
+ /**
2
+ * CloudFormation-type → native-spec tier for the CDK carve advisor (#1056).
3
+ *
4
+ * The Terraform path's hardest layer — translating `aws_s3_bucket` into
5
+ * `AWS::S3::Bucket` and a tier — does not exist here: a synthesized template is
6
+ * already in CloudFormation type space, which is the space
7
+ * `AWS_CARVE_TYPES.nativeType` is written in. So this is the same table read
8
+ * from the other end, not a second table to keep in step. Adding an AWS type to
9
+ * the carve-out table lights it up for both advisors at once.
10
+ *
11
+ * `mapsTo` is the CloudFormation type itself, because that identity is the
12
+ * point: chant's AWS lexicon constructors take CloudFormation PascalCase props,
13
+ * so a CDK resource needs no translation to become one.
14
+ */
15
+ import { AWS_CARVE_TYPES } from "../terraform/aws-resources.js";
16
+ /**
17
+ * CloudFormation type → tier. Two Terraform types can name one CloudFormation
18
+ * type (`aws_lb` and `aws_alb` are the same load balancer); the first entry
19
+ * wins, and since aliases share a tier by construction there is nothing to
20
+ * reconcile.
21
+ */
22
+ export const CFN_TIER_MAP = (() => {
23
+ const map = {};
24
+ for (const entry of AWS_CARVE_TYPES) {
25
+ if (map[entry.nativeType])
26
+ continue;
27
+ map[entry.nativeType] = { tier: entry.tier, mapsTo: entry.nativeType };
28
+ }
29
+ return map;
30
+ })();
31
+ /** The chant AWS lexicon constructor a CloudFormation type would carve into. */
32
+ export const CFN_CTOR = (() => {
33
+ var _a;
34
+ const map = {};
35
+ for (const entry of AWS_CARVE_TYPES)
36
+ map[_a = entry.nativeType] ?? (map[_a] = entry.ctor);
37
+ return map;
38
+ })();
39
+ export function resolveCfnTier(cfnType) {
40
+ return CFN_TIER_MAP[cfnType] ?? null;
41
+ }
42
+ /**
43
+ * A nested stack is an assembly of its own: its resources live in a separate
44
+ * template that this advisor does not descend into, so carving the
45
+ * `AWS::CloudFormation::Stack` resource means carving everything under it.
46
+ */
47
+ export const NESTED_STACK_TYPE = "AWS::CloudFormation::Stack";
48
+ /**
49
+ * CloudFormation resources CDK synthesizes for its own bookkeeping. They
50
+ * describe the synthesis, not the infrastructure, so they never appear in the
51
+ * ranking.
52
+ */
53
+ export const SCAFFOLDING_TYPES = new Set(["AWS::CDK::Metadata"]);
54
+ /**
55
+ * Template parameters CDK adds for bootstrap and asset plumbing. A reference to
56
+ * one is not a sign the resource is parameterized by its author — it is the
57
+ * synthesizer talking to itself — so these do not mark a construct dynamic.
58
+ */
59
+ export function isScaffoldingParameter(name) {
60
+ return (name === "BootstrapVersion" ||
61
+ name === "CdkBootstrapVersion" ||
62
+ name.startsWith("AssetParameters") ||
63
+ name.startsWith("BootstrapVersion"));
64
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * The parts of a CDK cloud assembly the carve advisor reads (#1056).
3
+ *
4
+ * A cloud assembly is already JSON, so there is no parser to install and no
5
+ * expression AST to resolve — the Terraform path's two hardest layers do not
6
+ * exist here. Three files carry everything the advisor needs:
7
+ *
8
+ * - `manifest.json` — which artifacts are stacks, which template file each
9
+ * one synthesized to, and (crucially) whether any context lookup went
10
+ * unresolved.
11
+ * - `tree.json` — the construct tree, so CloudFormation resources can be
12
+ * grouped back under the construct that emitted them. Optional: CDK can be
13
+ * told not to write it, and the advisor degrades to a coarser grouping.
14
+ * - `*.template.json` — the CloudFormation templates themselves, already in
15
+ * `AWS::*` type space, which is exactly what the AWS tier map keys on.
16
+ *
17
+ * Everything here is post-jsii, so a Python or Java CDK app reads through the
18
+ * same code path as a TypeScript one. Nothing in this module reads CDK source.
19
+ *
20
+ * The declarations are deliberately loose — every field optional, unknown keys
21
+ * tolerated — because the assembly schema is not chant's to own and gains
22
+ * fields between CDK releases.
23
+ */
24
+ export {};
@@ -0,0 +1,312 @@
1
+ /**
2
+ * One change-set document across planners (#3181).
3
+ *
4
+ * Several things plan changes, each with its own output: `chant lifecycle
5
+ * plan` for the cloud lexicons, terraform, tofu and choudoufu plans, and a
6
+ * warden's reconcile plan. This module is the one typed document they all
7
+ * become, so a reader can ask one question of every plan in a run: what will
8
+ * change, where, and how risky it is. Its schema is
9
+ * `./workspace/change-set.schema.json`, part of the workspace read contract.
10
+ *
11
+ * Each planner reaches it through an adapter that returns a
12
+ * {@link ChangeSetPart}: one member and its entries. The lifecycle and
13
+ * reconcile adapters are here; the terraform-family ones live in the
14
+ * terraform lexicon's `change-set` subpath. {@link composeChangeSet} joins
15
+ * the parts.
16
+ *
17
+ * ## The digest
18
+ *
19
+ * Every member carries the plan digest a gate on that member alone binds
20
+ * (#2300): `terraformPlanDigest` for a terraform-family root, and here
21
+ * `computePlanDigest("lifecycle-plan", …)` and `computePlanDigest(
22
+ * "reconcile-plan", …)`. {@link changeSetDigest} over the sorted `{ member,
23
+ * planDigest }` pairs is the set digest #3049 describes, and a wave's digest
24
+ * is that function over the wave's members.
25
+ *
26
+ * The document's digest is {@link changeSetDocumentDigest}: the set digest,
27
+ * each member's status and holes, the entries and the side effects. An
28
+ * approval of the document binds what it says as well as the plans it came
29
+ * from, so a pull request's apply that resumes from a record (#3464) can
30
+ * check a re-planned member against the record's entries without trusting
31
+ * whoever wrote the record. The summary is computed from the entries and is
32
+ * not hashed. A change to how chant projects a plan into entries moves the
33
+ * document's digest, so an approval given under one chant does not carry to
34
+ * an apply under a chant that projects the same plan differently.
35
+ *
36
+ * ## The import graph
37
+ *
38
+ * terragucci runs this in customer CI as one bundled file with no TypeScript
39
+ * toolchain (#3421). Everything here imports `./lifecycle/plan-digest` and
40
+ * types only, and `change-set-bundle.test.ts` holds that.
41
+ */
42
+ import { computePlanDigest } from "./lifecycle/plan-digest.js";
43
+ /** The schema a change-set document names in `$schema`. */
44
+ export const CHANGE_SET_SCHEMA_ID = "https://intentius.io/chant/schemas/workspace/change-set/v1/change-set.schema.json";
45
+ /** The read-contract version the document follows. */
46
+ export const CHANGE_SET_CONTRACT = 1;
47
+ /** Every action, in the order the summary lists them. */
48
+ export const CHANGE_SET_ACTIONS = ["create", "update", "replace", "delete", "read", "no-op", "forget"];
49
+ const byString = (a, b) => (a < b ? -1 : a > b ? 1 : 0);
50
+ function entryKey(e) {
51
+ return `${e.member}\u0000${e.address}\u0000${e.deposed ?? ""}\u0000${e.action}`;
52
+ }
53
+ const bySideEffect = (a, b) => byString(a.member, b.member) || byString(a.address, b.address) || byString(a.trigger ?? "", b.trigger ?? "");
54
+ /**
55
+ * The set digest over members' plan digests: `computePlanDigest("change-set",
56
+ * …)` over `{ member, planDigest }` sorted by member. Order-independent,
57
+ * and different whenever one member's plan digest is. Refuses a set that
58
+ * names a member twice, which has no single plan for that member.
59
+ *
60
+ * Provisional members are left out: their plans may stand on values that do
61
+ * not exist yet, so an approval of this digest never covers them.
62
+ */
63
+ export function changeSetDigest(members) {
64
+ const pairs = members
65
+ .filter((m) => m.provisional !== true)
66
+ .map((m) => ({ member: m.member, planDigest: m.planDigest }))
67
+ .sort((a, b) => byString(a.member, b.member));
68
+ for (let i = 1; i < pairs.length; i++) {
69
+ if (pairs[i - 1].member === pairs[i].member)
70
+ throw new Error(`the change set names member ${pairs[i].member} twice`);
71
+ }
72
+ return computePlanDigest("change-set", pairs);
73
+ }
74
+ /**
75
+ * The document's digest: `computePlanDigest("change-set-document", …)` over
76
+ * the set digest ({@link changeSetDigest}), each member's name, status and
77
+ * holes, the entries and the side effects. Members are sorted by name and
78
+ * entries and side effects by the keys {@link composeChangeSet} sorts them by,
79
+ * so order makes no difference.
80
+ *
81
+ * A provisional member is left out, with its entries and side effects, as
82
+ * the set digest leaves it out: no approval of the document covers it.
83
+ */
84
+ export function changeSetDocumentDigest(doc) {
85
+ const provisional = new Set(doc.members.filter((m) => m.provisional === true).map((m) => m.member));
86
+ const members = doc.members
87
+ .filter((m) => !provisional.has(m.member))
88
+ .map((m) => ({ member: m.member, status: m.status, holes: m.holes }))
89
+ .sort((a, b) => byString(a.member, b.member));
90
+ const entries = doc.entries.filter((e) => !provisional.has(e.member)).sort((a, b) => byString(entryKey(a), entryKey(b)));
91
+ const sideEffects = (doc.sideEffects ?? []).filter((s) => !provisional.has(s.member)).sort(bySideEffect);
92
+ return computePlanDigest("change-set-document", { set: changeSetDigest(doc.members), members, entries, sideEffects });
93
+ }
94
+ /** The summary of a set of members and entries. */
95
+ export function summarizeChangeSet(members, entries) {
96
+ const actions = Object.fromEntries(CHANGE_SET_ACTIONS.map((a) => [a, 0]));
97
+ const types = {};
98
+ const byMember = {};
99
+ const deletes = [];
100
+ const replacements = [];
101
+ const bump = (into, key, action) => {
102
+ const counts = (into[key] ?? (into[key] = {}));
103
+ counts[action] = (counts[action] ?? 0) + 1;
104
+ };
105
+ for (const e of entries) {
106
+ actions[e.action]++;
107
+ bump(types, e.type, e.action);
108
+ bump(byMember, e.member, e.action);
109
+ const named = {
110
+ member: e.member, address: e.address, type: e.type,
111
+ ...(e.deposed !== undefined ? { deposed: e.deposed } : {}),
112
+ ...(e.disruption !== undefined ? { disruption: e.disruption } : {}),
113
+ };
114
+ if (e.action === "delete")
115
+ deletes.push(named);
116
+ if (e.action === "replace")
117
+ replacements.push(named);
118
+ }
119
+ return {
120
+ members: members.length,
121
+ entries: entries.length,
122
+ actions,
123
+ types: sortKeys(types),
124
+ byMember: sortKeys(byMember),
125
+ deletes,
126
+ replacements,
127
+ failed: members.filter((m) => m.status === "failed").map((m) => m.member),
128
+ holes: members.reduce((n, m) => n + m.holes.length, 0),
129
+ };
130
+ }
131
+ function sortKeys(o) {
132
+ return Object.fromEntries(Object.entries(o).sort(([a], [b]) => byString(a, b)));
133
+ }
134
+ /**
135
+ * Join adapters' parts into one document: members sorted by name, entries
136
+ * by member, address, deposed key and action, the summary, and the digest.
137
+ * Throws when two parts name the same member, or an entry names a member
138
+ * other than its part's.
139
+ */
140
+ export function composeChangeSet(parts, options = {}) {
141
+ const members = parts.map((p) => p.member).sort((a, b) => byString(a.member, b.member));
142
+ const entries = [];
143
+ for (const part of parts) {
144
+ for (const e of part.entries) {
145
+ if (e.member !== part.member.member)
146
+ throw new Error(`an entry at ${e.address} names member ${e.member}, inside member ${part.member.member}`);
147
+ entries.push(e);
148
+ }
149
+ }
150
+ entries.sort((a, b) => byString(entryKey(a), entryKey(b)));
151
+ const sideEffects = parts
152
+ .flatMap((p) => (p.sideEffects ?? []).map((s) => ({ member: p.member.member, ...s })))
153
+ .sort(bySideEffect);
154
+ const digest = changeSetDocumentDigest({ members, entries, sideEffects });
155
+ return {
156
+ $schema: CHANGE_SET_SCHEMA_ID,
157
+ contract: CHANGE_SET_CONTRACT,
158
+ ...(options.chant !== undefined ? { chant: options.chant } : {}),
159
+ digest,
160
+ members,
161
+ entries,
162
+ ...(sideEffects.length > 0 ? { sideEffects } : {}),
163
+ summary: summarizeChangeSet(members, entries),
164
+ };
165
+ }
166
+ /**
167
+ * Whether a document's digest is the one its members, entries and side
168
+ * effects give ({@link changeSetDocumentDigest}). A document that names a
169
+ * member twice has no digest and is not verified.
170
+ */
171
+ export function verifyChangeSetDigest(doc) {
172
+ try {
173
+ return changeSetDocumentDigest(doc) === doc.digest;
174
+ }
175
+ catch {
176
+ return false;
177
+ }
178
+ }
179
+ function lifecycleAttributes(entry) {
180
+ const because = new Set(entry.disruptionBecause ?? []);
181
+ return (entry.deltas ?? []).map((d) => ({
182
+ path: d.path,
183
+ ...(d.oldValue !== undefined ? { before: d.oldValue } : {}),
184
+ ...(d.newValue !== undefined ? { after: d.newValue } : {}),
185
+ ...(because.has(d.path) ? { forcesReplacement: true } : {}),
186
+ }));
187
+ }
188
+ /**
189
+ * A chant member's part, from `chant lifecycle plan <env> --json`.
190
+ *
191
+ * `create`, `update`, `delete` and `noop` map across. An `update` whose
192
+ * lexicon says it replaces or destroys becomes a `replace`. An `effect`
193
+ * entry is the receipt its effect step writes: a `create` when the receipt
194
+ * is absent, else an `update`. `unobserved` entries are holes. `adopt` and
195
+ * `runtime` propose nothing and are left out.
196
+ *
197
+ * The member's plan digest is `computePlanDigest("lifecycle-plan", plan)`
198
+ * over the whole document, which carries no timestamp or run id.
199
+ */
200
+ export function lifecyclePlanPart(input) {
201
+ const { plan } = input;
202
+ const fallback = input.lexicon ?? "chant";
203
+ const entries = [];
204
+ const holes = [];
205
+ for (const e of plan.entries ?? []) {
206
+ const lexicon = e.lexicon ?? fallback;
207
+ if (e.action === "unobserved") {
208
+ holes.push({ address: e.name, ...(e.type ? { type: e.type } : {}), reason: e.unobservedReason ?? "unobserved" });
209
+ continue;
210
+ }
211
+ let action;
212
+ let disruption;
213
+ switch (e.action) {
214
+ case "create":
215
+ action = "create";
216
+ break;
217
+ case "noop":
218
+ action = "no-op";
219
+ break;
220
+ case "delete":
221
+ action = "delete";
222
+ disruption = "destroy";
223
+ break;
224
+ case "effect":
225
+ action = e.effectReason === "receipt-absent" ? "create" : "update";
226
+ break;
227
+ case "update":
228
+ disruption = e.disruption ?? "unknown";
229
+ action = disruption === "replace" || disruption === "destroy" ? "replace" : "update";
230
+ break;
231
+ default: continue; // adopt, runtime: not a proposal
232
+ }
233
+ entries.push({
234
+ member: input.member,
235
+ lexicon,
236
+ planner: "chant",
237
+ address: e.name,
238
+ type: e.type ?? "unknown",
239
+ ...(e.physicalId ? { id: e.physicalId } : {}),
240
+ action,
241
+ ...(disruption ? { disruption } : {}),
242
+ scope: plan.env,
243
+ attributes: lifecycleAttributes(e),
244
+ });
245
+ }
246
+ const lexicons = [...new Set(entries.map((e) => e.lexicon))].sort();
247
+ return {
248
+ member: {
249
+ member: input.member,
250
+ lexicon: lexicons.length === 1 ? lexicons[0] : fallback,
251
+ planner: "chant",
252
+ scope: plan.env,
253
+ status: "planned",
254
+ planDigest: computePlanDigest("lifecycle-plan", plan),
255
+ holes,
256
+ },
257
+ entries,
258
+ };
259
+ }
260
+ function topLevelKeys(value) {
261
+ return value && typeof value === "object" && !Array.isArray(value) ? Object.keys(value).sort() : [];
262
+ }
263
+ /**
264
+ * A warden member's part, from the reconcile `ChangeSet`s it planned
265
+ * (`./reconcile.ts`). The address is `<resourceType>.<key>`, unique within
266
+ * one org, and the scope is the org. An update's disruption is `unknown`:
267
+ * the reconcile model says nothing about it.
268
+ *
269
+ * The plan digest covers each change set's org and entries, and leaves out
270
+ * the managed counts, which are guardrail denominators rather than changes.
271
+ */
272
+ export function reconcilePlanPart(input) {
273
+ const sets = (Array.isArray(input.plan) ? input.plan : [input.plan])
274
+ .map((cs) => ({ org: cs.org, entries: [...cs.entries].sort((a, b) => byString(`${a.resourceType}\u0000${a.key}`, `${b.resourceType}\u0000${b.key}`)) }))
275
+ .sort((a, b) => byString(a.org, b.org));
276
+ const lexicon = input.lexicon ?? "github";
277
+ const entries = [];
278
+ for (const cs of sets) {
279
+ for (const e of cs.entries) {
280
+ const attributes = e.kind === "update"
281
+ ? (e.fields ?? []).map((f) => ({ path: f.field, ...(f.before !== undefined ? { before: f.before } : {}), ...(f.after !== undefined ? { after: f.after } : {}) }))
282
+ : e.kind === "create"
283
+ ? topLevelKeys(e.after).map((k) => ({ path: k, after: e.after[k] }))
284
+ : [];
285
+ entries.push({
286
+ member: input.member,
287
+ lexicon,
288
+ planner: "warden",
289
+ address: `${e.resourceType}.${e.key}`,
290
+ type: e.resourceType,
291
+ name: e.key,
292
+ action: e.kind,
293
+ ...(e.kind === "delete" ? { disruption: "destroy" } : e.kind === "update" ? { disruption: "unknown" } : {}),
294
+ scope: cs.org,
295
+ attributes,
296
+ });
297
+ }
298
+ }
299
+ const orgs = [...new Set(sets.map((s) => s.org))];
300
+ return {
301
+ member: {
302
+ member: input.member,
303
+ lexicon,
304
+ planner: "warden",
305
+ ...(orgs.length === 1 ? { scope: orgs[0] } : {}),
306
+ status: "planned",
307
+ planDigest: computePlanDigest("reconcile-plan", sets),
308
+ holes: [],
309
+ },
310
+ entries,
311
+ };
312
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Child Project — represents a nested project directory that gets built
3
+ * independently and referenced from a parent as a single deployment unit.
4
+ *
5
+ * Lexicons create ChildProjectInstance via their own factory (e.g. `nestedStack()`).
6
+ * The core build pipeline detects these and recursively builds children.
7
+ */
8
+ import { DECLARABLE_MARKER } from "./declarable.js";
9
+ /**
10
+ * Marker symbol for child project identification.
11
+ */
12
+ export const CHILD_PROJECT_MARKER = Symbol.for("chant.childProject");
13
+ /**
14
+ * Type guard for ChildProjectInstance.
15
+ */
16
+ export function isChildProject(value) {
17
+ return (typeof value === "object" &&
18
+ value !== null &&
19
+ CHILD_PROJECT_MARKER in value &&
20
+ value[CHILD_PROJECT_MARKER] === true);
21
+ }
@@ -0,0 +1,135 @@
1
+ /**
2
+ * The claimed-field set (#2160) — which properties this declaration ever set.
3
+ *
4
+ * chant's ownership question has always been answered per resource, from a
5
+ * marker: is this thing mine. The finer question was never asked. A live
6
+ * property tree carries fields nobody declared — an autoscaler's replica count,
7
+ * a controller's annotation, a value a person typed into a console — and the
8
+ * deep diff (./lifecycle/deep-diff.ts) reported every one of them as a
9
+ * difference, because a difference is all a two-way comparison can produce.
10
+ *
11
+ * Every lexicon has been paying for that in hand-written knowledge.
12
+ * `DeepNormalizationHooks.prune` is where the noise goes, and three of the four
13
+ * hooks exist because the live tree holds fields the declaration never
14
+ * mentions. Kubernetes is the one substrate that escapes it: the API server
15
+ * records a field manager per field (`metadata.managedFields`), so a foreign
16
+ * write is a fact about the object rather than a rule somebody maintains.
17
+ * `lexicons/gcp/src/deep-observe.ts` says why nobody else can do that — "a REST
18
+ * payload carries no field ownership" — and answers with a static per-kind
19
+ * table instead.
20
+ *
21
+ * The declaration is the table they are missing. A `ResourceDeclarable`'s
22
+ * `props` are exactly the fields chant set, they are available on every
23
+ * substrate, and they come from the same build that produced the entity.
24
+ * Nothing has to come back from the provider.
25
+ *
26
+ * ## The grammar is the diff's grammar
27
+ *
28
+ * A claim is a set of property paths in the form `flattenDeepProperties`
29
+ * produces: `spec.replicas`, `Tags[#env].Value`, `ingress[0].fromPort`. Same
30
+ * hooks, same normalization, same flattening — so a path in the claim and a
31
+ * path in the diff are the same string or they are different fields. Deriving
32
+ * the claim any other way (walking raw props, say) would give a set that agrees
33
+ * with the diff for most trees and disagrees for exactly the ones the hooks
34
+ * were written for.
35
+ *
36
+ * ## Membership is exact, deliberately
37
+ *
38
+ * A claimed path is matched exactly, never by its index-erased pattern
39
+ * (`Tags[].Value`). The pattern is the right test for
40
+ * {@link import("./deep-observation.js").DeepNode.counterpart}, which asks a
41
+ * shape question ("did source declare tag values at all") before array order is
42
+ * canonical. Classification asks a value question, and it pairs a declared
43
+ * value with a live one at the same path. A pattern match would answer
44
+ * "declared" for a path that has no declared value to compare against, which is
45
+ * neither of the two declared classifications and would quietly become a third
46
+ * meaning of "drift".
47
+ *
48
+ * ## What the claim does not decide
49
+ *
50
+ * It does not prune. A field chant never declared still reaches the diff, still
51
+ * appears in the report, and still carries its live value — it is reported as
52
+ * unclaimed rather than dropped, because chant #1191 already lost a
53
+ * console-added label by pruning what it could not attribute. What the claim
54
+ * changes is the verdict: unclaimed is not drift, and drift is the only thing
55
+ * that may become an update.
56
+ */
57
+ import { deepValueEqual, flattenDeepProperties, normalizeDeepProperties, } from "./deep-observation.js";
58
+ /** An empty claim — a declaration with no props, and the safe default. */
59
+ export const NO_CLAIMED_FIELDS = { paths: new Set() };
60
+ /**
61
+ * Build a claim from an already-normalized declared property tree.
62
+ *
63
+ * `options` must be the same {@link FlattenDeepOptions} the diff flattens the
64
+ * declared side with, or the two disagree about keyed list segments.
65
+ */
66
+ export function claimedFieldsOfTree(declared, options) {
67
+ const flat = flattenDeepProperties(declared, {
68
+ entityType: options.entityType,
69
+ side: "declared",
70
+ ...(options.hooks ? { hooks: options.hooks } : {}),
71
+ });
72
+ return { paths: new Set(flat.keys()) };
73
+ }
74
+ /**
75
+ * Build a claim straight from a declaration's raw `props` — the entry point for
76
+ * a consumer that has an entity and no diff.
77
+ *
78
+ * Normalizes with the lexicon's own hooks first, exactly as the diff does, so
79
+ * pruned and masked paths land the same way on both routes. `livePaths` is the
80
+ * counterpart set (`deepPathSet` over the live tree) where the caller has one:
81
+ * without it the pass runs one-sided and any hook gated on
82
+ * {@link import("./deep-observation.js").DeepNode.counterpart} sees `"unknown"`,
83
+ * which is the honest answer and prunes nothing default-related.
84
+ */
85
+ export function claimedFieldsOfProps(props, options) {
86
+ const normalized = normalizeDeepProperties(props, {
87
+ entityType: options.entityType,
88
+ side: "declared",
89
+ ...(options.hooks ? { hooks: options.hooks } : {}),
90
+ ...(options.livePaths ? { counterpartPaths: options.livePaths } : {}),
91
+ });
92
+ return claimedFieldsOfTree(normalized, options);
93
+ }
94
+ /** True when this declaration set the property at `path`. */
95
+ export function isClaimed(claimed, path) {
96
+ return claimed !== undefined && claimed.paths.has(path);
97
+ }
98
+ /**
99
+ * The claim as a sorted array — the wire form, for
100
+ * {@link import("./deep-observation.js").DeepResourceObservation.claimedFields}
101
+ * and for anything serializing a result to JSON.
102
+ */
103
+ export function claimedFieldPaths(claimed) {
104
+ return [...claimed.paths].sort();
105
+ }
106
+ /** Rebuild a claim from its wire form. */
107
+ export function claimedFieldsFromPaths(paths) {
108
+ return { paths: new Set(paths) };
109
+ }
110
+ /**
111
+ * Classify one live value against the claim.
112
+ *
113
+ * `declaredValue` is only read when the path is claimed; pass whatever the
114
+ * declared tree holds there (including `undefined`, which is a legal declared
115
+ * value on a claimed path only in the sense that the flattener never emits it).
116
+ */
117
+ export function classifyLiveField(input) {
118
+ if (!isClaimed(input.claimed, input.path))
119
+ return "undeclared";
120
+ return deepValueEqual(input.declaredValue, input.liveValue) ? "declared-equal" : "declared-changed";
121
+ }
122
+ /**
123
+ * Who holds an undeclared live field, and which source said so.
124
+ *
125
+ * The manager wins where the substrate records one: "owned by `hpa-controller`"
126
+ * and "chant never set it" are the same verdict with very different amounts of
127
+ * information in them, and an operator can act on the first. The claim is the
128
+ * fallback, and it answers on every substrate.
129
+ */
130
+ export function heldBy(fieldOwners, path) {
131
+ const manager = fieldOwners?.[path];
132
+ if (manager)
133
+ return { holder: manager, source: "field-manager" };
134
+ return { source: "claimed-fields" };
135
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * The one place chant assembles `build()`'s options for a project directory.
3
+ *
4
+ * chant #2002 — `chant build` (./commands/build.ts) and the `policyGate` Op
5
+ * step (../lint/policy.ts's `evaluateProjectPolicies`) both build the same
6
+ * directory, and each used to assemble that option object itself. The two lists
7
+ * drifted to nine options against two: the gate built with fold off (the path
8
+ * `chant build` retired as its default in #1134), without the project's config
9
+ * (so serializers lost their lexicon-scoped dialect settings and a policy
10
+ * reading `ctx.docs` inspected different documents), and without `buildRoots`
11
+ * (so config-declared roots contributed no entities at all). A gate can only
12
+ * decide on a build `chant build` would produce if the two are assembled from
13
+ * one place, so they are.
14
+ *
15
+ * Two functions rather than one because the *modes* are needed earlier than the
16
+ * rest: `chant build` arms sandboxed policy execution from the resolved
17
+ * `sandbox` before it loads any policy module, which happens before build-time
18
+ * parameters and the ownership marker exist. {@link resolveBuildModes} is that
19
+ * early half; {@link resolveProjectBuildOptions} takes its result and assembles
20
+ * everything `build()` is given.
21
+ */
22
+ import { resolveFoldEnabled, resolveSandboxEnabled } from "../config.js";
23
+ import { collectBuildRootContributors, resolveLexiconVersions } from "./plugins.js";
24
+ /**
25
+ * Resolve this build's execution modes: an explicit CLI flag wins over
26
+ * `chant.config.ts`'s `build.fold`/`build.sandbox`, which wins over the default
27
+ * (fold on, sandbox off). Callers with no flags to offer (the `policyGate` step)
28
+ * pass no overrides and get the project's own answer.
29
+ */
30
+ export function resolveBuildModes(config, overrides) {
31
+ return {
32
+ fold: resolveFoldEnabled(config, overrides?.fold),
33
+ sandbox: resolveSandboxEnabled(config, overrides?.sandbox),
34
+ };
35
+ }
36
+ /**
37
+ * Assemble the option object `build()` takes for a project directory.
38
+ *
39
+ * Every option here is derived from the project (its config, its plugins, its
40
+ * resolved parameters) rather than from the command that asked, so two callers
41
+ * handing in the same project get byte-identical builds. A new option belongs
42
+ * in this function, never at a call site.
43
+ */
44
+ export function resolveProjectBuildOptions(input) {
45
+ const { config, configDir, plugins, modes, ownership, buildParams, telemetry } = input;
46
+ // #1039 — each loaded plugin's registered intrinsics (e.g. AWS's `Sub`), so
47
+ // a file using a registered intrinsic tagged template folds instead of
48
+ // unconditionally falling back to run. `intrinsics` is an optional plugin
49
+ // extension, hence the guard.
50
+ const intrinsics = plugins?.flatMap((plugin) => plugin.intrinsics?.() ?? []) ?? [];
51
+ // #1063 — the same loaded plugins, by NAME, are this build's allowlist for
52
+ // following a bare import specifier into a lexicon package (so `Azure`,
53
+ // `GCP`, `S3Actions`, `CI` fold as values).
54
+ const lexicons = plugins?.map((plugin) => plugin.name) ?? [];
55
+ return {
56
+ ownership,
57
+ ...(telemetry ? { telemetry } : {}),
58
+ config: config,
59
+ fold: modes.fold,
60
+ sandbox: modes.sandbox,
61
+ intrinsics,
62
+ lexicons,
63
+ // chant #1442 — which lexicon VERSION interpreted each declaration.
64
+ lexiconVersions: resolveLexiconVersions(lexicons),
65
+ buildParams,
66
+ // #1548 piece 3 — config-declared build roots (kustomize dirs, committed
67
+ // ciphertext), rendered into entities by the owning lexicon's hook.
68
+ buildRoots: collectBuildRootContributors(plugins, config, configDir),
69
+ };
70
+ }