@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,76 @@
1
+ /**
2
+ * Rule documentation auto-generation.
3
+ *
4
+ * Generates MDX pages from a RuleEntry registry:
5
+ * - A catalog page with all rules grouped by category
6
+ * - Per-rule detail pages with configuration examples and disable syntax
7
+ */
8
+ /**
9
+ * Generate a rule catalog MDX page with all rules grouped by category.
10
+ */
11
+ export function generateRuleCatalog(entries, displayName = "chant") {
12
+ const lines = [
13
+ "---",
14
+ `title: "Rule Reference"`,
15
+ `description: "Complete reference of all lint rules and post-synth checks"`,
16
+ "---",
17
+ "",
18
+ `This page lists all **${entries.length}** rules available in ${displayName}.`,
19
+ "",
20
+ ];
21
+ // Group by category
22
+ const byCategory = new Map();
23
+ for (const entry of entries) {
24
+ const cat = entry.category;
25
+ const existing = byCategory.get(cat) ?? [];
26
+ existing.push(entry);
27
+ byCategory.set(cat, existing);
28
+ }
29
+ // Render each category
30
+ const categoryOrder = ["correctness", "security", "style", "performance"];
31
+ const sortedCategories = [...byCategory.keys()].sort((a, b) => (categoryOrder.indexOf(a) ?? 99) - (categoryOrder.indexOf(b) ?? 99));
32
+ for (const cat of sortedCategories) {
33
+ const catEntries = byCategory.get(cat);
34
+ const title = cat.charAt(0).toUpperCase() + cat.slice(1);
35
+ lines.push(`## ${title}`, "", "| ID | Description | Severity | Phase | Fix |", "|----|-------------|----------|-------|-----|");
36
+ for (const entry of catEntries.sort((a, b) => a.id.localeCompare(b.id))) {
37
+ const fix = entry.hasAutoFix ? "Yes" : "";
38
+ const link = entry.helpUri
39
+ ? `[\`${entry.id}\`](${entry.helpUri})`
40
+ : `\`${entry.id}\``;
41
+ lines.push(`| ${link} | ${entry.description} | ${entry.defaultSeverity} | ${entry.phase} | ${fix} |`);
42
+ }
43
+ lines.push("");
44
+ }
45
+ return lines.join("\n");
46
+ }
47
+ /**
48
+ * Generate a per-rule detail MDX page.
49
+ */
50
+ export function generateRuleDetailPage(entry) {
51
+ const lines = [
52
+ "---",
53
+ `title: "${entry.id}: ${entry.description}"`,
54
+ `description: "${entry.description}"`,
55
+ "---",
56
+ "",
57
+ `# ${entry.id}`,
58
+ "",
59
+ entry.description,
60
+ "",
61
+ "| Property | Value |",
62
+ "|----------|-------|",
63
+ `| **ID** | \`${entry.id}\` |`,
64
+ `| **Severity** | ${entry.defaultSeverity} |`,
65
+ `| **Category** | ${entry.category} |`,
66
+ `| **Phase** | ${entry.phase} |`,
67
+ `| **Source** | ${entry.source} |`,
68
+ `| **Auto-fix** | ${entry.hasAutoFix ? "Yes" : "No"} |`,
69
+ "",
70
+ ];
71
+ // Configuration example
72
+ lines.push("## Configuration", "", "Override severity in your `chant.config.ts`:", "", "```ts", "// chant.config.ts", `rules: {`, ` "${entry.id}": "warning", // or "error", "info", "off"`, `}`, "```", "");
73
+ // Disable syntax
74
+ lines.push("## Disabling", "", "Suppress this rule with inline comments:", "", "```ts", `// chant-disable ${entry.id}`, `// ... entire file suppressed for ${entry.id}`, "", `const x = 1; // chant-disable-line ${entry.id}`, "", `// chant-disable-next-line ${entry.id} -- reason for suppression`, `const y = 2;`, "```", "");
75
+ return lines.join("\n");
76
+ }
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Section content generators for lexicon documentation pages.
3
+ *
4
+ * Each function produces a complete MDX page string with frontmatter.
5
+ */
6
+ import { escapeMdx } from "./docs-file-markers.js";
7
+ import { intrinsicFolds } from "../lexicon.js";
8
+ export function generateOverview(config, manifest, resources, properties, serviceGroups, rules) {
9
+ const lines = [
10
+ "---",
11
+ `title: "${config.displayName}"`,
12
+ `description: "${config.description}"`,
13
+ "---",
14
+ "",
15
+ config.overview ?? `Reference documentation for the **${config.displayName}** lexicon.`,
16
+ "",
17
+ "## At a Glance",
18
+ "",
19
+ `| Metric | Count |`,
20
+ `|--------|-------|`,
21
+ `| Resources | ${resources.size} |`,
22
+ `| Property types | ${properties.size} |`,
23
+ `| Services | ${serviceGroups.size} |`,
24
+ `| Intrinsic functions | ${manifest.intrinsics?.length ?? 0} |`,
25
+ `| Pseudo-parameters | ${Object.keys(manifest.pseudoParameters ?? {}).length} |`,
26
+ `| Lint rules | ${rules.length} |`,
27
+ "",
28
+ `**Lexicon version:** ${manifest.version} `,
29
+ `**Namespace:** \`${manifest.namespace ?? manifest.name}\``,
30
+ "",
31
+ ];
32
+ const suppress = new Set(config.suppressPages ?? []);
33
+ if (!suppress.has("intrinsics") && manifest.intrinsics && manifest.intrinsics.length > 0) {
34
+ lines.push(`- [Intrinsic Functions](./intrinsics) — ${manifest.intrinsics.length} built-in functions`);
35
+ }
36
+ if (!suppress.has("pseudo-parameters") &&
37
+ manifest.pseudoParameters &&
38
+ Object.keys(manifest.pseudoParameters).length > 0) {
39
+ lines.push(`- [Pseudo-Parameters](./pseudo-parameters) — ${Object.keys(manifest.pseudoParameters).length} pseudo-parameters`);
40
+ }
41
+ // Same reasoning as the sidebar's rules entry: link the complete table on
42
+ // every lexicon, under the label the sidebar uses, whether or not a prose
43
+ // `lint-rules` page also exists.
44
+ if (!suppress.has("rules") && rules.length > 0) {
45
+ lines.push(`- [All Rules](./rules) — ${rules.length} rules`);
46
+ }
47
+ if (!suppress.has("serialization")) {
48
+ lines.push(`- [Serialization](./serialization) — output format details`);
49
+ }
50
+ if (config.extraSections) {
51
+ for (const section of config.extraSections) {
52
+ lines.push("", `## ${section.title}`, "", section.content);
53
+ }
54
+ }
55
+ lines.push("");
56
+ return lines.join("\n");
57
+ }
58
+ export function generateIntrinsics(config, manifest) {
59
+ const intrinsics = manifest.intrinsics;
60
+ const lines = [
61
+ "---",
62
+ `title: "Intrinsic Functions"`,
63
+ `description: "Built-in intrinsic functions for the ${config.displayName} lexicon"`,
64
+ "---",
65
+ "",
66
+ `The ${config.displayName} lexicon provides **${intrinsics.length}** intrinsic functions.`,
67
+ "",
68
+ `**Tag?** shows how an intrinsic is authored: a genuine tagged template (\`Sub\\\`...\\\`\`) or a plain function call (\`Ref(...)\`). **Folds?** shows whether [folding](/chant/concepts/typescript-as-data/#folded-vs-run) — the default \`chant build\` path — can reduce a use of this intrinsic today, without running the file — generated directly from this lexicon's registration, not restated by hand. A tagged template folds once it is registered. A plain call folds only where this lexicon has opted that intrinsic in one at a time (\`foldsAsCall\`), so a \`No\` in this column means this intrinsic has not been opted in, not that calls in general cannot fold.`,
69
+ "",
70
+ "| Function | Description | Output Key | Tag? | Folds? |",
71
+ "|----------|-------------|------------|------|--------|",
72
+ ];
73
+ for (const fn of intrinsics) {
74
+ const tag = fn.isTag ? "Yes" : "No";
75
+ const folds = intrinsicFolds(fn) ? "Yes" : "No";
76
+ lines.push(`| \`${fn.name}\` | ${escapeMdx(fn.description ?? "—")} | \`${fn.outputKey ?? fn.name}\` | ${tag} | ${folds} |`);
77
+ }
78
+ lines.push("");
79
+ return lines.join("\n");
80
+ }
81
+ export function generatePseudoParameters(config, manifest) {
82
+ const params = manifest.pseudoParameters;
83
+ const entries = Object.entries(params);
84
+ const lines = [
85
+ "---",
86
+ `title: "Pseudo-Parameters"`,
87
+ `description: "Pseudo-parameters available in the ${config.displayName} lexicon"`,
88
+ "---",
89
+ "",
90
+ `The ${config.displayName} lexicon provides **${entries.length}** pseudo-parameters — predefined values available in every stack without explicit declaration.`,
91
+ "",
92
+ "| Name | Value |",
93
+ "|------|-------|",
94
+ ];
95
+ for (const [name, value] of entries) {
96
+ lines.push(`| \`${name}\` | \`${value}\` |`);
97
+ }
98
+ lines.push("");
99
+ return lines.join("\n");
100
+ }
101
+ export function generateSerialization(config) {
102
+ const lines = [
103
+ "---",
104
+ `title: "Serialization"`,
105
+ `description: "Output format for the ${config.displayName} lexicon"`,
106
+ "---",
107
+ "",
108
+ ];
109
+ if (config.outputFormat) {
110
+ lines.push(config.outputFormat);
111
+ }
112
+ else {
113
+ lines.push(`The ${config.displayName} lexicon serializes resources into its native output format during the build step.`, "", "See the [Serialization](/chant/serialization/output-formats) guide for general information about output formats in chant.");
114
+ }
115
+ lines.push("");
116
+ return lines.join("\n");
117
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Sidebar generation for Starlight docs sites.
3
+ *
4
+ * Grouped by Diátaxis quadrant (https://diataxis.fr), chant #1731. Every page
5
+ * the pipeline knows about — authored under docs/pages/ and generated reference
6
+ * tables — arrives as a {@link SidebarPage} with a quadrant; this module only sorts and nests. Empty quadrants are omitted.
7
+ */
8
+ import { QUADRANTS, QUADRANT_LABELS } from "./docs-pages.js";
9
+ function byOrderThenLabel(a, b) {
10
+ const ao = a.order ?? Number.POSITIVE_INFINITY;
11
+ const bo = b.order ?? Number.POSITIVE_INFINITY;
12
+ if (ao !== bo)
13
+ return ao - bo;
14
+ return a.label.localeCompare(b.label);
15
+ }
16
+ /**
17
+ * One quadrant's entries: ungrouped pages first (by order, then label), then
18
+ * each nested `group` in order of its lowest-ordered member.
19
+ */
20
+ export function quadrantItems(pages) {
21
+ const loose = pages.filter((p) => !p.group).sort(byOrderThenLabel);
22
+ const groups = new Map();
23
+ for (const p of pages) {
24
+ if (!p.group)
25
+ continue;
26
+ const list = groups.get(p.group) ?? [];
27
+ list.push(p);
28
+ groups.set(p.group, list);
29
+ }
30
+ const items = loose.map((p) => ({ label: p.label, slug: p.slug }));
31
+ const grouped = [...groups.entries()]
32
+ .map(([label, members]) => ({ label, members: members.sort(byOrderThenLabel) }))
33
+ .sort((a, b) => byOrderThenLabel(a.members[0], b.members[0]));
34
+ for (const g of grouped) {
35
+ items.push({ label: g.label, items: g.members.map((p) => ({ label: p.label, slug: p.slug })) });
36
+ }
37
+ return items;
38
+ }
39
+ export function buildSidebar(config, result) {
40
+ // Starlight prepends basePath to every sidebar `link`, so a site-root-relative
41
+ // path like "/chant/" becomes "/chant/lexicons/aws/chant/" — a 404. Instead
42
+ // we use relative traversal: "../../" is prepended to become
43
+ // "/chant/lexicons/aws/../../" which the browser resolves to "/chant/".
44
+ const segments = (config.basePath ?? "/").replace(/^\/|\/$/g, "").split("/");
45
+ const backLink = segments.length > 1 ? "../".repeat(segments.length - 1) : "/";
46
+ const items = [
47
+ { label: "← chant docs", link: backLink },
48
+ { label: "Overview", slug: "index" },
49
+ ];
50
+ const byQuadrant = new Map();
51
+ for (const page of result.sidebarPages) {
52
+ if (page.hidden)
53
+ continue;
54
+ const list = byQuadrant.get(page.quadrant) ?? [];
55
+ list.push(page);
56
+ byQuadrant.set(page.quadrant, list);
57
+ }
58
+ for (const q of QUADRANTS) {
59
+ const pages = byQuadrant.get(q);
60
+ if (!pages || pages.length === 0)
61
+ continue;
62
+ items.push({ label: QUADRANT_LABELS[q], items: quadrantItems(pages) });
63
+ }
64
+ return items;
65
+ }
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Type definitions for the documentation pipeline.
3
+ */
4
+ export {};
@@ -0,0 +1,356 @@
1
+ /**
2
+ * Generic documentation pipeline for lexicons.
3
+ *
4
+ * Reads manifest.json and meta.json from a packaged lexicon's dist/ directory,
5
+ * collects rule metadata from source, and generates structured MDX reference
6
+ * pages. Individual lexicons supply callbacks for provider-specific formatting
7
+ * (service grouping, resource type URLs, custom overview content).
8
+ */
9
+ import { copyFileSync, existsSync, readdirSync, readFileSync, writeFileSync, mkdirSync, rmSync } from "fs";
10
+ import { join } from "path";
11
+ import { fileURLToPath } from "url";
12
+ import { expandFileMarkers } from "./docs-file-markers.js";
13
+ import { readAuthoredPages } from "./docs-pages.js";
14
+ import { scanRules, generateRules } from "./docs-rule-scanning.js";
15
+ import { buildSidebar } from "./docs-sidebar.js";
16
+ import { generateOverview, generateIntrinsics, generatePseudoParameters, generateSerialization } from "./docs-sections.js";
17
+ // Re-export all public types and functions so existing importers continue to work.
18
+ export { expandFileMarkers } from "./docs-file-markers.js";
19
+ export { QUADRANTS, QUADRANT_LABELS, readAuthoredPages } from "./docs-pages.js";
20
+ // ── Pipeline ───────────────────────────────────────────────────────
21
+ /**
22
+ * The version rendered into the docs (chant #1377).
23
+ *
24
+ * `dist/manifest.json` is written by `npm run bundle`, which runs only under
25
+ * `prepack`, so its `version` is whatever was last bundled on this machine
26
+ * and can trail `package.json` by several releases. `package.json` is the
27
+ * source of truth and is never stale, so it wins whenever it is present.
28
+ * The manifest's own version is the fallback for a dist with no package
29
+ * beside it (test fixtures, relocated dist directories).
30
+ */
31
+ export function lexiconVersion(config, manifest) {
32
+ const pkgPath = config.packageJsonPath ?? join(config.distDir, "..", "package.json");
33
+ if (existsSync(pkgPath)) {
34
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
35
+ if (typeof pkg.version === "string" && pkg.version.length > 0)
36
+ return pkg.version;
37
+ }
38
+ return manifest.version;
39
+ }
40
+ /**
41
+ * Run the documentation pipeline with the supplied config.
42
+ */
43
+ export function docsPipeline(config) {
44
+ const manifest = JSON.parse(readFileSync(join(config.distDir, "manifest.json"), "utf-8"));
45
+ manifest.version = lexiconVersion(config, manifest);
46
+ const meta = JSON.parse(readFileSync(join(config.distDir, "meta.json"), "utf-8"));
47
+ const rules = scanRules(config.srcDir ?? join(config.distDir, "..", "src"));
48
+ // Separate resources and properties
49
+ const resources = new Map();
50
+ const properties = new Map();
51
+ for (const [className, entry] of Object.entries(meta)) {
52
+ if (entry.kind === "resource") {
53
+ resources.set(className, entry);
54
+ }
55
+ else {
56
+ properties.set(className, entry);
57
+ }
58
+ }
59
+ // Group resources by service
60
+ const serviceFromType = config.serviceFromType ?? ((t) => t.split("::")[1] ?? "Other");
61
+ const serviceGroups = new Map();
62
+ for (const [className, entry] of resources) {
63
+ const service = serviceFromType(entry.resourceType);
64
+ let group = serviceGroups.get(service);
65
+ if (!group) {
66
+ group = new Map();
67
+ serviceGroups.set(service, group);
68
+ }
69
+ group.set(className, entry);
70
+ }
71
+ // Generate pages
72
+ const pages = new Map();
73
+ let overviewContent = generateOverview(config, manifest, resources, properties, serviceGroups, rules);
74
+ if (config.examplesDir) {
75
+ overviewContent = expandFileMarkers(overviewContent, config.examplesDir);
76
+ }
77
+ pages.set("index.mdx", overviewContent);
78
+ const suppress = new Set(config.suppressPages ?? []);
79
+ const sidebarPages = [];
80
+ // Authored pages under docs/pages/ (#1733). Each names its Diátaxis
81
+ // quadrant; the sidebar is grouped from that. Written with a provenance
82
+ // marker that points back at the source file.
83
+ const authored = readAuthoredPages(config);
84
+ const authoredSources = new Map();
85
+ for (const page of authored) {
86
+ pages.set(`${page.slug}.mdx`, page.content);
87
+ authoredSources.set(`${page.slug}.mdx`, page.file);
88
+ if (!page.hidden)
89
+ sidebarPages.push(page);
90
+ }
91
+ const extraSlugs = new Set(authored.map((p) => p.slug));
92
+ // A generated page must not overwrite one the lexicon authored. Authored
93
+ // pages are written into `pages` first, so an unguarded `pages.set` below
94
+ // would silently discard them: helm once declared its own "Intrinsics
95
+ // Reference" and pre-synth rules pages and shipped neither for as long as
96
+ // both slugs collided (#1312). Authorship wins, and the collision is
97
+ // reported rather than resolved in silence.
98
+ const claimed = (slug) => {
99
+ if (suppress.has(slug))
100
+ return true;
101
+ if (!extraSlugs.has(slug))
102
+ return false;
103
+ console.warn(`[docs:${config.name}] docs/pages/${slug}.mdx has the slug of a generated page — keeping the authored one.\n` +
104
+ ` Add "${slug}" to suppressPages to make that explicit, or rename the authored page if both are wanted.`);
105
+ return true;
106
+ };
107
+ // Generated reference tables sort after authored reference pages, in the
108
+ // order the old flat sidebar listed them.
109
+ let generatedOrder = 1000;
110
+ const generated = (slug, label) => {
111
+ sidebarPages.push({ slug, label, quadrant: "reference", order: generatedOrder++ });
112
+ };
113
+ if (!claimed("intrinsics") && manifest.intrinsics && manifest.intrinsics.length > 0) {
114
+ pages.set("intrinsics.mdx", generateIntrinsics(config, manifest));
115
+ generated("intrinsics", "Intrinsics");
116
+ }
117
+ if (!claimed("pseudo-parameters") &&
118
+ manifest.pseudoParameters &&
119
+ Object.keys(manifest.pseudoParameters).length > 0) {
120
+ pages.set("pseudo-parameters.mdx", generatePseudoParameters(config, manifest));
121
+ generated("pseudo-parameters", "Pseudo-Parameters");
122
+ }
123
+ // Every lexicon links its generated rules table, whether or not it also
124
+ // ships a prose `lint-rules` page. Skipping it when one existed was how gcp
125
+ // ended up emitting a page nothing pointed at (#1312). The label
126
+ // distinguishes the generated table from a prose page.
127
+ if (!claimed("rules") && rules.length > 0) {
128
+ pages.set("rules.mdx", generateRules(config, rules));
129
+ generated("rules", "All Rules");
130
+ }
131
+ if (!claimed("serialization")) {
132
+ pages.set("serialization.mdx", generateSerialization(config));
133
+ generated("serialization", "Serialization");
134
+ }
135
+ // Stamp every emitted page with its provenance. These files look exactly
136
+ // like the hand-written pages sitting beside them, and without a marker they
137
+ // get edited directly — the k8s "Live Cluster" sidebar group and the AWS
138
+ // intrinsics guide's #1044 claim were both fixed in the emitted `.mdx` and
139
+ // silently reverted by the next regen (#1312).
140
+ for (const [filename, content] of pages) {
141
+ pages.set(filename, withGeneratedMarker(config, content, authoredSources.get(filename)));
142
+ }
143
+ return {
144
+ pages,
145
+ sidebarPages,
146
+ stats: {
147
+ resources: resources.size,
148
+ properties: properties.size,
149
+ services: serviceGroups.size,
150
+ rules: rules.length,
151
+ intrinsics: manifest.intrinsics?.length ?? 0,
152
+ },
153
+ };
154
+ }
155
+ /**
156
+ * Insert a provenance comment directly after a page's frontmatter.
157
+ *
158
+ * MDX parses `<!-- -->` as JSX rather than a comment, so this uses the
159
+ * `{/* … *\/}` form the rest of the docs already use for generated markers.
160
+ */
161
+ function withGeneratedMarker(config, content, source) {
162
+ const edit = source
163
+ ? `Edit lexicons/${config.name}/docs/pages/${source} instead`
164
+ : `Edit lexicons/${config.name}/src/codegen/docs.ts instead`;
165
+ const marker = `{/* ${GENERATED_MARKER_TAG} by \`npm run docs -w @intentius/chant-lexicon-${config.name}\` — DO NOT EDIT.\n ${edit}; changes here are overwritten. */}`;
166
+ const lines = content.split("\n");
167
+ // Frontmatter is the leading `---` … `---` block; the marker goes after it.
168
+ if (lines[0] === "---") {
169
+ const close = lines.indexOf("---", 1);
170
+ if (close > 0) {
171
+ lines.splice(close + 1, 0, "", marker);
172
+ return lines.join("\n");
173
+ }
174
+ }
175
+ return `${marker}\n\n${content}`;
176
+ }
177
+ /**
178
+ * Render the complete rules table for a lexicon that has no {@link docsPipeline}
179
+ * site of its own.
180
+ *
181
+ * The docker lexicon hand-authors its docs, which left its rule table the only
182
+ * one in the repo that could drift from source without anything noticing
183
+ * (#1312). This is the one page worth generating even when the rest of a site
184
+ * is hand-written; the caller writes the result to `rules.mdx` and links it.
185
+ * Returns null when the lexicon declares no rules.
186
+ */
187
+ export function generateRulesPage(config, srcDir) {
188
+ const rules = scanRules(srcDir);
189
+ if (rules.length === 0)
190
+ return null;
191
+ return withGeneratedMarker(config, generateRules(config, rules));
192
+ }
193
+ /**
194
+ * Marks a page as pipeline output. Used both to warn readers off editing the
195
+ * file and, in {@link writeDocsSite}, to tell a page this pipeline owns from a
196
+ * hand-written one when reaping pages it no longer emits.
197
+ */
198
+ export const GENERATED_MARKER_TAG = "GENERATED-BY-CHANT-DOCS";
199
+ /**
200
+ * Every slug a Starlight sidebar reaches, including nested group items.
201
+ */
202
+ export function collectSidebarSlugs(items) {
203
+ const slugs = new Set();
204
+ const walk = (list) => {
205
+ for (const item of list) {
206
+ if (typeof item.slug === "string")
207
+ slugs.add(item.slug);
208
+ if (Array.isArray(item.items))
209
+ walk(item.items);
210
+ }
211
+ };
212
+ walk(items);
213
+ return slugs;
214
+ }
215
+ /**
216
+ * Content pages that no sidebar entry points at.
217
+ *
218
+ * `index` is always the site root and never needs an entry of its own.
219
+ */
220
+ export function unreachablePages(contentDir, sidebar) {
221
+ if (!existsSync(contentDir))
222
+ return [];
223
+ const slugs = collectSidebarSlugs(sidebar);
224
+ return readdirSync(contentDir)
225
+ .filter((f) => f.endsWith(".mdx") || f.endsWith(".md"))
226
+ .map((f) => f.replace(/\.mdx?$/, ""))
227
+ .filter((slug) => slug !== "index" && !slugs.has(slug))
228
+ .sort();
229
+ }
230
+ /**
231
+ * Write generated docs pages to disk.
232
+ */
233
+ export function writeDocsPages(result, outDir) {
234
+ mkdirSync(outDir, { recursive: true });
235
+ for (const [filename, content] of result.pages) {
236
+ const filePath = join(outDir, filename);
237
+ const dir = filePath.substring(0, filePath.lastIndexOf("/"));
238
+ mkdirSync(dir, { recursive: true });
239
+ writeFileSync(filePath, content);
240
+ }
241
+ }
242
+ /**
243
+ * Scaffold a standalone Starlight docs site from pipeline results.
244
+ *
245
+ * Writes: package.json, astro.config.mjs, tsconfig.json, and all content
246
+ * pages under src/content/docs/. The resulting directory can be built with
247
+ * `npm install && npm run build`.
248
+ */
249
+ export function writeDocsSite(config, result) {
250
+ const outDir = config.outDir;
251
+ const contentDir = join(outDir, "src", "content", "docs");
252
+ // Clear stale generated content and Astro caches so changes are picked up on next build.
253
+ // Only remove files that will be regenerated — preserve hand-written pages.
254
+ for (const filename of result.pages.keys()) {
255
+ const filePath = join(contentDir, filename);
256
+ rmSync(filePath, { force: true });
257
+ }
258
+ // Reap pages this pipeline used to emit and no longer does. Suppressing a
259
+ // page only stops it being written; the copy from the last run stayed on
260
+ // disk, unreferenced by the sidebar and indistinguishable from a
261
+ // hand-written page — which is how azure, gcp and helm each kept a `rules`
262
+ // page after adopting their own (#1312). The provenance marker is what makes
263
+ // this safe: only a file this pipeline stamped is ever removed.
264
+ if (existsSync(contentDir)) {
265
+ for (const filename of readdirSync(contentDir)) {
266
+ if (!filename.endsWith(".mdx") && !filename.endsWith(".md"))
267
+ continue;
268
+ if (result.pages.has(filename))
269
+ continue;
270
+ const filePath = join(contentDir, filename);
271
+ if (readFileSync(filePath, "utf-8").includes(GENERATED_MARKER_TAG)) {
272
+ rmSync(filePath, { force: true });
273
+ }
274
+ }
275
+ }
276
+ rmSync(join(outDir, ".astro"), { recursive: true, force: true });
277
+ rmSync(join(outDir, "node_modules", ".astro"), { recursive: true, force: true });
278
+ // Write content pages
279
+ writeDocsPages(result, contentDir);
280
+ // Build sidebar from generated pages
281
+ const sidebar = buildSidebar(config, result);
282
+ // Starlight does not auto-discover pages, so a page absent from the sidebar
283
+ // is reachable only by typing its URL. The pipeline deliberately preserves
284
+ // hand-written pages it did not emit (above), which makes it easy to add one
285
+ // and never wire it up — azure, helm and github each accumulated
286
+ // several that way (#1312). Report them; `chant dev check-lexicon` gates on
287
+ // the same condition.
288
+ const unreachable = unreachablePages(contentDir, sidebar);
289
+ if (unreachable.length > 0) {
290
+ console.warn(`[docs:${config.name}] ${unreachable.length} page(s) in no sidebar entry — reachable only by direct URL: ${unreachable.join(", ")}.\n` +
291
+ ` Move them to docs/pages/ with a \`diataxis\` field to surface them (chant #1731).`);
292
+ }
293
+ // package.json
294
+ writeFileSync(join(outDir, "package.json"), JSON.stringify({
295
+ name: `@intentius/chant-lexicon-${config.name}-docs`,
296
+ type: "module",
297
+ version: "0.0.1",
298
+ private: true,
299
+ scripts: {
300
+ dev: "astro dev",
301
+ build: "astro build",
302
+ preview: "astro preview",
303
+ },
304
+ dependencies: {
305
+ "@astrojs/starlight": "^0.37.6",
306
+ astro: "^5.6.1",
307
+ sharp: "^0.34.2",
308
+ },
309
+ }, null, 2) + "\n");
310
+ // tsconfig.json
311
+ writeFileSync(join(outDir, "tsconfig.json"), JSON.stringify({
312
+ extends: "astro/tsconfigs/strict",
313
+ include: [".astro/types.d.ts", "**/*"],
314
+ exclude: ["dist"],
315
+ }, null, 2) + "\n");
316
+ // src/content.config.ts (required by Astro 5+ / Starlight 0.37+)
317
+ mkdirSync(join(outDir, "src"), { recursive: true });
318
+ writeFileSync(join(outDir, "src", "content.config.ts"), `import { defineCollection, z } from 'astro:content';
319
+ import { docsLoader } from '@astrojs/starlight/loaders';
320
+ import { docsSchema } from '@astrojs/starlight/schema';
321
+
322
+ export const collections = {
323
+ docs: defineCollection({
324
+ loader: docsLoader(),
325
+ schema: docsSchema({
326
+ extend: z.object({
327
+ // Diátaxis quadrant (https://diataxis.fr), chant #1731.
328
+ diataxis: z.enum(['tutorial', 'how-to', 'reference', 'explanation']).optional(),
329
+ }),
330
+ }),
331
+ }),
332
+ };
333
+ `);
334
+ // src/rehype-base-url.mjs — copied from chant core so Astro can import it
335
+ // without the generated docs site needing a workspace dep on @intentius/chant.
336
+ const pluginSrcPath = fileURLToPath(new URL("./rehype-base-url.mjs", import.meta.url));
337
+ copyFileSync(pluginSrcPath, join(outDir, "src", "rehype-base-url.mjs"));
338
+ // astro.config.mjs
339
+ const rehypeLine = config.basePath
340
+ ? `\n markdown: {\n rehypePlugins: [[rehypeBaseUrl, { base: '${config.basePath}', projectBase: '/chant' }]],\n },`
341
+ : "";
342
+ writeFileSync(join(outDir, "astro.config.mjs"), `// @ts-check
343
+ import { defineConfig } from 'astro/config';
344
+ import starlight from '@astrojs/starlight';
345
+ import rehypeBaseUrl from './src/rehype-base-url.mjs';
346
+
347
+ export default defineConfig({${config.basePath ? `\n base: '${config.basePath}',` : ""}${rehypeLine}
348
+ integrations: [
349
+ starlight({
350
+ title: '${config.displayName}',
351
+ sidebar: ${JSON.stringify(sidebar, null, 6).replace(/\n/g, "\n ")},
352
+ }),
353
+ ],
354
+ });
355
+ `);
356
+ }