@intentius/chant 0.100.0 → 0.102.0

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 (608) hide show
  1. package/dist/agents/checks.d.ts.map +1 -1
  2. package/dist/attrref.d.ts.map +1 -1
  3. package/dist/audit/discover.d.ts.map +1 -1
  4. package/dist/audit/nginx.d.ts.map +1 -1
  5. package/dist/audit/prior-art.d.ts +48 -0
  6. package/dist/audit/prior-art.d.ts.map +1 -1
  7. package/dist/behaviour-kinds.d.ts.map +1 -1
  8. package/dist/build.d.ts +6 -0
  9. package/dist/build.d.ts.map +1 -1
  10. package/dist/builder.d.ts.map +1 -1
  11. package/dist/cli/build-options.d.ts +2 -0
  12. package/dist/cli/build-options.d.ts.map +1 -1
  13. package/dist/cli/commands/build.d.ts.map +1 -1
  14. package/dist/cli/commands/carve-emit.d.ts.map +1 -1
  15. package/dist/cli/commands/check-lexicon.d.ts +16 -0
  16. package/dist/cli/commands/check-lexicon.d.ts.map +1 -1
  17. package/dist/cli/commands/import.d.ts +8 -0
  18. package/dist/cli/commands/import.d.ts.map +1 -1
  19. package/dist/cli/commands/init-lexicon.d.ts.map +1 -1
  20. package/dist/cli/commands/init.d.ts +19 -0
  21. package/dist/cli/commands/init.d.ts.map +1 -1
  22. package/dist/cli/commands/onboard.d.ts +9 -0
  23. package/dist/cli/commands/onboard.d.ts.map +1 -1
  24. package/dist/cli/commands/pinned-upgrade.d.ts +19 -5
  25. package/dist/cli/commands/pinned-upgrade.d.ts.map +1 -1
  26. package/dist/cli/handlers/dev.d.ts.map +1 -1
  27. package/dist/cli/handlers/fan-out.d.ts.map +1 -1
  28. package/dist/cli/handlers/lifecycle.d.ts.map +1 -1
  29. package/dist/cli/handlers/misc.d.ts.map +1 -1
  30. package/dist/cli/handlers/operator.d.ts +9 -0
  31. package/dist/cli/handlers/operator.d.ts.map +1 -1
  32. package/dist/cli/handlers/run.d.ts.map +1 -1
  33. package/dist/cli/lsp/server.d.ts.map +1 -1
  34. package/dist/cli/main.d.ts.map +1 -1
  35. package/dist/cli/mcp/server.d.ts.map +1 -1
  36. package/dist/cli/mcp/tools/build.d.ts.map +1 -1
  37. package/dist/cli/mcp/tools/composites.d.ts.map +1 -1
  38. package/dist/cli/mcp/tools/explain.d.ts.map +1 -1
  39. package/dist/cli/mcp/tools/import.d.ts.map +1 -1
  40. package/dist/cli/mcp/tools/lint.d.ts.map +1 -1
  41. package/dist/cli/mcp/tools/scaffold.d.ts.map +1 -1
  42. package/dist/cli/mcp/tools/search.d.ts.map +1 -1
  43. package/dist/cli/mcp/workspace-tools.d.ts +9 -1
  44. package/dist/cli/mcp/workspace-tools.d.ts.map +1 -1
  45. package/dist/cli/registry.d.ts +33 -2
  46. package/dist/cli/registry.d.ts.map +1 -1
  47. package/dist/codegen/fetch.d.ts.map +1 -1
  48. package/dist/codegen/naming.d.ts.map +1 -1
  49. package/dist/codegen/pinned-upgrade.d.ts +67 -3
  50. package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
  51. package/dist/codegen/registry.d.ts.map +1 -1
  52. package/dist/components/capability-plugin-loader.d.ts.map +1 -1
  53. package/dist/components/capability.d.ts.map +1 -1
  54. package/dist/components/driver.d.ts.map +1 -1
  55. package/dist/components/fan-out.d.ts.map +1 -1
  56. package/dist/components/starter-plugin.d.ts.map +1 -1
  57. package/dist/components/verbs/process-runner.d.ts.map +1 -1
  58. package/dist/components/verbs/r2-sync.d.ts.map +1 -1
  59. package/dist/components/verbs/run-agent.d.ts.map +1 -1
  60. package/dist/components/verbs/sbom-generator.d.ts.map +1 -1
  61. package/dist/components/verbs/sign.d.ts.map +1 -1
  62. package/dist/components/verbs/verify.d.ts.map +1 -1
  63. package/dist/components/verbs/vuln-gate.d.ts.map +1 -1
  64. package/dist/components/verbs/vuln-scan.d.ts.map +1 -1
  65. package/dist/components/verbs/wrangler.d.ts.map +1 -1
  66. package/dist/composite.d.ts.map +1 -1
  67. package/dist/config.d.ts +30 -7
  68. package/dist/config.d.ts.map +1 -1
  69. package/dist/declarable.d.ts +16 -0
  70. package/dist/declarable.d.ts.map +1 -1
  71. package/dist/discovery/cache.d.ts.map +1 -1
  72. package/dist/discovery/fold-import.d.ts +15 -5
  73. package/dist/discovery/fold-import.d.ts.map +1 -1
  74. package/dist/discovery/param-deps.d.ts +16 -0
  75. package/dist/discovery/param-deps.d.ts.map +1 -1
  76. package/dist/discovery/sandbox/policy-wire.d.ts.map +1 -1
  77. package/dist/discovery/specifier-resolve.d.ts +37 -0
  78. package/dist/discovery/specifier-resolve.d.ts.map +1 -0
  79. package/dist/errors.d.ts.map +1 -1
  80. package/dist/fold/fold.d.ts +3 -1
  81. package/dist/fold/fold.d.ts.map +1 -1
  82. package/dist/graph-detail.d.ts.map +1 -1
  83. package/dist/graph-ir.d.ts.map +1 -1
  84. package/dist/graph-layout.d.ts.map +1 -1
  85. package/dist/import/base-parser.d.ts.map +1 -1
  86. package/dist/import/embedded.d.ts +7 -0
  87. package/dist/import/embedded.d.ts.map +1 -1
  88. package/dist/import/parser-options.d.ts +14 -0
  89. package/dist/import/parser-options.d.ts.map +1 -0
  90. package/dist/import/parser.d.ts +17 -0
  91. package/dist/import/parser.d.ts.map +1 -1
  92. package/dist/kubectl-context.d.ts.map +1 -1
  93. package/dist/lexicon-output.d.ts.map +1 -1
  94. package/dist/lexicon-schema.d.ts +3 -3
  95. package/dist/lexicon.d.ts +78 -3
  96. package/dist/lexicon.d.ts.map +1 -1
  97. package/dist/lifecycle/assert-live.d.ts.map +1 -1
  98. package/dist/lifecycle/gate-ledger.d.ts +15 -0
  99. package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
  100. package/dist/lifecycle/git.d.ts.map +1 -1
  101. package/dist/lifecycle/member-ledger.d.ts.map +1 -1
  102. package/dist/lifecycle/observe.d.ts.map +1 -1
  103. package/dist/lifecycle/plan-digest.d.ts +26 -5
  104. package/dist/lifecycle/plan-digest.d.ts.map +1 -1
  105. package/dist/lifecycle/plan-ledger.d.ts.map +1 -1
  106. package/dist/lifecycle/release-ledger.d.ts.map +1 -1
  107. package/dist/lifecycle/scenario.d.ts.map +1 -1
  108. package/dist/lifecycle/status.d.ts.map +1 -1
  109. package/dist/lifecycle/work-lease.d.ts +61 -2
  110. package/dist/lifecycle/work-lease.d.ts.map +1 -1
  111. package/dist/lint/config.d.ts +4 -4
  112. package/dist/lint/engine.d.ts +6 -0
  113. package/dist/lint/engine.d.ts.map +1 -1
  114. package/dist/lsp/lexicon-providers.d.ts.map +1 -1
  115. package/dist/op/activities/activity-contracts.d.ts +12 -11
  116. package/dist/op/activities/activity-contracts.d.ts.map +1 -1
  117. package/dist/op/activities/apply.d.ts +79 -9
  118. package/dist/op/activities/apply.d.ts.map +1 -1
  119. package/dist/op/activities/decide.d.ts.map +1 -1
  120. package/dist/op/activities/index.d.ts +1 -1
  121. package/dist/op/activities/index.d.ts.map +1 -1
  122. package/dist/op/activities/lexicon-upgrade.d.ts +44 -12
  123. package/dist/op/activities/lexicon-upgrade.d.ts.map +1 -1
  124. package/dist/op/activities/propose-upgrade.d.ts +2 -0
  125. package/dist/op/activities/propose-upgrade.d.ts.map +1 -1
  126. package/dist/op/activity-contract.d.ts +1 -1
  127. package/dist/op/activity-failure.d.ts.map +1 -1
  128. package/dist/op/activity-profiles.d.ts.map +1 -1
  129. package/dist/op/builders.d.ts.map +1 -1
  130. package/dist/op/composites/apply-op.d.ts +12 -5
  131. package/dist/op/composites/apply-op.d.ts.map +1 -1
  132. package/dist/op/composites/lexicon-upgrade-op.d.ts +22 -6
  133. package/dist/op/composites/lexicon-upgrade-op.d.ts.map +1 -1
  134. package/dist/op/decide-backend.d.ts.map +1 -1
  135. package/dist/op/decide-read-inputs.d.ts.map +1 -1
  136. package/dist/op/emulator-lifecycle.d.ts +21 -2
  137. package/dist/op/emulator-lifecycle.d.ts.map +1 -1
  138. package/dist/op/gate-approval.d.ts +5 -1
  139. package/dist/op/gate-approval.d.ts.map +1 -1
  140. package/dist/op/gate-wait.d.ts.map +1 -1
  141. package/dist/op/gate.d.ts +19 -3
  142. package/dist/op/gate.d.ts.map +1 -1
  143. package/dist/op/index.d.ts +3 -1
  144. package/dist/op/index.d.ts.map +1 -1
  145. package/dist/op/local-executor.d.ts +6 -0
  146. package/dist/op/local-executor.d.ts.map +1 -1
  147. package/dist/op/operator.d.ts.map +1 -1
  148. package/dist/op/run-context.d.ts +39 -0
  149. package/dist/op/run-context.d.ts.map +1 -0
  150. package/dist/op/run-live.d.ts.map +1 -1
  151. package/dist/op/runtimes/local.d.ts.map +1 -1
  152. package/dist/op/source-archive.d.ts.map +1 -1
  153. package/dist/op/steward-beside.d.ts.map +1 -1
  154. package/dist/op/steward-points.d.ts.map +1 -1
  155. package/dist/op/steward.d.ts.map +1 -1
  156. package/dist/op/types.d.ts +8 -3
  157. package/dist/op/types.d.ts.map +1 -1
  158. package/dist/op/work-lease-run.d.ts +24 -4
  159. package/dist/op/work-lease-run.d.ts.map +1 -1
  160. package/dist/project-root.d.ts.map +1 -1
  161. package/dist/provenance.d.ts +21 -0
  162. package/dist/provenance.d.ts.map +1 -1
  163. package/dist/pseudo-parameter.d.ts.map +1 -1
  164. package/dist/reconcile.d.ts.map +1 -1
  165. package/dist/secret-materialization.d.ts.map +1 -1
  166. package/dist/serializer.d.ts +8 -0
  167. package/dist/serializer.d.ts.map +1 -1
  168. package/dist/telemetry-attribution.d.ts +77 -0
  169. package/dist/telemetry-attribution.d.ts.map +1 -0
  170. package/dist/terraform/emit-source.d.ts.map +1 -1
  171. package/dist/terraform/parse.d.ts.map +1 -1
  172. package/dist/testing.d.ts.map +1 -1
  173. package/dist/workspace/__fixtures__/contract-repo.d.ts.map +1 -1
  174. package/dist/workspace/__fixtures__/decide-workspace.d.ts +1 -1
  175. package/dist/workspace/__fixtures__/decide-workspace.d.ts.map +1 -1
  176. package/dist/workspace/agent-cli.d.ts +88 -0
  177. package/dist/workspace/agent-cli.d.ts.map +1 -0
  178. package/dist/workspace/box-factory.d.ts +73 -0
  179. package/dist/workspace/box-factory.d.ts.map +1 -0
  180. package/dist/workspace/changes-cli.d.ts.map +1 -1
  181. package/dist/workspace/changes.d.ts +8 -1
  182. package/dist/workspace/changes.d.ts.map +1 -1
  183. package/dist/workspace/chant-migrations/chud-lexicon-exit.d.ts.map +1 -1
  184. package/dist/workspace/checks/boxes.d.ts.map +1 -1
  185. package/dist/workspace/checks/links.d.ts +1 -0
  186. package/dist/workspace/checks/links.d.ts.map +1 -1
  187. package/dist/workspace/checks/live.d.ts +40 -0
  188. package/dist/workspace/checks/live.d.ts.map +1 -0
  189. package/dist/workspace/checks.d.ts +26 -2
  190. package/dist/workspace/checks.d.ts.map +1 -1
  191. package/dist/workspace/compose-graph.d.ts +73 -0
  192. package/dist/workspace/compose-graph.d.ts.map +1 -1
  193. package/dist/workspace/conformance/index.d.ts +67 -6
  194. package/dist/workspace/conformance/index.d.ts.map +1 -1
  195. package/dist/workspace/conformance/vitest.d.ts +12 -3
  196. package/dist/workspace/conformance/vitest.d.ts.map +1 -1
  197. package/dist/workspace/conformance/writer.d.ts +368 -0
  198. package/dist/workspace/conformance/writer.d.ts.map +1 -0
  199. package/dist/workspace/decide.d.ts +1 -1
  200. package/dist/workspace/decide.d.ts.map +1 -1
  201. package/dist/workspace/declaration.d.ts +119 -0
  202. package/dist/workspace/declaration.d.ts.map +1 -1
  203. package/dist/workspace/declaration.schema.json +368 -4
  204. package/dist/workspace/export-cli.d.ts +12 -0
  205. package/dist/workspace/export-cli.d.ts.map +1 -0
  206. package/dist/workspace/export.d.ts +145 -0
  207. package/dist/workspace/export.d.ts.map +1 -0
  208. package/dist/workspace/generated-files.d.ts.map +1 -1
  209. package/dist/workspace/graph-cache.d.ts.map +1 -1
  210. package/dist/workspace/graph-cli.d.ts +2 -0
  211. package/dist/workspace/graph-cli.d.ts.map +1 -1
  212. package/dist/workspace/identity.d.ts +111 -0
  213. package/dist/workspace/identity.d.ts.map +1 -0
  214. package/dist/workspace/import.d.ts +73 -0
  215. package/dist/workspace/import.d.ts.map +1 -0
  216. package/dist/workspace/intent-cli.d.ts +7 -4
  217. package/dist/workspace/intent-cli.d.ts.map +1 -1
  218. package/dist/workspace/intent-record.d.ts +8 -1
  219. package/dist/workspace/intent-record.d.ts.map +1 -1
  220. package/dist/workspace/intent.d.ts +149 -5
  221. package/dist/workspace/intent.d.ts.map +1 -1
  222. package/dist/workspace/kinds.d.ts +24 -6
  223. package/dist/workspace/kinds.d.ts.map +1 -1
  224. package/dist/workspace/lineage-adopt-cli.d.ts +15 -0
  225. package/dist/workspace/lineage-adopt-cli.d.ts.map +1 -0
  226. package/dist/workspace/lineage-adopt.d.ts +106 -0
  227. package/dist/workspace/lineage-adopt.d.ts.map +1 -0
  228. package/dist/workspace/lineage-check.d.ts +9 -2
  229. package/dist/workspace/lineage-check.d.ts.map +1 -1
  230. package/dist/workspace/lineage-cli.d.ts +6 -1
  231. package/dist/workspace/lineage-cli.d.ts.map +1 -1
  232. package/dist/workspace/lineage-hash-index.d.ts +110 -0
  233. package/dist/workspace/lineage-hash-index.d.ts.map +1 -0
  234. package/dist/workspace/lineage-init.d.ts +10 -0
  235. package/dist/workspace/lineage-init.d.ts.map +1 -1
  236. package/dist/workspace/lineage-lock.d.ts +149 -2
  237. package/dist/workspace/lineage-lock.d.ts.map +1 -1
  238. package/dist/workspace/lineage-migrations.d.ts +15 -3
  239. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  240. package/dist/workspace/lineage-provenance.d.ts +18 -0
  241. package/dist/workspace/lineage-provenance.d.ts.map +1 -0
  242. package/dist/workspace/lineage-upgrade-cli.d.ts +2 -0
  243. package/dist/workspace/lineage-upgrade-cli.d.ts.map +1 -1
  244. package/dist/workspace/lineage-upgrade.d.ts +30 -1
  245. package/dist/workspace/lineage-upgrade.d.ts.map +1 -1
  246. package/dist/workspace/lineage-versions.d.ts +116 -0
  247. package/dist/workspace/lineage-versions.d.ts.map +1 -0
  248. package/dist/workspace/links.d.ts +31 -5
  249. package/dist/workspace/links.d.ts.map +1 -1
  250. package/dist/workspace/ls-generated.d.ts +37 -0
  251. package/dist/workspace/ls-generated.d.ts.map +1 -0
  252. package/dist/workspace/ls.d.ts +4 -0
  253. package/dist/workspace/ls.d.ts.map +1 -1
  254. package/dist/workspace/member-commands.d.ts.map +1 -1
  255. package/dist/workspace/nested-graph.d.ts +56 -0
  256. package/dist/workspace/nested-graph.d.ts.map +1 -0
  257. package/dist/workspace/nesting.d.ts +21 -0
  258. package/dist/workspace/nesting.d.ts.map +1 -0
  259. package/dist/workspace/pin-cli.d.ts +10 -0
  260. package/dist/workspace/pin-cli.d.ts.map +1 -0
  261. package/dist/workspace/pin-integrity.d.ts +51 -0
  262. package/dist/workspace/pin-integrity.d.ts.map +1 -0
  263. package/dist/workspace/points.d.ts.map +1 -1
  264. package/dist/workspace/principal-classes.d.ts +114 -0
  265. package/dist/workspace/principal-classes.d.ts.map +1 -0
  266. package/dist/workspace/reason-codes.d.ts +47 -3
  267. package/dist/workspace/reason-codes.d.ts.map +1 -1
  268. package/dist/workspace/record-assets.d.ts.map +1 -1
  269. package/dist/workspace/record-sessions.d.ts +7 -11
  270. package/dist/workspace/record-sessions.d.ts.map +1 -1
  271. package/dist/workspace/records-checkout.d.ts +54 -0
  272. package/dist/workspace/records-checkout.d.ts.map +1 -0
  273. package/dist/workspace/records-cli.d.ts +57 -2
  274. package/dist/workspace/records-cli.d.ts.map +1 -1
  275. package/dist/workspace/records-close.d.ts +5 -2
  276. package/dist/workspace/records-close.d.ts.map +1 -1
  277. package/dist/workspace/records-since.d.ts.map +1 -1
  278. package/dist/workspace/records-write.d.ts +23 -4
  279. package/dist/workspace/records-write.d.ts.map +1 -1
  280. package/dist/workspace/records.d.ts +58 -5
  281. package/dist/workspace/records.d.ts.map +1 -1
  282. package/dist/workspace/returns.d.ts +129 -0
  283. package/dist/workspace/returns.d.ts.map +1 -0
  284. package/dist/workspace/runs-cli.d.ts +164 -0
  285. package/dist/workspace/runs-cli.d.ts.map +1 -0
  286. package/dist/workspace/runs.d.ts +423 -0
  287. package/dist/workspace/runs.d.ts.map +1 -0
  288. package/dist/workspace/source-block.d.ts +1 -1
  289. package/dist/workspace/source-block.d.ts.map +1 -1
  290. package/dist/workspace/status-gates.d.ts +15 -3
  291. package/dist/workspace/status-gates.d.ts.map +1 -1
  292. package/dist/workspace/status.d.ts +10 -0
  293. package/dist/workspace/status.d.ts.map +1 -1
  294. package/dist/workspace/symbols.d.ts +52 -0
  295. package/dist/workspace/symbols.d.ts.map +1 -0
  296. package/dist/workspace/template-manifest.d.ts +11 -3
  297. package/dist/workspace/template-manifest.d.ts.map +1 -1
  298. package/dist/workspace/trailer-joins.d.ts +46 -0
  299. package/dist/workspace/trailer-joins.d.ts.map +1 -0
  300. package/dist/workspace/trailers.d.ts +89 -0
  301. package/dist/workspace/trailers.d.ts.map +1 -0
  302. package/dist/workspace/trust/attestor.d.ts +8 -0
  303. package/dist/workspace/trust/attestor.d.ts.map +1 -1
  304. package/dist/workspace/trust/dsse.d.ts +58 -0
  305. package/dist/workspace/trust/dsse.d.ts.map +1 -0
  306. package/dist/workspace/trust/evidence-cli.d.ts +66 -0
  307. package/dist/workspace/trust/evidence-cli.d.ts.map +1 -0
  308. package/dist/workspace/trust/evidence.d.ts +93 -0
  309. package/dist/workspace/trust/evidence.d.ts.map +1 -0
  310. package/dist/workspace/trust/policy.d.ts +54 -1
  311. package/dist/workspace/trust/policy.d.ts.map +1 -1
  312. package/dist/workspace/trust/provenance.d.ts +21 -1
  313. package/dist/workspace/trust/provenance.d.ts.map +1 -1
  314. package/dist/workspace/trust/rotation.d.ts +132 -0
  315. package/dist/workspace/trust/rotation.d.ts.map +1 -0
  316. package/dist/workspace/trust/seal.d.ts +33 -0
  317. package/dist/workspace/trust/seal.d.ts.map +1 -1
  318. package/dist/workspace/trust/signers-cli.d.ts +49 -0
  319. package/dist/workspace/trust/signers-cli.d.ts.map +1 -0
  320. package/dist/workspace/trust/ssh-commit.d.ts +12 -0
  321. package/dist/workspace/trust/ssh-commit.d.ts.map +1 -1
  322. package/dist/workspace/trust/test-repo.d.ts +13 -0
  323. package/dist/workspace/trust/test-repo.d.ts.map +1 -1
  324. package/dist/workspace/trust/verify.d.ts +15 -0
  325. package/dist/workspace/trust/verify.d.ts.map +1 -1
  326. package/dist/workspace/work-cli.d.ts +39 -3
  327. package/dist/workspace/work-cli.d.ts.map +1 -1
  328. package/dist/workspace/work-evidence.d.ts +1 -1
  329. package/dist/workspace/work-evidence.d.ts.map +1 -1
  330. package/dist/workspace/work.d.ts +26 -1
  331. package/dist/workspace/work.d.ts.map +1 -1
  332. package/dist/workspace/workspace-principals.schema.json +60 -0
  333. package/dist/workspace/write-scope.d.ts +259 -0
  334. package/dist/workspace/write-scope.d.ts.map +1 -0
  335. package/dist/yaml.d.ts +21 -39
  336. package/dist/yaml.d.ts.map +1 -1
  337. package/package.json +2 -2
  338. package/src/audit/prior-art.ts +15 -0
  339. package/src/build.ts +8 -0
  340. package/src/cli/build-options.ts +4 -1
  341. package/src/cli/commands/__fixtures__/init-lexicon-output/package.json +1 -1
  342. package/src/cli/commands/build.ts +2 -0
  343. package/src/cli/commands/carve-emit-state.test.ts +4 -0
  344. package/src/cli/commands/carve-emit.ts +5 -19
  345. package/src/cli/commands/check-lexicon.test.ts +62 -1
  346. package/src/cli/commands/check-lexicon.ts +36 -6
  347. package/src/cli/commands/import-live.test.ts +87 -1
  348. package/src/cli/commands/import-parser-options.test.ts +133 -0
  349. package/src/cli/commands/import.ts +69 -25
  350. package/src/cli/commands/init-lexicon/templates/project.ts +1 -1
  351. package/src/cli/commands/init.test.ts +8 -1
  352. package/src/cli/commands/init.ts +23 -8
  353. package/src/cli/commands/lint.test.ts +37 -0
  354. package/src/cli/commands/onboard.test.ts +53 -3
  355. package/src/cli/commands/onboard.ts +52 -4
  356. package/src/cli/commands/pinned-upgrade.ts +73 -33
  357. package/src/cli/handlers/__snapshots__/build-member.test.ts.snap +2 -2
  358. package/src/cli/handlers/components.ts +2 -2
  359. package/src/cli/handlers/dev.ts +8 -6
  360. package/src/cli/handlers/fan-out.test.ts +6 -6
  361. package/src/cli/handlers/fan-out.ts +2 -1
  362. package/src/cli/handlers/graph.test.ts +42 -0
  363. package/src/cli/handlers/graph.ts +22 -0
  364. package/src/cli/handlers/lifecycle.test.ts +67 -0
  365. package/src/cli/handlers/lifecycle.ts +6 -5
  366. package/src/cli/handlers/misc.ts +2 -0
  367. package/src/cli/handlers/operator.ts +88 -4
  368. package/src/cli/handlers/run.test.ts +111 -0
  369. package/src/cli/handlers/run.ts +85 -24
  370. package/src/cli/handlers/scenario.ts +2 -2
  371. package/src/cli/main.test.ts +33 -0
  372. package/src/cli/main.ts +168 -17
  373. package/src/cli/mcp/workspace-tools.test.ts +5 -2
  374. package/src/cli/mcp/workspace-tools.ts +62 -4
  375. package/src/cli/registry.ts +33 -2
  376. package/src/cli/serve-mcp-workspace.test.ts +1 -1
  377. package/src/codegen/pinned-upgrade-multi.test.ts +157 -0
  378. package/src/codegen/pinned-upgrade-tags.test.ts +112 -0
  379. package/src/codegen/pinned-upgrade.test.ts +104 -0
  380. package/src/codegen/pinned-upgrade.ts +250 -56
  381. package/src/codegen/release-wiring.test.ts +5 -1
  382. package/src/codegen/testdata/postgres-tags.json +242 -0
  383. package/src/components/fan-out-output.test.ts +1 -1
  384. package/src/components/fan-out.test.ts +1 -1
  385. package/src/components/promote.test.ts +1 -1
  386. package/src/config.test.ts +21 -0
  387. package/src/config.ts +27 -0
  388. package/src/content-digest.test.ts +2 -2
  389. package/src/declarable.test.ts +21 -0
  390. package/src/declarable.ts +19 -0
  391. package/src/discovery/fold-composite.test.ts +41 -5
  392. package/src/discovery/fold-import.test.ts +129 -0
  393. package/src/discovery/fold-import.ts +643 -131
  394. package/src/discovery/fold-package-composite.test.ts +264 -0
  395. package/src/discovery/fold-specifiers.test.ts +191 -0
  396. package/src/discovery/param-deps.test.ts +66 -1
  397. package/src/discovery/param-deps.ts +45 -0
  398. package/src/discovery/specifier-resolve.ts +344 -0
  399. package/src/fold/fold.test.ts +39 -1
  400. package/src/fold/fold.ts +83 -9
  401. package/src/fold-provenance.test.ts +140 -0
  402. package/src/graph-ir.test.ts +83 -0
  403. package/src/graph-ir.ts +29 -0
  404. package/src/import/embedded.test.ts +20 -0
  405. package/src/import/embedded.ts +13 -0
  406. package/src/import/parser-options.ts +46 -0
  407. package/src/import/parser.ts +20 -0
  408. package/src/lexicon.ts +79 -3
  409. package/src/lifecycle/gate-ledger.test.ts +14 -0
  410. package/src/lifecycle/gate-ledger.ts +18 -1
  411. package/src/lifecycle/observe.test.ts +18 -0
  412. package/src/lifecycle/observe.ts +6 -4
  413. package/src/lifecycle/plan-digest.test.ts +54 -3
  414. package/src/lifecycle/plan-digest.ts +38 -8
  415. package/src/lifecycle/snapshot.ts +2 -2
  416. package/src/lifecycle/work-lease.test.ts +1 -1
  417. package/src/lifecycle/work-lease.ts +93 -2
  418. package/src/lint/engine.test.ts +55 -0
  419. package/src/lint/engine.ts +30 -4
  420. package/src/lint/output-docs.test.ts +59 -56
  421. package/src/op/activities/activity-contracts.ts +1 -0
  422. package/src/op/activities/apply.test.ts +189 -5
  423. package/src/op/activities/apply.ts +230 -8
  424. package/src/op/activities/index.ts +3 -0
  425. package/src/op/activities/lexicon-upgrade.test.ts +160 -6
  426. package/src/op/activities/lexicon-upgrade.ts +154 -51
  427. package/src/op/activities/propose-upgrade.ts +8 -5
  428. package/src/op/composites/apply-op.ts +12 -5
  429. package/src/op/composites/composites.test.ts +30 -3
  430. package/src/op/composites/lexicon-upgrade-op.test.ts +7 -2
  431. package/src/op/composites/lexicon-upgrade-op.ts +29 -8
  432. package/src/op/emulator-lifecycle.test.ts +23 -0
  433. package/src/op/emulator-lifecycle.ts +52 -14
  434. package/src/op/gate-approval.test.ts +91 -0
  435. package/src/op/gate-approval.ts +5 -1
  436. package/src/op/gate.ts +34 -8
  437. package/src/op/index.ts +3 -1
  438. package/src/op/local-executor.test.ts +15 -0
  439. package/src/op/local-executor.ts +40 -12
  440. package/src/op/local-output.ts +1 -1
  441. package/src/op/operator.ts +4 -0
  442. package/src/op/run-context.test.ts +141 -0
  443. package/src/op/run-context.ts +51 -0
  444. package/src/op/runtimes/local.test.ts +14 -0
  445. package/src/op/runtimes/local.ts +2 -0
  446. package/src/op/steward-beside.ts +2 -0
  447. package/src/op/types.ts +8 -3
  448. package/src/op/work-lease-run.test.ts +47 -0
  449. package/src/op/work-lease-run.ts +73 -11
  450. package/src/provenance.ts +35 -0
  451. package/src/serializer.ts +9 -0
  452. package/src/telemetry-attribution.test.ts +91 -0
  453. package/src/telemetry-attribution.ts +145 -0
  454. package/src/workspace/__fixtures__/studio-template-84c8b21.json +1 -1
  455. package/src/workspace/agent-cli.ts +138 -0
  456. package/src/workspace/agent.schema.json +378 -0
  457. package/src/workspace/behold-kinds.test.ts +1 -1
  458. package/src/workspace/box-factory.test.ts +320 -0
  459. package/src/workspace/box-factory.ts +103 -0
  460. package/src/workspace/changes-cli.ts +5 -0
  461. package/src/workspace/changes.schema.json +171 -1
  462. package/src/workspace/changes.ts +61 -4
  463. package/src/workspace/check-live.test.ts +192 -0
  464. package/src/workspace/check.schema.json +64 -0
  465. package/src/workspace/checks/boxes.test.ts +2 -0
  466. package/src/workspace/checks/links.ts +23 -2
  467. package/src/workspace/checks/live.ts +113 -0
  468. package/src/workspace/checks.test.ts +2 -2
  469. package/src/workspace/checks.ts +49 -8
  470. package/src/workspace/compose-graph.test.ts +47 -0
  471. package/src/workspace/compose-graph.ts +127 -3
  472. package/src/workspace/conformance/__fixture__/decisions/decision.kind.mjs +7 -1
  473. package/src/workspace/conformance/__fixture__/decisions/decision.schema.json +5 -0
  474. package/src/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +27 -0
  475. package/src/workspace/conformance/__writer_fixture__/answers/answer.schema.json +95 -0
  476. package/src/workspace/conformance/__writer_fixture__/decisions/points.json +132 -0
  477. package/src/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +48 -0
  478. package/src/workspace/conformance/__writer_fixture__/sessions/session.schema.json +108 -0
  479. package/src/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  480. package/src/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  481. package/src/workspace/conformance/__writer_fixture__/work/work.schema.json +578 -0
  482. package/src/workspace/conformance/conformance.e2e.test.ts +35 -3
  483. package/src/workspace/conformance/index.mjs +30 -3
  484. package/src/workspace/conformance/index.ts +103 -15
  485. package/src/workspace/conformance/vitest.ts +44 -2
  486. package/src/workspace/conformance/writer-conformance.e2e.test.ts +131 -0
  487. package/src/workspace/conformance/writer.test.ts +156 -0
  488. package/src/workspace/conformance/writer.ts +880 -0
  489. package/src/workspace/decide.ts +7 -1
  490. package/src/workspace/declaration.schema.json +368 -4
  491. package/src/workspace/declaration.ts +270 -1
  492. package/src/workspace/declared-kinds.test.ts +33 -0
  493. package/src/workspace/evidence.schema.json +279 -0
  494. package/src/workspace/export-cli.ts +180 -0
  495. package/src/workspace/export-import.test.ts +282 -0
  496. package/src/workspace/export.ts +486 -0
  497. package/src/workspace/graph-cli.ts +51 -2
  498. package/src/workspace/graph-contract.test.ts +89 -4
  499. package/src/workspace/graph.schema.json +453 -1
  500. package/src/workspace/identity.test.ts +196 -0
  501. package/src/workspace/identity.ts +186 -0
  502. package/src/workspace/import.ts +325 -0
  503. package/src/workspace/intent-cli.ts +64 -10
  504. package/src/workspace/intent-record.schema.json +208 -0
  505. package/src/workspace/intent-record.ts +35 -1
  506. package/src/workspace/intent-why.test.ts +274 -0
  507. package/src/workspace/intent.schema.json +718 -7
  508. package/src/workspace/intent.test.ts +11 -2
  509. package/src/workspace/intent.ts +495 -32
  510. package/src/workspace/kinds.test.ts +5 -5
  511. package/src/workspace/kinds.ts +62 -33
  512. package/src/workspace/lineage-adopt-cli.ts +103 -0
  513. package/src/workspace/lineage-adopt.test.ts +552 -0
  514. package/src/workspace/lineage-adopt.ts +452 -0
  515. package/src/workspace/lineage-check.ts +26 -5
  516. package/src/workspace/lineage-cli.ts +12 -2
  517. package/src/workspace/lineage-hash-index.ts +305 -0
  518. package/src/workspace/lineage-init.test.ts +9 -0
  519. package/src/workspace/lineage-init.ts +29 -9
  520. package/src/workspace/lineage-lock.ts +54 -0
  521. package/src/workspace/lineage-migrations.test.ts +27 -0
  522. package/src/workspace/lineage-migrations.ts +44 -14
  523. package/src/workspace/lineage-provenance.ts +40 -0
  524. package/src/workspace/lineage-upgrade-cli.ts +9 -5
  525. package/src/workspace/lineage-upgrade.test.ts +92 -1
  526. package/src/workspace/lineage-upgrade.ts +111 -16
  527. package/src/workspace/lineage-versions.ts +348 -0
  528. package/src/workspace/links.test.ts +121 -2
  529. package/src/workspace/links.ts +97 -6
  530. package/src/workspace/ls-contract.test.ts +84 -1
  531. package/src/workspace/ls-generated.ts +111 -0
  532. package/src/workspace/ls.schema.json +19 -0
  533. package/src/workspace/ls.ts +8 -1
  534. package/src/workspace/member-commands.ts +3 -1
  535. package/src/workspace/nested-graph.test.ts +176 -0
  536. package/src/workspace/nested-graph.ts +169 -0
  537. package/src/workspace/nesting.ts +37 -0
  538. package/src/workspace/pin-cli.test.ts +71 -0
  539. package/src/workspace/pin-cli.ts +57 -0
  540. package/src/workspace/pin-integrity.test.ts +121 -0
  541. package/src/workspace/pin-integrity.ts +104 -0
  542. package/src/workspace/points-write.schema.json +2 -0
  543. package/src/workspace/principal-classes.test.ts +175 -0
  544. package/src/workspace/principal-classes.ts +307 -0
  545. package/src/workspace/read-contract.test.ts +24 -0
  546. package/src/workspace/reason-codes.test.ts +20 -2
  547. package/src/workspace/reason-codes.ts +53 -3
  548. package/src/workspace/record-sessions.ts +12 -14
  549. package/src/workspace/records-amend.schema.json +6 -0
  550. package/src/workspace/records-checkout.ts +106 -0
  551. package/src/workspace/records-cli.ts +195 -22
  552. package/src/workspace/records-close.schema.json +7 -2
  553. package/src/workspace/records-close.ts +10 -2
  554. package/src/workspace/records-formats.test.ts +13 -5
  555. package/src/workspace/records-new.schema.json +6 -0
  556. package/src/workspace/records-review.schema.json +6 -0
  557. package/src/workspace/records-sessions.test.ts +23 -6
  558. package/src/workspace/records-uncommitted.test.ts +171 -0
  559. package/src/workspace/records-write.test.ts +65 -8
  560. package/src/workspace/records-write.ts +92 -6
  561. package/src/workspace/records.schema.json +127 -4
  562. package/src/workspace/records.ts +123 -5
  563. package/src/workspace/returns.ts +328 -0
  564. package/src/workspace/runs-cli.ts +381 -0
  565. package/src/workspace/runs-write.schema.json +583 -0
  566. package/src/workspace/runs.schema.json +810 -0
  567. package/src/workspace/runs.test.ts +242 -0
  568. package/src/workspace/runs.ts +709 -0
  569. package/src/workspace/signers.schema.json +206 -0
  570. package/src/workspace/status-contract.test.ts +5 -0
  571. package/src/workspace/status-gates.ts +24 -9
  572. package/src/workspace/status.schema.json +127 -2
  573. package/src/workspace/status.ts +21 -1
  574. package/src/workspace/symbols.ts +180 -0
  575. package/src/workspace/template-manifest.ts +22 -4
  576. package/src/workspace/trailer-joins.test.ts +171 -0
  577. package/src/workspace/trailer-joins.ts +82 -0
  578. package/src/workspace/trailers.ts +148 -0
  579. package/src/workspace/trust/attestor.ts +15 -0
  580. package/src/workspace/trust/dsse.ts +134 -0
  581. package/src/workspace/trust/evidence-cli.ts +195 -0
  582. package/src/workspace/trust/evidence.test.ts +241 -0
  583. package/src/workspace/trust/evidence.ts +207 -0
  584. package/src/workspace/trust/policy.ts +110 -3
  585. package/src/workspace/trust/provenance.ts +41 -4
  586. package/src/workspace/trust/record-seal.test.ts +1 -1
  587. package/src/workspace/trust/rotation.test.ts +258 -0
  588. package/src/workspace/trust/rotation.ts +336 -0
  589. package/src/workspace/trust/seal.ts +63 -1
  590. package/src/workspace/trust/signers-cli.ts +178 -0
  591. package/src/workspace/trust/ssh-commit.ts +53 -4
  592. package/src/workspace/trust/test-repo.ts +18 -0
  593. package/src/workspace/trust/trust.test.ts +8 -2
  594. package/src/workspace/trust/verify-cli.ts +1 -0
  595. package/src/workspace/trust/verify.ts +22 -0
  596. package/src/workspace/work-cli.e2e.test.ts +28 -1
  597. package/src/workspace/work-cli.ts +133 -8
  598. package/src/workspace/work-evidence.schema.json +6 -0
  599. package/src/workspace/work-history.schema.json +73 -1
  600. package/src/workspace/work-history.test.ts +48 -5
  601. package/src/workspace/work-kind-fields.test.ts +154 -0
  602. package/src/workspace/work-lease.schema.json +14 -1
  603. package/src/workspace/work.ts +82 -0
  604. package/src/workspace/workspace-principals.schema.json +60 -0
  605. package/src/workspace/write-scope.test.ts +466 -0
  606. package/src/workspace/write-scope.ts +573 -0
  607. package/src/yaml.test.ts +111 -1
  608. package/src/yaml.ts +141 -549
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Write scope per member and record kind, for each principal class, and the
3
+ * agent sessions bound to one member (#2524 D5, D20; #2548; ws-067).
4
+ *
5
+ * The declaration's `writeScope` block gives a restricted class the members
6
+ * whose files it may write and the record kinds it may write, with which
7
+ * verbs (`new`, `amend`, `review`, `close`). A class with no entry is not
8
+ * restricted. The declaration's `agents` list names agent sessions, each
9
+ * bound to one member: a session writes that member's files, and the records
10
+ * of kinds that member or the workspace declares, as `writeScope.agent`
11
+ * allows. An agent's members can't be widened.
12
+ *
13
+ * Two places apply it, both reading the scope from the base revision so a
14
+ * change can't widen its own scope (#2524 threat model):
15
+ *
16
+ * - The write paths: `chant workspace records new|amend|review|close` and the
17
+ * MCP record tools refuse a write outside the writer's scope with
18
+ * `write-scope-member` or `write-scope-kind`, and an unknown session with
19
+ * `agent-unknown`. The session comes from `CHANT_AGENT`.
20
+ * - The enforcement boundary: `chant workspace check --changes <range>`
21
+ * judges every commit in the range, by its `Chant-Agent` trailer, its
22
+ * attested principal, or its author, and reports each path written outside
23
+ * that writer's scope. Run in CI with an attestation policy, the principal
24
+ * is the signer the policy at base trusts; on a developer machine it is
25
+ * detection only (ws-002).
26
+ *
27
+ * A principal's class comes from the role grants in the trust policy at base,
28
+ * through {@link principalClass} alone (the agent, runner and service roles,
29
+ * then the role each domain class a pinned package supplies names, #3080),
30
+ * or from naming an agent session. Claiming a session only ever narrows what
31
+ * a writer may do, so an unverified `CHANT_AGENT` or trailer is safe to honour.
32
+ *
33
+ * A writeScope key no pinned package supplies fails closed: a writer judged
34
+ * `human` might be in that class, so it is refused with
35
+ * `write-scope-class-unknown` until the plugin is installed at the pinned
36
+ * version or the entry is removed.
37
+ */
38
+ import { type AgentDeclaration, type ClassScope, type Declaration, type PrincipalClass, type ProtectedPath, type WriteVerb } from "./declaration.js";
39
+ import { classesOf, roleGrants, type ClassRegistry } from "./principal-classes.js";
40
+ import { type TrustPolicy } from "./trust/policy.js";
41
+ import { AGENT_TRAILER } from "./trailers.js";
42
+ /** The environment variable naming the agent session a write is made in. */
43
+ export declare const AGENT_ENV = "CHANT_AGENT";
44
+ /** The commit trailer naming the agent session a commit was made in, one of chant's trailers (`trailers.ts`). */
45
+ export { AGENT_TRAILER };
46
+ /** Why a write is outside its writer's scope. Closed. */
47
+ export declare const WRITE_SCOPE_CODES: readonly ["write-scope-member", "write-scope-kind", "write-scope-class-unknown", "agent-unknown"];
48
+ export type WriteScopeCode = (typeof WRITE_SCOPE_CODES)[number];
49
+ /**
50
+ * What `check --changes` reports a path with: the record-write codes, and a
51
+ * write to a protected path (#3146), which a record write never is. Closed.
52
+ */
53
+ export declare const SCOPE_FINDING_CODES: readonly ["write-scope-member", "write-scope-kind", "write-scope-class-unknown", "agent-unknown", "write-scope-protected"];
54
+ export type ScopeFindingCode = (typeof SCOPE_FINDING_CODES)[number];
55
+ export { classesOf, roleGrants };
56
+ /**
57
+ * The class a principal is in: the first of agent, runner and service whose
58
+ * role it holds at base, then the first domain class in `classes` whose role
59
+ * it holds (#3080), or human.
60
+ */
61
+ export declare function principalClass(policy: TrustPolicy, principal: string | null, classes?: ClassRegistry): PrincipalClass;
62
+ /** Who is writing, as the scope judges it. */
63
+ export interface Writer {
64
+ /** The principal named, or null when none is. */
65
+ principal: string | null;
66
+ class: PrincipalClass;
67
+ /** The agent session the writer is bound to, or null. */
68
+ agent: AgentDeclaration | null;
69
+ }
70
+ export declare class WriteScopeError extends Error {
71
+ readonly code: WriteScopeCode;
72
+ constructor(code: WriteScopeCode, message: string);
73
+ }
74
+ /**
75
+ * The writer: in the session `agent` names (refused with agent-unknown when
76
+ * the declaration declares none by that name), in the session that lists
77
+ * `principal`, or else in the class `principal`'s roles give it.
78
+ */
79
+ export declare function resolveWriter(declaration: Declaration | null, policy: TrustPolicy, given: {
80
+ agent?: string | null;
81
+ principal?: string | null;
82
+ }, classes?: ClassRegistry): Writer;
83
+ /**
84
+ * Refuse `writer` when the declaration's writeScope names a class `classes`
85
+ * doesn't know and the writer is judged human (#3080): nothing says which
86
+ * role puts a principal in the unknown class, so this writer may be in it.
87
+ * A writer in another class is judged by that class, which comes first.
88
+ */
89
+ export declare function unknownClassVerdict(declaration: Declaration | null, writer: Writer, classes: ClassRegistry): {
90
+ ok: true;
91
+ } | {
92
+ ok: false;
93
+ code: "write-scope-class-unknown";
94
+ message: string;
95
+ };
96
+ /** The scope that applies to `writer`, or null when its class is not restricted. An agent is always restricted to its member. */
97
+ export declare function scopeOf(declaration: Declaration | null, writer: Writer): ClassScope | null;
98
+ export type ScopeVerdict = {
99
+ ok: true;
100
+ } | {
101
+ ok: false;
102
+ code: Exclude<ScopeFindingCode, "agent-unknown">;
103
+ message: string;
104
+ };
105
+ /** A record write's verdict: never write-scope-protected, since protected paths judge files that aren't records. */
106
+ export type RecordVerdict = {
107
+ ok: true;
108
+ } | {
109
+ ok: false;
110
+ code: Exclude<WriteScopeCode, "agent-unknown">;
111
+ message: string;
112
+ };
113
+ /** The record kind a write goes to, as the scope reads it. */
114
+ export interface ScopedKind {
115
+ /** The kind file's `recordKind.name`. */
116
+ name: string;
117
+ /** The name the declaration gives it, or null. */
118
+ declaredName: string | null;
119
+ /** The member that declares the kind, or null for the workspace's own kinds. */
120
+ member: string | null;
121
+ /** True when the declaration names the kind; an undeclared kind belongs to the member holding its records. */
122
+ declared: boolean;
123
+ }
124
+ /** Whether `writer` may write a record of `kind` with `verb`. A delete is never in a restricted scope. */
125
+ export declare function judgeRecord(declaration: Declaration | null, writer: Writer, kind: ScopedKind, verb: WriteVerb | "delete"): RecordVerdict;
126
+ /**
127
+ * The protected entry of `entries` that covers `path` (#3146, ws-077): one
128
+ * whose glob matches the path or a directory above it. Null when none does.
129
+ */
130
+ export declare function protectedEntry(entries: readonly ProtectedPath[], path: string): ProtectedPath | null;
131
+ /**
132
+ * Whether JSON text `before` and `after` differ only in the top-level keys
133
+ * `except` names. False when either is missing or isn't a JSON object.
134
+ */
135
+ export declare function onlyKeysChanged(before: string | null, after: string | null, except: readonly string[]): boolean;
136
+ /** A file's text before and after a write, read only when a protected entry with `except` needs it. */
137
+ export interface PathChange {
138
+ before(): string | null;
139
+ after(): string | null;
140
+ }
141
+ /**
142
+ * Whether `writer` may write the file at `path`, from the workspace root:
143
+ * the path is in a member the writer may write, and no protected entry of
144
+ * its scope covers it, unless the entry's `except` allows the change (#3146).
145
+ * Without `change`, a write to a path an `except` entry covers is judged as a
146
+ * change outside the allowed keys.
147
+ */
148
+ export declare function judgePath(declaration: Declaration | null, writer: Writer, path: string, change?: PathChange): ScopeVerdict;
149
+ /** The declaration and policy a write on this machine is judged by. */
150
+ export interface ScopeSource {
151
+ declaration: Declaration | null;
152
+ /** Where the declaration was read: the base revision, or the working tree when there is no base or no declaration at it. */
153
+ from: "base" | "working-tree" | null;
154
+ /** The workspace root on disk, or null without a declaration. */
155
+ rootOnDisk: string | null;
156
+ /** The workspace root from the git root, "." for the git root, or null without a declaration. */
157
+ root: string | null;
158
+ policy: TrustPolicy;
159
+ /** The principal classes: the core four and those the declaration's pins supply, path pins read where the declaration was (#3080). */
160
+ classes: ClassRegistry;
161
+ }
162
+ /**
163
+ * The scope for a write from `cwd`: the declaration and the trust policy at
164
+ * the base revision (`origin/HEAD`, `main` or `master`), so a write can't
165
+ * widen its own scope by editing its copy of the declaration. Without a base,
166
+ * or without a declaration at it, the working tree's declaration.
167
+ */
168
+ export declare function scopeSource(cwd: string): ScopeSource;
169
+ /**
170
+ * The kind a write goes to, as {@link judgeRecord} reads it: the declared
171
+ * entry whose file is `kindFile`, or, for a kind the declaration does not
172
+ * name, the member holding `recordsDir`.
173
+ */
174
+ export declare function scopedKind(source: ScopeSource, kindName: string, kindFile: string, recordsDir: string): ScopedKind;
175
+ /**
176
+ * Refuse a record write outside the writer's scope (#2548): throws a
177
+ * {@link WriteScopeError}. `agent` is the session the write names
178
+ * (`CHANT_AGENT`), and `principal` who the write names as its author.
179
+ * Returns what it read at base, for the identity rule (#3163).
180
+ */
181
+ export declare function refuseRecordWrite(cwd: string, write: {
182
+ kindName: string;
183
+ kindFile: string;
184
+ recordsDir: string;
185
+ verb: WriteVerb;
186
+ agent?: string | null;
187
+ principal?: string | null;
188
+ }): ScopeSource;
189
+ /** A commit as the scope check judged it. */
190
+ export interface ScopeCommit {
191
+ commit: string;
192
+ subject: string;
193
+ /** The attested principal, or the author's email when the commit is not attested. */
194
+ principal: string;
195
+ /** Whether the principal is a signer the policy at base attests, or only the author the commit claims. */
196
+ attested: boolean;
197
+ class: PrincipalClass;
198
+ /** The agent session, from the Chant-Agent trailer or the principal, or null. */
199
+ agent: string | null;
200
+ /** Paths in the workspace the commit writes. */
201
+ paths: number;
202
+ }
203
+ export interface ScopeFinding {
204
+ /** `finding:<code>:<commit>:<path>`, or `finding:<code>:<commit>` for agent-unknown and write-scope-class-unknown, which judge the whole commit. */
205
+ id: string;
206
+ code: ScopeFindingCode;
207
+ commit: string;
208
+ /** From the workspace root, or null for a finding on the whole commit. */
209
+ path: string | null;
210
+ principal: string;
211
+ class: PrincipalClass;
212
+ agent: string | null;
213
+ /** For a record file: how it was written, as the records commands name it, or delete. */
214
+ verb: WriteVerb | "delete" | null;
215
+ message: string;
216
+ }
217
+ export interface ScopeReport {
218
+ /** The commit the declaration and the trust policy were read at. */
219
+ base: string;
220
+ /** The classes with a writeScope entry, and agent when any session is declared: core first, then domain classes in pin order, then any no pinned package supplies. */
221
+ restricted: PrincipalClass[];
222
+ agents: string[];
223
+ commits: ScopeCommit[];
224
+ findings: ScopeFinding[];
225
+ }
226
+ /** A record kind the check knows, to tell a record file from another path. */
227
+ export interface CheckKind {
228
+ scoped: ScopedKind;
229
+ /** The records directory, from the repository root. */
230
+ dir: string;
231
+ match: RegExp;
232
+ /** The reviews field, when the kind has one; the verdicts field of a session kind. */
233
+ reviewFields: string[];
234
+ /** The state field and closed states of a session kind, for telling a close. */
235
+ session: {
236
+ stateField: string;
237
+ closed: string[];
238
+ fills: string[];
239
+ } | null;
240
+ format: string;
241
+ }
242
+ /**
243
+ * Judge every commit in `base..head` against the write scope the declaration
244
+ * at `base` gives (#2548). Returns null when that declaration restricts no
245
+ * one: no writeScope block and no agent session. Merges are skipped; the
246
+ * commits they bring are judged instead.
247
+ */
248
+ export declare function checkWriteScope(q: {
249
+ top: string;
250
+ base: string;
251
+ head: string;
252
+ /** The workspace root from the repository root, "" for the top. */
253
+ prefix: string;
254
+ declaration: Declaration;
255
+ kinds: CheckKind[];
256
+ /** The principal classes the declaration's pins supply at base (#3080). Without it, the core four. */
257
+ classes?: ClassRegistry;
258
+ }): Promise<ScopeReport | null>;
259
+ //# sourceMappingURL=write-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-scope.d.ts","sourceRoot":"","sources":["../../src/workspace/write-scope.ts"],"names":[],"mappings":"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"}
package/dist/yaml.d.ts CHANGED
@@ -1,24 +1,23 @@
1
1
  /**
2
- * Lightweight YAML emitter and parser.
2
+ * YAML emitter and parser.
3
3
  *
4
- * Covers the subset of YAML used by Chant lexicons (scalars, block arrays,
5
- * nested objects, block scalars, tagged values, anchors, aliases and merge
6
- * keys). Not a full YAML implementation: flow collections are read only when
7
- * they are JSON. `splitYAMLDocuments` splits a multi-document stream. The
8
- * parser throws a `YAMLParseError` on a line it cannot place instead of
9
- * dropping it (#2991).
4
+ * The emitter writes the block-style YAML chant's serializers produce. The
5
+ * parser is js-yaml with chant's schema (#3006): YAML 1.2 core types,
6
+ * merge keys, `yes`/`no` booleans, and local tags such as `!reference` read
7
+ * as strings. `splitYAMLDocuments` splits a multi-document stream. Input the
8
+ * parser cannot read throws a `YAMLParseError` naming the line.
10
9
  */
11
10
  export declare function emitYAML(value: unknown, indent: number): string;
12
- /** Result of parsing a YAML block. */
13
- export interface ParseResult {
14
- value: unknown;
15
- endIndex: number;
16
- }
17
11
  /**
18
- * Input the parser cannot place (#2991). The parser used to skip such a line,
19
- * or read it as a key of whatever mapping was open at the top level, so a
20
- * mis-indented or unsupported construct came back as a quietly different
21
- * document. Now it is an error naming the line.
12
+ * `key: value` at column `indent * 2`, for a serializer that writes a
13
+ * document key by key. A block value follows the colon on the next line; an
14
+ * inline one (a scalar, `{}`, `[]`) needs a space after the colon, or
15
+ * `jobs:{}` is the plain scalar "jobs:{}" rather than a key (#3006).
16
+ */
17
+ export declare function emitYAMLEntry(key: string, value: unknown, indent?: number): string;
18
+ /**
19
+ * A document the parser cannot read. Its message and `line` name the line,
20
+ * so `chant import` can report "YAML line N: ..." instead of a stack trace.
22
21
  */
23
22
  export declare class YAMLParseError extends Error {
24
23
  /** 1-based line number within the text handed to the parser. */
@@ -28,17 +27,16 @@ export declare class YAMLParseError extends Error {
28
27
  /**
29
28
  * Parse a YAML document (or JSON document) into a plain object.
30
29
  *
31
- * Tries `JSON.parse` first; falls back to a line-based YAML parser that
32
- * handles the subset of YAML commonly found in CI configuration files. Throws
33
- * {@link YAMLParseError} on a line it cannot place rather than dropping it.
30
+ * Tries `JSON.parse` first, then js-yaml (#3006). A top-level sequence reads
31
+ * as `{}`, since callers rely on getting a mapping back; use
32
+ * {@link parseYAMLDocument} for the list. Throws {@link YAMLParseError} with
33
+ * the line number on input it cannot read.
34
34
  */
35
35
  export declare function parseYAML(content: string): Record<string, unknown>;
36
36
  /**
37
37
  * Parse one YAML (or JSON) document whose top level may be a sequence
38
- * (#2965). {@link parseYAML} reads only a top-level mapping and returns `{}`
39
- * for a file like `- a\n- b`; its callers rely on getting a mapping back, so
40
- * it keeps doing that. This returns the list instead, and otherwise defers to
41
- * `parseYAML`.
38
+ * (#2965). {@link parseYAML} returns `{}` for a file like `- a\n- b`; this
39
+ * returns the list.
42
40
  */
43
41
  export declare function parseYAMLDocument(content: string): unknown;
44
42
  /**
@@ -49,22 +47,6 @@ export declare function parseYAMLDocument(content: string): unknown;
49
47
  * normalized to `\n`.
50
48
  */
51
49
  export declare function splitYAMLDocuments(content: string): string[];
52
- /**
53
- * Parse indentation-based YAML lines into a key-value object: the mapping
54
- * whose keys sit at column `baseIndent`, starting at `startIndex`.
55
- *
56
- * It ends at the first line that is not one of its keys: a line at another
57
- * column, a sequence entry, or text that is not `key:`. That line goes back
58
- * to the caller in `endIndex`; if no caller owns it, `parseYAML` reports it
59
- * (#2991). This function never skips a content line.
60
- */
61
- export declare function parseYAMLLines(lines: string[], startIndex: number, baseIndent: number): ParseResult;
62
- /**
63
- * Parse a block array: the `- ` entries at column `baseIndent`, starting at
64
- * `startIndex`. Like {@link parseYAMLLines} it ends at the first line that is
65
- * not one of its entries and hands that line back in `endIndex`.
66
- */
67
- export declare function parseYAMLArray(lines: string[], startIndex: number, baseIndent: number): ParseResult;
68
50
  /**
69
51
  * Coerce a scalar string to a typed value.
70
52
  */
@@ -1 +1 @@
1
- {"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../src/yaml.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA0BH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAgH/D;AAMD,sCAAsC;AACtC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,gEAAgE;IAChE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAmJD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAalE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAW1D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAc5D;AAiFD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,WAAW,CAqBb;AA+MD;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,WAAW,CA4Db;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAwBlD"}
1
+ {"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../src/yaml.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA4BH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAsH/D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,SAAI,GAAG,MAAM,CAG7E;AAMD;;;GAGG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,gEAAgE;IAChE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YAAY,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAIxC;CACF;AAkID;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQlE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO1D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAc5D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAwBlD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intentius/chant",
3
- "version": "0.100.0",
3
+ "version": "0.102.0",
4
4
  "description": "Declarative infrastructure-as-code toolkit — TypeScript on Node.js",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://intentius.io/chant",
@@ -97,7 +97,7 @@
97
97
  }
98
98
  },
99
99
  "scripts": {
100
- "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && find dist -type f \\( -name \"*.js\" -o -name \"*.js.map\" \\) -delete",
100
+ "build": "../../scripts/tsc7.sh -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && find dist -type f \\( -name \"*.js\" -o -name \"*.js.map\" \\) -delete",
101
101
  "prepack": "npm run build"
102
102
  },
103
103
  "dependencies": {
@@ -117,11 +117,26 @@ export const PRIOR_ART = {
117
117
  // docs site. The three `general/secrets` checks chant credits live only here:
118
118
  // trivy dropped them when it absorbed tfsec.
119
119
  "tfsec": { name: "tfsec", url: "https://github.com/aquasecurity/tfsec", license: "MIT", kind: "scanner" },
120
+ "trivy-checks": { name: "trivy-checks", url: "https://github.com/aquasecurity/trivy-checks", license: "MIT", kind: "scanner" },
120
121
  // Semgrep's engine is LGPL-2.1 but its rules are not: they ship under the
121
122
  // proprietary Semgrep Rules License v1.0, which forbids redistribution. So
122
123
  // this entry carries no SPDX id, and no semgrep rule text is ever copied into
123
124
  // this repository — a credit by name and link is the whole of it (#2107).
124
125
  "semgrep": { name: "Semgrep Registry rules", url: "https://github.com/semgrep/semgrep-rules", license: "Semgrep Rules License v1.0 (proprietary, not an SPDX id)", kind: "scanner" },
126
+ // Prometheus and Grafana observability family (#2916). promtool and amtool
127
+ // ship in the Prometheus and Alertmanager repositories and have no per-rule
128
+ // ids: credits to them name the check (`check rules`, `check-config`) in the
129
+ // lineage file's comments and omit `rule`.
130
+ "promtool": { name: "promtool check rules", url: "https://prometheus.io/docs/prometheus/latest/command-line/promtool/#promtool-check-rules", license: "Apache-2.0", kind: "vendor-validator" },
131
+ "amtool": { name: "amtool check-config", url: "https://github.com/prometheus/alertmanager/blob/main/cmd/amtool/check_config.go", license: "Apache-2.0", kind: "vendor-validator" },
132
+ "pint": { name: "pint (Cloudflare)", url: "https://github.com/cloudflare/pint", license: "Apache-2.0", kind: "scanner" },
133
+ "dashboard-linter": { name: "Grafana dashboard-linter", url: "https://github.com/grafana/dashboard-linter", license: "Apache-2.0", kind: "scanner" },
134
+ // Postgres schema and migration checks (#3285). squawk and strong_migrations
135
+ // are migration linters; their type rules overlap schema-level checks. The
136
+ // wiki page is documentation, not a tool.
137
+ "squawk": { name: "squawk", url: "https://github.com/sbdchd/squawk", license: "Apache-2.0", kind: "scanner" },
138
+ "strong_migrations": { name: "strong_migrations", url: "https://github.com/ankane/strong_migrations", license: "MIT", kind: "scanner" },
139
+ "postgres-wiki-dont-do-this": { name: "PostgreSQL wiki: Don't Do This", url: "https://wiki.postgresql.org/wiki/Don%27t_Do_This", license: "n/a", kind: "specification" },
125
140
  } as const satisfies Record<string, PriorArtEntry>;
126
141
 
127
142
  export type PriorArtTool = keyof typeof PRIOR_ART;
package/src/build.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { Declarable } from "./declarable";
2
2
  import type { Serializer, SerializerResult } from "./serializer";
3
3
  import type { OwnershipMarker } from "./ownership";
4
+ import type { TelemetryAttribution } from "./telemetry-attribution";
4
5
  import type { BuildError, DiscoveryErrorType } from "./errors";
5
6
  import type { IntrinsicDef, BuildRootContribution, BuildRootContributor } from "./lexicon";
6
7
  import { getProvenance, type BuildParamProvenance } from "./provenance";
@@ -194,6 +195,12 @@ export interface BuildOptions {
194
195
  */
195
196
  ownership?: OwnershipMarker;
196
197
 
198
+ /**
199
+ * Telemetry attribution facts (#2558), passed to each serializer's
200
+ * {@link SerializeContext}. Resolved by the build command; unset at level 0.
201
+ */
202
+ telemetry?: TelemetryAttribution;
203
+
197
204
  /**
198
205
  * The resolved project configuration, passed through to each serializer's
199
206
  * {@link SerializeContext} so a dialect can read its lexicon-scoped settings.
@@ -876,6 +883,7 @@ async function buildFromDiscoveryResult(
876
883
  const serialized = serializer.serialize(applyBound, lexiconLexiconOutputs, {
877
884
  ownership: options?.ownership,
878
885
  config: options?.config,
886
+ ...(options?.telemetry ? { telemetry: options.telemetry } : {}),
879
887
  ...(receipts.size > 0 ? { receipts } : {}),
880
888
  });
881
889
  // Collect any non-fatal serializer diagnostics into the build warnings.
@@ -64,6 +64,8 @@ export interface ProjectBuildOptionsInput {
64
64
  ownership?: OwnershipMarker;
65
65
  /** This build's resolved build-time parameters (#1064). */
66
66
  buildParams?: BuildParamProvenance[];
67
+ /** Telemetry attribution facts (#2558), from `resolveTelemetryAttribution`; unset at level 0. */
68
+ telemetry?: import("../telemetry-attribution").TelemetryAttribution;
67
69
  }
68
70
 
69
71
  /**
@@ -75,7 +77,7 @@ export interface ProjectBuildOptionsInput {
75
77
  * in this function, never at a call site.
76
78
  */
77
79
  export function resolveProjectBuildOptions(input: ProjectBuildOptionsInput): BuildOptions {
78
- const { config, configDir, plugins, modes, ownership, buildParams } = input;
80
+ const { config, configDir, plugins, modes, ownership, buildParams, telemetry } = input;
79
81
 
80
82
  // #1039 — each loaded plugin's registered intrinsics (e.g. AWS's `Sub`), so
81
83
  // a file using a registered intrinsic tagged template folds instead of
@@ -90,6 +92,7 @@ export function resolveProjectBuildOptions(input: ProjectBuildOptionsInput): Bui
90
92
 
91
93
  return {
92
94
  ownership,
95
+ ...(telemetry ? { telemetry } : {}),
93
96
  config: config as unknown as Record<string, unknown>,
94
97
  fold: modes.fold,
95
98
  sandbox: modes.sandbox,
@@ -33,6 +33,6 @@
33
33
  "devDependencies": {
34
34
  "@intentius/chant": "*",
35
35
  "tsc-alias": "^1.8.17",
36
- "typescript": "^5.9.3"
36
+ "typescript": "^5.9.3 || ^7.0.0"
37
37
  }
38
38
  }
@@ -8,6 +8,7 @@ import {
8
8
  resolveKnowledgeDir,
9
9
  } from "../../config";
10
10
  import { resolveBuildModes, resolveProjectBuildOptions } from "../build-options";
11
+ import { resolveTelemetryAttribution } from "../../telemetry-attribution";
11
12
  import { loadOkfBundle } from "../../okf-read";
12
13
  import { unknownEnvError } from "../../env";
13
14
  import type { OwnershipMarker } from "../../ownership";
@@ -320,6 +321,7 @@ export async function buildCommand(options: BuildOptions): Promise<BuildResult>
320
321
  modes,
321
322
  ownership,
322
323
  buildParams: paramsResolution.provenance,
324
+ telemetry: await resolveTelemetryAttribution(configDir, config as unknown as Record<string, unknown>, env),
323
325
  }),
324
326
  );
325
327
 
@@ -3,6 +3,7 @@ import { mkdtempSync, writeFileSync, rmSync, readFileSync } from "fs";
3
3
  import { tmpdir } from "os";
4
4
  import { join } from "path";
5
5
  import { carveEmit, formatCarveEmit } from "./carve-emit";
6
+ import { generateTsConfig, SCAFFOLD_DEV_DEPENDENCIES } from "./init";
6
7
  import { lintCommand } from "./lint";
7
8
  import { loadHcl2json } from "../../terraform/parse";
8
9
  import { readCarveManifest } from "../../terraform/manifest";
@@ -136,6 +137,9 @@ describe("carve emit --state (real adoption from tfstate)", () => {
136
137
  const pkg = JSON.parse(readFileSync(join(out, "package.json"), "utf-8"));
137
138
  expect(pkg.scripts.build).toBe("chant build src --lexicon aws");
138
139
  expect(Object.keys(pkg.dependencies)).toEqual(["@intentius/chant", "@intentius/chant-lexicon-aws"]);
140
+ // What `chant init` writes, which test/example-tsconfigs.e2e.test.ts compiles under TS 5.9 and 7 (#3233).
141
+ expect(pkg.devDependencies).toEqual(SCAFFOLD_DEV_DEPENDENCIES);
142
+ expect(JSON.parse(readFileSync(join(out, "tsconfig.json"), "utf-8"))).toEqual(JSON.parse(generateTsConfig()));
139
143
  expect(readFileSync(join(out, "chant.config.ts"), "utf-8")).toContain('lexicons: ["aws"]');
140
144
 
141
145
  // A second emit into the same dir leaves the scaffold (and edits) alone.
@@ -22,7 +22,7 @@ import { resolveEmitProvider } from "../../terraform/carve-provider";
22
22
  import { readStateResource, type StateResource } from "../../terraform/state";
23
23
  import { writeCarveManifest, type CarveManifest } from "../../terraform/manifest";
24
24
  import { adoptFromState, type DeferredParam, type FoldedContribution } from "../../terraform/adopt-state";
25
- import { getChantVersion } from "./init";
25
+ import { generateTsConfig, getChantVersion, SCAFFOLD_DEV_DEPENDENCIES } from "./init";
26
26
  import type { LexiconPlugin, ResourceSelector } from "../../lexicon";
27
27
  import type { ImportResult, LiveImportOptions } from "./import";
28
28
 
@@ -242,8 +242,8 @@ function deferredParams(report: CarveReport, attributes: Record<string, unknown>
242
242
 
243
243
  /**
244
244
  * Scaffold the emitted source into a buildable chant project: chant.config.ts,
245
- * package.json, tsconfig.json — same shape `chant init` produces, so
246
- * `npm install && npm run build` works in the output dir as-is. Existing files
245
+ * package.json, tsconfig.json, with the tsconfig and devDependencies `chant init`
246
+ * writes (#3233), so `npm install && npm run build` works in the output dir as-is. Existing files
247
247
  * are never overwritten (re-emits and user edits survive). Deferred inputs are
248
248
  * declared as `buildParams` (#998), defaults taken from the state's resolved
249
249
  * values, so the first build reproduces what is live while every survivor-fed
@@ -263,26 +263,12 @@ function scaffoldProject(outDir: string, lexicon: string, params: DeferredParam[
263
263
  "@intentius/chant": `^${ver}`,
264
264
  [`@intentius/chant-lexicon-${lexicon}`]: `^${ver}`,
265
265
  },
266
- devDependencies: {
267
- typescript: "^5.0.0",
268
- },
269
- };
270
- const tsconfig = {
271
- compilerOptions: {
272
- target: "ES2022",
273
- module: "NodeNext",
274
- moduleResolution: "NodeNext",
275
- strict: true,
276
- esModuleInterop: true,
277
- skipLibCheck: true,
278
- },
279
- include: ["src"],
280
- exclude: ["node_modules"],
266
+ devDependencies: { ...SCAFFOLD_DEV_DEPENDENCIES },
281
267
  };
282
268
  const files: Array<[string, string]> = [
283
269
  ["package.json", JSON.stringify(packageJson, null, 2) + "\n"],
284
270
  ["chant.config.ts", renderConfig(lexicon, params)],
285
- ["tsconfig.json", JSON.stringify(tsconfig, null, 2) + "\n"],
271
+ ["tsconfig.json", generateTsConfig() + "\n"],
286
272
  ];
287
273
 
288
274
  const written: string[] = [];
@@ -1,7 +1,9 @@
1
1
  import { describe, test, expect } from "vitest";
2
2
  import { join, dirname } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
- import { checkLexicon, coverageReportCheck } from "./check-lexicon";
4
+ import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
5
+ import { tmpdir } from "node:os";
6
+ import { checkLexicon, countComposites, coverageReportCheck } from "./check-lexicon";
5
7
  import { loadLexiconFromDir } from "./check-lexicon-plugin";
6
8
  import type { LexiconPlugin } from "../../lexicon";
7
9
 
@@ -76,3 +78,62 @@ describe("coverageReportCheck", () => {
76
78
  expect(item.detail).toBe("all spec kinds accounted for");
77
79
  });
78
80
  });
81
+
82
+ // chant #3104 — the composite rows counted every .ts file in src/composites/
83
+ // but index.ts, so otel's one composite (NodeAgent) reported as four: the
84
+ // catalog, its test and composites.test.ts counted too.
85
+ describe("countComposites", () => {
86
+ const entry = (name: string) => ({ name, lexicon: "x", description: "", bundles: [], params: [] });
87
+
88
+ test("asks the plugin's composites() when it has one, not the files", () => {
89
+ const plugin = { composites: () => [entry("A"), entry("B")] } as unknown as LexiconPlugin;
90
+ expect(countComposites(plugin, "/nonexistent")).toEqual({
91
+ count: 2,
92
+ detail: "2 composite(s) in composites()",
93
+ });
94
+ });
95
+
96
+ test("counts zero, with the error, when composites() throws", () => {
97
+ const plugin = {
98
+ composites: () => {
99
+ throw new Error("catalog broken");
100
+ },
101
+ } as unknown as LexiconPlugin;
102
+ const result = countComposites(plugin, "/nonexistent");
103
+ expect(result.count).toBe(0);
104
+ expect(result.detail).toContain("catalog broken");
105
+ });
106
+
107
+ test("without composites(), counts files but not tests, the catalog, the barrel or helpers", () => {
108
+ const dir = mkdtempSync(join(tmpdir(), "check-lexicon-3104-"));
109
+ try {
110
+ mkdirSync(join(dir, "src/composites"), { recursive: true });
111
+ for (const f of [
112
+ "web-app.ts",
113
+ "worker.ts",
114
+ "index.ts",
115
+ "catalog.ts",
116
+ "catalog.test.ts",
117
+ "composites.test.ts",
118
+ "web-app.snapshot.test.ts",
119
+ "otel-helpers.ts",
120
+ "helpers.ts",
121
+ "shared.ts",
122
+ ]) {
123
+ writeFileSync(join(dir, "src/composites", f), "");
124
+ }
125
+ expect(countComposites({} as LexiconPlugin, dir).count).toBe(2);
126
+ expect(countComposites(undefined, dir).count).toBe(2);
127
+ } finally {
128
+ rmSync(dir, { recursive: true, force: true });
129
+ }
130
+ });
131
+
132
+ test("otel reports its one composite", async () => {
133
+ const loaded = await loadLexiconFromDir(join(repoRoot, "lexicons", "otel"));
134
+ expect(countComposites(loaded.plugin, join(repoRoot, "lexicons", "otel"))).toEqual({
135
+ count: 1,
136
+ detail: "1 composite(s) in composites()",
137
+ });
138
+ });
139
+ });