@intentius/chant 0.80.0 → 0.82.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 (415) hide show
  1. package/dist/audit/discover.d.ts +8 -16
  2. package/dist/audit/discover.d.ts.map +1 -1
  3. package/dist/audit/report-html.d.ts +5 -0
  4. package/dist/audit/report-html.d.ts.map +1 -1
  5. package/dist/audit/report-model.d.ts +13 -0
  6. package/dist/audit/report-model.d.ts.map +1 -1
  7. package/dist/audit/terraform-state.d.ts +4 -5
  8. package/dist/audit/terraform-state.d.ts.map +1 -1
  9. package/dist/cli/commands/audit.d.ts +25 -9
  10. package/dist/cli/commands/audit.d.ts.map +1 -1
  11. package/dist/cli/commands/check-lexicon.d.ts +8 -0
  12. package/dist/cli/commands/check-lexicon.d.ts.map +1 -1
  13. package/dist/cli/commands/doctor.d.ts.map +1 -1
  14. package/dist/cli/commands/import-agents.d.ts.map +1 -1
  15. package/dist/cli/commands/init.d.ts.map +1 -1
  16. package/dist/cli/commands/lint.d.ts.map +1 -1
  17. package/dist/cli/commands/update.d.ts +6 -0
  18. package/dist/cli/commands/update.d.ts.map +1 -1
  19. package/dist/cli/commands/vendor.d.ts +5 -0
  20. package/dist/cli/commands/vendor.d.ts.map +1 -1
  21. package/dist/cli/handlers/build.d.ts.map +1 -1
  22. package/dist/cli/handlers/components.d.ts.map +1 -1
  23. package/dist/cli/handlers/dev.d.ts.map +1 -1
  24. package/dist/cli/handlers/fan-out.d.ts.map +1 -1
  25. package/dist/cli/handlers/init.d.ts.map +1 -1
  26. package/dist/cli/handlers/operator.d.ts +7 -0
  27. package/dist/cli/handlers/operator.d.ts.map +1 -1
  28. package/dist/cli/handlers/promote.d.ts +7 -4
  29. package/dist/cli/handlers/promote.d.ts.map +1 -1
  30. package/dist/cli/handlers/run-generate.d.ts.map +1 -1
  31. package/dist/cli/handlers/run.d.ts +4 -1
  32. package/dist/cli/handlers/run.d.ts.map +1 -1
  33. package/dist/cli/handlers/vendor.d.ts +8 -3
  34. package/dist/cli/handlers/vendor.d.ts.map +1 -1
  35. package/dist/cli/main.d.ts +12 -0
  36. package/dist/cli/main.d.ts.map +1 -1
  37. package/dist/cli/plugins.d.ts +12 -7
  38. package/dist/cli/plugins.d.ts.map +1 -1
  39. package/dist/cli/registry.d.ts +32 -0
  40. package/dist/cli/registry.d.ts.map +1 -1
  41. package/dist/codegen/fetch.d.ts +10 -0
  42. package/dist/codegen/fetch.d.ts.map +1 -1
  43. package/dist/components/cli-support.d.ts +3 -1
  44. package/dist/components/cli-support.d.ts.map +1 -1
  45. package/dist/components/discover.d.ts.map +1 -1
  46. package/dist/components/driver.d.ts +16 -2
  47. package/dist/components/driver.d.ts.map +1 -1
  48. package/dist/components/gate-plan.d.ts +40 -0
  49. package/dist/components/gate-plan.d.ts.map +1 -0
  50. package/dist/components/promote.d.ts +60 -7
  51. package/dist/components/promote.d.ts.map +1 -1
  52. package/dist/components/sandbox/driver.d.ts.map +1 -1
  53. package/dist/components/sandbox/run.d.ts.map +1 -1
  54. package/dist/components/verbs/build-archive.d.ts +22 -11
  55. package/dist/components/verbs/build-archive.d.ts.map +1 -1
  56. package/dist/components/verbs/run-agent.d.ts.map +1 -1
  57. package/dist/config-static.d.ts +59 -0
  58. package/dist/config-static.d.ts.map +1 -0
  59. package/dist/config.d.ts +32 -10
  60. package/dist/config.d.ts.map +1 -1
  61. package/dist/content-digest.d.ts +17 -0
  62. package/dist/content-digest.d.ts.map +1 -0
  63. package/dist/discovery/files.d.ts +10 -5
  64. package/dist/discovery/files.d.ts.map +1 -1
  65. package/dist/discovery/fold-import.d.ts +20 -4
  66. package/dist/discovery/fold-import.d.ts.map +1 -1
  67. package/dist/discovery/index.d.ts.map +1 -1
  68. package/dist/discovery/sandbox/driver.d.ts +20 -0
  69. package/dist/discovery/sandbox/driver.d.ts.map +1 -1
  70. package/dist/discovery/sandbox/fork.d.ts +20 -0
  71. package/dist/discovery/sandbox/fork.d.ts.map +1 -1
  72. package/dist/discovery/walk.d.ts +119 -0
  73. package/dist/discovery/walk.d.ts.map +1 -0
  74. package/dist/graph-ir.d.ts +4 -1
  75. package/dist/graph-ir.d.ts.map +1 -1
  76. package/dist/join-key.d.ts +31 -0
  77. package/dist/join-key.d.ts.map +1 -0
  78. package/dist/lexicon-module.d.ts +51 -6
  79. package/dist/lexicon-module.d.ts.map +1 -1
  80. package/dist/lexicon.d.ts +58 -1
  81. package/dist/lexicon.d.ts.map +1 -1
  82. package/dist/lifecycle/build-ledger-store.d.ts.map +1 -1
  83. package/dist/lifecycle/digest.d.ts +5 -1
  84. package/dist/lifecycle/digest.d.ts.map +1 -1
  85. package/dist/lifecycle/gate-ledger.d.ts +20 -5
  86. package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
  87. package/dist/lifecycle/git.d.ts +64 -0
  88. package/dist/lifecycle/git.d.ts.map +1 -1
  89. package/dist/lifecycle/lease.d.ts +8 -1
  90. package/dist/lifecycle/lease.d.ts.map +1 -1
  91. package/dist/lifecycle/legacy-digest.d.ts +41 -8
  92. package/dist/lifecycle/legacy-digest.d.ts.map +1 -1
  93. package/dist/lifecycle/member-ledger.d.ts +67 -0
  94. package/dist/lifecycle/member-ledger.d.ts.map +1 -0
  95. package/dist/lifecycle/plan-digest.d.ts +4 -3
  96. package/dist/lifecycle/plan-digest.d.ts.map +1 -1
  97. package/dist/lifecycle/release-ledger.d.ts +18 -2
  98. package/dist/lifecycle/release-ledger.d.ts.map +1 -1
  99. package/dist/lifecycle/status.d.ts +90 -5
  100. package/dist/lifecycle/status.d.ts.map +1 -1
  101. package/dist/op/activities/activity-contracts.d.ts +32 -0
  102. package/dist/op/activities/activity-contracts.d.ts.map +1 -1
  103. package/dist/op/activities/index.d.ts +2 -0
  104. package/dist/op/activities/index.d.ts.map +1 -1
  105. package/dist/op/activities/propose-upgrade.d.ts +75 -0
  106. package/dist/op/activities/propose-upgrade.d.ts.map +1 -0
  107. package/dist/op/discover.d.ts.map +1 -1
  108. package/dist/op/gate-name.d.ts +7 -0
  109. package/dist/op/gate-name.d.ts.map +1 -1
  110. package/dist/op/gate-summary.d.ts +16 -0
  111. package/dist/op/gate-summary.d.ts.map +1 -1
  112. package/dist/op/gate.d.ts +16 -2
  113. package/dist/op/gate.d.ts.map +1 -1
  114. package/dist/project-root.d.ts +26 -0
  115. package/dist/project-root.d.ts.map +1 -1
  116. package/dist/workspace/__fixtures__/contract-repo.d.ts +37 -0
  117. package/dist/workspace/__fixtures__/contract-repo.d.ts.map +1 -0
  118. package/dist/workspace/__fixtures__/two-member-workspace.d.ts +11 -0
  119. package/dist/workspace/__fixtures__/two-member-workspace.d.ts.map +1 -0
  120. package/dist/workspace/checks/generated.d.ts +156 -0
  121. package/dist/workspace/checks/generated.d.ts.map +1 -0
  122. package/dist/workspace/checks/ledgers.d.ts +78 -0
  123. package/dist/workspace/checks/ledgers.d.ts.map +1 -0
  124. package/dist/workspace/checks/links.d.ts +25 -0
  125. package/dist/workspace/checks/links.d.ts.map +1 -0
  126. package/dist/workspace/checks/pipelines.d.ts +76 -0
  127. package/dist/workspace/checks/pipelines.d.ts.map +1 -0
  128. package/dist/workspace/checks.d.ts +161 -0
  129. package/dist/workspace/checks.d.ts.map +1 -0
  130. package/dist/workspace/compose-graph.d.ts +115 -0
  131. package/dist/workspace/compose-graph.d.ts.map +1 -0
  132. package/dist/workspace/compose-reports.d.ts +68 -0
  133. package/dist/workspace/compose-reports.d.ts.map +1 -0
  134. package/dist/workspace/declaration.d.ts +220 -0
  135. package/dist/workspace/declaration.d.ts.map +1 -0
  136. package/dist/workspace/declaration.schema.json +434 -0
  137. package/dist/workspace/generated-files.d.ts +65 -0
  138. package/dist/workspace/generated-files.d.ts.map +1 -0
  139. package/dist/workspace/glob.d.ts +13 -0
  140. package/dist/workspace/glob.d.ts.map +1 -0
  141. package/dist/workspace/graph-cli.d.ts +75 -0
  142. package/dist/workspace/graph-cli.d.ts.map +1 -0
  143. package/dist/workspace/init.d.ts +96 -0
  144. package/dist/workspace/init.d.ts.map +1 -0
  145. package/dist/workspace/jsonc.d.ts +38 -0
  146. package/dist/workspace/jsonc.d.ts.map +1 -0
  147. package/dist/workspace/kinds.d.ts +192 -0
  148. package/dist/workspace/kinds.d.ts.map +1 -0
  149. package/dist/workspace/lineage-check.d.ts +84 -0
  150. package/dist/workspace/lineage-check.d.ts.map +1 -0
  151. package/dist/workspace/lineage-cli.d.ts +35 -0
  152. package/dist/workspace/lineage-cli.d.ts.map +1 -0
  153. package/dist/workspace/lineage-init.d.ts +144 -0
  154. package/dist/workspace/lineage-init.d.ts.map +1 -0
  155. package/dist/workspace/lineage-lock.d.ts +271 -0
  156. package/dist/workspace/lineage-lock.d.ts.map +1 -0
  157. package/dist/workspace/lineage-merge.d.ts +14 -0
  158. package/dist/workspace/lineage-merge.d.ts.map +1 -0
  159. package/dist/workspace/lineage-migrations.d.ts +178 -0
  160. package/dist/workspace/lineage-migrations.d.ts.map +1 -0
  161. package/dist/workspace/lineage-update.d.ts +59 -0
  162. package/dist/workspace/lineage-update.d.ts.map +1 -0
  163. package/dist/workspace/lineage-upgrade-cli.d.ts +40 -0
  164. package/dist/workspace/lineage-upgrade-cli.d.ts.map +1 -0
  165. package/dist/workspace/lineage-upgrade.d.ts +152 -0
  166. package/dist/workspace/lineage-upgrade.d.ts.map +1 -0
  167. package/dist/workspace/lineage-vendor.d.ts +63 -0
  168. package/dist/workspace/lineage-vendor.d.ts.map +1 -0
  169. package/dist/workspace/lineage-version.d.ts +32 -0
  170. package/dist/workspace/lineage-version.d.ts.map +1 -0
  171. package/dist/workspace/links.d.ts +150 -0
  172. package/dist/workspace/links.d.ts.map +1 -0
  173. package/dist/workspace/ls.d.ts +99 -0
  174. package/dist/workspace/ls.d.ts.map +1 -0
  175. package/dist/workspace/member-commands.d.ts +139 -0
  176. package/dist/workspace/member-commands.d.ts.map +1 -0
  177. package/dist/workspace/member-handles.d.ts +54 -0
  178. package/dist/workspace/member-handles.d.ts.map +1 -0
  179. package/dist/workspace/member-pipeline.d.ts +143 -0
  180. package/dist/workspace/member-pipeline.d.ts.map +1 -0
  181. package/dist/workspace/member-run.d.ts +67 -0
  182. package/dist/workspace/member-run.d.ts.map +1 -0
  183. package/dist/workspace/reason-codes.d.ts +65 -0
  184. package/dist/workspace/reason-codes.d.ts.map +1 -0
  185. package/dist/workspace/records-cli.d.ts +28 -4
  186. package/dist/workspace/records-cli.d.ts.map +1 -1
  187. package/dist/workspace/records.d.ts.map +1 -1
  188. package/dist/workspace/root-refusal.d.ts +53 -0
  189. package/dist/workspace/root-refusal.d.ts.map +1 -0
  190. package/dist/workspace/status.d.ts +150 -0
  191. package/dist/workspace/status.d.ts.map +1 -0
  192. package/dist/workspace/template-manifest.d.ts +90 -0
  193. package/dist/workspace/template-manifest.d.ts.map +1 -0
  194. package/dist/workspace/tree.d.ts +36 -0
  195. package/dist/workspace/tree.d.ts.map +1 -0
  196. package/dist/workspace/trust/attestor.d.ts +67 -0
  197. package/dist/workspace/trust/attestor.d.ts.map +1 -0
  198. package/dist/workspace/trust/policy.d.ts +111 -0
  199. package/dist/workspace/trust/policy.d.ts.map +1 -0
  200. package/dist/workspace/trust/provenance.d.ts +67 -0
  201. package/dist/workspace/trust/provenance.d.ts.map +1 -0
  202. package/dist/workspace/trust/ssh-commit.d.ts +43 -0
  203. package/dist/workspace/trust/ssh-commit.d.ts.map +1 -0
  204. package/dist/workspace/trust/test-repo.d.ts +42 -0
  205. package/dist/workspace/trust/test-repo.d.ts.map +1 -0
  206. package/dist/workspace/trust/verify-cli.d.ts +9 -0
  207. package/dist/workspace/trust/verify-cli.d.ts.map +1 -0
  208. package/dist/workspace/trust/verify.d.ts +66 -0
  209. package/dist/workspace/trust/verify.d.ts.map +1 -0
  210. package/dist/workspace/which-chant.d.ts +58 -0
  211. package/dist/workspace/which-chant.d.ts.map +1 -0
  212. package/dist/workspace/workspace-kinds.schema.json +133 -0
  213. package/package.json +2 -1
  214. package/src/audit/discover.ts +66 -78
  215. package/src/audit/report-html.ts +3 -1
  216. package/src/audit/report-model.ts +14 -1
  217. package/src/audit/terraform-state.test.ts +4 -9
  218. package/src/audit/terraform-state.ts +4 -5
  219. package/src/cli/commands/audit-truncation.test.ts +167 -0
  220. package/src/cli/commands/audit.ts +89 -60
  221. package/src/cli/commands/check-lexicon.ts +24 -0
  222. package/src/cli/commands/doctor.test.ts +30 -0
  223. package/src/cli/commands/doctor.ts +18 -0
  224. package/src/cli/commands/import-agents.ts +6 -2
  225. package/src/cli/commands/init.ts +22 -3
  226. package/src/cli/commands/lint.test.ts +17 -23
  227. package/src/cli/commands/lint.ts +24 -84
  228. package/src/cli/commands/update.ts +13 -4
  229. package/src/cli/commands/vendor.ts +11 -6
  230. package/src/cli/handlers/__snapshots__/build-member.test.ts.snap +38 -0
  231. package/src/cli/handlers/build-member.test.ts +127 -0
  232. package/src/cli/handlers/build.ts +35 -1
  233. package/src/cli/handlers/components.test.ts +127 -0
  234. package/src/cli/handlers/components.ts +70 -8
  235. package/src/cli/handlers/dev.ts +5 -3
  236. package/src/cli/handlers/fan-out.ts +9 -2
  237. package/src/cli/handlers/init.ts +58 -1
  238. package/src/cli/handlers/operator.test.ts +68 -0
  239. package/src/cli/handlers/operator.ts +37 -9
  240. package/src/cli/handlers/promote.test.ts +118 -2
  241. package/src/cli/handlers/promote.ts +82 -16
  242. package/src/cli/handlers/run-generate-member.test.ts +83 -0
  243. package/src/cli/handlers/run-generate.test.ts +6 -8
  244. package/src/cli/handlers/run-generate.ts +36 -1
  245. package/src/cli/handlers/run.test.ts +47 -0
  246. package/src/cli/handlers/run.ts +28 -5
  247. package/src/cli/handlers/vendor.ts +147 -43
  248. package/src/cli/main.test.ts +105 -1
  249. package/src/cli/main.ts +232 -17
  250. package/src/cli/plugins.ts +17 -17
  251. package/src/cli/registry.ts +32 -0
  252. package/src/cli/static-config-read.test.ts +208 -0
  253. package/src/codegen/fetch.test.ts +63 -1
  254. package/src/codegen/fetch.ts +30 -1
  255. package/src/components/cli-support.ts +6 -1
  256. package/src/components/discover.test.ts +27 -57
  257. package/src/components/discover.ts +13 -68
  258. package/src/components/driver.test.ts +78 -1
  259. package/src/components/driver.ts +43 -7
  260. package/src/components/gate-plan.ts +53 -0
  261. package/src/components/promote.test.ts +276 -2
  262. package/src/components/promote.ts +119 -15
  263. package/src/components/sandbox/driver.ts +8 -8
  264. package/src/components/sandbox/run.ts +4 -1
  265. package/src/components/verbs/build-archive.ts +27 -21
  266. package/src/components/verbs/run-agent.ts +3 -5
  267. package/src/config-static.test.ts +136 -0
  268. package/src/config-static.ts +232 -0
  269. package/src/config.test.ts +2 -2
  270. package/src/config.ts +48 -15
  271. package/src/content-digest.test.ts +120 -0
  272. package/src/content-digest.ts +21 -0
  273. package/src/discovery/files.test.ts +10 -10
  274. package/src/discovery/files.ts +25 -81
  275. package/src/discovery/fold-import.ts +49 -5
  276. package/src/discovery/index.ts +1 -0
  277. package/src/discovery/sandbox/driver.ts +73 -35
  278. package/src/discovery/sandbox/fork-diagnostic.test.ts +136 -13
  279. package/src/discovery/sandbox/fork.ts +83 -43
  280. package/src/discovery/sandbox/path-lexicon-multifile.test.ts +285 -0
  281. package/src/discovery/walk.test.ts +263 -0
  282. package/src/discovery/walk.ts +334 -0
  283. package/src/effect-receipt.ts +2 -2
  284. package/src/graph-ir.ts +4 -1
  285. package/src/join-key.test.ts +25 -0
  286. package/src/join-key.ts +39 -0
  287. package/src/lexicon-module.ts +108 -10
  288. package/src/lexicon.ts +79 -1
  289. package/src/lifecycle/build-ledger-store.ts +11 -10
  290. package/src/lifecycle/digest.ts +9 -5
  291. package/src/lifecycle/gate-ledger.test.ts +20 -0
  292. package/src/lifecycle/gate-ledger.ts +28 -6
  293. package/src/lifecycle/git.test.ts +13 -1
  294. package/src/lifecycle/git.ts +221 -176
  295. package/src/lifecycle/lease.ts +25 -10
  296. package/src/lifecycle/legacy-digest.test.ts +115 -23
  297. package/src/lifecycle/legacy-digest.ts +60 -19
  298. package/src/lifecycle/member-ledger.test.ts +319 -0
  299. package/src/lifecycle/member-ledger.ts +145 -0
  300. package/src/lifecycle/plan-digest.ts +7 -7
  301. package/src/lifecycle/release-ledger.test.ts +20 -0
  302. package/src/lifecycle/release-ledger.ts +23 -7
  303. package/src/lifecycle/status.test.ts +151 -1
  304. package/src/lifecycle/status.ts +228 -7
  305. package/src/op/activities/activity-contracts.ts +37 -0
  306. package/src/op/activities/index.ts +10 -0
  307. package/src/op/activities/propose-upgrade.ts +206 -0
  308. package/src/op/discover.test.ts +14 -4
  309. package/src/op/discover.ts +19 -27
  310. package/src/op/gate-name.ts +8 -0
  311. package/src/op/gate-summary.test.ts +14 -0
  312. package/src/op/gate-summary.ts +25 -2
  313. package/src/op/gate.ts +36 -7
  314. package/src/op/generate-pipeline.test.ts +14 -5
  315. package/src/project-root.test.ts +66 -1
  316. package/src/project-root.ts +48 -0
  317. package/src/workspace/__fixtures__/contract-repo.ts +100 -0
  318. package/src/workspace/__fixtures__/two-member-workspace.ts +35 -0
  319. package/src/workspace/behold-kinds.test.ts +158 -0
  320. package/src/workspace/check-contract.test.ts +127 -0
  321. package/src/workspace/check.schema.json +347 -0
  322. package/src/workspace/checks/generated.test.ts +287 -0
  323. package/src/workspace/checks/generated.ts +475 -0
  324. package/src/workspace/checks/ledgers.test.ts +139 -0
  325. package/src/workspace/checks/ledgers.ts +246 -0
  326. package/src/workspace/checks/links.ts +183 -0
  327. package/src/workspace/checks/pipelines.test.ts +133 -0
  328. package/src/workspace/checks/pipelines.ts +225 -0
  329. package/src/workspace/checks-repo.test.ts +71 -0
  330. package/src/workspace/checks.test.ts +450 -0
  331. package/src/workspace/checks.ts +461 -0
  332. package/src/workspace/compose-graph.test.ts +146 -0
  333. package/src/workspace/compose-graph.ts +228 -0
  334. package/src/workspace/compose-reports.test.ts +109 -0
  335. package/src/workspace/compose-reports.ts +186 -0
  336. package/src/workspace/declaration.schema.json +434 -0
  337. package/src/workspace/declaration.test.ts +347 -0
  338. package/src/workspace/declaration.ts +623 -0
  339. package/src/workspace/generated-files.test.ts +114 -0
  340. package/src/workspace/generated-files.ts +94 -0
  341. package/src/workspace/glob.ts +49 -0
  342. package/src/workspace/graph-cli.ts +220 -0
  343. package/src/workspace/graph-contract.test.ts +204 -0
  344. package/src/workspace/graph.schema.json +662 -0
  345. package/src/workspace/init.test.ts +223 -0
  346. package/src/workspace/init.ts +585 -0
  347. package/src/workspace/jsonc.test.ts +65 -0
  348. package/src/workspace/jsonc.ts +231 -0
  349. package/src/workspace/kinds.test.ts +288 -0
  350. package/src/workspace/kinds.ts +506 -0
  351. package/src/workspace/lineage-check.ts +264 -0
  352. package/src/workspace/lineage-cli.ts +134 -0
  353. package/src/workspace/lineage-init-dir.test.ts +243 -0
  354. package/src/workspace/lineage-init.test.ts +231 -0
  355. package/src/workspace/lineage-init.ts +560 -0
  356. package/src/workspace/lineage-lock.test.ts +224 -0
  357. package/src/workspace/lineage-lock.ts +365 -0
  358. package/src/workspace/lineage-merge.ts +44 -0
  359. package/src/workspace/lineage-migrations.test.ts +178 -0
  360. package/src/workspace/lineage-migrations.ts +343 -0
  361. package/src/workspace/lineage-update.ts +160 -0
  362. package/src/workspace/lineage-upgrade-cli.ts +151 -0
  363. package/src/workspace/lineage-upgrade.test.ts +474 -0
  364. package/src/workspace/lineage-upgrade.ts +723 -0
  365. package/src/workspace/lineage-vendor.test.ts +126 -0
  366. package/src/workspace/lineage-vendor.ts +215 -0
  367. package/src/workspace/lineage-version.ts +127 -0
  368. package/src/workspace/links.test.ts +344 -0
  369. package/src/workspace/links.ts +331 -0
  370. package/src/workspace/ls-contract.test.ts +200 -0
  371. package/src/workspace/ls.schema.json +190 -0
  372. package/src/workspace/ls.ts +254 -0
  373. package/src/workspace/member-commands.e2e.test.ts +244 -0
  374. package/src/workspace/member-commands.test.ts +217 -0
  375. package/src/workspace/member-commands.ts +540 -0
  376. package/src/workspace/member-handles.test.ts +76 -0
  377. package/src/workspace/member-handles.ts +228 -0
  378. package/src/workspace/member-pipeline.test.ts +135 -0
  379. package/src/workspace/member-pipeline.ts +317 -0
  380. package/src/workspace/member-run.ts +146 -0
  381. package/src/workspace/read-contract.test.ts +129 -0
  382. package/src/workspace/reason-codes.test.ts +113 -0
  383. package/src/workspace/reason-codes.ts +81 -0
  384. package/src/workspace/records-cli.ts +86 -14
  385. package/src/workspace/records-contract.test.ts +5 -0
  386. package/src/workspace/records.schema.json +32 -2
  387. package/src/workspace/records.ts +3 -2
  388. package/src/workspace/root-refusal.ts +97 -0
  389. package/src/workspace/status-contract.test.ts +308 -0
  390. package/src/workspace/status.schema.json +210 -0
  391. package/src/workspace/status.ts +412 -0
  392. package/src/workspace/template-manifest.test.ts +79 -0
  393. package/src/workspace/template-manifest.ts +221 -0
  394. package/src/workspace/tree.ts +132 -0
  395. package/src/workspace/trust/attestor.ts +93 -0
  396. package/src/workspace/trust/policy.ts +306 -0
  397. package/src/workspace/trust/provenance.ts +181 -0
  398. package/src/workspace/trust/ssh-commit.ts +138 -0
  399. package/src/workspace/trust/test-repo.ts +138 -0
  400. package/src/workspace/trust/trust.test.ts +397 -0
  401. package/src/workspace/trust/verify-cli.ts +56 -0
  402. package/src/workspace/trust/verify.ts +194 -0
  403. package/src/workspace/which-chant.test.ts +117 -0
  404. package/src/workspace/which-chant.ts +151 -0
  405. package/src/workspace/workspace-kinds.schema.json +133 -0
  406. package/dist/components/unbound-gate-approval.d.ts +0 -24
  407. package/dist/components/unbound-gate-approval.d.ts.map +0 -1
  408. package/dist/discovery/convergence.d.ts +0 -97
  409. package/dist/discovery/convergence.d.ts.map +0 -1
  410. package/src/cli/commands/audit-walk-warnings.test.ts +0 -156
  411. package/src/components/unbound-gate-approval.test.ts +0 -82
  412. package/src/components/unbound-gate-approval.ts +0 -51
  413. package/src/discovery/convergence.test.ts +0 -231
  414. package/src/discovery/convergence.ts +0 -399
  415. package/src/op/discover-convergence.test.ts +0 -70
@@ -0,0 +1,152 @@
1
+ /**
2
+ * `chant workspace upgrade <scope>`: bring one lineage scope to a newer
3
+ * version of its template (#2550, D9, ws-005, ws-032).
4
+ *
5
+ * The upgrade is a core command, never an Op the template ships, so the
6
+ * template cannot change the rules that judge its own upgrade. It works in the
7
+ * six steps of D9:
8
+ *
9
+ * 1. Fetch the target version of the template. For a git source that is one
10
+ * `git fetch` of the target ref, plus the commit the scope was made from.
11
+ * This is the command's only network step, catalogued in
12
+ * `test/egress-catalogue.ts`. A local repository reaches nothing, and
13
+ * neither does a directory source (#2647), which reads `--to <dir>`.
14
+ * 2. Rebuild the merge base offline: each recorded file's content at the base
15
+ * commit, kept only when it has the hash the lock recorded. A file the
16
+ * project never edited is its own merge base. Vendor sources keep no
17
+ * history, so only unedited vendored files have a base.
18
+ * 3. Migrate in a separate git worktree, checked out at HEAD under
19
+ * `.chant/upgrade/`. The chain is planned from the template's
20
+ * `.chant/migrations/`, and a gap refuses the upgrade.
21
+ * 4. Merge per file (ws-005): an edited file takes the new version only when
22
+ * every hunk merges cleanly. Otherwise it stays as it was, with one manual
23
+ * step. The worktree never holds conflict markers.
24
+ * 5. Check the worktree: `chant build` and `chant lint` when the project is a
25
+ * chant project, and the lineage checks of `chant workspace check`.
26
+ * 6. Bind the gate to the digest of the resulting patch: the pending fact and
27
+ * the approval name it, so an approval covers exactly this patch.
28
+ *
29
+ * The project's own tree changes only once the gate is approved, when the
30
+ * patch is applied to it. A patch that changes governance files (Op files,
31
+ * `chant.config`, CI workflows, CODEOWNERS) needs human approvals, as many as
32
+ * the strictest gate in the Op files it changes asks for at HEAD. The
33
+ * upgraded Op files never decide their own gate.
34
+ */
35
+ import type { ResolvedGateApproval } from "../op/gate-approval.js";
36
+ import { LockError, type Lineage, type ManualStep } from "./lineage-lock.js";
37
+ import { type UpdateResult } from "./lineage-update.js";
38
+ /** The kind the patch digest is taken under, so it never collides with another kind of plan. */
39
+ export declare const UPGRADE_PLAN_KIND = "workspace-upgrade";
40
+ /** Where staging worktrees live, relative to the project root. */
41
+ export declare const UPGRADE_DIR = ".chant/upgrade";
42
+ export declare class UpgradeError extends LockError {
43
+ name: string;
44
+ }
45
+ export interface UpgradeCheck {
46
+ name: "build" | "lint" | "workspace check";
47
+ status: "passed" | "failed" | "skipped";
48
+ /** Why a check was skipped, or the tail of a failed command's output. */
49
+ detail?: string;
50
+ }
51
+ /** Runs `chant build` or `chant lint` in a directory. */
52
+ export type ChantRunner = (command: "build" | "lint", cwd: string) => Promise<{
53
+ exitCode: number;
54
+ output: string;
55
+ }>;
56
+ /**
57
+ * The default runner: this same chant, in a child process. The child sees the
58
+ * worktree's sources and resolves packages the way the project does, since the
59
+ * worktree sits inside the project.
60
+ */
61
+ export declare const spawnChant: ChantRunner;
62
+ export interface UpgradeOptions {
63
+ /** The directory holding `.chant/workspace.lock.json`. */
64
+ root: string;
65
+ /** The scope to upgrade: `"."` or a vendor scope's directory. */
66
+ scope?: string;
67
+ /**
68
+ * The target ref (git) or label (vendor). Defaults to the ref the scope is
69
+ * pinned at. For a directory source, the directory holding the new version,
70
+ * as `<dir>[#<member>]`, resolved from the current directory; the member
71
+ * defaults to the recorded one.
72
+ */
73
+ to?: string;
74
+ /** Run migrations whose body is code. */
75
+ allowCode?: boolean;
76
+ /** Replaces the child-process build and lint. For tests. */
77
+ runChant?: ChantRunner;
78
+ }
79
+ export interface GovernanceChange {
80
+ /** Changed governance paths, relative to the repository root. */
81
+ paths: string[];
82
+ /** The approval the gate asks for, from the rules at HEAD. */
83
+ approval: ResolvedGateApproval;
84
+ /** Where the rules came from. */
85
+ rules: string;
86
+ }
87
+ export interface StagedUpgrade {
88
+ scope: string;
89
+ template: string;
90
+ kind: Lineage["kind"];
91
+ /** The pin before and after. */
92
+ from: string | null;
93
+ to: string | null;
94
+ commit?: {
95
+ from?: string;
96
+ to: string;
97
+ };
98
+ migrations: string[];
99
+ written: string[];
100
+ merged: string[];
101
+ removed: string[];
102
+ kept: string[];
103
+ skipped: UpdateResult["skipped"];
104
+ manualSteps: ManualStep[];
105
+ /** Paths the patch changes, relative to the repository root. */
106
+ changedPaths: string[];
107
+ patch: string;
108
+ /**
109
+ * The new lock. When git tracks it, its change is in `patch`. A template
110
+ * whose `.gitignore` covers `.chant/` leaves it untracked; the text is then
111
+ * applied beside the patch and covered by the digest on its own.
112
+ */
113
+ lock: {
114
+ path: string;
115
+ tracked: boolean;
116
+ text: string;
117
+ };
118
+ /** Whether the upgrade changes anything: the patch, or an untracked lock. */
119
+ changed: boolean;
120
+ /** `computePlanDigest(UPGRADE_PLAN_KIND, { scope, patch })`, plus `lock` when untracked: what the gate binds. */
121
+ digest: string;
122
+ governance: GovernanceChange | null;
123
+ checks: UpgradeCheck[];
124
+ checksOk: boolean;
125
+ /** The repository root and the commit the worktree was made from. */
126
+ repo: string;
127
+ head: string;
128
+ /** The staging worktree, and the project root inside it. */
129
+ worktree: string;
130
+ worktreeProject: string;
131
+ /** Remove the worktree. Safe to call twice. */
132
+ dispose(): void;
133
+ }
134
+ /** Whether a repository path is a governance file: one that decides gates, pipelines or review. */
135
+ export declare function isGovernancePath(path: string): boolean;
136
+ /**
137
+ * Stage an upgrade: steps 1 to 5 and the digest of step 6. Nothing in the
138
+ * project's tree changes. The caller decides the gate, then applies the patch
139
+ * with {@link applyStagedUpgrade} or commits it with {@link commitStagedUpgrade},
140
+ * and always calls `dispose()`.
141
+ */
142
+ export declare function stageUpgrade(options: UpgradeOptions): Promise<StagedUpgrade>;
143
+ /** Apply the staged patch to the project's tree. Leaves it uncommitted. */
144
+ export declare function applyStagedUpgrade(staged: StagedUpgrade): void;
145
+ /**
146
+ * Commit the staged patch in the worktree and point `branch` at it. Returns
147
+ * the commit. The caller has already refused the default branch.
148
+ */
149
+ export declare function commitStagedUpgrade(staged: StagedUpgrade, branch: string, message: string): string;
150
+ /** One line per staged change, for the terminal and for a PR body. */
151
+ export declare function describeStaged(staged: StagedUpgrade): string[];
152
+ //# sourceMappingURL=lineage-upgrade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lineage-upgrade.d.ts","sourceRoot":"","sources":["../../src/workspace/lineage-upgrade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAOH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,OAAO,EAEL,SAAS,EAOT,KAAK,OAAO,EAGZ,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGpE,gGAAgG;AAChG,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AAErD,kEAAkE;AAClE,eAAO,MAAM,WAAW,mBAAmB,CAAC;AAE5C,qBAAa,YAAa,SAAQ,SAAS;IAChC,IAAI,SAAkB;CAChC;AAID,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,iBAAiB,CAAC;IAC3C,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxC,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,yDAAyD;AACzD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEpH;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,WAarB,CAAC;AAIL,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,yCAAyC;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,8DAA8D;IAC9D,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACtB,gCAAgC;IAChC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACjC,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,gEAAgE;IAChE,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,6EAA6E;IAC7E,OAAO,EAAE,OAAO,CAAC;IACjB,iHAAiH;IACjH,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,OAAO,IAAI,IAAI,CAAC;CACjB;AA0ND,mGAAmG;AACnG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAyDD;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAoLlF;AAyBD,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAa9D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAiBlG;AAED,sEAAsE;AACtE,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAqB9D"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * `chant vendor` over the lineage lock (#2540, ws-038).
3
+ *
4
+ * A vendored target is one lineage scope of kind `vendor`: copied, with no
5
+ * parameters. `pull` updates it file by file through {@link applyUpstream}, so
6
+ * local edits survive and a file both sides changed becomes a manual step.
7
+ * `check` reports edits and fails on open manual steps.
8
+ *
9
+ * `vendor.json` is still read. A project whose lock has no vendor scopes and
10
+ * which never ran `chant vendor migrate` keeps today's `vendor.json` behaviour
11
+ * byte for byte (#2525 rule 2): this module loads only when a lock exists or
12
+ * `migrate` runs.
13
+ */
14
+ import { type Lineage, type LineageLock, type ManualStep } from "./lineage-lock.js";
15
+ /** Vendor scopes in the lock, by scope key. */
16
+ export declare function vendorScopes(lock: LineageLock): Array<[string, Lineage]>;
17
+ export interface LockedPull {
18
+ name: string;
19
+ target: string;
20
+ digest: string;
21
+ fileCount: number;
22
+ written: number;
23
+ kept: number;
24
+ removed: number;
25
+ manualSteps: ManualStep[];
26
+ }
27
+ /** Pull the lock's vendor scopes (or just `only`). Writes the lock. */
28
+ export declare function pullLockedScopes(root: string, only?: string): Promise<LockedPull[]>;
29
+ export declare function formatLockedPull(p: LockedPull): string;
30
+ export type LockedCheckStatus = "ok" | "customised" | "manual" | "unpinned" | "missing";
31
+ export interface LockedCheck {
32
+ name: string;
33
+ status: LockedCheckStatus;
34
+ customised: string[];
35
+ manualSteps: ManualStep[];
36
+ }
37
+ /** Check each vendor scope in the lock against the tree. */
38
+ export declare function checkLockedScopes(root: string): LockedCheck[];
39
+ export declare function formatLockedCheck(c: LockedCheck): string;
40
+ /** Whether a check result fails the check the way drift does for `vendor.json`. */
41
+ export declare function lockedCheckFails(c: LockedCheck): boolean;
42
+ export interface MigrateResult {
43
+ migrated: Array<{
44
+ name: string;
45
+ target: string;
46
+ files: number;
47
+ pinned: boolean;
48
+ }>;
49
+ lockCreated: boolean;
50
+ }
51
+ /**
52
+ * Move every `vendor.json` entry into the lock as a vendor scope, then delete
53
+ * `vendor.json`. An entry's checksum becomes the scope's digest.
54
+ *
55
+ * Per-file merge bases come from the target when it still matches the
56
+ * checksum. When it has been edited, they come from the source instead, which
57
+ * must still hash to the checksum; otherwise the pinned content is gone and the
58
+ * entry is refused. Nothing is written unless every entry migrates.
59
+ */
60
+ export declare function migrateVendorManifest(root: string): Promise<MigrateResult>;
61
+ /** Whether `vendor.json` sits next to the lock. */
62
+ export declare function manifestPresent(root: string): boolean;
63
+ //# sourceMappingURL=lineage-vendor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lineage-vendor.d.ts","sourceRoot":"","sources":["../../src/workspace/lineage-vendor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAYH,OAAO,EAA6G,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAS5L,+CAA+C;AAC/C,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAExE;AAUD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,uEAAuE;AACvE,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAoBzF;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAKtD;AAID,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAExF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,4DAA4D;AAC5D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAoB7D;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAgBxD;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAExD;AAID,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAClF,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAiDhF;AAED,mDAAmD;AACnD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Template versions and version ranges, for migration chains (#2550, D9).
3
+ *
4
+ * A template's version is read from the ref it was pinned at: `v1.4.0`,
5
+ * `1.4`, or a prefixed release tag such as `chant-v0.80.0`. Missing minor and
6
+ * patch numbers read as 0. A ref that is not a version (a branch, a commit)
7
+ * has none, and a chain of migrations cannot be planned from it.
8
+ *
9
+ * Ranges use the familiar npm subset: comparators (`>=1.0.0 <2.0.0`), `^`,
10
+ * `~`, `x` wildcards, a bare version for an exact match, `*` for any, and
11
+ * `||` between alternatives. Pre-release tags compare below their release,
12
+ * and a range matches a pre-release only through an exact comparator.
13
+ */
14
+ export interface Version {
15
+ major: number;
16
+ minor: number;
17
+ patch: number;
18
+ /** The pre-release label after `-`, or empty for a release. */
19
+ pre: string;
20
+ }
21
+ /** The version a ref names, or null when it names none. */
22
+ export declare function parseVersion(ref: string | undefined | null): Version | null;
23
+ export declare function formatVersion(v: Version): string;
24
+ export declare function compareVersions(a: Version, b: Version): number;
25
+ export declare class VersionRangeError extends Error {
26
+ name: string;
27
+ }
28
+ /** Check a range's syntax, throwing {@link VersionRangeError} when it cannot be read. */
29
+ export declare function validateRange(range: string): void;
30
+ /** Whether `version` falls in `range`. */
31
+ export declare function satisfies(version: Version, range: string): boolean;
32
+ //# sourceMappingURL=lineage-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lineage-version.d.ts","sourceRoot":"","sources":["../../src/workspace/lineage-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;CACb;AAID,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAK3E;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAEhD;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAQ9D;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IACjC,IAAI,SAAuB;CACrC;AAkED,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,0CAA0C;AAC1C,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAMlE"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Member links (#2524 D6, #2539; ws-008).
3
+ *
4
+ * A member link is stated once, on the consumer, as `{member, output}`, and it
5
+ * is matched exactly against the outputs the producer exposes. Which outputs
6
+ * a member exposes is up to its kind ({@link KindOutputs}): a `chant` member's
7
+ * are read from its source, a nested workspace exposes none, and `other` and
8
+ * kinds from a package expose what the kind and the entry list.
9
+ *
10
+ * A join nobody wrote down is inferred: a `chant` consumer's parameter is
11
+ * matched to other members' outputs with the core {@link joinKey}, and the
12
+ * join is labelled `exact` or `folded`. A parameter that matches two or more
13
+ * outputs is an ambiguity row, not an edge. A declared link from the same
14
+ * consumer to one of the matched outputs settles it: the inferred rows for
15
+ * that parameter give way to the declared one, which is how an inferred edge
16
+ * is promoted.
17
+ *
18
+ * Every row says how it was found (`declared` or `inferred:joinKey`), where it
19
+ * resolved (`source`; `check --live` comes later) and its status. A link that
20
+ * can't be resolved is kept, with the reason.
21
+ *
22
+ * {@link resolveLinks} takes the members' handles as plain data, so the same
23
+ * rules serve `chant workspace check`, which reads the handles from source
24
+ * (`sourceMemberHandles` in `./member-handles.ts`, which loads the TypeScript
25
+ * parser), and `chant workspace graph`, which reads
26
+ * them from each member's graph IR ({@link irMemberHandles}).
27
+ */
28
+ import { type JoinLabel } from "../join-key.js";
29
+ import type { Declaration, LinkDeclaration, Member } from "./declaration.js";
30
+ import type { KindRegistry, MemberKind } from "./kinds.js";
31
+ /** The link kinds chant knows. Closed: a link of any other kind fails closed. */
32
+ export declare const LINK_KINDS: readonly ["output"];
33
+ export declare const DEFAULT_LINK_KIND = "output";
34
+ /** How a row was found: written down, or inferred by the named rule. */
35
+ export type LinkOrigin = "declared" | "inferred:joinKey";
36
+ /** One output or parameter of a member, as a join sees it. */
37
+ export interface JoinHandle {
38
+ name: string;
39
+ /** The node that holds it, when the reader knows one (a graph IR id). */
40
+ node?: string;
41
+ }
42
+ /** What a member offers links, and what it reads. */
43
+ export interface MemberHandles {
44
+ member: string;
45
+ outputs: JoinHandle[];
46
+ /** Parameters a join may feed. Only `chant` members have them. */
47
+ inputs: JoinHandle[];
48
+ /**
49
+ * Whether `outputs` is every output the member exposes. When it isn't, a
50
+ * link to a name not in the list is unresolved, not missing.
51
+ */
52
+ complete: boolean;
53
+ /** Why the list is incomplete, or why the member exposes none. */
54
+ why: string | null;
55
+ /** True when the member's kind exposes no outputs at all. */
56
+ exposesNone: boolean;
57
+ }
58
+ interface RowBase {
59
+ consumer: string;
60
+ kind: string;
61
+ origin: LinkOrigin;
62
+ resolves: "source";
63
+ /** Why the row is not `resolved`, or null. */
64
+ reason: string | null;
65
+ }
66
+ /** A declared link, or an inferred join with one producer. */
67
+ export interface LinkRow extends RowBase {
68
+ status: "resolved" | "missing" | "unresolved" | "invalid";
69
+ producer: string;
70
+ output: string;
71
+ /** `exact` for every declared link; `exact` or `folded` for an inferred one. */
72
+ label: JoinLabel;
73
+ /** The consumer's parameter an inferred join feeds; null for a declared link. */
74
+ input: string | null;
75
+ /** The consumer's parameter node and the producer's output node, when known. */
76
+ from?: string;
77
+ to?: string;
78
+ /** The declared link's JSON Pointer in the declaration. */
79
+ pointer?: string;
80
+ }
81
+ /** A parameter that joins outputs of two or more producers (or two outputs of one). */
82
+ export interface AmbiguousRow extends RowBase {
83
+ status: "ambiguous";
84
+ input: string;
85
+ from?: string;
86
+ candidates: {
87
+ producer: string;
88
+ output: string;
89
+ label: JoinLabel;
90
+ to?: string;
91
+ }[];
92
+ }
93
+ export type LinkTableRow = LinkRow | AmbiguousRow;
94
+ /** A link between two members, in the shape the pipeline checks read (#2542). */
95
+ export interface MemberLinkPair {
96
+ consumer: string;
97
+ producer: string;
98
+ }
99
+ /**
100
+ * The member pairs the declaration links, consumer first, once each, in
101
+ * declaration order. Only links to a declared member other than the consumer
102
+ * count.
103
+ */
104
+ export declare function declaredMemberLinks(declaration: Declaration): MemberLinkPair[];
105
+ /** Why a declared link's target is not a member it may name, or undefined. */
106
+ export declare function linkTargetProblem(declaration: Declaration, consumer: Member, link: LinkDeclaration): string | undefined;
107
+ /**
108
+ * Resolve every declared link and infer the joins nobody wrote down.
109
+ * `handles` holds one entry per member whose handles were read; a member
110
+ * missing from it is unresolved. Declared rows come first, in declaration
111
+ * order; inferred and ambiguous rows follow, sorted by consumer and parameter.
112
+ */
113
+ export declare function resolveLinks(declaration: Declaration, handles: ReadonlyMap<string, MemberHandles>): LinkTableRow[];
114
+ /**
115
+ * The handles of a member whose kind lists its outputs, or exposes none.
116
+ * Undefined for a kind whose outputs are read from the member (`chant`).
117
+ */
118
+ export declare function kindHandles(m: Member, kind: MemberKind): MemberHandles | undefined;
119
+ /** The part of a composed workspace graph (#2537) the links read. */
120
+ export interface ComposedHandles {
121
+ /** Members whose IR was composed. */
122
+ composed: readonly string[];
123
+ exports: readonly {
124
+ member: string;
125
+ name: string;
126
+ node?: string;
127
+ }[];
128
+ imports: readonly {
129
+ member: string;
130
+ name: string;
131
+ node: string;
132
+ }[];
133
+ }
134
+ /**
135
+ * Every composed member's handles, from the `exports` and `imports` of the
136
+ * composed workspace graph, for its `links` section. Node ids are the
137
+ * composed ones (`<member>/<id>`). A member's IR lists all its outputs, so
138
+ * its list is complete.
139
+ */
140
+ export declare function irMemberHandles(graph: ComposedHandles): Map<string, MemberHandles>;
141
+ /**
142
+ * The `links` section of the composed workspace graph (#2537, #2524 D8):
143
+ * the declared links and inferred joins, with composed node ids on the ends
144
+ * that have one. Declared links suppress the inferred edges they cover.
145
+ * With `kinds`, a member that isn't composed but whose kind lists its outputs
146
+ * (`other`, kinds from a package) is a link target too.
147
+ */
148
+ export declare function graphLinks(declaration: Declaration, graph: ComposedHandles, kinds?: KindRegistry): LinkTableRow[];
149
+ export {};
150
+ //# sourceMappingURL=links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../src/workspace/links.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * `chant workspace ls [dir] [--at <rev>] [--json]` (#2534): list a workspace's
3
+ * members and example groups from its declaration.
4
+ *
5
+ * A member that can't be read is still listed, with a reason code, and the
6
+ * command still exits 0 (#2524 D15, ws-020). Failing on it is the job of
7
+ * `chant workspace check`. Only a declaration that can't be read exits 1.
8
+ *
9
+ * The `--json` output is part of the read contract, versioned like
10
+ * `workspace records` and described by `ls.schema.json` beside this file.
11
+ */
12
+ import type { CommandContext } from "../cli/registry.js";
13
+ import { type Declaration, type ErrorLocation, type Member, type WorkspaceErrorCode } from "./declaration.js";
14
+ import { type KindRegistry } from "./kinds.js";
15
+ import type { WorkspaceTree } from "./tree.js";
16
+ /** The version of the `ls` output this chant writes. */
17
+ export declare const LS_CONTRACT_VERSION = 1;
18
+ /** `$id` of the JSON Schema for the `--json` output, shipped beside this file. */
19
+ export declare const LS_OUTPUT_SCHEMA_ID = "https://intentius.io/chant/schemas/workspace/ls/v1/ls.schema.json";
20
+ /**
21
+ * Why one member can't be read. Closed, like the error codes: a new code is a
22
+ * contract change.
23
+ */
24
+ export declare const MEMBER_REASON_CODES: readonly ["dir-missing", "unknown-kind", "kind-probe-failed"];
25
+ export type MemberReasonCode = (typeof MEMBER_REASON_CODES)[number];
26
+ /** Why a group lists nothing. */
27
+ export declare const GROUP_REASON_CODES: readonly ["no-matches"];
28
+ export type GroupReasonCode = (typeof GROUP_REASON_CODES)[number];
29
+ export interface LsMember {
30
+ name: string;
31
+ dir: string;
32
+ kind: string;
33
+ roles: {
34
+ name: string;
35
+ path: string | null;
36
+ }[];
37
+ upstream: string | null;
38
+ because: string | null;
39
+ readable: boolean;
40
+ reason: {
41
+ code: MemberReasonCode;
42
+ message: string;
43
+ } | null;
44
+ }
45
+ export interface LsGroup {
46
+ name: string;
47
+ kind: "examples";
48
+ glob: string[];
49
+ matches: string[];
50
+ skipped: string[];
51
+ reason: {
52
+ code: GroupReasonCode;
53
+ message: string;
54
+ } | null;
55
+ }
56
+ export type LsDocument = {
57
+ $schema: string;
58
+ contract: number;
59
+ chant: string;
60
+ at: string | null;
61
+ workspace: {
62
+ name: string;
63
+ /** The workspace root relative to the git root, `"."` for the git root itself. Absolute outside git. */
64
+ root: string;
65
+ file: string;
66
+ schema: number;
67
+ minReader: string | null;
68
+ pins: Declaration["pins"];
69
+ };
70
+ members: LsMember[];
71
+ groups: LsGroup[];
72
+ summary: {
73
+ members: number;
74
+ unreadable: number;
75
+ groups: number;
76
+ matches: number;
77
+ };
78
+ } | {
79
+ $schema: string;
80
+ contract: number;
81
+ chant: string;
82
+ error: {
83
+ code: WorkspaceErrorCode;
84
+ message: string;
85
+ location: ErrorLocation | null;
86
+ };
87
+ };
88
+ export interface LsQuery {
89
+ /** Where the walk up to the declaration starts. */
90
+ cwd: string;
91
+ at?: string;
92
+ kinds?: KindRegistry;
93
+ }
94
+ /** A member's reason code, or null when its kind can read it. */
95
+ export declare function memberReason(member: Member, tree: WorkspaceTree, kinds: KindRegistry): LsMember["reason"];
96
+ /** Find the workspace, read it and build the document `--json` prints. Never throws a {@link WorkspaceReadError}. */
97
+ export declare function listWorkspace(query: LsQuery): LsDocument;
98
+ export declare function runWorkspaceLs(ctx: CommandContext): Promise<number>;
99
+ //# sourceMappingURL=ls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ls.d.ts","sourceRoot":"","sources":["../../src/workspace/ls.ts"],"names":[],"mappings":"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"}