@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,184 @@
1
+ import { spawn } from "node:child_process";
2
+ /** Graphviz's default node box, in layout units — the fallback for a node the
3
+ * painter didn't measure, so a size-less call still lays out as it always did. */
4
+ export const DEFAULT_NODE_SIZE = { w: 54, h: 36 };
5
+ /** Spacing between adjacent nodes / ranks for the JS engine, in layout units. */
6
+ const NODE_SEP = 28;
7
+ const RANK_SEP = 44;
8
+ /** Build engine input from an IR and a painter-measured size map (id → {w,h}).
9
+ * Nodes absent from the map fall back to {@link DEFAULT_NODE_SIZE}. Pure. */
10
+ export function toLayoutInput(ir, sizes = {}) {
11
+ return {
12
+ nodes: ir.nodes.map((n) => ({ id: n.id, ...(sizes[n.id] ?? DEFAULT_NODE_SIZE) })),
13
+ edges: ir.edges.map((e) => ({ from: e.from, to: e.to })),
14
+ groups: ir.groups?.byLexicon,
15
+ };
16
+ }
17
+ /** Drop duplicate / self edges — layout cares about structure, not multiplicity. */
18
+ function layoutEdges(input) {
19
+ const seen = new Set();
20
+ const out = [];
21
+ for (const e of input.edges) {
22
+ if (e.from === e.to)
23
+ continue;
24
+ const key = `${e.from}\u0000${e.to}`;
25
+ if (seen.has(key))
26
+ continue;
27
+ seen.add(key);
28
+ out.push(e);
29
+ }
30
+ out.sort((a, b) => a.from.localeCompare(b.from) || a.to.localeCompare(b.to));
31
+ return out;
32
+ }
33
+ /**
34
+ * Layout via dagre — pure JS, size-aware, no native dependency. The default.
35
+ * Fed nodes/edges in id order so the result is deterministic. dagre's space is
36
+ * y-down; we flip to y-up so the {@link Layout} contract matches Graphviz.
37
+ */
38
+ export class DagreLayout {
39
+ constructor() {
40
+ this.name = "dagre";
41
+ }
42
+ async layout(input) {
43
+ const dagre = (await import("@dagrejs/dagre")).default;
44
+ const g = new dagre.graphlib.Graph();
45
+ g.setGraph({ rankdir: "TB", nodesep: NODE_SEP, ranksep: RANK_SEP });
46
+ g.setDefaultEdgeLabel(() => ({}));
47
+ const nodes = [...input.nodes].sort((a, b) => a.id.localeCompare(b.id));
48
+ for (const n of nodes)
49
+ g.setNode(n.id, { width: n.w, height: n.h });
50
+ for (const e of layoutEdges(input)) {
51
+ if (g.hasNode(e.from) && g.hasNode(e.to))
52
+ g.setEdge(e.from, e.to);
53
+ }
54
+ dagre.layout(g);
55
+ const gg = g.graph();
56
+ const width = gg.width ?? 0;
57
+ const height = gg.height ?? 0;
58
+ if (width === 0 || height === 0)
59
+ throw new Error("zero graph bounds");
60
+ const out = g.nodes().map((id) => {
61
+ const n = g.node(id);
62
+ return { id, x: n.x, y: height - n.y, w: n.width, h: n.height };
63
+ });
64
+ out.sort((a, b) => a.id.localeCompare(b.id));
65
+ return { width, height, nodes: out };
66
+ }
67
+ }
68
+ /** Layout via `dot -Tjson`. Opt-in; requires Graphviz (`brew install graphviz`).
69
+ * Lays out with real node sizes (`fixedsize`) and honours `groups` as clusters. */
70
+ export class GraphvizLayout {
71
+ constructor() {
72
+ this.name = "graphviz";
73
+ }
74
+ async layout(input) {
75
+ return parseDotJson(await runDot(inputToDot(input)));
76
+ }
77
+ }
78
+ /** Resolve a layout engine by name. Defaults to dagre (no native dependency). */
79
+ export function getLayoutEngine(name) {
80
+ if (name === "graphviz")
81
+ return new GraphvizLayout();
82
+ if (name && name !== "dagre") {
83
+ throw new Error(`unknown layout engine "${name}". Available: dagre (default), graphviz.`);
84
+ }
85
+ return new DagreLayout();
86
+ }
87
+ /** Build the DOT for a layout pass: real node footprints via `fixedsize`, so
88
+ * `dot` spaces for the painted size rather than its tiny default box. */
89
+ function inputToDot(input) {
90
+ const lines = ["digraph chant {", " rankdir=TB;", " node [shape=box, fixedsize=true];"];
91
+ const byId = new Map(input.nodes.map((n) => [n.id, n]));
92
+ const grouped = new Set();
93
+ if (input.groups) {
94
+ for (const [group, members] of Object.entries(input.groups)) {
95
+ lines.push(` subgraph ${q(`cluster_${group}`)} {`);
96
+ for (const id of members) {
97
+ const n = byId.get(id);
98
+ if (!n)
99
+ continue;
100
+ grouped.add(id);
101
+ lines.push(` ${dotNode(n)}`);
102
+ }
103
+ lines.push(" }");
104
+ }
105
+ }
106
+ for (const n of input.nodes) {
107
+ if (!grouped.has(n.id))
108
+ lines.push(` ${dotNode(n)}`);
109
+ }
110
+ for (const e of layoutEdges(input))
111
+ lines.push(` ${q(e.from)} -> ${q(e.to)};`);
112
+ lines.push("}");
113
+ return lines.join("\n") + "\n";
114
+ }
115
+ /** A DOT node line. `dot` sizes are inches; layout units are points (72/inch). */
116
+ function dotNode(n) {
117
+ return `${q(n.id)} [width=${(n.w / 72).toFixed(4)}, height=${(n.h / 72).toFixed(4)}];`;
118
+ }
119
+ function q(s) {
120
+ return `"${s.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
121
+ }
122
+ function runDot(dot) {
123
+ return new Promise((resolve, reject) => {
124
+ let proc;
125
+ try {
126
+ proc = spawn("dot", ["-Tjson"], { stdio: ["pipe", "pipe", "pipe"] });
127
+ }
128
+ catch (err) {
129
+ reject(installHint(err));
130
+ return;
131
+ }
132
+ let out = "";
133
+ let errOut = "";
134
+ proc.stdout.on("data", (d) => (out += d));
135
+ proc.stderr.on("data", (d) => (errOut += d));
136
+ proc.on("error", (err) => reject(installHint(err)));
137
+ proc.on("close", (code) => {
138
+ if (code !== 0)
139
+ reject(new Error(`dot exited ${code}: ${errOut.trim()}`));
140
+ else
141
+ resolve(out);
142
+ });
143
+ proc.stdin.write(dot);
144
+ proc.stdin.end();
145
+ });
146
+ }
147
+ function installHint(err) {
148
+ const msg = err instanceof Error ? err.message : String(err);
149
+ return new Error(`could not run 'dot' (${msg}). Graphviz is required for --layout-engine graphviz — ` +
150
+ `install it with 'brew install graphviz', or drop the flag to use the default dagre engine ` +
151
+ `(no native dependency).`);
152
+ }
153
+ /** Parse `dot -Tjson` output into a {@link Layout}. Pure; exported for testing. */
154
+ export function parseDotJson(json) {
155
+ const parsed = JSON.parse(json);
156
+ const bb = (parsed.bb ?? "").split(",");
157
+ if (bb.length !== 4)
158
+ throw new Error(`bad bounding box ${parsed.bb}`);
159
+ const width = num(bb[2]);
160
+ const height = num(bb[3]);
161
+ if (width === 0 || height === 0)
162
+ throw new Error("zero graph bounds");
163
+ const nodes = [];
164
+ for (const o of parsed.objects ?? []) {
165
+ if (!o.name || !o.pos)
166
+ continue;
167
+ const p = o.pos.split(",");
168
+ if (p.length !== 2)
169
+ continue;
170
+ const node = { id: o.name, x: num(p[0]), y: num(p[1]) };
171
+ // dot reports width/height in inches; echo as layout units (points).
172
+ if (o.width)
173
+ node.w = num(o.width) * 72;
174
+ if (o.height)
175
+ node.h = num(o.height) * 72;
176
+ nodes.push(node);
177
+ }
178
+ nodes.sort((a, b) => a.id.localeCompare(b.id));
179
+ return { width, height, nodes };
180
+ }
181
+ function num(s) {
182
+ const f = Number.parseFloat(s.trim());
183
+ return Number.isFinite(f) ? f : 0;
184
+ }
@@ -0,0 +1,105 @@
1
+ const KINDS = new Set(["lexicon", "stack", "blast"]);
2
+ /** Parse a `--lens` spec. Throws a descriptive Error on a malformed spec. */
3
+ export function parseLens(spec, opts = {}) {
4
+ const colon = spec.indexOf(":");
5
+ if (colon <= 0 || colon === spec.length - 1) {
6
+ throw new Error(`Invalid --lens "${spec}". Expected <kind>:<target>, e.g. lexicon:gcp or blast:vpc.`);
7
+ }
8
+ const kind = spec.slice(0, colon);
9
+ const target = spec.slice(colon + 1);
10
+ if (!KINDS.has(kind)) {
11
+ throw new Error(`Unknown lens "${kind}". Expected one of: ${[...KINDS].join(", ")}.`);
12
+ }
13
+ // For blast, default to both directions when neither flag is given.
14
+ const both = !opts.up && !opts.down;
15
+ return {
16
+ kind: kind,
17
+ target,
18
+ up: opts.up ?? both,
19
+ down: opts.down ?? both,
20
+ };
21
+ }
22
+ /** Apply a lens to the IR. Throws a descriptive Error when the target matches nothing. */
23
+ export function applyLens(ir, lens) {
24
+ const keep = lens.kind === "blast" ? blastSet(ir, lens) : partitionSet(ir, lens);
25
+ return subgraph(ir, keep);
26
+ }
27
+ /** Node ids for a lexicon/stack lens. */
28
+ function partitionSet(ir, lens) {
29
+ if (lens.kind === "stack") {
30
+ const members = ir.groups.byStack?.[lens.target] ?? ir.groups.byLexicon?.[lens.target];
31
+ if (members && members.length)
32
+ return new Set(members);
33
+ // Fall through to a direct scan if groups are absent.
34
+ }
35
+ const keep = new Set();
36
+ for (const n of ir.nodes)
37
+ if (n.lexicon === lens.target)
38
+ keep.add(n.id);
39
+ if (keep.size === 0) {
40
+ throw new Error(`No nodes match lens ${lens.kind}:${lens.target}.`);
41
+ }
42
+ return keep;
43
+ }
44
+ /** Node ids in the transitive neighbourhood of a node. */
45
+ function blastSet(ir, lens) {
46
+ if (!ir.nodes.some((n) => n.id === lens.target)) {
47
+ throw new Error(`No node "${lens.target}" for lens blast:${lens.target}.`);
48
+ }
49
+ const out = new Map(); // from -> [to] (depends-on)
50
+ const inc = new Map(); // to -> [from] (depended-on-by)
51
+ const push = (m, k, v) => {
52
+ const arr = m.get(k);
53
+ if (arr)
54
+ arr.push(v);
55
+ else
56
+ m.set(k, [v]);
57
+ };
58
+ for (const e of ir.edges) {
59
+ push(out, e.from, e.to);
60
+ push(inc, e.to, e.from);
61
+ }
62
+ const keep = new Set([lens.target]);
63
+ if (lens.up)
64
+ walk(lens.target, out, keep);
65
+ if (lens.down)
66
+ walk(lens.target, inc, keep);
67
+ return keep;
68
+ }
69
+ function walk(start, adj, keep) {
70
+ const stack = [start];
71
+ while (stack.length) {
72
+ const cur = stack.pop();
73
+ for (const next of adj.get(cur) ?? []) {
74
+ if (!keep.has(next)) {
75
+ keep.add(next);
76
+ stack.push(next);
77
+ }
78
+ }
79
+ }
80
+ }
81
+ /** Restrict the IR to a node set: keep internal edges, rebuild groups. */
82
+ function subgraph(ir, keep) {
83
+ var _a, _b;
84
+ const nodes = ir.nodes.filter((n) => keep.has(n.id));
85
+ const edges = ir.edges.filter((e) => keep.has(e.from) && keep.has(e.to));
86
+ const byLexicon = {};
87
+ const byComposite = {};
88
+ for (const n of nodes) {
89
+ (byLexicon[_a = n.lexicon] ?? (byLexicon[_a] = [])).push(n.id);
90
+ if (n.compositeInstance)
91
+ (byComposite[_b = n.compositeInstance] ?? (byComposite[_b] = [])).push(n.id);
92
+ }
93
+ const groups = {};
94
+ if (Object.keys(byLexicon).length)
95
+ groups.byLexicon = sortGroups(byLexicon);
96
+ if (Object.keys(byComposite).length)
97
+ groups.byComposite = sortGroups(byComposite);
98
+ return { nodes, edges, groups };
99
+ }
100
+ function sortGroups(rec) {
101
+ const out = {};
102
+ for (const k of Object.keys(rec).sort())
103
+ out[k] = rec[k].sort();
104
+ return out;
105
+ }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Render the graph IR as a Mermaid `flowchart`. Mermaid is the zero-install
3
+ * default — it renders in GitHub, docs, and browsers with no native dependency,
4
+ * so `chant graph --format mermaid` gives a diagram out of the box without the
5
+ * standalone painter. Lower fidelity than a custom painter, but portable.
6
+ *
7
+ * Consumes whatever IR it is given, so it honours `--detail` and `--lens` for
8
+ * free (those are IR → IR transforms). See issue #496 / epic #492.
9
+ *
10
+ * Known limits: Mermaid owns layout, so there is little control over node
11
+ * placement, and very large graphs get hard to read — that is the trade-off for
12
+ * zero-install portability. Reach for the graphviz/custom-painter path (#497,
13
+ * pinhole) when fidelity matters.
14
+ */
15
+ export function toMermaid(ir) {
16
+ const ids = new Map(); // logical name -> mermaid-safe id
17
+ for (const n of ir.nodes)
18
+ safeId(n.id, ids);
19
+ const lines = ["flowchart TD"];
20
+ // Cluster by wave (component graph) when present, else by lexicon (entity
21
+ // graph); nodes outside any group fall through to the top level. Both are
22
+ // sorted, so output is deterministic.
23
+ const clusters = ir.groups.byWave ?? ir.groups.byLexicon;
24
+ const clusterPrefix = ir.groups.byWave ? "wave" : "lex";
25
+ const grouped = new Set();
26
+ if (clusters) {
27
+ for (const [name, members] of Object.entries(clusters)) {
28
+ lines.push(` subgraph ${safeId(`${clusterPrefix}_${name}`, ids)}[${quote(name)}]`);
29
+ for (const id of members) {
30
+ const node = ir.nodes.find((n) => n.id === id);
31
+ if (!node)
32
+ continue;
33
+ grouped.add(id);
34
+ lines.push(` ${nodeLine(node, ids)}`);
35
+ }
36
+ lines.push(" end");
37
+ }
38
+ }
39
+ for (const node of ir.nodes) {
40
+ if (grouped.has(node.id))
41
+ continue;
42
+ lines.push(` ${nodeLine(node, ids)}`);
43
+ }
44
+ for (const e of ir.edges) {
45
+ lines.push(` ${edgeLine(e, ids)}`);
46
+ }
47
+ return lines.join("\n") + "\n";
48
+ }
49
+ function nodeLine(node, ids) {
50
+ const id = safeId(node.id, ids);
51
+ const parts = [node.id];
52
+ if (node.kind && node.kind !== node.id)
53
+ parts.push(node.kind);
54
+ return `${id}[${quote(parts.join("\n"))}]`;
55
+ }
56
+ function edgeLine(e, ids) {
57
+ const from = safeId(e.from, ids);
58
+ const to = safeId(e.to, ids);
59
+ const label = [e.viaAttr, e.toAttr].filter(Boolean).join(" → ");
60
+ return label ? `${from} -->|${quote(label)}| ${to}` : `${from} --> ${to}`;
61
+ }
62
+ /** Map an arbitrary logical name to a stable, unique Mermaid-safe node id. */
63
+ function safeId(raw, ids) {
64
+ const existing = ids.get(raw);
65
+ if (existing)
66
+ return existing;
67
+ let base = raw.replace(/[^A-Za-z0-9_]/g, "_");
68
+ if (base === "" || /^[0-9]/.test(base))
69
+ base = `n_${base}`;
70
+ const taken = new Set(ids.values());
71
+ let candidate = base;
72
+ let i = 1;
73
+ while (taken.has(candidate))
74
+ candidate = `${base}_${i++}`;
75
+ ids.set(raw, candidate);
76
+ return candidate;
77
+ }
78
+ /** Quote a Mermaid label, escaping markup and turning newlines into <br/>. */
79
+ function quote(text) {
80
+ const esc = (s) => s.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
81
+ const body = text.split("\n").map(esc).join("<br/>");
82
+ return `"${body}"`;
83
+ }
@@ -0,0 +1,39 @@
1
+ import { basename, resolve } from "node:path";
2
+ import { discoverOps } from "./op/discover.js";
3
+ import { Op } from "./op/builders.js";
4
+ import { setProvenance } from "./provenance.js";
5
+ /**
6
+ * #1675 — the graph IR is built from `discover(sourceDir)`, but the Op
7
+ * convention keeps `*.op.ts` files OUTSIDE `sourceDir` (`ops/` or the project
8
+ * root beside `sourceDir: "src"`), and `chant op` / `chant graph` find them via
9
+ * {@link discoverOps}, which scans from the git root. Join the two scopes: every
10
+ * Op `discoverOps` finds that discovery did not already load becomes a
11
+ * `Chant::Op` entity in the map, keyed the way discovery keys a default
12
+ * export (the file's basename sans `.op.ts`), so the IR carries the declared
13
+ * DAG whatever the layout. Ops discovery already loaded (same file) are left
14
+ * alone. Returns the op-discovery errors for the caller to surface.
15
+ */
16
+ export async function mergeProjectOps(entities, sourceFiles, projectPath) {
17
+ const added = [];
18
+ let found;
19
+ try {
20
+ found = await discoverOps({ cwd: projectPath });
21
+ }
22
+ catch (err) {
23
+ // Not a git checkout — nothing beyond sourceDir to join.
24
+ return { added, errors: [err instanceof Error ? err.message : String(err)] };
25
+ }
26
+ const loaded = new Set(sourceFiles.map((f) => resolve(f)));
27
+ for (const { config, filePath } of found.ops.values()) {
28
+ if (loaded.has(resolve(filePath)))
29
+ continue;
30
+ const key = basename(filePath).replace(/\.ts$/, "").replace(/\.op$/, "");
31
+ if (entities.has(key))
32
+ continue;
33
+ const entity = Op(config);
34
+ setProvenance(entity, { sourceFile: resolve(filePath) });
35
+ entities.set(key, entity);
36
+ added.push(key);
37
+ }
38
+ return { added, errors: found.errors };
39
+ }
@@ -0,0 +1,156 @@
1
+ function toStr(v) {
2
+ if (typeof v === "string")
3
+ return v;
4
+ if (typeof v === "number" || typeof v === "boolean")
5
+ return String(v);
6
+ return undefined;
7
+ }
8
+ /**
9
+ * Read all scalar values at an attr path. Supports nested keys (`a.b`) and array
10
+ * fan-out (`arr[]`, `arr[].id`). Returns every scalar found — a path through an
11
+ * array yields one value per element.
12
+ */
13
+ export function readPath(obj, path) {
14
+ let cur = [obj];
15
+ for (const part of path.split(".")) {
16
+ const isArr = part.endsWith("[]");
17
+ const key = isArr ? part.slice(0, -2) : part;
18
+ const next = [];
19
+ for (const c of cur) {
20
+ if (c == null || typeof c !== "object")
21
+ continue;
22
+ const val = c[key];
23
+ if (isArr) {
24
+ if (Array.isArray(val))
25
+ next.push(...val);
26
+ }
27
+ else if (val !== undefined) {
28
+ next.push(val);
29
+ }
30
+ }
31
+ cur = next;
32
+ }
33
+ const out = [];
34
+ for (const c of cur) {
35
+ const s = toStr(c);
36
+ if (s !== undefined)
37
+ out.push(s);
38
+ }
39
+ return out;
40
+ }
41
+ /** Merge several lexicons' catalogs into one (concatenate identities + refs). */
42
+ export function mergeCatalogs(catalogs) {
43
+ return {
44
+ identities: catalogs.flatMap((c) => c.identities),
45
+ refs: catalogs.flatMap((c) => c.refs),
46
+ };
47
+ }
48
+ /**
49
+ * Reconstruct edges + containment from live nodes and a catalog. Pure and
50
+ * deterministic. Matching is exact on identifier value; identifier collisions
51
+ * across kinds are disambiguated by `targetKind`. Self-references are dropped.
52
+ */
53
+ export function reconstructEdges(nodes, catalog) {
54
+ // Identity index: identifier value → the node(s) that own it.
55
+ const index = new Map();
56
+ const add = (value, id, kind) => {
57
+ (index.get(value) ?? index.set(value, []).get(value)).push({ id, kind });
58
+ };
59
+ for (const node of nodes) {
60
+ // Every node is identified by its own logical id — so references resolved to
61
+ // a logical id (e.g. a CloudFormation `{Ref: LogicalId}` from exportResources,
62
+ // #784) match directly — plus its physical id and any catalog identity attrs.
63
+ add(node.id, node.id, node.kind);
64
+ if (node.physicalId)
65
+ add(node.physicalId, node.id, node.kind);
66
+ for (const rule of catalog.identities) {
67
+ if (rule.kind !== node.kind)
68
+ continue;
69
+ for (const p of rule.ids)
70
+ for (const v of readPath(node.attrs, p))
71
+ add(v, node.id, node.kind);
72
+ }
73
+ }
74
+ const edges = [];
75
+ const containment = [];
76
+ const containmentEdges = [];
77
+ const seenContEdge = new Set();
78
+ const dangling = [];
79
+ const seenEdge = new Set();
80
+ const seenCont = new Set();
81
+ for (const node of nodes) {
82
+ for (const rule of catalog.refs) {
83
+ if (rule.from !== node.kind)
84
+ continue;
85
+ for (const value of readPath(node.attrs, rule.path)) {
86
+ const candidates = index.get(value) ?? [];
87
+ const match = rule.targetKind ? candidates.find((c) => c.kind === rule.targetKind) : candidates[0];
88
+ if (!match) {
89
+ dangling.push({ from: node.id, path: rule.path, value, ...(rule.targetKind ? { targetKind: rule.targetKind } : {}) });
90
+ continue;
91
+ }
92
+ if (match.id === node.id)
93
+ continue; // self-reference (e.g. an SG rule to its own group)
94
+ const pushEdge = (via) => {
95
+ const k = `${node.id}|${match.id}|${via}`;
96
+ if (seenEdge.has(k))
97
+ return;
98
+ seenEdge.add(k);
99
+ edges.push({ from: node.id, to: match.id, kind: "ref", viaAttr: via });
100
+ };
101
+ if (rule.relation === "containment") {
102
+ const k = `${node.id}|${match.id}`;
103
+ if (!seenCont.has(k)) {
104
+ seenCont.add(k);
105
+ containment.push({ child: node.id, parent: match.id, ...(rule.label ? { label: rule.label } : {}) });
106
+ }
107
+ // Traversable by construction. The attribute the containment was read
108
+ // through is its traversal name, so `<-attr:` can still discriminate
109
+ // between two ways of being inside something.
110
+ const via = rule.viaAttr ?? rule.path;
111
+ const ke = `${node.id}|${match.id}|${via}`;
112
+ if (!seenContEdge.has(ke)) {
113
+ seenContEdge.add(ke);
114
+ containmentEdges.push({ from: node.id, to: match.id, kind: "ref", viaAttr: via });
115
+ }
116
+ // A containment relation is a boundary hint, not an edge — unless the
117
+ // rule declares a traversal name (#1275). A fold's first hop is
118
+ // sometimes exactly a containment ("an instance is in a subnet"), and
119
+ // it must be traversable without duplicating the rule as a reference
120
+ // and drawing the line twice.
121
+ if (rule.viaAttr)
122
+ pushEdge(rule.viaAttr);
123
+ }
124
+ else {
125
+ // Traversal name wins over the rendering label: the labels are
126
+ // human-facing ("sg", "via"), and a fold matches provider attribute
127
+ // names (#1275).
128
+ pushEdge(rule.viaAttr ?? rule.label ?? rule.path);
129
+ }
130
+ }
131
+ }
132
+ }
133
+ edges.sort((a, b) => `${a.from}|${a.to}|${a.viaAttr}`.localeCompare(`${b.from}|${b.to}|${b.viaAttr}`));
134
+ containmentEdges.sort((a, b) => `${a.from}|${a.to}|${a.viaAttr}`.localeCompare(`${b.from}|${b.to}|${b.viaAttr}`));
135
+ containment.sort((a, b) => `${a.child}|${a.parent}`.localeCompare(`${b.child}|${b.parent}`));
136
+ dangling.sort((a, b) => `${a.from}|${a.path}|${a.value}`.localeCompare(`${b.from}|${b.path}|${b.value}`));
137
+ return { edges, containment, containmentEdges, dangling };
138
+ }
139
+ /**
140
+ * Invert containment pairs into grouping metadata (#779): container node id → the
141
+ * node ids directly inside it. The result is the `IRGroups.byContainer` shape a
142
+ * renderer draws as boundary boxes. It represents the full nesting *flatly* — a
143
+ * subnet is both a member of its VPC's entry and a key with its own members —
144
+ * so a boundary-box renderer recurses it (VPC ⊃ subnet ⊃ resources). Sorted for
145
+ * determinism.
146
+ */
147
+ export function containmentGroups(pairs) {
148
+ const byParent = new Map();
149
+ for (const { child, parent } of pairs) {
150
+ (byParent.get(parent) ?? byParent.set(parent, new Set()).get(parent)).add(child);
151
+ }
152
+ const out = {};
153
+ for (const parent of [...byParent.keys()].sort())
154
+ out[parent] = [...byParent.get(parent)].sort();
155
+ return out;
156
+ }
@@ -0,0 +1,87 @@
1
+ /**
2
+ * `heldElsewhere` — a typed, per-property declaration that a field belongs to
3
+ * something else once the first apply happens (chant #2162).
4
+ *
5
+ * An autoscaler owns a Deployment's `replicas` after the first apply. A
6
+ * controller writes an annotation on every sync. An operator was granted one
7
+ * knob deliberately. None of these are drift, and reconciling them back to
8
+ * whatever chant last declared would fight the thing that is actually
9
+ * supposed to own the field.
10
+ *
11
+ * Terraform's answer is `lifecycle { ignore_changes = [...] }`: a list of
12
+ * strings, carrying no reason, invisible once written. This is the typed
13
+ * alternative — a marker written where the property's value would go, so a
14
+ * lexicon's generated types check it the same way they check any other value,
15
+ * and it cannot be attached to a property that does not exist.
16
+ *
17
+ * This is not a suppression comment. `chant-ignore` (#2111) hides a *lint*
18
+ * finding about source; a `heldElsewhere` marker is a fact about who operates
19
+ * a field at *runtime*, so it lives in the typed declaration, where
20
+ * `chant lifecycle plan` and `chant lifecycle diff --live` can render it,
21
+ * rather than in a comment only a linter reads.
22
+ */
23
+ /**
24
+ * Runtime-only marker, symbol-keyed so it never collides with a real
25
+ * property actually named `by` or `reason` and never serializes by accident
26
+ * through `JSON.stringify` or `Object.entries` (which do not visit symbol
27
+ * keys) — the two places a stray plain-object marker would otherwise leak
28
+ * into a snapshot or a wire payload unnoticed.
29
+ */
30
+ export const HELD_ELSEWHERE_MARKER = Symbol.for("chant.heldElsewhere");
31
+ /**
32
+ * Declare a property held by something else after the first apply.
33
+ *
34
+ * Typed `T` — the property's own declared type — rather than
35
+ * `HeldElsewhereMarker`, so it type-checks in exactly the position the
36
+ * property's real value would go: `replicas: heldElsewhere({ by: "hpa",
37
+ * reason: "the autoscaler owns replicas after the first apply" })` against a
38
+ * generated `replicas?: number` typechecks the same way `replicas: 3` does,
39
+ * and writing it against a property that does not exist on the resource's
40
+ * props is an excess-property error like any other.
41
+ *
42
+ * The runtime value is the marker object, not a `T` — this function tells
43
+ * TypeScript otherwise on purpose. Every consumer that must tell the two
44
+ * apart checks {@link isHeldElsewhere} before trusting a declared value's
45
+ * real shape: the synth-time serializer (`serializer-walker.ts`, which omits
46
+ * the field from the applied payload so the property is never sent — the
47
+ * provider defaults it once at creation, and the holder owns it from there)
48
+ * and the deep-diff declared side (`deep-observation.ts`/`deep-diff.ts`,
49
+ * which reports a live difference as held rather than as drift).
50
+ */
51
+ export function heldElsewhere(opts) {
52
+ const marker = {
53
+ [HELD_ELSEWHERE_MARKER]: true,
54
+ by: opts.by,
55
+ reason: opts.reason,
56
+ };
57
+ return marker;
58
+ }
59
+ /**
60
+ * True when `value` is a {@link HeldElsewhereMarker} — the runtime shape a
61
+ * `heldElsewhere()` call produces, wherever it ends up (a resource's own
62
+ * prop, nested inside a property-kind Declarable's props).
63
+ */
64
+ export function isHeldElsewhere(value) {
65
+ return (typeof value === "object" &&
66
+ value !== null &&
67
+ value[HELD_ELSEWHERE_MARKER] === true);
68
+ }
69
+ /**
70
+ * JSON-safe tag a held marker normalizes to (see `deep-observation.ts`) so
71
+ * its identity survives normalization, `flattenDeepProperties`, and a
72
+ * `--json` round-trip. The symbol marker above does not serialize and
73
+ * `Object.entries` does not enumerate it, so without a JSON-safe stand-in the
74
+ * normalization pass would flatten `{ by, reason }` into two ordinary leaf
75
+ * paths instead of keeping the marker recognizable as one value.
76
+ */
77
+ export const HELD_ELSEWHERE_TAG = "chant:heldElsewhere";
78
+ /** Normalize a runtime marker to its JSON-safe tagged form. */
79
+ export function normalizeHeldElsewhere(marker) {
80
+ return { heldElsewhere: HELD_ELSEWHERE_TAG, by: marker.by, reason: marker.reason };
81
+ }
82
+ /** True when `value` is the normalized, JSON-safe tagged form of a held marker. */
83
+ export function isNormalizedHeldElsewhere(value) {
84
+ return (typeof value === "object" &&
85
+ value !== null &&
86
+ value.heldElsewhere === HELD_ELSEWHERE_TAG);
87
+ }