@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,235 @@
1
+ /**
2
+ * The composed workspace IR that `chant workspace graph` prints (#2537, #2524
3
+ * D8, ws-009, ws-018, ws-022).
4
+ *
5
+ * Each member is read through its own `chant graph --format ir`, under its
6
+ * own toolchain. This module takes those documents and composes them:
7
+ *
8
+ * - Every node id becomes `<member>/<id>`. Member names can't hold `/`, and
9
+ * `::` keeps its meaning for stacks inside a member (`app/web::Bucket`).
10
+ * Edge ends, `$ref` values in attributes, `compositeInstance`,
11
+ * `runtimeOwner` and export and import nodes are rewritten the same way.
12
+ * - `groups.byMember` maps each member to its node ids. `byLexicon` and
13
+ * `byComposite` keep their keys (a lexicon or composite type is the same
14
+ * thing in every member) and merge the ids. `byStack`, `byContainer` and
15
+ * `byWave` name things inside one member, so their keys are prefixed too.
16
+ * - `links` holds the member links (#2524 D6, #2539): the declared links and
17
+ * the joins inferred from members' `imports` and `exports` with the core
18
+ * `joinKey()`, labelled `exact` or `folded` (`./links.ts`). A declared link
19
+ * suppresses the inferred edge it covers. `records` holds the records
20
+ * read through a record kind (`--kind`, #2549), and their `asset` and
21
+ * `constrains` links follow the member links in `links`.
22
+ *
23
+ * A member's IR with no `version` field comes from a chant older than #2529.
24
+ * It is version 1, and it is upgraded in place by stamping that version. An IR
25
+ * newer than {@link GRAPH_IR_VERSION} can't be read safely, so that member is
26
+ * listed with a reason code and left out, like any other member that can't be
27
+ * read (#2524 D15).
28
+ *
29
+ * `chant graph` itself is untouched: this is the only place members compose.
30
+ */
31
+ import { graphLinks } from "./links.js";
32
+ import { GRAPH_IR_VERSION } from "../graph-ir.js";
33
+ /** The version of the composed document `chant workspace graph` writes. */
34
+ export const WORKSPACE_GRAPH_VERSION = 1;
35
+ /**
36
+ * Why a member is missing from the composed graph, or from any per-member
37
+ * run. Closed, like the `ls` reason codes: a new code is a contract change.
38
+ */
39
+ export const MEMBER_RUN_REASON_CODES = [
40
+ /** The member's kind is one the workspace commands don't run, such as `other`. */
41
+ "kind-not-run",
42
+ /** The member's directory does not exist. */
43
+ "dir-missing",
44
+ /** No installed kind has the member's kind name. */
45
+ "unknown-kind",
46
+ /** The directory is not what its kind reads. */
47
+ "kind-probe-failed",
48
+ /** The member's command exited with a failure. */
49
+ "command-failed",
50
+ /** The member's command printed something that isn't the document asked for. */
51
+ "output-unreadable",
52
+ /** The member's IR has a version this chant can't read. */
53
+ "ir-version-unsupported",
54
+ ];
55
+ /** The meta key a lexicon's `graphMeta` hook answers the collector under. */
56
+ export const COLLECTOR_META_KEY = "collector";
57
+ /** Read one member's `chant graph --format ir` output, upgrading an unversioned (v1) IR in place. */
58
+ export function readMemberIr(text) {
59
+ let raw;
60
+ try {
61
+ raw = JSON.parse(text);
62
+ }
63
+ catch {
64
+ return { reason: { code: "output-unreadable", message: "chant graph --format ir printed something that is not JSON" } };
65
+ }
66
+ if (raw === null || typeof raw !== "object" || !Array.isArray(raw.nodes) || !Array.isArray(raw.edges)) {
67
+ return { reason: { code: "output-unreadable", message: "chant graph --format ir printed JSON with no nodes and edges" } };
68
+ }
69
+ const ir = raw;
70
+ const printed = ir.version;
71
+ if (printed === undefined) {
72
+ ir.version = 1;
73
+ }
74
+ else if (typeof printed !== "number" || printed > GRAPH_IR_VERSION) {
75
+ return {
76
+ reason: {
77
+ code: "ir-version-unsupported",
78
+ message: `the member's chant printed IR version ${String(printed)}, and this chant reads up to version ${GRAPH_IR_VERSION}`,
79
+ },
80
+ };
81
+ }
82
+ ir.groups ?? (ir.groups = {});
83
+ return { ir, irVersion: printed === undefined ? null : printed };
84
+ }
85
+ const prefix = (member, id) => `${member}/${id}`;
86
+ const strings = (v) => (Array.isArray(v) ? v.filter((x) => typeof x === "string") : []);
87
+ const records = (v) => Array.isArray(v) ? v.filter((x) => typeof x === "object" && x !== null) : [];
88
+ /**
89
+ * A member's collector topology from its IR meta, or null when the meta holds
90
+ * none or something that isn't one. Read defensively: the topology comes from
91
+ * a lexicon the member's own toolchain loaded, which may be newer or older
92
+ * than this chant.
93
+ */
94
+ function readCollector(member, value) {
95
+ if (typeof value !== "object" || value === null || !Array.isArray(value.pipelines))
96
+ return null;
97
+ const v = value;
98
+ return {
99
+ member,
100
+ pipelines: records(v.pipelines).map((p) => ({
101
+ id: String(p.id),
102
+ signal: String(p.signal),
103
+ receivers: strings(p.receivers),
104
+ processors: strings(p.processors),
105
+ exporters: strings(p.exporters),
106
+ })),
107
+ components: records(v.components).map((c) => ({
108
+ id: String(c.id),
109
+ kind: String(c.kind),
110
+ type: String(c.type),
111
+ endpoints: strings(c.endpoints),
112
+ protocols: strings(c.protocols),
113
+ pipelines: strings(c.pipelines),
114
+ })),
115
+ exporters: records(v.exporters).map((e) => ({
116
+ id: String(e.id),
117
+ type: String(e.type),
118
+ endpoints: strings(e.endpoints),
119
+ pipelines: strings(e.pipelines),
120
+ signals: strings(e.signals),
121
+ })),
122
+ };
123
+ }
124
+ function prefixRefs(value, member) {
125
+ if (Array.isArray(value))
126
+ return value.map((v) => prefixRefs(v, member));
127
+ if (value === null || typeof value !== "object")
128
+ return value;
129
+ const out = {};
130
+ for (const [k, v] of Object.entries(value)) {
131
+ out[k] = k === "$ref" && typeof v === "string" ? prefix(member, v) : prefixRefs(v, member);
132
+ }
133
+ return out;
134
+ }
135
+ function mergeInto(target, key, ids) {
136
+ (target[key] ?? (target[key] = [])).push(...ids);
137
+ }
138
+ function sorted(rec) {
139
+ const out = {};
140
+ for (const k of Object.keys(rec).sort())
141
+ out[k] = [...rec[k]].sort();
142
+ return out;
143
+ }
144
+ /**
145
+ * Compose the members' IRs into the workspace document. Members keep the
146
+ * order they are given in. With `links`, the `links` section is filled from
147
+ * the declaration; `kinds` lets a member that isn't composed but whose kind
148
+ * lists its outputs (`other`, kinds from a package) be a link target.
149
+ */
150
+ export function composeWorkspaceGraph(workspace, inputs, links) {
151
+ const nodes = [];
152
+ const edges = [];
153
+ const exports = [];
154
+ const imports = [];
155
+ const byMember = {};
156
+ const shared = { byLexicon: {}, byComposite: {} };
157
+ const scoped = { byStack: {}, byContainer: {}, byWave: {} };
158
+ const derivedAttrs = {};
159
+ const collectors = [];
160
+ for (const { member, ir } of inputs) {
161
+ if (!ir)
162
+ continue;
163
+ const m = member.name;
164
+ const ids = [];
165
+ for (const node of ir.nodes) {
166
+ const composed = { ...node, id: prefix(m, node.id), member: m, attrs: prefixRefs(node.attrs ?? {}, m) };
167
+ if (node.compositeInstance)
168
+ composed.compositeInstance = prefix(m, node.compositeInstance);
169
+ if (node.runtimeOwner)
170
+ composed.runtimeOwner = prefix(m, node.runtimeOwner);
171
+ nodes.push(composed);
172
+ ids.push(composed.id);
173
+ }
174
+ byMember[m] = ids.sort();
175
+ for (const edge of ir.edges)
176
+ edges.push({ ...edge, from: prefix(m, edge.from), to: prefix(m, edge.to), member: m });
177
+ for (const key of ["byLexicon", "byComposite"]) {
178
+ for (const [k, v] of Object.entries(ir.groups[key] ?? {}))
179
+ mergeInto(shared[key], k, v.map((id) => prefix(m, id)));
180
+ }
181
+ for (const key of ["byStack", "byContainer", "byWave"]) {
182
+ for (const [k, v] of Object.entries(ir.groups[key] ?? {}))
183
+ mergeInto(scoped[key], prefix(m, k), v.map((id) => prefix(m, id)));
184
+ }
185
+ for (const e of ir.exports ?? [])
186
+ exports.push({ ...e, ...(e.node ? { node: prefix(m, e.node) } : {}), member: m });
187
+ for (const i of ir.imports ?? [])
188
+ imports.push({ ...i, node: prefix(m, i.node), member: m });
189
+ for (const [kind, attrs] of Object.entries(ir.derivedAttrs ?? {}))
190
+ for (const a of attrs)
191
+ (derivedAttrs[kind] ?? (derivedAttrs[kind] = new Set())).add(a);
192
+ if (ir.meta) {
193
+ // The collector topology has a section of its own; the rest of the meta stays on the member.
194
+ const { [COLLECTOR_META_KEY]: collector, ...rest } = ir.meta;
195
+ const read = readCollector(m, collector);
196
+ if (read)
197
+ collectors.push(read);
198
+ if (!read)
199
+ member.meta = ir.meta;
200
+ else if (Object.keys(rest).length > 0)
201
+ member.meta = rest;
202
+ }
203
+ if (ir.pipeline)
204
+ member.pipeline = ir.pipeline;
205
+ }
206
+ nodes.sort((a, b) => a.id.localeCompare(b.id));
207
+ const edgeKey = (e) => `${e.from}\u0000${e.to}\u0000${e.viaAttr ?? ""}`;
208
+ edges.sort((a, b) => edgeKey(a).localeCompare(edgeKey(b)));
209
+ const groups = { byMember };
210
+ for (const key of ["byLexicon", "byComposite"])
211
+ if (Object.keys(shared[key]).length)
212
+ groups[key] = sorted(shared[key]);
213
+ for (const key of ["byStack", "byContainer", "byWave"])
214
+ if (Object.keys(scoped[key]).length)
215
+ groups[key] = sorted(scoped[key]);
216
+ const doc = {
217
+ version: WORKSPACE_GRAPH_VERSION,
218
+ workspace,
219
+ members: inputs.map((i) => i.member),
220
+ nodes,
221
+ edges,
222
+ groups,
223
+ exports,
224
+ imports,
225
+ links: links
226
+ ? graphLinks(links.declaration, { composed: inputs.filter((i) => i.ir).map((i) => i.member.name), collectors, exports, imports }, links.kinds)
227
+ : [],
228
+ collectors,
229
+ records: [],
230
+ };
231
+ if (Object.keys(derivedAttrs).length) {
232
+ doc.derivedAttrs = Object.fromEntries(Object.keys(derivedAttrs).sort().map((k) => [k, [...derivedAttrs[k]].sort()]));
233
+ }
234
+ return doc;
235
+ }
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Merging per-member lint and audit output (#2537, #2524 D16, ws-025, ws-026).
3
+ *
4
+ * `chant workspace lint --format sarif` prints one SARIF log with one run per
5
+ * member, each run being what that member's own `chant lint --format sarif`
6
+ * printed. `chant workspace audit --format json` prints one document whose
7
+ * findings each carry a `member` field. Both keep what the member's chant
8
+ * said and only add where it came from.
9
+ */
10
+ import { isAbsolute, relative } from "node:path";
11
+ import { fileURLToPath } from "node:url";
12
+ const SARIF_SCHEMA = "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json";
13
+ /** A root-relative path for a URI a member's SARIF wrote. Other URIs pass through. */
14
+ function rootRelativeUri(uri, memberDir, root) {
15
+ let abs;
16
+ if (uri.startsWith("file://")) {
17
+ try {
18
+ abs = fileURLToPath(uri);
19
+ }
20
+ catch {
21
+ return uri;
22
+ }
23
+ }
24
+ else if (isAbsolute(uri)) {
25
+ abs = uri;
26
+ }
27
+ if (abs !== undefined) {
28
+ const rel = relative(root, abs).split("\\").join("/");
29
+ return rel.startsWith("..") || isAbsolute(rel) ? uri : rel;
30
+ }
31
+ if (/^[a-z][a-z0-9+.-]*:/i.test(uri))
32
+ return uri;
33
+ return memberDir === "." ? uri : `${memberDir}/${uri}`;
34
+ }
35
+ function rewriteUris(value, memberDir, root) {
36
+ if (Array.isArray(value))
37
+ return value.map((v) => rewriteUris(v, memberDir, root));
38
+ if (value === null || typeof value !== "object")
39
+ return value;
40
+ const out = {};
41
+ for (const [k, v] of Object.entries(value)) {
42
+ out[k] = k === "artifactLocation" && v && typeof v === "object" && typeof v.uri === "string"
43
+ ? { ...v, uri: rootRelativeUri(v.uri, memberDir, root) }
44
+ : rewriteUris(v, memberDir, root);
45
+ }
46
+ return out;
47
+ }
48
+ /** A run for a member whose lint printed no SARIF: no results, and the failure as a notification. */
49
+ function failedRun(unit, why) {
50
+ const tail = unit.stderr.trim().split("\n").slice(-20).join("\n");
51
+ return {
52
+ tool: { driver: { name: "chant", informationUri: "https://intentius.io/chant" } },
53
+ automationDetails: { id: `${unit.id}/` },
54
+ properties: { member: unit.member, dir: unit.dir },
55
+ invocations: [
56
+ {
57
+ executionSuccessful: false,
58
+ exitCode: unit.exitCode,
59
+ toolExecutionNotifications: [{ level: "error", message: { text: tail ? `${why}\n${tail}` : why } }],
60
+ },
61
+ ],
62
+ results: [],
63
+ };
64
+ }
65
+ /**
66
+ * One SARIF log with one run per member. A member's own log normally holds
67
+ * one run; if it holds more, their results are folded into the first so the
68
+ * member still has exactly one. Artifact URIs become relative to the
69
+ * workspace root, and each run's `automationDetails.id` is `<member>/`, the
70
+ * SARIF way to tell runs of one tool apart.
71
+ */
72
+ export function mergeSarif(units, root) {
73
+ const runs = [];
74
+ for (const unit of units) {
75
+ let log;
76
+ try {
77
+ log = JSON.parse(unit.stdout);
78
+ }
79
+ catch {
80
+ runs.push(failedRun(unit, `chant lint exited ${unit.exitCode} and printed no SARIF`));
81
+ continue;
82
+ }
83
+ const own = Array.isArray(log.runs) ? log.runs : [];
84
+ if (own.length === 0) {
85
+ runs.push(failedRun(unit, "chant lint printed a SARIF log with no runs"));
86
+ continue;
87
+ }
88
+ const [first, ...rest] = own.map((r) => rewriteUris(r, unit.dir, root));
89
+ const results = [...(first.results ?? [])];
90
+ for (const r of rest) {
91
+ for (const res of r.results ?? []) {
92
+ // A rule index points into its own run's rules; folded in, it would point at the wrong one.
93
+ const { ruleIndex: _dropped, ...kept } = res;
94
+ results.push(kept);
95
+ }
96
+ }
97
+ runs.push({
98
+ ...first,
99
+ results,
100
+ automationDetails: { ...(first.automationDetails ?? {}), id: `${unit.id}/` },
101
+ properties: { ...(first.properties ?? {}), member: unit.member, dir: unit.dir },
102
+ });
103
+ }
104
+ return { $schema: SARIF_SCHEMA, version: "2.1.0", runs };
105
+ }
106
+ /**
107
+ * Merge each member's `chant audit --format json` report. Every finding keeps
108
+ * its fields, with `file` still relative to its member, and gains `member`.
109
+ */
110
+ export function mergeAudit(units, workspace) {
111
+ const members = [];
112
+ const findings = [];
113
+ const versions = new Set();
114
+ for (const unit of units) {
115
+ let report;
116
+ try {
117
+ report = JSON.parse(unit.stdout);
118
+ }
119
+ catch {
120
+ if (unit.exitCode === 0) {
121
+ // `chant audit` says so in plain text when a directory holds nothing it audits.
122
+ members.push({ member: unit.id, dir: unit.dir, exitCode: 0, status: "ok", summary: null, error: null, note: unit.stdout.trim() });
123
+ continue;
124
+ }
125
+ const tail = unit.stderr.trim().split("\n").slice(-5).join("\n");
126
+ members.push({ member: unit.id, dir: unit.dir, exitCode: unit.exitCode, status: "failed", summary: null, error: tail || "chant audit printed no JSON report" });
127
+ continue;
128
+ }
129
+ if (typeof report.schemaVersion === "string")
130
+ versions.add(report.schemaVersion);
131
+ const own = report.findings ?? [];
132
+ const kept = own.filter((f) => !unit.exclude?.some((d) => typeof f.file === "string" && (f.file === d || f.file.startsWith(`${d}/`))));
133
+ members.push({
134
+ member: unit.id,
135
+ dir: unit.dir,
136
+ exitCode: unit.exitCode,
137
+ status: report.status === "no-lexicons" ? "no-lexicons" : "ok",
138
+ summary: report.summary ?? null,
139
+ error: null,
140
+ ...(kept.length < own.length ? { leftToMembers: own.length - kept.length } : {}),
141
+ });
142
+ for (const f of kept)
143
+ findings.push({ ...f, member: unit.id });
144
+ }
145
+ return { schemaVersion: versions.size === 1 ? [...versions][0] : null, workspace, members, findings };
146
+ }
@@ -0,0 +1,264 @@
1
+ /**
2
+ * `chant workspace graph --composites` (#2662): each composite instance the
3
+ * workspace's members declare, joined to the components that can deploy it.
4
+ *
5
+ * The composed graph already knows which composite instances each member
6
+ * declares (a node's `compositeInstance` and `compositeParent`), and a
7
+ * member's `chant graph --components --format ir` knows its components and
8
+ * the composite kinds each names in its contract's `composites`. This module
9
+ * joins the two and prints the rows. chant supplies the data and never the
10
+ * choice (ws-052): the document says how each component matched, and a
11
+ * reader decides what to offer.
12
+ *
13
+ * A component matches an instance in one of two ways:
14
+ *
15
+ * - `composites`: the component's contract lists one of the instance's
16
+ * composite kinds, compared exactly.
17
+ * - `name`: the component declares no `composites`, and its `name` joins the
18
+ * instance's kind or the instance's own name with the core `joinKey()`
19
+ * (`LoomBackend` and `loom-backend` join, labelled `folded`). This is the
20
+ * naming convention the component contract documents for a component that
21
+ * says nothing (#1492).
22
+ *
23
+ * Every match says how it crosses members (`via`): `member` when the
24
+ * component and the instance are in the same member, `link` when the
25
+ * component's member reads the instance's member through a resolved member
26
+ * link (#2539), and `unlinked` otherwise. An instance with no component is
27
+ * listed with an empty `components`, so the gap is visible.
28
+ *
29
+ * Each member runs under its own toolchain, as for `workspace graph`, and at
30
+ * the same revision with `--at`. Nothing is written and no listener starts.
31
+ *
32
+ * Each component also lists the runtimes it can deploy on (#2674,
33
+ * `runtimes.ts`): `local`, and each lexicon its member configures that hosts
34
+ * `chant run --components`, with the command line for each.
35
+ *
36
+ * And each component lists the environments it may deploy to (#2695,
37
+ * `environments.ts`): `local`, the environments its member's config declares,
38
+ * and those with a release in the member's ledger on `chant/lifecycle`, with
39
+ * the command line for each.
40
+ */
41
+ import { formatError } from "../cli/format.js";
42
+ import { joinLabel } from "../join-key.js";
43
+ import { readMemberIr } from "./compose-graph.js";
44
+ import { workspaceGraph } from "./graph-cli.js";
45
+ import { emitDocument } from "./member-commands.js";
46
+ import { readerVersion, WORKSPACE_ERROR_CODES } from "./declaration.js";
47
+ import { componentEnvironments, ENVIRONMENT_REASON_CODES, memberEnvironments, readLedgerEnvironments } from "./environments.js";
48
+ import { componentRuntimes, readRuntimesIn, RUNTIME_REASON_CODES } from "./runtimes.js";
49
+ /** `$id` of the JSON Schema for the document, shipped beside this file. */
50
+ export const COMPOSITES_OUTPUT_SCHEMA_ID = "https://intentius.io/chant/schemas/workspace/composites/v1/composites.schema.json";
51
+ /** The read-contract version the document follows. */
52
+ export const COMPOSITES_CONTRACT_VERSION = 1;
53
+ /**
54
+ * Why the composites couldn't be read at all: the declaration's codes, as for
55
+ * the graph. The composites never read live, so the graph's own
56
+ * `live-at-revision` (#2875) can't reach them.
57
+ */
58
+ export const COMPOSITES_ERROR_CODES = WORKSPACE_ERROR_CODES;
59
+ /** Why the list is empty, or why no instance has a component. Closed: part of the read contract. */
60
+ export const COMPOSITES_REASON_CODES = [
61
+ /** No member of kind chant was read, so nothing declares a composite or a component. */
62
+ "composites-no-chant-member",
63
+ /** The members read declare no composite instance. */
64
+ "composites-none-declared",
65
+ /** The members read declare no component, so no instance has one. */
66
+ "composites-no-component",
67
+ ];
68
+ /** Why a member's runtimes are only `local`, or leave out a lexicon its config lists (#2674). Closed. */
69
+ export const COMPOSITES_RUNTIME_REASON_CODES = RUNTIME_REASON_CODES;
70
+ /** Why a member's environments are only `local`, or leave out one its ledger has (#2695). Closed. */
71
+ export const COMPOSITES_ENVIRONMENT_REASON_CODES = ENVIRONMENT_REASON_CODES;
72
+ /** Read one member's component graph run into components, or the reason it can't be read. */
73
+ function readComponents(member, dir, run, runtimes, environments) {
74
+ if (run.exitCode !== 0) {
75
+ const tail = run.stderr.trim().split("\n").slice(-5).join("\n");
76
+ return { reason: { code: "command-failed", message: `chant graph --components exited ${run.exitCode}${tail ? `: ${tail}` : ""}` } };
77
+ }
78
+ const read = readMemberIr(run.stdout);
79
+ if ("reason" in read)
80
+ return { reason: { ...read.reason, message: `chant graph --components: ${read.reason.message}` } };
81
+ const components = [];
82
+ for (const n of read.ir.nodes) {
83
+ if (n.kind !== "Component")
84
+ continue;
85
+ const attrs = n.attrs ?? {};
86
+ const composites = Array.isArray(attrs.composites) ? attrs.composites.filter((c) => typeof c === "string") : null;
87
+ const file = n.sourceLoc?.file;
88
+ components.push({
89
+ id: `${member}/${n.id}`,
90
+ name: n.id,
91
+ member,
92
+ archetype: typeof attrs.archetype === "string" ? attrs.archetype : null,
93
+ composites: composites && composites.length > 0 ? composites : null,
94
+ file: file ? (dir === "." ? file : `${dir}/${file}`) : null,
95
+ runtimes: componentRuntimes(n.id, runtimes),
96
+ // The component's own environments (#3153): their sites, and any the member doesn't list; a reason lands on the member.
97
+ environments: componentEnvironments(n.id, environments, runtimes?.default, declaredEnvironments(attrs.environments), runtimes?.lexicons ?? [], environments?.reasons ?? []),
98
+ });
99
+ }
100
+ return { components };
101
+ }
102
+ /** A component's declared environments from its IR attrs (#3153), keeping only well-formed entries. */
103
+ function declaredEnvironments(raw) {
104
+ if (!Array.isArray(raw))
105
+ return [];
106
+ const text = (v) => (typeof v === "string" && v.length > 0 ? v : undefined);
107
+ return raw
108
+ .filter((e) => e !== null && typeof e === "object" && typeof e.name === "string")
109
+ .map((e) => ({ name: e.name, runtime: text(e.runtime), url: text(e.url), domain: text(e.domain), lifecycle: text(e.lifecycle) }));
110
+ }
111
+ /** The composite instances in a composed graph, without their components. */
112
+ export function compositeInstances(graph) {
113
+ const byId = new Map();
114
+ for (const n of graph.nodes) {
115
+ if (!n.compositeInstance)
116
+ continue;
117
+ const row = byId.get(n.compositeInstance) ?? { member: n.member, kinds: new Set(), lexicons: new Set(), nodes: [] };
118
+ if (n.compositeParent)
119
+ row.kinds.add(n.compositeParent);
120
+ row.lexicons.add(n.lexicon);
121
+ row.nodes.push(n.id);
122
+ byId.set(n.compositeInstance, row);
123
+ }
124
+ return [...byId.entries()]
125
+ .sort(([a], [b]) => a.localeCompare(b))
126
+ .map(([id, r]) => ({
127
+ id,
128
+ member: r.member,
129
+ instance: id.slice(r.member.length + 1),
130
+ kinds: [...r.kinds].sort(),
131
+ lexicons: [...r.lexicons].sort(),
132
+ nodes: r.nodes.sort(),
133
+ components: [],
134
+ }));
135
+ }
136
+ /**
137
+ * Join instances to components. `links` are the composed graph's member link
138
+ * rows: a component crosses to another member's instance `via: "link"` when
139
+ * its member is the consumer of a resolved link whose producer is the
140
+ * instance's member.
141
+ */
142
+ export function joinComponents(instances, components, links) {
143
+ const linked = new Set();
144
+ for (const r of links) {
145
+ if ("consumer" in r && "producer" in r && r.status === "resolved")
146
+ linked.add(`${r.consumer}\u0000${r.producer}`);
147
+ }
148
+ const via = (c, i) => c.member === i.member ? "member" : linked.has(`${c.member}\u0000${i.member}`) ? "link" : "unlinked";
149
+ return instances.map((i) => {
150
+ const matches = [];
151
+ for (const c of components) {
152
+ if (c.composites) {
153
+ const kind = i.kinds.find((k) => c.composites.includes(k));
154
+ if (kind)
155
+ matches.push({ component: c.id, by: "composites", against: "kind", value: kind, label: "exact", via: via(c, i) });
156
+ continue;
157
+ }
158
+ let match;
159
+ for (const k of i.kinds) {
160
+ const label = joinLabel(c.name, k);
161
+ if (label && (!match || (label === "exact" && match.label !== "exact")))
162
+ match = { by: "name", against: "kind", value: k, label };
163
+ }
164
+ if (!match) {
165
+ const label = joinLabel(c.name, i.instance);
166
+ if (label)
167
+ match = { by: "name", against: "instance", value: i.instance, label };
168
+ }
169
+ if (match)
170
+ matches.push({ component: c.id, ...match, via: via(c, i) });
171
+ }
172
+ matches.sort((a, b) => a.component.localeCompare(b.component));
173
+ return { ...i, components: matches };
174
+ });
175
+ }
176
+ function memberEntry(m, componentReason, runtimes, environments) {
177
+ const reason = m.reason ?? componentReason;
178
+ const status = m.status === "composed" ? (componentReason ? "failed" : "read") : m.status;
179
+ return { name: m.name, dir: m.dir, kind: m.kind, status, reason, chant: m.chant, runtimeReasons: runtimes?.reasons ?? [], environmentReasons: environments?.reasons ?? [] };
180
+ }
181
+ /** Read the workspace's composites and components, and build the document. Never throws a `WorkspaceReadError`. */
182
+ export async function workspaceComposites(query) {
183
+ const head = { $schema: COMPOSITES_OUTPUT_SCHEMA_ID, contract: COMPOSITES_CONTRACT_VERSION, chant: readerVersion() };
184
+ let runtimes = new Map();
185
+ const { loadPlugin, readLedgerEnvironments: readLedger = readLedgerEnvironments, ...graphQuery } = query;
186
+ const { doc: graph, failed, components: runs } = await workspaceGraph({
187
+ ...graphQuery,
188
+ // The composites read source only; a live flag never reaches the members.
189
+ ...(graphQuery.args ? { args: { ...graphQuery.args, live: false, overlay: false, traffic: undefined } } : {}),
190
+ components: true,
191
+ inTree: async (root, members) => {
192
+ runtimes = await readRuntimesIn(root, members, loadPlugin);
193
+ },
194
+ });
195
+ // With no live read, the graph fails only with a declaration code.
196
+ if ("error" in graph)
197
+ return { doc: { ...head, error: { ...graph.error, code: graph.error.code } }, failed: true };
198
+ const byMember = new Map((runs ?? []).map((r) => [r.unit.member, r]));
199
+ const members = [];
200
+ const components = [];
201
+ let componentsFailed = false;
202
+ for (const m of graph.members) {
203
+ const run = m.status === "composed" ? byMember.get(m.name) : undefined;
204
+ // The ledger is the local chant/lifecycle branch, read from the working tree even with --at, as workspace status reads it.
205
+ const memberRuntimes = runtimes.get(m.name);
206
+ const environments = memberRuntimes ? memberEnvironments(memberRuntimes, readLedger(m, query.cwd)) : undefined;
207
+ let reason = null;
208
+ if (run) {
209
+ const read = readComponents(m.name, m.dir, run, memberRuntimes, environments);
210
+ if ("reason" in read) {
211
+ reason = read.reason;
212
+ componentsFailed = true;
213
+ }
214
+ else
215
+ components.push(...read.components);
216
+ }
217
+ members.push(memberEntry(m, reason, memberRuntimes, environments));
218
+ }
219
+ components.sort((a, b) => a.id.localeCompare(b.id));
220
+ const composites = joinComponents(compositeInstances(graph), components, graph.links);
221
+ const read = members.filter((m) => m.status === "read");
222
+ const reasons = [];
223
+ if (!members.some((m) => m.kind === "chant" && m.status !== "skipped")) {
224
+ reasons.push({ code: "composites-no-chant-member", message: "no member of kind chant was read, so nothing declares a composite or a component" });
225
+ }
226
+ else if (read.length > 0) {
227
+ const names = read.map((m) => m.name).join(", ");
228
+ if (composites.length === 0)
229
+ reasons.push({ code: "composites-none-declared", message: `the members read (${names}) declare no composite instance` });
230
+ if (components.length === 0)
231
+ reasons.push({ code: "composites-no-component", message: `the members read (${names}) declare no component in a *.component.ts file` });
232
+ }
233
+ const withComponent = composites.filter((c) => c.components.length > 0).length;
234
+ return {
235
+ doc: {
236
+ ...head,
237
+ at: graph.at,
238
+ workspace: graph.workspace,
239
+ members,
240
+ composites,
241
+ components,
242
+ reasons,
243
+ summary: { composites: composites.length, withComponent, withoutComponent: composites.length - withComponent, components: components.length },
244
+ },
245
+ failed: failed || componentsFailed,
246
+ };
247
+ }
248
+ /** `chant workspace graph --composites`: print the document as JSON, always, like the composed graph. */
249
+ export async function runWorkspaceComposites(ctx, cwd) {
250
+ const { args } = ctx;
251
+ const { doc, failed } = await workspaceComposites({
252
+ cwd,
253
+ at: args.at,
254
+ members: args.members,
255
+ args,
256
+ onStderr: (text) => process.stderr.write(text),
257
+ });
258
+ emitDocument(doc, args.output);
259
+ if ("error" in doc) {
260
+ const l = doc.error.location;
261
+ console.error(formatError({ message: `${doc.error.code}: ${l ? `${l.file}:${l.line}:${l.column}: ` : ""}${doc.error.message}` }));
262
+ }
263
+ return failed ? 1 : 0;
264
+ }