@intentius/chant 0.124.13 → 0.124.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (991) hide show
  1. package/bin/chant +11 -0
  2. package/dist/agents/checks.js +326 -0
  3. package/dist/agents/discover.js +885 -0
  4. package/dist/agents/importer.js +17 -0
  5. package/dist/agents/index.js +12 -0
  6. package/dist/agents/types.js +19 -0
  7. package/dist/apply.js +151 -0
  8. package/dist/attrref.js +70 -0
  9. package/dist/audit/catalog.js +350 -0
  10. package/dist/audit/core.js +252 -0
  11. package/dist/audit/discover.js +633 -0
  12. package/dist/audit/fetch.js +666 -0
  13. package/dist/audit/lineage.js +91 -0
  14. package/dist/audit/nginx.js +366 -0
  15. package/dist/audit/prior-art.js +132 -0
  16. package/dist/audit/proof.js +321 -0
  17. package/dist/audit/report-html.js +194 -0
  18. package/dist/audit/report-model.js +198 -0
  19. package/dist/audit/report.js +102 -0
  20. package/dist/audit/rules-doc.js +144 -0
  21. package/dist/audit/secrets.js +405 -0
  22. package/dist/audit/terraform-state.js +140 -0
  23. package/dist/audit/wrangler.js +262 -0
  24. package/dist/behaviour-delta.js +401 -0
  25. package/dist/behaviour-engine.js +357 -0
  26. package/dist/behaviour-graph.js +83 -0
  27. package/dist/behaviour-http.js +188 -0
  28. package/dist/behaviour-kinds.js +172 -0
  29. package/dist/behaviour-overlay.js +50 -0
  30. package/dist/behaviour-predict.js +188 -0
  31. package/dist/behaviour-request.js +194 -0
  32. package/dist/behaviour.js +1325 -0
  33. package/dist/build-params.js +108 -0
  34. package/dist/build.d.ts +6 -0
  35. package/dist/build.d.ts.map +1 -1
  36. package/dist/build.js +669 -0
  37. package/dist/builder.js +44 -0
  38. package/dist/cdk/advise.js +30 -0
  39. package/dist/cdk/assembly.js +122 -0
  40. package/dist/cdk/graph.js +444 -0
  41. package/dist/cdk/tier-map.js +64 -0
  42. package/dist/cdk/types.js +24 -0
  43. package/dist/change-set.d.ts +24 -2
  44. package/dist/change-set.d.ts.map +1 -1
  45. package/dist/change-set.js +361 -0
  46. package/dist/child-project.js +21 -0
  47. package/dist/ci-jobs.d.ts +227 -0
  48. package/dist/ci-jobs.d.ts.map +1 -0
  49. package/dist/ci-jobs.js +448 -0
  50. package/dist/claimed-fields.js +135 -0
  51. package/dist/cli/build-options.js +70 -0
  52. package/dist/cli/build-params-cli.js +139 -0
  53. package/dist/cli/command-group.js +123 -0
  54. package/dist/cli/commands/audit-agents.js +326 -0
  55. package/dist/cli/commands/audit.js +571 -0
  56. package/dist/cli/commands/build.js +920 -0
  57. package/dist/cli/commands/carve-apply.js +153 -0
  58. package/dist/cli/commands/carve-bridge.js +201 -0
  59. package/dist/cli/commands/carve-emit.js +332 -0
  60. package/dist/cli/commands/carve-status.js +119 -0
  61. package/dist/cli/commands/carve.js +204 -0
  62. package/dist/cli/commands/check-lexicon-docs.js +79 -0
  63. package/dist/cli/commands/check-lexicon-examples.js +177 -0
  64. package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
  65. package/dist/cli/commands/check-lexicon-mcp.js +82 -0
  66. package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
  67. package/dist/cli/commands/check-lexicon-plugin.js +104 -0
  68. package/dist/cli/commands/check-lexicon.js +766 -0
  69. package/dist/cli/commands/describe.js +85 -0
  70. package/dist/cli/commands/diff.js +175 -0
  71. package/dist/cli/commands/doctor.js +350 -0
  72. package/dist/cli/commands/import-agents.js +155 -0
  73. package/dist/cli/commands/import.js +670 -0
  74. package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
  75. package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
  76. package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
  77. package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
  78. package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
  79. package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
  80. package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
  81. package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
  82. package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
  83. package/dist/cli/commands/init-lexicon.js +172 -0
  84. package/dist/cli/commands/init.js +381 -0
  85. package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
  86. package/dist/cli/commands/lexicon-surface-diff.js +145 -0
  87. package/dist/cli/commands/licenses.js +125 -0
  88. package/dist/cli/commands/lint.d.ts.map +1 -1
  89. package/dist/cli/commands/lint.js +948 -0
  90. package/dist/cli/commands/list.js +63 -0
  91. package/dist/cli/commands/migrate.d.ts.map +1 -1
  92. package/dist/cli/commands/migrate.js +423 -0
  93. package/dist/cli/commands/onboard.js +403 -0
  94. package/dist/cli/commands/pinned-upgrade.js +191 -0
  95. package/dist/cli/commands/update.js +194 -0
  96. package/dist/cli/commands/vendor.js +217 -0
  97. package/dist/cli/conflict-check.js +104 -0
  98. package/dist/cli/debug.js +8 -0
  99. package/dist/cli/format.js +104 -0
  100. package/dist/cli/handlers/build.js +267 -0
  101. package/dist/cli/handlers/carve-apply.js +30 -0
  102. package/dist/cli/handlers/carve-bridge.js +28 -0
  103. package/dist/cli/handlers/carve-emit.js +50 -0
  104. package/dist/cli/handlers/carve-status.js +26 -0
  105. package/dist/cli/handlers/carve.js +40 -0
  106. package/dist/cli/handlers/change-set.js +46 -0
  107. package/dist/cli/handlers/components.js +730 -0
  108. package/dist/cli/handlers/dev.js +113 -0
  109. package/dist/cli/handlers/emulator.js +233 -0
  110. package/dist/cli/handlers/explain.js +54 -0
  111. package/dist/cli/handlers/fan-out.js +422 -0
  112. package/dist/cli/handlers/gate-resume.js +275 -0
  113. package/dist/cli/handlers/generate.js +84 -0
  114. package/dist/cli/handlers/graph.js +969 -0
  115. package/dist/cli/handlers/init.js +102 -0
  116. package/dist/cli/handlers/lifecycle.js +1727 -0
  117. package/dist/cli/handlers/lint.js +62 -0
  118. package/dist/cli/handlers/migrate.js +48 -0
  119. package/dist/cli/handlers/misc.js +391 -0
  120. package/dist/cli/handlers/operator.js +1162 -0
  121. package/dist/cli/handlers/override-approve.js +102 -0
  122. package/dist/cli/handlers/pr.js +503 -0
  123. package/dist/cli/handlers/promote.js +342 -0
  124. package/dist/cli/handlers/run-generate.js +206 -0
  125. package/dist/cli/handlers/run-wave.js +66 -0
  126. package/dist/cli/handlers/run.js +1191 -0
  127. package/dist/cli/handlers/scenario.js +325 -0
  128. package/dist/cli/handlers/search.js +924 -0
  129. package/dist/cli/handlers/serve.js +32 -0
  130. package/dist/cli/handlers/vendor.js +154 -0
  131. package/dist/cli/index.js +3 -0
  132. package/dist/cli/is-entry-point.js +23 -0
  133. package/dist/cli/lsp/capabilities.js +28 -0
  134. package/dist/cli/lsp/diagnostics.js +34 -0
  135. package/dist/cli/lsp/server.js +329 -0
  136. package/dist/cli/main.d.ts.map +1 -1
  137. package/dist/cli/main.js +2540 -0
  138. package/dist/cli/mcp/lifecycle-tools.js +80 -0
  139. package/dist/cli/mcp/op-tools.js +306 -0
  140. package/dist/cli/mcp/resource-handlers.js +258 -0
  141. package/dist/cli/mcp/resources/context.js +85 -0
  142. package/dist/cli/mcp/server.js +353 -0
  143. package/dist/cli/mcp/tools/build.js +111 -0
  144. package/dist/cli/mcp/tools/composites.js +95 -0
  145. package/dist/cli/mcp/tools/explain.js +166 -0
  146. package/dist/cli/mcp/tools/import.js +49 -0
  147. package/dist/cli/mcp/tools/lint.js +41 -0
  148. package/dist/cli/mcp/tools/scaffold.js +111 -0
  149. package/dist/cli/mcp/tools/search.js +112 -0
  150. package/dist/cli/mcp/types.js +1 -0
  151. package/dist/cli/mcp/workspace-plugins.js +91 -0
  152. package/dist/cli/mcp/workspace-tools.d.ts +1 -1
  153. package/dist/cli/mcp/workspace-tools.js +564 -0
  154. package/dist/cli/mcp-config.js +70 -0
  155. package/dist/cli/plugins.js +313 -0
  156. package/dist/cli/registry.js +23 -0
  157. package/dist/cli/reporters/stylish.js +329 -0
  158. package/dist/cli/version.js +15 -0
  159. package/dist/cli/watch.js +79 -0
  160. package/dist/codegen/bound-property-types.js +82 -0
  161. package/dist/codegen/coverage.js +119 -0
  162. package/dist/codegen/docs-file-markers.js +60 -0
  163. package/dist/codegen/docs-pages.js +115 -0
  164. package/dist/codegen/docs-rule-scanning.js +164 -0
  165. package/dist/codegen/docs-rules.js +76 -0
  166. package/dist/codegen/docs-sections.js +117 -0
  167. package/dist/codegen/docs-sidebar.js +65 -0
  168. package/dist/codegen/docs-types.js +4 -0
  169. package/dist/codegen/docs.js +356 -0
  170. package/dist/codegen/fetch.js +340 -0
  171. package/dist/codegen/generate-post-synth-barrel.js +63 -0
  172. package/dist/codegen/generate-registry.js +71 -0
  173. package/dist/codegen/generate-runtime-index.js +56 -0
  174. package/dist/codegen/generate-typescript.js +119 -0
  175. package/dist/codegen/generate.js +115 -0
  176. package/dist/codegen/json-patch.js +141 -0
  177. package/dist/codegen/json-schema-to-ts.js +344 -0
  178. package/dist/codegen/json-schema.js +246 -0
  179. package/dist/codegen/lexicon-regen.js +412 -0
  180. package/dist/codegen/naming.js +217 -0
  181. package/dist/codegen/okf-lexicon.js +245 -0
  182. package/dist/codegen/package.js +150 -0
  183. package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
  184. package/dist/codegen/pinned-upgrade.js +494 -0
  185. package/dist/codegen/registry.js +60 -0
  186. package/dist/codegen/rehype-base-url.mjs +68 -0
  187. package/dist/codegen/rolling-upgrade.js +217 -0
  188. package/dist/codegen/surface-snapshot.js +537 -0
  189. package/dist/codegen/testdata/postgres-tags.json +242 -0
  190. package/dist/codegen/topo-sort.js +36 -0
  191. package/dist/codegen/typecheck.js +115 -0
  192. package/dist/codegen/validate.js +200 -0
  193. package/dist/codegen/version-bump.js +35 -0
  194. package/dist/components/auto-release.js +143 -0
  195. package/dist/components/builders.js +47 -0
  196. package/dist/components/capability-plugin-loader.js +175 -0
  197. package/dist/components/capability-plugin-schema.js +46 -0
  198. package/dist/components/capability-plugin.js +99 -0
  199. package/dist/components/capability.js +60 -0
  200. package/dist/components/changed-files.js +72 -0
  201. package/dist/components/cli-support.js +427 -0
  202. package/dist/components/component.js +120 -0
  203. package/dist/components/component.schema.json +271 -0
  204. package/dist/components/config-defaults.js +130 -0
  205. package/dist/components/deploy-units.js +60 -0
  206. package/dist/components/discover.d.ts.map +1 -1
  207. package/dist/components/discover.js +189 -0
  208. package/dist/components/driver-output.js +86 -0
  209. package/dist/components/driver.js +728 -0
  210. package/dist/components/fan-out-output.js +165 -0
  211. package/dist/components/fan-out-record.js +94 -0
  212. package/dist/components/fan-out-run.js +373 -0
  213. package/dist/components/fan-out-support.js +60 -0
  214. package/dist/components/fan-out.js +273 -0
  215. package/dist/components/gate-plan.js +41 -0
  216. package/dist/components/gated-wave-pipeline.js +46 -0
  217. package/dist/components/index.js +24 -0
  218. package/dist/components/layers.js +28 -0
  219. package/dist/components/manifest-persistence.js +108 -0
  220. package/dist/components/pilots/alb-ecs.pilot.js +59 -0
  221. package/dist/components/pilots/dynamodb.pilot.js +51 -0
  222. package/dist/components/pilots/jar-emr.pilot.js +65 -0
  223. package/dist/components/pilots/lambda.pilot.js +52 -0
  224. package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
  225. package/dist/components/pilots/project.js +12 -0
  226. package/dist/components/pr-pipeline.d.ts.map +1 -1
  227. package/dist/components/pr-pipeline.js +135 -0
  228. package/dist/components/pr-run.js +363 -0
  229. package/dist/components/presets/ecs-fargate.js +72 -0
  230. package/dist/components/presets/index.js +28 -0
  231. package/dist/components/presets/lambda.js +34 -0
  232. package/dist/components/presets/single-host-compose.js +41 -0
  233. package/dist/components/promote.js +549 -0
  234. package/dist/components/registry.js +34 -0
  235. package/dist/components/run-progress.js +33 -0
  236. package/dist/components/sandbox/driver.d.ts.map +1 -1
  237. package/dist/components/sandbox/driver.js +93 -0
  238. package/dist/components/sandbox/run.js +115 -0
  239. package/dist/components/starter-plugin.js +104 -0
  240. package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
  241. package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
  242. package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
  243. package/dist/components/verbs/bom-writer.js +287 -0
  244. package/dist/components/verbs/build-archive.js +188 -0
  245. package/dist/components/verbs/build.js +142 -0
  246. package/dist/components/verbs/cloud-executor.js +110 -0
  247. package/dist/components/verbs/component-bom.js +125 -0
  248. package/dist/components/verbs/ensure-secret.js +50 -0
  249. package/dist/components/verbs/index.js +61 -0
  250. package/dist/components/verbs/license-policy.js +75 -0
  251. package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
  252. package/dist/components/verbs/process-runner.js +78 -0
  253. package/dist/components/verbs/r2-sync.js +93 -0
  254. package/dist/components/verbs/reproducibility.js +62 -0
  255. package/dist/components/verbs/run-agent.js +577 -0
  256. package/dist/components/verbs/sbom-generator.js +119 -0
  257. package/dist/components/verbs/sbom.js +97 -0
  258. package/dist/components/verbs/shell.js +32 -0
  259. package/dist/components/verbs/sign.js +221 -0
  260. package/dist/components/verbs/stub.js +28 -0
  261. package/dist/components/verbs/tool-sbom-generator.js +154 -0
  262. package/dist/components/verbs/verify.js +112 -0
  263. package/dist/components/verbs/vex.js +131 -0
  264. package/dist/components/verbs/vuln-gate.js +152 -0
  265. package/dist/components/verbs/vuln-scan.js +288 -0
  266. package/dist/components/verbs/wait-verify.js +106 -0
  267. package/dist/components/verbs/wrangler.js +179 -0
  268. package/dist/components/wave-plan.js +102 -0
  269. package/dist/composite.d.ts +10 -2
  270. package/dist/composite.d.ts.map +1 -1
  271. package/dist/composite.js +313 -0
  272. package/dist/config-import.d.ts.map +1 -1
  273. package/dist/config-import.js +22 -0
  274. package/dist/config-sandbox.js +122 -0
  275. package/dist/config-static.js +206 -0
  276. package/dist/config.js +605 -0
  277. package/dist/content-digest.js +23 -0
  278. package/dist/declarable.js +114 -0
  279. package/dist/deep-observation.js +437 -0
  280. package/dist/detectLexicon.js +54 -0
  281. package/dist/discovery/cache.js +70 -0
  282. package/dist/discovery/collect.d.ts +2 -1
  283. package/dist/discovery/collect.d.ts.map +1 -1
  284. package/dist/discovery/collect.js +223 -0
  285. package/dist/discovery/cycles.js +95 -0
  286. package/dist/discovery/entity-wire-codec.js +391 -0
  287. package/dist/discovery/entity-wire.js +42 -0
  288. package/dist/discovery/files.js +121 -0
  289. package/dist/discovery/fold-import.d.ts.map +1 -1
  290. package/dist/discovery/fold-import.js +4073 -0
  291. package/dist/discovery/fold-rank.js +292 -0
  292. package/dist/discovery/graph.js +115 -0
  293. package/dist/discovery/host-composite.d.ts +35 -0
  294. package/dist/discovery/host-composite.d.ts.map +1 -0
  295. package/dist/discovery/host-composite.js +93 -0
  296. package/dist/discovery/import.d.ts.map +1 -1
  297. package/dist/discovery/import.js +65 -0
  298. package/dist/discovery/index.d.ts +9 -0
  299. package/dist/discovery/index.d.ts.map +1 -1
  300. package/dist/discovery/index.js +333 -0
  301. package/dist/discovery/param-deps.js +487 -0
  302. package/dist/discovery/resolve.js +39 -0
  303. package/dist/discovery/sandbox/bundle.js +214 -0
  304. package/dist/discovery/sandbox/child-errors.js +26 -0
  305. package/dist/discovery/sandbox/config-run.js +100 -0
  306. package/dist/discovery/sandbox/config-wire.js +183 -0
  307. package/dist/discovery/sandbox/driver.d.ts.map +1 -1
  308. package/dist/discovery/sandbox/driver.js +333 -0
  309. package/dist/discovery/sandbox/fork.js +229 -0
  310. package/dist/discovery/sandbox/policy-run.js +142 -0
  311. package/dist/discovery/sandbox/policy-wire.js +152 -0
  312. package/dist/discovery/sandbox/run.js +77 -0
  313. package/dist/discovery/specifier-resolve.js +320 -0
  314. package/dist/discovery/walk.js +284 -0
  315. package/dist/effect-receipt.js +340 -0
  316. package/dist/env.js +55 -0
  317. package/dist/errors.js +62 -0
  318. package/dist/fold/fold.js +1434 -0
  319. package/dist/fold/foldable-helpers.js +229 -0
  320. package/dist/fold/subset.js +696 -0
  321. package/dist/fold-provenance.js +414 -0
  322. package/dist/gate-decision.d.ts +20 -9
  323. package/dist/gate-decision.d.ts.map +1 -1
  324. package/dist/gate-decision.js +313 -0
  325. package/dist/gate-resume-run.js +154 -0
  326. package/dist/gated-waves.js +165 -0
  327. package/dist/governance.js +43 -0
  328. package/dist/graph-declared.js +45 -0
  329. package/dist/graph-detail.js +207 -0
  330. package/dist/graph-dot.js +54 -0
  331. package/dist/graph-effective.js +107 -0
  332. package/dist/graph-ir.js +623 -0
  333. package/dist/graph-layout.js +184 -0
  334. package/dist/graph-lens.js +105 -0
  335. package/dist/graph-mermaid.js +83 -0
  336. package/dist/graph-ops.js +39 -0
  337. package/dist/graph-refs.js +156 -0
  338. package/dist/held-elsewhere.js +87 -0
  339. package/dist/identity.js +251 -0
  340. package/dist/import/base-parser.js +34 -0
  341. package/dist/import/embedded.js +255 -0
  342. package/dist/import/generator.js +1 -0
  343. package/dist/import/ir-utils.js +85 -0
  344. package/dist/import/parser-options.js +45 -0
  345. package/dist/import/parser.js +1 -0
  346. package/dist/index.js +118 -0
  347. package/dist/intrinsic-interpolation.js +73 -0
  348. package/dist/intrinsic.js +31 -0
  349. package/dist/join-key.js +35 -0
  350. package/dist/kubectl-context.js +150 -0
  351. package/dist/lexicon-config.js +58 -0
  352. package/dist/lexicon-integrity.js +47 -0
  353. package/dist/lexicon-manifest.js +70 -0
  354. package/dist/lexicon-module.d.ts.map +1 -1
  355. package/dist/lexicon-module.js +241 -0
  356. package/dist/lexicon-output.js +218 -0
  357. package/dist/lexicon-plugin-helpers.js +104 -0
  358. package/dist/lexicon-schema.js +136 -0
  359. package/dist/lexicon.js +130 -0
  360. package/dist/lifecycle/affected.js +224 -0
  361. package/dist/lifecycle/assert-live.js +110 -0
  362. package/dist/lifecycle/build-ledger-store.js +160 -0
  363. package/dist/lifecycle/build-ledger.js +155 -0
  364. package/dist/lifecycle/change-set.js +356 -0
  365. package/dist/lifecycle/converge-ledger.js +161 -0
  366. package/dist/lifecycle/deep-diff.js +233 -0
  367. package/dist/lifecycle/deep-observe.js +147 -0
  368. package/dist/lifecycle/digest.js +143 -0
  369. package/dist/lifecycle/disruption.js +135 -0
  370. package/dist/lifecycle/gate-applied.js +113 -0
  371. package/dist/lifecycle/gate-audit.d.ts +69 -2
  372. package/dist/lifecycle/gate-audit.d.ts.map +1 -1
  373. package/dist/lifecycle/gate-audit.js +415 -0
  374. package/dist/lifecycle/gate-ledger-select.js +89 -0
  375. package/dist/lifecycle/gate-ledger.d.ts +24 -0
  376. package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
  377. package/dist/lifecycle/gate-ledger.js +201 -0
  378. package/dist/lifecycle/gate-origin.js +117 -0
  379. package/dist/lifecycle/gate-pending.js +58 -0
  380. package/dist/lifecycle/git.js +1182 -0
  381. package/dist/lifecycle/identity.js +58 -0
  382. package/dist/lifecycle/index.js +26 -0
  383. package/dist/lifecycle/lease.js +283 -0
  384. package/dist/lifecycle/ledger-port.js +1 -0
  385. package/dist/lifecycle/legacy-digest.js +91 -0
  386. package/dist/lifecycle/live-diff.js +274 -0
  387. package/dist/lifecycle/local-note.js +15 -0
  388. package/dist/lifecycle/member-ledger.js +122 -0
  389. package/dist/lifecycle/observation-baseline.js +155 -0
  390. package/dist/lifecycle/observe.js +375 -0
  391. package/dist/lifecycle/oras-referrer-lookup.js +82 -0
  392. package/dist/lifecycle/override-ledger.js +54 -0
  393. package/dist/lifecycle/plan-digest.js +110 -0
  394. package/dist/lifecycle/plan-ledger.js +129 -0
  395. package/dist/lifecycle/receipt-plan.js +192 -0
  396. package/dist/lifecycle/release-ledger.js +155 -0
  397. package/dist/lifecycle/release-read.js +64 -0
  398. package/dist/lifecycle/replay.js +193 -0
  399. package/dist/lifecycle/rollback.js +102 -0
  400. package/dist/lifecycle/run-ledger.js +183 -0
  401. package/dist/lifecycle/scenario-eval.js +204 -0
  402. package/dist/lifecycle/scenario.js +214 -0
  403. package/dist/lifecycle/snapshot.js +239 -0
  404. package/dist/lifecycle/status.js +447 -0
  405. package/dist/lifecycle/symptoms.js +117 -0
  406. package/dist/lifecycle/teardown.js +255 -0
  407. package/dist/lifecycle/types.js +1 -0
  408. package/dist/lifecycle/unobserved-gate.js +33 -0
  409. package/dist/lifecycle/wave-plans.js +68 -0
  410. package/dist/lifecycle/work-item-id.js +36 -0
  411. package/dist/lifecycle/work-lease.js +393 -0
  412. package/dist/lint/component-checks.js +87 -0
  413. package/dist/lint/config.js +483 -0
  414. package/dist/lint/declarative.js +122 -0
  415. package/dist/lint/discover.d.ts.map +1 -1
  416. package/dist/lint/discover.js +138 -0
  417. package/dist/lint/engine.js +246 -0
  418. package/dist/lint/knowledge-checks.js +64 -0
  419. package/dist/lint/named-checks.js +22 -0
  420. package/dist/lint/output-checks.js +87 -0
  421. package/dist/lint/output-docs.js +163 -0
  422. package/dist/lint/parser.js +33 -0
  423. package/dist/lint/pipeline-change-gate.js +70 -0
  424. package/dist/lint/policy-import.d.ts +1 -1
  425. package/dist/lint/policy-import.d.ts.map +1 -1
  426. package/dist/lint/policy-import.js +62 -0
  427. package/dist/lint/policy-sandbox.js +86 -0
  428. package/dist/lint/policy.js +122 -0
  429. package/dist/lint/post-synth.js +87 -0
  430. package/dist/lint/presets/relaxed.json +26 -0
  431. package/dist/lint/presets/strict.json +24 -24
  432. package/dist/lint/receipt-checks.js +83 -0
  433. package/dist/lint/rule-loader.d.ts.map +1 -1
  434. package/dist/lint/rule-loader.js +89 -0
  435. package/dist/lint/rule-registry.js +86 -0
  436. package/dist/lint/rule.js +1 -0
  437. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
  438. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
  439. package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
  440. package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
  441. package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
  442. package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
  443. package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
  444. package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
  445. package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
  446. package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
  447. package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
  448. package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
  449. package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
  450. package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
  451. package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
  452. package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
  453. package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
  454. package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
  455. package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
  456. package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
  457. package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
  458. package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
  459. package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
  460. package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
  461. package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
  462. package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
  463. package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
  464. package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
  465. package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
  466. package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
  467. package/dist/lint/rules/comp/index.js +33 -0
  468. package/dist/lint/rules/comp/support.js +129 -0
  469. package/dist/lint/rules/composite-scope.js +51 -0
  470. package/dist/lint/rules/cor017-composite-name-match.js +93 -0
  471. package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
  472. package/dist/lint/rules/cor021-env-literal-name.js +100 -0
  473. package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
  474. package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
  475. package/dist/lint/rules/declarable-naming-convention.js +62 -0
  476. package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
  477. package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
  478. package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
  479. package/dist/lint/rules/evl004-spread-non-const.js +94 -0
  480. package/dist/lint/rules/evl005-resource-block-body.js +41 -0
  481. package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
  482. package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
  483. package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
  484. package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
  485. package/dist/lint/rules/export-required.js +115 -0
  486. package/dist/lint/rules/file-declarable-limit.js +88 -0
  487. package/dist/lint/rules/flat-declarations.js +62 -0
  488. package/dist/lint/rules/index.js +90 -0
  489. package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
  490. package/dist/lint/rules/no-redundant-type-import.js +76 -0
  491. package/dist/lint/rules/no-redundant-value-cast.js +41 -0
  492. package/dist/lint/rules/no-string-ref.js +59 -0
  493. package/dist/lint/rules/no-unused-declarable-import.js +75 -0
  494. package/dist/lint/rules/no-unused-declarable.js +142 -0
  495. package/dist/lint/rules/op/index.js +28 -0
  496. package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
  497. package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
  498. package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
  499. package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
  500. package/dist/lint/rules/op/support.js +11 -0
  501. package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
  502. package/dist/lint/rules/property-kind.js +56 -0
  503. package/dist/lint/rules/single-concern-file.js +71 -0
  504. package/dist/lint/rules/sys001-no-literal-key.js +60 -0
  505. package/dist/lint/selectors.js +168 -0
  506. package/dist/lint/suppressions.js +129 -0
  507. package/dist/lint/typescript.js +17 -0
  508. package/dist/live-endpoint.js +113 -0
  509. package/dist/live-read-session.js +76 -0
  510. package/dist/lsp/lexicon-providers.js +163 -0
  511. package/dist/lsp/types.js +5 -0
  512. package/dist/managed-fields.js +293 -0
  513. package/dist/mcp/types.js +4 -0
  514. package/dist/notify-verify.js +0 -1
  515. package/dist/notify.js +0 -1
  516. package/dist/notify.schema.json +72 -0
  517. package/dist/observation.js +266 -0
  518. package/dist/okf-read.js +134 -0
  519. package/dist/okf.js +275 -0
  520. package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
  521. package/dist/op/activities/activity-contracts.d.ts +1 -1
  522. package/dist/op/activities/activity-contracts.js +313 -0
  523. package/dist/op/activities/apply.js +582 -0
  524. package/dist/op/activities/build.js +18 -0
  525. package/dist/op/activities/change-coverage.js +40 -0
  526. package/dist/op/activities/change-set.d.ts +8 -3
  527. package/dist/op/activities/change-set.d.ts.map +1 -1
  528. package/dist/op/activities/change-set.js +67 -0
  529. package/dist/op/activities/converge.js +492 -0
  530. package/dist/op/activities/decide.js +211 -0
  531. package/dist/op/activities/env-teardown.js +110 -0
  532. package/dist/op/activities/factory.js +591 -0
  533. package/dist/op/activities/forge-pull-request.js +82 -0
  534. package/dist/op/activities/gh-host.js +78 -0
  535. package/dist/op/activities/guard-validate.js +165 -0
  536. package/dist/op/activities/http-check.js +40 -0
  537. package/dist/op/activities/index.js +59 -0
  538. package/dist/op/activities/lexicon-upgrade.js +629 -0
  539. package/dist/op/activities/lifecycle.js +109 -0
  540. package/dist/op/activities/pipeline-audit.js +147 -0
  541. package/dist/op/activities/policy.js +26 -0
  542. package/dist/op/activities/predict-behaviour.js +341 -0
  543. package/dist/op/activities/propose-upgrade.js +165 -0
  544. package/dist/op/activities/reconcile.d.ts +28 -16
  545. package/dist/op/activities/reconcile.d.ts.map +1 -1
  546. package/dist/op/activities/reconcile.js +1011 -0
  547. package/dist/op/activities/shell.js +118 -0
  548. package/dist/op/activities/source-release.js +97 -0
  549. package/dist/op/activities/source-rollback.js +165 -0
  550. package/dist/op/activities/teardown.js +17 -0
  551. package/dist/op/activities/util.js +6 -0
  552. package/dist/op/activities/wait.js +51 -0
  553. package/dist/op/activities/work-evidence.js +35 -0
  554. package/dist/op/activities/workflow-audit.js +133 -0
  555. package/dist/op/activity-contract-registry.js +106 -0
  556. package/dist/op/activity-contract.js +232 -0
  557. package/dist/op/activity-failure.js +31 -0
  558. package/dist/op/activity-profiles.js +129 -0
  559. package/dist/op/activity-registry.js +105 -0
  560. package/dist/op/activity-runtime.js +28 -0
  561. package/dist/op/builders.d.ts +1 -1
  562. package/dist/op/builders.d.ts.map +1 -1
  563. package/dist/op/builders.js +801 -0
  564. package/dist/op/change-signal.js +118 -0
  565. package/dist/op/composites/apply-op.js +151 -0
  566. package/dist/op/composites/behaviour-op.js +65 -0
  567. package/dist/op/composites/converge-op.js +141 -0
  568. package/dist/op/composites/index.js +19 -0
  569. package/dist/op/composites/lexicon-upgrade-op.js +107 -0
  570. package/dist/op/composites/pipeline-audit-op.js +50 -0
  571. package/dist/op/composites/reconcile-op.js +84 -0
  572. package/dist/op/composites/watch-op.js +69 -0
  573. package/dist/op/composites/workflow-audit-op.js +57 -0
  574. package/dist/op/converge-rule.js +205 -0
  575. package/dist/op/cron.js +146 -0
  576. package/dist/op/decide-backend.js +181 -0
  577. package/dist/op/decide-config.js +68 -0
  578. package/dist/op/decide-read-inputs.js +141 -0
  579. package/dist/op/discover.d.ts.map +1 -1
  580. package/dist/op/discover.js +213 -0
  581. package/dist/op/duration.js +21 -0
  582. package/dist/op/emulator-freshness.js +80 -0
  583. package/dist/op/emulator-lifecycle.js +269 -0
  584. package/dist/op/factory.js +83 -0
  585. package/dist/op/gate-approval.js +172 -0
  586. package/dist/op/gate-name.js +86 -0
  587. package/dist/op/gate-plan-context.js +167 -0
  588. package/dist/op/gate-point-run.js +67 -0
  589. package/dist/op/gate-point.js +111 -0
  590. package/dist/op/gate-resume-plan.js +155 -0
  591. package/dist/op/gate-resume.js +31 -0
  592. package/dist/op/gate-review.js +290 -0
  593. package/dist/op/gate-run-locator.js +85 -0
  594. package/dist/op/gate-summary.js +100 -0
  595. package/dist/op/gate-wait.js +56 -0
  596. package/dist/op/gate.js +449 -0
  597. package/dist/op/generate-pipeline.js +124 -0
  598. package/dist/op/index.js +51 -0
  599. package/dist/op/lifecycle-receipt-store.js +45 -0
  600. package/dist/op/local-executor.js +1164 -0
  601. package/dist/op/local-output.js +140 -0
  602. package/dist/op/op-ir.js +317 -0
  603. package/dist/op/op-verb-class.js +131 -0
  604. package/dist/op/op-waves-notify.js +136 -0
  605. package/dist/op/op-waves-run.d.ts +1 -1
  606. package/dist/op/op-waves-run.d.ts.map +1 -1
  607. package/dist/op/op-waves-run.js +1657 -0
  608. package/dist/op/op-waves.js +409 -0
  609. package/dist/op/operator.js +743 -0
  610. package/dist/op/receipt-store.js +94 -0
  611. package/dist/op/resource.js +23 -0
  612. package/dist/op/run-context.js +28 -0
  613. package/dist/op/run-live.js +256 -0
  614. package/dist/op/runtime.js +21 -0
  615. package/dist/op/runtimes/local.js +195 -0
  616. package/dist/op/source-archive.js +131 -0
  617. package/dist/op/step-output-ref.js +397 -0
  618. package/dist/op/steward-beside.js +169 -0
  619. package/dist/op/steward-points.js +138 -0
  620. package/dist/op/steward-turn.js +59 -0
  621. package/dist/op/steward.js +317 -0
  622. package/dist/op/types.js +25 -0
  623. package/dist/op/work-lease-decl.js +81 -0
  624. package/dist/op/work-lease-run.js +393 -0
  625. package/dist/override-gate.js +284 -0
  626. package/dist/owner-chain.js +74 -0
  627. package/dist/ownership.js +92 -0
  628. package/dist/params.js +61 -0
  629. package/dist/plan-summary.js +711 -0
  630. package/dist/point-decision.js +211 -0
  631. package/dist/pr-forge.js +810 -0
  632. package/dist/pr-loop.js +203 -0
  633. package/dist/project-codegen.js +191 -0
  634. package/dist/project-root.js +74 -0
  635. package/dist/project-validation.js +50 -0
  636. package/dist/provenance.js +157 -0
  637. package/dist/pseudo-parameter.js +40 -0
  638. package/dist/reconcile.js +450 -0
  639. package/dist/resource-attributes.js +33 -0
  640. package/dist/runtime-adapter.js +77 -0
  641. package/dist/runtime.js +66 -0
  642. package/dist/secret-materialization.js +153 -0
  643. package/dist/secret-provenance.js +250 -0
  644. package/dist/serializer-walker.js +112 -0
  645. package/dist/serializer.js +1 -0
  646. package/dist/sort.js +45 -0
  647. package/dist/stack-output.js +115 -0
  648. package/dist/telemetry-attribution.js +149 -0
  649. package/dist/terraform/__fixtures__/build-graph.js +63 -0
  650. package/dist/terraform/adopt-state.js +40 -0
  651. package/dist/terraform/aws-resources.js +384 -0
  652. package/dist/terraform/bridge.js +204 -0
  653. package/dist/terraform/carve-provider.js +155 -0
  654. package/dist/terraform/carve.js +138 -0
  655. package/dist/terraform/data-source-shape.js +57 -0
  656. package/dist/terraform/emit-source.js +36 -0
  657. package/dist/terraform/excise.js +123 -0
  658. package/dist/terraform/graduate.js +128 -0
  659. package/dist/terraform/graph.js +435 -0
  660. package/dist/terraform/hcl2json.js +60 -0
  661. package/dist/terraform/manifest.js +149 -0
  662. package/dist/terraform/parse.js +81 -0
  663. package/dist/terraform/providers/aws.js +146 -0
  664. package/dist/terraform/providers/gcp.js +294 -0
  665. package/dist/terraform/providers/index.js +17 -0
  666. package/dist/terraform/providers/kubernetes.js +253 -0
  667. package/dist/terraform/score.js +151 -0
  668. package/dist/terraform/state.js +67 -0
  669. package/dist/terraform/tier-map.js +74 -0
  670. package/dist/terraform/types.js +13 -0
  671. package/dist/terraform/unified-diff.js +132 -0
  672. package/dist/testing.js +295 -0
  673. package/dist/toml-emit.js +153 -0
  674. package/dist/toml-parse.js +355 -0
  675. package/dist/toml-utils.js +60 -0
  676. package/dist/toml.js +428 -0
  677. package/dist/ts-loader.d.ts +46 -0
  678. package/dist/ts-loader.d.ts.map +1 -0
  679. package/dist/ts-loader.js +103 -0
  680. package/dist/types.js +1 -0
  681. package/dist/utils.js +61 -0
  682. package/dist/validation.js +20 -0
  683. package/dist/vendor/js-yaml-load.js +1662 -0
  684. package/dist/workspace/__fixtures__/contract-repo.d.ts +7 -0
  685. package/dist/workspace/__fixtures__/contract-repo.d.ts.map +1 -1
  686. package/dist/workspace/__fixtures__/contract-repo.js +119 -0
  687. package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
  688. package/dist/workspace/__fixtures__/sessions.d.ts +1 -1
  689. package/dist/workspace/__fixtures__/sessions.d.ts.map +1 -1
  690. package/dist/workspace/__fixtures__/sessions.js +91 -0
  691. package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
  692. package/dist/workspace/agent-cli.js +99 -0
  693. package/dist/workspace/agent.schema.json +390 -0
  694. package/dist/workspace/answers-ledger.js +89 -0
  695. package/dist/workspace/box-cli.js +142 -0
  696. package/dist/workspace/box-factory-write.js +196 -0
  697. package/dist/workspace/box-factory-write.schema.json +342 -0
  698. package/dist/workspace/box-factory.js +88 -0
  699. package/dist/workspace/box-intent.js +126 -0
  700. package/dist/workspace/box-isolation.js +169 -0
  701. package/dist/workspace/box-listing-write.schema.json +204 -0
  702. package/dist/workspace/box-listing.js +298 -0
  703. package/dist/workspace/box-publish.js +352 -0
  704. package/dist/workspace/box-publish.schema.json +498 -0
  705. package/dist/workspace/box-services.js +39 -0
  706. package/dist/workspace/broker-protocol.js +359 -0
  707. package/dist/workspace/broker-protocol.schema.json +228 -0
  708. package/dist/workspace/change-set.schema.json +462 -0
  709. package/dist/workspace/changes-cli.js +56 -0
  710. package/dist/workspace/changes.js +446 -0
  711. package/dist/workspace/changes.schema.json +642 -0
  712. package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
  713. package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
  714. package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
  715. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
  716. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
  717. package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
  718. package/dist/workspace/chant-migrations.js +113 -0
  719. package/dist/workspace/check.schema.json +433 -0
  720. package/dist/workspace/checks/box-isolation.js +62 -0
  721. package/dist/workspace/checks/boxes.js +491 -0
  722. package/dist/workspace/checks/diagrams.js +104 -0
  723. package/dist/workspace/checks/generated.js +419 -0
  724. package/dist/workspace/checks/ledgers.js +212 -0
  725. package/dist/workspace/checks/links.js +191 -0
  726. package/dist/workspace/checks/live.js +100 -0
  727. package/dist/workspace/checks/pipelines.js +188 -0
  728. package/dist/workspace/checks/records.js +169 -0
  729. package/dist/workspace/checks.js +426 -0
  730. package/dist/workspace/ci-green-cli.js +125 -0
  731. package/dist/workspace/ci-green-forge.js +83 -0
  732. package/dist/workspace/ci-green-workflow.d.ts +3 -1
  733. package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
  734. package/dist/workspace/ci-green-workflow.js +202 -0
  735. package/dist/workspace/ci-green.js +325 -0
  736. package/dist/workspace/ci-last-green.schema.json +158 -0
  737. package/dist/workspace/class-data.d.ts +84 -0
  738. package/dist/workspace/class-data.d.ts.map +1 -0
  739. package/dist/workspace/class-data.js +238 -0
  740. package/dist/workspace/compose-graph.js +235 -0
  741. package/dist/workspace/compose-reports.js +146 -0
  742. package/dist/workspace/composites.js +264 -0
  743. package/dist/workspace/composites.schema.json +617 -0
  744. package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
  745. package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
  746. package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
  747. package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
  748. package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
  749. package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
  750. package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
  751. package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
  752. package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
  753. package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
  754. package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
  755. package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
  756. package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
  757. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  758. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  759. package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
  760. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  761. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  762. package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
  763. package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
  764. package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  765. package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  766. package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
  767. package/dist/workspace/conformance/broker.js +736 -0
  768. package/dist/workspace/conformance/index.js +673 -0
  769. package/dist/workspace/conformance/vitest.js +108 -0
  770. package/dist/workspace/conformance/writer.js +1080 -0
  771. package/dist/workspace/decide.js +879 -0
  772. package/dist/workspace/decision-points.schema.json +135 -135
  773. package/dist/workspace/declaration-write-cli.js +74 -0
  774. package/dist/workspace/declaration-write.js +238 -0
  775. package/dist/workspace/declaration.js +938 -0
  776. package/dist/workspace/declaration.schema.json +1413 -1413
  777. package/dist/workspace/declared-kinds.js +106 -0
  778. package/dist/workspace/environments.js +164 -0
  779. package/dist/workspace/evidence.schema.json +279 -0
  780. package/dist/workspace/export-cli.js +185 -0
  781. package/dist/workspace/export.js +499 -0
  782. package/dist/workspace/factory-rules.js +175 -0
  783. package/dist/workspace/generated-files.js +92 -0
  784. package/dist/workspace/glob.js +45 -0
  785. package/dist/workspace/graph-cache.js +352 -0
  786. package/dist/workspace/graph-cli.js +348 -0
  787. package/dist/workspace/graph.schema.json +1338 -0
  788. package/dist/workspace/identity-gate-rule.js +75 -0
  789. package/dist/workspace/identity.js +126 -0
  790. package/dist/workspace/import.js +283 -0
  791. package/dist/workspace/init.js +620 -0
  792. package/dist/workspace/intent-cli.js +263 -0
  793. package/dist/workspace/intent-joins.js +201 -0
  794. package/dist/workspace/intent-record.js +352 -0
  795. package/dist/workspace/intent-record.schema.json +864 -0
  796. package/dist/workspace/intent.js +1582 -0
  797. package/dist/workspace/intent.schema.json +2420 -0
  798. package/dist/workspace/json-edit.js +221 -0
  799. package/dist/workspace/jsonc.js +235 -0
  800. package/dist/workspace/kind-readers.js +103 -0
  801. package/dist/workspace/kinds.d.ts +3 -7
  802. package/dist/workspace/kinds.d.ts.map +1 -1
  803. package/dist/workspace/kinds.js +553 -0
  804. package/dist/workspace/lexicon-symbols.js +112 -0
  805. package/dist/workspace/lineage-adopt-cli.js +102 -0
  806. package/dist/workspace/lineage-adopt.js +360 -0
  807. package/dist/workspace/lineage-check.js +282 -0
  808. package/dist/workspace/lineage-cli.js +121 -0
  809. package/dist/workspace/lineage-hash-index.js +284 -0
  810. package/dist/workspace/lineage-init.js +507 -0
  811. package/dist/workspace/lineage-lock.js +387 -0
  812. package/dist/workspace/lineage-merge.js +45 -0
  813. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  814. package/dist/workspace/lineage-migrations.js +329 -0
  815. package/dist/workspace/lineage-provenance.js +36 -0
  816. package/dist/workspace/lineage-update.js +138 -0
  817. package/dist/workspace/lineage-upgrade-cli.js +131 -0
  818. package/dist/workspace/lineage-upgrade.js +889 -0
  819. package/dist/workspace/lineage-vendor.js +171 -0
  820. package/dist/workspace/lineage-version.js +128 -0
  821. package/dist/workspace/lineage-versions.js +275 -0
  822. package/dist/workspace/links.js +330 -0
  823. package/dist/workspace/ls-generated.js +95 -0
  824. package/dist/workspace/ls.js +277 -0
  825. package/dist/workspace/ls.schema.json +333 -0
  826. package/dist/workspace/member-commands.js +508 -0
  827. package/dist/workspace/member-handles.js +216 -0
  828. package/dist/workspace/member-pipeline.js +258 -0
  829. package/dist/workspace/member-run.js +117 -0
  830. package/dist/workspace/member-write.schema.json +193 -0
  831. package/dist/workspace/nested-graph.js +156 -0
  832. package/dist/workspace/nesting.js +38 -0
  833. package/dist/workspace/patch.js +301 -0
  834. package/dist/workspace/patch.schema.json +321 -0
  835. package/dist/workspace/pin-cli.js +55 -0
  836. package/dist/workspace/pin-integrity.js +100 -0
  837. package/dist/workspace/plan-summary.schema.json +155 -0
  838. package/dist/workspace/point-answer.schema.json +129 -129
  839. package/dist/workspace/points-cli.js +291 -0
  840. package/dist/workspace/points-write.schema.json +660 -0
  841. package/dist/workspace/points.js +521 -0
  842. package/dist/workspace/points.schema.json +916 -0
  843. package/dist/workspace/pr-report.schema.json +108 -0
  844. package/dist/workspace/principal-classes.d.ts +4 -11
  845. package/dist/workspace/principal-classes.d.ts.map +1 -1
  846. package/dist/workspace/principal-classes.js +162 -0
  847. package/dist/workspace/reason-codes.js +326 -0
  848. package/dist/workspace/record-assets.js +151 -0
  849. package/dist/workspace/record-decided.js +105 -0
  850. package/dist/workspace/record-sessions.js +96 -0
  851. package/dist/workspace/record-source.js +114 -0
  852. package/dist/workspace/records-amend.schema.json +284 -0
  853. package/dist/workspace/records-checkout.js +76 -0
  854. package/dist/workspace/records-cli.js +707 -0
  855. package/dist/workspace/records-close.js +116 -0
  856. package/dist/workspace/records-close.schema.json +278 -0
  857. package/dist/workspace/records-new.schema.json +202 -0
  858. package/dist/workspace/records-review.schema.json +367 -0
  859. package/dist/workspace/records-since.js +317 -0
  860. package/dist/workspace/records-since.schema.json +218 -0
  861. package/dist/workspace/records-write.js +1229 -0
  862. package/dist/workspace/records.js +1345 -0
  863. package/dist/workspace/records.schema.json +604 -0
  864. package/dist/workspace/reference-kinds/app/package.json +10 -0
  865. package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  866. package/dist/workspace/returns.js +303 -0
  867. package/dist/workspace/root-refusal.js +75 -0
  868. package/dist/workspace/run-statement.schema.json +622 -0
  869. package/dist/workspace/runs-cli.js +584 -0
  870. package/dist/workspace/runs-write.schema.json +994 -0
  871. package/dist/workspace/runs.js +708 -0
  872. package/dist/workspace/runs.schema.json +1257 -0
  873. package/dist/workspace/runtimes.js +76 -0
  874. package/dist/workspace/session-kinds.js +83 -0
  875. package/dist/workspace/signers.schema.json +206 -0
  876. package/dist/workspace/source-block.js +125 -0
  877. package/dist/workspace/squash.js +177 -0
  878. package/dist/workspace/status-gates.js +162 -0
  879. package/dist/workspace/status-stewards.js +330 -0
  880. package/dist/workspace/status.js +514 -0
  881. package/dist/workspace/status.schema.json +998 -0
  882. package/dist/workspace/steward-index.js +191 -0
  883. package/dist/workspace/symbols.js +188 -0
  884. package/dist/workspace/template-manifest.js +227 -0
  885. package/dist/workspace/template-pins.js +115 -0
  886. package/dist/workspace/trailer-joins.js +65 -0
  887. package/dist/workspace/trailers.js +111 -0
  888. package/dist/workspace/tree.js +136 -0
  889. package/dist/workspace/trust/attestor.js +63 -0
  890. package/dist/workspace/trust/dsse.js +108 -0
  891. package/dist/workspace/trust/evidence-cli.js +175 -0
  892. package/dist/workspace/trust/evidence.js +161 -0
  893. package/dist/workspace/trust/gate-seal.js +226 -0
  894. package/dist/workspace/trust/policy.js +190 -0
  895. package/dist/workspace/trust/provenance.js +180 -0
  896. package/dist/workspace/trust/rotation.js +298 -0
  897. package/dist/workspace/trust/run-commits.js +101 -0
  898. package/dist/workspace/trust/run-statement.js +182 -0
  899. package/dist/workspace/trust/seal.js +272 -0
  900. package/dist/workspace/trust/signers-cli.js +152 -0
  901. package/dist/workspace/trust/ssh-commit.js +178 -0
  902. package/dist/workspace/trust/test-repo.js +118 -0
  903. package/dist/workspace/trust/trust-files.js +193 -0
  904. package/dist/workspace/trust/verify-cli.js +63 -0
  905. package/dist/workspace/trust/verify.js +192 -0
  906. package/dist/workspace/which-chant.js +141 -0
  907. package/dist/workspace/wip-cli.js +95 -0
  908. package/dist/workspace/wip-write.schema.json +504 -0
  909. package/dist/workspace/wip.js +631 -0
  910. package/dist/workspace/wip.schema.json +334 -0
  911. package/dist/workspace/work-cli.js +448 -0
  912. package/dist/workspace/work-evidence.js +122 -0
  913. package/dist/workspace/work-evidence.schema.json +222 -0
  914. package/dist/workspace/work-history.schema.json +421 -0
  915. package/dist/workspace/work-lease.schema.json +246 -0
  916. package/dist/workspace/work-size.js +77 -0
  917. package/dist/workspace/work.js +283 -0
  918. package/dist/workspace/workspace-kinds.schema.json +259 -259
  919. package/dist/workspace/workspace-principals.schema.json +53 -53
  920. package/dist/workspace/write-lock-cli.js +105 -0
  921. package/dist/workspace/write-lock.js +424 -0
  922. package/dist/workspace/write-lock.schema.json +172 -0
  923. package/dist/workspace/write-scope.js +484 -0
  924. package/dist/yaml.js +459 -0
  925. package/package.json +2 -2
  926. package/src/build.ts +8 -0
  927. package/src/change-set.test.ts +48 -0
  928. package/src/change-set.ts +52 -2
  929. package/src/ci-jobs.test.ts +49 -0
  930. package/src/ci-jobs.ts +515 -0
  931. package/src/cli/commands/check-lexicon-plugin.ts +2 -0
  932. package/src/cli/commands/lint.ts +3 -0
  933. package/src/cli/commands/migrate.ts +2 -0
  934. package/src/cli/compiled-cli.e2e.test.ts +165 -0
  935. package/src/cli/main.ts +121 -27
  936. package/src/cli/mcp/workspace-tools.ts +1 -1
  937. package/src/codegen/pinned-upgrade.ts +2 -0
  938. package/src/components/discover.ts +2 -0
  939. package/src/components/pr-pipeline.ts +3 -2
  940. package/src/components/sandbox/driver.ts +3 -1
  941. package/src/composite.ts +15 -3
  942. package/src/config-import.ts +3 -0
  943. package/src/discovery/collect.ts +15 -1
  944. package/src/discovery/fold-build-parity.test.ts +71 -0
  945. package/src/discovery/fold-import.ts +25 -127
  946. package/src/discovery/fold-project-provenance.test.ts +21 -4
  947. package/src/discovery/host-composite.ts +101 -0
  948. package/src/discovery/import.ts +2 -0
  949. package/src/discovery/index.ts +11 -1
  950. package/src/discovery/sandbox/driver.ts +3 -1
  951. package/src/gate-decision-bundle.test.ts +5 -4
  952. package/src/gate-decision-identity.test.ts +59 -6
  953. package/src/gate-decision.ts +81 -21
  954. package/src/lexicon-module.ts +3 -0
  955. package/src/lifecycle/gate-audit.test.ts +55 -1
  956. package/src/lifecycle/gate-audit.ts +116 -3
  957. package/src/lifecycle/gate-ledger.test.ts +20 -1
  958. package/src/lifecycle/gate-ledger.ts +33 -1
  959. package/src/lint/config.ts +1 -1
  960. package/src/lint/discover.ts +28 -8
  961. package/src/lint/policy-import.ts +4 -1
  962. package/src/lint/rule-loader.ts +2 -0
  963. package/src/op/activities/activity-contracts.ts +1 -1
  964. package/src/op/activities/change-set.ts +11 -3
  965. package/src/op/activities/lexicon-upgrade.test.ts +2 -0
  966. package/src/op/activities/reconcile.test.ts +62 -2
  967. package/src/op/activities/reconcile.ts +46 -22
  968. package/src/op/builders.ts +1 -1
  969. package/src/op/discover.ts +3 -0
  970. package/src/op/op-waves-run.ts +4 -3
  971. package/src/op/op-waves.test.ts +2 -0
  972. package/src/op/work-lease-run.test.ts +12 -4
  973. package/src/ts-loader.test.ts +23 -0
  974. package/src/ts-loader.ts +122 -0
  975. package/src/workspace/__fixtures__/contract-repo.ts +17 -1
  976. package/src/workspace/__fixtures__/sessions.ts +3 -3
  977. package/src/workspace/change-set.schema.json +5 -3
  978. package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
  979. package/src/workspace/ci-green-workflow.test.ts +4 -4
  980. package/src/workspace/ci-green-workflow.ts +5 -2
  981. package/src/workspace/class-data.test.ts +64 -0
  982. package/src/workspace/class-data.ts +236 -0
  983. package/src/workspace/declaration.ts +1 -1
  984. package/src/workspace/kinds.ts +7 -36
  985. package/src/workspace/lineage-migrations.ts +2 -0
  986. package/src/workspace/points.ts +1 -1
  987. package/src/workspace/principal-classes.ts +12 -95
  988. package/src/workspace/records-formats.test.ts +7 -2
  989. package/src/workspace/records-sessions-write.test.ts +3 -3
  990. package/src/workspace/status-contract.e2e.test.ts +37 -0
  991. package/src/workspace/status-contract.test.ts +23 -21
@@ -0,0 +1,332 @@
1
+ /**
2
+ * `chant carve emit` — the first strangler-fig emit step (#197).
3
+ *
4
+ * Given a resource selected from a Terraform estate, it:
5
+ * 1. classifies the boundary (which edges the carve cuts),
6
+ * 2. adopts the live resource into typed chant source via live import
7
+ * (`chant import --from <env>` machinery — cloud→code, read-only export),
8
+ * 3. writes a boundary report.
9
+ *
10
+ * It does not patch the surviving Terraform or apply anything — that is the
11
+ * boundary-bridging and apply-graduation work (later PRs). This lands the
12
+ * resource at the observe position: emitted, reversible, nothing mutated.
13
+ */
14
+ import { existsSync, statSync, writeFileSync, mkdirSync } from "fs";
15
+ import { basename, join, resolve } from "path";
16
+ import { cdkNotSupported, isCloudAssembly } from "../../cdk/assembly.js";
17
+ import { parseTerraformDir, Hcl2JsonNotInstalled } from "../../terraform/parse.js";
18
+ import { boundaryReport, deferredParamName } from "../../terraform/carve.js";
19
+ import { carveEmitTypes, resolveTier } from "../../terraform/tier-map.js";
20
+ import { resolveEmitProvider } from "../../terraform/carve-provider.js";
21
+ import { readStateResource } from "../../terraform/state.js";
22
+ import { writeCarveManifest } from "../../terraform/manifest.js";
23
+ import { adoptFromState } from "../../terraform/adopt-state.js";
24
+ import { generateTsConfig, getChantVersion, SCAFFOLD_DEV_DEPENDENCIES } from "./init.js";
25
+ export async function carveEmit(opts, deps) {
26
+ if (!opts.from)
27
+ return { ok: false, error: "chant carve emit requires --from <terraform-dir>" };
28
+ if (!opts.select)
29
+ return { ok: false, error: "chant carve emit requires --select <tf-address>" };
30
+ // Adoption source: --state adopts offline from tfstate (correct for a
31
+ // Terraform-managed resource); --env adopts via the live cloud import path.
32
+ if (!opts.statePath && !opts.env) {
33
+ return { ok: false, error: "chant carve emit requires --state <tfstate> (offline, recommended) or --env <environment>" };
34
+ }
35
+ if (!existsSync(opts.from) || !statSync(opts.from).isDirectory()) {
36
+ return { ok: false, error: `Not a directory: ${opts.from}` };
37
+ }
38
+ if (isCloudAssembly(opts.from))
39
+ return { ok: false, error: cdkNotSupported(opts.from, "emit") };
40
+ let report;
41
+ let tfType;
42
+ try {
43
+ const graph = await parseTerraformDir(opts.from, { statePath: opts.statePath });
44
+ report = boundaryReport(graph, opts.select);
45
+ tfType = graph.nodes.find((n) => n.address === opts.select)?.type;
46
+ }
47
+ catch (err) {
48
+ if (err instanceof Hcl2JsonNotInstalled)
49
+ return { ok: false, error: err.message };
50
+ return { ok: false, error: `Failed to parse Terraform in ${opts.from}: ${err instanceof Error ? err.message : String(err)}` };
51
+ }
52
+ if (!report)
53
+ return { ok: false, error: `${opts.select} not found in ${opts.from}` };
54
+ if (!tfType || !resolveTier(tfType)) {
55
+ return {
56
+ ok: false,
57
+ error: `${opts.select} (${tfType ?? "unknown type"}) has no known native mapping, so it cannot be emitted. Advisor bands it "leave in Terraform".`,
58
+ };
59
+ }
60
+ // `carve advise` ranks every type a provider declares; emit produces source
61
+ // only for the ones that provider can adopt. Both adoption paths refuse the
62
+ // rest here — before any file is written or any cloud call is made — so
63
+ // neither path can proceed on a type the other rejects.
64
+ const provider = resolveEmitProvider(tfType);
65
+ if (!provider) {
66
+ return {
67
+ ok: false,
68
+ error: `${tfType} cannot be emitted yet (no carve provider adopts it).\n` +
69
+ `Supported types: ${carveEmitTypes().join(", ")}. ` +
70
+ `Coverage is expanding — see chant issue #1001.`,
71
+ };
72
+ }
73
+ if (opts.reportFile)
74
+ writeFileSync(opts.reportFile, JSON.stringify(report, null, 2));
75
+ // ── Adoption path 1: from .tfstate (offline, correct for TF-managed) ──
76
+ if (opts.statePath) {
77
+ const stateResource = readStateResource(opts.statePath, opts.select);
78
+ if (!stateResource) {
79
+ return { ok: false, error: `${opts.select} not found in state ${opts.statePath} (or is a data source / module-nested).` };
80
+ }
81
+ // Deferred outbound inputs → real build parameters (#998): each survivor
82
+ // value the carved block read enters the emitted project as a declared
83
+ // param, defaulted to the value the state resolved.
84
+ const params = deferredParams(report, stateResource.attributes);
85
+ // The carve set's folded sub-resources come out of the same state file:
86
+ // their mappable attributes belong in the parent's emitted props (#1637).
87
+ const folded = report.carveSet
88
+ .filter((m) => m.foldedInto)
89
+ .map((m) => readStateResource(opts.statePath, m.address))
90
+ .filter((r) => r !== null);
91
+ const adopted = adoptFromState(stateResource, params, folded);
92
+ if (!adopted)
93
+ return { ok: false, error: `Could not adopt ${opts.select} from state.` };
94
+ // The output dir is a buildable chant project: source in src/, plus the
95
+ // config + package.json scaffold (written once, never overwritten).
96
+ const outDir = opts.output ?? join(opts.from, "carveout");
97
+ const srcDir = join(outDir, "src");
98
+ mkdirSync(srcDir, { recursive: true });
99
+ const outPath = join(srcDir, adopted.fileName);
100
+ writeFileSync(outPath, adopted.content);
101
+ const scaffolded = scaffoldProject(outDir, provider.lexicon, params);
102
+ const manifestPath = persistManifest(outDir, opts, report, tfType, "tfstate", [outPath], params);
103
+ return {
104
+ ok: true,
105
+ report,
106
+ source: "tfstate",
107
+ emittedFiles: [outPath],
108
+ scaffolded,
109
+ manifestPath,
110
+ params,
111
+ folded: adopted.folded,
112
+ };
113
+ }
114
+ // ── Adoption path 2: live import (cloud→code) ──
115
+ // The provider names the selector type its live export filters on — for aws a
116
+ // CloudFormation type, filtered by logical ID rather than the Terraform
117
+ // physical name, so `--live-name` (not `identity`) is what narrows a stack
118
+ // holding several of that type.
119
+ const selectorType = provider.liveSelectorType?.(tfType);
120
+ if (!selectorType) {
121
+ return {
122
+ ok: false,
123
+ error: `${tfType} has no live adoption path — the ${provider.name} carve provider adopts it from state only.\n` +
124
+ `Re-run with --state <tfstate>.`,
125
+ };
126
+ }
127
+ const selector = opts.liveName
128
+ ? { type: selectorType, name: opts.liveName }
129
+ : { type: selectorType };
130
+ const emit = await deps.liveImport(deps.plugins, {
131
+ environment: opts.env,
132
+ selector,
133
+ output: opts.output,
134
+ lexicon: provider.lexicon,
135
+ });
136
+ // A failed import emitted no source. Reporting success here would write a
137
+ // carve manifest that `carve bridge` composes from, and bridge excises the
138
+ // survivor's `.tf` block for the resource — so the estate would lose a
139
+ // declaration that was never adopted. Fail, and persist nothing.
140
+ if (!emit.success) {
141
+ return {
142
+ ok: false,
143
+ error: `Live import of ${selector.type} from ${opts.env} failed: ${emit.error ?? "no error reported"}\n` +
144
+ `Nothing was emitted and no carve manifest was written.`,
145
+ report,
146
+ emit,
147
+ selector,
148
+ source: "live",
149
+ };
150
+ }
151
+ const outDir = opts.output ?? join(opts.from, "carveout");
152
+ const manifestPath = persistManifest(outDir, opts, report, tfType, "live", emit.generatedFiles ?? []);
153
+ return { ok: true, report, emit, selector, source: "live", emittedFiles: emit.generatedFiles, manifestPath };
154
+ }
155
+ /**
156
+ * Turn the boundary report's outbound edges into build parameters (#998): one
157
+ * per carved-block attribute that read a survivor (`via`), named after that
158
+ * attribute, defaulted to the value the state resolved for it. A non-scalar
159
+ * value (a nested block) is declared without a default (`required: false`) —
160
+ * it documents the deferred input without blocking an out-of-the-box build.
161
+ */
162
+ function deferredParams(report, attributes) {
163
+ const byName = new Map();
164
+ for (const edge of report.outbound) {
165
+ for (const tfAttr of edge.via ?? []) {
166
+ const name = deferredParamName(tfAttr);
167
+ const raw = attributes[tfAttr];
168
+ const scalar = typeof raw === "string" || typeof raw === "number" || typeof raw === "boolean" ? raw : undefined;
169
+ const prev = byName.get(name);
170
+ byName.set(name, {
171
+ name,
172
+ tfAttr,
173
+ survivor: prev && prev.survivor !== edge.survivor ? `${prev.survivor}, ${edge.survivor}` : edge.survivor,
174
+ attrs: [...new Set([...(prev?.attrs ?? []), ...edge.attrs])].sort(),
175
+ default: scalar,
176
+ });
177
+ }
178
+ }
179
+ return [...byName.values()].sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));
180
+ }
181
+ /**
182
+ * Scaffold the emitted source into a buildable chant project: chant.config.ts,
183
+ * package.json, tsconfig.json, with the tsconfig and devDependencies `chant init`
184
+ * writes (#3233), so `npm install && npm run build` works in the output dir as-is. Existing files
185
+ * are never overwritten (re-emits and user edits survive). Deferred inputs are
186
+ * declared as `buildParams` (#998), defaults taken from the state's resolved
187
+ * values, so the first build reproduces what is live while every survivor-fed
188
+ * value stays overridable (`--param <name>=<value>`).
189
+ */
190
+ function scaffoldProject(outDir, lexicon, params = []) {
191
+ const ver = getChantVersion();
192
+ const packageJson = {
193
+ name: "chant-carveout",
194
+ version: "0.1.0",
195
+ type: "module",
196
+ scripts: {
197
+ build: `chant build src --lexicon ${lexicon}`,
198
+ lint: "chant lint src",
199
+ },
200
+ dependencies: {
201
+ "@intentius/chant": `^${ver}`,
202
+ [`@intentius/chant-lexicon-${lexicon}`]: `^${ver}`,
203
+ },
204
+ devDependencies: { ...SCAFFOLD_DEV_DEPENDENCIES },
205
+ };
206
+ const files = [
207
+ ["package.json", JSON.stringify(packageJson, null, 2) + "\n"],
208
+ ["chant.config.ts", renderConfig(lexicon, params)],
209
+ ["tsconfig.json", generateTsConfig() + "\n"],
210
+ ];
211
+ const written = [];
212
+ for (const [name, content] of files) {
213
+ const path = join(outDir, name);
214
+ if (existsSync(path))
215
+ continue;
216
+ writeFileSync(path, content);
217
+ written.push(path);
218
+ }
219
+ return written;
220
+ }
221
+ /** Render the scaffolded `chant.config.ts`, declaring deferred inputs as `buildParams` (#998). */
222
+ function renderConfig(lexicon, params) {
223
+ const L = [];
224
+ L.push(`import type { ChantConfig } from "@intentius/chant";`);
225
+ L.push("");
226
+ L.push("export default {");
227
+ L.push(` lexicons: ["${lexicon}"],`);
228
+ if (params.length) {
229
+ L.push(" // Deferred deploy-time inputs — values the Terraform source read from");
230
+ L.push(" // surviving resources. Defaults are the values the tfstate resolved;");
231
+ L.push(" // override per build with --param <name>=<value>.");
232
+ L.push(" buildParams: {");
233
+ for (const p of params) {
234
+ const type = typeof p.default === "number" ? "number" : typeof p.default === "boolean" ? "boolean" : "string";
235
+ L.push(` ${p.name}: {`);
236
+ L.push(` type: ${JSON.stringify(type)},`);
237
+ if (p.default !== undefined) {
238
+ L.push(` default: ${JSON.stringify(p.default)},`);
239
+ }
240
+ else {
241
+ L.push(` required: false,`);
242
+ }
243
+ L.push(` description: ${JSON.stringify(`was ${p.survivor}.${p.attrs.join("/")} in Terraform (deferred deploy-time input)`)},`);
244
+ L.push(" },");
245
+ }
246
+ L.push(" },");
247
+ }
248
+ L.push("} satisfies ChantConfig;");
249
+ return L.join("\n") + "\n";
250
+ }
251
+ /** Persist the carve state manifest so bridge/apply compose with this emit. */
252
+ function persistManifest(outDir, opts, report, tfType, source, files, params = []) {
253
+ const manifest = {
254
+ version: 1,
255
+ target: report.target,
256
+ tfType,
257
+ from: resolve(opts.from),
258
+ statePath: opts.statePath ? resolve(opts.statePath) : undefined,
259
+ boundary: report,
260
+ emit: {
261
+ source,
262
+ files: files.map((f) => resolve(f)),
263
+ params: params.length
264
+ ? Object.fromEntries(params.map((p) => [p.name, { tfAttr: p.tfAttr, survivor: p.survivor, attrs: p.attrs, default: p.default }]))
265
+ : undefined,
266
+ at: new Date().toISOString(),
267
+ },
268
+ };
269
+ return writeCarveManifest(outDir, manifest);
270
+ }
271
+ /** Human-readable emit summary: what was adopted and what boundary work remains. */
272
+ export function formatCarveEmit(result) {
273
+ if (!result.ok || !result.report)
274
+ return result.error ?? "carve emit failed";
275
+ const r = result.report;
276
+ const lines = [];
277
+ lines.push(`Carved ${r.target} (peelability ${r.peelability}) — observe position, reversible.`);
278
+ if (result.source === "tfstate") {
279
+ lines.push(" Adopted from Terraform state (offline).");
280
+ }
281
+ else if (result.selector) {
282
+ const named = result.selector.name ? ` (logical id "${result.selector.name}")` : "";
283
+ lines.push(` Adopted live as ${result.selector.type}${named}.`);
284
+ }
285
+ if (result.emittedFiles?.length) {
286
+ lines.push(` Emitted: ${result.emittedFiles.join(", ")}`);
287
+ }
288
+ if (result.scaffolded?.length) {
289
+ lines.push(` Scaffolded a buildable chant project: ${result.scaffolded.map((f) => basename(f)).join(", ")} (npm install && npm run build).`);
290
+ }
291
+ if (result.params?.length) {
292
+ lines.push(` Deferred input(s) declared as build params (override with --param <name>=<value>):`);
293
+ for (const p of result.params) {
294
+ const def = p.default !== undefined ? `default ${JSON.stringify(p.default)} from state` : "no default (required: false)";
295
+ lines.push(` ${p.name} — was ${p.survivor}.${p.attrs.join("/")}; ${def}`);
296
+ }
297
+ }
298
+ if (result.manifestPath) {
299
+ lines.push(` State manifest: ${result.manifestPath} — carve bridge/apply pick the target up from here.`);
300
+ }
301
+ if (r.carveSet.length > 1) {
302
+ // Say what each fold actually contributed — announcing the fold without the
303
+ // properties was the bug behind #1637.
304
+ const contributed = new Map((result.folded ?? []).map((f) => [f.address, f.props]));
305
+ const folded = r.carveSet
306
+ .filter((m) => m.foldedInto)
307
+ .map((m) => {
308
+ const props = contributed.get(m.address);
309
+ if (props === undefined)
310
+ return m.address;
311
+ return props.length ? `${m.address} (${props.join(", ")})` : `${m.address} (nothing mappable)`;
312
+ });
313
+ lines.push(` Folded in: ${folded.join(", ")}`);
314
+ }
315
+ lines.push("");
316
+ lines.push("Boundary (not yet patched — that is `carve bridge`, the next step):");
317
+ if (r.inbound.length === 0 && r.outbound.length === 0) {
318
+ lines.push(" none — a clean leaf, nothing depends on it and it depends on nothing.");
319
+ }
320
+ for (const e of r.inbound) {
321
+ lines.push(` inbound ${e.survivor} reads ${e.attrs.join(", ")} → rewrite to a data source (required immediately)`);
322
+ }
323
+ for (const e of r.outbound) {
324
+ lines.push(` outbound ${e.carved} reads ${e.survivor}.${e.attrs.join(", ")} → deferred deploy-time input (at apply)`);
325
+ }
326
+ if (r.diagnostics.length) {
327
+ lines.push("");
328
+ for (const d of r.diagnostics)
329
+ lines.push(` ! ${d}`);
330
+ }
331
+ return lines.join("\n");
332
+ }
@@ -0,0 +1,119 @@
1
+ /**
2
+ * `chant carve status` — the read over a tree of carve manifests (#2038).
3
+ *
4
+ * emit → bridge → apply each persist their step into `<target>.carve.json`
5
+ * (./../../terraform/manifest.ts), but until now nothing read that state back
6
+ * over more than one output dir at a time: a renderer wanting "what carves
7
+ * exist under this project, and how far along is each" had to walk the tree
8
+ * itself and guess at depth. This makes the walk a contract: recurse from
9
+ * `--from` (default: cwd), read every manifest the way bridge/apply's own
10
+ * `resolveCarveManifest` reads one, and answer with each manifest's target,
11
+ * stage, and path. Read-only — it writes nothing and touches no live resource.
12
+ */
13
+ import { existsSync, readdirSync, statSync } from "fs";
14
+ import { join, relative, resolve } from "path";
15
+ import { CARVE_MANIFEST_SUFFIX, readCarveManifest, } from "../../terraform/manifest.js";
16
+ /**
17
+ * Directories that never hold a carve output dir and make the walk expensive
18
+ * or wrong: dependency trees, VCS internals, build output.
19
+ */
20
+ const SKIP_DIRS = new Set(["node_modules", ".git", "dist", ".chant"]);
21
+ /** Every `*.carve.json` under `root`, found by a bounded recursive walk. */
22
+ function findManifests(root) {
23
+ const found = [];
24
+ const walk = (dir) => {
25
+ let entries;
26
+ try {
27
+ entries = readdirSync(dir);
28
+ }
29
+ catch {
30
+ return; // unreadable dir — skip rather than fail the whole status
31
+ }
32
+ for (const entry of entries.sort()) {
33
+ if (SKIP_DIRS.has(entry))
34
+ continue;
35
+ const path = join(dir, entry);
36
+ let stat;
37
+ try {
38
+ stat = statSync(path);
39
+ }
40
+ catch {
41
+ continue; // dangling symlink
42
+ }
43
+ if (stat.isDirectory())
44
+ walk(path);
45
+ else if (entry.endsWith(CARVE_MANIFEST_SUFFIX))
46
+ found.push(path);
47
+ }
48
+ };
49
+ walk(root);
50
+ return found;
51
+ }
52
+ function stageOf(manifest) {
53
+ if (manifest.apply)
54
+ return "applied";
55
+ if (manifest.bridge)
56
+ return "bridged";
57
+ if (manifest.emit)
58
+ return "emitted";
59
+ return "planned";
60
+ }
61
+ export function carveStatus(opts = {}) {
62
+ const root = resolve(opts.from ?? process.cwd());
63
+ if (!existsSync(root) || !statSync(root).isDirectory()) {
64
+ return { ok: false, error: `Not a directory: ${root}` };
65
+ }
66
+ const carves = [];
67
+ const unreadable = [];
68
+ for (const path of findManifests(root)) {
69
+ const rel = relative(root, path);
70
+ const manifest = readCarveManifest(path);
71
+ if (!manifest) {
72
+ unreadable.push(rel);
73
+ continue;
74
+ }
75
+ carves.push({
76
+ path: rel,
77
+ target: manifest.target,
78
+ ...(manifest.tfType ? { tfType: manifest.tfType } : {}),
79
+ stage: stageOf(manifest),
80
+ at: {
81
+ ...(manifest.emit?.at ? { emit: manifest.emit.at } : {}),
82
+ ...(manifest.bridge?.at ? { bridge: manifest.bridge.at } : {}),
83
+ ...(manifest.apply?.at ? { apply: manifest.apply.at } : {}),
84
+ },
85
+ ...(manifest.emit ? { emittedFiles: manifest.emit.files } : {}),
86
+ });
87
+ }
88
+ return { ok: true, from: root, carves, ...(unreadable.length > 0 ? { unreadable } : {}) };
89
+ }
90
+ /** The JSON payload `--json` emits — everything but `ok`. */
91
+ export function carveStatusJson(result) {
92
+ return {
93
+ from: result.from,
94
+ carves: result.carves ?? [],
95
+ ...(result.unreadable ? { unreadable: result.unreadable } : {}),
96
+ };
97
+ }
98
+ export function formatCarveStatus(result) {
99
+ const carves = result.carves ?? [];
100
+ if (carves.length === 0) {
101
+ return `No carve manifests under ${result.from} — run \`chant carve emit\` first.`;
102
+ }
103
+ const L = [];
104
+ L.push(`${carves.length} carve${carves.length === 1 ? "" : "s"} under ${result.from}`);
105
+ L.push("");
106
+ for (const row of carves) {
107
+ const when = row.at.apply ?? row.at.bridge ?? row.at.emit;
108
+ L.push(` ${row.target} [${row.stage}${when ? ` @ ${when}` : ""}]`);
109
+ L.push(` manifest: ${row.path}`);
110
+ if (row.emittedFiles && row.emittedFiles.length > 0) {
111
+ L.push(` emitted: ${row.emittedFiles.join(", ")}`);
112
+ }
113
+ }
114
+ if (result.unreadable && result.unreadable.length > 0) {
115
+ L.push("");
116
+ L.push(` Unreadable (malformed or unknown version): ${result.unreadable.join(", ")}`);
117
+ }
118
+ return L.join("\n");
119
+ }
@@ -0,0 +1,204 @@
1
+ /**
2
+ * `chant carve advise` — the read-only peelability advisor (#214, #1056).
3
+ *
4
+ * Points at foreign infrastructure and reports which pieces are cheap to carve
5
+ * into native chant later and which should stay where they are. It emits
6
+ * nothing, patches nothing, and touches no live resource — pure analysis. The
7
+ * emit/boundary/apply phases (`carve emit|bridge|apply`, #197) read Terraform
8
+ * only, and refuse a cloud assembly by name.
9
+ *
10
+ * Two sources, one report. A Terraform estate is parsed from `.tf`; a CDK cloud
11
+ * assembly is read from `cdk.out` (#1056). Which one is in `--from` is decided
12
+ * by looking, not by a second flag: a directory holding `manifest.json` plus a
13
+ * synthesized `*.template.json` is an assembly. Both produce the same bands,
14
+ * the same score arithmetic, and the same JSON shape.
15
+ */
16
+ import { existsSync, statSync, writeFileSync } from "fs";
17
+ import { adviseCloudAssembly, CDK_DIALECT } from "../../cdk/advise.js";
18
+ import { isCloudAssembly } from "../../cdk/assembly.js";
19
+ import { parseTerraformDir, Hcl2JsonNotInstalled } from "../../terraform/parse.js";
20
+ import { scoreEstate } from "../../terraform/score.js";
21
+ import { boundaryReport } from "../../terraform/carve.js";
22
+ const BAND_ORDER = ["clean leaf", "carvable w/ edits", "leave in Terraform"];
23
+ export async function carveAdvise(opts) {
24
+ if (!opts.from) {
25
+ return { ok: false, error: "chant carve advise requires --from <terraform-dir | cdk.out>" };
26
+ }
27
+ if (!existsSync(opts.from) || !statSync(opts.from).isDirectory()) {
28
+ return { ok: false, error: `Not a directory: ${opts.from}` };
29
+ }
30
+ const result = isCloudAssembly(opts.from) ? adviseCdk(opts) : await adviseTerraform(opts);
31
+ if (result.ok && opts.reportFile) {
32
+ writeFileSync(opts.reportFile, JSON.stringify(carveJson(result), null, 2));
33
+ }
34
+ return result;
35
+ }
36
+ /** Rank a CDK cloud assembly. No parser to install, no state file to read. */
37
+ function adviseCdk(opts) {
38
+ if (opts.statePath) {
39
+ return {
40
+ ok: false,
41
+ error: `${opts.from} is a CDK cloud assembly, and --state is a Terraform option. ` +
42
+ "A synthesized template already carries its own instance counts.",
43
+ };
44
+ }
45
+ try {
46
+ const advice = adviseCloudAssembly(opts.from);
47
+ return {
48
+ ok: true,
49
+ from: opts.from,
50
+ source: "cdk",
51
+ results: advice.results,
52
+ graph: advice.graph,
53
+ scoreOptions: advice.scoreOptions,
54
+ diagnostics: advice.diagnostics,
55
+ };
56
+ }
57
+ catch (err) {
58
+ return {
59
+ ok: false,
60
+ error: `Failed to read the CDK cloud assembly in ${opts.from}: ${err instanceof Error ? err.message : String(err)}`,
61
+ };
62
+ }
63
+ }
64
+ async function adviseTerraform(opts) {
65
+ if (opts.statePath && !existsSync(opts.statePath)) {
66
+ return { ok: false, error: `State file not found: ${opts.statePath}` };
67
+ }
68
+ try {
69
+ const graph = await parseTerraformDir(opts.from, { statePath: opts.statePath });
70
+ return { ok: true, from: opts.from, source: "terraform", results: scoreEstate(graph), graph };
71
+ }
72
+ catch (err) {
73
+ if (err instanceof Hcl2JsonNotInstalled)
74
+ return { ok: false, error: err.message };
75
+ return { ok: false, error: `Failed to parse Terraform in ${opts.from}: ${err instanceof Error ? err.message : String(err)}` };
76
+ }
77
+ }
78
+ /**
79
+ * The schema version of the `--json` / `--report` payload (#1636).
80
+ *
81
+ * The report is a cross-tool contract — behold renders it as a graph — so it
82
+ * says which shape it is. The promise attached to this number:
83
+ *
84
+ * - **Additive within a version.** New top-level fields, new per-resource
85
+ * fields, new kinds of entry in an existing list, and new values in an
86
+ * open-ended enum (a `bridge` kind, say) may appear in any release. A
87
+ * reader must ignore keys and values it does not know.
88
+ * - **A removal, a rename, or a changed meaning bumps it.** So does narrowing
89
+ * a field's type (an optional becoming required is additive; the reverse is
90
+ * not).
91
+ * - A reader that does not know the version it is handed should refuse the
92
+ * report rather than half-read it.
93
+ *
94
+ * The CDK source (#1056) stays inside that promise and does not bump the
95
+ * version. Every field an existing reader keys on keeps its type and meaning:
96
+ * `address` is still an opaque string identifier (a construct path instead of a
97
+ * Terraform address), `kind` is still `"resource"` or `"module"` (an L3
98
+ * construct subtree is a Composite candidate, which is what `module` already
99
+ * means), `score`/`band`/`breakdown` are the same arithmetic. What is new is
100
+ * additive and ignorable: the top-level `source` discriminator, per-resource
101
+ * `notes` and `members`, and two more `bridge` values in a list that was
102
+ * already declared open-ended.
103
+ */
104
+ export const CARVE_REPORT_VERSION = 1;
105
+ /** Build the `--json` / `--report` payload. */
106
+ export function carveJson(result) {
107
+ const results = result.results ?? [];
108
+ const counts = Object.fromEntries(BAND_ORDER.map((b) => [b, results.filter((r) => r.band === b).length]));
109
+ const source = result.source ?? "terraform";
110
+ const dialect = source === "cdk" ? CDK_DIALECT : "terraform";
111
+ return {
112
+ version: CARVE_REPORT_VERSION,
113
+ from: result.from,
114
+ source,
115
+ advisory: "read-only — emits nothing, patches nothing, touches no live resource",
116
+ count: results.length,
117
+ bands: counts,
118
+ ...(result.diagnostics?.length ? { diagnostics: result.diagnostics } : {}),
119
+ resources: results.map((r) => withBoundary(r, result.graph, dialect, result.scoreOptions)),
120
+ };
121
+ }
122
+ /** A scored resource plus its carve boundary, when the graph is at hand (#1636). */
123
+ function withBoundary(r, graph, dialect, score) {
124
+ if (!graph)
125
+ return r;
126
+ const report = boundaryReport(graph, r.address, { dialect, score });
127
+ if (!report)
128
+ return r;
129
+ return { ...r, boundary: { inbound: report.inbound, outbound: report.outbound } };
130
+ }
131
+ /** Human-readable banded, ranked summary. */
132
+ export function formatCarveReport(result) {
133
+ const results = result.results ?? [];
134
+ const source = result.source ?? "terraform";
135
+ const cdk = source === "cdk";
136
+ if (results.length === 0) {
137
+ return cdk
138
+ ? `No carvable constructs found in ${result.from}\n(the assembly synthesized no infrastructure beyond CDK's own scaffolding).`
139
+ : `No carvable resources found in ${result.from}\n(only data sources, providers, or unsupported types were present).`;
140
+ }
141
+ const lines = [];
142
+ lines.push(`${cdk ? "CDK cloud-assembly" : "Terraform"} carve-out advisory for ${result.from}`);
143
+ lines.push(` ${results.length} ${cdk ? "construct(s)" : "resource(s)/module(s)"} scored. ` +
144
+ "Advises only — nothing is emitted or changed.");
145
+ for (const note of result.diagnostics ?? [])
146
+ lines.push(` ! ${note}`);
147
+ lines.push("");
148
+ for (const band of BAND_ORDER) {
149
+ const inBand = results.filter((r) => r.band === band);
150
+ if (inBand.length === 0)
151
+ continue;
152
+ lines.push(`${bandLabel(band, cdk)} (${inBand.length})`);
153
+ for (const r of inBand) {
154
+ const target = r.mapsTo ? ` -> ${r.mapsTo}` : "";
155
+ lines.push(` ${String(r.score).padStart(3)} ${r.address}${target}`);
156
+ lines.push(` ${reasons(r, cdk)}`);
157
+ for (const note of r.notes ?? [])
158
+ lines.push(` ${note}`);
159
+ }
160
+ lines.push("");
161
+ }
162
+ lines.push(`Bands: 80-100 carve now | 50-79 carve with boundary edits | 0-49 leave in ${cdk ? "CDK" : "Terraform"}`);
163
+ return lines.join("\n").trimEnd();
164
+ }
165
+ function bandLabel(band, cdk) {
166
+ switch (band) {
167
+ case "clean leaf":
168
+ return "CLEAN LEAF — carve now";
169
+ case "carvable w/ edits":
170
+ return "CARVABLE — has boundary work";
171
+ case "leave in Terraform":
172
+ // The band's name is part of the JSON contract and does not change per
173
+ // source; only the heading a person reads does.
174
+ return cdk ? "LEAVE IN CDK" : "LEAVE IN TERRAFORM";
175
+ }
176
+ }
177
+ /** One-line explanation of what drove a score, from its breakdown. */
178
+ function reasons(r, cdk = false) {
179
+ const b = r.breakdown;
180
+ if (b.tier === null) {
181
+ return cdk ? "no chant AWS lexicon target for this type" : "no known native mapping (unsupported provider/type)";
182
+ }
183
+ // A node that scored 0 with every penalty at 0 was disqualified outright, not
184
+ // scored down. Reciting the arithmetic would credit terms that never applied;
185
+ // the stated reason follows on the next line.
186
+ if (r.score === 0 && Object.values(b.penalties).every((p) => p === 0))
187
+ return "not carvable as it stands";
188
+ const parts = [];
189
+ if (b.inbound)
190
+ parts.push(`${b.inbound} inbound (${cdk ? "a reimport each" : "data-source patch each"})`);
191
+ if (b.outputs)
192
+ parts.push(`${b.outputs} ${cdk ? "stack output(s)" : "output block(s)"} reading it (one-line rewrite each)`);
193
+ if (b.outbound)
194
+ parts.push(`${b.outbound} outbound (deferred input each)`);
195
+ if (b.tier > 1)
196
+ parts.push(`tier ${b.tier} map`);
197
+ if (b.hasDynamic)
198
+ parts.push(cdk ? "condition/parameter present" : "count/for_each/data present");
199
+ if (b.instances > 1)
200
+ parts.push(`${b.instances} instances`);
201
+ if (b.penalties.asset)
202
+ parts.push("asset-backed");
203
+ return parts.length ? parts.join(", ") : "clean 1:1 native map, no boundary edges";
204
+ }