@xemahq/xema 0.59.1 → 0.60.1

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 (850) hide show
  1. package/README.md +1 -2
  2. package/dist/appliance-owner.d.ts.map +1 -1
  3. package/dist/appliance-owner.js +6 -6
  4. package/dist/appliance-owner.js.map +1 -1
  5. package/dist/assets/appliance-base/authorization.lock.json +5186 -0
  6. package/dist/assets/appliance-base/distribution.lock.json +760 -279
  7. package/dist/assets/appliance-base/images.lock.json +576 -513
  8. package/dist/assets/appliance-lean/authorization.lock.json +4648 -0
  9. package/dist/assets/appliance-lean/distribution.lock.json +641 -186
  10. package/dist/assets/appliance-lean/images.lock.json +574 -512
  11. package/dist/assets/boot-graph.json +33 -14
  12. package/dist/assets/distribution-assets.manifest.json +23 -20
  13. package/dist/cli.d.ts.map +1 -1
  14. package/dist/cli.js +7 -9
  15. package/dist/cli.js.map +1 -1
  16. package/dist/commands/biome-dev.d.ts.map +1 -1
  17. package/dist/commands/biome-dev.js +41 -137
  18. package/dist/commands/biome-dev.js.map +1 -1
  19. package/dist/commands/biome-lifecycle.d.ts +24 -0
  20. package/dist/commands/biome-lifecycle.d.ts.map +1 -0
  21. package/dist/commands/biome-lifecycle.js +253 -0
  22. package/dist/commands/biome-lifecycle.js.map +1 -0
  23. package/dist/commands/biome.d.ts +2 -4
  24. package/dist/commands/biome.d.ts.map +1 -1
  25. package/dist/commands/biome.js +61 -46
  26. package/dist/commands/biome.js.map +1 -1
  27. package/dist/commands/config.d.ts.map +1 -1
  28. package/dist/commands/config.js +96 -8
  29. package/dist/commands/config.js.map +1 -1
  30. package/dist/commands/doctor.d.ts.map +1 -1
  31. package/dist/commands/doctor.js +13 -20
  32. package/dist/commands/doctor.js.map +1 -1
  33. package/dist/commands/down.d.ts.map +1 -1
  34. package/dist/commands/down.js +14 -21
  35. package/dist/commands/down.js.map +1 -1
  36. package/dist/commands/init.d.ts.map +1 -1
  37. package/dist/commands/init.js +6 -3
  38. package/dist/commands/init.js.map +1 -1
  39. package/dist/commands/installation-tenancy.d.ts +11 -0
  40. package/dist/commands/installation-tenancy.d.ts.map +1 -0
  41. package/dist/commands/installation-tenancy.js +308 -0
  42. package/dist/commands/installation-tenancy.js.map +1 -0
  43. package/dist/commands/installation.d.ts.map +1 -1
  44. package/dist/commands/installation.js +19 -5
  45. package/dist/commands/installation.js.map +1 -1
  46. package/dist/commands/logs.d.ts +2 -0
  47. package/dist/commands/logs.d.ts.map +1 -1
  48. package/dist/commands/logs.js +41 -8
  49. package/dist/commands/logs.js.map +1 -1
  50. package/dist/commands/{dev.d.ts → mirror.d.ts} +1 -1
  51. package/dist/commands/mirror.d.ts.map +1 -0
  52. package/dist/commands/mirror.js +132 -0
  53. package/dist/commands/mirror.js.map +1 -0
  54. package/dist/commands/source.d.ts.map +1 -1
  55. package/dist/commands/source.js +3 -2
  56. package/dist/commands/source.js.map +1 -1
  57. package/dist/commands/status.d.ts.map +1 -1
  58. package/dist/commands/status.js +40 -21
  59. package/dist/commands/status.js.map +1 -1
  60. package/dist/commands/up.d.ts.map +1 -1
  61. package/dist/commands/up.js +36 -4
  62. package/dist/commands/up.js.map +1 -1
  63. package/dist/dev/infra-preflight.d.ts.map +1 -1
  64. package/dist/dev/infra-preflight.js +0 -4
  65. package/dist/dev/infra-preflight.js.map +1 -1
  66. package/dist/lib/confirm.d.ts +3 -0
  67. package/dist/lib/confirm.d.ts.map +1 -0
  68. package/dist/lib/confirm.js +19 -0
  69. package/dist/lib/confirm.js.map +1 -0
  70. package/dist/lib/output-format.d.ts +6 -0
  71. package/dist/lib/output-format.d.ts.map +1 -0
  72. package/dist/lib/output-format.js +20 -0
  73. package/dist/lib/output-format.js.map +1 -0
  74. package/dist/mirror/config/mirror-config-document.d.ts +18 -0
  75. package/dist/mirror/config/mirror-config-document.d.ts.map +1 -0
  76. package/dist/mirror/config/mirror-config-document.js +57 -0
  77. package/dist/mirror/config/mirror-config-document.js.map +1 -0
  78. package/dist/mirror/config/mirror-config-schema.d.ts +54 -0
  79. package/dist/mirror/config/mirror-config-schema.d.ts.map +1 -0
  80. package/dist/mirror/config/mirror-config-schema.js +80 -0
  81. package/dist/mirror/config/mirror-config-schema.js.map +1 -0
  82. package/dist/mirror/kit/delta.d.ts +4 -0
  83. package/dist/mirror/kit/delta.d.ts.map +1 -0
  84. package/dist/mirror/kit/delta.js +41 -0
  85. package/dist/mirror/kit/delta.js.map +1 -0
  86. package/dist/mirror/kit/export-kit.d.ts +16 -0
  87. package/dist/mirror/kit/export-kit.d.ts.map +1 -0
  88. package/dist/mirror/kit/export-kit.js +112 -0
  89. package/dist/mirror/kit/export-kit.js.map +1 -0
  90. package/dist/mirror/kit/import-kit.d.ts +9 -0
  91. package/dist/mirror/kit/import-kit.d.ts.map +1 -0
  92. package/dist/mirror/kit/import-kit.js +166 -0
  93. package/dist/mirror/kit/import-kit.js.map +1 -0
  94. package/dist/mirror/kit/kit-archive.d.ts +4 -0
  95. package/dist/mirror/kit/kit-archive.d.ts.map +1 -0
  96. package/dist/mirror/kit/kit-archive.js +38 -0
  97. package/dist/mirror/kit/kit-archive.js.map +1 -0
  98. package/dist/mirror/kit/kit-layout.d.ts +10 -0
  99. package/dist/mirror/kit/kit-layout.d.ts.map +1 -0
  100. package/dist/mirror/kit/kit-layout.js +19 -0
  101. package/dist/mirror/kit/kit-layout.js.map +1 -0
  102. package/dist/mirror/kit/kit-sums.d.ts +5 -0
  103. package/dist/mirror/kit/kit-sums.d.ts.map +1 -0
  104. package/dist/mirror/kit/kit-sums.js +63 -0
  105. package/dist/mirror/kit/kit-sums.js.map +1 -0
  106. package/dist/mirror/kit/layout-sync.d.ts +8 -0
  107. package/dist/mirror/kit/layout-sync.d.ts.map +1 -0
  108. package/dist/mirror/kit/layout-sync.js +58 -0
  109. package/dist/mirror/kit/layout-sync.js.map +1 -0
  110. package/dist/mirror/plan/bundle-content.d.ts +10 -0
  111. package/dist/mirror/plan/bundle-content.d.ts.map +1 -0
  112. package/dist/mirror/plan/bundle-content.js +61 -0
  113. package/dist/mirror/plan/bundle-content.js.map +1 -0
  114. package/dist/mirror/plan/declaration-file.d.ts +9 -0
  115. package/dist/mirror/plan/declaration-file.d.ts.map +1 -0
  116. package/dist/mirror/plan/declaration-file.js +27 -0
  117. package/dist/mirror/plan/declaration-file.js.map +1 -0
  118. package/dist/mirror/plan/edition-inputs.d.ts +57 -0
  119. package/dist/mirror/plan/edition-inputs.d.ts.map +1 -0
  120. package/dist/mirror/plan/edition-inputs.js +44 -0
  121. package/dist/mirror/plan/edition-inputs.js.map +1 -0
  122. package/dist/mirror/plan/edition-reader.d.ts +9 -0
  123. package/dist/mirror/plan/edition-reader.d.ts.map +1 -0
  124. package/dist/mirror/plan/edition-reader.js +47 -0
  125. package/dist/mirror/plan/edition-reader.js.map +1 -0
  126. package/dist/mirror/plan/image-content.d.ts +30 -0
  127. package/dist/mirror/plan/image-content.d.ts.map +1 -0
  128. package/dist/mirror/plan/image-content.js +120 -0
  129. package/dist/mirror/plan/image-content.js.map +1 -0
  130. package/dist/mirror/plan/npm-lockfile.d.ts +12 -0
  131. package/dist/mirror/plan/npm-lockfile.d.ts.map +1 -0
  132. package/dist/mirror/plan/npm-lockfile.js +106 -0
  133. package/dist/mirror/plan/npm-lockfile.js.map +1 -0
  134. package/dist/mirror/plan/oci-reads.d.ts +22 -0
  135. package/dist/mirror/plan/oci-reads.d.ts.map +1 -0
  136. package/dist/mirror/plan/oci-reads.js +43 -0
  137. package/dist/mirror/plan/oci-reads.js.map +1 -0
  138. package/dist/mirror/plan/plan-command.d.ts +22 -0
  139. package/dist/mirror/plan/plan-command.d.ts.map +1 -0
  140. package/dist/mirror/plan/plan-command.js +81 -0
  141. package/dist/mirror/plan/plan-command.js.map +1 -0
  142. package/dist/mirror/plan/plan-file.d.ts +13 -0
  143. package/dist/mirror/plan/plan-file.d.ts.map +1 -0
  144. package/dist/mirror/plan/plan-file.js +63 -0
  145. package/dist/mirror/plan/plan-file.js.map +1 -0
  146. package/dist/mirror/plan/resolve-content-set.d.ts +16 -0
  147. package/dist/mirror/plan/resolve-content-set.d.ts.map +1 -0
  148. package/dist/mirror/plan/resolve-content-set.js +90 -0
  149. package/dist/mirror/plan/resolve-content-set.js.map +1 -0
  150. package/dist/mirror/preflight/glob.d.ts +2 -0
  151. package/dist/mirror/preflight/glob.d.ts.map +1 -0
  152. package/dist/mirror/preflight/glob.js +59 -0
  153. package/dist/mirror/preflight/glob.js.map +1 -0
  154. package/dist/mirror/preflight/harbor-api.d.ts +27 -0
  155. package/dist/mirror/preflight/harbor-api.d.ts.map +1 -0
  156. package/dist/mirror/preflight/harbor-api.js +39 -0
  157. package/dist/mirror/preflight/harbor-api.js.map +1 -0
  158. package/dist/mirror/preflight/preflight.d.ts +18 -0
  159. package/dist/mirror/preflight/preflight.d.ts.map +1 -0
  160. package/dist/mirror/preflight/preflight.js +41 -0
  161. package/dist/mirror/preflight/preflight.js.map +1 -0
  162. package/dist/mirror/preflight/tag-moves.d.ts +16 -0
  163. package/dist/mirror/preflight/tag-moves.d.ts.map +1 -0
  164. package/dist/mirror/preflight/tag-moves.js +28 -0
  165. package/dist/mirror/preflight/tag-moves.js.map +1 -0
  166. package/dist/mirror/preflight/write-probe.d.ts +10 -0
  167. package/dist/mirror/preflight/write-probe.d.ts.map +1 -0
  168. package/dist/mirror/preflight/write-probe.js +36 -0
  169. package/dist/mirror/preflight/write-probe.js.map +1 -0
  170. package/dist/mirror/target/extras.d.ts +16 -0
  171. package/dist/mirror/target/extras.d.ts.map +1 -0
  172. package/dist/mirror/target/extras.js +47 -0
  173. package/dist/mirror/target/extras.js.map +1 -0
  174. package/dist/mirror/target/npm-registry.d.ts +20 -0
  175. package/dist/mirror/target/npm-registry.d.ts.map +1 -0
  176. package/dist/mirror/target/npm-registry.js +67 -0
  177. package/dist/mirror/target/npm-registry.js.map +1 -0
  178. package/dist/mirror/target/npm-sync.d.ts +15 -0
  179. package/dist/mirror/target/npm-sync.d.ts.map +1 -0
  180. package/dist/mirror/target/npm-sync.js +44 -0
  181. package/dist/mirror/target/npm-sync.js.map +1 -0
  182. package/dist/mirror/target/oci-items.d.ts +27 -0
  183. package/dist/mirror/target/oci-items.d.ts.map +1 -0
  184. package/dist/mirror/target/oci-items.js +79 -0
  185. package/dist/mirror/target/oci-items.js.map +1 -0
  186. package/dist/mirror/target/oci-sync.d.ts +20 -0
  187. package/dist/mirror/target/oci-sync.d.ts.map +1 -0
  188. package/dist/mirror/target/oci-sync.js +93 -0
  189. package/dist/mirror/target/oci-sync.js.map +1 -0
  190. package/dist/mirror/target/receipt-store.d.ts +13 -0
  191. package/dist/mirror/target/receipt-store.d.ts.map +1 -0
  192. package/dist/mirror/target/receipt-store.js +61 -0
  193. package/dist/mirror/target/receipt-store.js.map +1 -0
  194. package/dist/mirror/target/receipt.d.ts +13 -0
  195. package/dist/mirror/target/receipt.d.ts.map +1 -0
  196. package/dist/mirror/target/receipt.js +25 -0
  197. package/dist/mirror/target/receipt.js.map +1 -0
  198. package/dist/mirror/target/seed-push.d.ts +15 -0
  199. package/dist/mirror/target/seed-push.d.ts.map +1 -0
  200. package/dist/mirror/target/seed-push.js +20 -0
  201. package/dist/mirror/target/seed-push.js.map +1 -0
  202. package/dist/mirror/target/target-access.d.ts +7 -0
  203. package/dist/mirror/target/target-access.d.ts.map +1 -0
  204. package/dist/mirror/target/target-access.js +17 -0
  205. package/dist/mirror/target/target-access.js.map +1 -0
  206. package/dist/mirror/target/target-commands.d.ts +21 -0
  207. package/dist/mirror/target/target-commands.d.ts.map +1 -0
  208. package/dist/mirror/target/target-commands.js +134 -0
  209. package/dist/mirror/target/target-commands.js.map +1 -0
  210. package/dist/mirror/target/target-context.d.ts +11 -0
  211. package/dist/mirror/target/target-context.d.ts.map +1 -0
  212. package/dist/mirror/target/target-context.js +31 -0
  213. package/dist/mirror/target/target-context.js.map +1 -0
  214. package/dist/mirror/target/target-ports.d.ts +18 -0
  215. package/dist/mirror/target/target-ports.d.ts.map +1 -0
  216. package/dist/mirror/target/target-ports.js +49 -0
  217. package/dist/mirror/target/target-ports.js.map +1 -0
  218. package/dist/mirror/target/target-state.d.ts +22 -0
  219. package/dist/mirror/target/target-state.d.ts.map +1 -0
  220. package/dist/mirror/target/target-state.js +41 -0
  221. package/dist/mirror/target/target-state.js.map +1 -0
  222. package/dist/runtime/biome-dev.d.ts +0 -16
  223. package/dist/runtime/biome-dev.d.ts.map +1 -1
  224. package/dist/runtime/biome-dev.js +0 -53
  225. package/dist/runtime/biome-dev.js.map +1 -1
  226. package/dist/runtime/biome-host/biome-directory-packer.d.ts +3 -0
  227. package/dist/runtime/biome-host/biome-directory-packer.d.ts.map +1 -0
  228. package/dist/runtime/biome-host/biome-directory-packer.js +12 -0
  229. package/dist/runtime/biome-host/biome-directory-packer.js.map +1 -0
  230. package/dist/runtime/biome-host/bundle-packer.d.ts +8 -0
  231. package/dist/runtime/biome-host/bundle-packer.d.ts.map +1 -0
  232. package/dist/runtime/biome-host/bundle-packer.js +3 -0
  233. package/dist/runtime/biome-host/bundle-packer.js.map +1 -0
  234. package/dist/runtime/biome-host/from-spec.d.ts +33 -0
  235. package/dist/runtime/biome-host/from-spec.d.ts.map +1 -0
  236. package/dist/runtime/biome-host/from-spec.js +70 -0
  237. package/dist/runtime/biome-host/from-spec.js.map +1 -0
  238. package/dist/runtime/biome-host/lifecycle-client.d.ts +20 -0
  239. package/dist/runtime/biome-host/lifecycle-client.d.ts.map +1 -0
  240. package/dist/runtime/biome-host/lifecycle-client.js +197 -0
  241. package/dist/runtime/biome-host/lifecycle-client.js.map +1 -0
  242. package/dist/runtime/biome-host/lifecycle-contract.d.ts +95 -0
  243. package/dist/runtime/biome-host/lifecycle-contract.d.ts.map +1 -0
  244. package/dist/runtime/biome-host/lifecycle-contract.js +61 -0
  245. package/dist/runtime/biome-host/lifecycle-contract.js.map +1 -0
  246. package/dist/runtime/biome-host/lifecycle-flow.d.ts +29 -0
  247. package/dist/runtime/biome-host/lifecycle-flow.d.ts.map +1 -0
  248. package/dist/runtime/biome-host/lifecycle-flow.js +106 -0
  249. package/dist/runtime/biome-host/lifecycle-flow.js.map +1 -0
  250. package/dist/runtime/biome-host/plan-sources.d.ts +4 -0
  251. package/dist/runtime/biome-host/plan-sources.d.ts.map +1 -0
  252. package/dist/runtime/biome-host/plan-sources.js +26 -0
  253. package/dist/runtime/biome-host/plan-sources.js.map +1 -0
  254. package/dist/runtime/biome-host/relay/bundle-fetch.d.ts +12 -0
  255. package/dist/runtime/biome-host/relay/bundle-fetch.d.ts.map +1 -0
  256. package/dist/runtime/biome-host/relay/bundle-fetch.js +76 -0
  257. package/dist/runtime/biome-host/relay/bundle-fetch.js.map +1 -0
  258. package/dist/runtime/biome-host/relay/declared-scheme.d.ts +3 -0
  259. package/dist/runtime/biome-host/relay/declared-scheme.d.ts.map +1 -0
  260. package/dist/runtime/biome-host/relay/declared-scheme.js +14 -0
  261. package/dist/runtime/biome-host/relay/declared-scheme.js.map +1 -0
  262. package/dist/runtime/biome-host/relay/npm-token.d.ts +4 -0
  263. package/dist/runtime/biome-host/relay/npm-token.d.ts.map +1 -0
  264. package/dist/runtime/biome-host/relay/npm-token.js +16 -0
  265. package/dist/runtime/biome-host/relay/npm-token.js.map +1 -0
  266. package/dist/runtime/biome-host/relay/relay-flow.d.ts +16 -0
  267. package/dist/runtime/biome-host/relay/relay-flow.d.ts.map +1 -0
  268. package/dist/runtime/biome-host/relay/relay-flow.js +48 -0
  269. package/dist/runtime/biome-host/relay/relay-flow.js.map +1 -0
  270. package/dist/runtime/biome-host/source-staging.d.ts +17 -0
  271. package/dist/runtime/biome-host/source-staging.d.ts.map +1 -0
  272. package/dist/runtime/biome-host/source-staging.js +80 -0
  273. package/dist/runtime/biome-host/source-staging.js.map +1 -0
  274. package/dist/runtime/biome-host/sse.d.ts +2 -0
  275. package/dist/runtime/biome-host/sse.d.ts.map +1 -0
  276. package/dist/runtime/biome-host/sse.js +33 -0
  277. package/dist/runtime/biome-host/sse.js.map +1 -0
  278. package/dist/runtime/biome-local-install.js +1 -1
  279. package/dist/runtime/biome-local-install.js.map +1 -1
  280. package/dist/runtime/browser-origins.d.ts +9 -0
  281. package/dist/runtime/browser-origins.d.ts.map +1 -1
  282. package/dist/runtime/browser-origins.js +10 -0
  283. package/dist/runtime/browser-origins.js.map +1 -1
  284. package/dist/runtime/config/config-document.d.ts +10 -0
  285. package/dist/runtime/config/config-document.d.ts.map +1 -0
  286. package/dist/runtime/config/config-document.js +56 -0
  287. package/dist/runtime/config/config-document.js.map +1 -0
  288. package/dist/runtime/config/config-migrations.d.ts +21 -0
  289. package/dist/runtime/config/config-migrations.d.ts.map +1 -0
  290. package/dist/runtime/config/config-migrations.js +102 -0
  291. package/dist/runtime/config/config-migrations.js.map +1 -0
  292. package/dist/runtime/config/config-paths.d.ts +3 -0
  293. package/dist/runtime/config/config-paths.d.ts.map +1 -0
  294. package/dist/runtime/config/config-paths.js +9 -0
  295. package/dist/runtime/config/config-paths.js.map +1 -0
  296. package/dist/runtime/config/dev-mode.d.ts +0 -1
  297. package/dist/runtime/config/dev-mode.d.ts.map +1 -1
  298. package/dist/runtime/config/dev-mode.js +11 -27
  299. package/dist/runtime/config/dev-mode.js.map +1 -1
  300. package/dist/runtime/config/init-presets.js +5 -9
  301. package/dist/runtime/config/init-presets.js.map +1 -1
  302. package/dist/runtime/config/launch-config-help.d.ts +4 -0
  303. package/dist/runtime/config/launch-config-help.d.ts.map +1 -0
  304. package/dist/runtime/config/launch-config-help.js +42 -0
  305. package/dist/runtime/config/launch-config-help.js.map +1 -0
  306. package/dist/runtime/config/launch-config.d.ts +60 -0
  307. package/dist/runtime/config/launch-config.d.ts.map +1 -0
  308. package/dist/runtime/config/launch-config.js +123 -0
  309. package/dist/runtime/config/launch-config.js.map +1 -0
  310. package/dist/runtime/config/launch-schema.d.ts +18 -0
  311. package/dist/runtime/config/launch-schema.d.ts.map +1 -0
  312. package/dist/runtime/config/launch-schema.js +31 -0
  313. package/dist/runtime/config/launch-schema.js.map +1 -0
  314. package/dist/runtime/config/loader.d.ts.map +1 -1
  315. package/dist/runtime/config/loader.js +4 -14
  316. package/dist/runtime/config/loader.js.map +1 -1
  317. package/dist/runtime/config/schema.d.ts +43 -38
  318. package/dist/runtime/config/schema.d.ts.map +1 -1
  319. package/dist/runtime/config/schema.js +17 -46
  320. package/dist/runtime/config/schema.js.map +1 -1
  321. package/dist/runtime/config/sources-config.d.ts +0 -2
  322. package/dist/runtime/config/sources-config.d.ts.map +1 -1
  323. package/dist/runtime/config/sources-config.js +10 -29
  324. package/dist/runtime/config/sources-config.js.map +1 -1
  325. package/dist/runtime/config/versioned-document.d.ts +26 -0
  326. package/dist/runtime/config/versioned-document.d.ts.map +1 -0
  327. package/dist/runtime/config/versioned-document.js +87 -0
  328. package/dist/runtime/config/versioned-document.js.map +1 -0
  329. package/dist/runtime/directory-changes.d.ts +12 -0
  330. package/dist/runtime/directory-changes.d.ts.map +1 -0
  331. package/dist/runtime/directory-changes.js +62 -0
  332. package/dist/runtime/directory-changes.js.map +1 -0
  333. package/dist/runtime/foreground.d.ts +2 -0
  334. package/dist/runtime/foreground.d.ts.map +1 -1
  335. package/dist/runtime/foreground.js +5 -20
  336. package/dist/runtime/foreground.js.map +1 -1
  337. package/dist/runtime/infra/infra-runner.js +5 -5
  338. package/dist/runtime/infra/infra-runner.js.map +1 -1
  339. package/dist/runtime/infra/keycloak-realm.d.ts +3 -19
  340. package/dist/runtime/infra/keycloak-realm.d.ts.map +1 -1
  341. package/dist/runtime/infra/keycloak-realm.js +12 -133
  342. package/dist/runtime/infra/keycloak-realm.js.map +1 -1
  343. package/dist/runtime/installation/current-launcher-renderer.js.map +1 -1
  344. package/dist/runtime/installation/from-current-config.d.ts.map +1 -1
  345. package/dist/runtime/installation/from-current-config.js +24 -47
  346. package/dist/runtime/installation/from-current-config.js.map +1 -1
  347. package/dist/runtime/installation/index.d.ts +1 -0
  348. package/dist/runtime/installation/index.d.ts.map +1 -1
  349. package/dist/runtime/installation/index.js +1 -0
  350. package/dist/runtime/installation/index.js.map +1 -1
  351. package/dist/runtime/installation/installation-file.d.ts +3 -0
  352. package/dist/runtime/installation/installation-file.d.ts.map +1 -0
  353. package/dist/runtime/installation/installation-file.js +9 -0
  354. package/dist/runtime/installation/installation-file.js.map +1 -0
  355. package/dist/runtime/installation/readiness.d.ts +6 -7
  356. package/dist/runtime/installation/readiness.d.ts.map +1 -1
  357. package/dist/runtime/installation/readiness.js +82 -132
  358. package/dist/runtime/installation/readiness.js.map +1 -1
  359. package/dist/runtime/installation/state-store.d.ts +4 -0
  360. package/dist/runtime/installation/state-store.d.ts.map +1 -1
  361. package/dist/runtime/installation/state-store.js +22 -1
  362. package/dist/runtime/installation/state-store.js.map +1 -1
  363. package/dist/runtime/installation/to-current-config.d.ts +4 -1
  364. package/dist/runtime/installation/to-current-config.d.ts.map +1 -1
  365. package/dist/runtime/installation/to-current-config.js +10 -36
  366. package/dist/runtime/installation/to-current-config.js.map +1 -1
  367. package/dist/runtime/launch-plan-format.d.ts.map +1 -1
  368. package/dist/runtime/launch-plan-format.js +31 -6
  369. package/dist/runtime/launch-plan-format.js.map +1 -1
  370. package/dist/runtime/launch-result.d.ts +15 -0
  371. package/dist/runtime/launch-result.d.ts.map +1 -0
  372. package/dist/runtime/launch-result.js +3 -0
  373. package/dist/runtime/launch-result.js.map +1 -0
  374. package/dist/runtime/launch.d.ts +16 -5
  375. package/dist/runtime/launch.d.ts.map +1 -1
  376. package/dist/runtime/launch.js +151 -315
  377. package/dist/runtime/launch.js.map +1 -1
  378. package/dist/runtime/license/helm-pull-secret.d.ts +1 -1
  379. package/dist/runtime/license/helm-pull-secret.d.ts.map +1 -1
  380. package/dist/runtime/license/helm-pull-secret.js +2 -2
  381. package/dist/runtime/license/helm-pull-secret.js.map +1 -1
  382. package/dist/runtime/lifecycle-progress/index.d.ts +9 -0
  383. package/dist/runtime/lifecycle-progress/index.d.ts.map +1 -0
  384. package/dist/runtime/lifecycle-progress/index.js +30 -0
  385. package/dist/runtime/lifecycle-progress/index.js.map +1 -0
  386. package/dist/runtime/lifecycle-progress/json-renderer.d.ts +3 -0
  387. package/dist/runtime/lifecycle-progress/json-renderer.d.ts.map +1 -0
  388. package/dist/runtime/lifecycle-progress/json-renderer.js +27 -0
  389. package/dist/runtime/lifecycle-progress/json-renderer.js.map +1 -0
  390. package/dist/runtime/lifecycle-progress/text-renderer.d.ts +5 -0
  391. package/dist/runtime/lifecycle-progress/text-renderer.d.ts.map +1 -0
  392. package/dist/runtime/lifecycle-progress/text-renderer.js +83 -0
  393. package/dist/runtime/lifecycle-progress/text-renderer.js.map +1 -0
  394. package/dist/runtime/lifecycle-progress/types.d.ts +79 -0
  395. package/dist/runtime/lifecycle-progress/types.d.ts.map +1 -0
  396. package/dist/runtime/lifecycle-progress/types.js +32 -0
  397. package/dist/runtime/lifecycle-progress/types.js.map +1 -0
  398. package/dist/runtime/lock-loader.d.ts +13 -3
  399. package/dist/runtime/lock-loader.d.ts.map +1 -1
  400. package/dist/runtime/lock-loader.js +28 -8
  401. package/dist/runtime/lock-loader.js.map +1 -1
  402. package/dist/runtime/paths.d.ts +2 -0
  403. package/dist/runtime/paths.d.ts.map +1 -1
  404. package/dist/runtime/paths.js +17 -4
  405. package/dist/runtime/paths.js.map +1 -1
  406. package/dist/runtime/roster.d.ts +6 -5
  407. package/dist/runtime/roster.d.ts.map +1 -1
  408. package/dist/runtime/roster.js +0 -21
  409. package/dist/runtime/roster.js.map +1 -1
  410. package/dist/runtime/runner/container-preflight.d.ts +3 -2
  411. package/dist/runtime/runner/container-preflight.d.ts.map +1 -1
  412. package/dist/runtime/runner/container-preflight.js +5 -5
  413. package/dist/runtime/runner/container-preflight.js.map +1 -1
  414. package/dist/runtime/runner/container-runner.d.ts +0 -22
  415. package/dist/runtime/runner/container-runner.d.ts.map +1 -1
  416. package/dist/runtime/runner/container-runner.js +0 -112
  417. package/dist/runtime/runner/container-runner.js.map +1 -1
  418. package/dist/runtime/runner/docker-cli.d.ts +1 -0
  419. package/dist/runtime/runner/docker-cli.d.ts.map +1 -1
  420. package/dist/runtime/runner/docker-cli.js +19 -0
  421. package/dist/runtime/runner/docker-cli.js.map +1 -1
  422. package/dist/runtime/runner/helm-cli.d.ts +1 -0
  423. package/dist/runtime/runner/helm-cli.d.ts.map +1 -1
  424. package/dist/runtime/runner/helm-cli.js +5 -1
  425. package/dist/runtime/runner/helm-cli.js.map +1 -1
  426. package/dist/runtime/runner/helm-pre-install.d.ts +3 -2
  427. package/dist/runtime/runner/helm-pre-install.d.ts.map +1 -1
  428. package/dist/runtime/runner/helm-pre-install.js +3 -3
  429. package/dist/runtime/runner/helm-pre-install.js.map +1 -1
  430. package/dist/runtime/runner/helm-runner.d.ts +29 -4
  431. package/dist/runtime/runner/helm-runner.d.ts.map +1 -1
  432. package/dist/runtime/runner/helm-runner.js +44 -14
  433. package/dist/runtime/runner/helm-runner.js.map +1 -1
  434. package/dist/runtime/runner/kube-cli.d.ts +1 -0
  435. package/dist/runtime/runner/kube-cli.d.ts.map +1 -1
  436. package/dist/runtime/runner/kube-cli.js +24 -2
  437. package/dist/runtime/runner/kube-cli.js.map +1 -1
  438. package/dist/runtime/secrets/managed-local-key-provider.d.ts +2 -0
  439. package/dist/runtime/secrets/managed-local-key-provider.d.ts.map +1 -1
  440. package/dist/runtime/secrets/managed-local-key-provider.js +17 -8
  441. package/dist/runtime/secrets/managed-local-key-provider.js.map +1 -1
  442. package/dist/runtime/seed/closure-container.d.ts +8 -0
  443. package/dist/runtime/seed/closure-container.d.ts.map +1 -0
  444. package/dist/runtime/seed/closure-container.js +23 -0
  445. package/dist/runtime/seed/closure-container.js.map +1 -0
  446. package/dist/runtime/seed/closure-helm.d.ts +9 -0
  447. package/dist/runtime/seed/closure-helm.d.ts.map +1 -0
  448. package/dist/runtime/seed/closure-helm.js +16 -0
  449. package/dist/runtime/seed/closure-helm.js.map +1 -0
  450. package/dist/runtime/seed/closure-names.d.ts +4 -0
  451. package/dist/runtime/seed/closure-names.d.ts.map +1 -0
  452. package/dist/runtime/seed/closure-names.js +29 -0
  453. package/dist/runtime/seed/closure-names.js.map +1 -0
  454. package/dist/runtime/seed/closure-native.d.ts +3 -0
  455. package/dist/runtime/seed/closure-native.d.ts.map +1 -0
  456. package/dist/runtime/seed/closure-native.js +18 -0
  457. package/dist/runtime/seed/closure-native.js.map +1 -0
  458. package/dist/runtime/seed/installation-tar.d.ts +5 -0
  459. package/dist/runtime/seed/installation-tar.d.ts.map +1 -0
  460. package/dist/runtime/seed/installation-tar.js +30 -0
  461. package/dist/runtime/seed/installation-tar.js.map +1 -0
  462. package/dist/runtime/seed/launch-env.d.ts +42 -0
  463. package/dist/runtime/seed/launch-env.d.ts.map +1 -0
  464. package/dist/runtime/seed/launch-env.js +150 -0
  465. package/dist/runtime/seed/launch-env.js.map +1 -0
  466. package/dist/runtime/seed/seed-container.d.ts +13 -0
  467. package/dist/runtime/seed/seed-container.d.ts.map +1 -0
  468. package/dist/runtime/seed/seed-container.js +175 -0
  469. package/dist/runtime/seed/seed-container.js.map +1 -0
  470. package/dist/runtime/seed/seed-delivery-env.d.ts +39 -0
  471. package/dist/runtime/seed/seed-delivery-env.d.ts.map +1 -0
  472. package/dist/runtime/seed/seed-delivery-env.js +47 -0
  473. package/dist/runtime/seed/seed-delivery-env.js.map +1 -0
  474. package/dist/runtime/seed/seed-down.d.ts +2 -0
  475. package/dist/runtime/seed/seed-down.d.ts.map +1 -0
  476. package/dist/runtime/seed/seed-down.js +52 -0
  477. package/dist/runtime/seed/seed-down.js.map +1 -0
  478. package/dist/runtime/seed/seed-env-file.d.ts +3 -0
  479. package/dist/runtime/seed/seed-env-file.d.ts.map +1 -0
  480. package/dist/runtime/seed/seed-env-file.js +24 -0
  481. package/dist/runtime/seed/seed-env-file.js.map +1 -0
  482. package/dist/runtime/seed/seed-env-secret.d.ts +18 -0
  483. package/dist/runtime/seed/seed-env-secret.d.ts.map +1 -0
  484. package/dist/runtime/seed/seed-env-secret.js +62 -0
  485. package/dist/runtime/seed/seed-env-secret.js.map +1 -0
  486. package/dist/runtime/seed/seed-environment.d.ts +12 -0
  487. package/dist/runtime/seed/seed-environment.d.ts.map +1 -0
  488. package/dist/runtime/seed/seed-environment.js +66 -0
  489. package/dist/runtime/seed/seed-environment.js.map +1 -0
  490. package/dist/runtime/seed/seed-facts.d.ts +22 -0
  491. package/dist/runtime/seed/seed-facts.d.ts.map +1 -0
  492. package/dist/runtime/seed/seed-facts.js +40 -0
  493. package/dist/runtime/seed/seed-facts.js.map +1 -0
  494. package/dist/runtime/seed/seed-helm.d.ts +10 -0
  495. package/dist/runtime/seed/seed-helm.d.ts.map +1 -0
  496. package/dist/runtime/seed/seed-helm.js +74 -0
  497. package/dist/runtime/seed/seed-helm.js.map +1 -0
  498. package/dist/runtime/seed/seed-image-user.d.ts +6 -0
  499. package/dist/runtime/seed/seed-image-user.d.ts.map +1 -0
  500. package/dist/runtime/seed/seed-image-user.js +14 -0
  501. package/dist/runtime/seed/seed-image-user.js.map +1 -0
  502. package/dist/runtime/seed/seed-installation-files.d.ts +23 -0
  503. package/dist/runtime/seed/seed-installation-files.d.ts.map +1 -0
  504. package/dist/runtime/seed/seed-installation-files.js +51 -0
  505. package/dist/runtime/seed/seed-installation-files.js.map +1 -0
  506. package/dist/runtime/seed/seed-installation.d.ts +20 -0
  507. package/dist/runtime/seed/seed-installation.d.ts.map +1 -0
  508. package/dist/runtime/seed/seed-installation.js +36 -0
  509. package/dist/runtime/seed/seed-installation.js.map +1 -0
  510. package/dist/runtime/seed/seed-launcher.d.ts +14 -0
  511. package/dist/runtime/seed/seed-launcher.d.ts.map +1 -0
  512. package/dist/runtime/seed/seed-launcher.js +155 -0
  513. package/dist/runtime/seed/seed-launcher.js.map +1 -0
  514. package/dist/runtime/seed/seed-options.d.ts +22 -0
  515. package/dist/runtime/seed/seed-options.d.ts.map +1 -0
  516. package/dist/runtime/seed/seed-options.js +57 -0
  517. package/dist/runtime/seed/seed-options.js.map +1 -0
  518. package/dist/runtime/seed/seed-platform-endpoints.d.ts +8 -0
  519. package/dist/runtime/seed/seed-platform-endpoints.d.ts.map +1 -0
  520. package/dist/runtime/seed/seed-platform-endpoints.js +55 -0
  521. package/dist/runtime/seed/seed-platform-endpoints.js.map +1 -0
  522. package/dist/runtime/seed/seed-process.d.ts +22 -0
  523. package/dist/runtime/seed/seed-process.d.ts.map +1 -0
  524. package/dist/runtime/seed/seed-process.js +79 -0
  525. package/dist/runtime/seed/seed-process.js.map +1 -0
  526. package/dist/runtime/seed/seed-record.d.ts +101 -0
  527. package/dist/runtime/seed/seed-record.d.ts.map +1 -0
  528. package/dist/runtime/seed/seed-record.js +141 -0
  529. package/dist/runtime/seed/seed-record.js.map +1 -0
  530. package/dist/runtime/seed/seed-resolved-deployment.d.ts +14 -0
  531. package/dist/runtime/seed/seed-resolved-deployment.d.ts.map +1 -0
  532. package/dist/runtime/seed/seed-resolved-deployment.js +52 -0
  533. package/dist/runtime/seed/seed-resolved-deployment.js.map +1 -0
  534. package/dist/runtime/seed/substrate-facts.d.ts +52 -0
  535. package/dist/runtime/seed/substrate-facts.d.ts.map +1 -0
  536. package/dist/runtime/seed/substrate-facts.js +92 -0
  537. package/dist/runtime/seed/substrate-facts.js.map +1 -0
  538. package/dist/runtime/seed/supervisor-contract.d.ts +9 -0
  539. package/dist/runtime/seed/supervisor-contract.d.ts.map +1 -0
  540. package/dist/runtime/seed/supervisor-contract.js +68 -0
  541. package/dist/runtime/seed/supervisor-contract.js.map +1 -0
  542. package/dist/runtime/seed/workload-identity-facts.d.ts +17 -0
  543. package/dist/runtime/seed/workload-identity-facts.d.ts.map +1 -0
  544. package/dist/runtime/seed/workload-identity-facts.js +53 -0
  545. package/dist/runtime/seed/workload-identity-facts.js.map +1 -0
  546. package/dist/runtime/sources/schema.d.ts +2 -0
  547. package/dist/runtime/sources/schema.d.ts.map +1 -1
  548. package/dist/runtime/sources/schema.js +10 -9
  549. package/dist/runtime/sources/schema.js.map +1 -1
  550. package/dist/runtime/store-client.d.ts +0 -10
  551. package/dist/runtime/store-client.d.ts.map +1 -1
  552. package/dist/runtime/store-client.js +0 -5
  553. package/dist/runtime/store-client.js.map +1 -1
  554. package/dist/runtime/tenancy/identity-installer.d.ts +11 -0
  555. package/dist/runtime/tenancy/identity-installer.d.ts.map +1 -0
  556. package/dist/runtime/tenancy/identity-installer.js +39 -0
  557. package/dist/runtime/tenancy/identity-installer.js.map +1 -0
  558. package/dist/runtime/tenancy/import-cache.d.ts +5 -0
  559. package/dist/runtime/tenancy/import-cache.d.ts.map +1 -0
  560. package/dist/runtime/tenancy/import-cache.js +27 -0
  561. package/dist/runtime/tenancy/import-cache.js.map +1 -0
  562. package/dist/runtime/tenancy/openfga.d.ts +4 -0
  563. package/dist/runtime/tenancy/openfga.d.ts.map +1 -0
  564. package/dist/runtime/tenancy/openfga.js +29 -0
  565. package/dist/runtime/tenancy/openfga.js.map +1 -0
  566. package/dist/runtime/tenancy/servers.d.ts +18 -0
  567. package/dist/runtime/tenancy/servers.d.ts.map +1 -0
  568. package/dist/runtime/tenancy/servers.js +102 -0
  569. package/dist/runtime/tenancy/servers.js.map +1 -0
  570. package/dist/runtime/tenancy/session.d.ts +19 -0
  571. package/dist/runtime/tenancy/session.d.ts.map +1 -0
  572. package/dist/runtime/tenancy/session.js +79 -0
  573. package/dist/runtime/tenancy/session.js.map +1 -0
  574. package/dist/runtime/tenancy/specs.d.ts +27 -0
  575. package/dist/runtime/tenancy/specs.d.ts.map +1 -0
  576. package/dist/runtime/tenancy/specs.js +129 -0
  577. package/dist/runtime/tenancy/specs.js.map +1 -0
  578. package/examples/01-local-native.yaml +1 -3
  579. package/examples/02-local-container-full.yaml +0 -2
  580. package/examples/03-byo-infra.yaml +1 -5
  581. package/examples/06-biome-sources.yaml +1 -3
  582. package/package.json +32 -37
  583. package/xema.config.example.yaml +1 -10
  584. package/dist/assets/keycloak/realm-xema.json +0 -397
  585. package/dist/commands/dev.d.ts.map +0 -1
  586. package/dist/commands/dev.js +0 -196
  587. package/dist/commands/dev.js.map +0 -1
  588. package/dist/commands/edition.d.ts +0 -3
  589. package/dist/commands/edition.d.ts.map +0 -1
  590. package/dist/commands/edition.js +0 -54
  591. package/dist/commands/edition.js.map +0 -1
  592. package/dist/commands/serve.d.ts +0 -3
  593. package/dist/commands/serve.d.ts.map +0 -1
  594. package/dist/commands/serve.js +0 -114
  595. package/dist/commands/serve.js.map +0 -1
  596. package/dist/dev/carved-installs.d.ts +0 -3
  597. package/dist/dev/carved-installs.d.ts.map +0 -1
  598. package/dist/dev/carved-installs.js +0 -63
  599. package/dist/dev/carved-installs.js.map +0 -1
  600. package/dist/dev/env-defaults.d.ts +0 -15
  601. package/dist/dev/env-defaults.d.ts.map +0 -1
  602. package/dist/dev/env-defaults.js +0 -178
  603. package/dist/dev/env-defaults.js.map +0 -1
  604. package/dist/dev/forked-worker-bootstrap-protocol.d.ts +0 -17
  605. package/dist/dev/forked-worker-bootstrap-protocol.d.ts.map +0 -1
  606. package/dist/dev/forked-worker-bootstrap-protocol.js +0 -35
  607. package/dist/dev/forked-worker-bootstrap-protocol.js.map +0 -1
  608. package/dist/dev/forked-worker-bootstrap.d.ts +0 -18
  609. package/dist/dev/forked-worker-bootstrap.d.ts.map +0 -1
  610. package/dist/dev/forked-worker-bootstrap.js +0 -84
  611. package/dist/dev/forked-worker-bootstrap.js.map +0 -1
  612. package/dist/dev/forked-worker.d.ts +0 -43
  613. package/dist/dev/forked-worker.d.ts.map +0 -1
  614. package/dist/dev/forked-worker.js +0 -358
  615. package/dist/dev/forked-worker.js.map +0 -1
  616. package/dist/edition/verify-image-evidence.bundle.mjs +0 -70456
  617. package/dist/edition/verify-image-evidence.bundle.provenance.json +0 -3957
  618. package/dist/runtime/backing-registration.d.ts +0 -11
  619. package/dist/runtime/backing-registration.d.ts.map +0 -1
  620. package/dist/runtime/backing-registration.js +0 -94
  621. package/dist/runtime/backing-registration.js.map +0 -1
  622. package/dist/runtime/edition/run-entry.d.ts +0 -9
  623. package/dist/runtime/edition/run-entry.d.ts.map +0 -1
  624. package/dist/runtime/edition/run-entry.js +0 -36
  625. package/dist/runtime/edition/run-entry.js.map +0 -1
  626. package/dist/runtime/edition/verb-map.d.ts +0 -70
  627. package/dist/runtime/edition/verb-map.d.ts.map +0 -1
  628. package/dist/runtime/edition/verb-map.js +0 -166
  629. package/dist/runtime/edition/verb-map.js.map +0 -1
  630. package/dist/runtime/env-seeder.d.ts +0 -26
  631. package/dist/runtime/env-seeder.d.ts.map +0 -1
  632. package/dist/runtime/env-seeder.js +0 -340
  633. package/dist/runtime/env-seeder.js.map +0 -1
  634. package/dist/runtime/port-map.d.ts +0 -3
  635. package/dist/runtime/port-map.d.ts.map +0 -1
  636. package/dist/runtime/port-map.js +0 -25
  637. package/dist/runtime/port-map.js.map +0 -1
  638. package/dist/runtime/run-manifest.d.ts +0 -52
  639. package/dist/runtime/run-manifest.d.ts.map +0 -1
  640. package/dist/runtime/run-manifest.js +0 -585
  641. package/dist/runtime/run-manifest.js.map +0 -1
  642. package/dist/runtime/runner/native-runner.d.ts +0 -13
  643. package/dist/runtime/runner/native-runner.d.ts.map +0 -1
  644. package/dist/runtime/runner/native-runner.js +0 -94
  645. package/dist/runtime/runner/native-runner.js.map +0 -1
  646. package/dist/runtime/runner/service-runner.d.ts +0 -28
  647. package/dist/runtime/runner/service-runner.d.ts.map +0 -1
  648. package/dist/runtime/runner/service-runner.js +0 -10
  649. package/dist/runtime/runner/service-runner.js.map +0 -1
  650. package/dist/runtime/secrets/generated-platform-secrets.d.ts +0 -16
  651. package/dist/runtime/secrets/generated-platform-secrets.d.ts.map +0 -1
  652. package/dist/runtime/secrets/generated-platform-secrets.js +0 -115
  653. package/dist/runtime/secrets/generated-platform-secrets.js.map +0 -1
  654. package/dist/runtime/secrets/resolver.d.ts +0 -23
  655. package/dist/runtime/secrets/resolver.d.ts.map +0 -1
  656. package/dist/runtime/secrets/resolver.js +0 -266
  657. package/dist/runtime/secrets/resolver.js.map +0 -1
  658. package/dist/runtime/supervisor.d.ts +0 -67
  659. package/dist/runtime/supervisor.d.ts.map +0 -1
  660. package/dist/runtime/supervisor.js +0 -227
  661. package/dist/runtime/supervisor.js.map +0 -1
  662. package/edition/README.md +0 -293
  663. package/edition/adapter-bundled-versions.mjs +0 -108
  664. package/edition/adapter-host-versions.mjs +0 -41
  665. package/edition/assemble-producer-input.mjs +0 -1423
  666. package/edition/assemble-third-party-input.mjs +0 -336
  667. package/edition/authored-source-check.mjs +0 -135
  668. package/edition/authorization-base.mjs +0 -357
  669. package/edition/biome-content.mjs +0 -327
  670. package/edition/build-biome-index.mjs +0 -180
  671. package/edition/build-ledger-completeness.mjs +0 -67
  672. package/edition/build-ledger.mjs +0 -107
  673. package/edition/build-platform-service-index.mjs +0 -292
  674. package/edition/build-runtime-image-source-index.mjs +0 -1187
  675. package/edition/built-verifier.mjs +0 -55
  676. package/edition/candidate-edition.mjs +0 -697
  677. package/edition/canonical-evidence-json.mjs +0 -82
  678. package/edition/canonical-repository-url.mjs +0 -47
  679. package/edition/catalogue-edition.mjs +0 -49
  680. package/edition/catalogue-evidence.mjs +0 -228
  681. package/edition/catalogue-fetch.mjs +0 -124
  682. package/edition/catalogue-lock-field.mjs +0 -41
  683. package/edition/catalogue-pin.mjs +0 -71
  684. package/edition/catalogue.mjs +0 -223
  685. package/edition/chart-set-source-commit.mjs +0 -97
  686. package/edition/check-committed-image-evidence.mjs +0 -412
  687. package/edition/checkout-indexed-source-repositories.mjs +0 -283
  688. package/edition/collected-refusals.mjs +0 -59
  689. package/edition/comment-blanker.mjs +0 -75
  690. package/edition/connector-source-authority.mjs +0 -60
  691. package/edition/contract-authority.mjs +0 -122
  692. package/edition/cosign-certificate-constraints.mjs +0 -50
  693. package/edition/cross-repo-build-inputs.mjs +0 -158
  694. package/edition/customer-definition.mjs +0 -174
  695. package/edition/customer-edition-verbs.mjs +0 -617
  696. package/edition/customer-flags.mjs +0 -15
  697. package/edition/develop-catalogue-free-resolve.mjs +0 -280
  698. package/edition/develop-chart-roster.mjs +0 -96
  699. package/edition/develop-chart-set.mjs +0 -147
  700. package/edition/develop-coverage-readers.mjs +0 -217
  701. package/edition/develop-coverage-run.mjs +0 -50
  702. package/edition/develop-coverage-verdict.mjs +0 -153
  703. package/edition/develop-coverage.mjs +0 -131
  704. package/edition/develop-current-resolution.mjs +0 -29
  705. package/edition/develop-edition-invariants.mjs +0 -142
  706. package/edition/develop-edition-resolve.mjs +0 -211
  707. package/edition/develop-edition.mjs +0 -379
  708. package/edition/develop-engine-image.mjs +0 -95
  709. package/edition/develop-follow.mjs +0 -491
  710. package/edition/develop-freeze.mjs +0 -289
  711. package/edition/develop-git-bundles.mjs +0 -255
  712. package/edition/develop-graph.mjs +0 -28
  713. package/edition/develop-image-coordinate.mjs +0 -54
  714. package/edition/develop-image-probe.mjs +0 -120
  715. package/edition/develop-image-record.mjs +0 -194
  716. package/edition/develop-record-ancestry.mjs +0 -144
  717. package/edition/develop-record-verify.mjs +0 -216
  718. package/edition/develop-resolve-report.mjs +0 -159
  719. package/edition/develop-select-records.mjs +0 -172
  720. package/edition/develop-selection-line.mjs +0 -30
  721. package/edition/develop-selection-pins.mjs +0 -36
  722. package/edition/develop-snapshot-inputs.mjs +0 -93
  723. package/edition/develop-verify-image-record.mjs +0 -109
  724. package/edition/dispatched-runtime-components.mjs +0 -172
  725. package/edition/dist-check.mjs +0 -1137
  726. package/edition/distribution-evidence-set.mjs +0 -1064
  727. package/edition/distribution-paths.mjs +0 -191
  728. package/edition/edition-artifact.mjs +0 -529
  729. package/edition/edition-biome-manifests.mjs +0 -85
  730. package/edition/edition-ceiling.mjs +0 -180
  731. package/edition/edition-channel.mjs +0 -20
  732. package/edition/edition-chart-set.mjs +0 -104
  733. package/edition/edition-config.mjs +0 -374
  734. package/edition/edition-constants.mjs +0 -110
  735. package/edition/edition-contract-parse.mjs +0 -179
  736. package/edition/edition-contract.json +0 -100
  737. package/edition/edition-image-seal.mjs +0 -110
  738. package/edition/edition-kind.mjs +0 -10
  739. package/edition/edition-list.mjs +0 -35
  740. package/edition/edition-locks.mjs +0 -79
  741. package/edition/edition-pin-verbs.mjs +0 -183
  742. package/edition/edition-pin.mjs +0 -17
  743. package/edition/edition-pinned-inputs.mjs +0 -116
  744. package/edition/edition-protocol.mjs +0 -277
  745. package/edition/edition-publisher.mjs +0 -21
  746. package/edition/edition-seal.mjs +0 -257
  747. package/edition/edition-source-pins.mjs +0 -211
  748. package/edition/edition-unpin.mjs +0 -16
  749. package/edition/edition-workspace.mjs +0 -204
  750. package/edition/evidence-checkout.mjs +0 -439
  751. package/edition/evidence-grammars.mjs +0 -18
  752. package/edition/evidence-input-mode.mjs +0 -136
  753. package/edition/evidence-trust-pin.mjs +0 -380
  754. package/edition/evidence-trust-policy.mjs +0 -374
  755. package/edition/external-source-walk.mjs +0 -485
  756. package/edition/first-party-source-ids.mjs +0 -62
  757. package/edition/fleet-coordinate-finality.mjs +0 -363
  758. package/edition/fulcio-certificate-extensions.mjs +0 -231
  759. package/edition/git-json.mjs +0 -54
  760. package/edition/git-source-auth.mjs +0 -131
  761. package/edition/image-delivery-entitlement-descriptor.mjs +0 -106
  762. package/edition/image-evidence-replay-state.mjs +0 -242
  763. package/edition/image-evidence.mjs +0 -1404
  764. package/edition/image-lock-service-rows.mjs +0 -26
  765. package/edition/image-subject-identity.mjs +0 -24
  766. package/edition/images-from-record.mjs +0 -298
  767. package/edition/indexes-at-pins.mjs +0 -13
  768. package/edition/kernel-capability-domain.mjs +0 -30
  769. package/edition/kernel-contract-authority.mjs +0 -517
  770. package/edition/kernel-contract-source-path-set.mjs +0 -94
  771. package/edition/kernel-package.mjs +0 -206
  772. package/edition/kernel-protocol-choice.mjs +0 -239
  773. package/edition/kernel-signer-kind.mjs +0 -23
  774. package/edition/lib.mjs +0 -3303
  775. package/edition/locked-bundle-signer.mjs +0 -297
  776. package/edition/map-with-concurrency.mjs +0 -19
  777. package/edition/no-follow-file.mjs +0 -94
  778. package/edition/oci-evidence-verbs.mjs +0 -419
  779. package/edition/oci-image-source-evidence.mjs +0 -364
  780. package/edition/operation-grant-admission.mjs +0 -285
  781. package/edition/operation-requirements.mjs +0 -282
  782. package/edition/oras-process.mjs +0 -35
  783. package/edition/oras.mjs +0 -742
  784. package/edition/pin-source.mjs +0 -242
  785. package/edition/pinned-cosign.mjs +0 -70
  786. package/edition/plan-image-evidence-refresh.mjs +0 -427
  787. package/edition/platform-lock-readability.mjs +0 -901
  788. package/edition/platform-service-class.mjs +0 -85
  789. package/edition/platform-service-ownership.mjs +0 -88
  790. package/edition/platform-service-source-authority.mjs +0 -105
  791. package/edition/positive-closure.mjs +0 -162
  792. package/edition/previous-seal-registry.mjs +0 -149
  793. package/edition/produce-distribution-completeness-evidence.mjs +0 -318
  794. package/edition/produce-edition-catalogue-evidence.mjs +0 -252
  795. package/edition/produce-image-delivery-entitlement-evidence.mjs +0 -304
  796. package/edition/produce-image-source-evidence.mjs +0 -788
  797. package/edition/producer-evidence-bundle.mjs +0 -201
  798. package/edition/producer-evidence-index-file.mjs +0 -4
  799. package/edition/record-refused.mjs +0 -12
  800. package/edition/registry-credentials.mjs +0 -225
  801. package/edition/release-catalogue.mjs +0 -47
  802. package/edition/release-channel-guard.mjs +0 -108
  803. package/edition/release-edition-artifact.mjs +0 -152
  804. package/edition/release-edition.mjs +0 -54
  805. package/edition/remedy-command.mjs +0 -89
  806. package/edition/repin-evidence-trust.mjs +0 -109
  807. package/edition/required-resource-provider.mjs +0 -58
  808. package/edition/resolve-chart-set.mjs +0 -376
  809. package/edition/resolve-customer-edition.mjs +0 -374
  810. package/edition/resolve-distribution.mjs +0 -2639
  811. package/edition/resolve-edition.mjs +0 -192
  812. package/edition/resolve-images.mjs +0 -2351
  813. package/edition/seal-image-digests.mjs +0 -954
  814. package/edition/sealed-distribution-lock.mjs +0 -22
  815. package/edition/sealed-evidence-accept.mjs +0 -82
  816. package/edition/shallow-checkout.mjs +0 -18
  817. package/edition/sigstore-bundle-media-type.mjs +0 -4
  818. package/edition/source-authority.mjs +0 -713
  819. package/edition/source-closure.mjs +0 -115
  820. package/edition/store-publisher-trust.mjs +0 -40
  821. package/edition/strict-json.mjs +0 -121
  822. package/edition/string-order.mjs +0 -5
  823. package/edition/third-party-admission.mjs +0 -91
  824. package/edition/third-party-bundle-registry.mjs +0 -242
  825. package/edition/third-party-certificate-extensions.mjs +0 -21
  826. package/edition/third-party-image-pins.mjs +0 -41
  827. package/edition/third-party-pins-trusted.mjs +0 -24
  828. package/edition/third-party-producer-evidence.mjs +0 -76
  829. package/edition/third-party-source-check.mjs +0 -28
  830. package/edition/third-party-source-context.mjs +0 -41
  831. package/edition/third-party-source-evidence.mjs +0 -287
  832. package/edition/third-party-source-flags.mjs +0 -134
  833. package/edition/third-party-source-pins.mjs +0 -259
  834. package/edition/third-party-source-uniqueness.mjs +0 -54
  835. package/edition/third-party-source-walk.mjs +0 -115
  836. package/edition/third-party-source-writer.mjs +0 -213
  837. package/edition/third-party-subjects.mjs +0 -128
  838. package/edition/trust-policy-arming-verb.mjs +0 -60
  839. package/edition/trust-policy-arming.mjs +0 -144
  840. package/edition/trust-policy-image-ownership.mjs +0 -85
  841. package/edition/trusted-executable.mjs +0 -166
  842. package/edition/verifier-binding.mjs +0 -45
  843. package/edition/verifier-files.mjs +0 -8
  844. package/edition/verifier-kernel-schemas.mjs +0 -22
  845. package/edition/verifier-provenance.mjs +0 -64
  846. package/edition/verify-catalogue-evidence.mjs +0 -247
  847. package/edition/verify-image-evidence.mjs +0 -475
  848. package/edition/verify-image-platforms.mjs +0 -523
  849. package/edition/why.mjs +0 -56
  850. package/edition/workspace-sections.mjs +0 -276
@@ -1,697 +0,0 @@
1
- // candidate-edition — re-seal a pinned develop edition with ONE repository's candidate commit, for a boot test.
2
- //
3
- // A repository's candidate CI boots the composed member set through the production path, and that needs
4
- // a lock triple that matches its candidate commit: a pinned develop edition is stale against it the moment
5
- // the candidate changes a biome. This module produces that triple, in two steps:
6
- //
7
- // fetchPinnedEditionCheckouts the ONE network step: every checkout the develop resolve reads, at the
8
- // pinned edition's own pins (xema-edition.json provenance.pins), cached
9
- // under the caller's cacheDir by pin key + commit. A warm cache does no network.
10
- // resealCandidateEdition OFFLINE: the develop resolve's distribution and authorization steps rerun
11
- // over those frozen checkouts with the candidate repository at its HEAD, the
12
- // images lock carried byte for byte, and the unsplit resolved deployment the
13
- // kernel computes from exactly the bytes written.
14
- //
15
- // THE OUTPUT IS A PLAIN DIRECTORY, NEVER AN EDITION. It carries no xema-edition.json descriptor, it is never
16
- // an OCI artifact and it is never signed, so no deploy admits it: admission rests on the cosign signature of
17
- // a pushed edition artifact's digest (edition-artifact.mjs), and the resolved deployment written here is the
18
- // kernel's UNSPLIT variant, which `verifyResolvedDeployment` refuses unless its caller opts into it.
19
- //
20
- // THE CANDIDATE CONTENT RECORD. The images lock is carried, so for a biome that ships images from the
21
- // candidate repository it still says the images were built at the PINNED commit, and the content-hash rule
22
- // (biome-content.mjs `pinnedCommit`) reads a biome's content where its images were built. The candidate's
23
- // content is at another commit, so the output records that fact in `candidate-content.json`
24
- // ({ repo -> commit }, bound to the distribution lock bytes by digest) and the seal and the verifier read it
25
- // through biome-content.mjs `contentCommits`: a record naming a commit whose content is not the lock's is
26
- // refused by the same comparison every seal makes, and a triple without a record verifies exactly as before.
27
-
28
- import { execFileSync } from 'node:child_process';
29
- import { existsSync, mkdirSync, mkdtempSync, readFileSync, renameSync, rmSync, symlinkSync, writeFileSync } from 'node:fs';
30
- import { tmpdir } from 'node:os';
31
- import { dirname, isAbsolute, join, resolve } from 'node:path';
32
-
33
- import { sealLock, verifyBiomeContentHashes } from './biome-content.mjs';
34
- import {
35
- crossRepoVendoredCommits,
36
- platformServiceExtraCommits,
37
- sourceAxisExtraCommits,
38
- sourceCheckoutPlan,
39
- } from './checkout-indexed-source-repositories.mjs';
40
- import { assertDevelopEditionInvariants } from './develop-edition-invariants.mjs';
41
- import { carriedDevelopGitBundles } from './develop-git-bundles.mjs';
42
- import { buildSnapshotInputs } from './develop-snapshot-inputs.mjs';
43
- import { parseEditionDescriptor } from './edition-artifact.mjs';
44
- import { resetEditionWorkspaceConfig, editionWorkspaceConfig } from './edition-config.mjs';
45
- import { DIGEST_PIN_KEYS, EDITION_DESCRIPTOR_FILE, EditionChannel, EditionLockFile } from './edition-constants.mjs';
46
- import {
47
- KERNEL_PACKAGE_REPO_PATH,
48
- WorkspaceRoot,
49
- configureEditionWorkspace,
50
- configuredWorkspace,
51
- kernelDistPath,
52
- kernelPackageDir,
53
- platformServiceIndexPath,
54
- runtimeImageSourceIndexPath,
55
- } from './edition-workspace.mjs';
56
- import { materializeGitSource, externalSourceCacheDir } from './external-source-walk.mjs';
57
- import { withSourceGitEnv } from './git-source-auth.mjs';
58
- import { loadKernelDistributionSchemas, serializeJson, sha256Hex } from './lib.mjs';
59
- import { GitSourcedBundle, assertLockBundleSigners } from './locked-bundle-signer.mjs';
60
- import { admitDistributionLock } from './operation-grant-admission.mjs';
61
- import {
62
- EDITIONS_ROOT_PIN_KEY,
63
- SnapshotPinNamespace,
64
- applyPinSource,
65
- dataPinKey,
66
- kernelPinKey,
67
- pinnedSource,
68
- snapshotPinNamespace,
69
- snapshotPinSource,
70
- } from './pin-source.mjs';
71
- import { composeAuthorizationBase, composeEdition, prepareDistributionWithIndex } from './resolve-distribution.mjs';
72
- import { externalSourceTrees, sourceTreeLocator } from './resolve-images.mjs';
73
- import { shallowCheckout, shallowFetch } from './shallow-checkout.mjs';
74
- import { createPinnedSourceAuthority } from './source-authority.mjs';
75
- import { readStrictJsonFile } from './strict-json.mjs';
76
-
77
- /** The candidate content record: which repository's first-party biomes have their content at which commit. */
78
- export const CANDIDATE_CONTENT_FILE = 'candidate-content.json';
79
- export const CANDIDATE_CONTENT_SCHEMA = 'xema.candidate-content/v1';
80
- /** The kernel's unsplit resolved deployment, computed from exactly the lock bytes written beside it. */
81
- export const RESOLVED_DEPLOYMENT_FILE = 'resolved-deployment.json';
82
- /** The coordinate a candidate triple names: a reserved `.invalid` registry, so it can never be read as a published edition's. */
83
- export const CANDIDATE_EDITION_REGISTRY = 'candidate.invalid';
84
- export const CANDIDATE_EDITION_VERSION = '0.0.0-candidate';
85
- /** Every file of a candidate triple, in the order it is written. */
86
- export const CANDIDATE_FILES = Object.freeze([
87
- EditionLockFile.Distribution,
88
- EditionLockFile.Images,
89
- EditionLockFile.Authorization,
90
- RESOLVED_DEPLOYMENT_FILE,
91
- CANDIDATE_CONTENT_FILE,
92
- ]);
93
-
94
- /** A refusal of the candidate re-seal: the pinned edition, a checkout or the candidate is not what it must be. */
95
- export class CandidateEditionError extends Error {
96
- constructor(message) {
97
- super(message);
98
- this.name = 'CandidateEditionError';
99
- }
100
- }
101
-
102
-
103
- function defaultRunGit(args, env) {
104
- return execFileSync('git', args, { encoding: 'utf8', env, stdio: ['ignore', 'pipe', 'pipe'] }).trim();
105
- }
106
-
107
- /**
108
- * The environment of a LOCAL git command: PATH and HOME only. No GIT_* variable (GIT_DIR, GIT_WORK_TREE,
109
- * GIT_INDEX_FILE, a hook's environment) reaches it, so it reads exactly the directory it names; it needs no credential.
110
- */
111
- function localGitEnv() {
112
- const env = {};
113
- for (const name of ['PATH', 'HOME']) {
114
- if (process.env[name] !== undefined) {env[name] = process.env[name];}
115
- }
116
- return env;
117
- }
118
-
119
- function runLocalGit(args) {
120
- return execFileSync('git', args, { encoding: 'utf8', env: localGitEnv(), stdio: ['ignore', 'pipe', 'pipe'] }).trim();
121
- }
122
-
123
- /** A LOCAL git read; the reseal runs only these. */
124
- function localGit(dir, args) {
125
- return runLocalGit(['-C', dir, ...args]);
126
- }
127
-
128
- function hasCommit(dir, commit) {
129
- try {
130
- localGit(dir, ['cat-file', '-e', `${commit}^{commit}`]);
131
- return true;
132
- } catch {
133
- return false;
134
- }
135
- }
136
-
137
- /** The develop build of the kernel: the same two commands develop-edition.yaml runs in its kernel checkout. */
138
- function defaultBuildKernel(repoDir) {
139
- for (const args of [['pnpm', 'install', '--frozen-lockfile'], ['pnpm', 'run', 'build']]) {
140
- execFileSync('corepack', args, { cwd: repoDir, stdio: ['ignore', 'inherit', 'inherit'] });
141
- }
142
- }
143
-
144
- function absoluteDir(name, value) {
145
- if (typeof value !== 'string' || !isAbsolute(value)) {
146
- throw new CandidateEditionError(`${name} must be an absolute directory path, got ${JSON.stringify(value)}`);
147
- }
148
- return resolve(value);
149
- }
150
-
151
- /**
152
- * The pinned develop edition: its descriptor (strict parse), its pins, and the three lock files. A customer
153
- * edition (digest pins), an edition of another channel, or a missing lock is refused.
154
- */
155
- export function readPinnedEdition(tripleDir) {
156
- const dir = absoluteDir('tripleDir', tripleDir);
157
- const descriptorPath = join(dir, EDITION_DESCRIPTOR_FILE);
158
- if (!existsSync(descriptorPath)) {
159
- throw new CandidateEditionError(`${dir} holds no ${EDITION_DESCRIPTOR_FILE}: the pinned edition's pins are read from its descriptor`);
160
- }
161
- const descriptor = parseEditionDescriptor(readStrictJsonFile(descriptorPath));
162
- if (descriptor.provenance.channel !== EditionChannel.Develop) {
163
- throw new CandidateEditionError(
164
- `${descriptorPath}: "${descriptor.distributionId}" is a ${descriptor.provenance.channel} edition; a candidate is re-sealed only from a develop edition`,
165
- );
166
- }
167
- const digestPins = DIGEST_PIN_KEYS.filter((key) => key in descriptor.provenance.pins);
168
- if (digestPins.length > 0) {
169
- throw new CandidateEditionError(
170
- `${descriptorPath}: "${descriptor.distributionId}" pins ${digestPins.join(', ')}: a customer edition is resolved against a catalogue, not from checkouts`,
171
- );
172
- }
173
- const bytes = {};
174
- for (const file of [EditionLockFile.Distribution, EditionLockFile.Images, EditionLockFile.Authorization]) {
175
- const path = join(dir, file);
176
- if (!existsSync(path)) {throw new CandidateEditionError(`${dir} holds no ${file}`);}
177
- bytes[file] = readFileSync(path);
178
- }
179
- for (const file of Object.keys(bytes)) {
180
- const { distributionId } = JSON.parse(bytes[file].toString('utf8'));
181
- if (distributionId !== descriptor.distributionId) {
182
- throw new CandidateEditionError(`${join(dir, file)} is for "${distributionId}", but the descriptor names "${descriptor.distributionId}"`);
183
- }
184
- }
185
- return { dir, id: descriptor.distributionId, pins: { ...descriptor.provenance.pins }, bytes };
186
- }
187
-
188
- /** Where a pin key's checkout at `commit` is cached. */
189
- function cachedCheckoutDir(cacheDir, key, commit) {
190
- return join(cacheDir, 'checkouts', key.replaceAll('/', '__'), commit);
191
- }
192
-
193
- /**
194
- * A checkout that IS the frozen commit: HEAD is the pin and the tree is clean. `trackedOnly` ignores
195
- * untracked files (the candidate, whose tracked files are what is read); a cached checkout is held to all.
196
- */
197
- function assertCheckoutAt({ dir, commit, what, trackedOnly = false }) {
198
- if (!existsSync(join(dir, '.git'))) {
199
- throw new CandidateEditionError(`${what}: ${dir} is not a git checkout`);
200
- }
201
- const head = localGit(dir, ['rev-parse', 'HEAD']);
202
- if (commit !== undefined && head !== commit) {
203
- throw new CandidateEditionError(`${what}: ${dir} is at ${head}, not the pinned ${commit}`);
204
- }
205
- const dirty = localGit(dir, ['status', '--porcelain', ...(trackedOnly ? ['--untracked-files=no'] : [])]);
206
- if (dirty.length > 0) {
207
- throw new CandidateEditionError(`${what}: ${dir} is not clean, so it is not the commit ${head}:\n${dirty}`);
208
- }
209
- return head;
210
- }
211
-
212
- /** The candidate: a pin key of the edition's develop graph, and a clean checkout whose HEAD is the candidate commit. */
213
- function readCandidate(candidate, pins) {
214
- const repo = candidate?.repo;
215
- if (typeof repo !== 'string' || !(repo in pins)) {
216
- throw new CandidateEditionError(`candidate repository ${JSON.stringify(repo)} is not pinned by the edition; it pins ${Object.keys(pins).sort().join(', ')}`);
217
- }
218
- if (snapshotPinNamespace(repo) !== SnapshotPinNamespace.Graph) {
219
- throw new CandidateEditionError(
220
- `candidate repository "${repo}" is not a develop-graph repository (repos/<x> or submodules/<x>); the data root, the kernel and the chart tree are not candidates`,
221
- );
222
- }
223
- const checkoutDir = absoluteDir('candidate.checkoutDir', candidate.checkoutDir);
224
- const commit = assertCheckoutAt({ dir: checkoutDir, what: `candidate ${repo}`, trackedOnly: true });
225
- return { repo, checkoutDir, commit };
226
- }
227
-
228
- /**
229
- * Run `fn` with the edition workspace configured on `roots`, and put the previous configuration back after it.
230
- * The edition workspace is PROCESS-GLOBAL configuration (edition-workspace.mjs): this swaps it for the duration
231
- * of `fn`, async `fn` included. Two calls in flight in one process (two concurrent re-seals, fetches or
232
- * verifications) would read each other's roots, so it is not safe to run two at once in one process.
233
- */
234
- function withWorkspace(roots, fn) {
235
- const previous = configuredWorkspace();
236
- configureEditionWorkspace(roots);
237
- resetEditionWorkspaceConfig();
238
- const restore = () => {
239
- configureEditionWorkspace(previous);
240
- resetEditionWorkspaceConfig();
241
- };
242
- let result;
243
- try {
244
- result = fn();
245
- } catch (error) {
246
- restore();
247
- throw error;
248
- }
249
- if (result instanceof Promise) {return result.finally(restore);}
250
- restore();
251
- return result;
252
- }
253
-
254
- /**
255
- * The checkouts of the pinned edition with the candidate in place: a sources root under `scratch` whose
256
- * `<pin key>` entries link the cached checkouts (and the candidate's own), each held to its pin first.
257
- * Returns the workspace roots the develop resolve reads.
258
- */
259
- function stageWorkspace({ cacheDir, dataKey, pins, candidate, scratch }) {
260
- const dataDir = cachedDataRoot(cacheDir, dataKey, pins);
261
- return withWorkspace({ [WorkspaceRoot.Data]: dataDir }, () => {
262
- if (EDITIONS_ROOT_PIN_KEY in pins) {
263
- throw new CandidateEditionError(`the edition pins "${EDITIONS_ROOT_PIN_KEY}": an editions root apart from the data root is not supported by the candidate re-seal`);
264
- }
265
- const kernelKey = kernelPinKey();
266
- const kernelRepo = cachedCheckoutDir(cacheDir, kernelKey, pins[kernelKey]);
267
- const sources = join(scratch, 'sources');
268
- mkdirSync(sources, { recursive: true });
269
- const graph = Object.keys(pins).filter((key) => snapshotPinNamespace(key) === SnapshotPinNamespace.Graph);
270
- for (const key of graph) {
271
- const target = key === candidate.repo ? candidate.checkoutDir : cachedCheckoutDir(cacheDir, key, pins[key]);
272
- if (key !== candidate.repo) {
273
- if (!existsSync(target)) {
274
- throw new CandidateEditionError(`no cached checkout of ${key} at ${pins[key]} under ${cacheDir}: run fetchPinnedEditionCheckouts first`);
275
- }
276
- assertCheckoutAt({ dir: target, commit: pins[key], what: `cached ${key}` });
277
- }
278
- mkdirSync(dirname(join(sources, key)), { recursive: true });
279
- symlinkSync(target, join(sources, key));
280
- }
281
- return {
282
- roots: {
283
- [WorkspaceRoot.Data]: dataDir,
284
- [WorkspaceRoot.Editions]: dataDir,
285
- [WorkspaceRoot.Sources]: sources,
286
- [WorkspaceRoot.Kernel]: join(kernelRepo, ...KERNEL_PACKAGE_REPO_PATH.split('/')),
287
- [WorkspaceRoot.Cache]: join(cacheDir, 'work'),
288
- },
289
- kernelRepo,
290
- kernelKey,
291
- };
292
- });
293
- }
294
-
295
- /**
296
- * The cached data root at the edition's data pin, held to it: its HEAD is the pin, it is clean, and its own
297
- * pinRoles name `dataKey` as the data role (so a handle cannot point the resolve at another repository).
298
- */
299
- function cachedDataRoot(cacheDir, dataKey, pins) {
300
- if (typeof dataKey !== 'string' || pins[dataKey] === undefined) {
301
- throw new CandidateEditionError(`the edition does not pin a data root ${JSON.stringify(dataKey)}; run fetchPinnedEditionCheckouts first`);
302
- }
303
- const dir = cachedCheckoutDir(cacheDir, dataKey, pins[dataKey]);
304
- if (!existsSync(dir)) {
305
- throw new CandidateEditionError(`no cached data root ${dataKey} at ${pins[dataKey]} under ${cacheDir}: run fetchPinnedEditionCheckouts first`);
306
- }
307
- assertCheckoutAt({ dir, commit: pins[dataKey], what: `cached ${dataKey}` });
308
- const declared = withWorkspace({ [WorkspaceRoot.Data]: dir }, () => dataPinKey());
309
- if (declared !== dataKey) {
310
- throw new CandidateEditionError(`the cached data root ${dir} declares its data role as "${declared}", not "${dataKey}"`);
311
- }
312
- return dir;
313
- }
314
-
315
- /**
316
- * Build `dir` in a staging directory beside it and rename it into place only once `build(staging)` succeeded,
317
- * so a cached checkout that exists is a complete one: a failed or interrupted run leaves only a staging
318
- * directory, which the next run discards.
319
- */
320
- function stageThenRename(dir, build) {
321
- const staging = `${dir}.partial-${process.pid}`;
322
- rmSync(staging, { recursive: true, force: true });
323
- mkdirSync(dirname(staging), { recursive: true });
324
- try {
325
- build(staging);
326
- } catch (error) {
327
- rmSync(staging, { recursive: true, force: true });
328
- throw error;
329
- }
330
- renameSync(staging, dir);
331
- }
332
-
333
- /**
334
- * A clone at `commit` under the cache, or the cached one held to it. Network only when absent. `prepare`
335
- * (the kernel build) runs in the staging directory, before the rename, so a cached clone is never half-prepared.
336
- */
337
- function ensureCachedClone({ cacheDir, key, commit, url, workspace, env, runGit, prepare }) {
338
- const dir = cachedCheckoutDir(cacheDir, key, commit);
339
- if (existsSync(dir)) {
340
- assertCheckoutAt({ dir, commit, what: `cached ${key}` });
341
- return { dir, fetched: false };
342
- }
343
- stageThenRename(dir, (staging) => {
344
- withSourceGitEnv({ name: key, url }, { workspace, env }, (gitEnv) => {
345
- shallowCheckout({ runGit, gitEnv, target: staging, url, commit });
346
- });
347
- assertCheckoutAt({ dir: staging, commit, what: `fetched ${key}` });
348
- if (prepare !== undefined) {
349
- prepare(staging);
350
- assertCheckoutAt({ dir: staging, commit, what: `prepared ${key}` });
351
- }
352
- });
353
- return { dir, fetched: true };
354
- }
355
-
356
- /** Fetch `commits` into a cached checkout, only the ones it does not hold. */
357
- function ensureCommits({ dir, key, url, commits, workspace, env, runGit }) {
358
- const absent = commits.filter((commit) => !hasCommit(dir, commit));
359
- if (absent.length === 0) {return 0;}
360
- withSourceGitEnv({ name: key, url }, { workspace, env }, (gitEnv) => {
361
- for (const commit of absent) {shallowFetch({ runGit, gitEnv, target: dir, commit });}
362
- });
363
- return absent.length;
364
- }
365
-
366
- /**
367
- * THE ONE NETWORK STEP. Every checkout the develop resolve of the pinned edition reads, at the edition's
368
- * pins, cached under `cacheDir/checkouts/<pin key>/<commit>`:
369
- *
370
- * - the data root, cloned LOCALLY from `dataRootDir` (the caller's own checkout of it at its pin: the data
371
- * root is what declares every other repository and the credential that reads them);
372
- * - the kernel, at its pin, built the way develop-edition.yaml builds it (`buildKernel`);
373
- * - every develop-graph repository but the candidate, plus the extra commits the resolve reads in them
374
- * (platform-service and cross-repo vendored commits, computed with the candidate in place);
375
- * - every declared `sources[]` entry at its pin (external-source-walk.mjs's own cache).
376
- *
377
- * A warm cache spawns no network git command and no build. Every cached checkout is held to its pin and
378
- * must be clean, or the fetch refuses. Credentials follow the data root's `sourceRepositoryUrlPrefix` rule
379
- * (git-source-auth.mjs) and are read only from `env`, which the caller passes. Local git commands (the data-root
380
- * clone, every HEAD and status check) run with PATH and HOME alone; `buildKernel`'s default inherits the process
381
- * environment, as `corepack pnpm` needs it.
382
- *
383
- * @param {object} request
384
- * @param {string} request.tripleDir the pinned develop edition: xema-edition.json and its lock files
385
- * @param {string} request.cacheDir absolute, writable; reused across runs
386
- * @param {string} request.dataRootDir a checkout of the data root at the edition's data pin
387
- * @param {{ repo: string, checkoutDir: string }} request.candidate the candidate repository's pin key and checkout
388
- * @param {Record<string, string>} [request.env] the environment credentials are read from (default: none)
389
- * @returns {Promise<{ cacheDir: string, dataKey: string, distributionId: string, fetched: string[] }>} the handle
390
- * `resealCandidateEdition` takes; every checkout it names is re-held to its pin when it is used, never trusted
391
- */
392
- export async function fetchPinnedEditionCheckouts({ tripleDir, cacheDir, dataRootDir, candidate, env = {}, runGit = defaultRunGit, buildKernel = defaultBuildKernel }) {
393
- const edition = readPinnedEdition(tripleDir);
394
- const cache = absoluteDir('cacheDir', cacheDir);
395
- mkdirSync(join(cache, 'work'), { recursive: true });
396
- const dataSource = absoluteDir('dataRootDir', dataRootDir);
397
- const fetched = [];
398
- // The data root first: it names the pin roles, the graph and the credential.
399
- const dataKey = withWorkspace({ [WorkspaceRoot.Data]: dataSource }, () => dataPinKey());
400
- const dataCommit = edition.pins[dataKey];
401
- if (dataCommit === undefined) {throw new CandidateEditionError(`the edition does not pin its data root "${dataKey}"`);}
402
- const dataDir = cachedCheckoutDir(cache, dataKey, dataCommit);
403
- if (existsSync(dataDir)) {
404
- assertCheckoutAt({ dir: dataDir, commit: dataCommit, what: `cached ${dataKey}` });
405
- } else {
406
- assertCheckoutAt({ dir: dataSource, commit: dataCommit, what: `dataRootDir ${dataKey}` });
407
- stageThenRename(dataDir, (staging) => {
408
- runLocalGit(['clone', '--quiet', '--no-checkout', dataSource, staging]);
409
- localGit(staging, ['-c', 'advice.detachedHead=false', 'checkout', '--quiet', '--detach', dataCommit]);
410
- assertCheckoutAt({ dir: staging, commit: dataCommit, what: `cloned ${dataKey}` });
411
- });
412
- fetched.push(dataKey);
413
- }
414
- const workspace = withWorkspace({ [WorkspaceRoot.Data]: dataDir }, () => {
415
- readCandidate(candidate, edition.pins);
416
- return editionWorkspaceConfig();
417
- });
418
- const committedIndex = readStrictJsonFile(join(dataDir, 'runtime-image-source-index.json'));
419
- // The kernel, at its pin, from the repository its contract authority names, built once.
420
- const kernelKey = withWorkspace({ [WorkspaceRoot.Data]: dataDir }, () => kernelPinKey());
421
- const kernelUrl = committedIndex?.contractAuthority?.repositoryUrl;
422
- if (typeof kernelUrl !== 'string') {throw new CandidateEditionError(`${dataKey}: runtime-image-source-index.json names no contractAuthority.repositoryUrl`);}
423
- const builtKernel = (repoDir) => join(repoDir, ...KERNEL_PACKAGE_REPO_PATH.split('/'), 'dist', 'distribution', 'index.js');
424
- const kernel = ensureCachedClone({
425
- cacheDir: cache, key: kernelKey, commit: edition.pins[kernelKey], url: kernelUrl, workspace, env, runGit,
426
- prepare: (staging) => {
427
- buildKernel(staging);
428
- if (!existsSync(builtKernel(staging))) {throw new CandidateEditionError(`the ${kernelKey} build produced no ${KERNEL_PACKAGE_REPO_PATH}/dist`);}
429
- },
430
- });
431
- // A cached kernel exists only once its build succeeded (built in staging, renamed after); one without its
432
- // build output is not this code's, and is refused rather than rebuilt in place.
433
- if (!existsSync(builtKernel(kernel.dir))) {
434
- throw new CandidateEditionError(`the cached ${kernelKey} at ${kernel.dir} holds no build output; remove it and fetch again`);
435
- }
436
- if (kernel.fetched) {fetched.push(kernelKey);}
437
- // The graph, with the candidate in place: the plan is the develop graph at the candidate's pins.
438
- const read = readCandidate(candidate, edition.pins);
439
- const candidatePins = { ...edition.pins, [read.repo]: read.commit };
440
- const index = withWorkspace({ [WorkspaceRoot.Data]: dataDir }, () => applyPinSource(committedIndex, snapshotPinSource(candidatePins)));
441
- const plan = sourceCheckoutPlan(index, workspace);
442
- for (const entry of plan) {
443
- if (entry.repo === read.repo) {continue;}
444
- if (ensureCachedClone({ cacheDir: cache, key: entry.repo, commit: entry.sourceCommit, url: entry.repositoryUrl, workspace, env, runGit }).fetched) {
445
- fetched.push(entry.repo);
446
- }
447
- }
448
- const scratch = mkdtempSync(join(tmpdir(), 'xema-candidate-fetch-'));
449
- try {
450
- const staged = stageWorkspace({ cacheDir: cache, dataKey, pins: candidatePins, candidate: read, scratch });
451
- await withWorkspace(staged.roots, async () => {
452
- const extra = new Map();
453
- const add = (map) => {
454
- for (const [repo, commits] of map) {extra.set(repo, [...new Set([...(extra.get(repo) ?? []), ...[commits].flat()])]);}
455
- };
456
- add(sourceAxisExtraCommits(plan));
457
- add(platformServiceExtraCommits(plan, readStrictJsonFile(platformServiceIndexPath())));
458
- const crossRepoOnly = crossRepoVendoredCommits(plan, index, staged.roots[WorkspaceRoot.Sources]);
459
- add(crossRepoOnly);
460
- for (const entry of plan) {
461
- const commits = extra.get(entry.repo) ?? [];
462
- if (commits.length === 0) {continue;}
463
- if (entry.repo === read.repo) {
464
- // The snapshot resolve rebuilds the platform service index AT the candidate commit, so a platform
465
- // service's committed commit is never read in the candidate; a cross-repo vendored commit is.
466
- const absent = (crossRepoOnly.get(entry.repo) ?? []).filter((commit) => !hasCommit(read.checkoutDir, commit));
467
- if (absent.length > 0) {
468
- throw new CandidateEditionError(`candidate ${read.repo}: the resolve also reads ${absent.join(', ')}, which its checkout does not hold; fetch them into it`);
469
- }
470
- continue;
471
- }
472
- const dir = cachedCheckoutDir(cache, entry.repo, entry.sourceCommit);
473
- if (ensureCommits({ dir, key: entry.repo, url: entry.repositoryUrl, commits, workspace, env, runGit }) > 0) {fetched.push(`${entry.repo} (extra commits)`);}
474
- }
475
- // Every declared source at its pin, in the cache external-source-walk reads (an exact commit is never resolved remotely).
476
- const schemas = await loadKernelDistributionSchemas();
477
- const pinSource = snapshotPinSource(candidatePins);
478
- const composed = composeEdition(schemas.parseDistribution, edition.id, pinSource);
479
- for (const source of composed.declaredSources.filter((declared) => declared.kind !== 'oci')) {
480
- materializeGitSource({ source: pinnedSource(source, pinSource), cacheRoot: externalSourceCacheDir(), env, workspace });
481
- }
482
- });
483
- } finally {
484
- rmSync(scratch, { recursive: true, force: true });
485
- }
486
- return { cacheDir: cache, dataKey, distributionId: edition.id, fetched };
487
- }
488
-
489
- /**
490
- * The candidate content record, held to the distribution lock bytes it was written beside AND to the
491
- * candidate it records: exactly one entry, `candidate.repo` at `candidate.commit` (the candidate checkout's
492
- * HEAD), for the edition `distributionId`. A record for another commit (one in the candidate's history
493
- * included), another or a second repository, or another edition is refused.
494
- */
495
- export function parseCandidateContentRecord(value, { distributionLockBytes, distributionId, candidate }) {
496
- const keys = ['schema', 'distributionId', 'distributionLockSha256', 'contentCommits'];
497
- if (value === null || typeof value !== 'object' || Array.isArray(value) || Object.keys(value).sort().join() !== [...keys].sort().join()) {
498
- throw new CandidateEditionError(`${CANDIDATE_CONTENT_FILE} must be exactly {${keys.join(', ')}}`);
499
- }
500
- if (value.schema !== CANDIDATE_CONTENT_SCHEMA) {
501
- throw new CandidateEditionError(`${CANDIDATE_CONTENT_FILE}: schema is ${JSON.stringify(value.schema)}, expected ${CANDIDATE_CONTENT_SCHEMA}`);
502
- }
503
- const digest = sha256Hex(distributionLockBytes);
504
- if (value.distributionLockSha256 !== digest) {
505
- throw new CandidateEditionError(
506
- `${CANDIDATE_CONTENT_FILE} is bound to the distribution lock ${value.distributionLockSha256}, but the lock beside it hashes to ${digest}`,
507
- );
508
- }
509
- if (value.distributionId !== distributionId) {
510
- throw new CandidateEditionError(
511
- `${CANDIDATE_CONTENT_FILE} records the edition ${JSON.stringify(value.distributionId)}, not ${JSON.stringify(distributionId)}`,
512
- );
513
- }
514
- const commits = value.contentCommits;
515
- const entries = commits !== null && typeof commits === 'object' && !Array.isArray(commits) ? Object.entries(commits) : [];
516
- if (entries.length !== 1) {
517
- throw new CandidateEditionError(
518
- `${CANDIDATE_CONTENT_FILE}: contentCommits must hold exactly one entry, the candidate ${candidate.repo}; it holds ${entries.length}`,
519
- );
520
- }
521
- const [[repo, commit]] = entries;
522
- if (repo !== candidate.repo) {
523
- throw new CandidateEditionError(`${CANDIDATE_CONTENT_FILE} records ${JSON.stringify(repo)}, not the candidate ${candidate.repo}`);
524
- }
525
- if (commit !== candidate.commit) {
526
- throw new CandidateEditionError(
527
- `${CANDIDATE_CONTENT_FILE} records ${repo} at ${JSON.stringify(commit)}, but the candidate checkout is at ${candidate.commit}`,
528
- );
529
- }
530
- return new Map(entries);
531
- }
532
-
533
- /**
534
- * OFFLINE. Re-seal the pinned develop edition with `candidate.repo` at its checkout's HEAD:
535
- *
536
- * distribution lock the develop resolve's own steps (buildSnapshotInputs, prepareDistributionWithIndex,
537
- * the bundle-signer, plane-invariant and operation admissions), sealed by the kernel's
538
- * sealDistributionLock through biome-content.mjs `sealLock`, with the candidate content
539
- * record as `contentCommits`;
540
- * authorization lock the develop resolve's composeAuthorizationBase (`fga model test`, XEMA_FGA_CLI);
541
- * images lock the pinned edition's bytes, unchanged;
542
- * resolved deployment the kernel's resolveUnsplitDeployment over exactly the three lock bytes written.
543
- *
544
- * Not run, because each reads a registry: the images resolve and seal, the adapter-bundle check and the chart
545
- * set. Every refusal throws; nothing is written unless everything passed. `outDir` must not exist yet.
546
- *
547
- * @param {object} request
548
- * @param {string} request.tripleDir the pinned develop edition (as for fetchPinnedEditionCheckouts)
549
- * @param {{ cacheDir: string, dataKey: string }} request.checkouts what fetchPinnedEditionCheckouts returned
550
- * @param {{ repo: string, checkoutDir: string }} request.candidate
551
- * @param {string} request.outDir absolute, absent
552
- * @param {{ id: string, runtimeNamespace: string }} request.deployment the deployment the resolved deployment names
553
- * @returns {Promise<{ outDir: string, distributionId: string, candidateCommit: string, files: readonly string[] }>}
554
- */
555
- export async function resealCandidateEdition({ tripleDir, checkouts, candidate, outDir, deployment }) {
556
- const edition = readPinnedEdition(tripleDir);
557
- const cacheDir = absoluteDir('checkouts.cacheDir', checkouts?.cacheDir);
558
- const out = absoluteDir('outDir', outDir);
559
- if (existsSync(out)) {throw new CandidateEditionError(`outDir ${out} already exists; a candidate triple is written to a fresh directory`);}
560
- if (typeof deployment?.id !== 'string' || typeof deployment?.runtimeNamespace !== 'string') {
561
- throw new CandidateEditionError('deployment must be { id, runtimeNamespace }: the resolved deployment names both');
562
- }
563
- const scratch = mkdtempSync(join(tmpdir(), 'xema-candidate-reseal-'));
564
- try {
565
- const dataDir = cachedDataRoot(cacheDir, checkouts.dataKey, edition.pins);
566
- const read = withWorkspace({ [WorkspaceRoot.Data]: dataDir }, () => readCandidate(candidate, edition.pins));
567
- const pins = { ...edition.pins, [read.repo]: read.commit };
568
- const staged = stageWorkspace({ cacheDir, dataKey: checkouts.dataKey, pins, candidate: read, scratch });
569
- assertCheckoutAt({ dir: staged.kernelRepo, commit: pins[staged.kernelKey], what: `cached ${staged.kernelKey}` });
570
- const written = await withWorkspace(staged.roots, () => resealStaged({ edition, pins, read, deployment }));
571
- mkdirSync(out, { recursive: true });
572
- for (const file of CANDIDATE_FILES) {writeFileSync(join(out, file), written[file]);}
573
- return { outDir: out, distributionId: edition.id, candidateCommit: read.commit, files: CANDIDATE_FILES };
574
- } finally {
575
- rmSync(scratch, { recursive: true, force: true });
576
- }
577
-
578
- }
579
-
580
- /** The re-seal proper, inside the staged workspace: every step of the develop resolve that reads no registry. */
581
- async function resealStaged({ edition: pinned, pins, read, deployment }) {
582
- const id = pinned.id;
583
- const schemas = await loadKernelDistributionSchemas();
584
- const inputs = await buildSnapshotInputs({ id, pins, schemas });
585
- // A git-sourced biome's OCI bundle is carried from the pinned edition for the same source commit, never re-fetched.
586
- const pinnedLock = JSON.parse(pinned.bytes[EditionLockFile.Distribution].toString('utf8'));
587
- const { lock, index } = await prepareDistributionWithIndex(id, { inputs: { ...inputs, developGitBundles: carriedDevelopGitBundles(pinnedLock) } });
588
- assertLockBundleSigners({ lock, schemas, gitSourcedBundle: GitSourcedBundle.DevelopVerified });
589
- assertDevelopEditionInvariants({ id, lock, biomeIndex: inputs.biomeIndex, schemas });
590
- admitDistributionLock(schemas, lock);
591
- const authorizationLock = await composeAuthorizationBase(id, lock, index);
592
- if (authorizationLock === null) {
593
- throw new CandidateEditionError(`${id}: the pinned kernel ships no authorization composer, but the pinned edition carries an authorization lock`);
594
- }
595
- const imagesLockBytes = pinned.bytes[EditionLockFile.Images];
596
- const imageLock = schemas.parseImageLock(JSON.parse(imagesLockBytes.toString('utf8')));
597
- const contentCommits = new Map([[read.repo, read.commit]]);
598
- const authority = createPinnedSourceAuthority({ pins: inputs.runtimeImageSourceIndex.repositoryPins });
599
- const sealed = await sealLock({
600
- schemas,
601
- unsealed: lock,
602
- imageLock,
603
- locate: sourceTreeLocator(externalSourceTrees(lock)),
604
- vendoredCommit: (repo) => authority.vendoredSourceCommitForRepository(repo),
605
- contentCommits,
606
- gitSourcedBundle: GitSourcedBundle.DevelopVerified,
607
- });
608
- const lockBytes = Buffer.from(serializeJson(sealed), 'utf8');
609
- const authorizationLockBytes = Buffer.from(serializeJson(authorizationLock), 'utf8');
610
- const resolvedBytes = await resolvedDeploymentBytes({ id, deployment, lockBytes, imagesLockBytes, authorizationLockBytes });
611
- const record = {
612
- schema: CANDIDATE_CONTENT_SCHEMA,
613
- distributionId: id,
614
- distributionLockSha256: sha256Hex(lockBytes),
615
- contentCommits: Object.fromEntries(contentCommits),
616
- };
617
- return {
618
- [EditionLockFile.Distribution]: lockBytes,
619
- [EditionLockFile.Images]: imagesLockBytes,
620
- [EditionLockFile.Authorization]: authorizationLockBytes,
621
- [RESOLVED_DEPLOYMENT_FILE]: resolvedBytes,
622
- [CANDIDATE_CONTENT_FILE]: Buffer.from(serializeJson(record), 'utf8'),
623
- };
624
- }
625
-
626
- /**
627
- * The kernel's unsplit resolved deployment of the three lock bytes. It is written with the library's `serializeJson`:
628
- * the kernel's canonical-JSON module is outside the edition protocol's entry modules, and no verifier hashes this file
629
- * (verifyResolvedDeployment reads its fields and checks the lock digests it names).
630
- */
631
- async function resolvedDeploymentBytes({ id, deployment, lockBytes, imagesLockBytes, authorizationLockBytes }) {
632
- const distribution = await import(`file://${kernelDistPath('distribution', 'index.js')}`);
633
- if (typeof distribution.resolveUnsplitDeployment !== 'function') {
634
- throw new CandidateEditionError(`${id}: the pinned kernel exports no resolveUnsplitDeployment; it cannot resolve a deployment`);
635
- }
636
- const { version } = readStrictJsonFile(join(kernelPackageDir(), 'package.json'));
637
- const lockSha256 = sha256Hex(lockBytes);
638
- const resolved = await distribution.resolveUnsplitDeployment({
639
- lockBytes,
640
- imagesLockBytes,
641
- authorizationLockBytes,
642
- deployment: deployment.id,
643
- runtimeNamespace: deployment.runtimeNamespace,
644
- edition: {
645
- version: CANDIDATE_EDITION_VERSION,
646
- registry: CANDIDATE_EDITION_REGISTRY,
647
- ref: `${CANDIDATE_EDITION_REGISTRY}/candidate-${id}@sha256:${lockSha256}`,
648
- },
649
- resolverVersion: version,
650
- });
651
- return Buffer.from(serializeJson(resolved), 'utf8');
652
- }
653
-
654
- /**
655
- * OFFLINE. Recompute every biomeContentHash of a candidate triple from the cached checkouts and the candidate,
656
- * reading the candidate content record as `contentCommits` when the triple carries one, and refuse a mismatch
657
- * (biome-content.mjs `verifyBiomeContentHashes`). A triple without a record is verified as any lock is.
658
- */
659
- export async function verifyCandidateContentHashes({ tripleDir, checkouts, candidate, candidateDir }) {
660
- const edition = readPinnedEdition(tripleDir);
661
- const cacheDir = absoluteDir('checkouts.cacheDir', checkouts?.cacheDir);
662
- const dir = absoluteDir('candidateDir', candidateDir);
663
- const lockBytes = readFileSync(join(dir, EditionLockFile.Distribution));
664
- const recordPath = join(dir, CANDIDATE_CONTENT_FILE);
665
- const dataDir = cachedDataRoot(cacheDir, checkouts.dataKey, edition.pins);
666
- const read = withWorkspace({ [WorkspaceRoot.Data]: dataDir }, () => readCandidate(candidate, edition.pins));
667
- const contentCommits = existsSync(recordPath)
668
- ? parseCandidateContentRecord(readStrictJsonFile(recordPath), {
669
- distributionLockBytes: lockBytes,
670
- distributionId: edition.id,
671
- candidate: { repo: read.repo, commit: read.commit },
672
- })
673
- : undefined;
674
- const scratch = mkdtempSync(join(tmpdir(), 'xema-candidate-verify-'));
675
- try {
676
- const pins = { ...edition.pins, [read.repo]: read.commit };
677
- const staged = stageWorkspace({ cacheDir, dataKey: checkouts.dataKey, pins, candidate: read, scratch });
678
- return await withWorkspace(staged.roots, async () => {
679
- const schemas = await loadKernelDistributionSchemas();
680
- const lock = schemas.parseDistributionLock(JSON.parse(lockBytes.toString('utf8')));
681
- const imageLock = schemas.parseImageLock(JSON.parse(readFileSync(join(dir, EditionLockFile.Images), 'utf8')));
682
- const index = applyPinSource(readStrictJsonFile(runtimeImageSourceIndexPath()), snapshotPinSource(pins));
683
- const authority = createPinnedSourceAuthority({ pins: index.repositoryPins });
684
- return verifyBiomeContentHashes({
685
- schemas,
686
- lock,
687
- imageLock,
688
- locate: sourceTreeLocator(externalSourceTrees(lock)),
689
- vendoredCommit: (repo) => authority.vendoredSourceCommitForRepository(repo),
690
- ...(contentCommits === undefined ? {} : { contentCommits }),
691
- gitSourcedBundle: GitSourcedBundle.DevelopVerified,
692
- });
693
- });
694
- } finally {
695
- rmSync(scratch, { recursive: true, force: true });
696
- }
697
- }