@xemahq/xema 0.59.0 → 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 -1414
  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 -2294
  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,217 +0,0 @@
1
- // develop-coverage-readers — the READ-ONLY registry, attestation and signature readers behind
2
- // `xema edition develop coverage`. Nothing here signs, attests, pushes or writes a lock.
3
- //
4
- // Every reader takes the develop coordinate of ONE subject and returns plain data; the verdict is
5
- // decided elsewhere (develop-coverage-verdict.mjs), so the decision is tested without a registry.
6
-
7
- import { execFile } from 'node:child_process';
8
- import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
9
- import { tmpdir } from 'node:os';
10
- import { join } from 'node:path';
11
- import { promisify } from 'node:util';
12
-
13
- import { AttestationStatus, DEVELOP_EVIDENCE_CHANNEL } from './develop-coverage-verdict.mjs';
14
- import { COSIGN_ENV, policyCandidates, sha256Digest, validatePinnedTrustedRoot, verifySigstoreEvidenceDescriptor } from './image-evidence.mjs';
15
- import { resolveImageSourceEvidenceReferrer, writeInvalidReferrerReport } from './oci-image-source-evidence.mjs';
16
- import { BUNDLE_MEDIA_TYPE } from './produce-image-source-evidence.mjs';
17
- import { loadRegistryCredentialDeclarations, resolveRegistryCredential, splitImageRef } from './registry-credentials.mjs';
18
- import { isNotPublishedYet } from './seal-image-digests.mjs';
19
- import { assertPreparedExecutable } from './trusted-executable.mjs';
20
- import { registryClientsFor } from './verify-image-platforms.mjs';
21
-
22
- const execFileAsync = promisify(execFile);
23
- // One external call to cosign; it reads a registry. A run that exceeds it fails naming the subject, never a verdict.
24
- const COSIGN_CALL_TIMEOUT_MS = 60_000;
25
- const COSIGN_MAX_OUTPUT_BYTES = 8 * 1024 * 1024;
26
- /** cosign's exact refusal when a digest carries no signature at all. */
27
- const NO_SIGNATURES_MESSAGE = 'no signatures found';
28
- const ANY = '.*';
29
-
30
- /**
31
- * The signatures cosign verified, as data. `cosign verify --output json` prints one object per signature whose
32
- * `optional` holds the signed annotations next to the certificate's claims.
33
- *
34
- * @param {string} stdout
35
- * @param {string} digest the digest that was verified; a signature over another digest is refused
36
- * @returns {{ signer: object, annotations: Record<string, string> }[]}
37
- */
38
- export function parseCosignVerifyOutput(stdout, digest) {
39
- const payloads = JSON.parse(stdout);
40
- if (!Array.isArray(payloads)) {throw new Error('cosign verify output is not a JSON array');}
41
- return payloads.map((payload) => {
42
- if (payload?.critical?.image?.['docker-manifest-digest'] !== digest) {
43
- throw new Error(`cosign verified a signature over ${String(payload?.critical?.image?.['docker-manifest-digest'])}, not ${digest}`);
44
- }
45
- const optional = payload.optional ?? {};
46
- const { Subject, Issuer, githubWorkflowTrigger, githubWorkflowSha, githubWorkflowRepository, githubWorkflowRef, ...rest } = optional;
47
- const annotations = Object.fromEntries(Object.entries(rest).filter(([, value]) => typeof value === 'string'));
48
- return {
49
- signer: {
50
- certificateIdentity: Subject ?? '',
51
- issuer: Issuer ?? '',
52
- trigger: githubWorkflowTrigger ?? '',
53
- workflowSha: githubWorkflowSha ?? '',
54
- workflowRepository: githubWorkflowRepository ?? '',
55
- workflowRef: githubWorkflowRef ?? '',
56
- },
57
- annotations,
58
- };
59
- });
60
- }
61
-
62
- /** Run cosign once; resolves `{code, stdout, stderr}` for a cosign exit, throws when cosign could not run at all. */
63
- export function defaultRunCosign(cosignPath, args, env) {
64
- return execFileAsync(cosignPath, args, { env, timeout: COSIGN_CALL_TIMEOUT_MS, maxBuffer: COSIGN_MAX_OUTPUT_BYTES }).then(
65
- ({ stdout }) => ({ code: 0, stdout, stderr: '' }),
66
- (error) => {
67
- if (typeof error.code === 'number') {return { code: error.code, stdout: error.stdout ?? '', stderr: error.stderr ?? '' };}
68
- throw error;
69
- },
70
- );
71
- }
72
-
73
- /** The username and password of a resolved basic-auth registry credential. */
74
- export function basicAuthParts(credential) {
75
- const decoded = Buffer.from(credential.basicAuth, 'base64').toString('utf8');
76
- const colon = decoded.indexOf(':');
77
- return { username: decoded.slice(0, colon), password: decoded.slice(colon + 1) };
78
- }
79
-
80
- /**
81
- * @param {object} request
82
- * @param {object} request.policy the pinned trust policy (kernel-parsed)
83
- * @param {string} request.policyRoot the directory the policy's trusted root is read from (the data root)
84
- * @param {object} request.trustedCosign the digest-pinned cosign handle (prepareTrustedCosignBinary)
85
- * @param {object} request.schemas kernel distribution schemas
86
- * @param {object} request.expectedContractAuthority the kernel contract authority the data root pins
87
- * @param {string} request.dataRoot declares how each registry is read
88
- * @param {object} request.env environment the registry credentials are named in
89
- * @param {Function} [request.runCosign] (path, args, env) => { code, stdout, stderr }; replaced by tests
90
- * @param {Function} [request.fetchImpl] @param {Function} [request.run] oras runner, replaced by tests
91
- * @param {Function} [request.clientFor] (authority) => registry client, replaced by tests
92
- */
93
- export function createCoverageReaders({ policy, policyRoot, trustedCosign, schemas, expectedContractAuthority, dataRoot, env, runCosign = defaultRunCosign, fetchImpl, run, clientFor: injectedClientFor }) {
94
- const cosignPath = assertPreparedExecutable(trustedCosign, 'cosign');
95
- const declarations = injectedClientFor === undefined ? loadRegistryCredentialDeclarations(dataRoot) : null;
96
- const scratch = mkdtempSync(join(tmpdir(), 'xema-coverage-'));
97
- const trustedRootPath = join(scratch, 'trusted-root.json');
98
- writeFileSync(trustedRootPath, validatePinnedTrustedRoot(policyRoot, policy).bytes, { flag: 'wx', mode: 0o600 });
99
- const clients = new Map();
100
- const credentials = new Map();
101
-
102
- function clientFor(subject) {
103
- const { authority } = splitImageRef(subject.imageRef);
104
- if (injectedClientFor !== undefined) {return injectedClientFor(authority);}
105
- if (!clients.has(authority)) {
106
- const made = registryClientsFor([subject], { declarations, env, fetchImpl, run });
107
- clients.set(authority, made.get(authority));
108
- }
109
- return clients.get(authority);
110
- }
111
-
112
- // cosign is handed the SAME declared credential oras uses, through its environment (never argv), and only after
113
- // the oras client of that authority has made its first call: that call is the token-realm check.
114
- function cosignRegistryEnv(subject) {
115
- if (injectedClientFor !== undefined) {return {};}
116
- const { authority } = splitImageRef(subject.imageRef);
117
- if (!credentials.has(authority)) {
118
- const credential = resolveRegistryCredential({ authority, declarations, env });
119
- if (credential.access === 'anonymous') {
120
- credentials.set(authority, {});
121
- } else {
122
- const { username, password } = basicAuthParts(credential);
123
- credentials.set(authority, { COSIGN_REGISTRY_USERNAME: username, COSIGN_REGISTRY_PASSWORD: password });
124
- }
125
- }
126
- return credentials.get(authority);
127
- }
128
-
129
- async function developDigest(subject) {
130
- const { repository } = splitImageRef(subject.imageRef);
131
- try {
132
- const served = await clientFor(subject).getManifestByTag(repository, subject.contentHash);
133
- return served.digest;
134
- } catch (error) {
135
- if (isNotPublishedYet(error)) {return null;}
136
- throw error;
137
- }
138
- }
139
-
140
- async function readAttestation(subject, digest) {
141
- const rows = policyCandidates(policy, schemas.IMAGE_PRODUCER_PREDICATE_TYPE, DEVELOP_EVIDENCE_CHANNEL, subject.imageRef);
142
- const evidence = await resolveImageSourceEvidenceReferrer({
143
- client: clientFor(subject),
144
- imageRepository: subject.imageRef,
145
- subjectDigest: digest,
146
- schemas,
147
- expectedContractAuthority,
148
- onInvalidReferrer: writeInvalidReferrerReport,
149
- });
150
- if (evidence === null) {return { status: AttestationStatus.None };}
151
- if (rows.length === 0) {return { status: AttestationStatus.NoRow };}
152
- const bound = evidence.records.filter(({ statement }) => {
153
- const { artifact, source } = statement.predicate;
154
- return (
155
- artifact.manifestDigest === digest &&
156
- artifact.imageRepository === subject.imageRef &&
157
- source.kind === subject.kind &&
158
- source.id === subject.id &&
159
- source.sourceTreeHash === subject.contentHash
160
- );
161
- });
162
- if (bound.length === 0) {
163
- return { status: AttestationStatus.Refused, detail: `no record binds ${subject.kind}:${subject.id} at ${digest} for source tree ${subject.contentHash}` };
164
- }
165
- const failures = [];
166
- for (const record of bound) {
167
- const evidenceRoot = mkdtempSync(join(scratch, 'record-'));
168
- try {
169
- writeFileSync(join(evidenceRoot, 'statement.json'), record.statementBytes, { flag: 'wx', mode: 0o600 });
170
- writeFileSync(join(evidenceRoot, 'bundle.sigstore.json'), record.bundleBytes, { flag: 'wx', mode: 0o600 });
171
- const { identityPolicy } = verifySigstoreEvidenceDescriptor({
172
- evidenceRoot,
173
- descriptor: {
174
- statementPath: 'statement.json',
175
- statementDigest: sha256Digest(record.statementBytes),
176
- bundlePath: 'bundle.sigstore.json',
177
- bundleDigest: sha256Digest(record.bundleBytes),
178
- bundleMediaType: BUNDLE_MEDIA_TYPE,
179
- },
180
- policy,
181
- predicateType: schemas.IMAGE_PRODUCER_PREDICATE_TYPE,
182
- channel: DEVELOP_EVIDENCE_CHANNEL,
183
- imageRepository: subject.imageRef,
184
- parseStatement: schemas.parseImageProducerStatement,
185
- policyRoot,
186
- trustedCosign,
187
- });
188
- return { status: AttestationStatus.Verified, detail: identityPolicy.policyId };
189
- } catch (error) {
190
- failures.push(error instanceof Error ? error.message : String(error));
191
- } finally {
192
- rmSync(evidenceRoot, { recursive: true, force: true });
193
- }
194
- }
195
- return { status: AttestationStatus.Refused, detail: failures.join('; ') };
196
- }
197
-
198
- async function readSignatures(subject, digest) {
199
- const ref = `${subject.imageRef}@${digest}`;
200
- const args = ['verify', '--offline', '--trusted-root', trustedRootPath, '--certificate-identity-regexp', ANY, '--certificate-oidc-issuer-regexp', ANY, '--output', 'json', ref];
201
- const result = await runCosign(cosignPath, args, { ...COSIGN_ENV, ...cosignRegistryEnv(subject) });
202
- if (result.code !== 0) {
203
- if (result.stderr.includes(NO_SIGNATURES_MESSAGE)) {return [];}
204
- throw new Error(`cosign verify ${ref} failed (exit ${result.code}): ${result.stderr.trim()}`);
205
- }
206
- return parseCosignVerifyOutput(result.stdout, digest);
207
- }
208
-
209
- return {
210
- developDigest,
211
- readAttestation,
212
- readSignatures,
213
- dispose() {
214
- rmSync(scratch, { recursive: true, force: true });
215
- },
216
- };
217
- }
@@ -1,50 +0,0 @@
1
- // develop-coverage-run — the body of `xema edition develop coverage <id> --pins <file> --cosign <path> [--json]`.
2
- //
3
- // The snapshot half is `develop resolve`'s own (resolveDevelopSnapshot, then resolveImages), so F is computed
4
- // exactly as resolve computes it. What follows is read-only: registry digests, referrers and signatures.
5
-
6
- import { createCoverageReaders } from './develop-coverage-readers.mjs';
7
- import { collectCoverage, coverageExitCode, renderCoverageTable } from './develop-coverage.mjs';
8
- import { DEVELOP_EDITION_STEPS, resolveDevelopSnapshot } from './develop-edition-resolve.mjs';
9
- import { loadDeclaredPinnedPolicy } from './evidence-trust-policy.mjs';
10
- import { prepareTrustedCosignBinary } from './image-evidence.mjs';
11
- import { readPinnedContractAuthority } from './produce-image-source-evidence.mjs';
12
- import { loadThirdPartySourcePins } from './third-party-source-pins.mjs';
13
-
14
- const stderrProgress = (line) => process.stderr.write(`${line}\n`);
15
-
16
- /**
17
- * @returns {Promise<number>} the exit code: 0 covered, 1 not covered
18
- * @throws on an operational error (unreadable pins, registry, cosign): the entry exits 2
19
- */
20
- export async function runDevelopCoverage({
21
- id,
22
- pins,
23
- cosignBinary,
24
- json = false,
25
- env = process.env,
26
- steps = DEVELOP_EDITION_STEPS,
27
- loadPolicy = loadDeclaredPinnedPolicy,
28
- prepareCosign = prepareTrustedCosignBinary,
29
- readerOptions = {},
30
- progress = stderrProgress,
31
- write = (text) => process.stdout.write(text),
32
- }) {
33
- const { policy, dataRoot } = await loadPolicy();
34
- const trustedCosign = prepareCosign({ cosignBinary, policy });
35
- try {
36
- const { schemas, inputs, lock } = await resolveDevelopSnapshot({ id, pins, steps, phase: (name) => progress(`[coverage] ${name}`) });
37
- const { imageLock } = await steps.resolveImages(id, { inputs, lock });
38
- progress(`[coverage] image content hashes computed (${imageLock.subjects.length} subjects)`);
39
- const readers = createCoverageReaders({ policy, policyRoot: dataRoot, trustedCosign, schemas, expectedContractAuthority: readPinnedContractAuthority({ dataRoot, schemas }), dataRoot, env, ...readerOptions });
40
- try {
41
- const report = await collectCoverage({ distributionId: id, subjects: imageLock.subjects, policy, readers, thirdPartyPins: loadThirdPartySourcePins(dataRoot), progress });
42
- write(json ? `${JSON.stringify(report, null, 2)}\n` : renderCoverageTable(report));
43
- return coverageExitCode(report);
44
- } finally {
45
- readers.dispose();
46
- }
47
- } finally {
48
- trustedCosign.dispose();
49
- }
50
- }
@@ -1,153 +0,0 @@
1
- // develop-coverage-verdict — the closed verdict vocabulary of `xema edition develop coverage`
2
- // and the pure decision that turns what was READ about one develop image into a verdict.
3
- //
4
- // A verdict is `attested` (case A: a V4 attestation verifies under a pinned develop row) or
5
- // `signature-verified` (case B: the producer's signature over the digest, with the signed claim
6
- // annotations, verifies under a pinned develop row and every check passes). Everything else names
7
- // what is missing; nothing is skipped and nothing defaults.
8
-
9
- /** The closed set of verdicts. */
10
- export const CoverageVerdict = Object.freeze({
11
- Attested: 'attested',
12
- SignatureVerified: 'signature-verified',
13
- NoRow: 'no-row',
14
- Unsigned: 'unsigned',
15
- AnnotationsMissing: 'annotations-missing',
16
- AnnotationMismatch: 'annotation-mismatch',
17
- NotBuilt: 'not-built',
18
- });
19
-
20
- /** The verdicts that count toward `covered N/M` (the P2b gate). */
21
- export const COVERED_VERDICTS = Object.freeze([CoverageVerdict.Attested, CoverageVerdict.SignatureVerified]);
22
-
23
- /** The CLI-local predicate a case-B develop policy row carries (T72 design, section 2). */
24
- export const DEVELOP_IMAGE_SIGNATURE_PREDICATE = 'https://xema.dev/develop-image-signature/v1';
25
-
26
- /** The evidence channel the coverage verb reads rows of. */
27
- export const DEVELOP_EVIDENCE_CHANNEL = 'develop';
28
-
29
- /** The workflow triggers a develop signer's certificate may carry (T72 design, section 3). */
30
- export const DEVELOP_SIGNER_TRIGGERS = Object.freeze(['push', 'workflow_dispatch']);
31
-
32
- /** The one ref a develop signer's certificate may carry. */
33
- export const DEVELOP_SIGNER_REF = 'refs/heads/develop';
34
-
35
- /** The signed claim a develop lane puts on its signature (T72 design, section 3, case-B binding). */
36
- export const DevelopSignatureAnnotation = Object.freeze({
37
- ContentHash: 'dev.xema.content-hash',
38
- Service: 'dev.xema.service',
39
- SourceCommit: 'dev.xema.source.commit',
40
- });
41
-
42
- /** What reading a V4 attestation of one digest concluded. */
43
- export const AttestationStatus = Object.freeze({
44
- /** No evidence referrer is attached to the digest. */
45
- None: 'none',
46
- /** A referrer exists, but the pinned policy has no develop producer row for this repository. */
47
- NoRow: 'no-row',
48
- /** A row exists and the record does not verify or does not bind this subject. */
49
- Refused: 'refused',
50
- /** A record verifies under a pinned develop row and binds this subject. */
51
- Verified: 'verified',
52
- });
53
-
54
- // Worst to best: a subject with several signatures takes the best one, because resolve accepts the digest on any.
55
- const SIGNATURE_RANK = Object.freeze([
56
- CoverageVerdict.AnnotationsMissing,
57
- CoverageVerdict.AnnotationMismatch,
58
- CoverageVerdict.NoRow,
59
- CoverageVerdict.SignatureVerified,
60
- ]);
61
-
62
- /** Whether a pinned develop row names exactly the identity a certificate carries. */
63
- export function rowMatchesSigner(row, signer) {
64
- return (
65
- row.certificateIdentity === signer.certificateIdentity &&
66
- row.oidcIssuer === signer.issuer &&
67
- row.githubWorkflow.repository === signer.workflowRepository &&
68
- row.githubWorkflow.ref === signer.workflowRef &&
69
- DEVELOP_SIGNER_TRIGGERS.includes(signer.trigger)
70
- );
71
- }
72
-
73
- /**
74
- * The verdict of ONE signature.
75
- *
76
- * @param {object} request
77
- * @param {{ contentHash: string, service: string }} request.expected the in-run hash F and service S
78
- * @param {{ certificateIdentity: string, issuer: string, workflowRepository: string, workflowRef: string, trigger: string, workflowSha: string }} request.signer
79
- * @param {Record<string, string>} request.annotations the signed annotations
80
- * @param {object[]} request.rows pinned develop signature rows of this producer (may be empty)
81
- */
82
- export function classifySignature({ expected, signer, annotations, rows }) {
83
- const claimed = {
84
- contentHash: annotations[DevelopSignatureAnnotation.ContentHash],
85
- service: annotations[DevelopSignatureAnnotation.Service],
86
- sourceCommit: annotations[DevelopSignatureAnnotation.SourceCommit],
87
- };
88
- const missing = Object.entries(DevelopSignatureAnnotation)
89
- .filter(([, key]) => typeof annotations[key] !== 'string' || annotations[key] === '')
90
- .map(([, key]) => key);
91
- if (missing.length > 0) {
92
- return { verdict: CoverageVerdict.AnnotationsMissing, detail: `missing ${missing.join(', ')}` };
93
- }
94
- const mismatches = [];
95
- if (claimed.contentHash !== expected.contentHash) {
96
- mismatches.push(`content-hash ${claimed.contentHash} != ${expected.contentHash}`);
97
- }
98
- if (claimed.service !== expected.service) {
99
- mismatches.push(`service ${claimed.service} != ${expected.service}`);
100
- }
101
- if (!DEVELOP_SIGNER_TRIGGERS.includes(signer.trigger)) {
102
- mismatches.push(`certificate trigger ${signer.trigger} is not ${DEVELOP_SIGNER_TRIGGERS.join(' or ')}`);
103
- }
104
- if (signer.workflowRef !== DEVELOP_SIGNER_REF) {
105
- mismatches.push(`certificate ref ${signer.workflowRef} is not ${DEVELOP_SIGNER_REF}`);
106
- }
107
- if (claimed.sourceCommit !== signer.workflowSha) {
108
- mismatches.push(`annotated source commit ${claimed.sourceCommit} != certificate commit ${signer.workflowSha}`);
109
- }
110
- if (mismatches.length > 0) {
111
- return { verdict: CoverageVerdict.AnnotationMismatch, detail: mismatches.join('; ') };
112
- }
113
- if (!rows.some((row) => rowMatchesSigner(row, signer))) {
114
- return {
115
- verdict: CoverageVerdict.NoRow,
116
- detail: rows.length === 0 ? 'no pinned develop row for this producer' : 'no pinned develop row names this signer',
117
- };
118
- }
119
- return { verdict: CoverageVerdict.SignatureVerified, detail: '' };
120
- }
121
-
122
- /**
123
- * The verdict of one subject from everything read about it. Case A wins; otherwise the best signature.
124
- *
125
- * @param {object} request
126
- * @param {string|null} request.digest the registry digest served for `<developRef>:<F>`, null when absent
127
- * @param {{ status: string, detail?: string }} request.attestation
128
- * @param {{ signer: object, annotations: object }[]} request.signatures every signature read from the digest
129
- * @param {object[]} request.rows pinned develop signature rows of this producer
130
- * @param {{ contentHash: string, service: string }} request.expected
131
- * @returns {{ verdict: string, detail: string, signer: object|null }}
132
- */
133
- export function classifySubject({ digest, attestation, signatures, rows, expected }) {
134
- if (digest === null) {
135
- return { verdict: CoverageVerdict.NotBuilt, detail: 'no manifest at the content-hash tag', signer: null };
136
- }
137
- if (attestation.status === AttestationStatus.Verified) {
138
- return { verdict: CoverageVerdict.Attested, detail: attestation.detail ?? '', signer: null };
139
- }
140
- if (signatures.length === 0) {
141
- if (attestation.status === AttestationStatus.NoRow) {
142
- return { verdict: CoverageVerdict.NoRow, detail: 'an attestation exists and the policy has no develop producer row', signer: null };
143
- }
144
- const refused = attestation.status === AttestationStatus.Refused ? `attestation refused: ${attestation.detail}` : 'no signature and no attestation';
145
- return { verdict: CoverageVerdict.Unsigned, detail: refused, signer: null };
146
- }
147
- const judged = signatures.map((signature) => ({
148
- ...classifySignature({ expected, signer: signature.signer, annotations: signature.annotations, rows }),
149
- signer: signature.signer,
150
- }));
151
- judged.sort((left, right) => SIGNATURE_RANK.indexOf(right.verdict) - SIGNATURE_RANK.indexOf(left.verdict));
152
- return judged[0];
153
- }
@@ -1,131 +0,0 @@
1
- // develop-coverage — `xema edition develop coverage <id>`: for every image subject an edition selects,
2
- // is its DEVELOP image producer-signed in the form T72 resolve is expected to accept? A forecast, not a guarantee: the
3
- // policy is held to its pin, but this CLI's own unpinned verifier code runs, so resolve can still refuse. Read-only: it writes no lock,
4
- // signature or tag. It is the P2b gate (exit 0 only at 100%).
5
- //
6
- // The subjects, their develop refs and content hashes F are the ones `develop resolve` computes (the
7
- // caller passes the images lock that resolve's own first half produced); the registry digest D is the
8
- // one served for `<developRef>:<F>`; the verdict is decided by develop-coverage-verdict.mjs.
9
-
10
- import { AttestationStatus, COVERED_VERDICTS, DEVELOP_EVIDENCE_CHANNEL, DEVELOP_IMAGE_SIGNATURE_PREDICATE, classifySubject } from './develop-coverage-verdict.mjs';
11
- import { developImageRef } from './develop-image-coordinate.mjs';
12
- import { policyCandidates } from './image-evidence.mjs';
13
- import { mapWithConcurrency } from './map-with-concurrency.mjs';
14
- import { imageSubjectKey, thirdPartyImagePins } from './third-party-image-pins.mjs';
15
- import { attestedContentHash } from './third-party-subjects.mjs';
16
-
17
- /** In flight at once, as `develop resolve` probes. */
18
- export const COVERAGE_CONCURRENCY = 6;
19
-
20
- export const COVERAGE_JSON_SCHEMA = 'xema.develop-coverage/v1';
21
-
22
- /** Exit codes of the verb; 2 is an operational error and is decided by the entry. */
23
- export const CoverageExit = Object.freeze({ Covered: 0, NotCovered: 1, Operational: 2 });
24
-
25
- /**
26
- * The service name a develop lane signs for a subject (`dev.xema.service`): the subject's id in the lock.
27
- * One definition; the signing lanes (T72 P1) must sign this.
28
- */
29
- export const expectedService = (subject) => subject.id;
30
-
31
- /**
32
- * @param {object} request
33
- * @param {string} request.distributionId
34
- * @param {object[]} request.subjects the images lock subjects (release refs, unsealed), contentHash = F
35
- * @param {object} request.policy the pinned trust policy (rows are filtered per develop repository)
36
- * @param {{ developDigest: Function, readAttestation: Function, readSignatures: Function }} request.readers
37
- * @param {{byRepository: (repository: string) => object|undefined}} [request.thirdPartyPins] the data root's third-party
38
- * source pins: a subject of a pinned repository is not built by the develop lane, so it is no coverage subject
39
- * @param {(line: string) => void} [request.progress]
40
- */
41
- export async function collectCoverage({ distributionId, subjects: lockSubjects, policy, readers, thirdPartyPins = undefined, concurrency = COVERAGE_CONCURRENCY, progress = () => {} }) {
42
- const pinnedImages = thirdPartyPins === undefined ? new Map() : thirdPartyImagePins({ pins: thirdPartyPins, subjects: lockSubjects });
43
- const subjects = lockSubjects.filter((subject) => !pinnedImages.has(imageSubjectKey(subject)));
44
- for (const subject of lockSubjects.filter((candidate) => pinnedImages.has(imageSubjectKey(candidate)))) {
45
- progress(
46
- `[coverage] third-party ${imageSubjectKey(subject)} ${subject.imageRef}@${pinnedImages.get(imageSubjectKey(subject)).manifestDigest} ${attestedContentHash(subject)}, not a develop coverage subject`,
47
- );
48
- }
49
- const rows = await mapWithConcurrency(subjects, concurrency, async (subject) => {
50
- const developSubject = { ...subject, imageRef: developImageRef(subject.imageRef) };
51
- const digest = await readers.developDigest(developSubject);
52
- let attestation = { status: AttestationStatus.None };
53
- let signatures = [];
54
- if (digest !== null) {
55
- attestation = await readers.readAttestation(developSubject, digest);
56
- if (attestation.status !== AttestationStatus.Verified) {signatures = await readers.readSignatures(developSubject, digest);}
57
- }
58
- const signatureRows = policyCandidates(policy, DEVELOP_IMAGE_SIGNATURE_PREDICATE, DEVELOP_EVIDENCE_CHANNEL, developSubject.imageRef);
59
- const decided = classifySubject({
60
- digest,
61
- attestation,
62
- signatures,
63
- rows: signatureRows,
64
- expected: { contentHash: subject.contentHash, service: expectedService(subject) },
65
- });
66
- progress(`[coverage] ${subject.kind}:${subject.id} ${decided.verdict}`);
67
- return {
68
- kind: subject.kind,
69
- id: subject.id,
70
- producer: subject.repo,
71
- developRef: developSubject.imageRef,
72
- contentHash: subject.contentHash,
73
- digest,
74
- verdict: decided.verdict,
75
- detail: decided.detail,
76
- signer: decided.signer,
77
- };
78
- });
79
- return summarize(distributionId, rows);
80
- }
81
-
82
- function summarize(distributionId, subjects) {
83
- const byProducer = new Map();
84
- for (const subject of subjects) {
85
- const entry = byProducer.get(subject.producer) ?? { producer: subject.producer, total: 0, covered: 0, subjects: [] };
86
- entry.total += 1;
87
- if (COVERED_VERDICTS.includes(subject.verdict)) {entry.covered += 1;}
88
- entry.subjects.push(subject);
89
- byProducer.set(subject.producer, entry);
90
- }
91
- const producers = [...byProducer.values()].sort((left, right) => (left.producer < right.producer ? -1 : left.producer > right.producer ? 1 : 0));
92
- for (const producer of producers) {
93
- producer.subjects.sort((left, right) => (`${left.kind}:${left.id}` < `${right.kind}:${right.id}` ? -1 : 1));
94
- }
95
- return {
96
- schema: COVERAGE_JSON_SCHEMA,
97
- distributionId,
98
- covered: producers.reduce((sum, producer) => sum + producer.covered, 0),
99
- total: subjects.length,
100
- producers,
101
- };
102
- }
103
-
104
- /** Exit 0 only when every subject is covered; an edition with no subjects covers nothing. */
105
- export function coverageExitCode(report) {
106
- return report.total > 0 && report.covered === report.total ? CoverageExit.Covered : CoverageExit.NotCovered;
107
- }
108
-
109
- export function summaryLine(report) {
110
- return `covered ${report.covered}/${report.total}`;
111
- }
112
-
113
- function signerText(signer) {
114
- if (signer === null) {return '';}
115
- return `${signer.certificateIdentity} (${signer.issuer}, ${signer.trigger}, ${signer.workflowSha})`;
116
- }
117
-
118
- /** The table, grouped by producer repo, ending in the summary line. */
119
- export function renderCoverageTable(report) {
120
- const lines = [];
121
- for (const producer of report.producers) {
122
- lines.push(`${producer.producer} covered ${producer.covered}/${producer.total}`);
123
- for (const subject of producer.subjects) {
124
- const parts = [` ${subject.kind}:${subject.id}`, subject.verdict, subject.digest ?? '-'];
125
- const tail = [subject.detail, signerText(subject.signer)].filter((text) => text !== '').join(' | ');
126
- lines.push(tail === '' ? parts.join(' ') : `${parts.join(' ')} ${tail}`);
127
- }
128
- }
129
- lines.push(summaryLine(report));
130
- return `${lines.join('\n')}\n`;
131
- }
@@ -1,29 +0,0 @@
1
- // develop-current-resolution — the members that keep the CURRENT develop resolution instead of a signed build record.
2
- //
3
- // A member keeps its current resolution (develop HEAD freeze plus the registry probe) only when the data root declares
4
- // it: `currentResolution: "<ticket>"` on its `firstPartySources` entry in edition-workspace.json, the ticket that
5
- // removes the exception (today xema-docs, whose develop lane is unsigned by owner decision and which leaves the
6
- // edition). It is a declared exception, not a fallback: absent means none, and every other member without a record
7
- // still refuses.
8
-
9
- import { compareStrings } from './lib.mjs';
10
-
11
- /** Whether a member (or its `firstPartySources` entry) keeps its current resolution. */
12
- export const keepsCurrentResolution = (member) => Object.hasOwn(member, 'currentResolution');
13
-
14
- /** The graph `members` that declare a current resolution, repo -> ticket, keys sorted: what a selection records. */
15
- export function currentResolutionOf(members) {
16
- return Object.fromEntries(
17
- members
18
- .filter(keepsCurrentResolution)
19
- .map(({ repo, currentResolution }) => [repo, currentResolution])
20
- .sort(([a], [b]) => compareStrings(a, b)),
21
- );
22
- }
23
-
24
- /** Why a selection's `currentResolution` (absent = none) is not exactly the one the graph `members` declare; null when it is. */
25
- export function currentResolutionProblem(declared, members) {
26
- const expected = currentResolutionOf(members);
27
- if (JSON.stringify(declared ?? {}) === JSON.stringify(expected)) {return null;}
28
- return `"currentResolution" is ${JSON.stringify(declared)}, not ${JSON.stringify(expected)}, the members the data root declares keep their current resolution`;
29
- }