@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,381 @@
1
+ import { existsSync, mkdirSync, writeFileSync, readdirSync, readFileSync } from "fs";
2
+ import { join, resolve, dirname } from "path";
3
+ import { fileURLToPath } from "url";
4
+ import { createInterface } from "readline";
5
+ import { formatSuccess, formatWarning } from "../format.js";
6
+ import { loadPlugin, recordProjectLexicons, unknownPathLexiconsNotice } from "../plugins.js";
7
+ import { lexiconModulePath, lexiconSourceLabel } from "../../lexicon-module.js";
8
+ import { MCP_CONFIG_FILENAME, detectPackageManager, generateMcpConfig, mcpConfigPath } from "../mcp-config.js";
9
+ /** Read the current chant package version from our own package.json. */
10
+ export function getChantVersion() {
11
+ try {
12
+ const pkgDir = dirname(dirname(dirname(dirname(fileURLToPath(import.meta.url)))));
13
+ const pkg = JSON.parse(readFileSync(join(pkgDir, "package.json"), "utf-8"));
14
+ return pkg.version ?? "0.0.13";
15
+ }
16
+ catch {
17
+ return "0.0.13";
18
+ }
19
+ }
20
+ /**
21
+ * The devDependencies a scaffolded project gets, from `chant init` and from
22
+ * `chant carve` (#3233). The project's TypeScript is for its editor and `tsc`
23
+ * only; chant parses with its own copy, so any 5.9+ or 7 release works (#3089).
24
+ */
25
+ export const SCAFFOLD_DEV_DEPENDENCIES = {
26
+ "@types/node": "^24.0.0",
27
+ typescript: "^5.9.3 || ^7.0.0",
28
+ };
29
+ /**
30
+ * Generate package.json content
31
+ */
32
+ function generatePackageJson(lexicon, extraScripts, lexiconIsPackage = true) {
33
+ const ver = getChantVersion();
34
+ const dependencies = {
35
+ "@intentius/chant": `^${ver}`,
36
+ // chant#2578 — a lexicon declared by path is not a package to depend on.
37
+ ...(lexiconIsPackage ? { [`@intentius/chant-lexicon-${lexicon}`]: `^${ver}` } : {}),
38
+ };
39
+ const pkg = {
40
+ name: "chant-project",
41
+ version: ver,
42
+ type: "module",
43
+ scripts: {
44
+ build: `chant build src --lexicon ${lexicon}`,
45
+ lint: "chant lint src",
46
+ dev: `chant build src --lexicon ${lexicon} --watch`,
47
+ ...extraScripts,
48
+ },
49
+ dependencies,
50
+ devDependencies: { ...SCAFFOLD_DEV_DEPENDENCIES },
51
+ };
52
+ return JSON.stringify(pkg, null, 2);
53
+ }
54
+ /**
55
+ * Generate tsconfig.json content.
56
+ *
57
+ * `bundler` resolution, because chant resolves a project's imports the way tsx
58
+ * and fold do: `./config` with no extension. NodeNext rejects that form
59
+ * (TS2835), and its suggested `./config.js` makes fold fall back to running the
60
+ * file (#3089). `types` names node because TypeScript 6 and later no longer load
61
+ * every `@types` package by default.
62
+ */
63
+ export function generateTsConfig() {
64
+ const config = {
65
+ compilerOptions: {
66
+ target: "ES2022",
67
+ module: "esnext",
68
+ moduleResolution: "bundler",
69
+ types: ["node"],
70
+ strict: true,
71
+ esModuleInterop: true,
72
+ skipLibCheck: true,
73
+ declaration: true,
74
+ outDir: "./dist",
75
+ rootDir: "./src",
76
+ },
77
+ include: ["src"],
78
+ exclude: ["node_modules", "dist"],
79
+ };
80
+ return JSON.stringify(config, null, 2);
81
+ }
82
+ /**
83
+ * Generate chant.config.ts content
84
+ */
85
+ function generateChantConfig(lexicon) {
86
+ return `import type { ChantConfig } from "@intentius/chant";
87
+
88
+ export default {
89
+ lexicons: ["${lexicon}"],
90
+ } satisfies ChantConfig;
91
+ `;
92
+ }
93
+ /**
94
+ * Generate .gitignore content
95
+ */
96
+ function generateGitignore() {
97
+ return `dist/
98
+ node_modules/
99
+ .chant/types/
100
+ .chant/meta/
101
+ .chant/rules/
102
+ skills/
103
+ `;
104
+ }
105
+ /**
106
+ * Generate embedded core type definitions for .chant/types/core/
107
+ */
108
+ function generateCoreTypeDefs() {
109
+ return `// @intentius/chant — core type definitions
110
+ // Run "chant update" to sync the latest types
111
+
112
+ /** Wraps a value that may be a literal or an intrinsic expression */
113
+ export type Value<T> = T | Intrinsic;
114
+
115
+ /** Marker interface for intrinsic functions (Ref, Sub, etc.) */
116
+ export interface Intrinsic {
117
+ toJSON(): unknown;
118
+ }
119
+
120
+ /** Serializer interface for chant specifications */
121
+ export interface Serializer {
122
+ name: string;
123
+ rulePrefix: string;
124
+ serialize(entities: Map<string, Declarable>, outputs?: LexiconOutput[]): string;
125
+ serializeCrossRef?(output: LexiconOutput): unknown;
126
+ }
127
+
128
+ /** Base interface for all declarable entities */
129
+ export interface Declarable {
130
+ readonly lexicon: string;
131
+ readonly entityType: string;
132
+ readonly kind?: "resource" | "property";
133
+ }
134
+
135
+ /** Cross-lexicon output reference */
136
+ export interface LexiconOutput {
137
+ readonly outputName: string;
138
+ readonly sourceEntity: string;
139
+ readonly sourceAttribute: string;
140
+ readonly lexicon: string;
141
+ }
142
+
143
+ /** Top-level project configuration */
144
+ export interface ChantConfig {
145
+ lexicons?: string[];
146
+ lint?: {
147
+ rules?: Record<string, string | [string, Record<string, unknown>]>;
148
+ extends?: string[];
149
+ plugins?: string[];
150
+ };
151
+ }
152
+
153
+ `;
154
+ }
155
+ /**
156
+ * Prompt user for install
157
+ */
158
+ async function promptInstall() {
159
+ const rl = createInterface({
160
+ input: process.stdin,
161
+ output: process.stdout,
162
+ });
163
+ return new Promise((resolve) => {
164
+ rl.question("Install dependencies? (Y/n) ", (answer) => {
165
+ rl.close();
166
+ const trimmed = answer.trim().toLowerCase();
167
+ resolve(trimmed === "" || trimmed === "y" || trimmed === "yes");
168
+ });
169
+ });
170
+ }
171
+ /**
172
+ * Write a file if it doesn't exist, tracking created files and warnings
173
+ */
174
+ function writeIfNotExists(filePath, content, relativePath, createdFiles, warnings) {
175
+ if (!existsSync(filePath)) {
176
+ writeFileSync(filePath, content);
177
+ createdFiles.push(relativePath);
178
+ }
179
+ else {
180
+ warnings.push(`${relativePath} already exists, skipping`);
181
+ }
182
+ }
183
+ /**
184
+ * Execute the init command
185
+ */
186
+ export async function initCommand(options) {
187
+ const targetDir = resolve(options.path ?? ".");
188
+ const createdFiles = [];
189
+ const warnings = [];
190
+ // Check if directory is non-empty
191
+ if (existsSync(targetDir)) {
192
+ const contents = readdirSync(targetDir);
193
+ const nonHiddenFiles = contents.filter((f) => !f.startsWith("."));
194
+ if (nonHiddenFiles.length > 0 && !options.force) {
195
+ return {
196
+ success: false,
197
+ createdFiles: [],
198
+ warnings: [],
199
+ error: `Directory is not empty. Use --force to initialize anyway.`,
200
+ };
201
+ }
202
+ if (nonHiddenFiles.length > 0) {
203
+ warnings.push("Initializing in non-empty directory");
204
+ }
205
+ }
206
+ // Create target directory if it doesn't exist
207
+ if (!existsSync(targetDir)) {
208
+ mkdirSync(targetDir, { recursive: true });
209
+ }
210
+ // chant#2578 — `--force` into an existing project keeps its chant.config.
211
+ // When that config declares the lexicon by path, it loads from the module
212
+ // and there is no package to depend on or install. chant#2591 — the config
213
+ // is read without running it; when that fails, init says so and treats the
214
+ // lexicon as a package.
215
+ let lexiconModule;
216
+ if (existsSync(join(targetDir, "chant.config.ts")) || existsSync(join(targetDir, "chant.config.json"))) {
217
+ const notice = unknownPathLexiconsNotice(recordProjectLexicons(targetDir));
218
+ if (notice !== undefined)
219
+ warnings.push(notice);
220
+ if (lexiconModulePath(options.lexicon) !== undefined) {
221
+ lexiconModule = lexiconSourceLabel(options.lexicon, targetDir);
222
+ }
223
+ }
224
+ // Load plugin early to get template set (used for scripts + source files)
225
+ let templateSet;
226
+ try {
227
+ const plugin = await loadPlugin(options.lexicon);
228
+ if (plugin.initTemplates) {
229
+ templateSet = plugin.initTemplates(options.template);
230
+ }
231
+ }
232
+ catch {
233
+ // Plugin not yet installed — no source files to scaffold
234
+ }
235
+ // Create src directory
236
+ const srcDir = join(targetDir, "src");
237
+ if (!existsSync(srcDir)) {
238
+ mkdirSync(srcDir, { recursive: true });
239
+ }
240
+ // Generate package.json
241
+ writeIfNotExists(join(targetDir, "package.json"), generatePackageJson(options.lexicon, templateSet?.scripts, lexiconModule === undefined), "package.json", createdFiles, warnings);
242
+ // Generate tsconfig.json
243
+ writeIfNotExists(join(targetDir, "tsconfig.json"), generateTsConfig(), "tsconfig.json", createdFiles, warnings);
244
+ // Generate chant.config.ts. A template that ships its own wins: core's
245
+ // version knows only the lexicon name, while a template that declares a
246
+ // config namespace (fountain's steward scaffold and its `fountain.profiles`
247
+ // block, chant #2129) is scaffolding a project that needs it to run at all.
248
+ // The root-file loop below runs *after* this write, and `writeIfNotExists`
249
+ // keeps the first file, so a template's config would otherwise be discarded
250
+ // in silence — see lexicons/cedar/src/init-templates.ts, which documents
251
+ // having had to work around exactly that.
252
+ writeIfNotExists(join(targetDir, "chant.config.ts"), templateSet?.root?.["chant.config.ts"] ?? generateChantConfig(options.lexicon), "chant.config.ts", createdFiles, warnings);
253
+ // Generate .gitignore
254
+ writeIfNotExists(join(targetDir, ".gitignore"), generateGitignore(), ".gitignore", createdFiles, warnings);
255
+ // Write source files from plugin template set
256
+ if (templateSet) {
257
+ for (const [filename, content] of Object.entries(templateSet.src)) {
258
+ writeIfNotExists(join(srcDir, filename), content, `src/${filename}`, createdFiles, warnings);
259
+ }
260
+ // Write root scaffold files (e.g. index.js, test.js, Dockerfile).
261
+ // `chant.config.ts` is skipped: it was already written above, from this
262
+ // same template set, and re-offering it here would only produce an
263
+ // "already exists, skipping" warning about a file the template supplied.
264
+ if (templateSet.root) {
265
+ for (const [filename, content] of Object.entries(templateSet.root)) {
266
+ if (filename === "chant.config.ts")
267
+ continue;
268
+ writeIfNotExists(join(targetDir, filename), content, filename, createdFiles, warnings);
269
+ }
270
+ }
271
+ }
272
+ // Scaffold .chant/types/core/ with embedded type definitions
273
+ const coreTypesDir = join(targetDir, ".chant", "types", "core");
274
+ mkdirSync(coreTypesDir, { recursive: true });
275
+ writeIfNotExists(join(coreTypesDir, "package.json"), JSON.stringify({ name: "@intentius/chant", version: "0.0.0", types: "./index.d.ts" }, null, 2), ".chant/types/core/package.json", createdFiles, warnings);
276
+ writeIfNotExists(join(coreTypesDir, "index.d.ts"), generateCoreTypeDefs(), ".chant/types/core/index.d.ts", createdFiles, warnings);
277
+ // Scaffold .chant/types/lexicon-{lexicon}/ stub. A lexicon declared by path
278
+ // is imported by its path, so it has no package name to stub (chant#2578).
279
+ if (lexiconModule === undefined) {
280
+ const lexiconTypesDir = join(targetDir, ".chant", "types", `lexicon-${options.lexicon}`);
281
+ mkdirSync(lexiconTypesDir, { recursive: true });
282
+ writeIfNotExists(join(lexiconTypesDir, "package.json"), JSON.stringify({ name: `@intentius/chant-lexicon-${options.lexicon}`, version: "0.0.0", types: "./index.d.ts" }, null, 2), `.chant/types/lexicon-${options.lexicon}/package.json`, createdFiles, warnings);
283
+ writeIfNotExists(join(lexiconTypesDir, "index.d.ts"), `// Lexicon type stubs — run "chant update" to sync full types\nexport {};\n`, `.chant/types/lexicon-${options.lexicon}/index.d.ts`, createdFiles, warnings);
284
+ }
285
+ // Generate the project's MCP config. It lands in the directory init was
286
+ // pointed at, like everything else init produces, and at the path
287
+ // `chant doctor` checks — see ../mcp-config.ts for why project scope, and
288
+ // chant #2383 for the three-way disagreement that came of writing it into
289
+ // the user's home directory instead.
290
+ if (!options.skipMcp) {
291
+ writeIfNotExists(mcpConfigPath(targetDir), generateMcpConfig(detectPackageManager(targetDir)), MCP_CONFIG_FILENAME, createdFiles, warnings);
292
+ }
293
+ // Install skills from the lexicon's plugin. With --skill, install only
294
+ // the matching skill; without, install all.
295
+ try {
296
+ const plugin = await loadPlugin(options.lexicon);
297
+ if (plugin.skills) {
298
+ const all = plugin.skills();
299
+ const skills = options.skill ? all.filter((s) => s.name === options.skill) : all;
300
+ if (options.skill && skills.length === 0) {
301
+ warnings.push(`No skill named "${options.skill}" in lexicon ${options.lexicon}; nothing installed`);
302
+ }
303
+ for (const skill of skills) {
304
+ const skillDir = join(targetDir, "skills", skill.name);
305
+ mkdirSync(skillDir, { recursive: true });
306
+ writeFileSync(join(skillDir, "SKILL.md"), skill.content);
307
+ createdFiles.push(`skills/${skill.name}/SKILL.md`);
308
+ }
309
+ }
310
+ }
311
+ catch {
312
+ // Skills are optional — don't fail init if plugin isn't installed yet
313
+ }
314
+ // `--template` records where the files came from (#2540, ws-047). Plain
315
+ // init writes no lock and never loads the lineage module.
316
+ if (options.template && templateSet) {
317
+ const { writeTemplateLock } = await import("../../workspace/lineage-init.js");
318
+ const lock = writeTemplateLock({
319
+ targetDir,
320
+ lexicon: options.lexicon,
321
+ template: options.template,
322
+ createdFiles,
323
+ chantVersion: getChantVersion(),
324
+ lexiconModule,
325
+ });
326
+ if (lock)
327
+ createdFiles.push(lock);
328
+ else
329
+ warnings.push(".chant/workspace.lock.json already exists, skipping");
330
+ }
331
+ return {
332
+ success: true,
333
+ createdFiles,
334
+ warnings,
335
+ ...(lexiconModule !== undefined ? { lexiconModule } : {}),
336
+ };
337
+ }
338
+ /**
339
+ * Print init result and prompt for install
340
+ */
341
+ export async function printInitResult(result, options) {
342
+ if (!result.success) {
343
+ console.error(result.error);
344
+ return;
345
+ }
346
+ for (const warning of result.warnings) {
347
+ console.error(formatWarning({ message: warning }));
348
+ }
349
+ if (result.createdFiles.length > 0) {
350
+ console.log(formatSuccess("Created:"));
351
+ for (const file of result.createdFiles) {
352
+ console.log(` ${file}`);
353
+ }
354
+ }
355
+ console.log("");
356
+ if (result.lexiconModule !== undefined) {
357
+ console.log(`The lexicon loads from ${result.lexiconModule}, as chant.config.ts declares. It has no package to install.`);
358
+ console.log("");
359
+ }
360
+ const pm = detectPackageManager(options?.cwd);
361
+ // Interactive install prompt
362
+ if (!options?.skipInstall) {
363
+ const shouldInstall = await promptInstall();
364
+ if (shouldInstall) {
365
+ const { execSync } = await import("child_process");
366
+ const cwd = options?.cwd ?? ".";
367
+ console.log("Installing dependencies...");
368
+ try {
369
+ execSync(`${pm} install`, { cwd, stdio: "inherit" });
370
+ }
371
+ catch {
372
+ console.error(formatWarning({ message: `Install failed. Run '${pm} install' manually.` }));
373
+ }
374
+ }
375
+ }
376
+ console.log("");
377
+ console.log("Next steps:");
378
+ console.log(" 1. Edit src/config.ts");
379
+ console.log(" 2. Add resources in src/");
380
+ console.log(` 3. ${pm} run build`);
381
+ }
@@ -0,0 +1,145 @@
1
+ /**
2
+ * `chant dev rolling-upgrade <lexicon-dir>` command implementation.
3
+ *
4
+ * Detects rolling-spec drift for the aws, azure, and github lexicons. These
5
+ * lexicons pin no version constant — "latest" is fetched on every regen. This
6
+ * command regenerates from current-latest, diffs the produced API surface
7
+ * against the committed baseline (surface.snapshot.json), and REPORTS the
8
+ * result. It is a dry run: it never opens a PR, updates a branch, or writes the
9
+ * baseline. PR automation and scheduling live in #527.
10
+ *
11
+ * The PR label an eventual automation would apply is derived from severity:
12
+ * additive → `minor`, breaking → `major`. This command only prints it.
13
+ */
14
+ import { existsSync } from "fs";
15
+ import { resolve } from "path";
16
+ import { checkRollingUpgrade, } from "../../codegen/rolling-upgrade.js";
17
+ // ── Main entry ────────────────────────────────────────────────────────
18
+ /**
19
+ * Run the rolling-upgrade check and return the result.
20
+ * Returns a synthetic failed result when the directory is missing.
21
+ */
22
+ export async function runRollingUpgrade(opts) {
23
+ const dir = resolve(opts.lexiconDir);
24
+ if (!existsSync(dir)) {
25
+ return {
26
+ lexicon: "aws",
27
+ hasUpgrade: false,
28
+ severity: "none",
29
+ delta: { added: [], changed: [], removed: [], renamed: [], severity: "none" },
30
+ deltaText: "",
31
+ validationOk: false,
32
+ failures: [{ step: "setup", output: `Lexicon directory not found: ${dir}` }],
33
+ apiVersionDelta: [],
34
+ freshSnapshot: null,
35
+ };
36
+ }
37
+ return checkRollingUpgrade({
38
+ lexiconDir: dir,
39
+ force: opts.force,
40
+ verbose: opts.verbose,
41
+ });
42
+ }
43
+ /**
44
+ * Map surface severity to the semver PR label an upgrade would carry.
45
+ * additive → minor, breaking → major, none → none.
46
+ */
47
+ export function severityToLabel(severity) {
48
+ if (severity === "breaking")
49
+ return "major";
50
+ if (severity === "additive")
51
+ return "minor";
52
+ return "none";
53
+ }
54
+ // ── Human-readable output ─────────────────────────────────────────────
55
+ const COLORS = {
56
+ green: "\x1b[32m",
57
+ yellow: "\x1b[33m",
58
+ red: "\x1b[31m",
59
+ gray: "\x1b[90m",
60
+ bold: "\x1b[1m",
61
+ reset: "\x1b[0m",
62
+ };
63
+ function useColors() {
64
+ return !process.env.NO_COLOR && process.stdout.isTTY !== false;
65
+ }
66
+ function c(text, code) {
67
+ return useColors() ? `${code}${text}${COLORS.reset}` : text;
68
+ }
69
+ /**
70
+ * Print the rolling-upgrade result to stdout.
71
+ */
72
+ export function printRollingUpgradeResult(result, json) {
73
+ if (json) {
74
+ console.log(JSON.stringify({
75
+ lexicon: result.lexicon,
76
+ hasUpgrade: result.hasUpgrade,
77
+ severity: result.severity,
78
+ label: severityToLabel(result.severity),
79
+ validationOk: result.validationOk,
80
+ delta: result.delta,
81
+ apiVersionDelta: result.apiVersionDelta,
82
+ failures: result.failures,
83
+ }, null, 2));
84
+ return;
85
+ }
86
+ console.log(c(`Rolling upgrade check: ${result.lexicon}`, COLORS.bold));
87
+ console.log("");
88
+ // Surface delta — the review payload
89
+ if (result.deltaText) {
90
+ console.log(result.deltaText);
91
+ }
92
+ else {
93
+ console.log(c("No surface changes.", COLORS.green));
94
+ }
95
+ // azure API-version delta
96
+ if (result.apiVersionDelta.length > 0) {
97
+ console.log("");
98
+ console.log(c(`API version changes (${result.apiVersionDelta.length}):`, COLORS.bold));
99
+ for (const v of result.apiVersionDelta) {
100
+ const arrow = v.kind === "added"
101
+ ? `+ ${v.provider} (${v.after})`
102
+ : v.kind === "removed"
103
+ ? `- ${v.provider} (was ${v.before})`
104
+ : `~ ${v.provider}: ${v.before} -> ${v.after}`;
105
+ console.log(` ${arrow}`);
106
+ }
107
+ }
108
+ // Failures
109
+ if (result.failures.length > 0) {
110
+ console.log("");
111
+ console.log(c(`${result.failures.length} step(s) failed:`, COLORS.bold));
112
+ for (const f of result.failures) {
113
+ console.log(c(` FAIL [${f.step}]${f.exitCode !== undefined ? ` (exit ${f.exitCode})` : ""}`, COLORS.red));
114
+ if (f.output) {
115
+ const indented = f.output
116
+ .split("\n")
117
+ .map((l) => ` ${l}`)
118
+ .join("\n");
119
+ console.log(c(indented, COLORS.gray));
120
+ }
121
+ }
122
+ }
123
+ console.log("");
124
+ // Decision line
125
+ const severityColor = result.severity === "breaking"
126
+ ? COLORS.red
127
+ : result.severity === "additive"
128
+ ? COLORS.yellow
129
+ : COLORS.green;
130
+ const label = severityToLabel(result.severity);
131
+ const validationLabel = result.validationOk
132
+ ? c("ok", COLORS.green)
133
+ : c("FAILED", COLORS.red);
134
+ console.log(`Upgrade: ${result.hasUpgrade} Severity: ${c(result.severity, severityColor)} ` +
135
+ `Label: ${label} Validation: ${validationLabel}`);
136
+ if (result.hasUpgrade && result.validationOk) {
137
+ console.log(c(`A PR would be opened: chore(${result.lexicon}): regen from latest spec [${label}]`, COLORS.gray));
138
+ }
139
+ else if (result.hasUpgrade && !result.validationOk) {
140
+ console.log(c("Surface moved but validation failed — no PR; surfaces as a report/issue (#527).", COLORS.yellow));
141
+ }
142
+ else {
143
+ console.log(c("No surface change — no PR.", COLORS.gray));
144
+ }
145
+ }
@@ -0,0 +1,145 @@
1
+ /**
2
+ * `chant dev surface-diff <lexicon-dir>` command implementation.
3
+ *
4
+ * Regenerates a lexicon from its spec, validates the result, extracts the
5
+ * public API surface, and diffs it against the committed baseline snapshot.
6
+ *
7
+ * Outputs a human-readable delta to stdout and optionally a machine-readable
8
+ * JSON result to a file. Never auto-fixes: failures are captured and reported.
9
+ *
10
+ * The snapshot file is written to `<lexicon-dir>/surface.snapshot.json`.
11
+ * Pass `--update-snapshot` to commit the fresh snapshot after a successful run.
12
+ *
13
+ * An update run is exempt from the `surface-matches-snapshot` validate check
14
+ * and from nothing else (#1825): that check fails on the stale baseline the
15
+ * run exists to replace, and with an `"always"` gate (#1475) the documented
16
+ * re-baseline flow would deadlock. Any other failing step still refuses the
17
+ * write, so a broken generate cannot be baselined.
18
+ */
19
+ import { existsSync, readFileSync } from "fs";
20
+ import { resolve, join } from "path";
21
+ import { regenLexicon, writeSurfaceSnapshot, SNAPSHOT_FILENAME } from "../../codegen/lexicon-regen.js";
22
+ import { bumpForSeverity, bumpPackageJsonVersion } from "../../codegen/version-bump.js";
23
+ // ── Main entry ────────────────────────────────────────────────────────
24
+ /**
25
+ * Run the surface-diff pipeline and return the result.
26
+ * Logs human-readable output to stderr; machine-readable JSON goes to the caller.
27
+ */
28
+ export async function runSurfaceDiff(opts) {
29
+ const dir = resolve(opts.lexiconDir);
30
+ if (!existsSync(dir)) {
31
+ const failure = {
32
+ step: "setup",
33
+ output: `Lexicon directory not found: ${dir}`,
34
+ };
35
+ return {
36
+ ok: false,
37
+ changed: false,
38
+ severity: "none",
39
+ delta: { added: [], changed: [], removed: [], renamed: [], severity: "none" },
40
+ deltaText: "",
41
+ failures: [failure],
42
+ freshSnapshot: null,
43
+ };
44
+ }
45
+ const result = await regenLexicon({
46
+ lexiconDir: dir,
47
+ force: opts.force,
48
+ verbose: opts.verbose,
49
+ skipBundle: opts.skipBundle,
50
+ skipBuild: opts.skipBuild,
51
+ skipLint: opts.skipLint,
52
+ skipExamples: !opts.runExamples,
53
+ pinnedDigestPath: opts.pinnedDigestPath,
54
+ // The update run skips only the surface-matches-snapshot validate check —
55
+ // the staleness it is about to fix (#1825).
56
+ updatingSnapshot: opts.updateSnapshot,
57
+ });
58
+ // Update snapshot when requested and the run succeeded
59
+ if (opts.updateSnapshot && result.ok && result.freshSnapshot) {
60
+ writeSurfaceSnapshot(dir, result.freshSnapshot);
61
+ process.stderr.write(`Snapshot updated: ${dir}/${SNAPSHOT_FILENAME}\n`);
62
+ // #616: accepting drift on a rolling lexicon changes the surface but nothing
63
+ // bumps the version — so skip-if-unchanged would strand the new surface at
64
+ // publish time. `--bump` raises the version by the drift severity (0.x-aware)
65
+ // so the accepted drift actually ships.
66
+ if (opts.bump && result.changed && result.severity !== "none") {
67
+ const pkgPath = join(dir, "package.json");
68
+ if (existsSync(pkgPath)) {
69
+ const current = JSON.parse(readFileSync(pkgPath, "utf-8")).version ?? "0.0.0";
70
+ const bumped = bumpForSeverity(current, result.severity);
71
+ if (bumped) {
72
+ bumpPackageJsonVersion(pkgPath, bumped);
73
+ process.stderr.write(`Version bumped: ${current} -> ${bumped} (${result.severity})\n`);
74
+ }
75
+ else {
76
+ process.stderr.write(`Version unchanged: could not bump ${current} for severity ${result.severity}\n`);
77
+ }
78
+ }
79
+ }
80
+ }
81
+ return result;
82
+ }
83
+ // ── Human-readable output ─────────────────────────────────────────────
84
+ const COLORS = {
85
+ green: "\x1b[32m",
86
+ yellow: "\x1b[33m",
87
+ red: "\x1b[31m",
88
+ gray: "\x1b[90m",
89
+ bold: "\x1b[1m",
90
+ reset: "\x1b[0m",
91
+ };
92
+ function useColors() {
93
+ return !process.env.NO_COLOR && process.stdout.isTTY !== false;
94
+ }
95
+ function c(text, code) {
96
+ return useColors() ? `${code}${text}${COLORS.reset}` : text;
97
+ }
98
+ /**
99
+ * Print the surface-diff result as human-readable text to stdout.
100
+ */
101
+ export function printSurfaceDiffResult(result, json) {
102
+ if (json) {
103
+ console.log(JSON.stringify({
104
+ ok: result.ok,
105
+ changed: result.changed,
106
+ severity: result.severity,
107
+ delta: result.delta,
108
+ failures: result.failures,
109
+ }, null, 2));
110
+ return;
111
+ }
112
+ // Surface delta
113
+ if (result.deltaText) {
114
+ console.log(result.deltaText);
115
+ }
116
+ else if (result.changed) {
117
+ console.log("Surface changed (no baseline to diff against).");
118
+ }
119
+ else {
120
+ console.log(c("No surface changes.", COLORS.green));
121
+ }
122
+ // Failures
123
+ if (result.failures.length > 0) {
124
+ console.log("");
125
+ console.log(c(`${result.failures.length} step(s) failed:`, COLORS.bold));
126
+ for (const f of result.failures) {
127
+ console.log(c(` FAIL [${f.step}]${f.exitCode !== undefined ? ` (exit ${f.exitCode})` : ""}`, COLORS.red));
128
+ if (f.output) {
129
+ const indented = f.output
130
+ .split("\n")
131
+ .map((l) => ` ${l}`)
132
+ .join("\n");
133
+ console.log(c(indented, COLORS.gray));
134
+ }
135
+ }
136
+ }
137
+ console.log("");
138
+ // Summary line
139
+ const severityColor = result.severity === "breaking" ? COLORS.red :
140
+ result.severity === "additive" ? COLORS.yellow :
141
+ COLORS.green;
142
+ const statusLabel = result.ok ? c("ok", COLORS.green) : c("FAILED", COLORS.red);
143
+ const severityLabel = c(result.severity, severityColor);
144
+ console.log(`Status: ${statusLabel} Severity: ${severityLabel} Changed: ${result.changed}`);
145
+ }