@intentius/chant 0.124.13 → 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 (907) 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.js +260 -0
  306. package/dist/gate-resume-run.js +154 -0
  307. package/dist/gated-waves.js +165 -0
  308. package/dist/governance.js +43 -0
  309. package/dist/graph-declared.js +45 -0
  310. package/dist/graph-detail.js +207 -0
  311. package/dist/graph-dot.js +54 -0
  312. package/dist/graph-effective.js +107 -0
  313. package/dist/graph-ir.js +623 -0
  314. package/dist/graph-layout.js +184 -0
  315. package/dist/graph-lens.js +105 -0
  316. package/dist/graph-mermaid.js +83 -0
  317. package/dist/graph-ops.js +39 -0
  318. package/dist/graph-refs.js +156 -0
  319. package/dist/held-elsewhere.js +87 -0
  320. package/dist/identity.js +251 -0
  321. package/dist/import/base-parser.js +34 -0
  322. package/dist/import/embedded.js +255 -0
  323. package/dist/import/generator.js +1 -0
  324. package/dist/import/ir-utils.js +85 -0
  325. package/dist/import/parser-options.js +45 -0
  326. package/dist/import/parser.js +1 -0
  327. package/dist/index.js +118 -0
  328. package/dist/intrinsic-interpolation.js +73 -0
  329. package/dist/intrinsic.js +31 -0
  330. package/dist/join-key.js +35 -0
  331. package/dist/kubectl-context.js +150 -0
  332. package/dist/lexicon-config.js +58 -0
  333. package/dist/lexicon-integrity.js +47 -0
  334. package/dist/lexicon-manifest.js +70 -0
  335. package/dist/lexicon-module.d.ts.map +1 -1
  336. package/dist/lexicon-module.js +241 -0
  337. package/dist/lexicon-output.js +218 -0
  338. package/dist/lexicon-plugin-helpers.js +104 -0
  339. package/dist/lexicon-schema.js +136 -0
  340. package/dist/lexicon.js +130 -0
  341. package/dist/lifecycle/affected.js +224 -0
  342. package/dist/lifecycle/assert-live.js +110 -0
  343. package/dist/lifecycle/build-ledger-store.js +160 -0
  344. package/dist/lifecycle/build-ledger.js +155 -0
  345. package/dist/lifecycle/change-set.js +356 -0
  346. package/dist/lifecycle/converge-ledger.js +161 -0
  347. package/dist/lifecycle/deep-diff.js +233 -0
  348. package/dist/lifecycle/deep-observe.js +147 -0
  349. package/dist/lifecycle/digest.js +143 -0
  350. package/dist/lifecycle/disruption.js +135 -0
  351. package/dist/lifecycle/gate-applied.js +113 -0
  352. package/dist/lifecycle/gate-audit.js +341 -0
  353. package/dist/lifecycle/gate-ledger-select.js +89 -0
  354. package/dist/lifecycle/gate-ledger.js +193 -0
  355. package/dist/lifecycle/gate-origin.js +117 -0
  356. package/dist/lifecycle/gate-pending.js +58 -0
  357. package/dist/lifecycle/git.js +1182 -0
  358. package/dist/lifecycle/identity.js +58 -0
  359. package/dist/lifecycle/index.js +26 -0
  360. package/dist/lifecycle/lease.js +283 -0
  361. package/dist/lifecycle/ledger-port.js +1 -0
  362. package/dist/lifecycle/legacy-digest.js +91 -0
  363. package/dist/lifecycle/live-diff.js +274 -0
  364. package/dist/lifecycle/local-note.js +15 -0
  365. package/dist/lifecycle/member-ledger.js +122 -0
  366. package/dist/lifecycle/observation-baseline.js +155 -0
  367. package/dist/lifecycle/observe.js +375 -0
  368. package/dist/lifecycle/oras-referrer-lookup.js +82 -0
  369. package/dist/lifecycle/override-ledger.js +54 -0
  370. package/dist/lifecycle/plan-digest.js +110 -0
  371. package/dist/lifecycle/plan-ledger.js +129 -0
  372. package/dist/lifecycle/receipt-plan.js +192 -0
  373. package/dist/lifecycle/release-ledger.js +155 -0
  374. package/dist/lifecycle/release-read.js +64 -0
  375. package/dist/lifecycle/replay.js +193 -0
  376. package/dist/lifecycle/rollback.js +102 -0
  377. package/dist/lifecycle/run-ledger.js +183 -0
  378. package/dist/lifecycle/scenario-eval.js +204 -0
  379. package/dist/lifecycle/scenario.js +214 -0
  380. package/dist/lifecycle/snapshot.js +239 -0
  381. package/dist/lifecycle/status.js +447 -0
  382. package/dist/lifecycle/symptoms.js +117 -0
  383. package/dist/lifecycle/teardown.js +255 -0
  384. package/dist/lifecycle/types.js +1 -0
  385. package/dist/lifecycle/unobserved-gate.js +33 -0
  386. package/dist/lifecycle/wave-plans.js +68 -0
  387. package/dist/lifecycle/work-item-id.js +36 -0
  388. package/dist/lifecycle/work-lease.js +393 -0
  389. package/dist/lint/component-checks.js +87 -0
  390. package/dist/lint/config.js +483 -0
  391. package/dist/lint/declarative.js +122 -0
  392. package/dist/lint/discover.d.ts.map +1 -1
  393. package/dist/lint/discover.js +138 -0
  394. package/dist/lint/engine.js +246 -0
  395. package/dist/lint/knowledge-checks.js +64 -0
  396. package/dist/lint/named-checks.js +22 -0
  397. package/dist/lint/output-checks.js +87 -0
  398. package/dist/lint/output-docs.js +163 -0
  399. package/dist/lint/parser.js +33 -0
  400. package/dist/lint/pipeline-change-gate.js +70 -0
  401. package/dist/lint/policy-import.d.ts +1 -1
  402. package/dist/lint/policy-import.d.ts.map +1 -1
  403. package/dist/lint/policy-import.js +62 -0
  404. package/dist/lint/policy-sandbox.js +86 -0
  405. package/dist/lint/policy.js +122 -0
  406. package/dist/lint/post-synth.js +87 -0
  407. package/dist/lint/presets/relaxed.json +26 -0
  408. package/dist/lint/presets/strict.json +24 -24
  409. package/dist/lint/receipt-checks.js +83 -0
  410. package/dist/lint/rule-loader.d.ts.map +1 -1
  411. package/dist/lint/rule-loader.js +89 -0
  412. package/dist/lint/rule-registry.js +86 -0
  413. package/dist/lint/rule.js +1 -0
  414. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
  415. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
  416. package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
  417. package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
  418. package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
  419. package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
  420. package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
  421. package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
  422. package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
  423. package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
  424. package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
  425. package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
  426. package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
  427. package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
  428. package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
  429. package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
  430. package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
  431. package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
  432. package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
  433. package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
  434. package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
  435. package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
  436. package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
  437. package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
  438. package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
  439. package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
  440. package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
  441. package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
  442. package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
  443. package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
  444. package/dist/lint/rules/comp/index.js +33 -0
  445. package/dist/lint/rules/comp/support.js +129 -0
  446. package/dist/lint/rules/composite-scope.js +51 -0
  447. package/dist/lint/rules/cor017-composite-name-match.js +93 -0
  448. package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
  449. package/dist/lint/rules/cor021-env-literal-name.js +100 -0
  450. package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
  451. package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
  452. package/dist/lint/rules/declarable-naming-convention.js +62 -0
  453. package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
  454. package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
  455. package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
  456. package/dist/lint/rules/evl004-spread-non-const.js +94 -0
  457. package/dist/lint/rules/evl005-resource-block-body.js +41 -0
  458. package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
  459. package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
  460. package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
  461. package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
  462. package/dist/lint/rules/export-required.js +115 -0
  463. package/dist/lint/rules/file-declarable-limit.js +88 -0
  464. package/dist/lint/rules/flat-declarations.js +62 -0
  465. package/dist/lint/rules/index.js +90 -0
  466. package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
  467. package/dist/lint/rules/no-redundant-type-import.js +76 -0
  468. package/dist/lint/rules/no-redundant-value-cast.js +41 -0
  469. package/dist/lint/rules/no-string-ref.js +59 -0
  470. package/dist/lint/rules/no-unused-declarable-import.js +75 -0
  471. package/dist/lint/rules/no-unused-declarable.js +142 -0
  472. package/dist/lint/rules/op/index.js +28 -0
  473. package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
  474. package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
  475. package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
  476. package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
  477. package/dist/lint/rules/op/support.js +11 -0
  478. package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
  479. package/dist/lint/rules/property-kind.js +56 -0
  480. package/dist/lint/rules/single-concern-file.js +71 -0
  481. package/dist/lint/rules/sys001-no-literal-key.js +60 -0
  482. package/dist/lint/selectors.js +168 -0
  483. package/dist/lint/suppressions.js +129 -0
  484. package/dist/lint/typescript.js +17 -0
  485. package/dist/live-endpoint.js +113 -0
  486. package/dist/live-read-session.js +76 -0
  487. package/dist/lsp/lexicon-providers.js +163 -0
  488. package/dist/lsp/types.js +5 -0
  489. package/dist/managed-fields.js +293 -0
  490. package/dist/mcp/types.js +4 -0
  491. package/dist/notify-verify.js +0 -1
  492. package/dist/notify.js +0 -1
  493. package/dist/notify.schema.json +72 -0
  494. package/dist/observation.js +266 -0
  495. package/dist/okf-read.js +134 -0
  496. package/dist/okf.js +275 -0
  497. package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
  498. package/dist/op/activities/activity-contracts.js +313 -0
  499. package/dist/op/activities/apply.js +582 -0
  500. package/dist/op/activities/build.js +18 -0
  501. package/dist/op/activities/change-coverage.js +40 -0
  502. package/dist/op/activities/change-set.js +64 -0
  503. package/dist/op/activities/converge.js +492 -0
  504. package/dist/op/activities/decide.js +211 -0
  505. package/dist/op/activities/env-teardown.js +110 -0
  506. package/dist/op/activities/factory.js +591 -0
  507. package/dist/op/activities/forge-pull-request.js +82 -0
  508. package/dist/op/activities/gh-host.js +78 -0
  509. package/dist/op/activities/guard-validate.js +165 -0
  510. package/dist/op/activities/http-check.js +40 -0
  511. package/dist/op/activities/index.js +59 -0
  512. package/dist/op/activities/lexicon-upgrade.js +629 -0
  513. package/dist/op/activities/lifecycle.js +109 -0
  514. package/dist/op/activities/pipeline-audit.js +147 -0
  515. package/dist/op/activities/policy.js +26 -0
  516. package/dist/op/activities/predict-behaviour.js +341 -0
  517. package/dist/op/activities/propose-upgrade.js +165 -0
  518. package/dist/op/activities/reconcile.js +997 -0
  519. package/dist/op/activities/shell.js +118 -0
  520. package/dist/op/activities/source-release.js +97 -0
  521. package/dist/op/activities/source-rollback.js +165 -0
  522. package/dist/op/activities/teardown.js +17 -0
  523. package/dist/op/activities/util.js +6 -0
  524. package/dist/op/activities/wait.js +51 -0
  525. package/dist/op/activities/work-evidence.js +35 -0
  526. package/dist/op/activities/workflow-audit.js +133 -0
  527. package/dist/op/activity-contract-registry.js +106 -0
  528. package/dist/op/activity-contract.js +232 -0
  529. package/dist/op/activity-failure.js +31 -0
  530. package/dist/op/activity-profiles.js +129 -0
  531. package/dist/op/activity-registry.js +105 -0
  532. package/dist/op/activity-runtime.js +28 -0
  533. package/dist/op/builders.js +801 -0
  534. package/dist/op/change-signal.js +118 -0
  535. package/dist/op/composites/apply-op.js +151 -0
  536. package/dist/op/composites/behaviour-op.js +65 -0
  537. package/dist/op/composites/converge-op.js +141 -0
  538. package/dist/op/composites/index.js +19 -0
  539. package/dist/op/composites/lexicon-upgrade-op.js +107 -0
  540. package/dist/op/composites/pipeline-audit-op.js +50 -0
  541. package/dist/op/composites/reconcile-op.js +84 -0
  542. package/dist/op/composites/watch-op.js +69 -0
  543. package/dist/op/composites/workflow-audit-op.js +57 -0
  544. package/dist/op/converge-rule.js +205 -0
  545. package/dist/op/cron.js +146 -0
  546. package/dist/op/decide-backend.js +181 -0
  547. package/dist/op/decide-config.js +68 -0
  548. package/dist/op/decide-read-inputs.js +141 -0
  549. package/dist/op/discover.d.ts.map +1 -1
  550. package/dist/op/discover.js +213 -0
  551. package/dist/op/duration.js +21 -0
  552. package/dist/op/emulator-freshness.js +80 -0
  553. package/dist/op/emulator-lifecycle.js +269 -0
  554. package/dist/op/factory.js +83 -0
  555. package/dist/op/gate-approval.js +172 -0
  556. package/dist/op/gate-name.js +86 -0
  557. package/dist/op/gate-plan-context.js +167 -0
  558. package/dist/op/gate-point-run.js +67 -0
  559. package/dist/op/gate-point.js +111 -0
  560. package/dist/op/gate-resume-plan.js +155 -0
  561. package/dist/op/gate-resume.js +31 -0
  562. package/dist/op/gate-review.js +290 -0
  563. package/dist/op/gate-run-locator.js +85 -0
  564. package/dist/op/gate-summary.js +100 -0
  565. package/dist/op/gate-wait.js +56 -0
  566. package/dist/op/gate.js +449 -0
  567. package/dist/op/generate-pipeline.js +124 -0
  568. package/dist/op/index.js +51 -0
  569. package/dist/op/lifecycle-receipt-store.js +45 -0
  570. package/dist/op/local-executor.js +1164 -0
  571. package/dist/op/local-output.js +140 -0
  572. package/dist/op/op-ir.js +317 -0
  573. package/dist/op/op-verb-class.js +131 -0
  574. package/dist/op/op-waves-notify.js +136 -0
  575. package/dist/op/op-waves-run.js +1657 -0
  576. package/dist/op/op-waves.js +409 -0
  577. package/dist/op/operator.js +743 -0
  578. package/dist/op/receipt-store.js +94 -0
  579. package/dist/op/resource.js +23 -0
  580. package/dist/op/run-context.js +28 -0
  581. package/dist/op/run-live.js +256 -0
  582. package/dist/op/runtime.js +21 -0
  583. package/dist/op/runtimes/local.js +195 -0
  584. package/dist/op/source-archive.js +131 -0
  585. package/dist/op/step-output-ref.js +397 -0
  586. package/dist/op/steward-beside.js +169 -0
  587. package/dist/op/steward-points.js +138 -0
  588. package/dist/op/steward-turn.js +59 -0
  589. package/dist/op/steward.js +317 -0
  590. package/dist/op/types.js +25 -0
  591. package/dist/op/work-lease-decl.js +81 -0
  592. package/dist/op/work-lease-run.js +393 -0
  593. package/dist/override-gate.js +284 -0
  594. package/dist/owner-chain.js +74 -0
  595. package/dist/ownership.js +92 -0
  596. package/dist/params.js +61 -0
  597. package/dist/plan-summary.js +711 -0
  598. package/dist/point-decision.js +211 -0
  599. package/dist/pr-forge.js +810 -0
  600. package/dist/pr-loop.js +203 -0
  601. package/dist/project-codegen.js +191 -0
  602. package/dist/project-root.js +74 -0
  603. package/dist/project-validation.js +50 -0
  604. package/dist/provenance.js +157 -0
  605. package/dist/pseudo-parameter.js +40 -0
  606. package/dist/reconcile.js +450 -0
  607. package/dist/resource-attributes.js +33 -0
  608. package/dist/runtime-adapter.js +77 -0
  609. package/dist/runtime.js +66 -0
  610. package/dist/secret-materialization.js +153 -0
  611. package/dist/secret-provenance.js +250 -0
  612. package/dist/serializer-walker.js +112 -0
  613. package/dist/serializer.js +1 -0
  614. package/dist/sort.js +45 -0
  615. package/dist/stack-output.js +115 -0
  616. package/dist/telemetry-attribution.js +149 -0
  617. package/dist/terraform/__fixtures__/build-graph.js +63 -0
  618. package/dist/terraform/adopt-state.js +40 -0
  619. package/dist/terraform/aws-resources.js +384 -0
  620. package/dist/terraform/bridge.js +204 -0
  621. package/dist/terraform/carve-provider.js +155 -0
  622. package/dist/terraform/carve.js +138 -0
  623. package/dist/terraform/data-source-shape.js +57 -0
  624. package/dist/terraform/emit-source.js +36 -0
  625. package/dist/terraform/excise.js +123 -0
  626. package/dist/terraform/graduate.js +128 -0
  627. package/dist/terraform/graph.js +435 -0
  628. package/dist/terraform/hcl2json.js +60 -0
  629. package/dist/terraform/manifest.js +149 -0
  630. package/dist/terraform/parse.js +81 -0
  631. package/dist/terraform/providers/aws.js +146 -0
  632. package/dist/terraform/providers/gcp.js +294 -0
  633. package/dist/terraform/providers/index.js +17 -0
  634. package/dist/terraform/providers/kubernetes.js +253 -0
  635. package/dist/terraform/score.js +151 -0
  636. package/dist/terraform/state.js +67 -0
  637. package/dist/terraform/tier-map.js +74 -0
  638. package/dist/terraform/types.js +13 -0
  639. package/dist/terraform/unified-diff.js +132 -0
  640. package/dist/testing.js +295 -0
  641. package/dist/toml-emit.js +153 -0
  642. package/dist/toml-parse.js +355 -0
  643. package/dist/toml-utils.js +60 -0
  644. package/dist/toml.js +428 -0
  645. package/dist/ts-loader.d.ts +46 -0
  646. package/dist/ts-loader.d.ts.map +1 -0
  647. package/dist/ts-loader.js +103 -0
  648. package/dist/types.js +1 -0
  649. package/dist/utils.js +61 -0
  650. package/dist/validation.js +20 -0
  651. package/dist/vendor/js-yaml-load.js +1662 -0
  652. package/dist/workspace/__fixtures__/contract-repo.js +103 -0
  653. package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
  654. package/dist/workspace/__fixtures__/sessions.js +91 -0
  655. package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
  656. package/dist/workspace/agent-cli.js +99 -0
  657. package/dist/workspace/agent.schema.json +390 -0
  658. package/dist/workspace/answers-ledger.js +89 -0
  659. package/dist/workspace/box-cli.js +142 -0
  660. package/dist/workspace/box-factory-write.js +196 -0
  661. package/dist/workspace/box-factory-write.schema.json +342 -0
  662. package/dist/workspace/box-factory.js +88 -0
  663. package/dist/workspace/box-intent.js +126 -0
  664. package/dist/workspace/box-isolation.js +169 -0
  665. package/dist/workspace/box-listing-write.schema.json +204 -0
  666. package/dist/workspace/box-listing.js +298 -0
  667. package/dist/workspace/box-publish.js +352 -0
  668. package/dist/workspace/box-publish.schema.json +498 -0
  669. package/dist/workspace/box-services.js +39 -0
  670. package/dist/workspace/broker-protocol.js +359 -0
  671. package/dist/workspace/broker-protocol.schema.json +228 -0
  672. package/dist/workspace/change-set.schema.json +460 -0
  673. package/dist/workspace/changes-cli.js +56 -0
  674. package/dist/workspace/changes.js +446 -0
  675. package/dist/workspace/changes.schema.json +642 -0
  676. package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
  677. package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
  678. package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
  679. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
  680. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
  681. package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
  682. package/dist/workspace/chant-migrations.js +113 -0
  683. package/dist/workspace/check.schema.json +433 -0
  684. package/dist/workspace/checks/box-isolation.js +62 -0
  685. package/dist/workspace/checks/boxes.js +491 -0
  686. package/dist/workspace/checks/diagrams.js +104 -0
  687. package/dist/workspace/checks/generated.js +419 -0
  688. package/dist/workspace/checks/ledgers.js +212 -0
  689. package/dist/workspace/checks/links.js +191 -0
  690. package/dist/workspace/checks/live.js +100 -0
  691. package/dist/workspace/checks/pipelines.js +188 -0
  692. package/dist/workspace/checks/records.js +169 -0
  693. package/dist/workspace/checks.js +426 -0
  694. package/dist/workspace/ci-green-cli.js +125 -0
  695. package/dist/workspace/ci-green-forge.js +83 -0
  696. package/dist/workspace/ci-green-workflow.js +199 -0
  697. package/dist/workspace/ci-green.js +325 -0
  698. package/dist/workspace/ci-last-green.schema.json +158 -0
  699. package/dist/workspace/compose-graph.js +235 -0
  700. package/dist/workspace/compose-reports.js +146 -0
  701. package/dist/workspace/composites.js +264 -0
  702. package/dist/workspace/composites.schema.json +617 -0
  703. package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
  704. package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
  705. package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
  706. package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
  707. package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
  708. package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
  709. package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
  710. package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
  711. package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
  712. package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
  713. package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
  714. package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
  715. package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
  716. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  717. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  718. package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
  719. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  720. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  721. package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
  722. package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
  723. package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  724. package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  725. package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
  726. package/dist/workspace/conformance/broker.js +736 -0
  727. package/dist/workspace/conformance/index.js +673 -0
  728. package/dist/workspace/conformance/vitest.js +108 -0
  729. package/dist/workspace/conformance/writer.js +1080 -0
  730. package/dist/workspace/decide.js +879 -0
  731. package/dist/workspace/decision-points.schema.json +135 -135
  732. package/dist/workspace/declaration-write-cli.js +74 -0
  733. package/dist/workspace/declaration-write.js +238 -0
  734. package/dist/workspace/declaration.js +938 -0
  735. package/dist/workspace/declaration.schema.json +1413 -1413
  736. package/dist/workspace/declared-kinds.js +106 -0
  737. package/dist/workspace/environments.js +164 -0
  738. package/dist/workspace/evidence.schema.json +279 -0
  739. package/dist/workspace/export-cli.js +185 -0
  740. package/dist/workspace/export.js +499 -0
  741. package/dist/workspace/factory-rules.js +175 -0
  742. package/dist/workspace/generated-files.js +92 -0
  743. package/dist/workspace/glob.js +45 -0
  744. package/dist/workspace/graph-cache.js +352 -0
  745. package/dist/workspace/graph-cli.js +348 -0
  746. package/dist/workspace/graph.schema.json +1338 -0
  747. package/dist/workspace/identity-gate-rule.js +75 -0
  748. package/dist/workspace/identity.js +126 -0
  749. package/dist/workspace/import.js +283 -0
  750. package/dist/workspace/init.js +620 -0
  751. package/dist/workspace/intent-cli.js +263 -0
  752. package/dist/workspace/intent-joins.js +201 -0
  753. package/dist/workspace/intent-record.js +352 -0
  754. package/dist/workspace/intent-record.schema.json +864 -0
  755. package/dist/workspace/intent.js +1582 -0
  756. package/dist/workspace/intent.schema.json +2420 -0
  757. package/dist/workspace/json-edit.js +221 -0
  758. package/dist/workspace/jsonc.js +235 -0
  759. package/dist/workspace/kind-readers.js +103 -0
  760. package/dist/workspace/kinds.js +587 -0
  761. package/dist/workspace/lexicon-symbols.js +112 -0
  762. package/dist/workspace/lineage-adopt-cli.js +102 -0
  763. package/dist/workspace/lineage-adopt.js +360 -0
  764. package/dist/workspace/lineage-check.js +282 -0
  765. package/dist/workspace/lineage-cli.js +121 -0
  766. package/dist/workspace/lineage-hash-index.js +284 -0
  767. package/dist/workspace/lineage-init.js +507 -0
  768. package/dist/workspace/lineage-lock.js +387 -0
  769. package/dist/workspace/lineage-merge.js +45 -0
  770. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  771. package/dist/workspace/lineage-migrations.js +329 -0
  772. package/dist/workspace/lineage-provenance.js +36 -0
  773. package/dist/workspace/lineage-update.js +138 -0
  774. package/dist/workspace/lineage-upgrade-cli.js +131 -0
  775. package/dist/workspace/lineage-upgrade.js +889 -0
  776. package/dist/workspace/lineage-vendor.js +171 -0
  777. package/dist/workspace/lineage-version.js +128 -0
  778. package/dist/workspace/lineage-versions.js +275 -0
  779. package/dist/workspace/links.js +330 -0
  780. package/dist/workspace/ls-generated.js +95 -0
  781. package/dist/workspace/ls.js +277 -0
  782. package/dist/workspace/ls.schema.json +333 -0
  783. package/dist/workspace/member-commands.js +508 -0
  784. package/dist/workspace/member-handles.js +216 -0
  785. package/dist/workspace/member-pipeline.js +258 -0
  786. package/dist/workspace/member-run.js +117 -0
  787. package/dist/workspace/member-write.schema.json +193 -0
  788. package/dist/workspace/nested-graph.js +156 -0
  789. package/dist/workspace/nesting.js +38 -0
  790. package/dist/workspace/patch.js +301 -0
  791. package/dist/workspace/patch.schema.json +321 -0
  792. package/dist/workspace/pin-cli.js +55 -0
  793. package/dist/workspace/pin-integrity.js +100 -0
  794. package/dist/workspace/plan-summary.schema.json +155 -0
  795. package/dist/workspace/point-answer.schema.json +129 -129
  796. package/dist/workspace/points-cli.js +291 -0
  797. package/dist/workspace/points-write.schema.json +660 -0
  798. package/dist/workspace/points.js +521 -0
  799. package/dist/workspace/points.schema.json +916 -0
  800. package/dist/workspace/pr-report.schema.json +108 -0
  801. package/dist/workspace/principal-classes.js +245 -0
  802. package/dist/workspace/reason-codes.js +326 -0
  803. package/dist/workspace/record-assets.js +151 -0
  804. package/dist/workspace/record-decided.js +105 -0
  805. package/dist/workspace/record-sessions.js +96 -0
  806. package/dist/workspace/record-source.js +114 -0
  807. package/dist/workspace/records-amend.schema.json +284 -0
  808. package/dist/workspace/records-checkout.js +76 -0
  809. package/dist/workspace/records-cli.js +707 -0
  810. package/dist/workspace/records-close.js +116 -0
  811. package/dist/workspace/records-close.schema.json +278 -0
  812. package/dist/workspace/records-new.schema.json +202 -0
  813. package/dist/workspace/records-review.schema.json +367 -0
  814. package/dist/workspace/records-since.js +317 -0
  815. package/dist/workspace/records-since.schema.json +218 -0
  816. package/dist/workspace/records-write.js +1229 -0
  817. package/dist/workspace/records.js +1345 -0
  818. package/dist/workspace/records.schema.json +604 -0
  819. package/dist/workspace/reference-kinds/app/package.json +10 -0
  820. package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  821. package/dist/workspace/returns.js +303 -0
  822. package/dist/workspace/root-refusal.js +75 -0
  823. package/dist/workspace/run-statement.schema.json +622 -0
  824. package/dist/workspace/runs-cli.js +584 -0
  825. package/dist/workspace/runs-write.schema.json +994 -0
  826. package/dist/workspace/runs.js +708 -0
  827. package/dist/workspace/runs.schema.json +1257 -0
  828. package/dist/workspace/runtimes.js +76 -0
  829. package/dist/workspace/session-kinds.js +83 -0
  830. package/dist/workspace/signers.schema.json +206 -0
  831. package/dist/workspace/source-block.js +125 -0
  832. package/dist/workspace/squash.js +177 -0
  833. package/dist/workspace/status-gates.js +162 -0
  834. package/dist/workspace/status-stewards.js +330 -0
  835. package/dist/workspace/status.js +514 -0
  836. package/dist/workspace/status.schema.json +998 -0
  837. package/dist/workspace/steward-index.js +191 -0
  838. package/dist/workspace/symbols.js +188 -0
  839. package/dist/workspace/template-manifest.js +227 -0
  840. package/dist/workspace/template-pins.js +115 -0
  841. package/dist/workspace/trailer-joins.js +65 -0
  842. package/dist/workspace/trailers.js +111 -0
  843. package/dist/workspace/tree.js +136 -0
  844. package/dist/workspace/trust/attestor.js +63 -0
  845. package/dist/workspace/trust/dsse.js +108 -0
  846. package/dist/workspace/trust/evidence-cli.js +175 -0
  847. package/dist/workspace/trust/evidence.js +161 -0
  848. package/dist/workspace/trust/gate-seal.js +226 -0
  849. package/dist/workspace/trust/policy.js +190 -0
  850. package/dist/workspace/trust/provenance.js +180 -0
  851. package/dist/workspace/trust/rotation.js +298 -0
  852. package/dist/workspace/trust/run-commits.js +101 -0
  853. package/dist/workspace/trust/run-statement.js +182 -0
  854. package/dist/workspace/trust/seal.js +272 -0
  855. package/dist/workspace/trust/signers-cli.js +152 -0
  856. package/dist/workspace/trust/ssh-commit.js +178 -0
  857. package/dist/workspace/trust/test-repo.js +118 -0
  858. package/dist/workspace/trust/trust-files.js +193 -0
  859. package/dist/workspace/trust/verify-cli.js +63 -0
  860. package/dist/workspace/trust/verify.js +192 -0
  861. package/dist/workspace/which-chant.js +141 -0
  862. package/dist/workspace/wip-cli.js +95 -0
  863. package/dist/workspace/wip-write.schema.json +504 -0
  864. package/dist/workspace/wip.js +631 -0
  865. package/dist/workspace/wip.schema.json +334 -0
  866. package/dist/workspace/work-cli.js +448 -0
  867. package/dist/workspace/work-evidence.js +122 -0
  868. package/dist/workspace/work-evidence.schema.json +222 -0
  869. package/dist/workspace/work-history.schema.json +421 -0
  870. package/dist/workspace/work-lease.schema.json +246 -0
  871. package/dist/workspace/work-size.js +77 -0
  872. package/dist/workspace/work.js +283 -0
  873. package/dist/workspace/workspace-kinds.schema.json +259 -259
  874. package/dist/workspace/workspace-principals.schema.json +53 -53
  875. package/dist/workspace/write-lock-cli.js +105 -0
  876. package/dist/workspace/write-lock.js +424 -0
  877. package/dist/workspace/write-lock.schema.json +172 -0
  878. package/dist/workspace/write-scope.js +484 -0
  879. package/dist/yaml.js +459 -0
  880. package/package.json +2 -2
  881. package/src/cli/commands/check-lexicon-plugin.ts +2 -0
  882. package/src/cli/commands/lint.ts +3 -0
  883. package/src/cli/commands/migrate.ts +2 -0
  884. package/src/cli/compiled-cli.e2e.test.ts +165 -0
  885. package/src/cli/main.ts +121 -27
  886. package/src/cli/mcp/workspace-tools.ts +1 -1
  887. package/src/codegen/pinned-upgrade.ts +2 -0
  888. package/src/components/discover.ts +2 -0
  889. package/src/components/sandbox/driver.ts +3 -1
  890. package/src/config-import.ts +3 -0
  891. package/src/discovery/fold-import.ts +23 -14
  892. package/src/discovery/import.ts +2 -0
  893. package/src/discovery/sandbox/driver.ts +3 -1
  894. package/src/lexicon-module.ts +3 -0
  895. package/src/lint/config.ts +1 -1
  896. package/src/lint/discover.ts +28 -8
  897. package/src/lint/policy-import.ts +4 -1
  898. package/src/lint/rule-loader.ts +2 -0
  899. package/src/op/discover.ts +3 -0
  900. package/src/ts-loader.test.ts +23 -0
  901. package/src/ts-loader.ts +122 -0
  902. package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
  903. package/src/workspace/declaration.ts +1 -1
  904. package/src/workspace/kinds.ts +1 -1
  905. package/src/workspace/lineage-migrations.ts +2 -0
  906. package/src/workspace/points.ts +1 -1
  907. package/src/workspace/principal-classes.ts +1 -1
@@ -0,0 +1,105 @@
1
+ import * as ts from "typescript";
2
+ /**
3
+ * EVL007: Invalid Siblings Access
4
+ *
5
+ * In a Composite factory, resource() callbacks receive a `siblings` parameter.
6
+ * Accessing siblings.key must reference a key that exists in the composite's
7
+ * resource map.
8
+ */
9
+ function checkNode(node, context, diagnostics) {
10
+ // Look for Composite(...) calls
11
+ if (ts.isCallExpression(node) &&
12
+ ts.isIdentifier(node.expression) &&
13
+ node.expression.text === "Composite") {
14
+ // The factory function is the argument to Composite
15
+ const factoryArg = node.arguments[0];
16
+ if (factoryArg && (ts.isArrowFunction(factoryArg) || ts.isFunctionExpression(factoryArg))) {
17
+ checkCompositeFactory(factoryArg, context, diagnostics);
18
+ }
19
+ }
20
+ ts.forEachChild(node, (child) => checkNode(child, context, diagnostics));
21
+ }
22
+ function checkCompositeFactory(factory, context, diagnostics) {
23
+ // The factory body should contain an object literal with resource() calls
24
+ // that define the composite members. Collect the keys.
25
+ const body = factory.body;
26
+ let memberKeys = null;
27
+ if (ts.isBlock(body)) {
28
+ // Look for return statement with object literal
29
+ for (const stmt of body.statements) {
30
+ if (ts.isReturnStatement(stmt) && stmt.expression && ts.isObjectLiteralExpression(stmt.expression)) {
31
+ memberKeys = collectObjectKeys(stmt.expression);
32
+ }
33
+ }
34
+ }
35
+ else if (ts.isParenthesizedExpression(body) && ts.isObjectLiteralExpression(body.expression)) {
36
+ memberKeys = collectObjectKeys(body.expression);
37
+ }
38
+ else if (ts.isObjectLiteralExpression(body)) {
39
+ memberKeys = collectObjectKeys(body);
40
+ }
41
+ if (!memberKeys || memberKeys.size === 0)
42
+ return;
43
+ // Now find resource() calls within the factory and check siblings access
44
+ walkForResourceCalls(body, memberKeys, context, diagnostics);
45
+ }
46
+ function collectObjectKeys(obj) {
47
+ const keys = new Set();
48
+ for (const prop of obj.properties) {
49
+ if (ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop)) {
50
+ if (ts.isIdentifier(prop.name)) {
51
+ keys.add(prop.name.text);
52
+ }
53
+ else if (ts.isStringLiteral(prop.name)) {
54
+ keys.add(prop.name.text);
55
+ }
56
+ }
57
+ }
58
+ return keys;
59
+ }
60
+ function walkForResourceCalls(node, memberKeys, context, diagnostics) {
61
+ if (ts.isCallExpression(node) &&
62
+ ts.isIdentifier(node.expression) &&
63
+ node.expression.text === "resource") {
64
+ // resource(Type, (props, siblings) => ...)
65
+ const callback = node.arguments[1];
66
+ if (callback && (ts.isArrowFunction(callback) || ts.isFunctionExpression(callback))) {
67
+ const siblingsParam = callback.parameters[1];
68
+ if (siblingsParam && ts.isIdentifier(siblingsParam.name)) {
69
+ const siblingsName = siblingsParam.name.text;
70
+ checkSiblingsAccess(callback.body, siblingsName, memberKeys, context, diagnostics);
71
+ }
72
+ }
73
+ }
74
+ ts.forEachChild(node, (child) => walkForResourceCalls(child, memberKeys, context, diagnostics));
75
+ }
76
+ function checkSiblingsAccess(node, siblingsName, memberKeys, context, diagnostics) {
77
+ if (ts.isPropertyAccessExpression(node)) {
78
+ if (ts.isIdentifier(node.expression) && node.expression.text === siblingsName) {
79
+ const accessedKey = node.name.text;
80
+ if (!memberKeys.has(accessedKey)) {
81
+ const { line, character } = context.sourceFile.getLineAndCharacterOfPosition(node.getStart(context.sourceFile));
82
+ diagnostics.push({
83
+ file: context.filePath,
84
+ line: line + 1,
85
+ column: character + 1,
86
+ ruleId: "EVL007",
87
+ severity: "error",
88
+ message: `Invalid siblings access — "${accessedKey}" is not a member of this composite`,
89
+ });
90
+ }
91
+ }
92
+ }
93
+ ts.forEachChild(node, (child) => checkSiblingsAccess(child, siblingsName, memberKeys, context, diagnostics));
94
+ }
95
+ export const evl007InvalidSiblingsRule = {
96
+ id: "EVL007",
97
+ severity: "error",
98
+ category: "correctness",
99
+ description: "Validates that siblings access in Composite factories references existing member keys",
100
+ check(context) {
101
+ const diagnostics = [];
102
+ checkNode(context.sourceFile, context, diagnostics);
103
+ return diagnostics;
104
+ },
105
+ };
@@ -0,0 +1,158 @@
1
+ import * as ts from "typescript";
2
+ import { getCompositeFactory } from "./composite-scope.js";
3
+ /**
4
+ * EVL009: No extractable constants inside Composite factory
5
+ *
6
+ * Composite factories should only reference props, sibling members, and
7
+ * imported identifiers. Object literals and arrays-of-objects that don't
8
+ * reference any of these are extractable constants that belong in a
9
+ * separate file (e.g. defaults.ts).
10
+ *
11
+ * Triggers on: assumeRolePolicyDocument: { Version: "2012-10-17", Statement: [...] }
12
+ * Triggers on: managedPolicyArns: ["arn:aws:iam::aws:policy/..."]
13
+ * OK: assumeRolePolicyDocument: lambdaTrustPolicy (imported)
14
+ * OK: policies: props.policies
15
+ * OK: role: role.arn
16
+ * OK: action: "lambda:InvokeFunction" (simple string literal — not an object)
17
+ */
18
+ /**
19
+ * Collect all imported identifiers from import declarations in the file.
20
+ */
21
+ function collectImportedNames(sourceFile) {
22
+ const names = new Set();
23
+ for (const stmt of sourceFile.statements) {
24
+ if (!ts.isImportDeclaration(stmt) || !stmt.importClause)
25
+ continue;
26
+ // import foo from "..."
27
+ if (stmt.importClause.name) {
28
+ names.add(stmt.importClause.name.text);
29
+ }
30
+ const bindings = stmt.importClause.namedBindings;
31
+ if (!bindings)
32
+ continue;
33
+ if (ts.isNamespaceImport(bindings)) {
34
+ // import * as ns from "..."
35
+ names.add(bindings.name.text);
36
+ }
37
+ else if (ts.isNamedImports(bindings)) {
38
+ // import { a, b } from "..."
39
+ for (const spec of bindings.elements) {
40
+ names.add(spec.name.text);
41
+ }
42
+ }
43
+ }
44
+ return names;
45
+ }
46
+ /**
47
+ * Check whether any leaf node in the subtree references:
48
+ * - The props parameter identifier
49
+ * - An imported identifier (direct import or namespace import)
50
+ * - A local variable declared in the composite factory body
51
+ */
52
+ function referencesPropsOrMembers(node, propsName, localNames, importedNames) {
53
+ if (ts.isIdentifier(node)) {
54
+ // Direct props reference
55
+ if (node.text === propsName)
56
+ return true;
57
+ // Local variable reference (sibling member)
58
+ if (localNames.has(node.text))
59
+ return true;
60
+ // Imported identifier (direct or namespace)
61
+ if (importedNames.has(node.text))
62
+ return true;
63
+ }
64
+ let found = false;
65
+ ts.forEachChild(node, (child) => {
66
+ if (!found && referencesPropsOrMembers(child, propsName, localNames, importedNames)) {
67
+ found = true;
68
+ }
69
+ });
70
+ return found;
71
+ }
72
+ /**
73
+ * Check if a value is an extractable constant:
74
+ * - Object literal (with any nesting)
75
+ * - Array literal containing object literals
76
+ * Simple primitives (string, number, boolean) are allowed inline.
77
+ */
78
+ function isExtractableShape(node) {
79
+ if (ts.isObjectLiteralExpression(node))
80
+ return true;
81
+ if (ts.isArrayLiteralExpression(node)) {
82
+ return node.elements.some((el) => ts.isObjectLiteralExpression(el) || ts.isArrayLiteralExpression(el));
83
+ }
84
+ return false;
85
+ }
86
+ function checkComposite(call, context, diagnostics, importedNames) {
87
+ const factory = call.arguments[0];
88
+ if (!factory || (!ts.isArrowFunction(factory) && !ts.isFunctionExpression(factory)))
89
+ return;
90
+ // Get props parameter name
91
+ const propsParam = factory.parameters[0];
92
+ const propsName = propsParam && ts.isIdentifier(propsParam.name) ? propsParam.name.text : "";
93
+ // Collect local variable names declared in the factory body
94
+ const localNames = new Set();
95
+ const body = factory.body;
96
+ if (ts.isBlock(body)) {
97
+ for (const stmt of body.statements) {
98
+ if (ts.isVariableStatement(stmt)) {
99
+ for (const decl of stmt.declarationList.declarations) {
100
+ if (ts.isIdentifier(decl.name)) {
101
+ localNames.add(decl.name.text);
102
+ }
103
+ }
104
+ }
105
+ }
106
+ }
107
+ // Walk all NewExpression nodes inside the factory body
108
+ checkForConstants(body, context, diagnostics, propsName, localNames, importedNames);
109
+ }
110
+ function checkForConstants(node, context, diagnostics, propsName, localNames, importedNames) {
111
+ if (ts.isNewExpression(node) && node.arguments && node.arguments.length > 0) {
112
+ const firstArg = node.arguments[0];
113
+ if (ts.isObjectLiteralExpression(firstArg)) {
114
+ for (const prop of firstArg.properties) {
115
+ if (!ts.isPropertyAssignment(prop))
116
+ continue;
117
+ const value = prop.initializer;
118
+ if (isExtractableShape(value) && !referencesPropsOrMembers(value, propsName, localNames, importedNames)) {
119
+ const propName = ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name)
120
+ ? (ts.isIdentifier(prop.name) ? prop.name.text : prop.name.text)
121
+ : "<computed>";
122
+ const { line, character } = context.sourceFile.getLineAndCharacterOfPosition(value.getStart(context.sourceFile));
123
+ diagnostics.push({
124
+ file: context.filePath,
125
+ line: line + 1,
126
+ column: character + 1,
127
+ ruleId: "EVL009",
128
+ severity: "warning",
129
+ message: `Extractable constant in Composite factory property "${propName}" — move to a separate file and import directly`,
130
+ });
131
+ }
132
+ }
133
+ }
134
+ }
135
+ ts.forEachChild(node, (child) => checkForConstants(child, context, diagnostics, propsName, localNames, importedNames));
136
+ }
137
+ function checkNode(node, context, diagnostics, importedNames) {
138
+ if (ts.isCallExpression(node)) {
139
+ const factory = getCompositeFactory(node);
140
+ if (factory) {
141
+ checkComposite(node, context, diagnostics, importedNames);
142
+ return; // Don't recurse further — checkComposite handles it
143
+ }
144
+ }
145
+ ts.forEachChild(node, (child) => checkNode(child, context, diagnostics, importedNames));
146
+ }
147
+ export const evl009CompositeNoConstantRule = {
148
+ id: "EVL009",
149
+ severity: "warning",
150
+ category: "style",
151
+ description: "Flags extractable constants inside Composite factories — move to a separate file",
152
+ check(context) {
153
+ const diagnostics = [];
154
+ const importedNames = collectImportedNames(context.sourceFile);
155
+ checkNode(context.sourceFile, context, diagnostics, importedNames);
156
+ return diagnostics;
157
+ },
158
+ };
@@ -0,0 +1,59 @@
1
+ import * as ts from "typescript";
2
+ import { isInsideCompositeFactory } from "./composite-scope.js";
3
+ /**
4
+ * EVL010: No data transformation inside Composite factory
5
+ *
6
+ * Composite factories should only compose resources from props, not transform data.
7
+ * Data transformation (map, filter, reduce, etc.) should happen before passing props.
8
+ *
9
+ * Triggers on: props.items.map(x => new Thing(x))
10
+ * Triggers on: props.list.filter(Boolean)
11
+ * Triggers on: Object.keys(props.env).reduce(...)
12
+ * OK: props.policies (pass-through)
13
+ * OK: [a, b] (array literal)
14
+ */
15
+ const TRANSFORM_METHODS = new Set([
16
+ "map",
17
+ "filter",
18
+ "reduce",
19
+ "flatMap",
20
+ "forEach",
21
+ "find",
22
+ "some",
23
+ "every",
24
+ "sort",
25
+ "reverse",
26
+ "splice",
27
+ "slice",
28
+ "concat",
29
+ ]);
30
+ function checkNode(node, context, diagnostics) {
31
+ if (ts.isCallExpression(node) &&
32
+ ts.isPropertyAccessExpression(node.expression) &&
33
+ isInsideCompositeFactory(node)) {
34
+ const methodName = node.expression.name.text;
35
+ if (TRANSFORM_METHODS.has(methodName)) {
36
+ const { line, character } = context.sourceFile.getLineAndCharacterOfPosition(node.expression.name.getStart(context.sourceFile));
37
+ diagnostics.push({
38
+ file: context.filePath,
39
+ line: line + 1,
40
+ column: character + 1,
41
+ ruleId: "EVL010",
42
+ severity: "warning",
43
+ message: `Data transformation .${methodName}() inside Composite factory — transform data before passing it as props`,
44
+ });
45
+ }
46
+ }
47
+ ts.forEachChild(node, (child) => checkNode(child, context, diagnostics));
48
+ }
49
+ export const evl010CompositeNoTransformRule = {
50
+ id: "EVL010",
51
+ severity: "warning",
52
+ category: "style",
53
+ description: "Flags data transformations (map, filter, reduce) inside Composite factories",
54
+ check(context) {
55
+ const diagnostics = [];
56
+ checkNode(context.sourceFile, context, diagnostics);
57
+ return diagnostics;
58
+ },
59
+ };
@@ -0,0 +1,106 @@
1
+ import * as ts from "typescript";
2
+ /**
3
+ * EVL011: a symbolic reference inside a plain template literal
4
+ *
5
+ * `` `${bucket.arn}-suffix` `` cannot be evaluated to a string. A resource
6
+ * attribute stands for a value the build resolves later, so there is nothing
7
+ * to interpolate yet, and JavaScript's answer — `"[object Object]"` — is
8
+ * wrong on both of chant's paths.
9
+ *
10
+ * This rule is the friendly half of #2349. The unfriendly half already landed:
11
+ * `fold()` refuses the span with a located error and `AttrRef.toString` throws,
12
+ * so the program fails either way. What a rule adds is finding it at lint time
13
+ * with the remedy attached, rather than at build time with a stack.
14
+ *
15
+ * ## Why it is a heuristic, and why that is acceptable here
16
+ *
17
+ * Lint sees syntax, not values. `foo.bar` inside a template is a resource
18
+ * attribute only if `foo` is a resource, which is a fact `fold()` has and this
19
+ * rule does not — so the check is: a property access whose object is a
20
+ * plain identifier bound in this file by `new`. That is the shape #2349 was
21
+ * reported against and the shape a lexicon's own docs show.
22
+ *
23
+ * It therefore misses a reference reached some other way (through a parameter,
24
+ * an array, a helper's return) and does not flag an access on a plain object.
25
+ * Missing a case costs nothing, because `fold()` still refuses it; flagging a
26
+ * plain object would be a false positive on code that works, which is the
27
+ * error worth avoiding. This is the same asymmetry `../../fold/subset.ts`
28
+ * documents for EVL generally, pointed the other way: there EVL may be
29
+ * stricter than fold, here it is deliberately looser.
30
+ */
31
+ /** Identifiers bound by `const x = new T(...)` at any depth in this file. */
32
+ function resourceBindings(sourceFile) {
33
+ const names = new Set();
34
+ const visit = (node) => {
35
+ if (ts.isVariableDeclaration(node) &&
36
+ ts.isIdentifier(node.name) &&
37
+ node.initializer &&
38
+ ts.isNewExpression(node.initializer)) {
39
+ names.add(node.name.text);
40
+ }
41
+ ts.forEachChild(node, visit);
42
+ };
43
+ visit(sourceFile);
44
+ return names;
45
+ }
46
+ /**
47
+ * What this span is, if it is one of the shapes that has no string form — or
48
+ * `undefined` for an ordinary expression.
49
+ *
50
+ * The three kinds a syntactic rule can see, matching what `fold()` refuses
51
+ * (#2397): a resource attribute on an identifier bound by `new` in this file,
52
+ * a nested construction used as a value, and a composite `.step`.
53
+ */
54
+ function symbolicSpan(expr, bound) {
55
+ if (ts.isNewExpression(expr)) {
56
+ const name = ts.isIdentifier(expr.expression) ? expr.expression.text : "…";
57
+ return `a nested \`new ${name}\``;
58
+ }
59
+ if (ts.isPropertyAccessExpression(expr)) {
60
+ // `Checkout({}).step` — a call's `.step`, whatever the callee is: the
61
+ // idiom is the shape, and a rule cannot know which callees are composites.
62
+ if (expr.name.text === "step" && ts.isCallExpression(expr.expression)) {
63
+ const callee = ts.isIdentifier(expr.expression.expression) ? expr.expression.expression.text : "…";
64
+ return `the composite step \`${callee}(…).step\``;
65
+ }
66
+ if (ts.isIdentifier(expr.expression) && bound.has(expr.expression.text)) {
67
+ return `\`${expr.expression.text}.${expr.name.text}\` is a resource attribute and`;
68
+ }
69
+ }
70
+ return undefined;
71
+ }
72
+ function checkNode(node, context, bound, diagnostics) {
73
+ // Untagged only: a tagged template is the documented remedy, and its
74
+ // interior handles envelopes.
75
+ if (ts.isTemplateExpression(node) && !ts.isTaggedTemplateExpression(node.parent)) {
76
+ for (const span of node.templateSpans) {
77
+ const expr = span.expression;
78
+ const what = symbolicSpan(expr, bound);
79
+ if (what) {
80
+ const { line, character } = context.sourceFile.getLineAndCharacterOfPosition(expr.getStart(context.sourceFile));
81
+ diagnostics.push({
82
+ file: context.filePath,
83
+ line: line + 1,
84
+ column: character + 1,
85
+ ruleId: "EVL011",
86
+ severity: "error",
87
+ message: `${what} has no string form until the build resolves it — a plain template would ` +
88
+ "stringify it as \"[object Object]\". Use the lexicon's own intrinsic, whose interior " +
89
+ "handles these (`Sub`${…}`` for CloudFormation), or move it out of the template.",
90
+ });
91
+ }
92
+ }
93
+ }
94
+ ts.forEachChild(node, (child) => checkNode(child, context, bound, diagnostics));
95
+ }
96
+ export const evl011SymbolicInTemplateRule = {
97
+ id: "EVL011",
98
+ severity: "error",
99
+ category: "correctness",
100
+ description: "A resource attribute cannot be interpolated into a plain template literal",
101
+ check(context) {
102
+ const diagnostics = [];
103
+ checkNode(context.sourceFile, context, resourceBindings(context.sourceFile), diagnostics);
104
+ return diagnostics;
105
+ },
106
+ };
@@ -0,0 +1,115 @@
1
+ import * as ts from "typescript";
2
+ function isDeclarableClass(node, sourceFile) {
3
+ // Check if it's a class with Declarable interface implementation
4
+ if (ts.isClassDeclaration(node) && node.heritageClauses) {
5
+ for (const clause of node.heritageClauses) {
6
+ for (const type of clause.types) {
7
+ const typeName = type.expression.getText(sourceFile);
8
+ if (typeName === "Declarable") {
9
+ return true;
10
+ }
11
+ }
12
+ }
13
+ }
14
+ return false;
15
+ }
16
+ function collectExportInfo(sourceFile) {
17
+ const exportedNames = new Set();
18
+ const localVariableNames = new Set();
19
+ function visit(node) {
20
+ // Handle exported variable declarations
21
+ if (ts.isVariableStatement(node)) {
22
+ const hasExportModifier = node.modifiers?.some(m => m.kind === ts.SyntaxKind.ExportKeyword);
23
+ for (const declaration of node.declarationList.declarations) {
24
+ if (ts.isIdentifier(declaration.name)) {
25
+ const name = declaration.name.text;
26
+ if (hasExportModifier) {
27
+ exportedNames.add(name);
28
+ }
29
+ else {
30
+ localVariableNames.add(name);
31
+ }
32
+ }
33
+ }
34
+ }
35
+ // Handle export assignments: export = something
36
+ if (ts.isExportAssignment(node)) {
37
+ if (ts.isIdentifier(node.expression)) {
38
+ exportedNames.add(node.expression.text);
39
+ }
40
+ }
41
+ ts.forEachChild(node, visit);
42
+ }
43
+ visit(sourceFile);
44
+ return { exportedNames, localVariableNames };
45
+ }
46
+ function isDeclarableNewExpression(node, context) {
47
+ // Check if the class being instantiated implements Declarable
48
+ // We look for the class declaration in the source file or imports
49
+ const className = node.expression.getText(context.sourceFile);
50
+ // Check local class declarations
51
+ let isDeclarable = false;
52
+ function checkClassDeclarations(n) {
53
+ if (ts.isClassDeclaration(n) && n.name?.text === className) {
54
+ if (isDeclarableClass(n, context.sourceFile)) {
55
+ isDeclarable = true;
56
+ }
57
+ }
58
+ ts.forEachChild(n, checkClassDeclarations);
59
+ }
60
+ checkClassDeclarations(context.sourceFile);
61
+ // For imported classes, we use a heuristic: check if the class name is capitalized
62
+ // and follows common declarable patterns (like Bucket, Parameter, etc.)
63
+ if (!isDeclarable && /^[A-Z]/.test(className)) {
64
+ // Additional check: see if it's imported from a declarable-looking module
65
+ // For now, we'll be conservative and only flag classes that are clearly local
66
+ return isDeclarable;
67
+ }
68
+ return isDeclarable;
69
+ }
70
+ function checkNode(node, context, exportInfo, diagnostics) {
71
+ // Check for new expressions that are not exported
72
+ if (ts.isNewExpression(node)) {
73
+ // Skip if this is part of a variable initializer that's exported
74
+ let parent = node.parent;
75
+ let isPartOfExportedVariable = false;
76
+ let variableName;
77
+ while (parent) {
78
+ if (ts.isVariableDeclaration(parent) && ts.isIdentifier(parent.name)) {
79
+ variableName = parent.name.text;
80
+ if (exportInfo.exportedNames.has(variableName)) {
81
+ isPartOfExportedVariable = true;
82
+ break;
83
+ }
84
+ }
85
+ parent = parent.parent;
86
+ }
87
+ if (!isPartOfExportedVariable && isDeclarableNewExpression(node, context)) {
88
+ const { line, character } = context.sourceFile.getLineAndCharacterOfPosition(node.getStart(context.sourceFile));
89
+ const className = node.expression.getText(context.sourceFile);
90
+ const label = variableName ? `'${variableName}' (${className})` : `'${className}'`;
91
+ diagnostics.push({
92
+ file: context.filePath,
93
+ line: line + 1,
94
+ column: character + 1,
95
+ ruleId: "COR008",
96
+ severity: "warning",
97
+ message: `Declarable ${label} is not exported — add 'export' so chant can discover it during synthesis.`,
98
+ });
99
+ }
100
+ }
101
+ // Recursively check child nodes
102
+ ts.forEachChild(node, child => checkNode(child, context, exportInfo, diagnostics));
103
+ }
104
+ export const exportRequiredRule = {
105
+ id: "COR008",
106
+ severity: "warning",
107
+ category: "correctness",
108
+ description: "Detects declarable instances that are not exported for chant discovery",
109
+ check(context) {
110
+ const diagnostics = [];
111
+ const exportInfo = collectExportInfo(context.sourceFile);
112
+ checkNode(context.sourceFile, context, exportInfo, diagnostics);
113
+ return diagnostics;
114
+ },
115
+ };
@@ -0,0 +1,88 @@
1
+ import * as ts from "typescript";
2
+ import { isPropertyKindNew } from "./property-kind.js";
3
+ const DECLARABLE_LIMIT = 8;
4
+ const BUILTIN_CONSTRUCTORS = new Set([
5
+ "Array",
6
+ "ArrayBuffer",
7
+ "BigInt64Array",
8
+ "BigUint64Array",
9
+ "Boolean",
10
+ "DataView",
11
+ "Date",
12
+ "Error",
13
+ "EvalError",
14
+ "Float32Array",
15
+ "Float64Array",
16
+ "Int8Array",
17
+ "Int16Array",
18
+ "Int32Array",
19
+ "Map",
20
+ "Number",
21
+ "Object",
22
+ "Promise",
23
+ "Proxy",
24
+ "RangeError",
25
+ "ReferenceError",
26
+ "RegExp",
27
+ "Set",
28
+ "SharedArrayBuffer",
29
+ "String",
30
+ "SyntaxError",
31
+ "TypeError",
32
+ "URIError",
33
+ "URL",
34
+ "URLSearchParams",
35
+ "Uint8Array",
36
+ "Uint8ClampedArray",
37
+ "Uint16Array",
38
+ "Uint32Array",
39
+ "WeakMap",
40
+ "WeakRef",
41
+ "WeakSet",
42
+ ]);
43
+ function isDeclarableConstructor(node) {
44
+ const expr = node.expression;
45
+ if (ts.isIdentifier(expr)) {
46
+ const name = expr.text;
47
+ return (name.length > 0 &&
48
+ name[0] >= "A" &&
49
+ name[0] <= "Z" &&
50
+ !BUILTIN_CONSTRUCTORS.has(name));
51
+ }
52
+ return false;
53
+ }
54
+ /**
55
+ * Collect the declarable `new` expressions this rule counts. Property-kind
56
+ * declarables (chant #2957) are left out: a dashboard with twenty panels,
57
+ * queries and variables is one resource, not twenty-one.
58
+ */
59
+ function collectDeclarableNewExpressions(node, context, results) {
60
+ if (ts.isNewExpression(node) && isDeclarableConstructor(node) && !isPropertyKindNew(node, context)) {
61
+ results.push(node);
62
+ }
63
+ ts.forEachChild(node, (child) => collectDeclarableNewExpressions(child, context, results));
64
+ }
65
+ export const fileDeclarableLimitRule = {
66
+ id: "COR009",
67
+ severity: "warning",
68
+ category: "style",
69
+ description: "Limits the number of resource Declarable instances per file to encourage splitting by concern; property-kind declarables are not counted",
70
+ check(context, options) {
71
+ const limit = (typeof options?.max === "number" ? options.max : null) ?? DECLARABLE_LIMIT;
72
+ const instances = [];
73
+ collectDeclarableNewExpressions(context.sourceFile, context, instances);
74
+ if (instances.length > limit) {
75
+ return [
76
+ {
77
+ file: context.filePath,
78
+ line: 1,
79
+ column: 1,
80
+ ruleId: "COR009",
81
+ severity: "warning",
82
+ message: `File contains ${instances.length} Declarable instances (limit: ${limit}) — consider splitting into separate files by concern`,
83
+ },
84
+ ];
85
+ }
86
+ return [];
87
+ },
88
+ };