@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,204 @@
1
+ /**
2
+ * Boundary bridging for the strangler-fig carve (#197) — the centerpiece.
3
+ *
4
+ * Carving a resource cuts edges. This generates the edits to the Terraform you
5
+ * LEAVE BEHIND so its plan stays valid once the resource is chant-owned:
6
+ *
7
+ * - inbound edge → the survivor loses its reference to the carved resource.
8
+ * Bridge: add a `data` source for the (now chant-managed) resource and
9
+ * rewrite the survivor's `type.name.attr` references to `data.type.name.attr`.
10
+ * The provider's data-source shape (`data-source-shape.ts`, #2034) decides
11
+ * both halves — the data type and body, and the attribute path survivors
12
+ * read through, which need not be the resource's own.
13
+ * Required immediately, or `terraform plan` errors on the dangling ref.
14
+ * An `output` block reading the carved resource is such a survivor (#1638):
15
+ * same data source, same textual rewrite, applied to the output's value.
16
+ *
17
+ * - outbound edge → the carved resource read a value from a survivor. That
18
+ * value must enter chant from outside synthesis, as a deploy-time input.
19
+ * Deferred until apply; here we only record the provenance.
20
+ *
21
+ * Pure text transform over the original `.tf` content — no wasm, no shell, no
22
+ * mutation. The command layer writes the results and (optionally) diffs them
23
+ * into a git-applyable patch. A carve never destroys or recreates; the runbook
24
+ * is reversible via `terraform import`.
25
+ */
26
+ import { deferredParamName } from "./carve.js";
27
+ import { rewriteReadPath } from "./data-source-shape.js";
28
+ import { exciseResourceBlocks } from "./excise.js";
29
+ /**
30
+ * `aws_s3_bucket.assets` → a regex matching that reference head plus the
31
+ * attribute path that follows it, not already `data.`-prefixed. The path is
32
+ * captured because the data source may expose it under a different attribute:
33
+ * a survivor reading `kubernetes_manifest.app_config.manifest.data.x` has to
34
+ * come out as `data.kubernetes_resource.app_config.object.data.x`.
35
+ */
36
+ function referenceRegex(address) {
37
+ const escaped = address.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
38
+ // (?<!data\.) — do not double-prefix an existing data source reference.
39
+ return new RegExp(`(?<!data\\.)\\b${escaped}\\b((?:\\.[A-Za-z_][A-Za-z0-9_-]*)*)`, "g");
40
+ }
41
+ const IDENTIFY_TODO = " # TODO: identify the resource (its name/id was interpolated in the source)";
42
+ /** `terraform fmt` aligns the `=` of consecutive assignments; so do we. */
43
+ function alignedAssignments(pairs, indent) {
44
+ const width = Math.max(...pairs.map(([key]) => key.length));
45
+ return pairs.map(([key, value]) => `${indent}${key.padEnd(width)} = ${JSON.stringify(value)}`);
46
+ }
47
+ /** Resolved `[name, value]` pairs, or null when a required field has no literal. */
48
+ function resolveFields(fields, values) {
49
+ const pairs = [];
50
+ for (const field of fields) {
51
+ const value = values[field.from];
52
+ if (value === undefined) {
53
+ if (field.required)
54
+ return null;
55
+ continue;
56
+ }
57
+ pairs.push([field.name, value]);
58
+ }
59
+ return pairs;
60
+ }
61
+ /**
62
+ * The `data` block standing in for the carved resource. A shape whose required
63
+ * arguments the carved block did not supply as literals renders the TODO body
64
+ * instead of a block `terraform validate` would reject.
65
+ */
66
+ function dataSourceHcl(shape, name, values) {
67
+ const body = [];
68
+ const args = resolveFields(shape.args ?? [], values);
69
+ if (args === null)
70
+ return todoBlock(shape.type, name);
71
+ if (args.length)
72
+ body.push(...alignedAssignments(args, " "));
73
+ for (const block of shape.blocks ?? []) {
74
+ const fields = resolveFields(block.fields, values);
75
+ if (fields === null)
76
+ return todoBlock(shape.type, name);
77
+ if (!fields.length)
78
+ continue;
79
+ if (body.length)
80
+ body.push("");
81
+ body.push(` ${block.name} {`, ...alignedAssignments(fields, " "), " }");
82
+ }
83
+ if (!body.length)
84
+ body.push(IDENTIFY_TODO);
85
+ return `data ${JSON.stringify(shape.type)} ${JSON.stringify(name)} {\n${body.join("\n")}\n}`;
86
+ }
87
+ function todoBlock(type, name) {
88
+ return `data ${JSON.stringify(type)} ${JSON.stringify(name)} {\n${IDENTIFY_TODO}\n}`;
89
+ }
90
+ /**
91
+ * Build the bridge plan for a carve.
92
+ *
93
+ * @param report the boundary report (from `boundaryReport`)
94
+ * @param files every `.tf` file in the estate, as { path, content }
95
+ * @param readBacks how each carved address is read back as a data source, and
96
+ * the literals to render it with (`dataSourceShapeOf` +
97
+ * the graph node's `dataSourceValues`)
98
+ */
99
+ export function generateBridge(report, files, readBacks) {
100
+ // Carved resources that something still depends on need a data source.
101
+ const carvedWithInbound = new Map();
102
+ for (const e of report.inbound) {
103
+ const [type, ...rest] = e.carved.split(".");
104
+ carvedWithInbound.set(e.carved, { type, name: rest.join("."), readBack: readBacks.get(e.carved) ?? {} });
105
+ }
106
+ const dataSources = [...carvedWithInbound.entries()].map(([address, { type, name, readBack }]) => {
107
+ const shape = readBack.shape ?? { type };
108
+ return { address, type: shape.type, name, hcl: dataSourceHcl(shape, name, readBack.values ?? {}) };
109
+ });
110
+ // Excise the carve set's own blocks (#998): after `terraform state rm`, a
111
+ // block left behind would re-create the resource on the next apply. Then
112
+ // rewrite every remaining survivor reference into a data ref.
113
+ const exciseTargets = report.carveSet
114
+ .filter((m) => !m.address.startsWith("module."))
115
+ .map((m) => {
116
+ const [type, ...rest] = m.address.split(".");
117
+ return { address: m.address, type, name: rest.join(".") };
118
+ });
119
+ const rewrites = files.map(({ path, content }) => {
120
+ const excision = exciseResourceBlocks(content, exciseTargets);
121
+ let rewritten = excision.content;
122
+ for (const [address, { type, name, readBack }] of carvedWithInbound) {
123
+ const shape = readBack.shape;
124
+ const head = `data.${shape?.type ?? type}.${name}`;
125
+ rewritten = rewritten.replace(referenceRegex(address), (_match, path) => head + rewriteReadPath(shape, path));
126
+ }
127
+ return { path, original: content, rewritten, changed: rewritten !== content, excised: excision.excised };
128
+ });
129
+ const excised = rewrites.flatMap((r) => r.excised);
130
+ const deferredInputs = report.outbound.map((e) => {
131
+ const params = (e.via ?? []).map(deferredParamName);
132
+ const wiring = params.length
133
+ ? `emit declares it as build param ${params.map((p) => `\`${p}\``).join(", ")} — override with --param at build`
134
+ : "supply this as a deploy-time input to the carved component at apply";
135
+ return {
136
+ survivor: e.survivor,
137
+ carved: e.carved,
138
+ attrs: e.attrs,
139
+ params,
140
+ note: `${e.carved} reads ${e.survivor}.${e.attrs.join(", ")} — ${wiring}.`,
141
+ };
142
+ });
143
+ const outputRewrites = report.inbound
144
+ .filter((e) => e.bridge === "tf-output-rewrite")
145
+ .map((e) => e.survivor)
146
+ .sort();
147
+ return {
148
+ target: report.target,
149
+ dataSources,
150
+ rewrites,
151
+ deferredInputs,
152
+ excised,
153
+ outputRewrites,
154
+ runbook: buildRunbook(report, dataSources, deferredInputs, excised, outputRewrites),
155
+ };
156
+ }
157
+ /** The reversible, observe-first handoff runbook (#197). */
158
+ function buildRunbook(report, dataSources, deferred, excised, outputRewrites) {
159
+ const carvedAddrs = report.carveSet.map((m) => m.address);
160
+ const L = [];
161
+ L.push(`# Carve-out: ${report.target} → chant [observe-first, reversible]`);
162
+ L.push("");
163
+ L.push(`Peelability ${report.peelability}. Carves ${carvedAddrs.length} Terraform resource(s) into chant, leaving the live resource untouched.`);
164
+ L.push("");
165
+ L.push("## 1. Review the emitted chant source");
166
+ L.push(" (produced by `chant carve emit` — confirm it builds to a spec-true template)");
167
+ L.push("");
168
+ L.push("## 2. Stop Terraform managing the resource (does NOT destroy it)");
169
+ L.push(` terraform state rm ${carvedAddrs.join(" ")}`);
170
+ L.push("");
171
+ L.push("## 3. Confirm no destroy, then patch the survivors");
172
+ L.push(" terraform plan # expect 0 to destroy; refs to the carved resource now error");
173
+ if (excised.length) {
174
+ L.push(` # the generated bridge patch removes the carved block(s): ${excised.join(", ")}`);
175
+ L.push(" # (without this, the next apply would re-create what state rm released)");
176
+ }
177
+ if (dataSources.length) {
178
+ L.push(" # it also adds these data sources and rewires references:");
179
+ for (const ds of dataSources)
180
+ L.push(` # data.${ds.type}.${ds.name} (for ${ds.address})`);
181
+ }
182
+ else if (!excised.length) {
183
+ L.push(" # no inbound edges — no survivor patch needed.");
184
+ }
185
+ if (outputRewrites.length) {
186
+ L.push(` # and repoints these output block(s) at the data source: ${outputRewrites.join(", ")}`);
187
+ }
188
+ L.push(" terraform plan # expect: in-place updates to the survivors only");
189
+ L.push(" terraform apply");
190
+ L.push("");
191
+ L.push("## 4. Adopt the live resource into chant (now an orphan)");
192
+ L.push(" chant carve emit --from <tf-dir> --select " + report.target + " --env <env> # already done if you ran emit");
193
+ L.push(" # then apply the ownership marker so chant owns it (carve apply, next step)");
194
+ if (deferred.length) {
195
+ L.push("");
196
+ L.push("## Deferred deploy-time inputs (wire these when you turn the dial to apply)");
197
+ for (const d of deferred)
198
+ L.push(` - ${d.note}`);
199
+ }
200
+ L.push("");
201
+ L.push("## Rollback (any time before apply-graduation)");
202
+ L.push(` terraform import ${report.target} <physical-id> # back under Terraform`);
203
+ return L.join("\n");
204
+ }
@@ -0,0 +1,155 @@
1
+ /**
2
+ * The carve provider seam (#2016).
3
+ *
4
+ * `carve advise|emit|bridge` used to reach into the AWS carve table directly:
5
+ * the tier map derived from it, the emit gate was `awsCarveType(t) !== undefined`,
6
+ * the adopter called `applyAwsMapper`, and the emitted project's lexicon was a
7
+ * constant. A second provider — Kubernetes emit (#999), GCP (#2017) — had
8
+ * nowhere to land except a parallel path beside the AWS one.
9
+ *
10
+ * A provider owns one or more Terraform type prefixes and answers everything
11
+ * the carve commands ask about the types under them: how each ranks against a
12
+ * native spec, which HCL attribute carries the physical name, which
13
+ * sub-resources fold into a parent, which types emit can produce source for,
14
+ * and how to adopt one from `.tfstate`.
15
+ *
16
+ * ── Why the registry lives in core, not behind a `LexiconPlugin` capability ──
17
+ *
18
+ * `carve advise` runs against a Terraform directory that is not a chant project:
19
+ * there is no `chant.config.ts` naming lexicons, so there is nothing to load
20
+ * plugins from, and `carve emit --state` is deliberately offline (see the
21
+ * handler). Behind a plugin capability both would have to load plugins to learn
22
+ * that a type ranks tier 1. Providers are also Terraform-provider knowledge
23
+ * (`terraform-provider-aws` attribute names), which belongs beside the HCL
24
+ * parser rather than inside a lexicon.
25
+ *
26
+ * `registerCarveProvider` is exported, so a plugin that wants to contribute a
27
+ * provider at runtime still can — the seam does not foreclose it, it just does
28
+ * not require plugin loading for the paths that run without one.
29
+ */
30
+ import { identityAttrShape } from "./data-source-shape.js";
31
+ import { BUILTIN_CARVE_PROVIDERS } from "./providers/index.js";
32
+ /**
33
+ * A provider declaring emit types without an adopter would accept a type on
34
+ * `--env` and fail it on `--state`, the advise↔emit cliff #2015 closed.
35
+ */
36
+ function validate(provider) {
37
+ if (provider.emitTypes?.length && !provider.adopt) {
38
+ throw new Error(`Carve provider "${provider.name}" declares emitTypes but no adopt() — the --state path would refuse what --env accepts.`);
39
+ }
40
+ if (!provider.tfTypePrefixes.length) {
41
+ throw new Error(`Carve provider "${provider.name}" claims no Terraform type prefix, so no type would ever resolve to it.`);
42
+ }
43
+ }
44
+ const providers = [...BUILTIN_CARVE_PROVIDERS];
45
+ for (const p of providers)
46
+ validate(p);
47
+ /** Bumped on every registry mutation, so the derived indexes rebuild. */
48
+ let revision = 0;
49
+ /**
50
+ * Register a carve provider. Returns a function that removes it again, so a
51
+ * test (or a plugin unloading) leaves the registry as it found it.
52
+ */
53
+ export function registerCarveProvider(provider) {
54
+ validate(provider);
55
+ const existing = providers.findIndex((p) => p.name === provider.name);
56
+ if (existing >= 0)
57
+ providers.splice(existing, 1);
58
+ providers.push(provider);
59
+ revision++;
60
+ return () => {
61
+ const at = providers.indexOf(provider);
62
+ if (at < 0)
63
+ return;
64
+ providers.splice(at, 1);
65
+ revision++;
66
+ };
67
+ }
68
+ /** Every registered provider, in registration order. */
69
+ export function carveProviders() {
70
+ return providers;
71
+ }
72
+ let cached = null;
73
+ function index() {
74
+ if (cached && cached.revision === revision)
75
+ return cached.index;
76
+ const built = {
77
+ prefixes: [],
78
+ tiers: {},
79
+ identityAttrs: {},
80
+ dataSourceShapes: {},
81
+ foldsInto: {},
82
+ emitters: new Map(),
83
+ };
84
+ for (const provider of providers) {
85
+ for (const prefix of provider.tfTypePrefixes)
86
+ built.prefixes.push({ prefix, provider });
87
+ Object.assign(built.tiers, provider.tiers);
88
+ if (provider.identityAttrs)
89
+ Object.assign(built.identityAttrs, provider.identityAttrs);
90
+ if (provider.dataSourceShapes)
91
+ Object.assign(built.dataSourceShapes, provider.dataSourceShapes);
92
+ if (provider.foldsInto)
93
+ Object.assign(built.foldsInto, provider.foldsInto);
94
+ for (const tfType of provider.emitTypes ?? [])
95
+ built.emitters.set(tfType, provider);
96
+ }
97
+ built.prefixes.sort((a, b) => b.prefix.length - a.prefix.length);
98
+ cached = { revision, index: built };
99
+ return built;
100
+ }
101
+ /** The provider owning this Terraform type, by longest prefix match. */
102
+ export function resolveCarveProvider(tfType) {
103
+ return index().prefixes.find((p) => tfType.startsWith(p.prefix))?.provider;
104
+ }
105
+ /**
106
+ * The provider that can emit chant source for this Terraform type. Narrower
107
+ * than {@link resolveCarveProvider}: a provider owns every type under its
108
+ * prefix for advise, and only the ones on its `emitTypes` list for emit.
109
+ */
110
+ export function resolveEmitProvider(tfType) {
111
+ return index().emitters.get(tfType);
112
+ }
113
+ /** Every Terraform type any registered provider can emit, sorted, for user-facing hints. */
114
+ export function carveEmitTypes() {
115
+ return [...index().emitters.keys()].sort();
116
+ }
117
+ /** The lexicons emit can adopt into, sorted — what the CLI loads plugins for. */
118
+ export function carveEmitLexicons() {
119
+ return [...new Set([...index().emitters.values()].map((p) => p.lexicon))].sort();
120
+ }
121
+ /** Terraform resource type → native tier, merged over every provider. Read-only: it is the cached index. */
122
+ export function carveTierMap() {
123
+ return index().tiers;
124
+ }
125
+ /** The HCL attribute carrying this type's physical name, if its provider declares one. */
126
+ export function carveIdentityAttr(tfType) {
127
+ return index().identityAttrs[tfType];
128
+ }
129
+ /** The parent Terraform type this sub-resource folds into, if any. */
130
+ export function carveFoldParent(tfType) {
131
+ return index().foldsInto[tfType];
132
+ }
133
+ /**
134
+ * How `carve bridge` reads this type back as a `data` source (#2034), or
135
+ * undefined when it cannot be read back at all — which is what makes
136
+ * `canBridge` refuse it.
137
+ *
138
+ * Resolution order:
139
+ * 1. a shape the owning provider declared for the type;
140
+ * 2. otherwise the shape a plain identity attribute implies (same type, one
141
+ * required argument) — the path every AWS and google type takes;
142
+ * 3. otherwise undefined, when the identity attribute is a dotted path into
143
+ * nested values and no provider declared a shape for it;
144
+ * 4. and for a type with no identity attribute at all, the bare data-source
145
+ * type: the bridge still emits a block, with a TODO for the body.
146
+ */
147
+ export function carveDataSourceShape(tfType) {
148
+ const declared = index().dataSourceShapes[tfType];
149
+ if (declared)
150
+ return declared;
151
+ const attr = index().identityAttrs[tfType];
152
+ if (attr === undefined)
153
+ return { type: tfType };
154
+ return identityAttrShape(tfType, attr);
155
+ }
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Carve-out boundary analysis for the strangler-fig emit path (#197).
3
+ *
4
+ * The advisor (#214) ranks *what* is cheap to carve. This is the next step:
5
+ * given a chosen resource, work out the boundary — every dependency edge the
6
+ * carve would cut — so the surviving Terraform can be patched and the resource
7
+ * handed off without destroying it.
8
+ *
9
+ * Pure analysis over the graph, like the scorer. Emitting the chant source
10
+ * (via live import) and generating the TF patches live in the command/bridge
11
+ * layers; this module just classifies the boundary.
12
+ */
13
+ import { inboundEdges, outboundEdges } from "./graph.js";
14
+ import { foldParentOf, resolveTier } from "./tier-map.js";
15
+ import { scoreEstate } from "./score.js";
16
+ /**
17
+ * The carve set for a selected address: the node itself plus any sub-resources
18
+ * that fold into it (same name, a `foldParentOf` child type whose parent is the
19
+ * selection). Those are carried along and inlined, not left behind.
20
+ */
21
+ export function resolveCarveSet(graph, target) {
22
+ const byAddress = new Map(graph.nodes.map((n) => [n.address, n]));
23
+ const selected = byAddress.get(target);
24
+ if (!selected)
25
+ return [];
26
+ const members = [{ address: selected.address, type: selected.type }];
27
+ if (selected.kind === "resource" && selected.type) {
28
+ for (const node of graph.nodes) {
29
+ if (node.kind !== "resource" || !node.type)
30
+ continue;
31
+ const parentType = foldParentOf(node.type);
32
+ if (parentType === selected.type && node.name === selected.name) {
33
+ members.push({ address: node.address, type: node.type, foldedInto: selected.address });
34
+ }
35
+ }
36
+ }
37
+ return members;
38
+ }
39
+ /** The bridge patch an inbound cut needs, per source. */
40
+ function inboundBridge(dialect, fromOutput) {
41
+ if (dialect === "cdk")
42
+ return fromOutput ? "cfn-output-rewrite" : "cdk-import";
43
+ return fromOutput ? "tf-output-rewrite" : "tf-data-source";
44
+ }
45
+ /**
46
+ * Classify the boundary of carving `target`: the inbound edges that need an
47
+ * immediate data-source patch, and the outbound edges that become deferred
48
+ * deploy-time inputs. Edges internal to the carve set (e.g. a folded
49
+ * sub-resource pointing at its parent) are not boundary work.
50
+ */
51
+ export function boundaryReport(graph, target, opts = {}) {
52
+ const dialect = opts.dialect ?? "terraform";
53
+ const carveSet = resolveCarveSet(graph, target);
54
+ if (carveSet.length === 0)
55
+ return null;
56
+ const inSet = new Set(carveSet.map((m) => m.address));
57
+ const inbound = [];
58
+ const outbound = [];
59
+ for (const member of carveSet) {
60
+ for (const e of inboundEdges(graph, member.address)) {
61
+ if (inSet.has(e.from))
62
+ continue; // internal edge
63
+ inbound.push({
64
+ direction: "inbound",
65
+ survivor: e.from,
66
+ carved: e.to,
67
+ attrs: e.attrs,
68
+ via: e.via,
69
+ bridge: inboundBridge(dialect, e.fromKind === "output"),
70
+ required: "immediately",
71
+ ...(e.crossStack ? { crossStack: true } : {}),
72
+ });
73
+ }
74
+ for (const e of outboundEdges(graph, member.address)) {
75
+ if (inSet.has(e.to))
76
+ continue; // internal edge
77
+ outbound.push({
78
+ direction: "outbound",
79
+ survivor: e.to,
80
+ carved: e.from,
81
+ attrs: e.attrs,
82
+ via: e.via,
83
+ bridge: "deferred-input",
84
+ required: "at-apply",
85
+ ...(e.crossStack ? { crossStack: true } : {}),
86
+ });
87
+ }
88
+ }
89
+ const score = scoreEstate(graph, opts.score).find((r) => r.address === target);
90
+ const diagnostics = [];
91
+ const tierOf = opts.score?.tierOf ?? resolveTier;
92
+ if (carveSet[0].type &&
93
+ tierOf(carveSet[0].type) === null &&
94
+ graph.nodes.find((n) => n.address === target)?.kind === "resource") {
95
+ diagnostics.push(`No known native mapping for ${carveSet[0].type} — emit will have no target type.`);
96
+ }
97
+ return {
98
+ target,
99
+ carveSet,
100
+ peelability: score?.score ?? 0,
101
+ inbound: dedupeEdges(inbound),
102
+ outbound: dedupeEdges(outbound),
103
+ reversible: true,
104
+ diagnostics,
105
+ };
106
+ }
107
+ /**
108
+ * The build-parameter name a deferred input's carrying attribute becomes on
109
+ * emit (#998) — shared so bridge notes and emitted `buildParams` agree.
110
+ */
111
+ export function deferredParamName(tfAttr) {
112
+ return tfAttr.replace(/\W+/g, "_");
113
+ }
114
+ /**
115
+ * Collapse duplicate edges (same survivor/carved pair), merging attrs.
116
+ *
117
+ * The map key below joins the two addresses with U+001F (unit separator).
118
+ * A Terraform address is built from HCL identifiers plus `.`, `[`, `]`, `"`
119
+ * and `-`; it cannot contain a C0 control character, so U+001F can never
120
+ * collide with an address component. Keep it that way — this key is never
121
+ * serialized, so a plain, non-printing separator is fine, but it must stay
122
+ * a character no address can produce.
123
+ */
124
+ export function dedupeEdges(edges) {
125
+ const byKey = new Map();
126
+ for (const e of edges) {
127
+ const key = `${e.survivor}${e.carved}`;
128
+ const prev = byKey.get(key);
129
+ if (prev) {
130
+ prev.attrs = [...new Set([...prev.attrs, ...e.attrs])].sort();
131
+ prev.via = [...new Set([...prev.via, ...e.via])].sort();
132
+ }
133
+ else {
134
+ byKey.set(key, { ...e, attrs: [...e.attrs], via: [...e.via] });
135
+ }
136
+ }
137
+ return [...byKey.values()].sort((a, b) => (a.survivor < b.survivor ? -1 : a.survivor > b.survivor ? 1 : 0));
138
+ }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * How a carved Terraform type is read back as a `data` source (#2034).
3
+ *
4
+ * `carve bridge` replaces a carved resource with a data source the survivors
5
+ * read instead. Until now a carve provider said only which attribute carries
6
+ * the physical name (`identityAttrs`), and the bridge assumed the data source
7
+ * was the same type as the resource, with that one attribute in its body:
8
+ *
9
+ * data "aws_s3_bucket" "assets" { bucket = "myapp-assets-prod" }
10
+ *
11
+ * That assumption holds for AWS and google, and breaks for Kubernetes twice
12
+ * over. `kubernetes_manifest` names itself by `manifest.metadata.name`, a path
13
+ * into a nested value that a flat `attr = value` body cannot express; and the
14
+ * kubernetes provider ships no `kubernetes_manifest` data source at all
15
+ * (verified against hashicorp/kubernetes v3.2.1: 27 data sources, none a
16
+ * manifest). Its generic read is `data "kubernetes_resource"`, with a
17
+ * different type, different arguments, a nested `metadata` block, and its own
18
+ * attribute path for survivors to read through.
19
+ *
20
+ * So a provider contributes a *shape*: the data-source type, where each
21
+ * argument comes from in the carved body, and how a survivor's attribute path
22
+ * translates. An identity attribute is one instance of that shape
23
+ * ({@link identityAttrShape}), so nothing that bridges today changes.
24
+ */
25
+ /**
26
+ * The shape a plain identity attribute implies: the same type as the resource,
27
+ * one required argument, no path translation. Returns undefined for a dotted
28
+ * attribute, which is a path into nested values and needs a declared shape.
29
+ */
30
+ export function identityAttrShape(tfType, attr) {
31
+ if (attr.includes("."))
32
+ return undefined;
33
+ return { type: tfType, args: [{ name: attr, from: attr, required: true }] };
34
+ }
35
+ /** Every source path the shape reads, for the graph to resolve out of the carved block. */
36
+ export function shapeSourcePaths(shape) {
37
+ const paths = (shape.args ?? []).map((f) => f.from);
38
+ for (const block of shape.blocks ?? [])
39
+ for (const f of block.fields)
40
+ paths.push(f.from);
41
+ return [...new Set(paths)];
42
+ }
43
+ /**
44
+ * Translate a survivor's attribute path onto the data source. `path` is the
45
+ * text after the address, leading dot included (`.manifest.data.log_level`) or
46
+ * empty. Only the first segment is mapped: everything under it is the object's
47
+ * own structure, which the data source reproduces.
48
+ */
49
+ export function rewriteReadPath(shape, path) {
50
+ if (!path || !shape?.readAttrs)
51
+ return path;
52
+ const [head, ...rest] = path.slice(1).split(".");
53
+ const mapped = shape.readAttrs[head];
54
+ if (mapped === undefined)
55
+ return path;
56
+ return `.${[mapped, ...rest].join(".")}`;
57
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Source rendering shared by constructor-shaped carve providers (#2016).
3
+ *
4
+ * A provider that adopts into a typed chant constructor call — aws today, gcp
5
+ * next (#2017) — renders the same literal: an import, an exported `new Ctor({
6
+ * ...props })`, and a reference comment carrying whatever the mapping could not
7
+ * place. Only the lexicon import path and the property mapping differ, so the
8
+ * rendering lives here rather than being copied per provider.
9
+ *
10
+ * A provider whose native shape is not a constructor call (a Kubernetes
11
+ * manifest, #999) renders its own source and does not use this.
12
+ */
13
+ /** The core subpath the emitted source reads build parameters from. */
14
+ export const PARAMS_IMPORT = "@intentius/chant/params";
15
+ /** Marker for a prop whose value is a `params.<name>` reference, not a literal. */
16
+ export class ParamRef {
17
+ constructor(name, type) {
18
+ this.name = name;
19
+ this.type = type;
20
+ }
21
+ }
22
+ /** Render a JS object literal with stable key order and given indent. */
23
+ export function renderObject(obj, indent) {
24
+ const keys = Object.keys(obj);
25
+ if (keys.length === 0)
26
+ return "{}";
27
+ const pad = " ".repeat(indent);
28
+ const body = keys
29
+ .map((k) => `${pad}${k}: ${renderValue(obj[k])},`)
30
+ .join("\n");
31
+ return `{\n${body}\n}`;
32
+ }
33
+ /** A prop value: a `params.<name>` reference (cast keeps the project tsc-clean) or a literal. */
34
+ export function renderValue(value) {
35
+ return value instanceof ParamRef ? `params.${value.name} as ${value.type}` : JSON.stringify(value);
36
+ }