@intentius/chant 0.124.12 → 0.124.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (928) hide show
  1. package/bin/chant +11 -0
  2. package/dist/agents/checks.js +326 -0
  3. package/dist/agents/discover.js +885 -0
  4. package/dist/agents/importer.js +17 -0
  5. package/dist/agents/index.js +12 -0
  6. package/dist/agents/types.js +19 -0
  7. package/dist/apply.js +151 -0
  8. package/dist/attrref.js +70 -0
  9. package/dist/audit/catalog.js +350 -0
  10. package/dist/audit/core.js +252 -0
  11. package/dist/audit/discover.js +633 -0
  12. package/dist/audit/fetch.js +666 -0
  13. package/dist/audit/lineage.js +91 -0
  14. package/dist/audit/nginx.js +366 -0
  15. package/dist/audit/prior-art.js +132 -0
  16. package/dist/audit/proof.js +321 -0
  17. package/dist/audit/report-html.js +194 -0
  18. package/dist/audit/report-model.js +198 -0
  19. package/dist/audit/report.js +102 -0
  20. package/dist/audit/rules-doc.js +144 -0
  21. package/dist/audit/secrets.js +405 -0
  22. package/dist/audit/terraform-state.js +140 -0
  23. package/dist/audit/wrangler.js +262 -0
  24. package/dist/behaviour-delta.js +401 -0
  25. package/dist/behaviour-engine.js +357 -0
  26. package/dist/behaviour-graph.js +83 -0
  27. package/dist/behaviour-http.js +188 -0
  28. package/dist/behaviour-kinds.js +172 -0
  29. package/dist/behaviour-overlay.js +50 -0
  30. package/dist/behaviour-predict.js +188 -0
  31. package/dist/behaviour-request.js +194 -0
  32. package/dist/behaviour.js +1325 -0
  33. package/dist/build-params.js +108 -0
  34. package/dist/build.js +668 -0
  35. package/dist/builder.js +44 -0
  36. package/dist/cdk/advise.js +30 -0
  37. package/dist/cdk/assembly.js +122 -0
  38. package/dist/cdk/graph.js +444 -0
  39. package/dist/cdk/tier-map.js +64 -0
  40. package/dist/cdk/types.js +24 -0
  41. package/dist/change-set.js +312 -0
  42. package/dist/child-project.js +21 -0
  43. package/dist/claimed-fields.js +135 -0
  44. package/dist/cli/build-options.js +70 -0
  45. package/dist/cli/build-params-cli.js +139 -0
  46. package/dist/cli/command-group.js +123 -0
  47. package/dist/cli/commands/audit-agents.js +326 -0
  48. package/dist/cli/commands/audit.js +571 -0
  49. package/dist/cli/commands/build.js +920 -0
  50. package/dist/cli/commands/carve-apply.js +153 -0
  51. package/dist/cli/commands/carve-bridge.js +201 -0
  52. package/dist/cli/commands/carve-emit.js +332 -0
  53. package/dist/cli/commands/carve-status.js +119 -0
  54. package/dist/cli/commands/carve.js +204 -0
  55. package/dist/cli/commands/check-lexicon-docs.js +79 -0
  56. package/dist/cli/commands/check-lexicon-examples.js +177 -0
  57. package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
  58. package/dist/cli/commands/check-lexicon-mcp.js +82 -0
  59. package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
  60. package/dist/cli/commands/check-lexicon-plugin.js +104 -0
  61. package/dist/cli/commands/check-lexicon.js +766 -0
  62. package/dist/cli/commands/describe.js +85 -0
  63. package/dist/cli/commands/diff.js +175 -0
  64. package/dist/cli/commands/doctor.js +350 -0
  65. package/dist/cli/commands/import-agents.js +155 -0
  66. package/dist/cli/commands/import.js +670 -0
  67. package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
  68. package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
  69. package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
  70. package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
  71. package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
  72. package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
  73. package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
  74. package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
  75. package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
  76. package/dist/cli/commands/init-lexicon.js +172 -0
  77. package/dist/cli/commands/init.js +381 -0
  78. package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
  79. package/dist/cli/commands/lexicon-surface-diff.js +145 -0
  80. package/dist/cli/commands/licenses.js +125 -0
  81. package/dist/cli/commands/lint.d.ts.map +1 -1
  82. package/dist/cli/commands/lint.js +948 -0
  83. package/dist/cli/commands/list.js +63 -0
  84. package/dist/cli/commands/migrate.d.ts.map +1 -1
  85. package/dist/cli/commands/migrate.js +423 -0
  86. package/dist/cli/commands/onboard.js +403 -0
  87. package/dist/cli/commands/pinned-upgrade.js +191 -0
  88. package/dist/cli/commands/update.js +194 -0
  89. package/dist/cli/commands/vendor.js +217 -0
  90. package/dist/cli/conflict-check.js +104 -0
  91. package/dist/cli/debug.js +8 -0
  92. package/dist/cli/format.js +104 -0
  93. package/dist/cli/handlers/build.js +267 -0
  94. package/dist/cli/handlers/carve-apply.js +30 -0
  95. package/dist/cli/handlers/carve-bridge.js +28 -0
  96. package/dist/cli/handlers/carve-emit.js +50 -0
  97. package/dist/cli/handlers/carve-status.js +26 -0
  98. package/dist/cli/handlers/carve.js +40 -0
  99. package/dist/cli/handlers/change-set.js +46 -0
  100. package/dist/cli/handlers/components.js +730 -0
  101. package/dist/cli/handlers/dev.js +113 -0
  102. package/dist/cli/handlers/emulator.js +233 -0
  103. package/dist/cli/handlers/explain.js +54 -0
  104. package/dist/cli/handlers/fan-out.js +422 -0
  105. package/dist/cli/handlers/gate-resume.js +275 -0
  106. package/dist/cli/handlers/generate.js +84 -0
  107. package/dist/cli/handlers/graph.js +969 -0
  108. package/dist/cli/handlers/init.js +102 -0
  109. package/dist/cli/handlers/lifecycle.js +1727 -0
  110. package/dist/cli/handlers/lint.js +62 -0
  111. package/dist/cli/handlers/migrate.js +48 -0
  112. package/dist/cli/handlers/misc.js +391 -0
  113. package/dist/cli/handlers/operator.js +1162 -0
  114. package/dist/cli/handlers/override-approve.js +102 -0
  115. package/dist/cli/handlers/pr.js +503 -0
  116. package/dist/cli/handlers/promote.js +342 -0
  117. package/dist/cli/handlers/run-generate.js +206 -0
  118. package/dist/cli/handlers/run-wave.js +66 -0
  119. package/dist/cli/handlers/run.js +1191 -0
  120. package/dist/cli/handlers/scenario.js +325 -0
  121. package/dist/cli/handlers/search.js +924 -0
  122. package/dist/cli/handlers/serve.js +32 -0
  123. package/dist/cli/handlers/vendor.js +154 -0
  124. package/dist/cli/index.js +3 -0
  125. package/dist/cli/is-entry-point.js +23 -0
  126. package/dist/cli/lsp/capabilities.js +28 -0
  127. package/dist/cli/lsp/diagnostics.js +34 -0
  128. package/dist/cli/lsp/server.js +329 -0
  129. package/dist/cli/main.d.ts.map +1 -1
  130. package/dist/cli/main.js +2540 -0
  131. package/dist/cli/mcp/lifecycle-tools.js +80 -0
  132. package/dist/cli/mcp/op-tools.js +306 -0
  133. package/dist/cli/mcp/resource-handlers.js +258 -0
  134. package/dist/cli/mcp/resources/context.js +85 -0
  135. package/dist/cli/mcp/server.js +353 -0
  136. package/dist/cli/mcp/tools/build.js +111 -0
  137. package/dist/cli/mcp/tools/composites.js +95 -0
  138. package/dist/cli/mcp/tools/explain.js +166 -0
  139. package/dist/cli/mcp/tools/import.js +49 -0
  140. package/dist/cli/mcp/tools/lint.js +41 -0
  141. package/dist/cli/mcp/tools/scaffold.js +111 -0
  142. package/dist/cli/mcp/tools/search.js +112 -0
  143. package/dist/cli/mcp/types.js +1 -0
  144. package/dist/cli/mcp/workspace-plugins.js +91 -0
  145. package/dist/cli/mcp/workspace-tools.d.ts +1 -1
  146. package/dist/cli/mcp/workspace-tools.js +564 -0
  147. package/dist/cli/mcp-config.js +70 -0
  148. package/dist/cli/plugins.js +313 -0
  149. package/dist/cli/registry.js +23 -0
  150. package/dist/cli/reporters/stylish.js +329 -0
  151. package/dist/cli/version.js +15 -0
  152. package/dist/cli/watch.js +79 -0
  153. package/dist/codegen/bound-property-types.js +82 -0
  154. package/dist/codegen/coverage.js +119 -0
  155. package/dist/codegen/docs-file-markers.js +60 -0
  156. package/dist/codegen/docs-pages.js +115 -0
  157. package/dist/codegen/docs-rule-scanning.js +164 -0
  158. package/dist/codegen/docs-rules.js +76 -0
  159. package/dist/codegen/docs-sections.js +117 -0
  160. package/dist/codegen/docs-sidebar.js +65 -0
  161. package/dist/codegen/docs-types.js +4 -0
  162. package/dist/codegen/docs.js +356 -0
  163. package/dist/codegen/fetch.js +340 -0
  164. package/dist/codegen/generate-post-synth-barrel.js +63 -0
  165. package/dist/codegen/generate-registry.js +71 -0
  166. package/dist/codegen/generate-runtime-index.js +56 -0
  167. package/dist/codegen/generate-typescript.js +119 -0
  168. package/dist/codegen/generate.js +115 -0
  169. package/dist/codegen/json-patch.js +141 -0
  170. package/dist/codegen/json-schema-to-ts.js +344 -0
  171. package/dist/codegen/json-schema.js +246 -0
  172. package/dist/codegen/lexicon-regen.js +412 -0
  173. package/dist/codegen/naming.js +217 -0
  174. package/dist/codegen/okf-lexicon.js +245 -0
  175. package/dist/codegen/package.js +150 -0
  176. package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
  177. package/dist/codegen/pinned-upgrade.js +494 -0
  178. package/dist/codegen/registry.js +60 -0
  179. package/dist/codegen/rehype-base-url.mjs +68 -0
  180. package/dist/codegen/rolling-upgrade.js +217 -0
  181. package/dist/codegen/surface-snapshot.js +537 -0
  182. package/dist/codegen/testdata/postgres-tags.json +242 -0
  183. package/dist/codegen/topo-sort.js +36 -0
  184. package/dist/codegen/typecheck.js +115 -0
  185. package/dist/codegen/validate.js +200 -0
  186. package/dist/codegen/version-bump.js +35 -0
  187. package/dist/components/auto-release.js +143 -0
  188. package/dist/components/builders.js +47 -0
  189. package/dist/components/capability-plugin-loader.js +175 -0
  190. package/dist/components/capability-plugin-schema.js +46 -0
  191. package/dist/components/capability-plugin.js +99 -0
  192. package/dist/components/capability.js +60 -0
  193. package/dist/components/changed-files.js +72 -0
  194. package/dist/components/cli-support.js +427 -0
  195. package/dist/components/component.js +120 -0
  196. package/dist/components/component.schema.json +271 -0
  197. package/dist/components/config-defaults.js +130 -0
  198. package/dist/components/deploy-units.js +60 -0
  199. package/dist/components/discover.d.ts.map +1 -1
  200. package/dist/components/discover.js +189 -0
  201. package/dist/components/driver-output.js +86 -0
  202. package/dist/components/driver.js +728 -0
  203. package/dist/components/fan-out-output.js +165 -0
  204. package/dist/components/fan-out-record.js +94 -0
  205. package/dist/components/fan-out-run.js +373 -0
  206. package/dist/components/fan-out-support.js +60 -0
  207. package/dist/components/fan-out.js +273 -0
  208. package/dist/components/gate-plan.js +41 -0
  209. package/dist/components/gated-wave-pipeline.js +46 -0
  210. package/dist/components/index.js +24 -0
  211. package/dist/components/layers.js +28 -0
  212. package/dist/components/manifest-persistence.js +108 -0
  213. package/dist/components/pilots/alb-ecs.pilot.js +59 -0
  214. package/dist/components/pilots/dynamodb.pilot.js +51 -0
  215. package/dist/components/pilots/jar-emr.pilot.js +65 -0
  216. package/dist/components/pilots/lambda.pilot.js +52 -0
  217. package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
  218. package/dist/components/pilots/project.js +12 -0
  219. package/dist/components/pr-pipeline.js +134 -0
  220. package/dist/components/pr-run.js +363 -0
  221. package/dist/components/presets/ecs-fargate.js +72 -0
  222. package/dist/components/presets/index.js +28 -0
  223. package/dist/components/presets/lambda.js +34 -0
  224. package/dist/components/presets/single-host-compose.js +41 -0
  225. package/dist/components/promote.js +549 -0
  226. package/dist/components/registry.js +34 -0
  227. package/dist/components/run-progress.js +33 -0
  228. package/dist/components/sandbox/driver.d.ts.map +1 -1
  229. package/dist/components/sandbox/driver.js +93 -0
  230. package/dist/components/sandbox/run.js +115 -0
  231. package/dist/components/starter-plugin.js +104 -0
  232. package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
  233. package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
  234. package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
  235. package/dist/components/verbs/bom-writer.js +287 -0
  236. package/dist/components/verbs/build-archive.js +188 -0
  237. package/dist/components/verbs/build.js +142 -0
  238. package/dist/components/verbs/cloud-executor.js +110 -0
  239. package/dist/components/verbs/component-bom.js +125 -0
  240. package/dist/components/verbs/ensure-secret.js +50 -0
  241. package/dist/components/verbs/index.js +61 -0
  242. package/dist/components/verbs/license-policy.js +75 -0
  243. package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
  244. package/dist/components/verbs/process-runner.js +78 -0
  245. package/dist/components/verbs/r2-sync.js +93 -0
  246. package/dist/components/verbs/reproducibility.js +62 -0
  247. package/dist/components/verbs/run-agent.js +577 -0
  248. package/dist/components/verbs/sbom-generator.js +119 -0
  249. package/dist/components/verbs/sbom.js +97 -0
  250. package/dist/components/verbs/shell.js +32 -0
  251. package/dist/components/verbs/sign.js +221 -0
  252. package/dist/components/verbs/stub.js +28 -0
  253. package/dist/components/verbs/tool-sbom-generator.js +154 -0
  254. package/dist/components/verbs/verify.js +112 -0
  255. package/dist/components/verbs/vex.js +131 -0
  256. package/dist/components/verbs/vuln-gate.js +152 -0
  257. package/dist/components/verbs/vuln-scan.js +288 -0
  258. package/dist/components/verbs/wait-verify.js +106 -0
  259. package/dist/components/verbs/wrangler.js +179 -0
  260. package/dist/components/wave-plan.js +102 -0
  261. package/dist/composite.js +305 -0
  262. package/dist/config-import.d.ts.map +1 -1
  263. package/dist/config-import.js +22 -0
  264. package/dist/config-sandbox.js +122 -0
  265. package/dist/config-static.js +206 -0
  266. package/dist/config.js +605 -0
  267. package/dist/content-digest.js +23 -0
  268. package/dist/declarable.js +114 -0
  269. package/dist/deep-observation.js +437 -0
  270. package/dist/detectLexicon.js +54 -0
  271. package/dist/discovery/cache.js +70 -0
  272. package/dist/discovery/collect.js +208 -0
  273. package/dist/discovery/cycles.js +95 -0
  274. package/dist/discovery/entity-wire-codec.js +391 -0
  275. package/dist/discovery/entity-wire.js +42 -0
  276. package/dist/discovery/files.js +121 -0
  277. package/dist/discovery/fold-import.d.ts.map +1 -1
  278. package/dist/discovery/fold-import.js +4178 -0
  279. package/dist/discovery/fold-rank.js +292 -0
  280. package/dist/discovery/graph.js +115 -0
  281. package/dist/discovery/import.d.ts.map +1 -1
  282. package/dist/discovery/import.js +65 -0
  283. package/dist/discovery/index.js +333 -0
  284. package/dist/discovery/param-deps.js +487 -0
  285. package/dist/discovery/resolve.js +39 -0
  286. package/dist/discovery/sandbox/bundle.js +214 -0
  287. package/dist/discovery/sandbox/child-errors.js +26 -0
  288. package/dist/discovery/sandbox/config-run.js +100 -0
  289. package/dist/discovery/sandbox/config-wire.js +183 -0
  290. package/dist/discovery/sandbox/driver.d.ts.map +1 -1
  291. package/dist/discovery/sandbox/driver.js +333 -0
  292. package/dist/discovery/sandbox/fork.js +229 -0
  293. package/dist/discovery/sandbox/policy-run.js +142 -0
  294. package/dist/discovery/sandbox/policy-wire.js +152 -0
  295. package/dist/discovery/sandbox/run.js +77 -0
  296. package/dist/discovery/specifier-resolve.js +320 -0
  297. package/dist/discovery/walk.js +284 -0
  298. package/dist/effect-receipt.js +340 -0
  299. package/dist/env.js +55 -0
  300. package/dist/errors.js +62 -0
  301. package/dist/fold/fold.js +1434 -0
  302. package/dist/fold/foldable-helpers.js +229 -0
  303. package/dist/fold/subset.js +696 -0
  304. package/dist/fold-provenance.js +414 -0
  305. package/dist/gate-decision.d.ts +36 -4
  306. package/dist/gate-decision.d.ts.map +1 -1
  307. package/dist/gate-decision.js +260 -0
  308. package/dist/gate-resume-run.js +154 -0
  309. package/dist/gated-waves.js +165 -0
  310. package/dist/governance.js +43 -0
  311. package/dist/graph-declared.js +45 -0
  312. package/dist/graph-detail.js +207 -0
  313. package/dist/graph-dot.js +54 -0
  314. package/dist/graph-effective.js +107 -0
  315. package/dist/graph-ir.js +623 -0
  316. package/dist/graph-layout.js +184 -0
  317. package/dist/graph-lens.js +105 -0
  318. package/dist/graph-mermaid.js +83 -0
  319. package/dist/graph-ops.js +39 -0
  320. package/dist/graph-refs.js +156 -0
  321. package/dist/held-elsewhere.js +87 -0
  322. package/dist/identity.js +251 -0
  323. package/dist/import/base-parser.js +34 -0
  324. package/dist/import/embedded.js +255 -0
  325. package/dist/import/generator.js +1 -0
  326. package/dist/import/ir-utils.js +85 -0
  327. package/dist/import/parser-options.js +45 -0
  328. package/dist/import/parser.js +1 -0
  329. package/dist/index.js +118 -0
  330. package/dist/intrinsic-interpolation.js +73 -0
  331. package/dist/intrinsic.js +31 -0
  332. package/dist/join-key.js +35 -0
  333. package/dist/kubectl-context.js +150 -0
  334. package/dist/lexicon-config.js +58 -0
  335. package/dist/lexicon-integrity.js +47 -0
  336. package/dist/lexicon-manifest.js +70 -0
  337. package/dist/lexicon-module.d.ts.map +1 -1
  338. package/dist/lexicon-module.js +241 -0
  339. package/dist/lexicon-output.js +218 -0
  340. package/dist/lexicon-plugin-helpers.js +104 -0
  341. package/dist/lexicon-schema.js +136 -0
  342. package/dist/lexicon.js +130 -0
  343. package/dist/lifecycle/affected.js +224 -0
  344. package/dist/lifecycle/assert-live.js +110 -0
  345. package/dist/lifecycle/build-ledger-store.js +160 -0
  346. package/dist/lifecycle/build-ledger.js +155 -0
  347. package/dist/lifecycle/change-set.js +356 -0
  348. package/dist/lifecycle/converge-ledger.js +161 -0
  349. package/dist/lifecycle/deep-diff.js +233 -0
  350. package/dist/lifecycle/deep-observe.js +147 -0
  351. package/dist/lifecycle/digest.js +143 -0
  352. package/dist/lifecycle/disruption.js +135 -0
  353. package/dist/lifecycle/gate-applied.js +113 -0
  354. package/dist/lifecycle/gate-audit.js +341 -0
  355. package/dist/lifecycle/gate-ledger-select.js +89 -0
  356. package/dist/lifecycle/gate-ledger.d.ts +8 -0
  357. package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
  358. package/dist/lifecycle/gate-ledger.js +193 -0
  359. package/dist/lifecycle/gate-origin.js +117 -0
  360. package/dist/lifecycle/gate-pending.js +58 -0
  361. package/dist/lifecycle/git.js +1182 -0
  362. package/dist/lifecycle/identity.js +58 -0
  363. package/dist/lifecycle/index.js +26 -0
  364. package/dist/lifecycle/lease.js +283 -0
  365. package/dist/lifecycle/ledger-port.js +1 -0
  366. package/dist/lifecycle/legacy-digest.js +91 -0
  367. package/dist/lifecycle/live-diff.js +274 -0
  368. package/dist/lifecycle/local-note.js +15 -0
  369. package/dist/lifecycle/member-ledger.js +122 -0
  370. package/dist/lifecycle/observation-baseline.js +155 -0
  371. package/dist/lifecycle/observe.js +375 -0
  372. package/dist/lifecycle/oras-referrer-lookup.js +82 -0
  373. package/dist/lifecycle/override-ledger.js +54 -0
  374. package/dist/lifecycle/plan-digest.js +110 -0
  375. package/dist/lifecycle/plan-ledger.js +129 -0
  376. package/dist/lifecycle/receipt-plan.js +192 -0
  377. package/dist/lifecycle/release-ledger.js +155 -0
  378. package/dist/lifecycle/release-read.js +64 -0
  379. package/dist/lifecycle/replay.js +193 -0
  380. package/dist/lifecycle/rollback.js +102 -0
  381. package/dist/lifecycle/run-ledger.js +183 -0
  382. package/dist/lifecycle/scenario-eval.js +204 -0
  383. package/dist/lifecycle/scenario.js +214 -0
  384. package/dist/lifecycle/snapshot.js +239 -0
  385. package/dist/lifecycle/status.js +447 -0
  386. package/dist/lifecycle/symptoms.js +117 -0
  387. package/dist/lifecycle/teardown.js +255 -0
  388. package/dist/lifecycle/types.js +1 -0
  389. package/dist/lifecycle/unobserved-gate.js +33 -0
  390. package/dist/lifecycle/wave-plans.js +68 -0
  391. package/dist/lifecycle/work-item-id.js +36 -0
  392. package/dist/lifecycle/work-lease.js +393 -0
  393. package/dist/lint/component-checks.js +87 -0
  394. package/dist/lint/config.js +483 -0
  395. package/dist/lint/declarative.js +122 -0
  396. package/dist/lint/discover.d.ts.map +1 -1
  397. package/dist/lint/discover.js +138 -0
  398. package/dist/lint/engine.js +246 -0
  399. package/dist/lint/knowledge-checks.js +64 -0
  400. package/dist/lint/named-checks.js +22 -0
  401. package/dist/lint/output-checks.js +87 -0
  402. package/dist/lint/output-docs.js +163 -0
  403. package/dist/lint/parser.js +33 -0
  404. package/dist/lint/pipeline-change-gate.js +70 -0
  405. package/dist/lint/policy-import.d.ts +1 -1
  406. package/dist/lint/policy-import.d.ts.map +1 -1
  407. package/dist/lint/policy-import.js +62 -0
  408. package/dist/lint/policy-sandbox.js +86 -0
  409. package/dist/lint/policy.js +122 -0
  410. package/dist/lint/post-synth.js +87 -0
  411. package/dist/lint/presets/relaxed.json +26 -0
  412. package/dist/lint/presets/strict.json +24 -24
  413. package/dist/lint/receipt-checks.js +83 -0
  414. package/dist/lint/rule-loader.d.ts.map +1 -1
  415. package/dist/lint/rule-loader.js +89 -0
  416. package/dist/lint/rule-registry.js +86 -0
  417. package/dist/lint/rule.js +1 -0
  418. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
  419. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
  420. package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
  421. package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
  422. package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
  423. package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
  424. package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
  425. package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
  426. package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
  427. package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
  428. package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
  429. package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
  430. package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
  431. package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
  432. package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
  433. package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
  434. package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
  435. package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
  436. package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
  437. package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
  438. package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
  439. package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
  440. package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
  441. package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
  442. package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
  443. package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
  444. package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
  445. package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
  446. package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
  447. package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
  448. package/dist/lint/rules/comp/index.js +33 -0
  449. package/dist/lint/rules/comp/support.js +129 -0
  450. package/dist/lint/rules/composite-scope.js +51 -0
  451. package/dist/lint/rules/cor017-composite-name-match.js +93 -0
  452. package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
  453. package/dist/lint/rules/cor021-env-literal-name.js +100 -0
  454. package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
  455. package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
  456. package/dist/lint/rules/declarable-naming-convention.js +62 -0
  457. package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
  458. package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
  459. package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
  460. package/dist/lint/rules/evl004-spread-non-const.js +94 -0
  461. package/dist/lint/rules/evl005-resource-block-body.js +41 -0
  462. package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
  463. package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
  464. package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
  465. package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
  466. package/dist/lint/rules/export-required.js +115 -0
  467. package/dist/lint/rules/file-declarable-limit.js +88 -0
  468. package/dist/lint/rules/flat-declarations.js +62 -0
  469. package/dist/lint/rules/index.js +90 -0
  470. package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
  471. package/dist/lint/rules/no-redundant-type-import.js +76 -0
  472. package/dist/lint/rules/no-redundant-value-cast.js +41 -0
  473. package/dist/lint/rules/no-string-ref.js +59 -0
  474. package/dist/lint/rules/no-unused-declarable-import.js +75 -0
  475. package/dist/lint/rules/no-unused-declarable.js +142 -0
  476. package/dist/lint/rules/op/index.js +28 -0
  477. package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
  478. package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
  479. package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
  480. package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
  481. package/dist/lint/rules/op/support.js +11 -0
  482. package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
  483. package/dist/lint/rules/property-kind.js +56 -0
  484. package/dist/lint/rules/single-concern-file.js +71 -0
  485. package/dist/lint/rules/sys001-no-literal-key.js +60 -0
  486. package/dist/lint/selectors.js +168 -0
  487. package/dist/lint/suppressions.js +129 -0
  488. package/dist/lint/typescript.js +17 -0
  489. package/dist/live-endpoint.js +113 -0
  490. package/dist/live-read-session.js +76 -0
  491. package/dist/lsp/lexicon-providers.js +163 -0
  492. package/dist/lsp/types.js +5 -0
  493. package/dist/managed-fields.js +293 -0
  494. package/dist/mcp/types.js +4 -0
  495. package/dist/notify-verify.js +0 -1
  496. package/dist/notify.js +0 -1
  497. package/dist/notify.schema.json +72 -0
  498. package/dist/observation.js +266 -0
  499. package/dist/okf-read.js +134 -0
  500. package/dist/okf.js +275 -0
  501. package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
  502. package/dist/op/activities/activity-contracts.js +313 -0
  503. package/dist/op/activities/apply.js +582 -0
  504. package/dist/op/activities/build.js +18 -0
  505. package/dist/op/activities/change-coverage.js +40 -0
  506. package/dist/op/activities/change-set.js +64 -0
  507. package/dist/op/activities/converge.js +492 -0
  508. package/dist/op/activities/decide.js +211 -0
  509. package/dist/op/activities/env-teardown.js +110 -0
  510. package/dist/op/activities/factory.js +591 -0
  511. package/dist/op/activities/forge-pull-request.js +82 -0
  512. package/dist/op/activities/gh-host.js +78 -0
  513. package/dist/op/activities/guard-validate.js +165 -0
  514. package/dist/op/activities/http-check.js +40 -0
  515. package/dist/op/activities/index.js +59 -0
  516. package/dist/op/activities/lexicon-upgrade.js +629 -0
  517. package/dist/op/activities/lifecycle.js +109 -0
  518. package/dist/op/activities/pipeline-audit.js +147 -0
  519. package/dist/op/activities/policy.js +26 -0
  520. package/dist/op/activities/predict-behaviour.js +341 -0
  521. package/dist/op/activities/propose-upgrade.js +165 -0
  522. package/dist/op/activities/reconcile.js +997 -0
  523. package/dist/op/activities/shell.js +118 -0
  524. package/dist/op/activities/source-release.js +97 -0
  525. package/dist/op/activities/source-rollback.js +165 -0
  526. package/dist/op/activities/teardown.js +17 -0
  527. package/dist/op/activities/util.js +6 -0
  528. package/dist/op/activities/wait.js +51 -0
  529. package/dist/op/activities/work-evidence.js +35 -0
  530. package/dist/op/activities/workflow-audit.js +133 -0
  531. package/dist/op/activity-contract-registry.js +106 -0
  532. package/dist/op/activity-contract.js +232 -0
  533. package/dist/op/activity-failure.js +31 -0
  534. package/dist/op/activity-profiles.js +129 -0
  535. package/dist/op/activity-registry.js +105 -0
  536. package/dist/op/activity-runtime.js +28 -0
  537. package/dist/op/builders.js +801 -0
  538. package/dist/op/change-signal.js +118 -0
  539. package/dist/op/composites/apply-op.js +151 -0
  540. package/dist/op/composites/behaviour-op.js +65 -0
  541. package/dist/op/composites/converge-op.js +141 -0
  542. package/dist/op/composites/index.js +19 -0
  543. package/dist/op/composites/lexicon-upgrade-op.js +107 -0
  544. package/dist/op/composites/pipeline-audit-op.js +50 -0
  545. package/dist/op/composites/reconcile-op.js +84 -0
  546. package/dist/op/composites/watch-op.js +69 -0
  547. package/dist/op/composites/workflow-audit-op.js +57 -0
  548. package/dist/op/converge-rule.js +205 -0
  549. package/dist/op/cron.js +146 -0
  550. package/dist/op/decide-backend.js +181 -0
  551. package/dist/op/decide-config.js +68 -0
  552. package/dist/op/decide-read-inputs.js +141 -0
  553. package/dist/op/discover.d.ts.map +1 -1
  554. package/dist/op/discover.js +213 -0
  555. package/dist/op/duration.js +21 -0
  556. package/dist/op/emulator-freshness.js +80 -0
  557. package/dist/op/emulator-lifecycle.js +269 -0
  558. package/dist/op/factory.js +83 -0
  559. package/dist/op/gate-approval.js +172 -0
  560. package/dist/op/gate-name.js +86 -0
  561. package/dist/op/gate-plan-context.js +167 -0
  562. package/dist/op/gate-point-run.js +67 -0
  563. package/dist/op/gate-point.js +111 -0
  564. package/dist/op/gate-resume-plan.js +155 -0
  565. package/dist/op/gate-resume.js +31 -0
  566. package/dist/op/gate-review.js +290 -0
  567. package/dist/op/gate-run-locator.js +85 -0
  568. package/dist/op/gate-summary.js +100 -0
  569. package/dist/op/gate-wait.js +56 -0
  570. package/dist/op/gate.js +449 -0
  571. package/dist/op/generate-pipeline.js +124 -0
  572. package/dist/op/index.js +51 -0
  573. package/dist/op/lifecycle-receipt-store.js +45 -0
  574. package/dist/op/local-executor.js +1164 -0
  575. package/dist/op/local-output.js +140 -0
  576. package/dist/op/op-ir.js +317 -0
  577. package/dist/op/op-verb-class.js +131 -0
  578. package/dist/op/op-waves-notify.js +136 -0
  579. package/dist/op/op-waves-run.d.ts +1 -1
  580. package/dist/op/op-waves-run.d.ts.map +1 -1
  581. package/dist/op/op-waves-run.js +1657 -0
  582. package/dist/op/op-waves.js +409 -0
  583. package/dist/op/operator.js +743 -0
  584. package/dist/op/receipt-store.js +94 -0
  585. package/dist/op/resource.js +23 -0
  586. package/dist/op/run-context.js +28 -0
  587. package/dist/op/run-live.js +256 -0
  588. package/dist/op/runtime.js +21 -0
  589. package/dist/op/runtimes/local.js +195 -0
  590. package/dist/op/source-archive.js +131 -0
  591. package/dist/op/step-output-ref.js +397 -0
  592. package/dist/op/steward-beside.js +169 -0
  593. package/dist/op/steward-points.js +138 -0
  594. package/dist/op/steward-turn.js +59 -0
  595. package/dist/op/steward.js +317 -0
  596. package/dist/op/types.js +25 -0
  597. package/dist/op/work-lease-decl.js +81 -0
  598. package/dist/op/work-lease-run.js +393 -0
  599. package/dist/override-gate.js +284 -0
  600. package/dist/owner-chain.js +74 -0
  601. package/dist/ownership.js +92 -0
  602. package/dist/params.js +61 -0
  603. package/dist/plan-summary.js +711 -0
  604. package/dist/point-decision.js +211 -0
  605. package/dist/pr-forge.js +810 -0
  606. package/dist/pr-loop.js +203 -0
  607. package/dist/project-codegen.js +191 -0
  608. package/dist/project-root.js +74 -0
  609. package/dist/project-validation.js +50 -0
  610. package/dist/provenance.js +157 -0
  611. package/dist/pseudo-parameter.js +40 -0
  612. package/dist/reconcile.js +450 -0
  613. package/dist/resource-attributes.js +33 -0
  614. package/dist/runtime-adapter.js +77 -0
  615. package/dist/runtime.js +66 -0
  616. package/dist/secret-materialization.js +153 -0
  617. package/dist/secret-provenance.js +250 -0
  618. package/dist/serializer-walker.js +112 -0
  619. package/dist/serializer.js +1 -0
  620. package/dist/sort.js +45 -0
  621. package/dist/stack-output.js +115 -0
  622. package/dist/telemetry-attribution.js +149 -0
  623. package/dist/terraform/__fixtures__/build-graph.js +63 -0
  624. package/dist/terraform/adopt-state.js +40 -0
  625. package/dist/terraform/aws-resources.js +384 -0
  626. package/dist/terraform/bridge.js +204 -0
  627. package/dist/terraform/carve-provider.js +155 -0
  628. package/dist/terraform/carve.js +138 -0
  629. package/dist/terraform/data-source-shape.js +57 -0
  630. package/dist/terraform/emit-source.js +36 -0
  631. package/dist/terraform/excise.js +123 -0
  632. package/dist/terraform/graduate.js +128 -0
  633. package/dist/terraform/graph.js +435 -0
  634. package/dist/terraform/hcl2json.js +60 -0
  635. package/dist/terraform/manifest.js +149 -0
  636. package/dist/terraform/parse.js +81 -0
  637. package/dist/terraform/providers/aws.js +146 -0
  638. package/dist/terraform/providers/gcp.js +294 -0
  639. package/dist/terraform/providers/index.js +17 -0
  640. package/dist/terraform/providers/kubernetes.js +253 -0
  641. package/dist/terraform/score.js +151 -0
  642. package/dist/terraform/state.js +67 -0
  643. package/dist/terraform/tier-map.js +74 -0
  644. package/dist/terraform/types.js +13 -0
  645. package/dist/terraform/unified-diff.js +132 -0
  646. package/dist/testing.js +295 -0
  647. package/dist/toml-emit.js +153 -0
  648. package/dist/toml-parse.js +355 -0
  649. package/dist/toml-utils.js +60 -0
  650. package/dist/toml.js +428 -0
  651. package/dist/ts-loader.d.ts +46 -0
  652. package/dist/ts-loader.d.ts.map +1 -0
  653. package/dist/ts-loader.js +103 -0
  654. package/dist/types.js +1 -0
  655. package/dist/utils.js +61 -0
  656. package/dist/validation.js +20 -0
  657. package/dist/vendor/js-yaml-load.js +1662 -0
  658. package/dist/workspace/__fixtures__/contract-repo.js +103 -0
  659. package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
  660. package/dist/workspace/__fixtures__/sessions.js +91 -0
  661. package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
  662. package/dist/workspace/agent-cli.js +99 -0
  663. package/dist/workspace/agent.schema.json +390 -0
  664. package/dist/workspace/answers-ledger.js +89 -0
  665. package/dist/workspace/box-cli.js +142 -0
  666. package/dist/workspace/box-factory-write.js +196 -0
  667. package/dist/workspace/box-factory-write.schema.json +342 -0
  668. package/dist/workspace/box-factory.js +88 -0
  669. package/dist/workspace/box-intent.js +126 -0
  670. package/dist/workspace/box-isolation.js +169 -0
  671. package/dist/workspace/box-listing-write.schema.json +204 -0
  672. package/dist/workspace/box-listing.js +298 -0
  673. package/dist/workspace/box-publish.js +352 -0
  674. package/dist/workspace/box-publish.schema.json +498 -0
  675. package/dist/workspace/box-services.js +39 -0
  676. package/dist/workspace/broker-protocol.js +359 -0
  677. package/dist/workspace/broker-protocol.schema.json +228 -0
  678. package/dist/workspace/change-set.schema.json +460 -0
  679. package/dist/workspace/changes-cli.js +56 -0
  680. package/dist/workspace/changes.js +446 -0
  681. package/dist/workspace/changes.schema.json +642 -0
  682. package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
  683. package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
  684. package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
  685. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
  686. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
  687. package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
  688. package/dist/workspace/chant-migrations.js +113 -0
  689. package/dist/workspace/check.schema.json +433 -0
  690. package/dist/workspace/checks/box-isolation.js +62 -0
  691. package/dist/workspace/checks/boxes.js +491 -0
  692. package/dist/workspace/checks/diagrams.js +104 -0
  693. package/dist/workspace/checks/generated.js +419 -0
  694. package/dist/workspace/checks/ledgers.js +212 -0
  695. package/dist/workspace/checks/links.js +191 -0
  696. package/dist/workspace/checks/live.js +100 -0
  697. package/dist/workspace/checks/pipelines.js +188 -0
  698. package/dist/workspace/checks/records.js +169 -0
  699. package/dist/workspace/checks.js +426 -0
  700. package/dist/workspace/ci-green-cli.js +125 -0
  701. package/dist/workspace/ci-green-forge.js +83 -0
  702. package/dist/workspace/ci-green-workflow.js +199 -0
  703. package/dist/workspace/ci-green.js +325 -0
  704. package/dist/workspace/ci-last-green.schema.json +158 -0
  705. package/dist/workspace/compose-graph.js +235 -0
  706. package/dist/workspace/compose-reports.js +146 -0
  707. package/dist/workspace/composites.js +264 -0
  708. package/dist/workspace/composites.schema.json +617 -0
  709. package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
  710. package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
  711. package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
  712. package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
  713. package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
  714. package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
  715. package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
  716. package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
  717. package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
  718. package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
  719. package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
  720. package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
  721. package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
  722. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  723. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  724. package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
  725. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  726. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  727. package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
  728. package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
  729. package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  730. package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  731. package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
  732. package/dist/workspace/conformance/broker.js +736 -0
  733. package/dist/workspace/conformance/index.js +673 -0
  734. package/dist/workspace/conformance/vitest.js +108 -0
  735. package/dist/workspace/conformance/writer.js +1080 -0
  736. package/dist/workspace/decide.js +879 -0
  737. package/dist/workspace/decision-points.schema.json +135 -135
  738. package/dist/workspace/declaration-write-cli.js +74 -0
  739. package/dist/workspace/declaration-write.js +238 -0
  740. package/dist/workspace/declaration.js +938 -0
  741. package/dist/workspace/declaration.schema.json +1413 -1413
  742. package/dist/workspace/declared-kinds.js +106 -0
  743. package/dist/workspace/environments.js +164 -0
  744. package/dist/workspace/evidence.schema.json +279 -0
  745. package/dist/workspace/export-cli.js +185 -0
  746. package/dist/workspace/export.js +499 -0
  747. package/dist/workspace/factory-rules.js +175 -0
  748. package/dist/workspace/generated-files.js +92 -0
  749. package/dist/workspace/glob.js +45 -0
  750. package/dist/workspace/graph-cache.js +352 -0
  751. package/dist/workspace/graph-cli.js +348 -0
  752. package/dist/workspace/graph.schema.json +1338 -0
  753. package/dist/workspace/identity-gate-rule.d.ts +65 -0
  754. package/dist/workspace/identity-gate-rule.d.ts.map +1 -0
  755. package/dist/workspace/identity-gate-rule.js +75 -0
  756. package/dist/workspace/identity.d.ts +4 -2
  757. package/dist/workspace/identity.d.ts.map +1 -1
  758. package/dist/workspace/identity.js +126 -0
  759. package/dist/workspace/import.js +283 -0
  760. package/dist/workspace/init.js +620 -0
  761. package/dist/workspace/intent-cli.js +263 -0
  762. package/dist/workspace/intent-joins.js +201 -0
  763. package/dist/workspace/intent-record.js +352 -0
  764. package/dist/workspace/intent-record.schema.json +864 -0
  765. package/dist/workspace/intent.js +1582 -0
  766. package/dist/workspace/intent.schema.json +2420 -0
  767. package/dist/workspace/json-edit.js +221 -0
  768. package/dist/workspace/jsonc.js +235 -0
  769. package/dist/workspace/kind-readers.js +103 -0
  770. package/dist/workspace/kinds.js +587 -0
  771. package/dist/workspace/lexicon-symbols.js +112 -0
  772. package/dist/workspace/lineage-adopt-cli.js +102 -0
  773. package/dist/workspace/lineage-adopt.js +360 -0
  774. package/dist/workspace/lineage-check.js +282 -0
  775. package/dist/workspace/lineage-cli.js +121 -0
  776. package/dist/workspace/lineage-hash-index.js +284 -0
  777. package/dist/workspace/lineage-init.js +507 -0
  778. package/dist/workspace/lineage-lock.js +387 -0
  779. package/dist/workspace/lineage-merge.js +45 -0
  780. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  781. package/dist/workspace/lineage-migrations.js +329 -0
  782. package/dist/workspace/lineage-provenance.js +36 -0
  783. package/dist/workspace/lineage-update.js +138 -0
  784. package/dist/workspace/lineage-upgrade-cli.js +131 -0
  785. package/dist/workspace/lineage-upgrade.js +889 -0
  786. package/dist/workspace/lineage-vendor.js +171 -0
  787. package/dist/workspace/lineage-version.js +128 -0
  788. package/dist/workspace/lineage-versions.js +275 -0
  789. package/dist/workspace/links.js +330 -0
  790. package/dist/workspace/ls-generated.js +95 -0
  791. package/dist/workspace/ls.js +277 -0
  792. package/dist/workspace/ls.schema.json +333 -0
  793. package/dist/workspace/member-commands.js +508 -0
  794. package/dist/workspace/member-handles.js +216 -0
  795. package/dist/workspace/member-pipeline.js +258 -0
  796. package/dist/workspace/member-run.js +117 -0
  797. package/dist/workspace/member-write.schema.json +193 -0
  798. package/dist/workspace/nested-graph.js +156 -0
  799. package/dist/workspace/nesting.js +38 -0
  800. package/dist/workspace/patch.js +301 -0
  801. package/dist/workspace/patch.schema.json +321 -0
  802. package/dist/workspace/pin-cli.js +55 -0
  803. package/dist/workspace/pin-integrity.js +100 -0
  804. package/dist/workspace/plan-summary.schema.json +155 -0
  805. package/dist/workspace/point-answer.schema.json +129 -129
  806. package/dist/workspace/points-cli.js +291 -0
  807. package/dist/workspace/points-write.schema.json +660 -0
  808. package/dist/workspace/points.js +521 -0
  809. package/dist/workspace/points.schema.json +916 -0
  810. package/dist/workspace/pr-report.schema.json +108 -0
  811. package/dist/workspace/principal-classes.d.ts +3 -14
  812. package/dist/workspace/principal-classes.d.ts.map +1 -1
  813. package/dist/workspace/principal-classes.js +245 -0
  814. package/dist/workspace/reason-codes.js +326 -0
  815. package/dist/workspace/record-assets.js +151 -0
  816. package/dist/workspace/record-decided.js +105 -0
  817. package/dist/workspace/record-sessions.js +96 -0
  818. package/dist/workspace/record-source.js +114 -0
  819. package/dist/workspace/records-amend.schema.json +284 -0
  820. package/dist/workspace/records-checkout.js +76 -0
  821. package/dist/workspace/records-cli.js +707 -0
  822. package/dist/workspace/records-close.js +116 -0
  823. package/dist/workspace/records-close.schema.json +278 -0
  824. package/dist/workspace/records-new.schema.json +202 -0
  825. package/dist/workspace/records-review.schema.json +367 -0
  826. package/dist/workspace/records-since.js +317 -0
  827. package/dist/workspace/records-since.schema.json +218 -0
  828. package/dist/workspace/records-write.js +1229 -0
  829. package/dist/workspace/records.js +1345 -0
  830. package/dist/workspace/records.schema.json +604 -0
  831. package/dist/workspace/reference-kinds/app/package.json +10 -0
  832. package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  833. package/dist/workspace/returns.js +303 -0
  834. package/dist/workspace/root-refusal.js +75 -0
  835. package/dist/workspace/run-statement.schema.json +622 -0
  836. package/dist/workspace/runs-cli.js +584 -0
  837. package/dist/workspace/runs-write.schema.json +994 -0
  838. package/dist/workspace/runs.js +708 -0
  839. package/dist/workspace/runs.schema.json +1257 -0
  840. package/dist/workspace/runtimes.js +76 -0
  841. package/dist/workspace/session-kinds.js +83 -0
  842. package/dist/workspace/signers.schema.json +206 -0
  843. package/dist/workspace/source-block.js +125 -0
  844. package/dist/workspace/squash.js +177 -0
  845. package/dist/workspace/status-gates.js +162 -0
  846. package/dist/workspace/status-stewards.js +330 -0
  847. package/dist/workspace/status.js +514 -0
  848. package/dist/workspace/status.schema.json +998 -0
  849. package/dist/workspace/steward-index.js +191 -0
  850. package/dist/workspace/symbols.js +188 -0
  851. package/dist/workspace/template-manifest.js +227 -0
  852. package/dist/workspace/template-pins.js +115 -0
  853. package/dist/workspace/trailer-joins.js +65 -0
  854. package/dist/workspace/trailers.js +111 -0
  855. package/dist/workspace/tree.js +136 -0
  856. package/dist/workspace/trust/attestor.js +63 -0
  857. package/dist/workspace/trust/dsse.js +108 -0
  858. package/dist/workspace/trust/evidence-cli.js +175 -0
  859. package/dist/workspace/trust/evidence.js +161 -0
  860. package/dist/workspace/trust/gate-seal.js +226 -0
  861. package/dist/workspace/trust/policy.js +190 -0
  862. package/dist/workspace/trust/provenance.js +180 -0
  863. package/dist/workspace/trust/rotation.js +298 -0
  864. package/dist/workspace/trust/run-commits.js +101 -0
  865. package/dist/workspace/trust/run-statement.js +182 -0
  866. package/dist/workspace/trust/seal.js +272 -0
  867. package/dist/workspace/trust/signers-cli.js +152 -0
  868. package/dist/workspace/trust/ssh-commit.js +178 -0
  869. package/dist/workspace/trust/test-repo.js +118 -0
  870. package/dist/workspace/trust/trust-files.js +193 -0
  871. package/dist/workspace/trust/verify-cli.js +63 -0
  872. package/dist/workspace/trust/verify.js +192 -0
  873. package/dist/workspace/which-chant.js +141 -0
  874. package/dist/workspace/wip-cli.js +95 -0
  875. package/dist/workspace/wip-write.schema.json +504 -0
  876. package/dist/workspace/wip.js +631 -0
  877. package/dist/workspace/wip.schema.json +334 -0
  878. package/dist/workspace/work-cli.js +448 -0
  879. package/dist/workspace/work-evidence.js +122 -0
  880. package/dist/workspace/work-evidence.schema.json +222 -0
  881. package/dist/workspace/work-history.schema.json +421 -0
  882. package/dist/workspace/work-lease.schema.json +246 -0
  883. package/dist/workspace/work-size.js +77 -0
  884. package/dist/workspace/work.js +283 -0
  885. package/dist/workspace/workspace-kinds.schema.json +259 -259
  886. package/dist/workspace/workspace-principals.schema.json +53 -53
  887. package/dist/workspace/write-lock-cli.js +105 -0
  888. package/dist/workspace/write-lock.js +424 -0
  889. package/dist/workspace/write-lock.schema.json +172 -0
  890. package/dist/workspace/write-scope.js +484 -0
  891. package/dist/yaml.js +459 -0
  892. package/package.json +2 -2
  893. package/src/cli/commands/check-lexicon-plugin.ts +2 -0
  894. package/src/cli/commands/lint.ts +36 -6
  895. package/src/cli/commands/migrate.ts +2 -0
  896. package/src/cli/compiled-cli.e2e.test.ts +165 -0
  897. package/src/cli/main.ts +121 -27
  898. package/src/cli/mcp/workspace-tools.ts +1 -1
  899. package/src/codegen/pinned-upgrade.ts +2 -0
  900. package/src/components/discover.ts +2 -0
  901. package/src/components/sandbox/driver.ts +3 -1
  902. package/src/config-import.ts +3 -0
  903. package/src/discovery/fold-import.ts +23 -14
  904. package/src/discovery/import.ts +2 -0
  905. package/src/discovery/sandbox/driver.ts +3 -1
  906. package/src/gate-decision-bundle.test.ts +3 -2
  907. package/src/gate-decision-identity.test.ts +176 -0
  908. package/src/gate-decision.ts +100 -22
  909. package/src/lexicon-module.ts +3 -0
  910. package/src/lifecycle/gate-ledger.ts +8 -0
  911. package/src/lint/config.ts +1 -1
  912. package/src/lint/discover.ts +28 -8
  913. package/src/lint/policy-import.ts +4 -1
  914. package/src/lint/rule-loader.ts +2 -0
  915. package/src/op/discover.ts +3 -0
  916. package/src/op/op-waves-point.test.ts +1 -0
  917. package/src/op/op-waves-run.ts +5 -4
  918. package/src/op/op-waves.test.ts +14 -0
  919. package/src/ts-loader.test.ts +23 -0
  920. package/src/ts-loader.ts +122 -0
  921. package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
  922. package/src/workspace/declaration.ts +1 -1
  923. package/src/workspace/identity-gate-rule.ts +109 -0
  924. package/src/workspace/identity.ts +8 -18
  925. package/src/workspace/kinds.ts +1 -1
  926. package/src/workspace/lineage-migrations.ts +2 -0
  927. package/src/workspace/points.ts +1 -1
  928. package/src/workspace/principal-classes.ts +5 -30
@@ -0,0 +1,79 @@
1
+ import { watch } from "fs";
2
+ import { relative } from "path";
3
+ const DEFAULT_OPTIONS = {
4
+ debounceMs: 300,
5
+ extensions: [".ts"],
6
+ ignoreDirs: ["node_modules", ".chant"],
7
+ };
8
+ /**
9
+ * Check if a file path should be watched
10
+ */
11
+ export function shouldWatch(filePath, options) {
12
+ // Ignore dotdirs
13
+ const parts = filePath.split("/");
14
+ for (const part of parts) {
15
+ if (part.startsWith(".") && part.length > 1)
16
+ return false;
17
+ if (options.ignoreDirs.includes(part))
18
+ return false;
19
+ }
20
+ // Ignore test/spec files
21
+ if (filePath.endsWith(".test.ts") || filePath.endsWith(".spec.ts"))
22
+ return false;
23
+ // Check extension
24
+ return options.extensions.some((ext) => filePath.endsWith(ext));
25
+ }
26
+ /**
27
+ * Format a timestamp as HH:MM:SS
28
+ */
29
+ export function formatTimestamp(date = new Date()) {
30
+ const h = String(date.getHours()).padStart(2, "0");
31
+ const m = String(date.getMinutes()).padStart(2, "0");
32
+ const s = String(date.getSeconds()).padStart(2, "0");
33
+ return `${h}:${m}:${s}`;
34
+ }
35
+ /**
36
+ * Format changed files for display (relative paths, truncated if many)
37
+ */
38
+ export function formatChangedFiles(files, basePath, maxShow = 3) {
39
+ const relative_paths = files.map((f) => relative(basePath, f));
40
+ if (relative_paths.length <= maxShow) {
41
+ return relative_paths.join(", ");
42
+ }
43
+ const shown = relative_paths.slice(0, maxShow);
44
+ return `${shown.join(", ")} (+${relative_paths.length - maxShow} more)`;
45
+ }
46
+ /**
47
+ * Watch a directory for file changes with debouncing.
48
+ * Returns a cleanup function to stop watching.
49
+ */
50
+ export function watchDirectory(path, callback, options) {
51
+ const opts = { ...DEFAULT_OPTIONS, ...options };
52
+ let pendingFiles = new Set();
53
+ let timer = null;
54
+ const watcher = watch(path, { recursive: true }, (_event, filename) => {
55
+ if (!filename)
56
+ return;
57
+ if (!shouldWatch(filename, opts))
58
+ return;
59
+ // Collect the full path
60
+ const fullPath = `${path}/${filename}`;
61
+ pendingFiles.add(fullPath);
62
+ // Reset the debounce timer
63
+ if (timer)
64
+ clearTimeout(timer);
65
+ timer = setTimeout(() => {
66
+ const files = [...pendingFiles];
67
+ pendingFiles = new Set();
68
+ timer = null;
69
+ if (files.length > 0) {
70
+ callback(files);
71
+ }
72
+ }, opts.debounceMs);
73
+ });
74
+ return () => {
75
+ if (timer)
76
+ clearTimeout(timer);
77
+ watcher.close();
78
+ };
79
+ }
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Bound the set of generated property-type interfaces a lexicon emits.
3
+ *
4
+ * Cloud provider schemas (ARM, CloudFormation, …) embed a named definition for
5
+ * every nested object. Fully expanding all of them per-resource produces huge
6
+ * `.d.ts` declarations (azure was ~273MB — see #438). This helper keeps only
7
+ * the property types reachable from a resource's top-level properties within a
8
+ * depth bound, plus a curated force-keep set; references that fall outside the
9
+ * kept set are rewritten to `Record<string, unknown>`. Enum references are
10
+ * preserved. The input property refs are mutated in place. (#438, #440)
11
+ */
12
+ function escapeRegExp(s) {
13
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
14
+ }
15
+ /** Extract `${shortName}_Ident` type-reference tokens from a tsType string. */
16
+ function referencedTypeNames(tsType, shortName) {
17
+ const re = new RegExp("\\b" + escapeRegExp(shortName) + "_[A-Za-z0-9_]+", "g");
18
+ return tsType.match(re) ?? [];
19
+ }
20
+ /**
21
+ * Filter `propertyTypes` to the bounded set and loosen out-of-set references.
22
+ * Mutates the `tsType` of `resourceProps` and retained property types; returns
23
+ * the retained property types.
24
+ */
25
+ export function boundPropertyTypes(shortName, resourceProps, propertyTypes, enumNames, options) {
26
+ const { maxDepth } = options;
27
+ const curated = options.curatedDefs ? [...options.curatedDefs] : [];
28
+ const byName = new Map(propertyTypes.map((pt) => [pt.name, pt]));
29
+ const reached = new Set();
30
+ const queue = [];
31
+ const seed = (tsType, depth) => {
32
+ for (const n of referencedTypeNames(tsType, shortName)) {
33
+ if (byName.has(n) && !reached.has(n)) {
34
+ reached.add(n);
35
+ queue.push({ name: n, depth });
36
+ }
37
+ }
38
+ };
39
+ for (const p of resourceProps)
40
+ seed(p.tsType, 1);
41
+ // Force-keep curated property types (depth-1 seeds), matched by substring so
42
+ // schema variant names (e.g. "SecurityRulePropertiesFormat") are retained.
43
+ if (curated.length > 0) {
44
+ for (const pt of propertyTypes) {
45
+ if (!reached.has(pt.name) && curated.some((c) => pt.specType.includes(c))) {
46
+ reached.add(pt.name);
47
+ queue.push({ name: pt.name, depth: 1 });
48
+ }
49
+ }
50
+ }
51
+ while (queue.length) {
52
+ const { name, depth } = queue.shift();
53
+ if (depth >= maxDepth)
54
+ continue; // do not expand children beyond the cap
55
+ const pt = byName.get(name);
56
+ if (!pt)
57
+ continue;
58
+ for (const p of pt.properties)
59
+ seed(p.tsType, depth + 1);
60
+ }
61
+ // Rewrite references to property types we are not emitting (keep enums).
62
+ const loosen = (tsType) => {
63
+ let out = tsType;
64
+ for (const n of referencedTypeNames(tsType, shortName)) {
65
+ if (reached.has(n) || enumNames.has(n) || !byName.has(n))
66
+ continue;
67
+ out = out.replace(new RegExp("\\b" + escapeRegExp(n) + "\\b", "g"), "Record<string, unknown>");
68
+ }
69
+ return out;
70
+ };
71
+ for (const p of resourceProps)
72
+ p.tsType = loosen(p.tsType);
73
+ const retained = [];
74
+ for (const pt of propertyTypes) {
75
+ if (!reached.has(pt.name))
76
+ continue;
77
+ for (const p of pt.properties)
78
+ p.tsType = loosen(p.tsType);
79
+ retained.push(pt);
80
+ }
81
+ return retained;
82
+ }
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Coverage analysis for lexicon artifacts.
3
+ *
4
+ * Analyzes a generated lexicon JSON to measure coverage across dimensions:
5
+ * property constraints, lifecycle attributes, return attributes, and extension constraints.
6
+ */
7
+ /**
8
+ * Compute coverage from lexicon JSON content.
9
+ */
10
+ export function computeCoverage(lexiconJSON) {
11
+ const entries = JSON.parse(lexiconJSON);
12
+ // Deduplicate: multiple TS names may map to the same resource type
13
+ const seen = new Set();
14
+ const resources = [];
15
+ for (const [name, entry] of Object.entries(entries)) {
16
+ if (entry.kind !== "resource")
17
+ continue;
18
+ if (seen.has(entry.resourceType))
19
+ continue;
20
+ seen.add(entry.resourceType);
21
+ resources.push({
22
+ name,
23
+ resourceType: entry.resourceType,
24
+ hasPropertyConstraints: !!(entry.propertyConstraints && Object.keys(entry.propertyConstraints).length > 0),
25
+ hasLifecycle: !!(entry.createOnly?.length || entry.writeOnly?.length),
26
+ hasAttrs: !!(entry.attrs && Object.keys(entry.attrs).length > 0),
27
+ hasConstraints: !!(entry.constraints && entry.constraints.length > 0),
28
+ });
29
+ }
30
+ const count = resources.length;
31
+ if (count === 0) {
32
+ return {
33
+ resourceCount: 0,
34
+ propertyPct: 0,
35
+ lifecyclePct: 0,
36
+ attrPct: 0,
37
+ constraintPct: 0,
38
+ resources: [],
39
+ };
40
+ }
41
+ const propertyCount = resources.filter((r) => r.hasPropertyConstraints).length;
42
+ const lifecycleCount = resources.filter((r) => r.hasLifecycle).length;
43
+ const attrCount = resources.filter((r) => r.hasAttrs).length;
44
+ const constraintCount = resources.filter((r) => r.hasConstraints).length;
45
+ return {
46
+ resourceCount: count,
47
+ propertyPct: Math.round((propertyCount / count) * 100),
48
+ lifecyclePct: Math.round((lifecycleCount / count) * 100),
49
+ attrPct: Math.round((attrCount / count) * 100),
50
+ constraintPct: Math.round((constraintCount / count) * 100),
51
+ resources,
52
+ };
53
+ }
54
+ /**
55
+ * Overall coverage percentage (average of all dimensions).
56
+ */
57
+ export function overallPct(report) {
58
+ return Math.round((report.propertyPct + report.lifecyclePct + report.attrPct + report.constraintPct) / 4);
59
+ }
60
+ /**
61
+ * Format a human-readable coverage summary.
62
+ */
63
+ export function formatSummary(report) {
64
+ const lines = [];
65
+ lines.push(`Coverage Report: ${report.resourceCount} resources`);
66
+ lines.push(` Property constraints: ${report.propertyPct}%`);
67
+ lines.push(` Lifecycle (createOnly/writeOnly): ${report.lifecyclePct}%`);
68
+ lines.push(` Return attributes: ${report.attrPct}%`);
69
+ lines.push(` Extension constraints: ${report.constraintPct}%`);
70
+ lines.push(` Overall: ${overallPct(report)}%`);
71
+ return lines.join("\n");
72
+ }
73
+ /**
74
+ * Check coverage report against thresholds.
75
+ */
76
+ export function checkThresholds(report, thresholds) {
77
+ const violations = [];
78
+ if (thresholds.minPropertyPct !== undefined && report.propertyPct < thresholds.minPropertyPct) {
79
+ violations.push(`Property constraints: ${report.propertyPct}% < ${thresholds.minPropertyPct}% minimum`);
80
+ }
81
+ if (thresholds.minLifecyclePct !== undefined && report.lifecyclePct < thresholds.minLifecyclePct) {
82
+ violations.push(`Lifecycle: ${report.lifecyclePct}% < ${thresholds.minLifecyclePct}% minimum`);
83
+ }
84
+ if (thresholds.minAttrPct !== undefined && report.attrPct < thresholds.minAttrPct) {
85
+ violations.push(`Return attributes: ${report.attrPct}% < ${thresholds.minAttrPct}% minimum`);
86
+ }
87
+ if (thresholds.minConstraintPct !== undefined && report.constraintPct < thresholds.minConstraintPct) {
88
+ violations.push(`Extension constraints: ${report.constraintPct}% < ${thresholds.minConstraintPct}% minimum`);
89
+ }
90
+ if (thresholds.minOverallPct !== undefined && overallPct(report) < thresholds.minOverallPct) {
91
+ violations.push(`Overall: ${overallPct(report)}% < ${thresholds.minOverallPct}% minimum`);
92
+ }
93
+ return { ok: violations.length === 0, violations };
94
+ }
95
+ /**
96
+ * Format verbose per-resource coverage details.
97
+ */
98
+ export function formatVerbose(report) {
99
+ const lines = [formatSummary(report), ""];
100
+ const sorted = [...report.resources].sort((a, b) => a.name.localeCompare(b.name));
101
+ for (const r of sorted) {
102
+ const missing = [];
103
+ if (!r.hasPropertyConstraints)
104
+ missing.push("property-constraints");
105
+ if (!r.hasLifecycle)
106
+ missing.push("lifecycle");
107
+ if (!r.hasAttrs)
108
+ missing.push("attrs");
109
+ if (!r.hasConstraints)
110
+ missing.push("constraints");
111
+ if (missing.length === 0) {
112
+ lines.push(` ${r.name} (${r.resourceType}): full coverage`);
113
+ }
114
+ else {
115
+ lines.push(` ${r.name} (${r.resourceType}): missing ${missing.join(", ")}`);
116
+ }
117
+ }
118
+ return lines.join("\n");
119
+ }
@@ -0,0 +1,60 @@
1
+ /**
2
+ * File marker interpolation and MDX escaping utilities.
3
+ */
4
+ import { readFileSync } from "fs";
5
+ import { join } from "path";
6
+ /** Escape curly braces so MDX doesn't treat them as JSX expressions. */
7
+ export function escapeMdx(text) {
8
+ return text.replace(/\{/g, "\\{").replace(/\}/g, "\\}");
9
+ }
10
+ /**
11
+ * Expand `{{file:path.ts}}` markers in content with fenced code blocks.
12
+ *
13
+ * Supported forms:
14
+ * - `{{file:path.ts}}` — full file
15
+ * - `{{file:path.ts:5-12}}` — lines 5–12 (1-based, inclusive)
16
+ * - `{{file:path.ts|title=custom.ts}}` — override the code block title
17
+ * - `{{file:path.ts:5-12|title=custom.ts}}` — both
18
+ */
19
+ export function expandFileMarkers(content, examplesDir) {
20
+ return content.replace(/\{\{file:([^}]+)\}\}/g, (_match, spec) => {
21
+ // Parse options after |
22
+ let filePart = spec;
23
+ let title;
24
+ const pipeIdx = spec.indexOf("|");
25
+ if (pipeIdx !== -1) {
26
+ filePart = spec.substring(0, pipeIdx);
27
+ const opts = spec.substring(pipeIdx + 1);
28
+ const titleMatch = opts.match(/title=([^\s|]+)/);
29
+ if (titleMatch)
30
+ title = titleMatch[1];
31
+ }
32
+ // Parse line range after :digits-digits at end of filePart
33
+ let lineStart;
34
+ let lineEnd;
35
+ const rangeMatch = filePart.match(/^(.+):(\d+)-(\d+)$/);
36
+ if (rangeMatch) {
37
+ filePart = rangeMatch[1];
38
+ lineStart = parseInt(rangeMatch[2], 10);
39
+ lineEnd = parseInt(rangeMatch[3], 10);
40
+ }
41
+ const filePath = join(examplesDir, filePart);
42
+ let fileContent;
43
+ try {
44
+ fileContent = readFileSync(filePath, "utf-8");
45
+ }
46
+ catch {
47
+ throw new Error(`File marker {{file:${spec}}} — file not found: ${filePath}`);
48
+ }
49
+ // Extract line range if specified
50
+ if (lineStart !== undefined && lineEnd !== undefined) {
51
+ const lines = fileContent.split("\n");
52
+ fileContent = lines.slice(lineStart - 1, lineEnd).join("\n");
53
+ }
54
+ // Determine language from extension
55
+ const ext = filePart.substring(filePart.lastIndexOf(".") + 1);
56
+ const lang = ext === "ts" || ext === "tsx" ? "typescript" : ext;
57
+ const displayTitle = title ?? filePart.substring(filePart.lastIndexOf("/") + 1);
58
+ return `\`\`\`${lang} title="${displayTitle}"\n${fileContent.trimEnd()}\n\`\`\``;
59
+ });
60
+ }
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Authored lexicon doc pages (chant #1731 / #1733).
3
+ *
4
+ * A lexicon's prose lives as `.mdx` files under `lexicons/<name>/docs/pages/`.
5
+ * Each carries a `diataxis` frontmatter field naming its Diátaxis quadrant
6
+ * (https://diataxis.fr). The pipeline expands `{{file:...}}` markers, stamps a
7
+ * provenance marker and writes the result into `src/content/docs/`, and the
8
+ * sidebar is grouped from the field. This replaced two older modes — prose
9
+ * inside `docs.ts` template literals (`extraPages`) and hand-written content
10
+ * pages wired through `sidebarExtra` — removed in chant #1757.
11
+ *
12
+ * Frontmatter recognised here, on top of Starlight's `title` / `description`:
13
+ *
14
+ * - `diataxis`: `tutorial | how-to | reference | explanation`. Required.
15
+ * - `label`: sidebar label; defaults to `title`.
16
+ * - `group`: a nested subgroup label inside the quadrant (e.g. "Vendor Composites").
17
+ * - `order`: number; lower sorts first within its group. Unordered pages follow, by label.
18
+ * - `hidden`: `true` keeps the page out of the sidebar (reachable by URL only).
19
+ *
20
+ * `group` / `order` / `hidden` / `label` are stripped from the written copy so
21
+ * Starlight's schema never sees them; `diataxis` stays, and the generated
22
+ * `content.config.ts` declares it.
23
+ */
24
+ import { existsSync, readdirSync, readFileSync } from "fs";
25
+ import { join } from "path";
26
+ import { expandFileMarkers } from "./docs-file-markers.js";
27
+ export const QUADRANTS = ["tutorial", "how-to", "reference", "explanation"];
28
+ /** Sidebar group label for each quadrant, in display order. */
29
+ export const QUADRANT_LABELS = {
30
+ tutorial: "Tutorials",
31
+ "how-to": "How-to guides",
32
+ reference: "Reference",
33
+ explanation: "Explanation",
34
+ };
35
+ function parseFrontmatter(text, file) {
36
+ if (!text.startsWith("---\n")) {
37
+ throw new Error(`${file}: authored doc page must start with a frontmatter block`);
38
+ }
39
+ const end = text.indexOf("\n---", 4);
40
+ if (end === -1)
41
+ throw new Error(`${file}: unterminated frontmatter`);
42
+ const lines = text.slice(4, end).split("\n");
43
+ const fields = new Map();
44
+ for (const line of lines) {
45
+ const m = line.match(/^([A-Za-z_][\w-]*):\s*(.*)$/);
46
+ if (m)
47
+ fields.set(m[1], m[2].trim());
48
+ }
49
+ // Skip the closing `---` and the newline after it.
50
+ const afterClose = text.indexOf("\n", end + 1);
51
+ const body = afterClose === -1 ? "" : text.slice(afterClose + 1);
52
+ return { fields, lines, body };
53
+ }
54
+ function unquote(v) {
55
+ if ((v.startsWith('"') && v.endsWith('"')) || (v.startsWith("'") && v.endsWith("'"))) {
56
+ try {
57
+ return v.startsWith('"') ? JSON.parse(v) : v.slice(1, -1);
58
+ }
59
+ catch {
60
+ return v.slice(1, -1);
61
+ }
62
+ }
63
+ return v;
64
+ }
65
+ /** Keys this module consumes and removes from the written page. */
66
+ const SIDEBAR_KEYS = new Set(["label", "group", "order", "hidden"]);
67
+ /**
68
+ * Read every authored page under `pagesDir`. Returns an empty list when the
69
+ * directory does not exist, which is every lexicon before it migrates.
70
+ */
71
+ export function readAuthoredPages(config) {
72
+ const pagesDir = config.pagesDir ?? join(config.outDir, "pages");
73
+ if (!existsSync(pagesDir))
74
+ return [];
75
+ const pages = [];
76
+ for (const file of readdirSync(pagesDir).sort()) {
77
+ if (!file.endsWith(".mdx") && !file.endsWith(".md"))
78
+ continue;
79
+ const path = join(pagesDir, file);
80
+ const { fields, lines, body } = parseFrontmatter(readFileSync(path, "utf-8"), path);
81
+ const title = fields.get("title");
82
+ if (!title)
83
+ throw new Error(`${path}: frontmatter needs a title`);
84
+ const quadrant = fields.get("diataxis");
85
+ if (!quadrant) {
86
+ throw new Error(`${path}: frontmatter needs \`diataxis: ${QUADRANTS.join(" | ")}\` (https://diataxis.fr)`);
87
+ }
88
+ if (!QUADRANTS.includes(quadrant)) {
89
+ throw new Error(`${path}: diataxis "${quadrant}" is not one of ${QUADRANTS.join(", ")}`);
90
+ }
91
+ const orderRaw = fields.get("order");
92
+ const order = orderRaw === undefined ? undefined : Number(orderRaw);
93
+ if (order !== undefined && Number.isNaN(order)) {
94
+ throw new Error(`${path}: order must be a number, got "${orderRaw}"`);
95
+ }
96
+ const kept = lines.filter((line) => {
97
+ const key = line.match(/^([A-Za-z_][\w-]*):/)?.[1];
98
+ return !(key && SIDEBAR_KEYS.has(key));
99
+ });
100
+ let content = body;
101
+ if (config.examplesDir)
102
+ content = expandFileMarkers(content, config.examplesDir);
103
+ pages.push({
104
+ file,
105
+ slug: file.replace(/\.mdx?$/, ""),
106
+ label: unquote(fields.get("label") ?? title),
107
+ quadrant: quadrant,
108
+ group: fields.has("group") ? unquote(fields.get("group")) : undefined,
109
+ order,
110
+ hidden: fields.get("hidden") === "true",
111
+ content: ["---", ...kept, "---", "", content].join("\n"),
112
+ });
113
+ }
114
+ return pages;
115
+ }
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Rule scanning and rule page generation for lexicon documentation.
3
+ *
4
+ * Scans lint rule and post-synth check source files to extract metadata,
5
+ * and generates an MDX page listing them.
6
+ */
7
+ import { readFileSync, readdirSync } from "fs";
8
+ import { join } from "path";
9
+ import { escapeMdx } from "./docs-file-markers.js";
10
+ /**
11
+ * Scan lint rule and post-synth check source files to extract metadata.
12
+ * Uses regex to find id, severity, category, and description from source.
13
+ */
14
+ export function scanRules(srcDir) {
15
+ return scanRulesWithSources(srcDir).map((r) => r.meta);
16
+ }
17
+ /**
18
+ * Like {@link scanRules}, but keeps each rule's source text alongside its
19
+ * metadata — the OKF bundle builder (#1060) reads the source to associate a
20
+ * rule with the resource types it mentions.
21
+ */
22
+ export function scanRulesWithSources(srcDir) {
23
+ const rules = [];
24
+ // Scan lint rules
25
+ scanDir(join(srcDir, "lint", "rules"), "lint", rules);
26
+ // Scan post-synth checks
27
+ scanDir(join(srcDir, "lint", "post-synth"), "post-synth", rules);
28
+ return rules;
29
+ }
30
+ function scanDir(dir, type, out) {
31
+ let entries;
32
+ try {
33
+ entries = readdirSync(dir);
34
+ }
35
+ catch {
36
+ return;
37
+ }
38
+ for (const entry of entries) {
39
+ if (!entry.endsWith(".ts"))
40
+ continue;
41
+ if (entry.endsWith(".test.ts"))
42
+ continue;
43
+ if (entry === "index.ts")
44
+ continue;
45
+ // Skip utility files (no rule definitions)
46
+ if (entry === "cf-refs.ts")
47
+ continue;
48
+ let content;
49
+ try {
50
+ content = readFileSync(join(dir, entry), "utf-8");
51
+ }
52
+ catch {
53
+ continue;
54
+ }
55
+ if (type === "lint") {
56
+ // Extract from LintRule objects: id, severity, category
57
+ const idMatch = content.match(/id:\s*"([^"]+)"/);
58
+ const severityMatch = content.match(/severity:\s*"([^"]+)"/);
59
+ const categoryMatch = content.match(/category:\s*"([^"]+)"/);
60
+ if (idMatch) {
61
+ // Try to get description from JSDoc comment
62
+ const descMatch = content.match(new RegExp(`\\*\\s*${idMatch[1]}:\\s*(.+?)\\n`));
63
+ out.push({
64
+ meta: {
65
+ id: idMatch[1],
66
+ severity: severityMatch?.[1] ?? "warning",
67
+ category: categoryMatch?.[1] ?? "general",
68
+ description: descMatch?.[1]?.trim() ??
69
+ extractDescriptionFromComment(content, idMatch[1]),
70
+ type: "lint",
71
+ },
72
+ source: content,
73
+ });
74
+ }
75
+ }
76
+ else {
77
+ // Extract from PostSynthCheck objects: id, description
78
+ const idMatch = content.match(/id:\s*"([^"]+)"/);
79
+ const descMatch = content.match(/description:\s*"((?:[^"\\]|\\.)*)"/);
80
+ if (idMatch) {
81
+ out.push({
82
+ meta: {
83
+ id: idMatch[1],
84
+ severity: "error",
85
+ category: "post-synth",
86
+ description: descMatch ? unescapeStringLiteral(descMatch[1]) : idMatch[1],
87
+ type: "post-synth",
88
+ },
89
+ source: content,
90
+ });
91
+ }
92
+ }
93
+ }
94
+ }
95
+ /**
96
+ * Undo the backslash escaping of a double-quoted JS/TS string literal body
97
+ * captured by a regex like `/description:\s*"((?:[^"\\]|\\.)*)"/` — the
98
+ * capture group still has the source's escape sequences (`\"`, `\\`, `\n`,
99
+ * ...) in it verbatim, so a description written as `"say \"hi\""` would
100
+ * otherwise render in generated docs as `say \"hi\"` instead of `say "hi"`.
101
+ */
102
+ function unescapeStringLiteral(raw) {
103
+ return raw.replace(/\\(.)/g, (_, ch) => {
104
+ switch (ch) {
105
+ case "n":
106
+ return "\n";
107
+ case "t":
108
+ return "\t";
109
+ case "r":
110
+ return "\r";
111
+ default:
112
+ // \" -> ", \\ -> \, \' -> ', and anything else -> itself unescaped
113
+ return ch;
114
+ }
115
+ });
116
+ }
117
+ function extractDescriptionFromComment(content, ruleId) {
118
+ // Try to extract from the first line after the rule ID in JSDoc
119
+ const pattern = new RegExp(`${ruleId}[:\\s]+([^\\n]+?)\\n\\s*\\*\\s*\\n\\s*\\*\\s*(.+?)\\n`);
120
+ const match = content.match(pattern);
121
+ if (match)
122
+ return match[1].trim();
123
+ // Fallback: use text after "ruleId:" in JSDoc
124
+ const simpleMatch = content.match(new RegExp(`\\*\\s*${ruleId}:\\s*(.+?)(?:\\n|\\*)`));
125
+ if (simpleMatch)
126
+ return simpleMatch[1].trim();
127
+ return ruleId;
128
+ }
129
+ function plural(n, noun) {
130
+ return `${n} ${noun}${n === 1 ? "" : "s"}`;
131
+ }
132
+ export function generateRules(config, rules) {
133
+ const lintRules = rules.filter((r) => r.type === "lint");
134
+ const postSynthRules = rules.filter((r) => r.type === "post-synth");
135
+ const lines = [
136
+ "---",
137
+ // "All Rules", not "Lint Rules": most lexicons also ship a hand-written
138
+ // page under the latter title that covers a selected subset, and two pages
139
+ // with the same title reads as a duplicate rather than a complete table.
140
+ `title: "All Rules"`,
141
+ `description: "Every lint rule and post-synth check provided by the ${config.displayName} lexicon"`,
142
+ "---",
143
+ "",
144
+ `The ${config.displayName} lexicon provides **${rules.length}** rules: ` +
145
+ `${plural(lintRules.length, "lint rule")} and ` +
146
+ `${plural(postSynthRules.length, "post-synth check")}.`,
147
+ "",
148
+ ];
149
+ if (lintRules.length > 0) {
150
+ lines.push("## Lint Rules", "", "| ID | Severity | Category | Description |", "|----|----------|----------|-------------|");
151
+ for (const rule of lintRules.sort((a, b) => a.id.localeCompare(b.id))) {
152
+ lines.push(`| \`${rule.id}\` | ${rule.severity} | ${rule.category} | ${escapeMdx(rule.description)} |`);
153
+ }
154
+ lines.push("");
155
+ }
156
+ if (postSynthRules.length > 0) {
157
+ lines.push("## Post-Synth Checks", "", "Post-synth checks validate the serialized output after the build pipeline completes.", "", "| ID | Description |", "|----|-------------|");
158
+ for (const rule of postSynthRules.sort((a, b) => a.id.localeCompare(b.id))) {
159
+ lines.push(`| \`${rule.id}\` | ${escapeMdx(rule.description)} |`);
160
+ }
161
+ lines.push("");
162
+ }
163
+ return lines.join("\n");
164
+ }