@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
package/dist/config.js ADDED
@@ -0,0 +1,605 @@
1
+ import { existsSync, readFileSync } from "fs";
2
+ import { dirname, join } from "path";
3
+ import { z } from "zod";
4
+ import { DEFAULT_SBOM_FORMAT } from "./components/verbs/sbom-generator.js";
5
+ import { findProjectConfig } from "./project-root.js";
6
+ import { evaluateProjectConfig } from "./config-sandbox.js";
7
+ import { lexiconNames, pathLexiconRoot, registerLexiconDeclarations } from "./lexicon-module.js";
8
+ import { decideConfigSchema } from "./op/decide-config.js";
9
+ /** The declared name of one `environments` entry, whichever form it takes. */
10
+ export function environmentName(entry) {
11
+ return typeof entry === "string" ? entry : entry.name;
12
+ }
13
+ /**
14
+ * Every declared environment's name, in `environments` order. `undefined` in,
15
+ * `undefined` out — mirrors the field itself being optional, so a caller that
16
+ * already writes `config.environments?.something` can keep doing so:
17
+ * `environmentNames(config.environments)?.includes(name)`.
18
+ */
19
+ export function environmentNames(environments) {
20
+ return environments?.map(environmentName);
21
+ }
22
+ /**
23
+ * Whether a declared environment name is a glob pattern rather than a literal
24
+ * (#1221) — it contains at least one `*`.
25
+ */
26
+ export function isEnvironmentPattern(declaredName) {
27
+ return declaredName.includes("*");
28
+ }
29
+ /**
30
+ * Anchored `*`-glob match (#1221): each `*` in `pattern` matches any run of
31
+ * characters (possibly empty); everything else matches itself. Deliberately
32
+ * the whole surface — no `?`, no character classes, no regex. A pattern with
33
+ * no `*` degenerates to string equality.
34
+ */
35
+ export function matchesEnvironmentPattern(pattern, name) {
36
+ const parts = pattern.split("*");
37
+ if (parts.length === 1)
38
+ return pattern === name;
39
+ const first = parts[0];
40
+ const last = parts[parts.length - 1];
41
+ if (!name.startsWith(first))
42
+ return false;
43
+ let cursor = first.length;
44
+ for (let i = 1; i < parts.length - 1; i++) {
45
+ const part = parts[i];
46
+ if (part === "")
47
+ continue;
48
+ const at = name.indexOf(part, cursor);
49
+ if (at === -1)
50
+ return false;
51
+ cursor = at + part.length;
52
+ }
53
+ return name.length - cursor >= last.length && name.endsWith(last);
54
+ }
55
+ /**
56
+ * Environment-membership test (#1221): is `name` covered by this project's
57
+ * declared `environments`? A literal entry matches by equality; an entry
58
+ * containing `*` matches as a glob pattern (`"pr-*"` covers `pr-42`).
59
+ * Literals are checked first across the whole list, then patterns — so a
60
+ * name that is declared outright never depends on pattern order. `undefined`
61
+ * / empty `environments` returns `false`; callers that treat "no declared
62
+ * environments" as "anything goes" (e.g. {@link unknownEnvError} in
63
+ * `./env.ts`) guard that case themselves.
64
+ */
65
+ export function matchesDeclaredEnvironment(environments, name) {
66
+ const names = environmentNames(environments) ?? [];
67
+ if (names.includes(name))
68
+ return true;
69
+ return names.some((declared) => isEnvironmentPattern(declared) && matchesEnvironmentPattern(declared, name));
70
+ }
71
+ /**
72
+ * The endpoint `name` declares (chant #1166) — `undefined` for a bare-string
73
+ * entry, an entry with no `endpoint` set, or a name this project doesn't
74
+ * declare at all. `./live-endpoint.ts`'s `applyLiveEndpoint` is the consumer:
75
+ * it injects this into the ambient env var each observing lexicon's CLI
76
+ * shell-out reads (e.g. `AWS_ENDPOINT_URL`), unless that var is already set —
77
+ * ambient always wins.
78
+ *
79
+ * A pattern entry (#1221) can carry an endpoint too: `{ name: "pr-*",
80
+ * endpoint }` supplies the endpoint for every `pr-<n>` environment. A literal
81
+ * entry always wins over a pattern — declaring `pr-special` alongside
82
+ * `pr-*` resolves `pr-special` to the literal entry's endpoint (or none).
83
+ */
84
+ export function environmentEndpoint(environments, name) {
85
+ const found = environments?.find((e) => environmentName(e) === name) ??
86
+ environments?.find((e) => isEnvironmentPattern(environmentName(e)) && matchesEnvironmentPattern(environmentName(e), name));
87
+ return found && typeof found !== "string" ? found.endpoint : undefined;
88
+ }
89
+ /**
90
+ * Zod schema for ChantConfig validation.
91
+ */
92
+ const EnvironmentEntrySchema = z.union([
93
+ z.string().min(1),
94
+ z.object({
95
+ name: z.string().min(1),
96
+ endpoint: z.string().min(1).optional(),
97
+ }),
98
+ ]);
99
+ const LexiconEntrySchema = z.union([
100
+ z.string().min(1),
101
+ z.object({
102
+ name: z.string().min(1),
103
+ module: z.string().min(1),
104
+ root: z.string().min(1).optional(),
105
+ }).strict(),
106
+ ]);
107
+ export const ChantConfigSchema = z.object({
108
+ lexicons: z.array(LexiconEntrySchema).optional(),
109
+ capabilities: z.array(z.string().min(1)).optional(),
110
+ environments: z.array(EnvironmentEntrySchema).optional(),
111
+ sourceDir: z.string().min(1).optional(),
112
+ lint: z.record(z.string(), z.unknown()).optional(),
113
+ ownership: z.object({
114
+ stack: z.string().min(1).optional(),
115
+ env: z.union([z.string().min(1), z.object({ param: z.string().min(1) })]).optional(),
116
+ enabled: z.boolean().optional(),
117
+ }).optional(),
118
+ build: z.object({
119
+ fold: z.boolean().optional(),
120
+ }).optional(),
121
+ buildParams: z.record(z.string(), z.object({
122
+ type: z.enum(["string", "number", "boolean"]),
123
+ default: z.union([z.string(), z.number(), z.boolean()]).optional(),
124
+ enum: z.array(z.union([z.string(), z.number(), z.boolean()])).optional(),
125
+ env: z.string().min(1).optional(),
126
+ required: z.boolean().optional(),
127
+ description: z.string().optional(),
128
+ })).optional(),
129
+ release: z.object({
130
+ autoRecord: z.boolean().optional(),
131
+ }).optional(),
132
+ // Strict: a misspelt key here would leave Ops on the local runtime with
133
+ // nothing said (#2523).
134
+ run: z.object({
135
+ on: z.string().min(1).optional(),
136
+ }).strict().optional(),
137
+ sbom: z.object({
138
+ format: z.enum(["spdx", "cyclonedx"]).optional(),
139
+ enabled: z.boolean().optional(),
140
+ }).optional(),
141
+ signing: z.object({
142
+ keyless: z.boolean().optional(),
143
+ oidcIssuer: z.string().min(1).optional(),
144
+ identity: z.string().min(1).optional(),
145
+ identityIsRegexp: z.boolean().optional(),
146
+ key: z.string().min(1).optional(),
147
+ }).optional(),
148
+ vulnPolicy: z.object({
149
+ failSeverity: z.enum(["critical", "high", "medium", "low", "negligible", "unknown"]).optional(),
150
+ fixableOnly: z.boolean().optional(),
151
+ warnSeverity: z.enum(["critical", "high", "medium", "low", "negligible", "unknown"]).optional(),
152
+ failOnLicense: z.boolean().optional(),
153
+ failOnUnknownSeverity: z.boolean().optional(),
154
+ failOnKev: z.boolean().optional(),
155
+ failEpssAtOrAbove: z.number().min(0).max(1).optional(),
156
+ warnEpssAtOrAbove: z.number().min(0).max(1).optional(),
157
+ exploitabilityFixableOnly: z.boolean().optional(),
158
+ license: z.object({
159
+ allow: z.array(z.string()).optional(),
160
+ deny: z.array(z.string()).optional(),
161
+ }).optional(),
162
+ scanner: z.enum(["grype", "trivy"]).optional(),
163
+ vexSources: z.array(z.string()).optional(),
164
+ }).optional(),
165
+ knowledge: z.object({
166
+ dir: z.string().min(1).optional(),
167
+ }).optional(),
168
+ codegen: z.object({
169
+ outDir: z.string().min(1).optional(),
170
+ }).strict().optional(),
171
+ decide: decideConfigSchema.optional(),
172
+ exclude: z.array(z.string().min(1)).optional(),
173
+ include: z.array(z.string().min(1)).optional(),
174
+ rootOnly: z.boolean().optional(),
175
+ }).passthrough();
176
+ /**
177
+ * Default configuration when no config file exists.
178
+ */
179
+ export const DEFAULT_CHANT_CONFIG = {};
180
+ /**
181
+ * Load project configuration from a directory.
182
+ *
183
+ * Tries `chant.config.ts` first, then `chant.config.json`. Returns default
184
+ * config if neither exists.
185
+ *
186
+ * chant #1113 — `chant.config.ts` is project-authored code, so *where* it is
187
+ * evaluated is a security question, and the answer is
188
+ * `./config-sandbox.ts`'s: in a sandboxed child when this process was armed by
189
+ * `chant build --sandbox`, in-process (exactly as before) otherwise. Either
190
+ * way the result is the same plain configuration object, and validation
191
+ * ({@link normalizeConfig}) happens here, in the trusted process.
192
+ * `chant.config.json` is data, not code — it is parsed in-process under
193
+ * `--sandbox` too, because there is nothing to execute.
194
+ */
195
+ export async function loadChantConfig(dir) {
196
+ // Try chant.config.ts first
197
+ const tsPath = join(dir, "chant.config.ts");
198
+ if (existsSync(tsPath)) {
199
+ const config = await evaluateProjectConfig(tsPath, dir);
200
+ return { config: normalizeConfig(config, tsPath), configPath: tsPath };
201
+ }
202
+ // Fall back to chant.config.json
203
+ const jsonPath = join(dir, "chant.config.json");
204
+ if (existsSync(jsonPath)) {
205
+ const { readFileSync } = await import("fs");
206
+ const content = readFileSync(jsonPath, "utf-8");
207
+ const parsed = JSON.parse(content);
208
+ return { config: normalizeConfig(parsed, jsonPath), configPath: jsonPath };
209
+ }
210
+ return { config: DEFAULT_CHANT_CONFIG };
211
+ }
212
+ /**
213
+ * Load project configuration by walking up from `startDir` to the project
214
+ * root (chant #1117), instead of trying only `startDir` itself.
215
+ *
216
+ * `chant build src/<stack>` (and anything else invoked with a subdirectory —
217
+ * `lint.policies`' `evaluateProjectPolicies`, `--components --generate`)
218
+ * builds scoped to that subdirectory, but `chant.config.ts` almost always
219
+ * lives at the project root, one or more levels up. Before this, callers
220
+ * either read `startDir` alone or bolted on a single `dirname()` fallback —
221
+ * fine for a one-level-deep stack, silently blind to anything deeper
222
+ * (a `src/<stack>` layout is exactly one level too deep: `buildParams`' declared
223
+ * `env:` mappings never resolved, so the env vars they named were inert under
224
+ * every `npm run synth:*` for two releases). Uses the same walk `chant
225
+ * lint`/`chant graph` already used ({@link findProjectConfig},
226
+ * shared with `./lint/config.ts`'s `findProjectRoot`) — one config-discovery
227
+ * contract for the whole CLI.
228
+ *
229
+ * chant #1502 — a lint-scoping fragment does not end the walk. The convention
230
+ * of a `src/chant.config.json` holding only `extends`/`rules` (cc-aws-canonical
231
+ * and most of examples/) sits BETWEEN the build directory and the real
232
+ * `chant.config.ts`, and stopping there re-introduced the exact silent
233
+ * fallback this walk exists to prevent: `chant build src` resolved the
234
+ * fragment, found no `ownership`, and built unstamped manifests that every
235
+ * owned-scoped live read then withheld. A fragment is skipped, not merged —
236
+ * lint resolution keeps its own nearest-wins walk untouched, and a JSON
237
+ * config declaring any project-level key still wins where it stands.
238
+ */
239
+ export async function loadChantConfigUpward(startDir) {
240
+ const { dir, configPath } = findProjectConfigPastFragments(startDir);
241
+ if (configPath)
242
+ warnIfFragmentShadowsProjectConfig(configPath);
243
+ return loadChantConfig(dir);
244
+ }
245
+ /** The walk {@link loadChantConfigUpward} makes, lint-only fragments skipped, without its warning. */
246
+ export function findProjectConfigPastFragments(startDir) {
247
+ let { dir, configPath } = findProjectConfig(startDir);
248
+ while (configPath && isLintOnlyFragment(configPath)) {
249
+ const parent = dirname(dir);
250
+ if (parent === dir)
251
+ break;
252
+ ({ dir, configPath } = findProjectConfig(parent));
253
+ }
254
+ return { dir, configPath };
255
+ }
256
+ /**
257
+ * The `exclude`/`include` globs of the project `startDir` belongs to, found by
258
+ * the same upward walk as {@link loadChantConfigUpward}. `undefined` when the
259
+ * project declares neither. `include` re-admits what `exclude` skips, and
260
+ * also what the discovery walk skips by default (#2527), so it means
261
+ * something on its own.
262
+ *
263
+ * A config that fails to load is left to the command's own config load to
264
+ * report, so discovery keeps working where it did before, unless the failure
265
+ * is in `exclude` or `include` themselves: ignoring those would discover the
266
+ * very files the project asked to skip.
267
+ */
268
+ export async function resolveDiscoveryGlobs(startDir) {
269
+ const { dir, configPath } = findProjectConfigPastFragments(startDir);
270
+ if (!configPath)
271
+ return undefined;
272
+ let config;
273
+ try {
274
+ ({ config } = await loadChantConfig(dir));
275
+ }
276
+ catch (err) {
277
+ if (err instanceof InvalidChantConfigError && (err.key === "exclude" || err.key === "include"))
278
+ throw err;
279
+ return undefined;
280
+ }
281
+ const exclude = config.exclude ?? [];
282
+ const include = config.include ?? [];
283
+ if (exclude.length === 0 && include.length === 0)
284
+ return undefined;
285
+ return { root: dir, exclude, include };
286
+ }
287
+ /**
288
+ * The top-level keys of `./lint/config.ts`'s `LintConfigSchema` (plus the
289
+ * `$schema` editor convention). A `chant.config.json` whose keys all come from
290
+ * this set is a lint-scoping fragment, not a project config — see
291
+ * {@link loadChantConfigUpward}. `chant.config.ts` is never a fragment: it is
292
+ * project-authored code, and inspecting it would mean evaluating it.
293
+ */
294
+ const LINT_FRAGMENT_KEYS = new Set(["$schema", "extends", "rules", "overrides", "plugins", "policies"]);
295
+ /**
296
+ * JSON has no comments, so a project that wants to explain why it disabled a
297
+ * rule reaches for an underscore-prefixed key. chant #1711: both CockroachDB
298
+ * examples carried a `_ruleNotes` object in every stack's fragment, and one
299
+ * unrecognized key was enough to stop the walk — `chant build src/east`
300
+ * resolved the fragment as the project config, found no `buildParams`, no
301
+ * `ownership` and no `lexicons`, and emitted
302
+ * `gke-crdb-east-crdb@undefined.iam.gserviceaccount.com`. Silently.
303
+ *
304
+ * An underscore key is a comment. It does not make a fragment a project config.
305
+ */
306
+ const isCommentKey = (k) => k.startsWith("_");
307
+ export function isLintOnlyFragment(configPath) {
308
+ if (!configPath.endsWith("chant.config.json"))
309
+ return false;
310
+ try {
311
+ const parsed = JSON.parse(readFileSync(configPath, "utf-8"));
312
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed))
313
+ return false;
314
+ const keys = Object.keys(parsed).filter((k) => !isCommentKey(k));
315
+ return keys.length > 0 && keys.every((k) => LINT_FRAGMENT_KEYS.has(k));
316
+ }
317
+ catch {
318
+ // Unreadable/unparseable JSON: let loadChantConfig surface the real error
319
+ // in place rather than silently walking past it.
320
+ return false;
321
+ }
322
+ }
323
+ /**
324
+ * The `chant.config.json` the walk stopped at declares no project-level key at
325
+ * all — so it is about to be used as the project config while carrying none of
326
+ * the things a project config exists to carry.
327
+ *
328
+ * The comment-key rule above fixes the case that bit (chant #1711), but the
329
+ * hole it came from is general: any key outside {@link LINT_FRAGMENT_KEYS}
330
+ * turns a fragment into the project config, and the consequence is a build
331
+ * that silently loses every parameter, the ownership marker and the lexicon
332
+ * list. This says so, naming the key responsible, instead of leaving it to be
333
+ * discovered in the output.
334
+ */
335
+ function warnIfFragmentShadowsProjectConfig(configPath) {
336
+ if (!configPath.endsWith("chant.config.json"))
337
+ return;
338
+ try {
339
+ const parsed = JSON.parse(readFileSync(configPath, "utf-8"));
340
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed))
341
+ return;
342
+ const keys = Object.keys(parsed).filter((k) => !isCommentKey(k));
343
+ if (keys.some((k) => !LINT_FRAGMENT_KEYS.has(k)) && !keys.some((k) => PROJECT_CONFIG_KEYS.has(k))) {
344
+ const offenders = keys.filter((k) => !LINT_FRAGMENT_KEYS.has(k));
345
+ console.error(`warning: ${configPath} is being used as the project config, but declares no project-level ` +
346
+ `key (${[...PROJECT_CONFIG_KEYS].slice(0, 4).join(", ")}, …). ` +
347
+ `${offenders.length === 1 ? "The key" : "The keys"} ${offenders.map((k) => `"${k}"`).join(", ")} ` +
348
+ `stopped the walk to the real one — any config above this file is being ignored. ` +
349
+ `Prefix a comment key with "_", or move the key to the project config. (chant #1711)`);
350
+ }
351
+ }
352
+ catch {
353
+ // Unreadable/unparseable: loadChantConfig reports it properly.
354
+ }
355
+ }
356
+ /** Top-level keys that make a config a *project* config rather than a lint fragment. */
357
+ const PROJECT_CONFIG_KEYS = new Set(Object.keys(ChantConfigSchema.shape).filter((k) => k !== "lint"));
358
+ /** Whether an `ownership.env` entry is a build-parameter reference rather than a literal. */
359
+ export function isOwnershipParamRef(env) {
360
+ return typeof env === "object" && env !== null && typeof env.param === "string";
361
+ }
362
+ /**
363
+ * The ownership stack identity alone — `ownership.stack` when marking is on
364
+ * (no `stack`, or `enabled: false`, means off). For callers that need the
365
+ * stack and nothing else (a field manager, a prune selector) and so have no
366
+ * build parameters to resolve `env` against.
367
+ */
368
+ export function resolveOwnershipStack(config) {
369
+ const o = config.ownership;
370
+ if (!o || !o.stack || o.enabled === false)
371
+ return undefined;
372
+ return o.stack;
373
+ }
374
+ /**
375
+ * Resolve the `env` half of the ownership marker (#1396). A literal is
376
+ * returned as-is. A `{ param }` reference is looked up in this build's resolved
377
+ * build parameters and must find one: a reference to a parameter that was
378
+ * never declared, or that resolved to no value, throws rather than quietly
379
+ * stamping a marker without an env — an env-less marker is exactly what lets
380
+ * a prod deployment go unseen by `--owned` filtering scoped to prod.
381
+ */
382
+ export function resolveOwnershipEnv(config, buildParams) {
383
+ const env = config.ownership?.env;
384
+ if (!isOwnershipParamRef(env))
385
+ return env;
386
+ const name = env.param;
387
+ const declared = config.buildParams?.[name];
388
+ if (!declared) {
389
+ throw new Error(`ownership.env references build parameter "${name}", which chant.config.ts's buildParams does not declare`);
390
+ }
391
+ const resolved = buildParams?.find((p) => p.name === name);
392
+ if (!resolved) {
393
+ throw new Error(`ownership.env references build parameter "${name}", which resolved to no value for this build — pass --param ${name}=<value>${declared.env ? `, set ${declared.env}` : ""}, or give it a default`);
394
+ }
395
+ return String(resolved.value);
396
+ }
397
+ /**
398
+ * Resolve the ownership marker to stamp from project config, or undefined when
399
+ * ownership marking is off (no `stack`, or `enabled: false`). `buildParams` is
400
+ * this build's resolved parameters (`resolveBuildParams`'s provenance), which
401
+ * an `ownership.env: { param }` reference resolves against — see {@link
402
+ * resolveOwnershipEnv}; it throws when the reference cannot be satisfied.
403
+ */
404
+ export function resolveOwnershipMarker(config, buildParams) {
405
+ const stack = resolveOwnershipStack(config);
406
+ if (stack === undefined)
407
+ return undefined;
408
+ return { stack, env: resolveOwnershipEnv(config, buildParams) };
409
+ }
410
+ /**
411
+ * The divergence #1396 is about, made loud when it cannot be removed: a
412
+ * project whose `ownership.env` is a literal while it also declares a build
413
+ * parameter named `env` has two answers to "which environment is this", and
414
+ * the manifest carries both (the ownership marker from config, the labels
415
+ * from the parameter). Returns a warning naming both values when they differ;
416
+ * undefined when there is nothing to say (no literal, no `env` parameter, or
417
+ * the two agree). The fix is the `{ param: "env" }` reference.
418
+ */
419
+ export function ownershipEnvDisagreement(config, buildParams) {
420
+ const literal = config.ownership?.env;
421
+ if (typeof literal !== "string")
422
+ return undefined;
423
+ if (resolveOwnershipStack(config) === undefined)
424
+ return undefined;
425
+ const param = buildParams?.find((p) => p.name === "env");
426
+ if (!param || String(param.value) === literal)
427
+ return undefined;
428
+ return (`ownership.env is "${literal}" but the env build parameter resolved to ${JSON.stringify(param.value)} (${param.source}) — ` +
429
+ `the ownership marker and params.env disagree about which environment this build is for. ` +
430
+ `Use ownership: { env: { param: "env" } } so the marker follows the parameter.`);
431
+ }
432
+ /**
433
+ * Whether auto-emitting a release-ledger record after a successful `chant
434
+ * run --components` deploy should be skipped (#597). Opt-out, not opt-in:
435
+ * recording happens unless the CLI's `--no-release-record` flag was passed
436
+ * (`cliFlag`) or the project config sets `release.autoRecord: false` — the
437
+ * flag always wins for that one invocation, regardless of config.
438
+ */
439
+ export function resolveAutoReleaseDisabled(config, cliFlag) {
440
+ if (cliFlag)
441
+ return true;
442
+ return config.release?.autoRecord === false;
443
+ }
444
+ /**
445
+ * Whether `chant build` should use the fold path (#1022, epic #1019)
446
+ * instead of running each source module. DEFAULT-ON since chant #1134: fold
447
+ * is the build path unless something turns it off. Precedence, most specific
448
+ * wins: an explicit CLI flag (`--fold` → true, `--no-fold` → false, arriving
449
+ * here as `cliFlag`), then the project config's `build.fold`, then the
450
+ * default of `true`. The epic's evidence base for the flip — coverage,
451
+ * byte-identity, and the sandbox execution boundary — is recorded on #1134
452
+ * and #1090.
453
+ */
454
+ export function resolveFoldEnabled(config, cliFlag) {
455
+ if (cliFlag !== undefined)
456
+ return cliFlag;
457
+ if (config.build?.fold !== undefined)
458
+ return config.build.fold;
459
+ return true;
460
+ }
461
+ /**
462
+ * Whether `chant build` should run its run-fallback files (or, without
463
+ * `--fold`, every file) in an isolated sandboxed child process rather than
464
+ * in-process (chant #1045 Phase 2). Opt-in: off unless the CLI's `--sandbox`
465
+ * flag was passed (`cliFlag`) or the project config sets `build.sandbox:
466
+ * true` — the flag always wins for that one invocation, regardless of
467
+ * config. Independent of {@link resolveFoldEnabled}: sandboxing without
468
+ * folding isolates every discovered file; sandboxing with folding isolates
469
+ * only the per-file run-fallback remainder.
470
+ */
471
+ export function resolveSandboxEnabled(config, cliFlag) {
472
+ if (cliFlag)
473
+ return true;
474
+ return config.build?.sandbox === true;
475
+ }
476
+ /**
477
+ * Resolve which SBOM format a `generate-sbom` step should request (#606),
478
+ * given the project's `chant.config.ts` `sbom.format` and an optional
479
+ * component/step-level override. Precedence, most to least specific:
480
+ * `stepFormat` (the component's own `build.sbom.format` or an explicit
481
+ * `generate-sbom` step input) > `config.sbom.format` (project default) >
482
+ * `DEFAULT_SBOM_FORMAT` ("spdx", ./components/verbs/sbom-generator.ts).
483
+ * Never hardcodes one format as *the* format — this is purely precedence
484
+ * resolution over the two first-class formats SPDX/CycloneDX.
485
+ */
486
+ export function resolveSbomFormat(config, stepFormat) {
487
+ return stepFormat ?? config.sbom?.format ?? DEFAULT_SBOM_FORMAT;
488
+ }
489
+ /**
490
+ * Resolve project-wide signing defaults from `chant.config.ts`'s `signing`
491
+ * section (#622). Keyless unless `signing.keyless === false` — the same
492
+ * "default is the safe choice, override is explicit" precedence
493
+ * `resolveOwnershipMarker`/`resolveAutoReleaseDisabled` already use for their
494
+ * respective opt-outs.
495
+ */
496
+ export function resolveSigningDefaults(config) {
497
+ const s = config.signing;
498
+ const keyless = s?.keyless !== false;
499
+ return {
500
+ keyless,
501
+ ...(!keyless && s?.key ? { key: { key: s.key } } : {}),
502
+ identityPolicyDefaults: {
503
+ expectedIssuer: s?.oidcIssuer,
504
+ expectedIdentity: s?.identity,
505
+ identityIsRegexp: s?.identityIsRegexp,
506
+ key: s?.keyless === false ? s?.key : undefined,
507
+ },
508
+ };
509
+ }
510
+ /**
511
+ * Resolve the `vuln-gate` policy overrides from `chant.config.ts`'s
512
+ * `vulnPolicy` section (#626). Returns only the fields the project set; the
513
+ * gate merges these over its own `DEFAULT_VULN_POLICY`
514
+ * (`./components/verbs/vuln-gate.ts`), so an empty/absent section yields the
515
+ * beginner-safe defaults. `scanner`/`vexSources` are not policy fields — they
516
+ * configure how the capability is constructed and are read separately.
517
+ */
518
+ export function resolveVulnPolicy(config) {
519
+ const v = config.vulnPolicy;
520
+ if (!v)
521
+ return {};
522
+ const out = {};
523
+ if (v.failSeverity)
524
+ out.failSeverity = v.failSeverity;
525
+ if (v.fixableOnly !== undefined)
526
+ out.fixableOnly = v.fixableOnly;
527
+ if (v.warnSeverity)
528
+ out.warnSeverity = v.warnSeverity;
529
+ if (v.failOnLicense !== undefined)
530
+ out.failOnLicense = v.failOnLicense;
531
+ if (v.failOnUnknownSeverity !== undefined)
532
+ out.failOnUnknownSeverity = v.failOnUnknownSeverity;
533
+ // `!== undefined`, never truthiness: `failEpssAtOrAbove: 0` (match any scored
534
+ // finding) and an explicit `failOnKev: false` override must both survive.
535
+ if (v.failOnKev !== undefined)
536
+ out.failOnKev = v.failOnKev;
537
+ if (v.failEpssAtOrAbove !== undefined)
538
+ out.failEpssAtOrAbove = v.failEpssAtOrAbove;
539
+ if (v.warnEpssAtOrAbove !== undefined)
540
+ out.warnEpssAtOrAbove = v.warnEpssAtOrAbove;
541
+ if (v.exploitabilityFixableOnly !== undefined)
542
+ out.exploitabilityFixableOnly = v.exploitabilityFixableOnly;
543
+ if (v.license)
544
+ out.license = v.license;
545
+ return out;
546
+ }
547
+ /**
548
+ * Resolve the OKF knowledge bundle directory (#1864, design #1059):
549
+ * `knowledge.dir` relative to `projectPath` when configured, else the
550
+ * `knowledge/` convention beside `chant.config.ts`. Never checks existence —
551
+ * a project with no bundle yet resolves a path all the same, and
552
+ * `okf-read.ts`'s `loadOkfBundle` treats a missing directory as an empty
553
+ * bundle rather than an error.
554
+ */
555
+ export function resolveKnowledgeDir(config, projectPath) {
556
+ return join(projectPath, config.knowledge?.dir ?? "knowledge");
557
+ }
558
+ /**
559
+ * A config that failed schema validation. `key` is the top-level key of the
560
+ * first problem. `name` stays `"Error"`, so the printed error reads as before.
561
+ */
562
+ export class InvalidChantConfigError extends Error {
563
+ constructor(message, key) {
564
+ super(message);
565
+ this.key = key;
566
+ }
567
+ }
568
+ /**
569
+ * Validate and normalize a raw config object into ChantConfig shape.
570
+ */
571
+ function normalizeConfig(raw, source) {
572
+ if (typeof raw !== "object" || raw === null) {
573
+ return DEFAULT_CHANT_CONFIG;
574
+ }
575
+ const result = ChantConfigSchema.safeParse(raw);
576
+ if (!result.success) {
577
+ const issue = result.error.issues[0];
578
+ const path = issue.path.length > 0 ? issue.path.join(".") : undefined;
579
+ const loc = source ? ` in ${source}` : "";
580
+ throw new InvalidChantConfigError(`Invalid chant config${loc}: ${path ? `${path}: ` : ""}${issue.message}`, issue.path.length > 0 ? String(issue.path[0]) : undefined);
581
+ }
582
+ // chant #2520 — a lexicon declared by module path. The path is recorded for
583
+ // the loaders and the entry becomes its name, so every reader of `lexicons`
584
+ // keeps seeing names. A config of plain names is returned untouched.
585
+ const lexicons = raw.lexicons;
586
+ const baseDir = source !== undefined ? dirname(source) : process.cwd();
587
+ const sourceDir = raw.sourceDir;
588
+ // chant#2590 — a declared `root` must stay inside the project and must not
589
+ // contain its source directory. Refused here rather than narrowed, since
590
+ // the project asked for it by name.
591
+ for (const [i, entry] of (lexicons ?? []).entries()) {
592
+ if (typeof entry === "string" || entry.root === undefined)
593
+ continue;
594
+ const { problem } = pathLexiconRoot(entry, baseDir, sourceDir);
595
+ if (problem !== undefined) {
596
+ const loc = source ? ` in ${source}` : "";
597
+ throw new InvalidChantConfigError(`Invalid chant config${loc}: lexicons.${i}.root: ${problem}`, "lexicons");
598
+ }
599
+ }
600
+ const recorded = registerLexiconDeclarations(lexicons, baseDir, sourceDir);
601
+ if (Object.keys(recorded).length > 0) {
602
+ return { ...raw, lexicons: lexiconNames(lexicons), lexiconModules: recorded };
603
+ }
604
+ return raw;
605
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The one content digest chant computes itself (chant #2514).
3
+ *
4
+ * `contentDigest(x)` is `"sha256:"` followed by the lowercase hex SHA-256 of
5
+ * the UTF-8 bytes of `x`. Anything core hashes goes through it, and anything
6
+ * structured is first put in canonical form with `canonicalJson`
7
+ * (./effect-receipt.ts), so the same value always hashes the same way. The
8
+ * build archive re-exports it from ./components/verbs/build-archive.ts, where
9
+ * it used to live.
10
+ *
11
+ * Before #2514 this function computed a 32-bit string hash and repeated its
12
+ * eight hex digits eight times. Values recorded then are recognised and
13
+ * flagged by ./lifecycle/legacy-digest.ts.
14
+ */
15
+ import { createHash } from "node:crypto";
16
+ /** `sha256:<64 hex>` over the UTF-8 bytes of `input`. */
17
+ export function contentDigest(input) {
18
+ return `sha256:${createHash("sha256").update(input, "utf8").digest("hex")}`;
19
+ }
20
+ /** Lowercase hex SHA-256 of `bytes`, with no prefix: the form a decision's evidence pin holds (#2549). */
21
+ export function sha256Hex(bytes) {
22
+ return createHash("sha256").update(bytes).digest("hex");
23
+ }