@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,17 @@
1
+ /**
2
+ * The seam between neutral agent-config discovery and a lexicon's vocabulary.
3
+ *
4
+ * `discover.ts` deliberately knows nothing about chant resources — it reads
5
+ * five harnesses' config dialects and stops. Turning an {@link AgentConfigSite}
6
+ * into resources is a statement about a *target* (fountain's `Agent` and
7
+ * `Environment`, today), and that judgement belongs to the lexicon that owns
8
+ * those types, exactly as `templateParser()` puts CloudFormation's JSON
9
+ * vocabulary in the aws lexicon rather than in core.
10
+ *
11
+ * So a lexicon that can express local agent configuration implements
12
+ * {@link AgentConfigImporter} and returns it from
13
+ * `LexiconPlugin.agentConfigImporter()`. `chant import --agents` loads the
14
+ * plugin, hands it the scan, and pipes the resulting IR through the same
15
+ * `templateGenerator()` every other import path uses.
16
+ */
17
+ export {};
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Agent-configuration discovery and checks.
3
+ *
4
+ * Finds the agent configs on a machine (`discover.ts`), judges them
5
+ * (`checks.ts`), and normalizes both onto one vendor-neutral model
6
+ * (`types.ts`). The two consumers are `chant audit --agents`, which reports on
7
+ * what it finds, and `chant import --agents`, which re-expresses it as chant
8
+ * code via a lexicon's IR mapper.
9
+ */
10
+ export { AGENT_RUNTIMES, AGENT_SCOPES } from "./types.js";
11
+ export { scanAgentConfigs, normalizeMcpServers, frontmatter, systemSettingsPaths, unscannedProjectCount } from "./discover.js";
12
+ export { checkAgentConfigs, AGENT_RULE_IDS } from "./checks.js";
@@ -0,0 +1,19 @@
1
+ /**
2
+ * The normalized model for an agent configuration found on a machine.
3
+ *
4
+ * Five harnesses (claude, codex, gemini, opencode, cursor) each spell the same
5
+ * four ideas differently — standing instructions, tool servers, reusable
6
+ * skills, and ambient settings. `discover.ts` reads each harness's own dialect
7
+ * and lands here; everything downstream (`checks.ts`, the report, the fountain
8
+ * IR mapping) reads only this shape and never a vendor file format again.
9
+ *
10
+ * The `AgentConfigSite` boundary is deliberately "one config that governs one
11
+ * root, for one runtime" rather than "one file". A single Claude Code site is
12
+ * assembled from `CLAUDE.md` + `settings.json` + `settings.local.json` +
13
+ * `mcp.json` + `~/.claude.json` + a `skills/` tree — six files that are only
14
+ * meaningful together, and that the agent itself experiences as one merged
15
+ * configuration. `sources` keeps the receipts so a finding can point at the
16
+ * actual file the reader has to edit.
17
+ */
18
+ export const AGENT_SCOPES = ["system", "user", "project"];
19
+ export const AGENT_RUNTIMES = ["claude", "codex", "gemini", "opencode", "cursor"];
package/dist/apply.js ADDED
@@ -0,0 +1,151 @@
1
+ /**
2
+ * The apply contract (#1446) — what a lexicon's applier is allowed to mean.
3
+ *
4
+ * The peer of `./observation.ts`, and it exists for the same reason on the other
5
+ * side of the lifecycle.
6
+ *
7
+ * The read path had two ways to return nothing for a declared entity and no way
8
+ * to tell them apart — "the provider says it is absent" versus "I never looked"
9
+ * — and the second was classifying as `create`. #1089 made that a tri-state and
10
+ * #1201 built a conformance suite so a lexicon could not pass by returning a
11
+ * well-shaped result that still proposed a create.
12
+ *
13
+ * The write path had the identical hole. An applier could skip a resource and
14
+ * report nothing:
15
+ *
16
+ * const mapper = MAPPERS[r.kind];
17
+ * if (!mapper) {
18
+ * console.log(`skip: no mapper for kind ${r.kind}`);
19
+ * continue; // never appears in `applied`, or anywhere
20
+ * }
21
+ *
22
+ * A caller receiving `{ applied: [...] }` could not distinguish a complete apply
23
+ * from one that dropped half the manifest, and `ApplyOp` had nothing to gate on.
24
+ * A `console.log` on stdout is not a signal in a result, the same way a warn on
25
+ * stderr was not a signal in a change set (#1447 was the concrete bug; #1457
26
+ * found the same shape in two more appliers).
27
+ *
28
+ * The contract is a tri-state, per resource in the plan:
29
+ *
30
+ * - **APPLIED** — the provider was called and converged. Carries the action
31
+ * (`created` / `updated` / `unchanged`) and the physical id when resolved.
32
+ * - **PRUNED** — owned, no longer declared, deleted.
33
+ * - **NOT-ATTEMPTED** — carrying a total {@link NotAttemptedReason}. Never
34
+ * silent, never inferred from absence.
35
+ *
36
+ * The three are **disjoint and total**: every resource the applier was given
37
+ * appears in exactly one. That is the assertion the conformance suite exists to
38
+ * make, and the one the gcp skip failed.
39
+ *
40
+ * Compatibility: an applier may keep returning its own shape. The envelope is
41
+ * discriminated by its literal `apply: "v1"` field, the same mechanism
42
+ * `observation: "v1"` uses, so an un-migrated applier normalizes to "everything
43
+ * I was handed, I attempted" and nothing breaks. Reporting NOT-ATTEMPTED
44
+ * requires the envelope — which is the point: you cannot claim the guarantee
45
+ * without adopting the shape that can express its absence.
46
+ */
47
+ /** Every legal {@link NotAttemptedReason}, for validation and conformance checks. */
48
+ export const NOT_ATTEMPTED_REASONS = [
49
+ "unsupported-kind",
50
+ "no-credentials",
51
+ "no-binding",
52
+ "dependency-failed",
53
+ "filtered",
54
+ "not-prunable",
55
+ ];
56
+ /** True when `value` is a legal {@link NotAttemptedReason}. */
57
+ export function isNotAttemptedReason(value) {
58
+ return typeof value === "string" && NOT_ATTEMPTED_REASONS.includes(value);
59
+ }
60
+ /** Every legal {@link AppliedAction}. */
61
+ export const APPLIED_ACTIONS = ["created", "updated", "unchanged"];
62
+ /** True when `value` is the versioned {@link ApplyResult} envelope. */
63
+ export function isApplyResult(value) {
64
+ return typeof value === "object" && value !== null && value.apply === "v1";
65
+ }
66
+ /**
67
+ * Build an {@link ApplyResult}. Appliers use this rather than writing the
68
+ * discriminant by hand.
69
+ */
70
+ export function applyResult(applied, pruned, notAttempted) {
71
+ return {
72
+ apply: "v1",
73
+ applied,
74
+ ...(pruned && pruned.length > 0 ? { pruned } : {}),
75
+ ...(notAttempted && notAttempted.length > 0 ? { notAttempted } : {}),
76
+ };
77
+ }
78
+ /**
79
+ * Normalize an applier's return value.
80
+ *
81
+ * A non-envelope value normalizes to "everything I was handed, I attempted" —
82
+ * an empty `notAttempted`. That is the compatibility path, and it is also
83
+ * exactly the claim an un-migrated applier is implicitly making, so nothing is
84
+ * invented on its behalf.
85
+ *
86
+ * `undefined` normalizes to three empty arrays. An applier that means "I applied
87
+ * nothing because I could not" must say so with {@link notAttemptedAll} rather
88
+ * than returning nothing, for the same reason `unobservedAll` exists on the read
89
+ * side.
90
+ */
91
+ export function normalizeApply(value) {
92
+ if (!value)
93
+ return { applied: [], pruned: [], notAttempted: [] };
94
+ return {
95
+ applied: value.applied ?? [],
96
+ pruned: value.pruned ?? [],
97
+ notAttempted: value.notAttempted ?? [],
98
+ };
99
+ }
100
+ /**
101
+ * Mark every named resource NOT-ATTEMPTED with one reason — the whole-run
102
+ * failure case (no credentials, no binding, the transport never came up). Core
103
+ * applies this when an applier throws, so a thrown apply degrades to an honest
104
+ * "did not attempt" per resource instead of an empty result that reads as a
105
+ * successful no-op.
106
+ */
107
+ export function notAttemptedAll(refs, reason, detail) {
108
+ return [...refs].map((ref) => ({ ...ref, reason, ...(detail ? { detail } : {}) }));
109
+ }
110
+ /** A resource's identity within one apply, for disjointness checks. */
111
+ export function applyRefKey(ref) {
112
+ return `${ref.kind}/${ref.name}`;
113
+ }
114
+ /**
115
+ * Every resource that appears in more than one bucket. Empty is the contract;
116
+ * a non-empty result means the applier both wrote and skipped the same
117
+ * resource, which is not a state that can be true.
118
+ *
119
+ * Pruned is checked against the other two but not against itself: an applier
120
+ * may legitimately apply a resource and prune a different, same-named one only
121
+ * if their kinds differ, and {@link applyRefKey} already separates those.
122
+ */
123
+ export function overlappingRefs(result) {
124
+ const seen = new Map();
125
+ const note = (bucket, refs) => {
126
+ for (const ref of refs) {
127
+ const key = applyRefKey(ref);
128
+ (seen.get(key) ?? seen.set(key, new Set()).get(key)).add(bucket);
129
+ }
130
+ };
131
+ note("applied", result.applied);
132
+ note("pruned", result.pruned);
133
+ note("notAttempted", result.notAttempted);
134
+ return [...seen.entries()].filter(([, buckets]) => buckets.size > 1).map(([key]) => key);
135
+ }
136
+ /**
137
+ * Resources in `plan` that the result accounts for in no bucket — the silent
138
+ * drop this contract exists to make impossible.
139
+ *
140
+ * The conformance suite's central assertion. Before #1447, gcp's applier failed
141
+ * exactly this: an unmapped kind was in the plan, in no bucket, and the result
142
+ * looked complete.
143
+ */
144
+ export function unaccountedRefs(plan, result) {
145
+ const accounted = new Set();
146
+ for (const bucket of [result.applied, result.pruned, result.notAttempted]) {
147
+ for (const ref of bucket)
148
+ accounted.add(applyRefKey(ref));
149
+ }
150
+ return [...plan].map(applyRefKey).filter((key) => !accounted.has(key));
151
+ }
@@ -0,0 +1,70 @@
1
+ var _a;
2
+ import { INTRINSIC_MARKER } from "./intrinsic.js";
3
+ /**
4
+ * Reference to an attribute of a parent entity.
5
+ * Lexicon serializers read `getLogicalName()` and `attribute` to produce
6
+ * their own output format (e.g. CloudFormation `Fn::GetAttr`).
7
+ */
8
+ export class AttrRef {
9
+ constructor(parent, attribute) {
10
+ this[_a] = true;
11
+ this.parent = new WeakRef(parent);
12
+ this.attribute = attribute;
13
+ }
14
+ /**
15
+ * Set the logical name for this attribute reference
16
+ * @internal
17
+ */
18
+ _setLogicalName(name) {
19
+ this.logicalName = name;
20
+ }
21
+ /**
22
+ * Get the logical name assigned to this attribute reference.
23
+ */
24
+ getLogicalName() {
25
+ return this.logicalName;
26
+ }
27
+ /**
28
+ * Refuse to become a string (#2349).
29
+ *
30
+ * An `AttrRef` stands for a value the build resolves later, so it has no
31
+ * string form here. Without this, `` `${bucket.arn}-suffix` `` produced
32
+ * `"[object Object]-suffix"` and shipped it — and the fold path produced
33
+ * exactly the same wrong string from the `{__attrRef}` envelope, so the two
34
+ * paths agreed and the differential harness reported nothing. Agreement on a
35
+ * wrong value is the failure this class of check exists to catch, which is
36
+ * why this throws rather than returning something more helpful-looking.
37
+ *
38
+ * `toJSON` below is the honest serialization and is untouched: a serializer
39
+ * that wants the envelope asks for it by name.
40
+ */
41
+ toString() {
42
+ const where = this.logicalName ? `${this.logicalName}.${this.attribute}` : `.${this.attribute}`;
43
+ throw new Error(`A resource attribute reference (${where}) has no string form: it stands for a value the build ` +
44
+ "resolves later, and interpolating it into a plain template literal would produce " +
45
+ '"[object Object]". Use the lexicon\'s own intrinsic, whose interior handles references — ' +
46
+ "`Sub`${…}`` for CloudFormation — or move the reference out of the template.");
47
+ }
48
+ /**
49
+ * The same refusal for `+` and for anything else that coerces, so
50
+ * `"prefix" + bucket.arn` fails where `` `${bucket.arn}` `` fails rather
51
+ * than taking a different path to the same wrong string.
52
+ */
53
+ [(_a = INTRINSIC_MARKER, Symbol.toPrimitive)]() {
54
+ return this.toString();
55
+ }
56
+ /**
57
+ * Serialize to a generic envelope. Lexicon-specific serializers should
58
+ * read `getLogicalName()` and `attribute` directly instead of relying
59
+ * on this format.
60
+ * @throws {Error} If logical name has not been set
61
+ */
62
+ toJSON() {
63
+ if (!this.logicalName) {
64
+ throw new Error(`Cannot serialize AttrRef for attribute "${this.attribute}": logical name not set`);
65
+ }
66
+ return {
67
+ __attrRef: { entity: this.logicalName, attribute: this.attribute },
68
+ };
69
+ }
70
+ }
@@ -0,0 +1,350 @@
1
+ /**
2
+ * Rule catalog — classifies every CI post-synth check the auditor can surface.
3
+ *
4
+ * Two axes drive how a finding is presented:
5
+ * - `tier`: `merge-worthy` (a security vuln/supply-chain exposure or a hard
6
+ * correctness bug — worth opening a PR to the target) vs `report-only`
7
+ * (hygiene/style/perf/deprecation — shown in the report, never a PR title).
8
+ * - `fixKind`: `deterministic` (a safe mechanical fix can be auto-applied or
9
+ * diffed) vs `guidance` (needs human/LLM judgment — emit remediation text
10
+ * only; never auto-applied; never run by the hosted service).
11
+ *
12
+ * Each provider's rule metadata lives in its own lexicon's `auditCatalog()`
13
+ * (#687); this module owns the shared machinery — the `RuleMeta` shape, the
14
+ * `auditRule()` constructor lexicons build entries with, the shared authority
15
+ * citations, and `resolveAuditCatalog()` which merges the lexicons' catalogs
16
+ * over the small static core map (the cross-cutting COR/EXT ids). A drift-guard
17
+ * test asserts the aggregate stays in sync with the lexicons' post-synth checks.
18
+ */
19
+ import { applyLineage as attachLineage } from "./prior-art.js";
20
+ import { coreAuditLineage } from "./lineage.js";
21
+ export { PRIOR_ART, applyLineage, lineageLabel } from "./prior-art.js";
22
+ // ── Authority references ─────────────────────────────────────────────
23
+ export const SCORECARD_TOKEN = {
24
+ name: "OSSF Scorecard — Token-Permissions",
25
+ url: "https://github.com/ossf/scorecard/blob/main/docs/checks.md#token-permissions",
26
+ };
27
+ export const GH_TOKEN = {
28
+ name: "GitHub — Automatic token authentication",
29
+ url: "https://docs.github.com/en/actions/security-for-github-actions/security-guides/automatic-token-authentication",
30
+ };
31
+ export const SCORECARD_PINNED = {
32
+ name: "OSSF Scorecard — Pinned-Dependencies",
33
+ url: "https://github.com/ossf/scorecard/blob/main/docs/checks.md#pinned-dependencies",
34
+ };
35
+ export const GH_THIRD_PARTY = {
36
+ name: "GitHub — Using third-party actions",
37
+ url: "https://docs.github.com/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions#using-third-party-actions",
38
+ };
39
+ export const GH_INJECTION = {
40
+ name: "GitHub — Understanding the risk of script injections",
41
+ url: "https://docs.github.com/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions#understanding-the-risk-of-script-injections",
42
+ };
43
+ export const GH_PWN = {
44
+ name: "GitHub Security Lab — Preventing pwn requests",
45
+ url: "https://securitylab.github.com/resources/github-actions-preventing-pwn-requests/",
46
+ };
47
+ export const GH_SECRETS = {
48
+ name: "GitHub — Using secrets in GitHub Actions",
49
+ url: "https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions",
50
+ };
51
+ export const GH_OIDC = {
52
+ name: "GitHub — Security hardening with OpenID Connect",
53
+ url: "https://docs.github.com/en/actions/concepts/security/openid-connect",
54
+ };
55
+ export const K8S_PSS = {
56
+ name: "Kubernetes — Pod Security Standards",
57
+ url: "https://kubernetes.io/docs/concepts/security/pod-security-standards/",
58
+ };
59
+ export const K8S_SECRETS = {
60
+ name: "Kubernetes — Good practices for Secrets",
61
+ url: "https://kubernetes.io/docs/concepts/security/secrets-good-practices/",
62
+ };
63
+ export const GH_SECRET_SCANNING = {
64
+ name: "GitHub — About secret scanning",
65
+ url: "https://docs.github.com/en/code-security/secret-scanning/introduction/about-secret-scanning",
66
+ };
67
+ export const SCORECARD_VULN = {
68
+ name: "OSSF Scorecard — Vulnerabilities",
69
+ url: "https://github.com/ossf/scorecard/blob/main/docs/checks.md#vulnerabilities",
70
+ };
71
+ export const CF_WORKERS_DEV = {
72
+ name: "Cloudflare Workers — workers.dev",
73
+ url: "https://developers.cloudflare.com/workers/configuration/routing/workers-dev/",
74
+ };
75
+ export const CF_SECRETS = {
76
+ name: "Cloudflare Workers — Secrets",
77
+ url: "https://developers.cloudflare.com/workers/configuration/secrets/",
78
+ };
79
+ export const CF_ROUTES = {
80
+ name: "Cloudflare Workers — Routes",
81
+ url: "https://developers.cloudflare.com/workers/configuration/routing/routes/",
82
+ };
83
+ export const CF_ENVIRONMENTS = {
84
+ name: "Cloudflare Workers — Wrangler environments",
85
+ url: "https://developers.cloudflare.com/workers/wrangler/configuration/#environments",
86
+ };
87
+ export const CF_STATIC_ASSETS = {
88
+ name: "Cloudflare Workers — Static assets",
89
+ url: "https://developers.cloudflare.com/workers/static-assets/",
90
+ };
91
+ export const MOZILLA_TLS = {
92
+ name: "Mozilla — Server Side TLS",
93
+ url: "https://wiki.mozilla.org/Security/Server_Side_TLS",
94
+ };
95
+ export const CWE_DIR_LISTING = {
96
+ name: "CWE-548 — Exposure of Information Through Directory Listing",
97
+ url: "https://cwe.mitre.org/data/definitions/548.html",
98
+ };
99
+ export const GIXY_ALIAS = {
100
+ name: "Gixy — alias traversal",
101
+ url: "https://github.com/yandex/gixy/blob/master/docs/en/plugins/aliastraversal.md",
102
+ };
103
+ export const NGINX_STUB_STATUS = {
104
+ name: "nginx — ngx_http_stub_status_module",
105
+ url: "https://nginx.org/en/docs/http/ngx_http_stub_status_module.html",
106
+ };
107
+ export const CWE_HARDCODED_CREDS = {
108
+ name: "CWE-798 — Use of Hard-coded Credentials",
109
+ url: "https://cwe.mitre.org/data/definitions/798.html",
110
+ };
111
+ export const HASHICORP_STYLE_GITIGNORE = {
112
+ name: "HashiCorp Terraform style guide — .gitignore",
113
+ url: "https://developer.hashicorp.com/terraform/language/style#gitignore",
114
+ };
115
+ export const CWE_CLEARTEXT = {
116
+ name: "CWE-319 — Cleartext Transmission of Sensitive Information",
117
+ url: "https://cwe.mitre.org/data/definitions/319.html",
118
+ };
119
+ function meta(id, tier, fixKind, title, remediation, authority, lineage) {
120
+ // An authority citation is the strongest security signal, so it wins. Otherwise
121
+ // the curated RULE_CATEGORY map (defined below, before RULE_CATALOG runs)
122
+ // decides correctness vs best-practice vs security-without-authority; the drift
123
+ // test guarantees every id is mapped, so the fallback is only a type belt.
124
+ const category = authority && authority.length > 0 ? "security" : RULE_CATEGORY[id] ?? "best-practice";
125
+ return { id, tier, fixKind, category, title, remediation, authority, ...(lineage?.length ? { lineage } : {}), yamlBased: true };
126
+ }
127
+ const M = "merge-worthy";
128
+ const R = "report-only";
129
+ const D = "deterministic";
130
+ const G = "guidance";
131
+ /**
132
+ * An AGT (agent-configuration) rule. Unlike every other family in the catalog
133
+ * these do not run against emitted YAML — they run against the agent config
134
+ * discovered on a machine (`packages/core/src/agents/`), so `yamlBased` is
135
+ * false: feeding a workflow file to the auditor will never produce one.
136
+ *
137
+ * All eight are `guidance`. There is no safe mechanical fix for any of them —
138
+ * pinning someone's MCP server picks a version on their behalf, and narrowing a
139
+ * permission grant requires knowing which commands they actually run.
140
+ */
141
+ function agentMeta(id, tier, title, remediation, authority) {
142
+ const category = authority && authority.length > 0 ? "security" : RULE_CATEGORY[id] ?? "best-practice";
143
+ return { id, tier, fixKind: G, category, title, remediation, authority, yamlBased: false };
144
+ }
145
+ /**
146
+ * Finding category per rule (#415). Curated: security rules are those that
147
+ * cite an authority or guard an exposure; correctness rules flag structural
148
+ * bugs (broken references, invalid schema, never-runs); the rest are
149
+ * best-practice. A drift test asserts this covers every catalogued rule.
150
+ */
151
+ export const RULE_CATEGORY = {
152
+ COR020: "correctness",
153
+ EXT001: "correctness",
154
+ SEC001: "security",
155
+ SEC002: "security",
156
+ SEC003: "security",
157
+ SEC004: "security",
158
+ SEC005: "security",
159
+ SEC006: "security",
160
+ SEC007: "security",
161
+ SEC008: "security",
162
+ SEC009: "security",
163
+ SEC010: "security",
164
+ WRG001: "security",
165
+ WRG002: "security",
166
+ WRG003: "best-practice",
167
+ WRG004: "security",
168
+ WRG005: "security",
169
+ WRG006: "security",
170
+ // NGX — nginx config audit (#1979), lexicon-independent like SEC/WRG.
171
+ NGX001: "security",
172
+ NGX002: "security",
173
+ NGX003: "security",
174
+ NGX004: "security",
175
+ NGX005: "security",
176
+ NGX006: "best-practice",
177
+ NGX007: "best-practice",
178
+ // TF023 — Terraform state committed to the repository. Core-owned for the
179
+ // same reason SEC/WRG/NGX are: it reads the discovered file list, not a
180
+ // parsed root module. See ./terraform-state.ts.
181
+ TF023: "security",
182
+ // AGT — agent configuration (`chant audit --agents`). Core-owned like COR/EXT:
183
+ // these run against the machine's own agent config, not against any one
184
+ // lexicon's emitted output, so no lexicon ships them.
185
+ AGT001: "security",
186
+ AGT002: "security",
187
+ AGT003: "security",
188
+ AGT004: "security",
189
+ AGT005: "security",
190
+ AGT006: "best-practice",
191
+ AGT007: "correctness",
192
+ AGT008: "best-practice",
193
+ };
194
+ /**
195
+ * Core's static portion of the audit catalog — now only the cross-cutting
196
+ * CloudFormation ids (COR/EXT) that aren't owned by a single lexicon. Every
197
+ * per-provider block moved to its lexicon's `auditCatalog()` (#687): WAW→aws,
198
+ * WGC→gcp, AZR→azure, DKRD→docker, WK8/ARGO→k8s, WHM→helm, GHA→github,
199
+ * WGL→gitlab, WFJ→forgejo. `resolveAuditCatalog` merges those over this map,
200
+ * alongside the lexicon-independent SEC/WRG/AGT families core owns outright.
201
+ */
202
+ export const RULE_CATALOG = {
203
+ COR020: meta("COR020", M, G, "Circular resource dependency", "Break the dependency cycle between resources."),
204
+ EXT001: meta("EXT001", M, G, "Extension constraint violation", "Fix the cross-property constraint flagged by the cfn-lint extension schema."),
205
+ // Secrets & credentials (#443) — lexicon-independent: `secrets.ts` scans the
206
+ // raw text of every candidate file, so these ids apply regardless of which
207
+ // (if any) audit lexicons are installed. `fixKind` is `guidance`: removing
208
+ // a hardcoded credential and rotating it needs a human, never an auto-fix.
209
+ SEC001: meta("SEC001", M, G, "AWS access key ID found", "Remove the key from source, rotate it in IAM, and load it from a secret store or environment variable instead.", [GH_SECRET_SCANNING]),
210
+ SEC002: meta("SEC002", M, G, "AWS secret access key found", "Remove the key from source, rotate it in IAM, and load it from a secret store or environment variable instead.", [GH_SECRET_SCANNING]),
211
+ SEC003: meta("SEC003", M, G, "GitHub token found", "Remove the token from source and revoke it at github.com/settings/tokens; use a GitHub Actions secret instead.", [GH_SECRET_SCANNING]),
212
+ SEC004: meta("SEC004", M, G, "Slack token found", "Remove the token from source and revoke it in the Slack app's OAuth settings.", [GH_SECRET_SCANNING]),
213
+ SEC005: meta("SEC005", M, G, "Google API key found", "Remove the key from source and regenerate it in the Google Cloud Console credentials page.", [GH_SECRET_SCANNING]),
214
+ SEC006: meta("SEC006", M, G, "Stripe live secret key found", "Remove the key from source and roll it in the Stripe dashboard immediately — this is a live-mode key.", [GH_SECRET_SCANNING]),
215
+ SEC007: meta("SEC007", M, G, "Private key block found", "Remove the private key from source, rotate the keypair, and load the key from a secret store instead.", [GH_SECRET_SCANNING]),
216
+ SEC008: meta("SEC008", M, G, "Bearer/authorization token found", "Remove the token from source; if it's long-lived, revoke and reissue it via the issuing service.", [GH_SECRET_SCANNING]),
217
+ SEC009: meta("SEC009", M, G, "Credentials embedded in a connection string", "Move the username/password out of the URI into a secret store, and rotate the credential.", [GH_SECRET_SCANNING]),
218
+ SEC010: meta("SEC010", M, G, "High-entropy string — possible secret", "Confirm whether this is a live credential; if so, remove it from source and rotate it. If it's a false positive, suppress with a `chant-audit-ignore` comment or an allowlist entry.", [GH_SECRET_SCANNING]),
219
+ // Wrangler config audit (#446) — lexicon-independent, same shape as the SEC
220
+ // family above: `wrangler.ts` scans every `wrangler.toml` it finds
221
+ // regardless of which (if any) audit lexicons are installed.
222
+ WRG001: meta("WRG001", M, G, "Production environment exposed on *.workers.dev", "Remove workers_dev (or set it to false) for this environment and rely on its custom domain/route instead of the shared public subdomain.", [CF_WORKERS_DEV]),
223
+ WRG002: meta("WRG002", M, G, "Credential-shaped key stored in [vars]", "Move the value out of [vars] and into `wrangler secret put <name>` so it isn't committed to source or visible in `wrangler dev`/the dashboard.", [CF_SECRETS]),
224
+ WRG003: meta("WRG003", R, G, "Observability explicitly disabled", "Set observability.enabled = true (or remove the override) so Workers Logs are recorded for this deployment."),
225
+ WRG004: meta("WRG004", M, G, "Unscoped wildcard route", "Scope the route pattern to the intended zone (e.g. \"example.com/*\") instead of a bare \"*\" or \"*/*\" that matches every zone on the account.", [CF_ROUTES]),
226
+ WRG005: meta("WRG005", M, G, "Non-production environment shares a data store with production", "Give the non-production environment its own KV namespace/R2 bucket/D1 database id instead of reusing production's.", [CF_ENVIRONMENTS]),
227
+ WRG006: meta("WRG006", M, G, "Static assets served from the project root", "Point [site].bucket / [assets].directory at a dedicated public output folder, not the project root, so non-public files (config, source maps, .git) aren't served.", [CF_STATIC_ASSETS]),
228
+ // nginx config audit (#1979, the #446 follow-up) — lexicon-independent,
229
+ // same shape as SEC/WRG: `nginx.ts` scans every nginx config it detects
230
+ // regardless of which (if any) audit lexicons are installed.
231
+ NGX001: meta("NGX001", M, G, "Deprecated TLS protocol enabled", "Remove SSLv2/SSLv3/TLSv1/TLSv1.1 from ssl_protocols and serve TLSv1.2 and TLSv1.3 only.", [MOZILLA_TLS]),
232
+ NGX002: meta("NGX002", M, G, "Weak cipher suite enabled", "Remove the RC4/DES/MD5/NULL/EXPORT-class entries from ssl_ciphers and use a modern cipher list (e.g. Mozilla's intermediate configuration).", [MOZILLA_TLS]),
233
+ NGX003: meta("NGX003", M, G, "Directory listing enabled", "Remove `autoindex on` (or scope it to a directory that is genuinely meant to be enumerated) so file listings aren't served to anyone who asks.", [CWE_DIR_LISTING]),
234
+ NGX004: meta("NGX004", M, G, "alias path traversal", "End the location prefix with \"/\" so it matches the trailing slash of the alias target — without it, a request for \"<prefix>../\" escapes the aliased directory.", [GIXY_ALIAS]),
235
+ NGX005: meta("NGX005", M, G, "Status endpoint with no access restriction", "Restrict the stub_status location with allow/deny (or auth_basic/auth_request) so connection metrics aren't public reconnaissance.", [NGINX_STUB_STATUS]),
236
+ NGX006: meta("NGX006", R, G, "Server version disclosure", "Add `server_tokens off;` in the http block so nginx stops advertising its exact version in the Server header and error pages."),
237
+ NGX007: meta("NGX007", R, G, "Access logging disabled at server scope", "Re-enable access_log at http/server scope (silencing a single noisy location is fine) so requests are recorded for incident investigation."),
238
+ // TF023 (#2110) — Terraform state, or the `.terraform/` working directory,
239
+ // committed to the repository. The one TF rule core owns: every other TF id
240
+ // is a post-synth check over a parsed root module (the terraform lexicon's
241
+ // `auditCatalog()`), while this one reads the discovered file list and never
242
+ // runs during `chant build`. Same shape as SEC/WRG/NGX above, and the same
243
+ // reason it lives here: `terraform-state.ts` needs no lexicon installed.
244
+ TF023: meta("TF023", M, G, "Terraform state committed to the repository", "Delete the state file (or `.terraform/`) from version control, add it to .gitignore, move the state to a remote backend, and rotate every credential the file held.", [HASHICORP_STYLE_GITIGNORE]),
245
+ // ── Agent configuration (`chant audit --agents`) ──────────────────
246
+ AGT001: agentMeta("AGT001", M, "MCP server runs an unpinned package", "Pin the package spec to an exact version (`server@1.2.3`), so a new upstream release can't execute on this machine unreviewed.", [SCORECARD_PINNED]),
247
+ AGT002: agentMeta("AGT002", M, "Literal credential in agent config", "Replace the value with an environment reference (`${TOKEN}`) and keep the secret in a secret store — agent config files sync, back up, and get shared.", [CWE_HARDCODED_CREDS]),
248
+ AGT003: agentMeta("AGT003", M, "MCP server reached over cleartext HTTP", "Use an https:// endpoint. Tool arguments and results — including data the agent read locally — otherwise cross the network in the clear.", [CWE_CLEARTEXT]),
249
+ AGT004: agentMeta("AGT004", M, "Remote skill or plugin is unpinned", "Pin the source to a tag or commit sha, so the instructions the agent follows can't change upstream without a local edit.", [SCORECARD_PINNED]),
250
+ AGT005: agentMeta("AGT005", M, "Tool permission granted without constraint", "Scope the grant to the specific commands you run (`Bash(git status:*)`), and re-enable the confirmation prompt for dangerous operations."),
251
+ AGT006: agentMeta("AGT006", R, "User-scope config applies to every project", "Move project-specific instructions, MCP servers, and skills to that project's own config so they don't follow you into unrelated repos."),
252
+ AGT007: agentMeta("AGT007", R, "MCP server declared in multiple files", "Delete the shadowed declarations. The harness silently picks one, so the file you read may not be the one that decides what runs."),
253
+ AGT008: agentMeta("AGT008", R, "Instruction file exceeds the attention budget", "Move situational guidance into skills that load on demand, so the always-on instructions stay short enough to be followed reliably."),
254
+ };
255
+ // Prior art credits for the core static rules (SEC/WRG/NGX/AGT/EXT) — ./lineage.ts.
256
+ attachLineage(RULE_CATALOG, coreAuditLineage);
257
+ /**
258
+ * Build one catalog entry — the lexicon-facing constructor for
259
+ * `LexiconPlugin.auditCatalog()` (#687), so a lexicon can declare its own rules'
260
+ * metadata next to the rules. Unlike the internal `meta()` it takes `category`
261
+ * explicitly (a lexicon owns its rules' categories) rather than reading core's
262
+ * curated `RULE_CATEGORY` map: an authority citation still forces `security`,
263
+ * otherwise the passed `category` (default `best-practice`) applies.
264
+ */
265
+ export function auditRule(id, tier, fixKind, title, remediation, opts) {
266
+ const category = opts?.authority && opts.authority.length > 0 ? "security" : (opts?.category ?? "best-practice");
267
+ return {
268
+ id,
269
+ tier,
270
+ fixKind,
271
+ category,
272
+ title,
273
+ remediation,
274
+ authority: opts?.authority,
275
+ ...(opts?.lineage?.length ? { lineage: opts.lineage } : {}),
276
+ yamlBased: true,
277
+ };
278
+ }
279
+ /**
280
+ * Resolve the effective audit catalog for a set of lexicons: core's static
281
+ * `RULE_CATALOG` with each active lexicon's contributed `auditCatalog()` merged
282
+ * on top (a lexicon's own entry wins for its ids). This is the aggregation seam
283
+ * (#687, epic #350) that lets per-provider metadata move out of core into the
284
+ * lexicon that owns the rules, while the auditor — which already loads those
285
+ * lexicons to run the rules — reads one merged catalog. Tolerant: a lexicon
286
+ * that can't be loaded or contributes no catalog is skipped.
287
+ */
288
+ export async function resolveAuditCatalog(lexicons) {
289
+ const catalog = { ...RULE_CATALOG };
290
+ // Forgejo workflows are GitHub-dialect: `audit/core.ts` runs github's checks
291
+ // against them, so their GHA* findings need github's catalog too (#687).
292
+ const needed = lexicons.includes("forgejo") && !lexicons.includes("github") ? [...lexicons, "github"] : lexicons;
293
+ if (needed.length === 0)
294
+ return catalog;
295
+ // Lazy import so importing this module doesn't pull in the plugin/config graph
296
+ // (matches ./core.ts's `load` — see #408). Loaded one at a time (rather than
297
+ // the bulk `loadPlugins`, which aborts on the first failure) so one
298
+ // not-yet-installed lexicon (e.g. terraform, #2085) doesn't drop every other
299
+ // lexicon's contributed catalog back to the static core map.
300
+ const { loadPlugin } = await import("../cli/plugins.js");
301
+ for (const name of needed) {
302
+ let plugin;
303
+ try {
304
+ plugin = await loadPlugin(name);
305
+ }
306
+ catch {
307
+ continue; // a lexicon package isn't installed, its catalog just doesn't contribute.
308
+ }
309
+ const contributed = plugin?.auditCatalog?.();
310
+ if (contributed)
311
+ Object.assign(catalog, contributed);
312
+ }
313
+ return catalog;
314
+ }
315
+ /** Look up catalog metadata for a check id, if known. */
316
+ export function ruleMeta(id) {
317
+ return RULE_CATALOG[id];
318
+ }
319
+ /**
320
+ * Resolve a rule id to its canonical form against `catalog` (chant #2113). An
321
+ * id that is itself a key of `catalog` passes through unchanged (this covers
322
+ * the common case without scanning every entry's `aliases`); otherwise every
323
+ * entry's `aliases` is searched for a match, and the id it belongs to is
324
+ * returned. An id neither a key nor anyone's alias passes through unchanged
325
+ * too, since this is a best-effort resolver, not a validator, so an unknown
326
+ * id is a caller's problem, not this function's.
327
+ *
328
+ * Exported so a `lint.rules`/preset key that names an alias resolves to the
329
+ * rule that actually runs (see `resolveConfiguredSeverity`,
330
+ * `../lint/config.ts`), and so #2111's HCL suppression code can key an
331
+ * inline `# chant-ignore <id>` off the same resolution once it lands — that
332
+ * suppression mechanism does not exist yet in this worktree (#2111 is a
333
+ * separate, parallel issue), so this function is exported now for it to call
334
+ * later rather than being wired into it here.
335
+ */
336
+ export function canonicalRuleId(id, catalog = RULE_CATALOG) {
337
+ if (id in catalog)
338
+ return id;
339
+ for (const [canonicalId, meta] of Object.entries(catalog)) {
340
+ if (meta.aliases?.includes(id))
341
+ return canonicalId;
342
+ }
343
+ return id;
344
+ }
345
+ /** Docs path for the audit rules reference (one anchor per rule id). */
346
+ export const RULES_DOC_PATH = "/chant/lint-rules/audit-rules/";
347
+ /** Absolute URL to a rule's entry in the audit rules reference. */
348
+ export function ruleDocUrl(id) {
349
+ return `https://intentius.io${RULES_DOC_PATH}#${id.toLowerCase()}`;
350
+ }