@intentius/chant 0.124.12 → 0.124.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (928) hide show
  1. package/bin/chant +11 -0
  2. package/dist/agents/checks.js +326 -0
  3. package/dist/agents/discover.js +885 -0
  4. package/dist/agents/importer.js +17 -0
  5. package/dist/agents/index.js +12 -0
  6. package/dist/agents/types.js +19 -0
  7. package/dist/apply.js +151 -0
  8. package/dist/attrref.js +70 -0
  9. package/dist/audit/catalog.js +350 -0
  10. package/dist/audit/core.js +252 -0
  11. package/dist/audit/discover.js +633 -0
  12. package/dist/audit/fetch.js +666 -0
  13. package/dist/audit/lineage.js +91 -0
  14. package/dist/audit/nginx.js +366 -0
  15. package/dist/audit/prior-art.js +132 -0
  16. package/dist/audit/proof.js +321 -0
  17. package/dist/audit/report-html.js +194 -0
  18. package/dist/audit/report-model.js +198 -0
  19. package/dist/audit/report.js +102 -0
  20. package/dist/audit/rules-doc.js +144 -0
  21. package/dist/audit/secrets.js +405 -0
  22. package/dist/audit/terraform-state.js +140 -0
  23. package/dist/audit/wrangler.js +262 -0
  24. package/dist/behaviour-delta.js +401 -0
  25. package/dist/behaviour-engine.js +357 -0
  26. package/dist/behaviour-graph.js +83 -0
  27. package/dist/behaviour-http.js +188 -0
  28. package/dist/behaviour-kinds.js +172 -0
  29. package/dist/behaviour-overlay.js +50 -0
  30. package/dist/behaviour-predict.js +188 -0
  31. package/dist/behaviour-request.js +194 -0
  32. package/dist/behaviour.js +1325 -0
  33. package/dist/build-params.js +108 -0
  34. package/dist/build.js +668 -0
  35. package/dist/builder.js +44 -0
  36. package/dist/cdk/advise.js +30 -0
  37. package/dist/cdk/assembly.js +122 -0
  38. package/dist/cdk/graph.js +444 -0
  39. package/dist/cdk/tier-map.js +64 -0
  40. package/dist/cdk/types.js +24 -0
  41. package/dist/change-set.js +312 -0
  42. package/dist/child-project.js +21 -0
  43. package/dist/claimed-fields.js +135 -0
  44. package/dist/cli/build-options.js +70 -0
  45. package/dist/cli/build-params-cli.js +139 -0
  46. package/dist/cli/command-group.js +123 -0
  47. package/dist/cli/commands/audit-agents.js +326 -0
  48. package/dist/cli/commands/audit.js +571 -0
  49. package/dist/cli/commands/build.js +920 -0
  50. package/dist/cli/commands/carve-apply.js +153 -0
  51. package/dist/cli/commands/carve-bridge.js +201 -0
  52. package/dist/cli/commands/carve-emit.js +332 -0
  53. package/dist/cli/commands/carve-status.js +119 -0
  54. package/dist/cli/commands/carve.js +204 -0
  55. package/dist/cli/commands/check-lexicon-docs.js +79 -0
  56. package/dist/cli/commands/check-lexicon-examples.js +177 -0
  57. package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
  58. package/dist/cli/commands/check-lexicon-mcp.js +82 -0
  59. package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
  60. package/dist/cli/commands/check-lexicon-plugin.js +104 -0
  61. package/dist/cli/commands/check-lexicon.js +766 -0
  62. package/dist/cli/commands/describe.js +85 -0
  63. package/dist/cli/commands/diff.js +175 -0
  64. package/dist/cli/commands/doctor.js +350 -0
  65. package/dist/cli/commands/import-agents.js +155 -0
  66. package/dist/cli/commands/import.js +670 -0
  67. package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
  68. package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
  69. package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
  70. package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
  71. package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
  72. package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
  73. package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
  74. package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
  75. package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
  76. package/dist/cli/commands/init-lexicon.js +172 -0
  77. package/dist/cli/commands/init.js +381 -0
  78. package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
  79. package/dist/cli/commands/lexicon-surface-diff.js +145 -0
  80. package/dist/cli/commands/licenses.js +125 -0
  81. package/dist/cli/commands/lint.d.ts.map +1 -1
  82. package/dist/cli/commands/lint.js +948 -0
  83. package/dist/cli/commands/list.js +63 -0
  84. package/dist/cli/commands/migrate.d.ts.map +1 -1
  85. package/dist/cli/commands/migrate.js +423 -0
  86. package/dist/cli/commands/onboard.js +403 -0
  87. package/dist/cli/commands/pinned-upgrade.js +191 -0
  88. package/dist/cli/commands/update.js +194 -0
  89. package/dist/cli/commands/vendor.js +217 -0
  90. package/dist/cli/conflict-check.js +104 -0
  91. package/dist/cli/debug.js +8 -0
  92. package/dist/cli/format.js +104 -0
  93. package/dist/cli/handlers/build.js +267 -0
  94. package/dist/cli/handlers/carve-apply.js +30 -0
  95. package/dist/cli/handlers/carve-bridge.js +28 -0
  96. package/dist/cli/handlers/carve-emit.js +50 -0
  97. package/dist/cli/handlers/carve-status.js +26 -0
  98. package/dist/cli/handlers/carve.js +40 -0
  99. package/dist/cli/handlers/change-set.js +46 -0
  100. package/dist/cli/handlers/components.js +730 -0
  101. package/dist/cli/handlers/dev.js +113 -0
  102. package/dist/cli/handlers/emulator.js +233 -0
  103. package/dist/cli/handlers/explain.js +54 -0
  104. package/dist/cli/handlers/fan-out.js +422 -0
  105. package/dist/cli/handlers/gate-resume.js +275 -0
  106. package/dist/cli/handlers/generate.js +84 -0
  107. package/dist/cli/handlers/graph.js +969 -0
  108. package/dist/cli/handlers/init.js +102 -0
  109. package/dist/cli/handlers/lifecycle.js +1727 -0
  110. package/dist/cli/handlers/lint.js +62 -0
  111. package/dist/cli/handlers/migrate.js +48 -0
  112. package/dist/cli/handlers/misc.js +391 -0
  113. package/dist/cli/handlers/operator.js +1162 -0
  114. package/dist/cli/handlers/override-approve.js +102 -0
  115. package/dist/cli/handlers/pr.js +503 -0
  116. package/dist/cli/handlers/promote.js +342 -0
  117. package/dist/cli/handlers/run-generate.js +206 -0
  118. package/dist/cli/handlers/run-wave.js +66 -0
  119. package/dist/cli/handlers/run.js +1191 -0
  120. package/dist/cli/handlers/scenario.js +325 -0
  121. package/dist/cli/handlers/search.js +924 -0
  122. package/dist/cli/handlers/serve.js +32 -0
  123. package/dist/cli/handlers/vendor.js +154 -0
  124. package/dist/cli/index.js +3 -0
  125. package/dist/cli/is-entry-point.js +23 -0
  126. package/dist/cli/lsp/capabilities.js +28 -0
  127. package/dist/cli/lsp/diagnostics.js +34 -0
  128. package/dist/cli/lsp/server.js +329 -0
  129. package/dist/cli/main.d.ts.map +1 -1
  130. package/dist/cli/main.js +2540 -0
  131. package/dist/cli/mcp/lifecycle-tools.js +80 -0
  132. package/dist/cli/mcp/op-tools.js +306 -0
  133. package/dist/cli/mcp/resource-handlers.js +258 -0
  134. package/dist/cli/mcp/resources/context.js +85 -0
  135. package/dist/cli/mcp/server.js +353 -0
  136. package/dist/cli/mcp/tools/build.js +111 -0
  137. package/dist/cli/mcp/tools/composites.js +95 -0
  138. package/dist/cli/mcp/tools/explain.js +166 -0
  139. package/dist/cli/mcp/tools/import.js +49 -0
  140. package/dist/cli/mcp/tools/lint.js +41 -0
  141. package/dist/cli/mcp/tools/scaffold.js +111 -0
  142. package/dist/cli/mcp/tools/search.js +112 -0
  143. package/dist/cli/mcp/types.js +1 -0
  144. package/dist/cli/mcp/workspace-plugins.js +91 -0
  145. package/dist/cli/mcp/workspace-tools.d.ts +1 -1
  146. package/dist/cli/mcp/workspace-tools.js +564 -0
  147. package/dist/cli/mcp-config.js +70 -0
  148. package/dist/cli/plugins.js +313 -0
  149. package/dist/cli/registry.js +23 -0
  150. package/dist/cli/reporters/stylish.js +329 -0
  151. package/dist/cli/version.js +15 -0
  152. package/dist/cli/watch.js +79 -0
  153. package/dist/codegen/bound-property-types.js +82 -0
  154. package/dist/codegen/coverage.js +119 -0
  155. package/dist/codegen/docs-file-markers.js +60 -0
  156. package/dist/codegen/docs-pages.js +115 -0
  157. package/dist/codegen/docs-rule-scanning.js +164 -0
  158. package/dist/codegen/docs-rules.js +76 -0
  159. package/dist/codegen/docs-sections.js +117 -0
  160. package/dist/codegen/docs-sidebar.js +65 -0
  161. package/dist/codegen/docs-types.js +4 -0
  162. package/dist/codegen/docs.js +356 -0
  163. package/dist/codegen/fetch.js +340 -0
  164. package/dist/codegen/generate-post-synth-barrel.js +63 -0
  165. package/dist/codegen/generate-registry.js +71 -0
  166. package/dist/codegen/generate-runtime-index.js +56 -0
  167. package/dist/codegen/generate-typescript.js +119 -0
  168. package/dist/codegen/generate.js +115 -0
  169. package/dist/codegen/json-patch.js +141 -0
  170. package/dist/codegen/json-schema-to-ts.js +344 -0
  171. package/dist/codegen/json-schema.js +246 -0
  172. package/dist/codegen/lexicon-regen.js +412 -0
  173. package/dist/codegen/naming.js +217 -0
  174. package/dist/codegen/okf-lexicon.js +245 -0
  175. package/dist/codegen/package.js +150 -0
  176. package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
  177. package/dist/codegen/pinned-upgrade.js +494 -0
  178. package/dist/codegen/registry.js +60 -0
  179. package/dist/codegen/rehype-base-url.mjs +68 -0
  180. package/dist/codegen/rolling-upgrade.js +217 -0
  181. package/dist/codegen/surface-snapshot.js +537 -0
  182. package/dist/codegen/testdata/postgres-tags.json +242 -0
  183. package/dist/codegen/topo-sort.js +36 -0
  184. package/dist/codegen/typecheck.js +115 -0
  185. package/dist/codegen/validate.js +200 -0
  186. package/dist/codegen/version-bump.js +35 -0
  187. package/dist/components/auto-release.js +143 -0
  188. package/dist/components/builders.js +47 -0
  189. package/dist/components/capability-plugin-loader.js +175 -0
  190. package/dist/components/capability-plugin-schema.js +46 -0
  191. package/dist/components/capability-plugin.js +99 -0
  192. package/dist/components/capability.js +60 -0
  193. package/dist/components/changed-files.js +72 -0
  194. package/dist/components/cli-support.js +427 -0
  195. package/dist/components/component.js +120 -0
  196. package/dist/components/component.schema.json +271 -0
  197. package/dist/components/config-defaults.js +130 -0
  198. package/dist/components/deploy-units.js +60 -0
  199. package/dist/components/discover.d.ts.map +1 -1
  200. package/dist/components/discover.js +189 -0
  201. package/dist/components/driver-output.js +86 -0
  202. package/dist/components/driver.js +728 -0
  203. package/dist/components/fan-out-output.js +165 -0
  204. package/dist/components/fan-out-record.js +94 -0
  205. package/dist/components/fan-out-run.js +373 -0
  206. package/dist/components/fan-out-support.js +60 -0
  207. package/dist/components/fan-out.js +273 -0
  208. package/dist/components/gate-plan.js +41 -0
  209. package/dist/components/gated-wave-pipeline.js +46 -0
  210. package/dist/components/index.js +24 -0
  211. package/dist/components/layers.js +28 -0
  212. package/dist/components/manifest-persistence.js +108 -0
  213. package/dist/components/pilots/alb-ecs.pilot.js +59 -0
  214. package/dist/components/pilots/dynamodb.pilot.js +51 -0
  215. package/dist/components/pilots/jar-emr.pilot.js +65 -0
  216. package/dist/components/pilots/lambda.pilot.js +52 -0
  217. package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
  218. package/dist/components/pilots/project.js +12 -0
  219. package/dist/components/pr-pipeline.js +134 -0
  220. package/dist/components/pr-run.js +363 -0
  221. package/dist/components/presets/ecs-fargate.js +72 -0
  222. package/dist/components/presets/index.js +28 -0
  223. package/dist/components/presets/lambda.js +34 -0
  224. package/dist/components/presets/single-host-compose.js +41 -0
  225. package/dist/components/promote.js +549 -0
  226. package/dist/components/registry.js +34 -0
  227. package/dist/components/run-progress.js +33 -0
  228. package/dist/components/sandbox/driver.d.ts.map +1 -1
  229. package/dist/components/sandbox/driver.js +93 -0
  230. package/dist/components/sandbox/run.js +115 -0
  231. package/dist/components/starter-plugin.js +104 -0
  232. package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
  233. package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
  234. package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
  235. package/dist/components/verbs/bom-writer.js +287 -0
  236. package/dist/components/verbs/build-archive.js +188 -0
  237. package/dist/components/verbs/build.js +142 -0
  238. package/dist/components/verbs/cloud-executor.js +110 -0
  239. package/dist/components/verbs/component-bom.js +125 -0
  240. package/dist/components/verbs/ensure-secret.js +50 -0
  241. package/dist/components/verbs/index.js +61 -0
  242. package/dist/components/verbs/license-policy.js +75 -0
  243. package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
  244. package/dist/components/verbs/process-runner.js +78 -0
  245. package/dist/components/verbs/r2-sync.js +93 -0
  246. package/dist/components/verbs/reproducibility.js +62 -0
  247. package/dist/components/verbs/run-agent.js +577 -0
  248. package/dist/components/verbs/sbom-generator.js +119 -0
  249. package/dist/components/verbs/sbom.js +97 -0
  250. package/dist/components/verbs/shell.js +32 -0
  251. package/dist/components/verbs/sign.js +221 -0
  252. package/dist/components/verbs/stub.js +28 -0
  253. package/dist/components/verbs/tool-sbom-generator.js +154 -0
  254. package/dist/components/verbs/verify.js +112 -0
  255. package/dist/components/verbs/vex.js +131 -0
  256. package/dist/components/verbs/vuln-gate.js +152 -0
  257. package/dist/components/verbs/vuln-scan.js +288 -0
  258. package/dist/components/verbs/wait-verify.js +106 -0
  259. package/dist/components/verbs/wrangler.js +179 -0
  260. package/dist/components/wave-plan.js +102 -0
  261. package/dist/composite.js +305 -0
  262. package/dist/config-import.d.ts.map +1 -1
  263. package/dist/config-import.js +22 -0
  264. package/dist/config-sandbox.js +122 -0
  265. package/dist/config-static.js +206 -0
  266. package/dist/config.js +605 -0
  267. package/dist/content-digest.js +23 -0
  268. package/dist/declarable.js +114 -0
  269. package/dist/deep-observation.js +437 -0
  270. package/dist/detectLexicon.js +54 -0
  271. package/dist/discovery/cache.js +70 -0
  272. package/dist/discovery/collect.js +208 -0
  273. package/dist/discovery/cycles.js +95 -0
  274. package/dist/discovery/entity-wire-codec.js +391 -0
  275. package/dist/discovery/entity-wire.js +42 -0
  276. package/dist/discovery/files.js +121 -0
  277. package/dist/discovery/fold-import.d.ts.map +1 -1
  278. package/dist/discovery/fold-import.js +4178 -0
  279. package/dist/discovery/fold-rank.js +292 -0
  280. package/dist/discovery/graph.js +115 -0
  281. package/dist/discovery/import.d.ts.map +1 -1
  282. package/dist/discovery/import.js +65 -0
  283. package/dist/discovery/index.js +333 -0
  284. package/dist/discovery/param-deps.js +487 -0
  285. package/dist/discovery/resolve.js +39 -0
  286. package/dist/discovery/sandbox/bundle.js +214 -0
  287. package/dist/discovery/sandbox/child-errors.js +26 -0
  288. package/dist/discovery/sandbox/config-run.js +100 -0
  289. package/dist/discovery/sandbox/config-wire.js +183 -0
  290. package/dist/discovery/sandbox/driver.d.ts.map +1 -1
  291. package/dist/discovery/sandbox/driver.js +333 -0
  292. package/dist/discovery/sandbox/fork.js +229 -0
  293. package/dist/discovery/sandbox/policy-run.js +142 -0
  294. package/dist/discovery/sandbox/policy-wire.js +152 -0
  295. package/dist/discovery/sandbox/run.js +77 -0
  296. package/dist/discovery/specifier-resolve.js +320 -0
  297. package/dist/discovery/walk.js +284 -0
  298. package/dist/effect-receipt.js +340 -0
  299. package/dist/env.js +55 -0
  300. package/dist/errors.js +62 -0
  301. package/dist/fold/fold.js +1434 -0
  302. package/dist/fold/foldable-helpers.js +229 -0
  303. package/dist/fold/subset.js +696 -0
  304. package/dist/fold-provenance.js +414 -0
  305. package/dist/gate-decision.d.ts +36 -4
  306. package/dist/gate-decision.d.ts.map +1 -1
  307. package/dist/gate-decision.js +260 -0
  308. package/dist/gate-resume-run.js +154 -0
  309. package/dist/gated-waves.js +165 -0
  310. package/dist/governance.js +43 -0
  311. package/dist/graph-declared.js +45 -0
  312. package/dist/graph-detail.js +207 -0
  313. package/dist/graph-dot.js +54 -0
  314. package/dist/graph-effective.js +107 -0
  315. package/dist/graph-ir.js +623 -0
  316. package/dist/graph-layout.js +184 -0
  317. package/dist/graph-lens.js +105 -0
  318. package/dist/graph-mermaid.js +83 -0
  319. package/dist/graph-ops.js +39 -0
  320. package/dist/graph-refs.js +156 -0
  321. package/dist/held-elsewhere.js +87 -0
  322. package/dist/identity.js +251 -0
  323. package/dist/import/base-parser.js +34 -0
  324. package/dist/import/embedded.js +255 -0
  325. package/dist/import/generator.js +1 -0
  326. package/dist/import/ir-utils.js +85 -0
  327. package/dist/import/parser-options.js +45 -0
  328. package/dist/import/parser.js +1 -0
  329. package/dist/index.js +118 -0
  330. package/dist/intrinsic-interpolation.js +73 -0
  331. package/dist/intrinsic.js +31 -0
  332. package/dist/join-key.js +35 -0
  333. package/dist/kubectl-context.js +150 -0
  334. package/dist/lexicon-config.js +58 -0
  335. package/dist/lexicon-integrity.js +47 -0
  336. package/dist/lexicon-manifest.js +70 -0
  337. package/dist/lexicon-module.d.ts.map +1 -1
  338. package/dist/lexicon-module.js +241 -0
  339. package/dist/lexicon-output.js +218 -0
  340. package/dist/lexicon-plugin-helpers.js +104 -0
  341. package/dist/lexicon-schema.js +136 -0
  342. package/dist/lexicon.js +130 -0
  343. package/dist/lifecycle/affected.js +224 -0
  344. package/dist/lifecycle/assert-live.js +110 -0
  345. package/dist/lifecycle/build-ledger-store.js +160 -0
  346. package/dist/lifecycle/build-ledger.js +155 -0
  347. package/dist/lifecycle/change-set.js +356 -0
  348. package/dist/lifecycle/converge-ledger.js +161 -0
  349. package/dist/lifecycle/deep-diff.js +233 -0
  350. package/dist/lifecycle/deep-observe.js +147 -0
  351. package/dist/lifecycle/digest.js +143 -0
  352. package/dist/lifecycle/disruption.js +135 -0
  353. package/dist/lifecycle/gate-applied.js +113 -0
  354. package/dist/lifecycle/gate-audit.js +341 -0
  355. package/dist/lifecycle/gate-ledger-select.js +89 -0
  356. package/dist/lifecycle/gate-ledger.d.ts +8 -0
  357. package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
  358. package/dist/lifecycle/gate-ledger.js +193 -0
  359. package/dist/lifecycle/gate-origin.js +117 -0
  360. package/dist/lifecycle/gate-pending.js +58 -0
  361. package/dist/lifecycle/git.js +1182 -0
  362. package/dist/lifecycle/identity.js +58 -0
  363. package/dist/lifecycle/index.js +26 -0
  364. package/dist/lifecycle/lease.js +283 -0
  365. package/dist/lifecycle/ledger-port.js +1 -0
  366. package/dist/lifecycle/legacy-digest.js +91 -0
  367. package/dist/lifecycle/live-diff.js +274 -0
  368. package/dist/lifecycle/local-note.js +15 -0
  369. package/dist/lifecycle/member-ledger.js +122 -0
  370. package/dist/lifecycle/observation-baseline.js +155 -0
  371. package/dist/lifecycle/observe.js +375 -0
  372. package/dist/lifecycle/oras-referrer-lookup.js +82 -0
  373. package/dist/lifecycle/override-ledger.js +54 -0
  374. package/dist/lifecycle/plan-digest.js +110 -0
  375. package/dist/lifecycle/plan-ledger.js +129 -0
  376. package/dist/lifecycle/receipt-plan.js +192 -0
  377. package/dist/lifecycle/release-ledger.js +155 -0
  378. package/dist/lifecycle/release-read.js +64 -0
  379. package/dist/lifecycle/replay.js +193 -0
  380. package/dist/lifecycle/rollback.js +102 -0
  381. package/dist/lifecycle/run-ledger.js +183 -0
  382. package/dist/lifecycle/scenario-eval.js +204 -0
  383. package/dist/lifecycle/scenario.js +214 -0
  384. package/dist/lifecycle/snapshot.js +239 -0
  385. package/dist/lifecycle/status.js +447 -0
  386. package/dist/lifecycle/symptoms.js +117 -0
  387. package/dist/lifecycle/teardown.js +255 -0
  388. package/dist/lifecycle/types.js +1 -0
  389. package/dist/lifecycle/unobserved-gate.js +33 -0
  390. package/dist/lifecycle/wave-plans.js +68 -0
  391. package/dist/lifecycle/work-item-id.js +36 -0
  392. package/dist/lifecycle/work-lease.js +393 -0
  393. package/dist/lint/component-checks.js +87 -0
  394. package/dist/lint/config.js +483 -0
  395. package/dist/lint/declarative.js +122 -0
  396. package/dist/lint/discover.d.ts.map +1 -1
  397. package/dist/lint/discover.js +138 -0
  398. package/dist/lint/engine.js +246 -0
  399. package/dist/lint/knowledge-checks.js +64 -0
  400. package/dist/lint/named-checks.js +22 -0
  401. package/dist/lint/output-checks.js +87 -0
  402. package/dist/lint/output-docs.js +163 -0
  403. package/dist/lint/parser.js +33 -0
  404. package/dist/lint/pipeline-change-gate.js +70 -0
  405. package/dist/lint/policy-import.d.ts +1 -1
  406. package/dist/lint/policy-import.d.ts.map +1 -1
  407. package/dist/lint/policy-import.js +62 -0
  408. package/dist/lint/policy-sandbox.js +86 -0
  409. package/dist/lint/policy.js +122 -0
  410. package/dist/lint/post-synth.js +87 -0
  411. package/dist/lint/presets/relaxed.json +26 -0
  412. package/dist/lint/presets/strict.json +24 -24
  413. package/dist/lint/receipt-checks.js +83 -0
  414. package/dist/lint/rule-loader.d.ts.map +1 -1
  415. package/dist/lint/rule-loader.js +89 -0
  416. package/dist/lint/rule-registry.js +86 -0
  417. package/dist/lint/rule.js +1 -0
  418. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
  419. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
  420. package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
  421. package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
  422. package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
  423. package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
  424. package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
  425. package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
  426. package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
  427. package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
  428. package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
  429. package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
  430. package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
  431. package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
  432. package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
  433. package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
  434. package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
  435. package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
  436. package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
  437. package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
  438. package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
  439. package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
  440. package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
  441. package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
  442. package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
  443. package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
  444. package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
  445. package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
  446. package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
  447. package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
  448. package/dist/lint/rules/comp/index.js +33 -0
  449. package/dist/lint/rules/comp/support.js +129 -0
  450. package/dist/lint/rules/composite-scope.js +51 -0
  451. package/dist/lint/rules/cor017-composite-name-match.js +93 -0
  452. package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
  453. package/dist/lint/rules/cor021-env-literal-name.js +100 -0
  454. package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
  455. package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
  456. package/dist/lint/rules/declarable-naming-convention.js +62 -0
  457. package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
  458. package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
  459. package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
  460. package/dist/lint/rules/evl004-spread-non-const.js +94 -0
  461. package/dist/lint/rules/evl005-resource-block-body.js +41 -0
  462. package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
  463. package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
  464. package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
  465. package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
  466. package/dist/lint/rules/export-required.js +115 -0
  467. package/dist/lint/rules/file-declarable-limit.js +88 -0
  468. package/dist/lint/rules/flat-declarations.js +62 -0
  469. package/dist/lint/rules/index.js +90 -0
  470. package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
  471. package/dist/lint/rules/no-redundant-type-import.js +76 -0
  472. package/dist/lint/rules/no-redundant-value-cast.js +41 -0
  473. package/dist/lint/rules/no-string-ref.js +59 -0
  474. package/dist/lint/rules/no-unused-declarable-import.js +75 -0
  475. package/dist/lint/rules/no-unused-declarable.js +142 -0
  476. package/dist/lint/rules/op/index.js +28 -0
  477. package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
  478. package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
  479. package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
  480. package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
  481. package/dist/lint/rules/op/support.js +11 -0
  482. package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
  483. package/dist/lint/rules/property-kind.js +56 -0
  484. package/dist/lint/rules/single-concern-file.js +71 -0
  485. package/dist/lint/rules/sys001-no-literal-key.js +60 -0
  486. package/dist/lint/selectors.js +168 -0
  487. package/dist/lint/suppressions.js +129 -0
  488. package/dist/lint/typescript.js +17 -0
  489. package/dist/live-endpoint.js +113 -0
  490. package/dist/live-read-session.js +76 -0
  491. package/dist/lsp/lexicon-providers.js +163 -0
  492. package/dist/lsp/types.js +5 -0
  493. package/dist/managed-fields.js +293 -0
  494. package/dist/mcp/types.js +4 -0
  495. package/dist/notify-verify.js +0 -1
  496. package/dist/notify.js +0 -1
  497. package/dist/notify.schema.json +72 -0
  498. package/dist/observation.js +266 -0
  499. package/dist/okf-read.js +134 -0
  500. package/dist/okf.js +275 -0
  501. package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
  502. package/dist/op/activities/activity-contracts.js +313 -0
  503. package/dist/op/activities/apply.js +582 -0
  504. package/dist/op/activities/build.js +18 -0
  505. package/dist/op/activities/change-coverage.js +40 -0
  506. package/dist/op/activities/change-set.js +64 -0
  507. package/dist/op/activities/converge.js +492 -0
  508. package/dist/op/activities/decide.js +211 -0
  509. package/dist/op/activities/env-teardown.js +110 -0
  510. package/dist/op/activities/factory.js +591 -0
  511. package/dist/op/activities/forge-pull-request.js +82 -0
  512. package/dist/op/activities/gh-host.js +78 -0
  513. package/dist/op/activities/guard-validate.js +165 -0
  514. package/dist/op/activities/http-check.js +40 -0
  515. package/dist/op/activities/index.js +59 -0
  516. package/dist/op/activities/lexicon-upgrade.js +629 -0
  517. package/dist/op/activities/lifecycle.js +109 -0
  518. package/dist/op/activities/pipeline-audit.js +147 -0
  519. package/dist/op/activities/policy.js +26 -0
  520. package/dist/op/activities/predict-behaviour.js +341 -0
  521. package/dist/op/activities/propose-upgrade.js +165 -0
  522. package/dist/op/activities/reconcile.js +997 -0
  523. package/dist/op/activities/shell.js +118 -0
  524. package/dist/op/activities/source-release.js +97 -0
  525. package/dist/op/activities/source-rollback.js +165 -0
  526. package/dist/op/activities/teardown.js +17 -0
  527. package/dist/op/activities/util.js +6 -0
  528. package/dist/op/activities/wait.js +51 -0
  529. package/dist/op/activities/work-evidence.js +35 -0
  530. package/dist/op/activities/workflow-audit.js +133 -0
  531. package/dist/op/activity-contract-registry.js +106 -0
  532. package/dist/op/activity-contract.js +232 -0
  533. package/dist/op/activity-failure.js +31 -0
  534. package/dist/op/activity-profiles.js +129 -0
  535. package/dist/op/activity-registry.js +105 -0
  536. package/dist/op/activity-runtime.js +28 -0
  537. package/dist/op/builders.js +801 -0
  538. package/dist/op/change-signal.js +118 -0
  539. package/dist/op/composites/apply-op.js +151 -0
  540. package/dist/op/composites/behaviour-op.js +65 -0
  541. package/dist/op/composites/converge-op.js +141 -0
  542. package/dist/op/composites/index.js +19 -0
  543. package/dist/op/composites/lexicon-upgrade-op.js +107 -0
  544. package/dist/op/composites/pipeline-audit-op.js +50 -0
  545. package/dist/op/composites/reconcile-op.js +84 -0
  546. package/dist/op/composites/watch-op.js +69 -0
  547. package/dist/op/composites/workflow-audit-op.js +57 -0
  548. package/dist/op/converge-rule.js +205 -0
  549. package/dist/op/cron.js +146 -0
  550. package/dist/op/decide-backend.js +181 -0
  551. package/dist/op/decide-config.js +68 -0
  552. package/dist/op/decide-read-inputs.js +141 -0
  553. package/dist/op/discover.d.ts.map +1 -1
  554. package/dist/op/discover.js +213 -0
  555. package/dist/op/duration.js +21 -0
  556. package/dist/op/emulator-freshness.js +80 -0
  557. package/dist/op/emulator-lifecycle.js +269 -0
  558. package/dist/op/factory.js +83 -0
  559. package/dist/op/gate-approval.js +172 -0
  560. package/dist/op/gate-name.js +86 -0
  561. package/dist/op/gate-plan-context.js +167 -0
  562. package/dist/op/gate-point-run.js +67 -0
  563. package/dist/op/gate-point.js +111 -0
  564. package/dist/op/gate-resume-plan.js +155 -0
  565. package/dist/op/gate-resume.js +31 -0
  566. package/dist/op/gate-review.js +290 -0
  567. package/dist/op/gate-run-locator.js +85 -0
  568. package/dist/op/gate-summary.js +100 -0
  569. package/dist/op/gate-wait.js +56 -0
  570. package/dist/op/gate.js +449 -0
  571. package/dist/op/generate-pipeline.js +124 -0
  572. package/dist/op/index.js +51 -0
  573. package/dist/op/lifecycle-receipt-store.js +45 -0
  574. package/dist/op/local-executor.js +1164 -0
  575. package/dist/op/local-output.js +140 -0
  576. package/dist/op/op-ir.js +317 -0
  577. package/dist/op/op-verb-class.js +131 -0
  578. package/dist/op/op-waves-notify.js +136 -0
  579. package/dist/op/op-waves-run.d.ts +1 -1
  580. package/dist/op/op-waves-run.d.ts.map +1 -1
  581. package/dist/op/op-waves-run.js +1657 -0
  582. package/dist/op/op-waves.js +409 -0
  583. package/dist/op/operator.js +743 -0
  584. package/dist/op/receipt-store.js +94 -0
  585. package/dist/op/resource.js +23 -0
  586. package/dist/op/run-context.js +28 -0
  587. package/dist/op/run-live.js +256 -0
  588. package/dist/op/runtime.js +21 -0
  589. package/dist/op/runtimes/local.js +195 -0
  590. package/dist/op/source-archive.js +131 -0
  591. package/dist/op/step-output-ref.js +397 -0
  592. package/dist/op/steward-beside.js +169 -0
  593. package/dist/op/steward-points.js +138 -0
  594. package/dist/op/steward-turn.js +59 -0
  595. package/dist/op/steward.js +317 -0
  596. package/dist/op/types.js +25 -0
  597. package/dist/op/work-lease-decl.js +81 -0
  598. package/dist/op/work-lease-run.js +393 -0
  599. package/dist/override-gate.js +284 -0
  600. package/dist/owner-chain.js +74 -0
  601. package/dist/ownership.js +92 -0
  602. package/dist/params.js +61 -0
  603. package/dist/plan-summary.js +711 -0
  604. package/dist/point-decision.js +211 -0
  605. package/dist/pr-forge.js +810 -0
  606. package/dist/pr-loop.js +203 -0
  607. package/dist/project-codegen.js +191 -0
  608. package/dist/project-root.js +74 -0
  609. package/dist/project-validation.js +50 -0
  610. package/dist/provenance.js +157 -0
  611. package/dist/pseudo-parameter.js +40 -0
  612. package/dist/reconcile.js +450 -0
  613. package/dist/resource-attributes.js +33 -0
  614. package/dist/runtime-adapter.js +77 -0
  615. package/dist/runtime.js +66 -0
  616. package/dist/secret-materialization.js +153 -0
  617. package/dist/secret-provenance.js +250 -0
  618. package/dist/serializer-walker.js +112 -0
  619. package/dist/serializer.js +1 -0
  620. package/dist/sort.js +45 -0
  621. package/dist/stack-output.js +115 -0
  622. package/dist/telemetry-attribution.js +149 -0
  623. package/dist/terraform/__fixtures__/build-graph.js +63 -0
  624. package/dist/terraform/adopt-state.js +40 -0
  625. package/dist/terraform/aws-resources.js +384 -0
  626. package/dist/terraform/bridge.js +204 -0
  627. package/dist/terraform/carve-provider.js +155 -0
  628. package/dist/terraform/carve.js +138 -0
  629. package/dist/terraform/data-source-shape.js +57 -0
  630. package/dist/terraform/emit-source.js +36 -0
  631. package/dist/terraform/excise.js +123 -0
  632. package/dist/terraform/graduate.js +128 -0
  633. package/dist/terraform/graph.js +435 -0
  634. package/dist/terraform/hcl2json.js +60 -0
  635. package/dist/terraform/manifest.js +149 -0
  636. package/dist/terraform/parse.js +81 -0
  637. package/dist/terraform/providers/aws.js +146 -0
  638. package/dist/terraform/providers/gcp.js +294 -0
  639. package/dist/terraform/providers/index.js +17 -0
  640. package/dist/terraform/providers/kubernetes.js +253 -0
  641. package/dist/terraform/score.js +151 -0
  642. package/dist/terraform/state.js +67 -0
  643. package/dist/terraform/tier-map.js +74 -0
  644. package/dist/terraform/types.js +13 -0
  645. package/dist/terraform/unified-diff.js +132 -0
  646. package/dist/testing.js +295 -0
  647. package/dist/toml-emit.js +153 -0
  648. package/dist/toml-parse.js +355 -0
  649. package/dist/toml-utils.js +60 -0
  650. package/dist/toml.js +428 -0
  651. package/dist/ts-loader.d.ts +46 -0
  652. package/dist/ts-loader.d.ts.map +1 -0
  653. package/dist/ts-loader.js +103 -0
  654. package/dist/types.js +1 -0
  655. package/dist/utils.js +61 -0
  656. package/dist/validation.js +20 -0
  657. package/dist/vendor/js-yaml-load.js +1662 -0
  658. package/dist/workspace/__fixtures__/contract-repo.js +103 -0
  659. package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
  660. package/dist/workspace/__fixtures__/sessions.js +91 -0
  661. package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
  662. package/dist/workspace/agent-cli.js +99 -0
  663. package/dist/workspace/agent.schema.json +390 -0
  664. package/dist/workspace/answers-ledger.js +89 -0
  665. package/dist/workspace/box-cli.js +142 -0
  666. package/dist/workspace/box-factory-write.js +196 -0
  667. package/dist/workspace/box-factory-write.schema.json +342 -0
  668. package/dist/workspace/box-factory.js +88 -0
  669. package/dist/workspace/box-intent.js +126 -0
  670. package/dist/workspace/box-isolation.js +169 -0
  671. package/dist/workspace/box-listing-write.schema.json +204 -0
  672. package/dist/workspace/box-listing.js +298 -0
  673. package/dist/workspace/box-publish.js +352 -0
  674. package/dist/workspace/box-publish.schema.json +498 -0
  675. package/dist/workspace/box-services.js +39 -0
  676. package/dist/workspace/broker-protocol.js +359 -0
  677. package/dist/workspace/broker-protocol.schema.json +228 -0
  678. package/dist/workspace/change-set.schema.json +460 -0
  679. package/dist/workspace/changes-cli.js +56 -0
  680. package/dist/workspace/changes.js +446 -0
  681. package/dist/workspace/changes.schema.json +642 -0
  682. package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
  683. package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
  684. package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
  685. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
  686. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
  687. package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
  688. package/dist/workspace/chant-migrations.js +113 -0
  689. package/dist/workspace/check.schema.json +433 -0
  690. package/dist/workspace/checks/box-isolation.js +62 -0
  691. package/dist/workspace/checks/boxes.js +491 -0
  692. package/dist/workspace/checks/diagrams.js +104 -0
  693. package/dist/workspace/checks/generated.js +419 -0
  694. package/dist/workspace/checks/ledgers.js +212 -0
  695. package/dist/workspace/checks/links.js +191 -0
  696. package/dist/workspace/checks/live.js +100 -0
  697. package/dist/workspace/checks/pipelines.js +188 -0
  698. package/dist/workspace/checks/records.js +169 -0
  699. package/dist/workspace/checks.js +426 -0
  700. package/dist/workspace/ci-green-cli.js +125 -0
  701. package/dist/workspace/ci-green-forge.js +83 -0
  702. package/dist/workspace/ci-green-workflow.js +199 -0
  703. package/dist/workspace/ci-green.js +325 -0
  704. package/dist/workspace/ci-last-green.schema.json +158 -0
  705. package/dist/workspace/compose-graph.js +235 -0
  706. package/dist/workspace/compose-reports.js +146 -0
  707. package/dist/workspace/composites.js +264 -0
  708. package/dist/workspace/composites.schema.json +617 -0
  709. package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
  710. package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
  711. package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
  712. package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
  713. package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
  714. package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
  715. package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
  716. package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
  717. package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
  718. package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
  719. package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
  720. package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
  721. package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
  722. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  723. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  724. package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
  725. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  726. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  727. package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
  728. package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
  729. package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  730. package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  731. package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
  732. package/dist/workspace/conformance/broker.js +736 -0
  733. package/dist/workspace/conformance/index.js +673 -0
  734. package/dist/workspace/conformance/vitest.js +108 -0
  735. package/dist/workspace/conformance/writer.js +1080 -0
  736. package/dist/workspace/decide.js +879 -0
  737. package/dist/workspace/decision-points.schema.json +135 -135
  738. package/dist/workspace/declaration-write-cli.js +74 -0
  739. package/dist/workspace/declaration-write.js +238 -0
  740. package/dist/workspace/declaration.js +938 -0
  741. package/dist/workspace/declaration.schema.json +1413 -1413
  742. package/dist/workspace/declared-kinds.js +106 -0
  743. package/dist/workspace/environments.js +164 -0
  744. package/dist/workspace/evidence.schema.json +279 -0
  745. package/dist/workspace/export-cli.js +185 -0
  746. package/dist/workspace/export.js +499 -0
  747. package/dist/workspace/factory-rules.js +175 -0
  748. package/dist/workspace/generated-files.js +92 -0
  749. package/dist/workspace/glob.js +45 -0
  750. package/dist/workspace/graph-cache.js +352 -0
  751. package/dist/workspace/graph-cli.js +348 -0
  752. package/dist/workspace/graph.schema.json +1338 -0
  753. package/dist/workspace/identity-gate-rule.d.ts +65 -0
  754. package/dist/workspace/identity-gate-rule.d.ts.map +1 -0
  755. package/dist/workspace/identity-gate-rule.js +75 -0
  756. package/dist/workspace/identity.d.ts +4 -2
  757. package/dist/workspace/identity.d.ts.map +1 -1
  758. package/dist/workspace/identity.js +126 -0
  759. package/dist/workspace/import.js +283 -0
  760. package/dist/workspace/init.js +620 -0
  761. package/dist/workspace/intent-cli.js +263 -0
  762. package/dist/workspace/intent-joins.js +201 -0
  763. package/dist/workspace/intent-record.js +352 -0
  764. package/dist/workspace/intent-record.schema.json +864 -0
  765. package/dist/workspace/intent.js +1582 -0
  766. package/dist/workspace/intent.schema.json +2420 -0
  767. package/dist/workspace/json-edit.js +221 -0
  768. package/dist/workspace/jsonc.js +235 -0
  769. package/dist/workspace/kind-readers.js +103 -0
  770. package/dist/workspace/kinds.js +587 -0
  771. package/dist/workspace/lexicon-symbols.js +112 -0
  772. package/dist/workspace/lineage-adopt-cli.js +102 -0
  773. package/dist/workspace/lineage-adopt.js +360 -0
  774. package/dist/workspace/lineage-check.js +282 -0
  775. package/dist/workspace/lineage-cli.js +121 -0
  776. package/dist/workspace/lineage-hash-index.js +284 -0
  777. package/dist/workspace/lineage-init.js +507 -0
  778. package/dist/workspace/lineage-lock.js +387 -0
  779. package/dist/workspace/lineage-merge.js +45 -0
  780. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  781. package/dist/workspace/lineage-migrations.js +329 -0
  782. package/dist/workspace/lineage-provenance.js +36 -0
  783. package/dist/workspace/lineage-update.js +138 -0
  784. package/dist/workspace/lineage-upgrade-cli.js +131 -0
  785. package/dist/workspace/lineage-upgrade.js +889 -0
  786. package/dist/workspace/lineage-vendor.js +171 -0
  787. package/dist/workspace/lineage-version.js +128 -0
  788. package/dist/workspace/lineage-versions.js +275 -0
  789. package/dist/workspace/links.js +330 -0
  790. package/dist/workspace/ls-generated.js +95 -0
  791. package/dist/workspace/ls.js +277 -0
  792. package/dist/workspace/ls.schema.json +333 -0
  793. package/dist/workspace/member-commands.js +508 -0
  794. package/dist/workspace/member-handles.js +216 -0
  795. package/dist/workspace/member-pipeline.js +258 -0
  796. package/dist/workspace/member-run.js +117 -0
  797. package/dist/workspace/member-write.schema.json +193 -0
  798. package/dist/workspace/nested-graph.js +156 -0
  799. package/dist/workspace/nesting.js +38 -0
  800. package/dist/workspace/patch.js +301 -0
  801. package/dist/workspace/patch.schema.json +321 -0
  802. package/dist/workspace/pin-cli.js +55 -0
  803. package/dist/workspace/pin-integrity.js +100 -0
  804. package/dist/workspace/plan-summary.schema.json +155 -0
  805. package/dist/workspace/point-answer.schema.json +129 -129
  806. package/dist/workspace/points-cli.js +291 -0
  807. package/dist/workspace/points-write.schema.json +660 -0
  808. package/dist/workspace/points.js +521 -0
  809. package/dist/workspace/points.schema.json +916 -0
  810. package/dist/workspace/pr-report.schema.json +108 -0
  811. package/dist/workspace/principal-classes.d.ts +3 -14
  812. package/dist/workspace/principal-classes.d.ts.map +1 -1
  813. package/dist/workspace/principal-classes.js +245 -0
  814. package/dist/workspace/reason-codes.js +326 -0
  815. package/dist/workspace/record-assets.js +151 -0
  816. package/dist/workspace/record-decided.js +105 -0
  817. package/dist/workspace/record-sessions.js +96 -0
  818. package/dist/workspace/record-source.js +114 -0
  819. package/dist/workspace/records-amend.schema.json +284 -0
  820. package/dist/workspace/records-checkout.js +76 -0
  821. package/dist/workspace/records-cli.js +707 -0
  822. package/dist/workspace/records-close.js +116 -0
  823. package/dist/workspace/records-close.schema.json +278 -0
  824. package/dist/workspace/records-new.schema.json +202 -0
  825. package/dist/workspace/records-review.schema.json +367 -0
  826. package/dist/workspace/records-since.js +317 -0
  827. package/dist/workspace/records-since.schema.json +218 -0
  828. package/dist/workspace/records-write.js +1229 -0
  829. package/dist/workspace/records.js +1345 -0
  830. package/dist/workspace/records.schema.json +604 -0
  831. package/dist/workspace/reference-kinds/app/package.json +10 -0
  832. package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  833. package/dist/workspace/returns.js +303 -0
  834. package/dist/workspace/root-refusal.js +75 -0
  835. package/dist/workspace/run-statement.schema.json +622 -0
  836. package/dist/workspace/runs-cli.js +584 -0
  837. package/dist/workspace/runs-write.schema.json +994 -0
  838. package/dist/workspace/runs.js +708 -0
  839. package/dist/workspace/runs.schema.json +1257 -0
  840. package/dist/workspace/runtimes.js +76 -0
  841. package/dist/workspace/session-kinds.js +83 -0
  842. package/dist/workspace/signers.schema.json +206 -0
  843. package/dist/workspace/source-block.js +125 -0
  844. package/dist/workspace/squash.js +177 -0
  845. package/dist/workspace/status-gates.js +162 -0
  846. package/dist/workspace/status-stewards.js +330 -0
  847. package/dist/workspace/status.js +514 -0
  848. package/dist/workspace/status.schema.json +998 -0
  849. package/dist/workspace/steward-index.js +191 -0
  850. package/dist/workspace/symbols.js +188 -0
  851. package/dist/workspace/template-manifest.js +227 -0
  852. package/dist/workspace/template-pins.js +115 -0
  853. package/dist/workspace/trailer-joins.js +65 -0
  854. package/dist/workspace/trailers.js +111 -0
  855. package/dist/workspace/tree.js +136 -0
  856. package/dist/workspace/trust/attestor.js +63 -0
  857. package/dist/workspace/trust/dsse.js +108 -0
  858. package/dist/workspace/trust/evidence-cli.js +175 -0
  859. package/dist/workspace/trust/evidence.js +161 -0
  860. package/dist/workspace/trust/gate-seal.js +226 -0
  861. package/dist/workspace/trust/policy.js +190 -0
  862. package/dist/workspace/trust/provenance.js +180 -0
  863. package/dist/workspace/trust/rotation.js +298 -0
  864. package/dist/workspace/trust/run-commits.js +101 -0
  865. package/dist/workspace/trust/run-statement.js +182 -0
  866. package/dist/workspace/trust/seal.js +272 -0
  867. package/dist/workspace/trust/signers-cli.js +152 -0
  868. package/dist/workspace/trust/ssh-commit.js +178 -0
  869. package/dist/workspace/trust/test-repo.js +118 -0
  870. package/dist/workspace/trust/trust-files.js +193 -0
  871. package/dist/workspace/trust/verify-cli.js +63 -0
  872. package/dist/workspace/trust/verify.js +192 -0
  873. package/dist/workspace/which-chant.js +141 -0
  874. package/dist/workspace/wip-cli.js +95 -0
  875. package/dist/workspace/wip-write.schema.json +504 -0
  876. package/dist/workspace/wip.js +631 -0
  877. package/dist/workspace/wip.schema.json +334 -0
  878. package/dist/workspace/work-cli.js +448 -0
  879. package/dist/workspace/work-evidence.js +122 -0
  880. package/dist/workspace/work-evidence.schema.json +222 -0
  881. package/dist/workspace/work-history.schema.json +421 -0
  882. package/dist/workspace/work-lease.schema.json +246 -0
  883. package/dist/workspace/work-size.js +77 -0
  884. package/dist/workspace/work.js +283 -0
  885. package/dist/workspace/workspace-kinds.schema.json +259 -259
  886. package/dist/workspace/workspace-principals.schema.json +53 -53
  887. package/dist/workspace/write-lock-cli.js +105 -0
  888. package/dist/workspace/write-lock.js +424 -0
  889. package/dist/workspace/write-lock.schema.json +172 -0
  890. package/dist/workspace/write-scope.js +484 -0
  891. package/dist/yaml.js +459 -0
  892. package/package.json +2 -2
  893. package/src/cli/commands/check-lexicon-plugin.ts +2 -0
  894. package/src/cli/commands/lint.ts +36 -6
  895. package/src/cli/commands/migrate.ts +2 -0
  896. package/src/cli/compiled-cli.e2e.test.ts +165 -0
  897. package/src/cli/main.ts +121 -27
  898. package/src/cli/mcp/workspace-tools.ts +1 -1
  899. package/src/codegen/pinned-upgrade.ts +2 -0
  900. package/src/components/discover.ts +2 -0
  901. package/src/components/sandbox/driver.ts +3 -1
  902. package/src/config-import.ts +3 -0
  903. package/src/discovery/fold-import.ts +23 -14
  904. package/src/discovery/import.ts +2 -0
  905. package/src/discovery/sandbox/driver.ts +3 -1
  906. package/src/gate-decision-bundle.test.ts +3 -2
  907. package/src/gate-decision-identity.test.ts +176 -0
  908. package/src/gate-decision.ts +100 -22
  909. package/src/lexicon-module.ts +3 -0
  910. package/src/lifecycle/gate-ledger.ts +8 -0
  911. package/src/lint/config.ts +1 -1
  912. package/src/lint/discover.ts +28 -8
  913. package/src/lint/policy-import.ts +4 -1
  914. package/src/lint/rule-loader.ts +2 -0
  915. package/src/op/discover.ts +3 -0
  916. package/src/op/op-waves-point.test.ts +1 -0
  917. package/src/op/op-waves-run.ts +5 -4
  918. package/src/op/op-waves.test.ts +14 -0
  919. package/src/ts-loader.test.ts +23 -0
  920. package/src/ts-loader.ts +122 -0
  921. package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
  922. package/src/workspace/declaration.ts +1 -1
  923. package/src/workspace/identity-gate-rule.ts +109 -0
  924. package/src/workspace/identity.ts +8 -18
  925. package/src/workspace/kinds.ts +1 -1
  926. package/src/workspace/lineage-migrations.ts +2 -0
  927. package/src/workspace/points.ts +1 -1
  928. package/src/workspace/principal-classes.ts +5 -30
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Parsed-output view for post-synth checks (chant #975).
3
+ *
4
+ * `PostSynthContext.outputs` carries raw serialized strings — a `chant build`
5
+ * consumer has to parse YAML/JSON itself before it can reason about
6
+ * structure. Every lexicon that needs this today rolls its own splitter
7
+ * (`parseK8sManifests` in k8s, hand-rolled `JSON.parse` in aws's
8
+ * `cf-refs.ts`), and each of the ~30 k8s post-synth checks reparses the same
9
+ * output independently. This module is the shared, parse-once primitive:
10
+ * `parseOutputDocs` turns `ctx.outputs` into a flat list of `OutputDoc`s,
11
+ * and `PostSynthContext.docs` (see `./post-synth.ts`) memoizes one call to it
12
+ * per build so every check — lexicon-shipped or project-authored policy —
13
+ * shares the same parse.
14
+ *
15
+ * `pick`/`get` are the "look at only the fields you care about" ergonomic
16
+ * from the issue's `,remain`-style framing — a partial, unvalidated view of
17
+ * an already-parsed tree, not a query DSL. Selector languages over the
18
+ * *source* AST stay in `./declarative.ts`; this module is output-side only.
19
+ */
20
+ import { parseYAML } from "../yaml.js";
21
+ /**
22
+ * Parse every output in `outputs` into a flat list of `OutputDoc`s: one call,
23
+ * shared by every post-synth check via `PostSynthContext.docs`.
24
+ *
25
+ * Format detection is whole-source, not per-document: if the entire source
26
+ * parses as JSON, it is one `"json"` document (CloudFormation, most non-k8s
27
+ * serializers). Otherwise the source is treated as a YAML stream — split on
28
+ * `---` document separators — and each resulting document is parsed as YAML
29
+ * (`format: "yaml"`), even one that happens to also be valid JSON, since
30
+ * JSON is a YAML subset. `SerializerResult.files` entries (nested templates,
31
+ * sidecar manifests) are parsed the same way, tagged with `file`.
32
+ *
33
+ * A document that fails to parse into a non-null object/array — malformed
34
+ * input, or a bare scalar where a manifest was expected — is not thrown:
35
+ * it is included with `error` set and `value: undefined`. See `OutputDoc`.
36
+ */
37
+ export function parseOutputDocs(outputs) {
38
+ const docs = [];
39
+ for (const [lexicon, output] of outputs) {
40
+ const primary = typeof output === "string" ? output : output.primary;
41
+ docs.push(...parseSource(primary, lexicon));
42
+ const files = typeof output === "string" ? undefined : output.files;
43
+ for (const [file, content] of Object.entries(files ?? {})) {
44
+ docs.push(...parseSource(content, lexicon, file));
45
+ }
46
+ }
47
+ return docs;
48
+ }
49
+ /** Split a YAML stream on `---` document-separator lines (own line, optional
50
+ * trailing whitespace) — including a leading separator before any content,
51
+ * which `"\n---\n"`-style splitting misses. Empty documents (two separators
52
+ * back to back, or a leading/trailing one) are dropped. */
53
+ function splitYamlDocuments(source) {
54
+ return source
55
+ .split(/^---[ \t]*$/m)
56
+ .map((doc) => doc.trim())
57
+ .filter((doc) => doc.length > 0);
58
+ }
59
+ /** True for a value a document is usable as — a non-null object or array.
60
+ * A bare scalar ("just a string") parses without error but is not a
61
+ * document a check can walk, so it is treated as malformed. */
62
+ function isUsableDoc(value) {
63
+ return typeof value === "object" && value !== null;
64
+ }
65
+ /**
66
+ * Parse one source string (a primary output, or one `files` entry) into its
67
+ * `OutputDoc`s, trying whole-content JSON first and falling back to a
68
+ * (possibly multi-document) YAML stream. Never throws — a parse failure or
69
+ * an unusable result becomes a marker document with `error` set.
70
+ */
71
+ function parseSource(source, lexicon, file) {
72
+ const trimmed = source.trim();
73
+ if (trimmed === "")
74
+ return [];
75
+ try {
76
+ const value = JSON.parse(trimmed);
77
+ if (isUsableDoc(value)) {
78
+ return [{ lexicon, index: 0, format: "json", value, ...(file && { file }) }];
79
+ }
80
+ return [
81
+ {
82
+ lexicon,
83
+ index: 0,
84
+ format: "json",
85
+ value: undefined,
86
+ error: "parsed JSON is not an object or array",
87
+ ...(file && { file }),
88
+ },
89
+ ];
90
+ }
91
+ catch {
92
+ // Not whole-content JSON — fall through to the YAML stream path.
93
+ }
94
+ return splitYamlDocuments(trimmed).map((segment, index) => {
95
+ try {
96
+ const value = parseYAML(segment);
97
+ if (isUsableDoc(value)) {
98
+ return { lexicon, index, format: "yaml", value, ...(file && { file }) };
99
+ }
100
+ return {
101
+ lexicon,
102
+ index,
103
+ format: "yaml",
104
+ value: undefined,
105
+ error: "parsed YAML document is not an object or array",
106
+ ...(file && { file }),
107
+ };
108
+ }
109
+ catch (err) {
110
+ return {
111
+ lexicon,
112
+ index,
113
+ format: "yaml",
114
+ value: undefined,
115
+ error: err instanceof Error ? err.message : String(err),
116
+ ...(file && { file }),
117
+ };
118
+ }
119
+ });
120
+ }
121
+ /**
122
+ * Partial typed decode — the `,remain`-style ergonomic from `ma91n/tfpolicy`:
123
+ * decode the fields you care about, leave everything else in place,
124
+ * unvalidated. Returns a shallow, top-level view of `value` narrowed to the
125
+ * keys named in `shape`. A key absent from `value` (or `value` not being a
126
+ * plain object) is simply absent from the result — no default is invented.
127
+ *
128
+ * This is NOT runtime validation: a key that IS present is copied as-is,
129
+ * whatever its actual shape, and cast to `T`'s declared type for that key.
130
+ * Use `get` for a deeper walk into one of the picked values.
131
+ */
132
+ export function pick(value, shape) {
133
+ const result = {};
134
+ if (typeof value !== "object" || value === null)
135
+ return result;
136
+ const source = value;
137
+ for (const key of shape) {
138
+ const propertyName = key;
139
+ if (propertyName in source) {
140
+ result[propertyName] = source[propertyName];
141
+ }
142
+ }
143
+ return result;
144
+ }
145
+ /**
146
+ * Dotted-path getter for the common walk over a parsed doc, e.g.
147
+ * `get(doc.value, "spec.template.spec")`. Not a query DSL — no wildcards,
148
+ * no predicates, no array-flattening. An array index is just a numeric path
149
+ * segment (`get(value, "items.0.name")`), since JS indexes arrays by string
150
+ * key underneath. Returns `undefined` as soon as any segment is missing or
151
+ * the value at that point isn't indexable — it never throws on a bad path.
152
+ */
153
+ export function get(value, path) {
154
+ if (path === "")
155
+ return value;
156
+ let current = value;
157
+ for (const segment of path.split(".")) {
158
+ if (typeof current !== "object" || current === null)
159
+ return undefined;
160
+ current = current[segment];
161
+ }
162
+ return current;
163
+ }
@@ -0,0 +1,33 @@
1
+ import * as ts from "typescript";
2
+ import { readFileSync } from "fs";
3
+ /**
4
+ * Parse a TypeScript file into an AST
5
+ * @param path - Absolute or relative path to the TypeScript file
6
+ * @returns Parsed TypeScript SourceFile
7
+ * @throws Error if the file cannot be read or parsed
8
+ */
9
+ export function parseFile(path) {
10
+ let content;
11
+ try {
12
+ content = readFileSync(path, "utf-8");
13
+ }
14
+ catch (err) {
15
+ throw new Error(`Failed to read file ${path}: ${err instanceof Error ? err.message : String(err)}`);
16
+ }
17
+ const sourceFile = ts.createSourceFile(path, content, ts.ScriptTarget.Latest, true // setParentNodes
18
+ );
19
+ // Check for syntax errors (parseDiagnostics is internal but accessible)
20
+ const diagnostics = [
21
+ ...sourceFile.parseDiagnostics,
22
+ ];
23
+ if (diagnostics.length > 0) {
24
+ const errors = diagnostics
25
+ .map((d) => {
26
+ const { line, character } = sourceFile.getLineAndCharacterOfPosition(d.start ?? 0);
27
+ return `${path}:${line + 1}:${character + 1} - ${ts.flattenDiagnosticMessageText(d.messageText, "\n")}`;
28
+ })
29
+ .join("\n");
30
+ throw new Error(`TypeScript parsing failed:\n${errors}`);
31
+ }
32
+ return sourceFile;
33
+ }
@@ -0,0 +1,70 @@
1
+ import { STARTER_VERB_FAMILIES } from "../components/starter-plugin.js";
2
+ import { walkComponent } from "./rules/comp/support.js";
3
+ /**
4
+ * Fallback registry when no project registry is supplied: core's own starter
5
+ * verbs, the same fallback COMP005 uses for a direct unit test
6
+ * (`./rules/comp/comp005-capability-kind-is-noun.ts`). A real `chant lint` /
7
+ * gate run passes the project's resolved `knownKinds` (core's starter set
8
+ * plus the active lexicons' leaves) so a real project's cloud verbs are never
9
+ * mistaken for an out-of-registry escape hatch.
10
+ */
11
+ const CORE_STARTER_KINDS = new Set(Object.values(STARTER_VERB_FAMILIES).flat());
12
+ /** Every non-gate step kind a component's composition invokes, across `deploy` and `rollback` (nested fan-out phases included, via `walkComponent`). `gate` steps are excluded — they are not a capability verb. */
13
+ export function componentVerbSet(component) {
14
+ const { steps } = walkComponent(component);
15
+ return new Set(steps.map((s) => s.step.kind));
16
+ }
17
+ /**
18
+ * Classify a single component's composition (the "cheap first cut", no
19
+ * before/after needed): a `shell` step trips the class unconditionally — it
20
+ * is the escape hatch by construction (COMP006) — and any step whose `kind`
21
+ * is outside `knownKinds` trips it too, since an unregistered verb is,
22
+ * structurally, the same kind of hole a `shell` step is: something the
23
+ * bounded registry does not account for.
24
+ */
25
+ export function classifyComponentPipelineChange(component, opts) {
26
+ const knownKinds = opts?.knownKinds ?? CORE_STARTER_KINDS;
27
+ const { steps } = walkComponent(component);
28
+ const reasons = [];
29
+ for (const { step, phaseName } of steps) {
30
+ if (step.kind === "shell") {
31
+ reasons.push({ kind: "shell-step", phaseName });
32
+ }
33
+ else if (!knownKinds.has(step.kind)) {
34
+ reasons.push({ kind: "unregistered-verb", stepKind: step.kind, phaseName });
35
+ }
36
+ }
37
+ return { pipelineChange: reasons.length > 0, reasons };
38
+ }
39
+ /**
40
+ * Classify a *change* to a component's composition between two revisions
41
+ * (#1569's "add or modify a shell step ... or the composition graph
42
+ * itself"): on top of `classifyComponentPipelineChange`'s single-composition
43
+ * check on `after`, a change also trips the class when the verb set itself
44
+ * changed — a verb added or removed changes what the composition can invoke,
45
+ * which is the routing signal even when every individual verb, before and
46
+ * after, is registry-clean. `before: undefined` (a brand-new component) never
47
+ * reports a verb-set change — there is nothing to diff against, and the
48
+ * single-composition check already covers a new component's own shell/
49
+ * unregistered-verb findings.
50
+ */
51
+ export function classifyPipelineChange(before, after, opts) {
52
+ const base = classifyComponentPipelineChange(after, opts);
53
+ if (!before)
54
+ return base;
55
+ const beforeVerbs = componentVerbSet(before);
56
+ const afterVerbs = componentVerbSet(after);
57
+ const added = [...afterVerbs].filter((v) => !beforeVerbs.has(v)).sort();
58
+ const removed = [...beforeVerbs].filter((v) => !afterVerbs.has(v)).sort();
59
+ if (added.length === 0 && removed.length === 0)
60
+ return base;
61
+ return {
62
+ pipelineChange: true,
63
+ reasons: [...base.reasons, { kind: "verb-set-changed", added, removed }],
64
+ };
65
+ }
66
+ /** Evaluate a component composition change against a routing policy. Pure — no I/O. */
67
+ export function evaluatePipelineChangeGate(before, after, policy = "human-always", opts) {
68
+ const classification = classifyPipelineChange(before, after, opts);
69
+ return { ...classification, route: classification.pipelineChange ? policy : "none" };
70
+ }
@@ -17,7 +17,7 @@
17
17
  * the *decision* and documents the reasoning, and re-exports these three
18
18
  * functions as its public surface) for one structural reason: `./policy.ts`
19
19
  * needs to consult it, `./policy-sandbox.ts` needs to call `./policy.ts`, and a
20
- * flag on a leaf module with no imports of its own breaks what would otherwise
20
+ * flag on a leaf module (its one import, `../ts-loader`, is a leaf too) breaks what would otherwise
21
21
  * be an import cycle. It also puts the check on the narrowest possible thing —
22
22
  * the function that actually executes project code — rather than on a caller
23
23
  * that might forget to ask.
@@ -1 +1 @@
1
- {"version":3,"file":"policy-import.d.ts","sourceRoot":"","sources":["../../src/lint/policy-import.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED,iEAAiE;AACjE,wBAAgB,6BAA6B,IAAI,OAAO,CAEvD;AAED,4IAA4I;AAC5I,wBAAgB,mCAAmC,IAAI,IAAI,CAE1D;AAED,2HAA2H;AAC3H,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5D;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAO3F"}
1
+ {"version":3,"file":"policy-import.d.ts","sourceRoot":"","sources":["../../src/lint/policy-import.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAOH;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED,iEAAiE;AACjE,wBAAgB,6BAA6B,IAAI,OAAO,CAEvD;AAED,4IAA4I;AAC5I,wBAAgB,mCAAmC,IAAI,IAAI,CAE1D;AAED,2HAA2H;AAC3H,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5D;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAQ3F"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * The single place chant imports a project's `lint.policies` module **in the
3
+ * CLI's own process** — and the flag that says it may not.
4
+ *
5
+ * The third member of the same family as `../discovery/import.ts`'s
6
+ * `importModule` (project source) and `../config-import.ts`'s
7
+ * `importConfigModule` (`chant.config.ts`): one narrow module whose only job is
8
+ * "execute project-authored code here", so that "did any project code run in
9
+ * this process?" has one place to look and one place to instrument — see
10
+ * `examples/sandbox-execution-boundary.e2e.test.ts`, which spies on all three.
11
+ *
12
+ * Before chant #1131 `./policy.ts` called `await import(resolved)` inline,
13
+ * which is why the corpus boundary gate could not see it even after #1113 put
14
+ * the config behind the boundary: there was nothing named to wrap.
15
+ *
16
+ * The armed flag lives here rather than in `./policy-sandbox.ts` (which owns
17
+ * the *decision* and documents the reasoning, and re-exports these three
18
+ * functions as its public surface) for one structural reason: `./policy.ts`
19
+ * needs to consult it, `./policy-sandbox.ts` needs to call `./policy.ts`, and a
20
+ * flag on a leaf module (its one import, `../ts-loader`, is a leaf too) breaks what would otherwise
21
+ * be an import cycle. It also puts the check on the narrowest possible thing —
22
+ * the function that actually executes project code — rather than on a caller
23
+ * that might forget to ask.
24
+ */
25
+ import { ensureTypeScriptLoader } from "../ts-loader.js";
26
+ /** Whether this process must run project policy modules inside the sandbox boundary instead of here. */
27
+ let armed = false;
28
+ /**
29
+ * Arm sandboxed policy execution for the rest of this process. See
30
+ * `./policy-sandbox.ts` for what arms it and why it is a process mode rather
31
+ * than a threaded option. Idempotent; there is deliberately no disarm.
32
+ */
33
+ export function armSandboxPolicyExecution() {
34
+ armed = true;
35
+ }
36
+ /** Whether {@link armSandboxPolicyExecution} has been called. */
37
+ export function isSandboxPolicyExecutionArmed() {
38
+ return armed;
39
+ }
40
+ /** Test-only reset — vitest gives each test file its own module registry, so this exists for suites that arm and disarm within one file. */
41
+ export function resetSandboxPolicyExecutionForTests() {
42
+ armed = false;
43
+ }
44
+ /**
45
+ * Import a policy module into THIS process and return its module namespace.
46
+ * Node's ESM registry caches it, so repeated loads within one CLI invocation
47
+ * evaluate the file once.
48
+ *
49
+ * Refuses while armed. Under `--sandbox` the policy modules are imported inside
50
+ * a child process (`../discovery/sandbox/policy-run.ts`); arriving here anyway
51
+ * means something is about to execute project-authored code in the CLI's own
52
+ * process, which is exactly what the flag promises does not happen. Falling
53
+ * through would make `--sandbox` mean less than it says with nothing visible to
54
+ * notice, so this throws instead.
55
+ */
56
+ export async function importPolicyModule(policyPath) {
57
+ if (armed) {
58
+ throw new Error(`Refusing to import the policy module ${policyPath} into the chant process under --sandbox: it is project-authored code and must be imported inside the sandbox boundary (packages/core/src/lint/policy-sandbox.ts's runProjectPolicies).`);
59
+ }
60
+ ensureTypeScriptLoader();
61
+ return (await import(policyPath));
62
+ }
@@ -0,0 +1,86 @@
1
+ import { resolve } from "node:path";
2
+ import { runPostSynthChecks, } from "./post-synth.js";
3
+ import { loadPolicyChecks } from "./policy.js";
4
+ import { armSandboxPolicyExecution, isSandboxPolicyExecutionArmed, resetSandboxPolicyExecutionForTests, } from "./policy-import.js";
5
+ /**
6
+ * chant #1131 — decides WHERE a project's `lint.policies` checks run.
7
+ *
8
+ * A policy is project-authored code. Every other piece of project code moved
9
+ * behind the `--sandbox` boundary in chant #1045 (run-fallback source), #1093
10
+ * (composite factories, constructors, intrinsic tags) and #1113
11
+ * (`chant.config.ts`), and all three had to leave this one out: the config
12
+ * declares its policies as *paths*, so putting the config behind the boundary
13
+ * did not put them there with it. `chant build` imported each policy module and
14
+ * called its `check` function in the CLI's own process, after discovery was
15
+ * over, with the CLI's filesystem, network, environment and process-spawn
16
+ * access. This module closes it.
17
+ *
18
+ * ## Why an armed process mode rather than a threaded option
19
+ *
20
+ * The same reason `../config-sandbox.ts` gives. `./policy.ts`'s
21
+ * `loadPolicyChecks` is exported from chant-core's public surface and called
22
+ * from more than one place (`../cli/commands/build.ts` for a build, and
23
+ * `evaluateProjectPolicies` for the `policyGate` Op step). Threading a
24
+ * `sandbox` flag to each is fail-OPEN: miss one and project code executes in
25
+ * the CLI process with nothing to notice. Arming the process once, before any
26
+ * policy is loaded, is fail-CLOSED — `loadPolicyChecks` REFUSES while armed, so
27
+ * a call site nobody remembered gets a loud error rather than a silent
28
+ * execution.
29
+ *
30
+ * ## What arms it
31
+ *
32
+ * Both ways of turning sandboxing on, unlike `../config-sandbox.ts`. That
33
+ * asymmetry is not an oversight: the config has a bootstrap limit (reading
34
+ * `build.sandbox` out of `chant.config.ts` means running it, so only the CLI
35
+ * flag, known before any config is touched, can cover the config's own
36
+ * evaluation). Policies have no such limit — they are loaded long after the
37
+ * config is known — so `build.sandbox: true` in a project's config sandboxes
38
+ * them just as `--sandbox` does, and `../cli/commands/build.ts` arms this from
39
+ * the RESOLVED value.
40
+ *
41
+ * There is deliberately no disarm: a security mode that can be turned off
42
+ * partway through a process is not one.
43
+ */
44
+ /**
45
+ * The mode itself lives on `./policy-import.ts` — the leaf module that actually
46
+ * performs an in-process policy import, so the refusal sits on the narrowest
47
+ * possible thing and `./policy.ts` can consult it without importing this file
48
+ * (which imports `./policy.ts`). Re-exported here because this is where the
49
+ * decision is documented and where callers look.
50
+ *
51
+ * `armSandboxPolicyExecution` is called from `../cli/commands/build.ts` once
52
+ * `build.sandbox`/`--sandbox` has resolved, and from `../cli/main.ts` off the
53
+ * parsed flag.
54
+ */
55
+ export { armSandboxPolicyExecution, isSandboxPolicyExecutionArmed, resetSandboxPolicyExecutionForTests };
56
+ /**
57
+ * Run a project's organizational policy checks over a finished build and return
58
+ * their diagnostics. Sandboxed in a post-merge child when armed, in-process
59
+ * otherwise.
60
+ *
61
+ * The unarmed path is byte-for-byte what `chant build` has always done: load
62
+ * the modules, hand every check one `PostSynthContext`, concatenate what they
63
+ * return. The armed path does the same thing on the other side of a process
64
+ * boundary — see `../discovery/sandbox/policy-run.ts`.
65
+ */
66
+ export async function runProjectPolicies(run) {
67
+ if (run.policies.length === 0)
68
+ return [];
69
+ if (!isSandboxPolicyExecutionArmed()) {
70
+ const checks = run.preloaded ?? (await loadPolicyChecks([...run.policies], run.configDir));
71
+ if (checks.length === 0)
72
+ return [];
73
+ return runPostSynthChecks(checks, run.buildResult, run.env);
74
+ }
75
+ // Dynamic, not static, for the same reason `../config-sandbox.ts` imports
76
+ // `../discovery/sandbox/config-run` dynamically: this pulls in `esbuild`, a
77
+ // large CJS package no unsandboxed build should pay to load.
78
+ const { runPoliciesSandboxed } = await import("../discovery/sandbox/policy-run.js");
79
+ const { diagnostics } = await runPoliciesSandboxed({
80
+ policyPaths: run.policies.map((p) => resolve(run.configDir, p)),
81
+ buildResult: run.buildResult,
82
+ env: run.env,
83
+ projectRoot: run.configDir,
84
+ });
85
+ return diagnostics;
86
+ }
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Project-authored organizational policy: loading the policy pack and evaluating
3
+ * it against a freshly built project. `chant build` runs policies inline; the
4
+ * `policyGate` Op step runs this to gate an apply on the same checks.
5
+ */
6
+ import { resolve, dirname } from "node:path";
7
+ import { loadChantConfigUpward, resolveOwnershipEnv, resolveOwnershipMarker } from "../config.js";
8
+ import { resolveBuildParams } from "../build-params.js";
9
+ import { resolveProjectLexicons, loadPlugins } from "../cli/plugins.js";
10
+ import { resolveBuildModes, resolveProjectBuildOptions } from "../cli/build-options.js";
11
+ import { formatWarning } from "../cli/format.js";
12
+ import { build } from "../build.js";
13
+ import { runPostSynthChecks, isPostSynthCheck } from "./post-synth.js";
14
+ import { applyConfiguredSeverity } from "./config.js";
15
+ import { importPolicyModule, isSandboxPolicyExecutionArmed } from "./policy-import.js";
16
+ /**
17
+ * Load project policy checks (one or more `PostSynthCheck` exports) from files,
18
+ * **into this process**.
19
+ *
20
+ * chant #1131 — refuses while `./policy-sandbox.ts` is armed. Under `--sandbox`
21
+ * the policy modules are imported and their checks run inside a child process
22
+ * (`runProjectPolicies`); reaching this function anyway means a call site is
23
+ * about to execute project-authored code in the CLI's own process, which is
24
+ * precisely the thing the flag promises does not happen. Failing loudly is the
25
+ * only honest option — falling through would make `--sandbox` mean less than it
26
+ * says without anything visible to notice.
27
+ */
28
+ export async function loadPolicyChecks(paths, configDir) {
29
+ if (isSandboxPolicyExecutionArmed()) {
30
+ throw new Error(`Cannot load lint.policies (${paths.join(", ")}) in the chant process under --sandbox: a policy module is project-authored code, and it must be imported inside the sandbox boundary. This is a chant bug — the caller should route through runProjectPolicies() (packages/core/src/lint/policy-sandbox.ts).`);
31
+ }
32
+ const checks = [];
33
+ for (const p of paths) {
34
+ const resolved = resolve(configDir, p);
35
+ let mod;
36
+ try {
37
+ mod = await importPolicyModule(resolved);
38
+ }
39
+ catch (err) {
40
+ throw new Error(`Failed to load policy "${p}": ${err instanceof Error ? err.message : String(err)}`);
41
+ }
42
+ for (const value of Object.values(mod)) {
43
+ if (isPostSynthCheck(value))
44
+ checks.push(value);
45
+ }
46
+ }
47
+ return checks;
48
+ }
49
+ /**
50
+ * Build a project and run its `lint.policies` over the resolved resources,
51
+ * standalone — used by the `policyGate` Op step to gate an apply on the same
52
+ * organizational policy `chant build` enforces. Loads the project's lexicons,
53
+ * builds, then runs the policy pack with `env` (explicit, else `ownership.env`).
54
+ *
55
+ * chant #2002 — "the same organizational policy `chant build` enforces" only
56
+ * holds if it is the same build. The build options are assembled by
57
+ * `../cli/build-options.ts`'s `resolveProjectBuildOptions`, the single function
58
+ * `chant build` also calls, rather than by a second list here; a build option
59
+ * added for one caller and not the other is what let a gate pass a build
60
+ * `chant build` fails.
61
+ */
62
+ export async function evaluateProjectPolicies(opts) {
63
+ const buildPath = resolve(opts.path);
64
+ const lexiconNames = await resolveProjectLexicons(buildPath);
65
+ const plugins = await loadPlugins(lexiconNames);
66
+ const serializers = plugins.map((p) => p.serializer);
67
+ // chant #1117 — walks up from the build dir to the project root, same as
68
+ // `chant build` (`../cli/commands/build.ts`'s `loadChantConfigUpward`), not
69
+ // just the build dir's immediate parent.
70
+ const loaded = await loadChantConfigUpward(buildPath);
71
+ const config = loaded.config;
72
+ const configDir = loaded.configPath ? dirname(loaded.configPath) : buildPath;
73
+ // #1396 — `ownership.env` may reference a build parameter, so the declared
74
+ // parameters are resolved first (from their env mappings and defaults, the
75
+ // same inputs an Op step has) and the build sees them too.
76
+ const params = resolveBuildParams(config.buildParams, { env: process.env });
77
+ if (params.errors.length > 0) {
78
+ throw new Error(`Build parameters did not resolve — cannot evaluate policy:\n ${params.errors.join("\n ")}`);
79
+ }
80
+ const env = opts.env ?? resolveOwnershipEnv(config, params.provenance);
81
+ // chant #2002 — the build options come from the shared assembler
82
+ // (`../cli/build-options.ts`), the same one `chant build` uses, so the gate
83
+ // decides on the project `chant build` produces: folded by default (#1134),
84
+ // with the project's config reaching the serializers, and with
85
+ // config-declared build roots contributing their entities. Assembling a
86
+ // second, shorter list here is what let the two drift apart.
87
+ const modes = resolveBuildModes(config);
88
+ const warnings = [];
89
+ if (modes.sandbox) {
90
+ // Resolved, reported, and not yet honoured. Building inside the boundary
91
+ // needs per-execution arming (#1157) — until that lands, saying so is the
92
+ // difference between a known gap and a silent one.
93
+ warnings.push(`build.sandbox is enabled for this project, but the policy gate builds it in this process — the project's source files and its lint.policies modules execute here, unsandboxed (chant #1157). Run \`chant build --sandbox\` for a sandboxed build of the same project.`);
94
+ }
95
+ for (const warning of warnings)
96
+ console.error(formatWarning({ message: warning }));
97
+ const result = await build(buildPath, serializers, undefined, resolveProjectBuildOptions({
98
+ config,
99
+ configDir,
100
+ plugins,
101
+ modes: { fold: modes.fold, sandbox: false },
102
+ ownership: resolveOwnershipMarker(config, params.provenance),
103
+ buildParams: params.provenance,
104
+ }));
105
+ if (result.errors.length > 0) {
106
+ throw new Error("Build failed — cannot evaluate policy on a broken build");
107
+ }
108
+ const checks = config.lint?.policies?.length
109
+ ? await loadPolicyChecks(config.lint.policies, configDir)
110
+ : [];
111
+ if (checks.length === 0) {
112
+ return { diagnostics: [], violations: [], env, suppressed: [], warnings };
113
+ }
114
+ const raw = runPostSynthChecks(checks, result, env);
115
+ // chant #1138 — same `lint.rules` resolution `chant build` applies
116
+ // (`../cli/commands/build.ts`), so a check `lint.rules` turned "off"/
117
+ // "warning" doesn't gate an apply here even though `chant build` no longer
118
+ // fails on it either, and vice versa for a check turned UP to "error".
119
+ const { diagnostics, suppressed } = applyConfiguredSeverity(raw, config.lint?.rules);
120
+ const violations = diagnostics.filter((d) => d.severity === "error");
121
+ return { diagnostics, violations, env, suppressed, warnings };
122
+ }
@@ -0,0 +1,87 @@
1
+ import { parseOutputDocs } from "./output-docs.js";
2
+ export { parseOutputDocs, pick, get } from "./output-docs.js";
3
+ /**
4
+ * Build the lazy, memoized `docs` accessor shared by `runPostSynthChecks`
5
+ * (below) and `@intentius/chant-test-utils`'s `createPostSynthContext` — the
6
+ * two places a `PostSynthContext` gets constructed. Returns a zero-arg
7
+ * function suitable for a `get docs()` object-literal accessor; the first
8
+ * call parses, every later call returns the same cached array.
9
+ */
10
+ export function createDocsAccessor(outputs) {
11
+ let cached;
12
+ return () => {
13
+ if (cached === undefined) {
14
+ cached = parseOutputDocs(outputs);
15
+ }
16
+ return cached;
17
+ };
18
+ }
19
+ /**
20
+ * Extract the primary content string from a serializer output.
21
+ */
22
+ export function getPrimaryOutput(output) {
23
+ return typeof output === "string" ? output : output.primary;
24
+ }
25
+ /**
26
+ * Extract the ADDITIONAL files from a serializer output — everything
27
+ * {@link getPrimaryOutput} discards.
28
+ *
29
+ * Every post-synth check shipped before this one reads the primary output
30
+ * only, which means a sidecar file (a nested stack template, committed SOPS
31
+ * ciphertext) is invisible to all of them. That is the right default — the
32
+ * primary output is what appliers read — but a rule ABOUT a sidecar has to
33
+ * be able to see it, and `PostSynthContext.outputs` has carried the data all
34
+ * along. WK8504 (k8s) is the first caller.
35
+ */
36
+ export function getAdditionalFiles(output) {
37
+ return typeof output === "string" ? {} : (output.files ?? {});
38
+ }
39
+ /** Structural type guard — used to collect project-authored policy checks. */
40
+ export function isPostSynthCheck(value) {
41
+ return (typeof value === "object" &&
42
+ value !== null &&
43
+ typeof value.id === "string" &&
44
+ typeof value.description === "string" &&
45
+ typeof value.check === "function");
46
+ }
47
+ /**
48
+ * Run a set of post-synthesis checks against a build result. `env` is threaded
49
+ * into the context so a check can branch on the current environment/stack, and
50
+ * `opts.activityContracts` (chant #2101) carries the build's cross-lexicon
51
+ * activity-contract map to the checks that validate Op steps against it.
52
+ * `opts.telemetry` is the build's resolved telemetry attribution, and
53
+ * `opts.projectDir` and `opts.projectConfig` the config the build loaded and
54
+ * its directory.
55
+ */
56
+ export function runPostSynthChecks(checks, buildResult, env, opts) {
57
+ const getDocs = createDocsAccessor(buildResult.outputs);
58
+ const ctx = {
59
+ outputs: buildResult.outputs,
60
+ entities: buildResult.entities,
61
+ env,
62
+ buildResult,
63
+ ...(opts?.activityContracts ? { activityContracts: opts.activityContracts } : {}),
64
+ ...(opts?.telemetry ? { telemetry: opts.telemetry } : {}),
65
+ ...(opts?.projectDir ? { projectDir: opts.projectDir } : {}),
66
+ ...(opts?.projectConfig ? { projectConfig: opts.projectConfig } : {}),
67
+ get docs() {
68
+ return getDocs();
69
+ },
70
+ };
71
+ const diagnostics = [];
72
+ for (const check of checks) {
73
+ diagnostics.push(...check.check(ctx));
74
+ }
75
+ return diagnostics;
76
+ }
77
+ // chant #1138 — `applyConfiguredSeverity` (the `lint.rules` severity-override
78
+ // pass over a set of `PostSynthDiagnostic`s) lives in `./config.ts`, not here,
79
+ // even though it operates on this module's own type. This file is a leaf:
80
+ // every lexicon's post-synth checks import it as a real runtime module (not
81
+ // just for types — `getPrimaryOutput` above is a plain function several
82
+ // checks call directly), so it has to stay cheap to load. `./config.ts` is
83
+ // not cheap — it resolves built-in preset paths via the runtime adapter at
84
+ // module scope — and pulling that into every lexicon's check barrel merely to
85
+ // share one filter function is the wrong trade. `applyConfiguredSeverity`
86
+ // only needs this module's TYPE (`PostSynthDiagnostic`), which costs nothing
87
+ // at runtime, so the dependency runs the other way instead.
@@ -0,0 +1,26 @@
1
+ {
2
+ "rules": {
3
+ "COR001": "warning",
4
+ "COR002": "off",
5
+ "COR003": "off",
6
+ "COR004": "off",
7
+ "COR005": "off",
8
+ "COR006": "off",
9
+ "COR007": "off",
10
+ "COR008": "warning",
11
+ "COR009": "off",
12
+ "COR010": "warning",
13
+ "COR011": "warning",
14
+ "COR012": "off",
15
+ "COR013": "off",
16
+ "COR014": "off",
17
+ "COR015": "off",
18
+ "COMP001": "warning",
19
+ "COMP002": "warning",
20
+ "COMP003": "off",
21
+ "COMP004": "warning",
22
+ "COMP005": "off",
23
+ "COMP006": "off",
24
+ "COMP007": "off"
25
+ }
26
+ }