@kungfu-tech/buildchain 4.0.9 → 4.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1536) hide show
  1. package/AGENTS.md +35 -5
  2. package/CONTRIBUTING.md +18 -29
  3. package/README.md +55 -29
  4. package/actions/build/artifact/prepare-attestation/README.md +26 -0
  5. package/actions/build/artifact/seal-attestation/README.md +26 -0
  6. package/actions/build/lifecycle/run/README.md +71 -0
  7. package/actions/build/lifecycle/validate/README.md +52 -0
  8. package/actions/governance/incident/report/README.md +107 -0
  9. package/actions/release/promotion/ref/README.md +92 -0
  10. package/architecture/action-taxonomy.json +543 -0
  11. package/architecture/agent-change-map.md +2061 -431
  12. package/architecture/build-environments.json +18 -2
  13. package/architecture/build-orchestration.json +58 -9
  14. package/architecture/capability-state-machine-manifest.json +15 -16
  15. package/architecture/capability-state-machine-manifest.schema.json +2 -2
  16. package/architecture/ci-lane-change-budget.json +2105 -225
  17. package/architecture/code-layout.json +55 -0
  18. package/architecture/core-mechanisms.json +1160 -0
  19. package/architecture/cross-platform-adopter-qualification.json +4 -14
  20. package/architecture/delivery-authority-parity.json +46 -46
  21. package/architecture/delivery-warrant-shadow-bootstrap-plan.json +4 -4
  22. package/architecture/delivery-warrant-shadow-bootstrap-plan.md +3 -3
  23. package/architecture/dev-delivery-orchestration.json +175 -0
  24. package/architecture/floating-consumer-policy.json +15 -11
  25. package/architecture/history/warrant-shadow-observations.json +900 -0
  26. package/architecture/internal-capabilities.json +2332 -358
  27. package/architecture/layered-transition.json +32 -0
  28. package/architecture/maintainability-debt.json +883 -1840
  29. package/architecture/maintainability-policy.json +63 -1438
  30. package/architecture/partial-mutation-recovery-qualification.json +4 -4
  31. package/architecture/platform-stage-checkpoints.json +1 -1
  32. package/architecture/promotion-job-topology.json +85 -0
  33. package/architecture/provider-operation-journal-contract.json +5 -5
  34. package/architecture/publication-facade-patches.json +5 -5
  35. package/architecture/release-activation-shadow-domain.json +4 -4
  36. package/architecture/release-invocation-fixtures.json +31 -16
  37. package/architecture/release-tail-contract-inventory.json +1 -9
  38. package/architecture/release-tail-contract.json +273 -0
  39. package/architecture/release-topology.json +245 -215
  40. package/architecture/runtime-ref-resume-authority.json +1 -1
  41. package/architecture/runtime-semantic-closure.json +27 -17
  42. package/architecture/rust-libnode-bridge-evaluation.json +1 -1
  43. package/architecture/rust-wasm-production-authority.json +7 -7
  44. package/architecture/stable-publication-fence.json +4 -4
  45. package/architecture/stage-capsule-qualification.json +4 -4
  46. package/architecture/stage-capsule-resume-planner.json +1 -1
  47. package/architecture/stage-capsule-store-contract.json +2 -2
  48. package/architecture/tail-reseal-parity.json +22 -17
  49. package/architecture/universal-workflow-bootstrap.json +121 -102
  50. package/architecture/universal-workflow-fault-campaign.json +11 -11
  51. package/architecture/universal-workflow-train-admission.json +44 -8
  52. package/architecture/workflow-taxonomy.json +81 -798
  53. package/bin/buildchain.mjs +2 -1820
  54. package/contracts/buildchain-v2-residuals-v1.json +2 -138
  55. package/contracts/dev-delivery-authority-v2.schema.json +509 -231
  56. package/contracts/fixtures/v4-tail-reseal-v1/valid.json +1 -1
  57. package/contracts/promotion-invocation-v1.schema.json +547 -0
  58. package/contracts/promotion-request-v1.schema.json +472 -0
  59. package/contracts/v4-adopter-delivery-v1.schema.json +1 -1
  60. package/contracts/v4-compatibility-facts-v1.schema.json +4 -4
  61. package/contracts/v4-floating-consumer-policy-receipt-v1.schema.json +124 -21
  62. package/contracts/v4-release-invocation-v1.schema.json +1 -1
  63. package/crates/buildchain-host-bridge/src/main.rs +1 -1
  64. package/dist/site/buildchain-contract.json +145 -2206
  65. package/dist/site/buildchain-site.json +350 -326
  66. package/dist/site/capability-registry.json +17 -17
  67. package/dist/site/cli-registry.json +354 -365
  68. package/dist/site/controller-registry.json +142 -715
  69. package/dist/site/kfd-claims.json +5871 -3138
  70. package/dist/site/kfd-upstream-aggregate.json +1 -1
  71. package/dist/site/manual-registry.json +26 -26
  72. package/dist/site/node-api-registry.json +12561 -16063
  73. package/dist/site/page-registry.json +312 -292
  74. package/dist/site/public-surface-audit.json +3844 -3601
  75. package/dist/site/publication-authority-registry.json +295 -1117
  76. package/dist/site/publication-registry.json +5 -5
  77. package/dist/site/release-provenance.json +80 -90
  78. package/dist/site/schemas/dev-delivery-authority-v2.schema.json +509 -231
  79. package/dist/site/schemas/v4-adopter-delivery-v1.schema.json +1 -1
  80. package/dist/site/schemas/v4-compatibility-facts-v1.schema.json +4 -4
  81. package/dist/site/site-manifest.json +31 -31
  82. package/dist/site/workflow-registry.json +7274 -5321
  83. package/docs/MAP.md +8 -6
  84. package/docs/auditable-demo.md +4 -4
  85. package/docs/aws-us-elastic-runner-burst-plane.md +5 -5
  86. package/docs/binary-distribution.md +2 -2
  87. package/docs/bootstrap-recovery.md +50 -0
  88. package/docs/cli-reference.md +2 -35
  89. package/docs/cli.md +6 -6
  90. package/docs/code-organization.md +131 -0
  91. package/docs/consumer-issue-reporting.md +1 -1
  92. package/docs/dev-alpha-candidate-patrol.md +1 -1
  93. package/docs/dev-delivery-orchestration.md +116 -0
  94. package/docs/dev-delivery-qualification-landing-adr.md +1 -1
  95. package/docs/dev-delivery-warrant.md +5 -2
  96. package/docs/dev-qualification-patrol.md +1 -1
  97. package/docs/engineering-housekeeper.md +3 -3
  98. package/docs/github-artifact-attestation.md +3 -3
  99. package/docs/kfd-support.md +1 -1
  100. package/docs/lifecycle-protocol.md +8 -8
  101. package/docs/migration-inventory.md +6 -6
  102. package/docs/next-development-transition.md +4 -4
  103. package/docs/node-api-reference.md +2273 -2644
  104. package/docs/ownership.md +3 -3
  105. package/docs/publication-artifacts.md +5 -5
  106. package/docs/publication-authority.md +4 -4
  107. package/docs/publish-transaction.md +10 -10
  108. package/docs/release-activation-transaction.md +1 -1
  109. package/docs/release-candidate.md +4 -4
  110. package/docs/release-governance.md +25 -25
  111. package/docs/release-passport.md +2 -2
  112. package/docs/release-promotion-request.md +64 -0
  113. package/docs/release-propagation.md +19 -18
  114. package/docs/release-tail-contract.md +40 -76
  115. package/docs/release-tail-provider-plane.md +17 -26
  116. package/docs/reusable-build-surface.md +34 -21
  117. package/docs/shifu-gate-profiles.md +4 -4
  118. package/docs/site-bundle-contract.md +1 -1
  119. package/docs/stable-candidate-patrol.md +1 -1
  120. package/docs/v4-adopter-delivery.md +50 -121
  121. package/docs/v4-canonical-contracts.md +3 -3
  122. package/docs/v4-compatibility-facts.md +1 -1
  123. package/docs/v4-declarative-release-tail-migration.md +24 -29
  124. package/docs/v4-production-release.md +16 -1
  125. package/docs/v4-publication-rehearsal.md +1 -1
  126. package/docs/v4-runtime-ref-resume-authority.md +2 -2
  127. package/docs/v4-rust-wasm-production-authority.md +2 -2
  128. package/docs/v4-stage-capsule.md +1 -1
  129. package/docs/web-surface-deployments.md +22 -28
  130. package/docs/workflow-catalog.md +82 -127
  131. package/docs/workflow-path-migration.md +1 -5
  132. package/package.json +99 -102
  133. package/packages/core/README.md +41 -164
  134. package/packages/core/adoption/adopter-delivery-parity.js +219 -0
  135. package/packages/core/adoption/adopter-delivery.js +210 -0
  136. package/packages/core/adoption/buildchain-kfd-claims.js +733 -0
  137. package/packages/core/adoption/cli/delivery.mjs +39 -0
  138. package/packages/core/adoption/cli/dispatch.mjs +5 -0
  139. package/packages/core/adoption/cli/kfd-aggregate.mjs +20 -0
  140. package/packages/core/adoption/cli/kfd-hub.mjs +53 -0
  141. package/packages/core/adoption/cli/kfd-migrate-layout.mjs +27 -0
  142. package/packages/core/adoption/cli/kfd-schema.mjs +55 -0
  143. package/packages/core/adoption/cli/kfd-status.mjs +21 -0
  144. package/packages/core/adoption/cli/kfd-upstream.mjs +69 -0
  145. package/packages/core/adoption/cli/kfd.mjs +63 -0
  146. package/packages/core/adoption/cli/output.mjs +18 -0
  147. package/packages/core/adoption/cli/product-gate.mjs +110 -0
  148. package/packages/core/adoption/cli/project.mjs +38 -0
  149. package/packages/core/adoption/cli/standards.mjs +282 -0
  150. package/packages/core/adoption/cli/support.mjs +101 -0
  151. package/packages/core/adoption/cli/surface-register.mjs +172 -0
  152. package/packages/core/adoption/commands/cross-platform-adopter-qualification.mjs +28 -0
  153. package/packages/core/adoption/commands/init-repo.mjs +518 -0
  154. package/packages/core/adoption/cross-platform-adopter-qualification.js +217 -0
  155. package/packages/core/adoption/kfd-agent-hub.js +496 -0
  156. package/packages/core/adoption/kfd.js +966 -0
  157. package/packages/core/adoption/kfd2-product-claims.js +454 -0
  158. package/packages/core/adoption/kfd3-surface-register.js +924 -0
  159. package/packages/core/adoption/qualification/actions.js +106 -0
  160. package/packages/core/adoption/qualification/admission.js +96 -0
  161. package/packages/core/adoption/qualification/aggregate.js +10 -0
  162. package/packages/core/adoption/qualification/io.js +51 -0
  163. package/packages/core/adoption/qualification/platform.js +120 -0
  164. package/packages/core/build/anchored-version-material.js +281 -0
  165. package/packages/core/build/artifact/actions.js +47 -0
  166. package/packages/core/build/artifact/attestation.js +166 -0
  167. package/packages/core/build/artifact/contracts.js +168 -0
  168. package/packages/core/build/artifact/coordinates.js +113 -0
  169. package/packages/core/build/artifact/credential-transport.js +68 -0
  170. package/packages/core/build/artifact/expectations.js +94 -0
  171. package/packages/core/build/artifact/files.js +14 -0
  172. package/packages/core/build/artifact/naming.js +65 -0
  173. package/packages/core/build/artifact/services.js +17 -0
  174. package/packages/core/build/artifact/store.js +119 -0
  175. package/packages/core/build/artifact/summary.js +20 -0
  176. package/packages/core/build/artifact/transfer-policy.js +34 -0
  177. package/packages/core/build/artifact/transport.js +112 -0
  178. package/packages/core/build/artifact/upload.js +178 -0
  179. package/packages/core/build/artifact-coordinate-action.js +46 -0
  180. package/packages/core/build/artifact-coordinate.js +58 -0
  181. package/packages/core/build/artifact-integrity.js +10 -0
  182. package/packages/core/build/artifact-passport.js +842 -0
  183. package/packages/core/build/artifact-verification-envelope.js +500 -0
  184. package/packages/core/build/binary/actions.js +77 -0
  185. package/packages/core/build/binary/checksums.js +33 -0
  186. package/packages/core/build/binary/distribution.js +271 -0
  187. package/packages/core/build/binary-publication-dispatch.js +49 -0
  188. package/packages/core/build/build-facts.js +518 -0
  189. package/packages/core/build/cache/compiler-evidence.js +287 -0
  190. package/packages/core/build/cli/cache.mjs +77 -0
  191. package/packages/core/build/cli/facts.mjs +120 -0
  192. package/packages/core/build/cli/homebrew.mjs +101 -0
  193. package/packages/core/build/cli/lifecycle.mjs +66 -0
  194. package/packages/core/build/commands/aggregate-build-summary.mjs +75 -0
  195. package/packages/core/build/commands/anchored-version-material.mjs +42 -0
  196. package/packages/core/build/commands/artifact-signing-controller.mjs +112 -0
  197. package/packages/core/build/commands/artifact-signing-delegation.mjs +34 -0
  198. package/packages/core/build/commands/auditable-demo-platform.mjs +77 -0
  199. package/packages/core/build/commands/auditable-demo-transport-smoke.mjs +24 -0
  200. package/packages/core/build/commands/auditable-demo.mjs +63 -0
  201. package/packages/core/build/commands/compiler-cache-evidence.mjs +39 -0
  202. package/packages/core/build/commands/dispatch-artifact-signing-authority.mjs +19 -0
  203. package/packages/core/build/commands/import-artifact-signing-results.mjs +10 -0
  204. package/packages/core/build/commands/lifecycle-substage-evidence.mjs +42 -0
  205. package/packages/core/build/commands/resolve-artifact-coordinates.mjs +58 -0
  206. package/packages/core/build/commands/resolve-artifact-transfer-mode.mjs +54 -0
  207. package/packages/core/build/commands/resolve-build-configuration.mjs +23 -0
  208. package/packages/core/build/commands/resolve-build-contract.mjs +94 -0
  209. package/packages/core/build/commands/run-candidate-body-prefix-renderer.mjs +24 -0
  210. package/packages/core/build/commands/run-lifecycle.mjs +56 -0
  211. package/packages/core/build/commands/seal-artifact-signing-requests.mjs +10 -0
  212. package/packages/core/build/commands/seal-macos-credential-input.mjs +4 -0
  213. package/packages/core/build/commands/shifu-gate-profile.mjs +43 -0
  214. package/packages/core/build/commands/source-verification-evidence.mjs +14 -0
  215. package/packages/core/build/commands/stage-capsule-qualification.mjs +79 -0
  216. package/packages/core/build/commands/validate-package-manager-contract.mjs +24 -0
  217. package/packages/core/build/credential/seal-input.js +109 -0
  218. package/packages/core/build/demo/action-context.js +25 -0
  219. package/packages/core/build/demo/adapter-actions.js +35 -0
  220. package/packages/core/build/demo/adapter-transactions.js +66 -0
  221. package/packages/core/build/demo/adapter.js +272 -0
  222. package/packages/core/build/demo/binary-action.js +29 -0
  223. package/packages/core/build/demo/bundle-verification.js +211 -0
  224. package/packages/core/build/demo/capture-adaptation.js +37 -0
  225. package/packages/core/build/demo/capture.js +377 -0
  226. package/packages/core/build/demo/collection-actions.js +62 -0
  227. package/packages/core/build/demo/collection-containers.js +136 -0
  228. package/packages/core/build/demo/collection-context.js +40 -0
  229. package/packages/core/build/demo/collection.js +129 -0
  230. package/packages/core/build/demo/composition.js +319 -0
  231. package/packages/core/build/demo/container.js +113 -0
  232. package/packages/core/build/demo/gate.js +297 -0
  233. package/packages/core/build/demo/inspection-worker.js +4 -0
  234. package/packages/core/build/demo/io.js +220 -0
  235. package/packages/core/build/demo/materialization.js +350 -0
  236. package/packages/core/build/demo/media-bundle.js +112 -0
  237. package/packages/core/build/demo/media-inspection.js +332 -0
  238. package/packages/core/build/demo/media-profile.js +399 -0
  239. package/packages/core/build/demo/media-qualification-action.js +37 -0
  240. package/packages/core/build/demo/media-qualification.js +117 -0
  241. package/packages/core/build/demo/presentation.js +222 -0
  242. package/packages/core/build/demo/publication.js +118 -0
  243. package/packages/core/build/demo/renderer-evidence.js +193 -0
  244. package/packages/core/build/demo/renditions.js +398 -0
  245. package/packages/core/build/demo/scenario.js +493 -0
  246. package/packages/core/build/demo/schema.js +278 -0
  247. package/packages/core/build/demo/transport-smoke.js +149 -0
  248. package/packages/core/build/demo/values.js +137 -0
  249. package/packages/core/build/environment/action.js +17 -0
  250. package/packages/core/build/environment/provision.js +121 -0
  251. package/packages/core/build/gate/actions.js +99 -0
  252. package/packages/core/build/gate/aggregate.js +21 -0
  253. package/packages/core/build/gate/commands.js +66 -0
  254. package/packages/core/build/gate/controller.js +43 -0
  255. package/packages/core/build/gate/environment.js +18 -0
  256. package/packages/core/build/gate/execution.js +88 -0
  257. package/packages/core/build/gate/files.js +46 -0
  258. package/packages/core/build/gate/outputs.js +31 -0
  259. package/packages/core/build/gate/plan.js +61 -0
  260. package/packages/core/build/github-artifact-attestation.js +642 -0
  261. package/packages/core/build/github-attestation/action.js +26 -0
  262. package/packages/core/build/github-attestation/admission.js +34 -0
  263. package/packages/core/build/github-attestation/transaction.js +83 -0
  264. package/packages/core/build/homebrew.js +416 -0
  265. package/packages/core/build/lifecycle/action.js +65 -0
  266. package/packages/core/build/lifecycle/artifacts.js +123 -0
  267. package/packages/core/build/lifecycle/context.js +202 -0
  268. package/packages/core/build/lifecycle/diagnostics.js +254 -0
  269. package/packages/core/build/lifecycle/errors.js +44 -0
  270. package/packages/core/build/lifecycle/execution.js +221 -0
  271. package/packages/core/build/lifecycle/files.js +61 -0
  272. package/packages/core/build/lifecycle/manifest.js +107 -0
  273. package/packages/core/build/lifecycle/sampling.js +209 -0
  274. package/packages/core/build/lifecycle/stage-action.js +18 -0
  275. package/packages/core/build/lifecycle/stage.js +143 -0
  276. package/packages/core/build/lifecycle/substage-evidence.js +232 -0
  277. package/packages/core/build/lifecycle/transaction.js +13 -0
  278. package/packages/core/build/macos-credential-island/action.js +704 -0
  279. package/packages/core/build/macos-credential-island/cleanup.js +48 -0
  280. package/packages/core/build/macos-credential-island/dmg-assembly.js +443 -0
  281. package/packages/core/build/macos-credential-island/lib.js +816 -0
  282. package/packages/core/build/package-manager.js +315 -0
  283. package/packages/core/build/plan/action-context.js +30 -0
  284. package/packages/core/build/plan/action.js +79 -0
  285. package/packages/core/build/plan/admission.js +93 -0
  286. package/packages/core/build/plan/configuration.js +196 -0
  287. package/packages/core/build/plan/environment.js +18 -0
  288. package/packages/core/build/plan/identity.js +49 -0
  289. package/packages/core/build/plan/lifecycle.js +38 -0
  290. package/packages/core/build/plan/matrices.js +58 -0
  291. package/packages/core/build/plan/resolve.js +76 -0
  292. package/packages/core/build/plan/runners.js +48 -0
  293. package/packages/core/build/plan/source.js +58 -0
  294. package/packages/core/build/plan/stage-order.js +10 -0
  295. package/packages/core/build/plan/values.js +10 -0
  296. package/packages/core/build/platform-stage-checkpoints.js +471 -0
  297. package/packages/core/build/release-evidence-bundle.js +156 -0
  298. package/packages/core/build/runner/matrix.js +266 -0
  299. package/packages/core/build/runner/presets.js +115 -0
  300. package/packages/core/build/signing/actions.js +54 -0
  301. package/packages/core/build/signing/authority-actions.js +147 -0
  302. package/packages/core/build/signing/authority-transaction.js +82 -0
  303. package/packages/core/build/signing/control.js +223 -0
  304. package/packages/core/build/signing/controller-transaction.js +110 -0
  305. package/packages/core/build/signing/credential-transaction.js +66 -0
  306. package/packages/core/build/signing/delegation.js +281 -0
  307. package/packages/core/build/signing/detached.js +170 -0
  308. package/packages/core/build/signing/dispatch.js +307 -0
  309. package/packages/core/build/signing/environment.js +13 -0
  310. package/packages/core/build/signing/files.js +53 -0
  311. package/packages/core/build/signing/import-results.js +151 -0
  312. package/packages/core/build/signing/intake.js +113 -0
  313. package/packages/core/build/signing/materialize.js +54 -0
  314. package/packages/core/build/signing/merge-results.js +82 -0
  315. package/packages/core/build/signing/native-result.js +244 -0
  316. package/packages/core/build/signing/prepare.js +44 -0
  317. package/packages/core/build/signing/request.js +519 -0
  318. package/packages/core/build/signing/seal-requests.js +402 -0
  319. package/packages/core/build/signing/transaction.js +158 -0
  320. package/packages/core/build/signing/verify-results.js +118 -0
  321. package/packages/core/build/source/checkout-action.js +16 -0
  322. package/packages/core/build/source/controller-actions.js +52 -0
  323. package/packages/core/build/source/controller.js +182 -0
  324. package/packages/core/build/source/lifecycle-action.js +32 -0
  325. package/packages/core/build/source/lifecycle.js +134 -0
  326. package/packages/core/build/source/proof-actions.js +57 -0
  327. package/packages/core/build/source/proof-lookup.js +82 -0
  328. package/packages/core/build/source/proof.js +134 -0
  329. package/packages/core/build/source-admission.js +35 -0
  330. package/packages/core/build/stage-capsule/actions.js +53 -0
  331. package/packages/core/build/stage-capsule/campaign/aggregate.js +51 -0
  332. package/packages/core/build/stage-capsule/campaign/context.js +51 -0
  333. package/packages/core/build/stage-capsule/campaign/resume.js +240 -0
  334. package/packages/core/build/stage-capsule/campaign/run.js +47 -0
  335. package/packages/core/build/stage-capsule/campaign/seed.js +124 -0
  336. package/packages/core/build/stage-capsule/campaign/worker.js +17 -0
  337. package/packages/core/build/stage-capsule/canary.js +62 -0
  338. package/packages/core/build/stage-capsule/rehearsal/checkpoint.js +110 -0
  339. package/packages/core/build/stage-capsule/rehearsal/files.js +36 -0
  340. package/packages/core/build/stage-capsule/rehearsal/macos-tail.js +104 -0
  341. package/packages/core/build/stage-capsule/rehearsal/resume.js +38 -0
  342. package/packages/core/build/stage-capsule/rehearsal/run.js +46 -0
  343. package/packages/core/build/stage-capsule/rehearsal/verify.js +56 -0
  344. package/packages/core/build/stage-capsule/rehearsal/worker.js +11 -0
  345. package/packages/core/build/stage-capsule-local-store.js +428 -0
  346. package/packages/core/build/stage-capsule-qualification-campaign.js +511 -0
  347. package/packages/core/build/stage-capsule-qualification.js +455 -0
  348. package/packages/core/build/stage-capsule-resume-planner.js +397 -0
  349. package/packages/core/build/stage-capsule-store.js +404 -0
  350. package/packages/core/build/stage-capsule.js +319 -0
  351. package/packages/core/build/standalone/build.js +266 -0
  352. package/packages/core/build/standalone/bundle.js +69 -0
  353. package/packages/core/build/standalone/identity.js +47 -0
  354. package/packages/core/build/standalone/logging.js +72 -0
  355. package/packages/core/build/standalone/process.js +50 -0
  356. package/packages/core/build/summary/action.js +33 -0
  357. package/packages/core/build/summary/aggregation.js +120 -0
  358. package/packages/core/build/summary/artifacts.js +165 -0
  359. package/packages/core/build/summary/controller-receipt.js +50 -0
  360. package/packages/core/build/summary/execution.js +39 -0
  361. package/packages/core/build/summary/finalization.js +133 -0
  362. package/packages/core/build/summary/payloads.js +80 -0
  363. package/packages/core/build/validate-config/action.js +58 -0
  364. package/packages/core/build/validate-config/lib.js +42 -0
  365. package/packages/core/build/verification/actions.js +54 -0
  366. package/packages/core/build/verification/discovery.js +115 -0
  367. package/packages/core/build/verification/identity.js +123 -0
  368. package/packages/core/build/verification/proof.js +8 -0
  369. package/packages/core/build/verification/repository.js +4 -0
  370. package/packages/core/build/verification/runner.js +69 -0
  371. package/packages/core/build/verification/source.js +169 -0
  372. package/packages/core/consumer/buildchain-config.js +1825 -0
  373. package/packages/core/consumer/channel-selection.js +211 -0
  374. package/packages/core/consumer/cli/infrastructure.mjs +6 -0
  375. package/packages/core/consumer/commands/buildchain-channel-router.mjs +81 -0
  376. package/packages/core/consumer/commands/consumer-policy.mjs +229 -0
  377. package/packages/core/consumer/floating-consumer-evidence.js +341 -0
  378. package/packages/core/consumer/floating-consumer-policy.js +596 -0
  379. package/packages/core/consumer/invocation-selector.js +4 -0
  380. package/packages/core/consumer/policy-admission.js +103 -0
  381. package/packages/core/consumer/policy-scan.js +33 -0
  382. package/packages/core/consumer/runtime-selector-persistence.js +291 -0
  383. package/packages/core/consumer/workflow-definition-authority.js +64 -0
  384. package/packages/core/contracts/action-inventory.js +78 -0
  385. package/packages/core/contracts/action-taxonomy.js +46 -0
  386. package/packages/core/contracts/buildchain-contract.js +1038 -0
  387. package/packages/core/contracts/canonical-contracts.js +239 -0
  388. package/packages/core/contracts/cli/context.mjs +28 -0
  389. package/packages/core/contracts/cli/introspection.mjs +47 -0
  390. package/packages/core/contracts/cli/options.mjs +85 -0
  391. package/packages/core/contracts/cli-reference.js +192 -0
  392. package/packages/core/contracts/commands/buildchain-contract-lock.mjs +120 -0
  393. package/packages/core/contracts/commands/workflow-call-contract.mjs +133 -0
  394. package/packages/core/contracts/public-surface-audit.js +274 -0
  395. package/packages/core/contracts/public-surface-cli.js +134 -0
  396. package/packages/core/contracts/runtime-contract-action.js +48 -0
  397. package/packages/core/contracts/runtime-contract-inspection.js +115 -0
  398. package/packages/core/contracts/structured-values.js +29 -0
  399. package/packages/core/contracts/workflow-yaml-contract.js +373 -0
  400. package/packages/core/dev-delivery/admission/gh-cli-client.js +110 -0
  401. package/packages/core/dev-delivery/admission/github-client.js +274 -0
  402. package/packages/core/dev-delivery/admission/policy.js +177 -0
  403. package/packages/core/dev-delivery/admission/queue.js +554 -0
  404. package/packages/core/dev-delivery/admission/readiness.js +222 -0
  405. package/packages/core/dev-delivery/admission/report.js +27 -0
  406. package/packages/core/dev-delivery/admission/request.js +34 -0
  407. package/packages/core/dev-delivery/admission/targeted.js +375 -0
  408. package/packages/core/dev-delivery/admission/transaction.js +47 -0
  409. package/packages/core/dev-delivery/buildchain-delivery-bootstrap.js +240 -0
  410. package/packages/core/dev-delivery/buildchain-delivery-infrastructure.js +164 -0
  411. package/packages/core/dev-delivery/buildchain-delivery-self-dogfood.js +395 -0
  412. package/packages/core/dev-delivery/candidate/admission-actions.js +34 -0
  413. package/packages/core/dev-delivery/candidate/admission.js +172 -0
  414. package/packages/core/dev-delivery/candidate/coordinates.js +46 -0
  415. package/packages/core/dev-delivery/candidate/evidence.js +20 -0
  416. package/packages/core/dev-delivery/candidate/request.js +39 -0
  417. package/packages/core/dev-delivery/candidate/reservation-action.js +21 -0
  418. package/packages/core/dev-delivery/candidate/reservation.js +98 -0
  419. package/packages/core/dev-delivery/candidate/source-paths.js +102 -0
  420. package/packages/core/dev-delivery/candidate/submission.js +41 -0
  421. package/packages/core/dev-delivery/cli/dispatch.mjs +54 -0
  422. package/packages/core/dev-delivery/commands/dev-delivery-authority-command-adapters.mjs +193 -0
  423. package/packages/core/dev-delivery/commands/dev-delivery-authority-provider.mjs +28 -0
  424. package/packages/core/dev-delivery/commands/dev-delivery-authority.mjs +454 -0
  425. package/packages/core/dev-delivery/commands/dev-delivery-process-boundary.mjs +93 -0
  426. package/packages/core/dev-delivery/commands/dev-delivery-proof.mjs +258 -0
  427. package/packages/core/dev-delivery/commands/dev-delivery-provider-heartbeat.mjs +76 -0
  428. package/packages/core/dev-delivery/commands/dev-delivery-request.sh +160 -0
  429. package/packages/core/dev-delivery/commands/dev-delivery-source-proof-reuse.mjs +128 -0
  430. package/packages/core/dev-delivery/commands/dev-delivery-two-phase.mjs +180 -0
  431. package/packages/core/dev-delivery/commands/dev-delivery-warrant-options.mjs +283 -0
  432. package/packages/core/dev-delivery/commands/dev-delivery-warrant.mjs +65 -0
  433. package/packages/core/dev-delivery/commands/dev-merge-queue.mjs +98 -0
  434. package/packages/core/dev-delivery/commands/dev-pr-auto-merge.mjs +111 -0
  435. package/packages/core/dev-delivery/commands/dev-pr-delivery-warrant.mjs +467 -0
  436. package/packages/core/dev-delivery/commands/dev-pr-prequeue-guard.mjs +381 -0
  437. package/packages/core/dev-delivery/commands/dev-qualification-patrol.mjs +21 -0
  438. package/packages/core/dev-delivery/delivery-warrant-fixture-runner.js +375 -0
  439. package/packages/core/dev-delivery/delivery-warrant-read-candidate.js +281 -0
  440. package/packages/core/dev-delivery/delivery-warrant-semantic-diff-gate.js +351 -0
  441. package/packages/core/dev-delivery/delivery-warrant-shadow-adapter.js +444 -0
  442. package/packages/core/dev-delivery/dev-delivery-authority-candidate.js +197 -0
  443. package/packages/core/dev-delivery/dev-delivery-authority-landing.js +459 -0
  444. package/packages/core/dev-delivery/dev-delivery-authority-state.js +424 -0
  445. package/packages/core/dev-delivery/dev-delivery-candidate-identity.js +152 -0
  446. package/packages/core/dev-delivery/dev-delivery-contract-surface.js +74 -0
  447. package/packages/core/dev-delivery/dev-delivery-native-proof.js +509 -0
  448. package/packages/core/dev-delivery/dev-delivery-proof.js +282 -0
  449. package/packages/core/dev-delivery/dev-delivery-warrant-native-requirements.js +7 -0
  450. package/packages/core/dev-delivery/dev-delivery-warrant-state.js +580 -0
  451. package/packages/core/dev-delivery/dev-delivery-warrant.js +588 -0
  452. package/packages/core/dev-delivery/merge-queue-policy.js +543 -0
  453. package/packages/core/dev-delivery/native/action-context.js +59 -0
  454. package/packages/core/dev-delivery/native/actions.js +74 -0
  455. package/packages/core/dev-delivery/native/attempt.js +93 -0
  456. package/packages/core/dev-delivery/native/candidate.js +101 -0
  457. package/packages/core/dev-delivery/native/context-record.js +26 -0
  458. package/packages/core/dev-delivery/native/execution.js +176 -0
  459. package/packages/core/dev-delivery/native/failure.js +105 -0
  460. package/packages/core/dev-delivery/native/files.js +11 -0
  461. package/packages/core/dev-delivery/native/finalizer-admission.js +93 -0
  462. package/packages/core/dev-delivery/native/heartbeat-action.js +29 -0
  463. package/packages/core/dev-delivery/native/heartbeat.js +137 -0
  464. package/packages/core/dev-delivery/native/provider-boundary.js +71 -0
  465. package/packages/core/dev-delivery/native/qualification.js +228 -0
  466. package/packages/core/dev-delivery/native/readback.js +32 -0
  467. package/packages/core/dev-delivery/native/reuse.js +60 -0
  468. package/packages/core/dev-delivery/native/seal-action.js +19 -0
  469. package/packages/core/dev-delivery/native/transactions.js +156 -0
  470. package/packages/core/dev-delivery/native/transfer.js +122 -0
  471. package/packages/core/dev-delivery/published-delivery-authority.js +266 -0
  472. package/packages/core/dev-delivery/qualification/action.js +60 -0
  473. package/packages/core/dev-delivery/qualification/controller.js +218 -0
  474. package/packages/core/dev-delivery/qualification/github-client.js +108 -0
  475. package/packages/core/dev-delivery/qualification/model.js +186 -0
  476. package/packages/core/dev-delivery/qualification/report.js +25 -0
  477. package/packages/core/dev-delivery/queue/completion.js +52 -0
  478. package/packages/core/dev-delivery/queue/landing-action.js +60 -0
  479. package/packages/core/dev-delivery/queue/reconciliation-action.js +45 -0
  480. package/packages/core/dev-delivery/source-proof/evidence.js +92 -0
  481. package/packages/core/dev-delivery/source-proof/io.js +97 -0
  482. package/packages/core/dev-delivery/source-proof/predicates.js +88 -0
  483. package/packages/core/dev-delivery/source-proof/replay.js +143 -0
  484. package/packages/core/dev-delivery/source-proof/reuse.js +116 -0
  485. package/packages/core/dev-delivery/source-proof/seal.js +32 -0
  486. package/packages/core/dev-delivery/warrant/actions.js +78 -0
  487. package/packages/core/dev-delivery/warrant/cancellation.js +49 -0
  488. package/packages/core/dev-delivery/warrant/failure-settlement.js +93 -0
  489. package/packages/core/dev-delivery/warrant/handoff.js +107 -0
  490. package/packages/core/dev-delivery/warrant/observation.js +59 -0
  491. package/packages/core/dev-delivery/warrant/persistence.js +109 -0
  492. package/packages/core/dev-delivery/warrant/reservation-readback.js +72 -0
  493. package/packages/core/dev-delivery/warrant/service.js +134 -0
  494. package/packages/core/dev-delivery/warrant/terminal-policy.js +53 -0
  495. package/packages/core/dev-delivery/warrant/terminal.js +89 -0
  496. package/packages/core/dev-delivery/warrant/transitions.js +222 -0
  497. package/packages/core/dev-delivery/warrant/values.js +102 -0
  498. package/packages/core/governance/alpha-candidate/action.js +96 -0
  499. package/packages/core/governance/alpha-candidate/controller.js +490 -0
  500. package/packages/core/governance/alpha-candidate/lifecycle.js +121 -0
  501. package/packages/core/governance/alpha-candidate/options.js +60 -0
  502. package/packages/core/governance/alpha-candidate/outputs.js +23 -0
  503. package/packages/core/governance/alpha-candidate/provider.js +192 -0
  504. package/packages/core/governance/alpha-candidate/report.js +56 -0
  505. package/packages/core/governance/alpha-candidate/state.js +184 -0
  506. package/packages/core/governance/alpha-candidate/values.js +90 -0
  507. package/packages/core/governance/architecture-graph.js +24 -0
  508. package/packages/core/governance/audit/actions.js +57 -0
  509. package/packages/core/governance/audit/collection.js +259 -0
  510. package/packages/core/governance/audit/github-reader.js +204 -0
  511. package/packages/core/governance/audit/identity.js +86 -0
  512. package/packages/core/governance/audit/incident.mjs +39 -0
  513. package/packages/core/governance/audit/transactions.js +75 -0
  514. package/packages/core/governance/buildchain-compatibility-authority.js +335 -0
  515. package/packages/core/governance/buildchain-compatibility-fact.js +386 -0
  516. package/packages/core/governance/buildchain-compatibility-facts.json +18 -0
  517. package/packages/core/governance/buildchain-compatibility-proof.js +523 -0
  518. package/packages/core/governance/buildchain-publication-authority.js +117 -0
  519. package/packages/core/governance/candidate/body-action.js +18 -0
  520. package/packages/core/governance/candidate/body-renderer.js +160 -0
  521. package/packages/core/governance/ci-lane-change-budget.js +260 -0
  522. package/packages/core/governance/cli/compatibility-facts.mjs +101 -0
  523. package/packages/core/governance/cli/dispatch.mjs +19 -0
  524. package/packages/core/governance/cli/doctor.mjs +144 -0
  525. package/packages/core/governance/commands/architecture.mjs +594 -0
  526. package/packages/core/governance/commands/audit-github-governance.mjs +43 -0
  527. package/packages/core/governance/commands/audit-publication-control-plane.mjs +26 -0
  528. package/packages/core/governance/commands/buildchain-patrol.mjs +32 -0
  529. package/packages/core/governance/commands/create-github-artifact-attestation-policy.mjs +62 -0
  530. package/packages/core/governance/commands/engineering-housekeeper-workflow.mjs +23 -0
  531. package/packages/core/governance/commands/reconcile-github-governance.mjs +689 -0
  532. package/packages/core/governance/commands/reconcile-release-governance.mjs +77 -0
  533. package/packages/core/governance/commands/workflow-friction-report.mjs +375 -0
  534. package/packages/core/governance/github-governance-authority.js +1367 -0
  535. package/packages/core/governance/housekeeping/action.js +45 -0
  536. package/packages/core/governance/housekeeping/execution.js +75 -0
  537. package/packages/core/governance/housekeeping/options.js +103 -0
  538. package/packages/core/governance/housekeeping/report.js +53 -0
  539. package/packages/core/governance/housekeeping/transactions.js +96 -0
  540. package/packages/core/governance/patrol/action.js +41 -0
  541. package/packages/core/governance/patrol/controller.js +125 -0
  542. package/packages/core/governance/patrol/options.js +121 -0
  543. package/packages/core/governance/patrol/report.js +53 -0
  544. package/packages/core/governance/patrol/transaction.js +30 -0
  545. package/packages/core/governance/publication/audit.js +26 -0
  546. package/packages/core/governance/publication/collection.js +396 -0
  547. package/packages/core/governance/publication/policy-values.js +227 -0
  548. package/packages/core/governance/publication/source-authorization.js +293 -0
  549. package/packages/core/governance/receipt-admission-action.js +12 -0
  550. package/packages/core/governance/receipt-admission.js +34 -0
  551. package/packages/core/governance/release-check-policy.js +179 -0
  552. package/packages/core/governance/release-reconciliation-action.js +25 -0
  553. package/packages/core/governance/release-reconciliation.js +122 -0
  554. package/packages/core/governance/report-issue/action.js +201 -0
  555. package/packages/core/index.js +85 -117
  556. package/packages/core/observability/cli/candidate.mjs +42 -0
  557. package/packages/core/observability/cli/context.mjs +47 -0
  558. package/packages/core/observability/cli/diagnostics.mjs +88 -0
  559. package/packages/core/observability/cli/events.mjs +126 -0
  560. package/packages/core/observability/cli/process-sample.mjs +71 -0
  561. package/packages/core/observability/commands/aggregate-diagnostics-summary.mjs +45 -0
  562. package/packages/core/observability/commands/controller-evidence.mjs +109 -0
  563. package/packages/core/observability/commands/observed-evidence.mjs +27 -0
  564. package/packages/core/observability/controller/identity-action.js +11 -0
  565. package/packages/core/observability/controller/identity.js +32 -0
  566. package/packages/core/observability/controller-actions.js +63 -0
  567. package/packages/core/observability/controller-evidence-io.js +112 -0
  568. package/packages/core/observability/controller-evidence.js +555 -0
  569. package/packages/core/observability/controller-input-boundary.js +47 -0
  570. package/packages/core/observability/diagnostics/aggregate.js +25 -0
  571. package/packages/core/observability/diagnostics.js +1904 -0
  572. package/packages/core/observability/evidence/actions.js +20 -0
  573. package/packages/core/observability/evidence/bundle.js +163 -0
  574. package/packages/core/observability/evidence/publication.js +360 -0
  575. package/packages/core/observability/evidence/transactions.js +62 -0
  576. package/packages/core/observability/process/sampling.js +128 -0
  577. package/packages/core/observability/publisher-admission.js +26 -0
  578. package/packages/core/observability/transaction-journal.js +40 -0
  579. package/packages/core/paper/cli/dispatch.mjs +17 -0
  580. package/packages/core/paper/commands/paper-agent-cli.mjs +35 -0
  581. package/packages/core/paper/commands/paper-work-fleet-cli.mjs +577 -0
  582. package/packages/core/paper/commands/paper.mjs +632 -0
  583. package/packages/core/paper/operations/bootstrap.js +73 -0
  584. package/packages/core/paper/operations/files.js +48 -0
  585. package/packages/core/paper/operations/github-observation.js +136 -0
  586. package/packages/core/paper/operations/identity.js +59 -0
  587. package/packages/core/paper/operations/npm-observation.js +118 -0
  588. package/packages/core/paper/operations/plans.js +213 -0
  589. package/packages/core/paper/operations/preflight-checks.js +269 -0
  590. package/packages/core/paper/operations/provisioning-validation.js +155 -0
  591. package/packages/core/paper/operations/provisioning.js +113 -0
  592. package/packages/core/paper/operations/runtime-observation.js +25 -0
  593. package/packages/core/paper/operations/runtime.js +84 -0
  594. package/packages/core/paper/operations/scaffold-config.js +77 -0
  595. package/packages/core/paper/operations/scaffold-workflows.js +99 -0
  596. package/packages/core/paper/operations/scaffold.js +370 -0
  597. package/packages/core/paper/operations/status-facts.js +264 -0
  598. package/packages/core/paper/operations/status.js +353 -0
  599. package/packages/core/paper/operations/toolchain-observation.js +49 -0
  600. package/packages/core/paper/operations/workspace.js +60 -0
  601. package/packages/core/paper/paper-agent-entry.js +396 -0
  602. package/packages/core/paper/paper-fleet.js +310 -0
  603. package/packages/core/paper/paper-npm-bootstrap.js +492 -0
  604. package/packages/core/paper/paper-repository.js +214 -0
  605. package/packages/core/paper/paper-runtime-channels.js +344 -0
  606. package/packages/core/paper/paper-scaffold-content.js +574 -0
  607. package/packages/core/paper/paper.js +308 -0
  608. package/packages/core/paper/publication/actions.js +109 -0
  609. package/packages/core/paper/publication/candidate.js +140 -0
  610. package/packages/core/paper/publication/controller.js +117 -0
  611. package/packages/core/paper/publication/envelope.js +118 -0
  612. package/packages/core/paper/publication/propagation.js +135 -0
  613. package/packages/core/paper/publication/readback.js +89 -0
  614. package/packages/core/paper/publication/target.js +54 -0
  615. package/packages/core/paper/publication-controller.js +144 -0
  616. package/packages/core/providers/artifact-relay/files.js +71 -0
  617. package/packages/core/providers/artifact-relay/s3-client.js +259 -0
  618. package/packages/core/providers/artifact-relay/transactions.js +258 -0
  619. package/packages/core/providers/commands/artifact-relay-s3.mjs +62 -0
  620. package/packages/core/providers/commands/aws-codebuild-toolchain.mjs +15 -0
  621. package/packages/core/providers/commands/aws-macos-jit-controller-runtime.mjs +82 -0
  622. package/packages/core/providers/commands/aws-runner-burst-core.mjs +249 -0
  623. package/packages/core/providers/commands/aws-runner-burst.mjs +80 -0
  624. package/packages/core/providers/commands/aws-windows-jit-campaign.mjs +202 -0
  625. package/packages/core/providers/commands/aws-windows-jit-controller.mjs +578 -0
  626. package/packages/core/providers/commands/aws-windows-jit-operator.sh +506 -0
  627. package/packages/core/providers/commands/infra-contract-core.mjs +1032 -0
  628. package/packages/core/providers/commands/infra-contract.mjs +345 -0
  629. package/packages/core/providers/commands/locked-source-checkout.mjs +9 -0
  630. package/packages/core/providers/commands/route-offline-runners.mjs +30 -0
  631. package/packages/core/providers/demo/capture-worker.py +541 -0
  632. package/packages/core/providers/dev-delivery/candidate.js +112 -0
  633. package/packages/core/providers/dev-delivery/protection.js +29 -0
  634. package/packages/core/providers/dev-delivery/store.js +292 -0
  635. package/packages/core/providers/git/fetch-process.js +27 -0
  636. package/packages/core/providers/git/fetch-worker.js +146 -0
  637. package/packages/core/providers/git/patch-root.js +54 -0
  638. package/packages/core/providers/git-ref-readback.mjs +22 -0
  639. package/packages/core/providers/github/artifact-attestation.js +32 -0
  640. package/packages/core/providers/github/commits.js +32 -0
  641. package/packages/core/providers/github/json-client.js +65 -0
  642. package/packages/core/providers/github/product-publication.js +44 -0
  643. package/packages/core/providers/github/publication-control-plane.js +116 -0
  644. package/packages/core/providers/github/pull-requests.js +24 -0
  645. package/packages/core/providers/github/qualification.js +181 -0
  646. package/packages/core/providers/github/release-assets.js +91 -0
  647. package/packages/core/providers/github/signing-request.js +81 -0
  648. package/packages/core/providers/github/source-lock.js +98 -0
  649. package/packages/core/providers/github-cli-api.js +35 -0
  650. package/packages/core/providers/github-issue-comment.js +83 -0
  651. package/packages/core/providers/github-permission.js +11 -0
  652. package/packages/core/providers/github-token.js +121 -0
  653. package/packages/core/providers/process/sample-worker.mjs +14 -0
  654. package/packages/core/providers/runner/observation.js +30 -0
  655. package/packages/core/providers/runner/offline-routing.js +205 -0
  656. package/packages/core/providers/signing/detached-key.js +20 -0
  657. package/packages/core/providers/signing/macos/compound-archive.py +434 -0
  658. package/packages/core/providers/signing/macos/sign-request.sh +145 -0
  659. package/packages/core/providers/signing/native.js +77 -0
  660. package/packages/core/providers/signing/windows/sign-request.ps1 +48 -0
  661. package/packages/core/providers/source-checkout/action.js +31 -0
  662. package/packages/core/providers/source-checkout/auth.js +32 -0
  663. package/packages/core/providers/source-checkout/fetch.js +135 -0
  664. package/packages/core/providers/source-checkout/git.js +220 -0
  665. package/packages/core/providers/source-checkout/transaction.js +360 -0
  666. package/packages/core/providers/source-checkout/values.js +115 -0
  667. package/packages/core/providers/source-checkout/workspace.js +50 -0
  668. package/packages/core/providers/sync-git/action.mjs +16 -0
  669. package/packages/core/providers/sync-git/transfer.mjs +86 -0
  670. package/packages/core/providers/toolchain/codebuild-policy.js +36 -0
  671. package/packages/core/providers/toolchain/codebuild.js +220 -0
  672. package/packages/core/publication/authority/actions.js +156 -0
  673. package/packages/core/publication/authority/admission.js +113 -0
  674. package/packages/core/publication/authority/assembly.js +77 -0
  675. package/packages/core/publication/authority/binary-evidence.js +77 -0
  676. package/packages/core/publication/authority/candidate-evidence.js +42 -0
  677. package/packages/core/publication/authority/consumer-gate.js +80 -0
  678. package/packages/core/publication/authority/control-plane.js +38 -0
  679. package/packages/core/publication/authority/evidence.js +113 -0
  680. package/packages/core/publication/authority/gate.js +39 -0
  681. package/packages/core/publication/authority/governance.js +61 -0
  682. package/packages/core/publication/authority/paper-evidence.js +24 -0
  683. package/packages/core/publication/authority/request.js +13 -0
  684. package/packages/core/publication/authority/result.js +37 -0
  685. package/packages/core/publication/authority/runner.js +26 -0
  686. package/packages/core/publication/authority/seal.js +97 -0
  687. package/packages/core/publication/authority/verification-evidence.js +80 -0
  688. package/packages/core/publication/authority/verification.js +94 -0
  689. package/packages/core/publication/binary/action.js +33 -0
  690. package/packages/core/publication/binary/capability.js +55 -0
  691. package/packages/core/publication/binary/evidence.js +109 -0
  692. package/packages/core/publication/binary/transaction.js +38 -0
  693. package/packages/core/publication/candidate/artifact.js +71 -0
  694. package/packages/core/publication/candidate/collection-action.js +24 -0
  695. package/packages/core/publication/candidate/collection.js +70 -0
  696. package/packages/core/publication/candidate/kind.js +93 -0
  697. package/packages/core/publication/candidate/manifest.js +35 -0
  698. package/packages/core/publication/candidate/package-binding.js +42 -0
  699. package/packages/core/publication/candidate/package.js +50 -0
  700. package/packages/core/publication/candidate/paper-package.js +120 -0
  701. package/packages/core/publication/candidate/passport.js +36 -0
  702. package/packages/core/publication/candidate/qualification-action.js +41 -0
  703. package/packages/core/publication/candidate/qualification.js +56 -0
  704. package/packages/core/publication/candidate/registry-hydration.js +204 -0
  705. package/packages/core/publication/candidate/reproducibility.js +29 -0
  706. package/packages/core/publication/candidate/sealing.js +184 -0
  707. package/packages/core/publication/candidate/stage-capsules.js +205 -0
  708. package/packages/core/publication/candidate/toolchain.js +80 -0
  709. package/packages/core/publication/cli/dispatch.mjs +107 -0
  710. package/packages/core/publication/commands/create-release-bundle.mjs +32 -0
  711. package/packages/core/publication/commands/generate-release-candidate-passport.mjs +80 -0
  712. package/packages/core/publication/commands/installer-publication.mjs +45 -0
  713. package/packages/core/publication/commands/npm-publish-dry-run.mjs +48 -0
  714. package/packages/core/publication/commands/npm-publish-transaction.mjs +55 -0
  715. package/packages/core/publication/commands/publication-artifact-candidate.mjs +48 -0
  716. package/packages/core/publication/commands/publication-artifact.mjs +67 -0
  717. package/packages/core/publication/commands/publication-package.mjs +38 -0
  718. package/packages/core/publication/commands/publication-registry-hydrate.mjs +19 -0
  719. package/packages/core/publication/commands/publication-reproducibility.mjs +62 -0
  720. package/packages/core/publication/installer/evidence.js +319 -0
  721. package/packages/core/publication/npm/environment.js +18 -0
  722. package/packages/core/publication/npm/evidence.js +57 -0
  723. package/packages/core/publication/npm/pack-preview.js +22 -0
  724. package/packages/core/publication/npm/package-plan.js +82 -0
  725. package/packages/core/publication/npm/package.js +120 -0
  726. package/packages/core/publication/npm/preview-action.js +30 -0
  727. package/packages/core/publication/npm/preview.js +92 -0
  728. package/packages/core/publication/npm/registry.js +61 -0
  729. package/packages/core/publication/npm/transaction.js +115 -0
  730. package/packages/core/publication/oci/preview-actions.js +48 -0
  731. package/packages/core/publication/oci/preview-admission.js +93 -0
  732. package/packages/core/publication/oci/preview-promotion.js +64 -0
  733. package/packages/core/publication/oci/preview-registry.js +36 -0
  734. package/packages/core/publication/oci/preview-transaction.js +42 -0
  735. package/packages/core/publication/oci/preview-values.js +8 -0
  736. package/packages/core/publication/oci-compose-qualification.js +143 -0
  737. package/packages/core/publication/oci-publication-bundle.js +281 -0
  738. package/packages/core/publication/publication-artifact-candidate.js +128 -0
  739. package/packages/core/publication/publication-artifact.js +641 -0
  740. package/packages/core/publication/publication-authority.js +1163 -0
  741. package/packages/core/publication/publication-development.js +72 -0
  742. package/packages/core/publication/publication-package.js +252 -0
  743. package/packages/core/publication/publication-rehearsal-capsule.js +468 -0
  744. package/packages/core/publication/publication-rehearsal-projection.js +104 -0
  745. package/packages/core/publication/publication-rehearsal-runtime.js +190 -0
  746. package/packages/core/publication/publication-rehearsal.js +481 -0
  747. package/packages/core/publication/publication-reproducibility.js +947 -0
  748. package/packages/core/publication/settlement/actions.js +63 -0
  749. package/packages/core/publication/settlement/transaction.js +197 -0
  750. package/packages/core/release/binary/coordinates-action.js +25 -0
  751. package/packages/core/release/binary/coordinates.js +76 -0
  752. package/packages/core/release/candidate/download.js +64 -0
  753. package/packages/core/release/candidate/lineage.js +72 -0
  754. package/packages/core/release/candidate/materialize.js +155 -0
  755. package/packages/core/release/candidate/payloads.js +330 -0
  756. package/packages/core/release/candidate/publication-intent.js +89 -0
  757. package/packages/core/release/candidate/resolve.js +132 -0
  758. package/packages/core/release/candidate/run-selection.js +88 -0
  759. package/packages/core/release/candidate/selection.js +181 -0
  760. package/packages/core/release/candidate/transport.js +143 -0
  761. package/packages/core/release/cli/command-handlers.mjs +14 -0
  762. package/packages/core/release/cli/dispatch.mjs +39 -0
  763. package/packages/core/release/cli/inspection-handlers.mjs +178 -0
  764. package/packages/core/release/cli/release-handlers.mjs +332 -0
  765. package/packages/core/release/cli/trust-release.mjs +19 -0
  766. package/packages/core/release/cli/verification-handlers.mjs +303 -0
  767. package/packages/core/release/commands/dev-alpha-candidate-patrol.mjs +42 -0
  768. package/packages/core/release/commands/ensure-github-release.mjs +199 -0
  769. package/packages/core/release/commands/next-development-review.mjs +77 -0
  770. package/packages/core/release/commands/next-development-transition.mjs +47 -0
  771. package/packages/core/release/commands/promotion-channel-router.mjs +62 -0
  772. package/packages/core/release/commands/promotion-identity-resolver.mjs +77 -0
  773. package/packages/core/release/commands/publish-source-ref-resolver.mjs +113 -0
  774. package/packages/core/release/commands/release-candidate-resolver.mjs +122 -0
  775. package/packages/core/release/commands/release-line-dry-run.mjs +53 -0
  776. package/packages/core/release/commands/release-propagation.mjs +411 -0
  777. package/packages/core/release/commands/release-tail.mjs +169 -0
  778. package/packages/core/release/commands/release-transaction.mjs +212 -0
  779. package/packages/core/release/commands/resolve-publish-gate.mjs +34 -0
  780. package/packages/core/release/commands/resolve-publish-source.mjs +96 -0
  781. package/packages/core/release/commands/resume-from-candidate-run.mjs +107 -0
  782. package/packages/core/release/commands/stable-candidate-patrol.mjs +31 -0
  783. package/packages/core/release/commands/stable-candidate-qualification.mjs +24 -0
  784. package/packages/core/release/commands/stable-release-gate.mjs +351 -0
  785. package/packages/core/release/commands/tail-reseal.mjs +148 -0
  786. package/packages/core/release/commands/verify-promotion-router-binding.sh +36 -0
  787. package/packages/core/release/commands/verify-publish-channel-ref.mjs +83 -0
  788. package/packages/core/release/commands/verify-publish-source-lock.mjs +37 -0
  789. package/packages/core/release/commands/verify-release-pr.mjs +6 -0
  790. package/packages/core/release/commands/verify-version-state-delta.mjs +21 -0
  791. package/packages/core/release/github-provider-plane.js +319 -0
  792. package/packages/core/release/github-release.js +385 -0
  793. package/packages/core/release/line/action.js +49 -0
  794. package/packages/core/release/line/governance.js +96 -0
  795. package/packages/core/release/line/plan.js +56 -0
  796. package/packages/core/release/line/policy.js +320 -0
  797. package/packages/core/release/line/protection.js +35 -0
  798. package/packages/core/release/line/request.js +22 -0
  799. package/packages/core/release/line/source.js +79 -0
  800. package/packages/core/release/line/transaction.js +33 -0
  801. package/packages/core/release/line/verification-action.js +13 -0
  802. package/packages/core/release/line/verification.js +13 -0
  803. package/packages/core/release/next-development/actions.js +122 -0
  804. package/packages/core/release/next-development/approval.js +59 -0
  805. package/packages/core/release/next-development/enqueue.js +51 -0
  806. package/packages/core/release/next-development/finalization.js +127 -0
  807. package/packages/core/release/next-development/observation.js +41 -0
  808. package/packages/core/release/next-development/review-policy.js +56 -0
  809. package/packages/core/release/next-development/verification.js +89 -0
  810. package/packages/core/release/next-development-projection.js +310 -0
  811. package/packages/core/release/next-development-transition.js +737 -0
  812. package/packages/core/release/partial-mutation-recovery-qualification.js +18 -0
  813. package/packages/core/release/passport/artifact-index.js +65 -0
  814. package/packages/core/release/passport/assembly-artifacts.js +43 -0
  815. package/packages/core/release/passport/assembly-inputs.js +107 -0
  816. package/packages/core/release/passport/assembly-material.js +261 -0
  817. package/packages/core/release/passport/assembly-render.js +320 -0
  818. package/packages/core/release/passport/assembly.js +12 -0
  819. package/packages/core/release/passport/assets.js +46 -0
  820. package/packages/core/release/passport/attachments.js +88 -0
  821. package/packages/core/release/passport/authoritative-base.js +123 -0
  822. package/packages/core/release/passport/build.js +39 -0
  823. package/packages/core/release/passport/collection-inputs.js +383 -0
  824. package/packages/core/release/passport/collection-material.js +199 -0
  825. package/packages/core/release/passport/collection-options.js +97 -0
  826. package/packages/core/release/passport/collection-output.js +303 -0
  827. package/packages/core/release/passport/collection.js +10 -0
  828. package/packages/core/release/passport/commands.js +44 -0
  829. package/packages/core/release/passport/consumer-input.js +18 -0
  830. package/packages/core/release/passport/consumer-validation.js +83 -0
  831. package/packages/core/release/passport/discovery.js +36 -0
  832. package/packages/core/release/passport/documents.js +116 -0
  833. package/packages/core/release/passport/evidence-validation.js +280 -0
  834. package/packages/core/release/passport/files.js +43 -0
  835. package/packages/core/release/passport/fixture.js +19 -0
  836. package/packages/core/release/passport/identity.js +46 -0
  837. package/packages/core/release/passport/impact-validation.js +230 -0
  838. package/packages/core/release/passport/impact.js +149 -0
  839. package/packages/core/release/passport/inputs.js +55 -0
  840. package/packages/core/release/passport/invariants.js +93 -0
  841. package/packages/core/release/passport/issues.js +29 -0
  842. package/packages/core/release/passport/json.js +16 -0
  843. package/packages/core/release/passport/locations.js +82 -0
  844. package/packages/core/release/passport/packages.js +123 -0
  845. package/packages/core/release/passport/publish-validation.js +279 -0
  846. package/packages/core/release/passport/publish.js +58 -0
  847. package/packages/core/release/passport/report.js +154 -0
  848. package/packages/core/release/passport/state-validation.js +163 -0
  849. package/packages/core/release/passport/transaction.js +69 -0
  850. package/packages/core/release/passport/trust-claims.js +365 -0
  851. package/packages/core/release/passport/trust-validation.js +528 -0
  852. package/packages/core/release/product-publication.js +59 -0
  853. package/packages/core/release/promote-candidate/action.js +9 -0
  854. package/packages/core/release/promote-candidate/development-source.js +39 -0
  855. package/packages/core/release/promote-candidate/evidence-binding.js +142 -0
  856. package/packages/core/release/promote-candidate/evidence-inputs.js +99 -0
  857. package/packages/core/release/promote-candidate/files.js +10 -0
  858. package/packages/core/release/promote-candidate/next-development-provider.js +300 -0
  859. package/packages/core/release/promote-candidate/next-development-queue.js +63 -0
  860. package/packages/core/release/promote-candidate/oci-provider.js +241 -0
  861. package/packages/core/release/promote-candidate/oci-registry-client.js +67 -0
  862. package/packages/core/release/promote-candidate/outputs.js +29 -0
  863. package/packages/core/release/promote-candidate/product-finalization-wait.js +52 -0
  864. package/packages/core/release/promote-candidate/product-provider-adapters.js +462 -0
  865. package/packages/core/release/promote-candidate/product-provider-github-adapters.js +595 -0
  866. package/packages/core/release/promote-candidate/product-provider.js +188 -0
  867. package/packages/core/release/promote-candidate/provider-request.js +51 -0
  868. package/packages/core/release/promote-candidate/provider-settlement.js +83 -0
  869. package/packages/core/release/promote-candidate/publication-completion.js +56 -0
  870. package/packages/core/release/promote-candidate/release-documents.js +156 -0
  871. package/packages/core/release/promote-candidate/transaction.js +130 -0
  872. package/packages/core/release/promote-ref/action-environment.js +2 -0
  873. package/packages/core/release/promote-ref/action-inputs.js +285 -0
  874. package/packages/core/release/promote-ref/action-outputs.js +140 -0
  875. package/packages/core/release/promote-ref/action-request.js +205 -0
  876. package/packages/core/release/promote-ref/action.js +92 -0
  877. package/packages/core/release/promote-ref/internal/branch-protection.js +218 -0
  878. package/packages/core/release/promote-ref/internal/candidate-admission.js +149 -0
  879. package/packages/core/release/promote-ref/internal/channel-governance.js +297 -0
  880. package/packages/core/release/promote-ref/internal/channel-resume.js +198 -0
  881. package/packages/core/release/promote-ref/internal/channel-tags.js +207 -0
  882. package/packages/core/release/promote-ref/internal/contained-published-version-state.js +80 -0
  883. package/packages/core/release/promote-ref/internal/durable-transaction-operations.js +463 -0
  884. package/packages/core/release/promote-ref/internal/durable-transaction-store.js +395 -0
  885. package/packages/core/release/promote-ref/internal/generated-branch.js +16 -0
  886. package/packages/core/release/promote-ref/internal/generated-identity.js +12 -0
  887. package/packages/core/release/promote-ref/internal/generated-ref.js +93 -0
  888. package/packages/core/release/promote-ref/internal/github-adapter.js +312 -0
  889. package/packages/core/release/promote-ref/internal/npm-distribution.js +185 -0
  890. package/packages/core/release/promote-ref/internal/npm-existing-evidence.js +61 -0
  891. package/packages/core/release/promote-ref/internal/passport-files.js +116 -0
  892. package/packages/core/release/promote-ref/internal/passport-generation.js +567 -0
  893. package/packages/core/release/promote-ref/internal/promote-alpha-channel.js +588 -0
  894. package/packages/core/release/promote-ref/internal/promote-major-channel.js +476 -0
  895. package/packages/core/release/promote-ref/internal/promote-release-channel.js +573 -0
  896. package/packages/core/release/promote-ref/internal/promotion-operations.js +1170 -0
  897. package/packages/core/release/promote-ref/internal/promotion-options.js +101 -0
  898. package/packages/core/release/promote-ref/internal/promotion-policy.js +218 -0
  899. package/packages/core/release/promote-ref/internal/publish-command.js +211 -0
  900. package/packages/core/release/promote-ref/internal/publish-contract.js +181 -0
  901. package/packages/core/release/promote-ref/internal/publish-transaction.js +510 -0
  902. package/packages/core/release/promote-ref/internal/tag-selection.js +159 -0
  903. package/packages/core/release/promote-ref/internal/transaction-context.js +506 -0
  904. package/packages/core/release/promote-ref/internal/transaction-recovery.js +379 -0
  905. package/packages/core/release/promote-ref/internal/version-state-operations.js +545 -0
  906. package/packages/core/release/promote-ref/lib.js +600 -0
  907. package/packages/core/release/promote-ref/release-tail.js +102 -0
  908. package/packages/core/release/promote-ref/source-lock.js +91 -0
  909. package/packages/core/release/promotion/actions.js +133 -0
  910. package/packages/core/release/promotion/admission.js +52 -0
  911. package/packages/core/release/promotion/candidate.js +71 -0
  912. package/packages/core/release/promotion/channel.js +104 -0
  913. package/packages/core/release/promotion/identities.js +56 -0
  914. package/packages/core/release/promotion/product-state.js +68 -0
  915. package/packages/core/release/promotion/publish-gate.js +128 -0
  916. package/packages/core/release/promotion/qualification-action.js +72 -0
  917. package/packages/core/release/promotion/qualification.js +95 -0
  918. package/packages/core/release/promotion/routing.js +94 -0
  919. package/packages/core/release/promotion/selection.js +55 -0
  920. package/packages/core/release/promotion/source-intent.js +35 -0
  921. package/packages/core/release/promotion-request.js +148 -0
  922. package/packages/core/release/propagation/actions.js +75 -0
  923. package/packages/core/release/propagation/delivery.js +202 -0
  924. package/packages/core/release/propagation/planning.js +197 -0
  925. package/packages/core/release/propagation/report.js +97 -0
  926. package/packages/core/release/propagation/store.js +26 -0
  927. package/packages/core/release/propagation/transactions.js +213 -0
  928. package/packages/core/release/propagation/work.js +146 -0
  929. package/packages/core/release/protected-publication-source.js +91 -0
  930. package/packages/core/release/provider-operation-journal.js +62 -0
  931. package/packages/core/release/provider-readback-idempotency.js +309 -0
  932. package/packages/core/release/qualification/actions.js +51 -0
  933. package/packages/core/release/qualification/campaign.js +154 -0
  934. package/packages/core/release/qualification/options.js +102 -0
  935. package/packages/core/release/qualification/public-build.js +109 -0
  936. package/packages/core/release/recovery/artifacts.js +161 -0
  937. package/packages/core/release/recovery/candidate.js +529 -0
  938. package/packages/core/release/recovery/capsules.js +102 -0
  939. package/packages/core/release/recovery/download.js +191 -0
  940. package/packages/core/release/recovery/files.js +39 -0
  941. package/packages/core/release/recovery/provenance.js +199 -0
  942. package/packages/core/release/recovery/publication.js +193 -0
  943. package/packages/core/release/recovery/readback.js +169 -0
  944. package/packages/core/release/recovery/runtime.js +224 -0
  945. package/packages/core/release/recovery/transactions.js +139 -0
  946. package/packages/core/release/release-activation-shadow.js +32 -0
  947. package/packages/core/release/release-blocker-priority.js +183 -0
  948. package/packages/core/release/release-candidate-recovery.js +595 -0
  949. package/packages/core/release/release-candidate.js +591 -0
  950. package/packages/core/release/release-invocation.js +64 -0
  951. package/packages/core/release/release-line-bootstrap.js +292 -0
  952. package/packages/core/release/release-line-dry-run.js +302 -0
  953. package/packages/core/release/release-passport-contract.js +479 -0
  954. package/packages/core/release/release-passport.js +74 -0
  955. package/packages/core/release/release-tail-provider-adapters.js +460 -0
  956. package/packages/core/release/release-tail-provider-plane.js +248 -0
  957. package/packages/core/release/reseal/actions.js +84 -0
  958. package/packages/core/release/reseal/admission.js +75 -0
  959. package/packages/core/release/reseal/files.js +39 -0
  960. package/packages/core/release/reseal/finalize-platform.js +65 -0
  961. package/packages/core/release/reseal/outputs.js +21 -0
  962. package/packages/core/release/reseal/plan.js +24 -0
  963. package/packages/core/release/reseal/platform.js +135 -0
  964. package/packages/core/release/reseal/readbacks.js +36 -0
  965. package/packages/core/release/reseal/seal.js +125 -0
  966. package/packages/core/release/reuse-complete-release.js +240 -0
  967. package/packages/core/release/runtime-override-authorization.js +242 -0
  968. package/packages/core/release/settle/action.js +412 -0
  969. package/packages/core/release/source/channel.js +45 -0
  970. package/packages/core/release/source/coordinates.js +160 -0
  971. package/packages/core/release/source/lineage.js +144 -0
  972. package/packages/core/release/source/manifest.js +114 -0
  973. package/packages/core/release/stable-patrol/action.js +87 -0
  974. package/packages/core/release/stable-patrol/controller.js +346 -0
  975. package/packages/core/release/stable-patrol/coordinates.js +16 -0
  976. package/packages/core/release/stable-patrol/github-client.js +181 -0
  977. package/packages/core/release/stable-patrol/options.js +87 -0
  978. package/packages/core/release/stable-patrol/report.js +28 -0
  979. package/packages/core/release/stable-publication-fence.js +28 -0
  980. package/packages/core/release/tail-reseal-github.js +175 -0
  981. package/packages/core/release/tail-reseal-receipt.js +228 -0
  982. package/packages/core/release/tail-reseal.js +594 -0
  983. package/packages/core/release/version-state/verification.js +164 -0
  984. package/packages/core/release/version-state.js +458 -0
  985. package/packages/core/runtime/action-host.js +19 -0
  986. package/packages/core/runtime/action-process.mjs +23 -0
  987. package/packages/core/runtime/buildchain-domain.wasm +0 -0
  988. package/packages/core/runtime/checkout-identity.js +27 -0
  989. package/packages/core/runtime/commands/bridge-bootstrap.mjs +147 -0
  990. package/packages/core/runtime/commands/host-adapter.mjs +185 -0
  991. package/packages/core/runtime/commands/runtime-ref-core.mjs +171 -0
  992. package/packages/core/runtime/consumer-shell.js +174 -0
  993. package/packages/core/runtime/domain-wasm-artifact.js +7 -0
  994. package/packages/core/runtime/installation-root.js +29 -0
  995. package/packages/core/runtime/locked-dependencies.js +74 -0
  996. package/packages/core/runtime/provider-closure.js +60 -0
  997. package/packages/core/runtime/runtime-selection-action.js +34 -0
  998. package/packages/core/runtime/runtime-selection.js +136 -0
  999. package/packages/core/runtime/toolchain/actions.js +14 -0
  1000. package/packages/core/runtime/toolchain/user-paths.js +9 -0
  1001. package/packages/core/runtime/toolchain/windows-rust.js +67 -0
  1002. package/packages/core/runtime/workflow-runtime.js +11 -0
  1003. package/packages/core/web/apply-admission-action.js +20 -0
  1004. package/packages/core/web/apply-admission.js +44 -0
  1005. package/packages/core/web/cli/badges.mjs +100 -0
  1006. package/packages/core/web/cli/surface.mjs +6 -0
  1007. package/packages/core/web/commands/web-surface-core.mjs +2603 -0
  1008. package/packages/core/web/commands/web-surface-production-release-pr.mjs +126 -0
  1009. package/packages/core/web/commands/web-surface.mjs +294 -0
  1010. package/packages/core/web/controller-actions.js +45 -0
  1011. package/packages/core/web/controller.js +145 -0
  1012. package/packages/core/web/deployment/apply-action.js +31 -0
  1013. package/packages/core/web/deployment/apply-evidence.js +134 -0
  1014. package/packages/core/web/deployment/apply.js +118 -0
  1015. package/packages/core/web/deployment/cloudfront-wait.js +88 -0
  1016. package/packages/core/web/deployment/plan-files.js +41 -0
  1017. package/packages/core/web/deployment/planning-action.js +28 -0
  1018. package/packages/core/web/deployment/planning.js +126 -0
  1019. package/packages/core/web/deployment/report-action.js +74 -0
  1020. package/packages/core/web/deployment/summary.js +44 -0
  1021. package/packages/core/web/preview-feedback-action.js +26 -0
  1022. package/packages/core/web/preview-feedback.js +40 -0
  1023. package/packages/core/web/production-decision-action.js +42 -0
  1024. package/packages/core/web/production-decision.js +85 -0
  1025. package/packages/core/web/production-intent-action.js +14 -0
  1026. package/packages/core/web/production-intent.js +167 -0
  1027. package/packages/core/web/publication-admission-action.js +92 -0
  1028. package/packages/core/web/publication-admission.js +183 -0
  1029. package/packages/core/web/publication-capability-action.js +22 -0
  1030. package/packages/core/web/publication-capability.js +73 -0
  1031. package/packages/core/web/readme-badges.js +891 -0
  1032. package/packages/core/web/release-feedback.js +414 -0
  1033. package/packages/core/web/release-pr-action.js +47 -0
  1034. package/packages/core/web/release-pr-handoff.js +176 -0
  1035. package/packages/core/web/release-pr-provider.js +295 -0
  1036. package/packages/core/web/release-pr-summary.js +42 -0
  1037. package/packages/core/web/release-pr-transaction.js +158 -0
  1038. package/packages/core/web/release-review-action.js +21 -0
  1039. package/packages/core/web/release-review.js +130 -0
  1040. package/packages/core/web/web-surface-publication-candidate.js +162 -0
  1041. package/packages/core/workflow/admission/actions.js +56 -0
  1042. package/packages/core/workflow/admission/recovery.js +47 -0
  1043. package/packages/core/workflow/admission/review.js +188 -0
  1044. package/packages/core/workflow/admission/transactions.js +60 -0
  1045. package/packages/core/workflow/cli/main.mjs +131 -0
  1046. package/packages/core/workflow/cli/process.mjs +16 -0
  1047. package/packages/core/workflow/commands/buildchain-cli-help.mjs +318 -0
  1048. package/packages/core/workflow/commands/universal-workflow-backflow.mjs +26 -0
  1049. package/packages/core/workflow/commands/universal-workflow-engine.mjs +73 -0
  1050. package/packages/core/workflow/dogfood/actions.js +62 -0
  1051. package/packages/core/workflow/dogfood/readiness.js +74 -0
  1052. package/packages/core/workflow/dogfood/transactions.js +90 -0
  1053. package/packages/core/workflow/engine/action.js +42 -0
  1054. package/packages/core/workflow/engine/conformance.js +93 -0
  1055. package/packages/core/workflow/engine/execution.js +77 -0
  1056. package/packages/core/workflow/engine/identity.js +34 -0
  1057. package/packages/core/workflow/engine/provider-context.js +16 -0
  1058. package/packages/core/workflow/engine/release-environment.js +57 -0
  1059. package/packages/core/workflow/engine/release-evidence.js +39 -0
  1060. package/packages/core/workflow/engine/release-observation.js +97 -0
  1061. package/packages/core/workflow/engine/release-promotion.js +227 -0
  1062. package/packages/core/workflow/event-trust.js +25 -0
  1063. package/packages/core/workflow/installation.js +33 -0
  1064. package/packages/core/workflow/request-rejection.js +3 -0
  1065. package/packages/core/workflow/settlement/actions.js +34 -0
  1066. package/packages/core/workflow/settlement/backflow.js +187 -0
  1067. package/packages/core/workflow/universal-self-dogfood.js +163 -0
  1068. package/packages/core/workflow/universal-workflow-bootstrap.js +586 -0
  1069. package/packages/core/workflow/workflow-taxonomy.mjs +351 -0
  1070. package/scripts/bridge-evidence.mjs +9 -2
  1071. package/scripts/build-domain-wasm.mjs +15 -3
  1072. package/scripts/build-standalone-binary.mjs +1 -375
  1073. package/scripts/check-action-bundles.mjs +14 -25
  1074. package/scripts/check-ci-lane-change-budget.mjs +3 -3
  1075. package/scripts/check-code-layout.mjs +386 -0
  1076. package/scripts/check-core-mechanism-inventory.mjs +17 -16
  1077. package/scripts/check-dev-delivery-actions.mjs +35 -0
  1078. package/scripts/check-floating-consumer-policy-contract.mjs +33 -59
  1079. package/scripts/check-implementation-naming.mjs +2 -23
  1080. package/scripts/check-internal-architecture.mjs +3 -3
  1081. package/scripts/check-inventory.mjs +160 -318
  1082. package/scripts/check-javascript-syntax.mjs +1 -1
  1083. package/scripts/check-maintainability.mjs +25 -21
  1084. package/scripts/check-project-cut-merge-queue-admission.mjs +1 -1
  1085. package/scripts/check-public-dogfood-contract.mjs +166 -43
  1086. package/scripts/check-release-tail-contract.mjs +62 -71
  1087. package/scripts/check-release-topology.mjs +101 -77
  1088. package/scripts/check-runtime-semantic-closure.mjs +5 -8
  1089. package/scripts/check-source-bindings.mjs +54 -0
  1090. package/scripts/check-universal-workflow-bootstrap.mjs +136 -124
  1091. package/scripts/check-workflow-taxonomy.mjs +1 -1
  1092. package/scripts/check-workflows.sh +11 -0
  1093. package/scripts/generate-bootstrap-admission.mjs +32 -0
  1094. package/scripts/generate-bootstrap-recovery.mjs +94 -0
  1095. package/scripts/generate-buildchain-kfd-witnesses.mjs +3 -3
  1096. package/scripts/generate-channel-promotion-workflow.mjs +39 -518
  1097. package/scripts/generate-next-development-guidance.mjs +1 -1
  1098. package/scripts/generate-public-reference.mjs +2 -2
  1099. package/scripts/generate-site-bundle.mjs +42 -43
  1100. package/scripts/generate-tail-reseal-fixture.mjs +108 -0
  1101. package/scripts/generate-workflow-taxonomy.mjs +2 -2
  1102. package/scripts/inventory/binary.mjs +36 -0
  1103. package/scripts/inventory/promotion.mjs +72 -0
  1104. package/scripts/maintainability-domain-metrics.mjs +1 -1
  1105. package/scripts/maintainability-metrics.mjs +37 -37
  1106. package/scripts/maintainability-public-surface.mjs +19 -95
  1107. package/scripts/next-development-self-dogfood-harness.mjs +2 -2
  1108. package/scripts/next-development-self-dogfood.mjs +2 -2
  1109. package/scripts/platform-stage-checkpoint-rehearsal.mjs +33 -201
  1110. package/scripts/public-reference.mjs +0 -187
  1111. package/scripts/publication-rehearsal-fixture.mjs +1 -1
  1112. package/scripts/release-train-self-dogfood.mjs +9 -14
  1113. package/scripts/site-action-audit.mjs +16 -0
  1114. package/scripts/site-capability-metadata.mjs +3 -7
  1115. package/scripts/source-metric-lineage.mjs +17 -0
  1116. package/scripts/stage-capsule-resume-rehearsal.mjs +19 -55
  1117. package/scripts/tail-reseal-macos-rehearsal.mjs +1 -109
  1118. package/scripts/tsup-action.config.mjs +21 -0
  1119. package/scripts/verify-golden-path.mjs +1 -1
  1120. package/scripts/warrant-shadow-plan.mjs +49 -243
  1121. package/scripts/workflow-action-graph.mjs +149 -0
  1122. package/templates/bootstrap-recovery/actions/build/source/admit/action.yml +17 -0
  1123. package/templates/bootstrap-recovery/actions/build/source/admit/dist/index.js +63 -0
  1124. package/templates/bootstrap-recovery/actions/runtime/dependencies/install/action.yml +18 -0
  1125. package/templates/bootstrap-recovery/actions/runtime/dependencies/install/dist/index.js +63 -0
  1126. package/templates/bootstrap-recovery/actions/runtime/environment/prepare/action.yml +21 -0
  1127. package/templates/bootstrap-recovery/actions/workflow/admission/inspect/action.yml +27 -0
  1128. package/templates/bootstrap-recovery/actions/workflow/admission/inspect/dist/index.js +64 -0
  1129. package/templates/bootstrap-recovery/actions/workflow/admission/review/action.yml +15 -0
  1130. package/templates/bootstrap-recovery/actions/workflow/admission/review/dist/index.js +65 -0
  1131. package/templates/bootstrap-recovery/actions/workflow/recovery/admit/action.yml +47 -0
  1132. package/templates/bootstrap-recovery/actions/workflow/recovery/execute/action.yml +48 -0
  1133. package/templates/bootstrap-recovery/actions/workflow/recovery/settle/action.yml +54 -0
  1134. package/templates/bootstrap-recovery/actions/workflow/settlement/seal/action.yml +17 -0
  1135. package/templates/bootstrap-recovery/actions/workflow/settlement/seal/dist/index.js +65 -0
  1136. package/templates/bootstrap-recovery/manifest.json +68 -0
  1137. package/templates/bootstrap-recovery/package.json +9 -0
  1138. package/templates/native-dev-delivery.yml +28 -41
  1139. package/templates/universal-buildchain-bootstrap-recovery.yml +46 -213
  1140. package/templates/universal-buildchain-bootstrap.yml +1 -1
  1141. package/actions/github-artifact-attestation/README.md +0 -10
  1142. package/actions/promote-buildchain-ref/README.md +0 -549
  1143. package/actions/report-buildchain-issue/README.md +0 -107
  1144. package/actions/run-lifecycle/README.md +0 -71
  1145. package/actions/validate-config/README.md +0 -52
  1146. package/architecture/implementation-naming.json +0 -1273
  1147. package/bin/internal/adopter-delivery-cli.mjs +0 -70
  1148. package/bin/internal/cli-options.mjs +0 -79
  1149. package/bin/internal/compatibility-facts-cli.mjs +0 -101
  1150. package/bin/internal/trust-release-cli.mjs +0 -19
  1151. package/bin/internal/trust-release-command-handlers.mjs +0 -14
  1152. package/bin/internal/trust-release-inspection-handlers.mjs +0 -175
  1153. package/bin/internal/trust-release-release-handlers.mjs +0 -332
  1154. package/bin/internal/trust-release-verification-handlers.mjs +0 -306
  1155. package/contracts/fixtures/v4-adopter-delivery-v1/archive-template.json +0 -19
  1156. package/contracts/fixtures/v4-adopter-delivery-v1/bootstrap-positive.json +0 -93
  1157. package/packages/compatibility/adopter-delivery.js +0 -16
  1158. package/packages/compatibility/cross-platform-adopter-qualification.js +0 -12
  1159. package/packages/compatibility/floating-consumer-policy.js +0 -14
  1160. package/packages/compatibility/publication-qualification.js +0 -11
  1161. package/packages/compatibility/publication-rehearsal.js +0 -18
  1162. package/packages/compatibility/runtime-ref-resume-authority.js +0 -13
  1163. package/packages/compatibility/tail-reseal-receipt.js +0 -7
  1164. package/packages/compatibility/tail-reseal.js +0 -11
  1165. package/packages/core/adopter-delivery-parity.js +0 -219
  1166. package/packages/core/adopter-delivery.js +0 -359
  1167. package/packages/core/anchored-version-material.js +0 -281
  1168. package/packages/core/artifact-passport.js +0 -847
  1169. package/packages/core/artifact-verification-envelope.js +0 -500
  1170. package/packages/core/build-facts.js +0 -575
  1171. package/packages/core/buildchain-compatibility-authority.js +0 -336
  1172. package/packages/core/buildchain-compatibility-fact.js +0 -394
  1173. package/packages/core/buildchain-compatibility-facts.json +0 -217
  1174. package/packages/core/buildchain-compatibility-proof.js +0 -566
  1175. package/packages/core/buildchain-config.js +0 -1887
  1176. package/packages/core/buildchain-contract.js +0 -1048
  1177. package/packages/core/buildchain-delivery-bootstrap.js +0 -240
  1178. package/packages/core/buildchain-delivery-infrastructure.js +0 -164
  1179. package/packages/core/buildchain-delivery-self-dogfood.js +0 -395
  1180. package/packages/core/buildchain-domain.wasm +0 -0
  1181. package/packages/core/buildchain-kfd-claims.js +0 -733
  1182. package/packages/core/buildchain-publication-authority.js +0 -118
  1183. package/packages/core/canonical-contracts.js +0 -239
  1184. package/packages/core/ci-lane-change-budget.js +0 -260
  1185. package/packages/core/controller-evidence.js +0 -553
  1186. package/packages/core/cross-platform-adopter-qualification.js +0 -343
  1187. package/packages/core/delivery-warrant-fixture-runner.js +0 -375
  1188. package/packages/core/delivery-warrant-read-candidate.js +0 -286
  1189. package/packages/core/delivery-warrant-semantic-diff-gate.js +0 -351
  1190. package/packages/core/delivery-warrant-shadow-adapter.js +0 -447
  1191. package/packages/core/dev-delivery-authority-candidate.js +0 -270
  1192. package/packages/core/dev-delivery-authority-landing.js +0 -461
  1193. package/packages/core/dev-delivery-authority-state.js +0 -583
  1194. package/packages/core/dev-delivery-candidate-identity.js +0 -169
  1195. package/packages/core/dev-delivery-contract-surface.js +0 -76
  1196. package/packages/core/dev-delivery-native-proof.js +0 -566
  1197. package/packages/core/dev-delivery-proof.js +0 -286
  1198. package/packages/core/dev-delivery-warrant-legacy-recovery.js +0 -248
  1199. package/packages/core/dev-delivery-warrant-native-compatibility.js +0 -33
  1200. package/packages/core/dev-delivery-warrant-state.js +0 -599
  1201. package/packages/core/dev-delivery-warrant.js +0 -598
  1202. package/packages/core/diagnostics.js +0 -1904
  1203. package/packages/core/domain-wasm-artifact.js +0 -7
  1204. package/packages/core/floating-consumer-evidence.js +0 -338
  1205. package/packages/core/floating-consumer-policy.js +0 -571
  1206. package/packages/core/github-artifact-attestation.js +0 -642
  1207. package/packages/core/github-governance-authority.js +0 -1369
  1208. package/packages/core/homebrew.js +0 -414
  1209. package/packages/core/kfd-agent-hub.js +0 -496
  1210. package/packages/core/kfd.js +0 -966
  1211. package/packages/core/kfd2-product-claims.js +0 -454
  1212. package/packages/core/kfd3-surface-register.js +0 -924
  1213. package/packages/core/legacy-kfd-adopter-driver.js +0 -167
  1214. package/packages/core/next-development-projection.js +0 -310
  1215. package/packages/core/next-development-transition.js +0 -737
  1216. package/packages/core/oci-compose-qualification.js +0 -143
  1217. package/packages/core/oci-publication-bundle.js +0 -281
  1218. package/packages/core/package-manager.js +0 -323
  1219. package/packages/core/paper-agent-entry.js +0 -396
  1220. package/packages/core/paper-fleet.js +0 -313
  1221. package/packages/core/paper-npm-bootstrap.js +0 -492
  1222. package/packages/core/paper-repository.js +0 -214
  1223. package/packages/core/paper-runtime-channels.js +0 -348
  1224. package/packages/core/paper-scaffold-content.js +0 -574
  1225. package/packages/core/paper.js +0 -2478
  1226. package/packages/core/partial-mutation-recovery-qualification.js +0 -18
  1227. package/packages/core/platform-stage-checkpoints.js +0 -471
  1228. package/packages/core/product-publication.js +0 -59
  1229. package/packages/core/protected-publication-source.js +0 -91
  1230. package/packages/core/provider-operation-journal.js +0 -62
  1231. package/packages/core/provider-readback-idempotency.js +0 -309
  1232. package/packages/core/public-export-compatibility.js +0 -33
  1233. package/packages/core/public-surface-audit.js +0 -273
  1234. package/packages/core/public-surface-cli.js +0 -128
  1235. package/packages/core/publication-artifact-candidate.js +0 -128
  1236. package/packages/core/publication-artifact.js +0 -641
  1237. package/packages/core/publication-authority.js +0 -1163
  1238. package/packages/core/publication-development.js +0 -72
  1239. package/packages/core/publication-package.js +0 -252
  1240. package/packages/core/publication-rehearsal-capsule.js +0 -468
  1241. package/packages/core/publication-rehearsal-projection.js +0 -104
  1242. package/packages/core/publication-rehearsal-runtime.js +0 -190
  1243. package/packages/core/publication-rehearsal.js +0 -481
  1244. package/packages/core/publication-reproducibility.js +0 -947
  1245. package/packages/core/published-delivery-authority.js +0 -266
  1246. package/packages/core/readme-badges.js +0 -893
  1247. package/packages/core/release-activation-shadow.js +0 -32
  1248. package/packages/core/release-blocker-priority.js +0 -192
  1249. package/packages/core/release-candidate-recovery.js +0 -595
  1250. package/packages/core/release-candidate.js +0 -591
  1251. package/packages/core/release-invocation.js +0 -64
  1252. package/packages/core/release-line-bootstrap.js +0 -297
  1253. package/packages/core/release-line-dry-run.js +0 -303
  1254. package/packages/core/release-passport-contract.js +0 -479
  1255. package/packages/core/release-passport.js +0 -2884
  1256. package/packages/core/release-tail-compatibility.js +0 -60
  1257. package/packages/core/release-tail-provider-adapters.js +0 -461
  1258. package/packages/core/release-tail-provider-plane.js +0 -248
  1259. package/packages/core/runtime-selector-persistence.js +0 -228
  1260. package/packages/core/stable-publication-fence.js +0 -28
  1261. package/packages/core/stage-capsule-local-store.js +0 -428
  1262. package/packages/core/stage-capsule-qualification-campaign.js +0 -511
  1263. package/packages/core/stage-capsule-qualification.js +0 -455
  1264. package/packages/core/stage-capsule-resume-planner.js +0 -397
  1265. package/packages/core/stage-capsule-store.js +0 -404
  1266. package/packages/core/stage-capsule.js +0 -319
  1267. package/packages/core/tail-reseal-github.js +0 -178
  1268. package/packages/core/tail-reseal-receipt.js +0 -225
  1269. package/packages/core/tail-reseal.js +0 -594
  1270. package/packages/core/universal-workflow-bootstrap.js +0 -586
  1271. package/packages/core/web-surface-publication-candidate.js +0 -162
  1272. package/packages/core/workflow-yaml-contract.js +0 -342
  1273. package/scripts/aggregate-build-summary.mjs +0 -187
  1274. package/scripts/aggregate-diagnostics-summary.mjs +0 -54
  1275. package/scripts/anchored-version-material.mjs +0 -42
  1276. package/scripts/architecture.mjs +0 -610
  1277. package/scripts/artifact-relay-s3.mjs +0 -539
  1278. package/scripts/artifact-signing-controller-core.mjs +0 -525
  1279. package/scripts/artifact-signing-controller.mjs +0 -302
  1280. package/scripts/artifact-signing-delegation.mjs +0 -316
  1281. package/scripts/assemble-binary-release-admission.mjs +0 -213
  1282. package/scripts/assemble-publication-artifact-admission.mjs +0 -200
  1283. package/scripts/assemble-self-publication-admission.mjs +0 -201
  1284. package/scripts/assemble-web-surface-publication-admission.mjs +0 -204
  1285. package/scripts/audit-github-governance.mjs +0 -493
  1286. package/scripts/audit-publication-control-plane.mjs +0 -527
  1287. package/scripts/auditable-demo-bundle-verification.mjs +0 -148
  1288. package/scripts/auditable-demo-platform.mjs +0 -600
  1289. package/scripts/auditable-demo-presentation.mjs +0 -83
  1290. package/scripts/auditable-demo-renditions.mjs +0 -399
  1291. package/scripts/auditable-demo-transport-smoke.mjs +0 -176
  1292. package/scripts/auditable-demo.mjs +0 -1324
  1293. package/scripts/aws-codebuild-toolchain.mjs +0 -285
  1294. package/scripts/aws-macos-jit-controller-runtime.mjs +0 -82
  1295. package/scripts/aws-runner-burst-core.mjs +0 -248
  1296. package/scripts/aws-runner-burst.mjs +0 -79
  1297. package/scripts/aws-windows-jit-campaign.mjs +0 -202
  1298. package/scripts/aws-windows-jit-controller.mjs +0 -578
  1299. package/scripts/binary-publication-evidence.mjs +0 -133
  1300. package/scripts/bridge-bootstrap.mjs +0 -137
  1301. package/scripts/build-contract-core.mjs +0 -1216
  1302. package/scripts/buildchain-channel-router.mjs +0 -249
  1303. package/scripts/buildchain-cli-help.mjs +0 -321
  1304. package/scripts/buildchain-contract-lock.mjs +0 -184
  1305. package/scripts/buildchain-patrol.mjs +0 -280
  1306. package/scripts/compiler-cache-evidence.mjs +0 -304
  1307. package/scripts/consumer-policy.mjs +0 -231
  1308. package/scripts/controller-evidence.mjs +0 -208
  1309. package/scripts/copy-domain-wasm.mjs +0 -14
  1310. package/scripts/create-github-artifact-attestation-policy.mjs +0 -62
  1311. package/scripts/create-release-bundle.mjs +0 -167
  1312. package/scripts/cross-platform-adopter-qualification.mjs +0 -228
  1313. package/scripts/declarative-promotion-admission.mjs +0 -45
  1314. package/scripts/dev-alpha-candidate-patrol.mjs +0 -1197
  1315. package/scripts/dev-delivery-authority-command-adapters.mjs +0 -206
  1316. package/scripts/dev-delivery-authority-provider.mjs +0 -28
  1317. package/scripts/dev-delivery-authority.mjs +0 -490
  1318. package/scripts/dev-delivery-native-run.mjs +0 -177
  1319. package/scripts/dev-delivery-process-boundary.mjs +0 -260
  1320. package/scripts/dev-delivery-proof.mjs +0 -258
  1321. package/scripts/dev-delivery-provider-heartbeat.mjs +0 -215
  1322. package/scripts/dev-delivery-source-proof-replay.mjs +0 -153
  1323. package/scripts/dev-delivery-source-proof-reuse.mjs +0 -548
  1324. package/scripts/dev-delivery-two-phase-resume.mjs +0 -345
  1325. package/scripts/dev-delivery-two-phase.mjs +0 -573
  1326. package/scripts/dev-delivery-warrant-options.mjs +0 -298
  1327. package/scripts/dev-delivery-warrant-store.mjs +0 -316
  1328. package/scripts/dev-delivery-warrant-transition.mjs +0 -109
  1329. package/scripts/dev-delivery-warrant.mjs +0 -559
  1330. package/scripts/dev-merge-queue.mjs +0 -536
  1331. package/scripts/dev-pr-auto-merge.mjs +0 -1222
  1332. package/scripts/dev-pr-delivery-warrant.mjs +0 -467
  1333. package/scripts/dev-pr-prequeue-guard.mjs +0 -381
  1334. package/scripts/dev-qualification-patrol.mjs +0 -594
  1335. package/scripts/dispatch-artifact-signing-authority.mjs +0 -407
  1336. package/scripts/engineering-housekeeper-workflow.mjs +0 -401
  1337. package/scripts/ensure-github-release.mjs +0 -199
  1338. package/scripts/finalize-native-artifact-signing-result.mjs +0 -272
  1339. package/scripts/generate-channel-build-workflow.mjs +0 -69
  1340. package/scripts/generate-release-candidate-passport.mjs +0 -285
  1341. package/scripts/generate-universal-workflow-facades.mjs +0 -499
  1342. package/scripts/git-fetch-process-tree.mjs +0 -175
  1343. package/scripts/host-adapter.mjs +0 -182
  1344. package/scripts/implementation-references.mjs +0 -25
  1345. package/scripts/import-artifact-signing-results.mjs +0 -135
  1346. package/scripts/infra-contract-core.mjs +0 -1032
  1347. package/scripts/infra-contract.mjs +0 -345
  1348. package/scripts/init-repo.mjs +0 -518
  1349. package/scripts/inspect-artifact-signing-requests.mjs +0 -157
  1350. package/scripts/installer-publication.mjs +0 -361
  1351. package/scripts/lifecycle-substage-evidence.mjs +0 -274
  1352. package/scripts/locked-source-checkout.mjs +0 -595
  1353. package/scripts/materialize-artifact-signing-request.mjs +0 -66
  1354. package/scripts/merge-artifact-signing-results.mjs +0 -76
  1355. package/scripts/next-development-review.mjs +0 -331
  1356. package/scripts/next-development-transition.mjs +0 -47
  1357. package/scripts/npm-publish-dry-run.mjs +0 -182
  1358. package/scripts/npm-publish-transaction.mjs +0 -331
  1359. package/scripts/observed-evidence.mjs +0 -311
  1360. package/scripts/oci-compose-preview.mjs +0 -261
  1361. package/scripts/paper-agent-cli.mjs +0 -35
  1362. package/scripts/paper-work-fleet-cli.mjs +0 -594
  1363. package/scripts/paper.mjs +0 -644
  1364. package/scripts/product-publication-intent.mjs +0 -129
  1365. package/scripts/promotion-channel-router.mjs +0 -139
  1366. package/scripts/promotion-identity-resolver.mjs +0 -129
  1367. package/scripts/publication-artifact-candidate.mjs +0 -122
  1368. package/scripts/publication-artifact.mjs +0 -67
  1369. package/scripts/publication-candidate-kind.mjs +0 -93
  1370. package/scripts/publication-candidate-sealer.mjs +0 -119
  1371. package/scripts/publication-package.mjs +0 -38
  1372. package/scripts/publication-registry-hydrate.mjs +0 -216
  1373. package/scripts/publication-reproducibility.mjs +0 -62
  1374. package/scripts/publication-settlement.mjs +0 -217
  1375. package/scripts/publish-source-ref-resolver.mjs +0 -113
  1376. package/scripts/reconcile-github-governance.mjs +0 -689
  1377. package/scripts/reconcile-release-governance.mjs +0 -368
  1378. package/scripts/release-asset-client.mjs +0 -91
  1379. package/scripts/release-candidate-adapter.mjs +0 -41
  1380. package/scripts/release-candidate-anchor-provenance.mjs +0 -99
  1381. package/scripts/release-candidate-resolver.mjs +0 -842
  1382. package/scripts/release-finalization-review.mjs +0 -53
  1383. package/scripts/release-line-dry-run.mjs +0 -53
  1384. package/scripts/release-line-policy.mjs +0 -231
  1385. package/scripts/release-propagation.mjs +0 -411
  1386. package/scripts/release-tail.mjs +0 -178
  1387. package/scripts/release-transaction.mjs +0 -212
  1388. package/scripts/resolve-artifact-coordinates.mjs +0 -174
  1389. package/scripts/resolve-artifact-transfer-mode.mjs +0 -126
  1390. package/scripts/resolve-build-configuration.mjs +0 -105
  1391. package/scripts/resolve-build-contract.mjs +0 -96
  1392. package/scripts/resolve-publish-gate.mjs +0 -33
  1393. package/scripts/resolve-publish-source.mjs +0 -99
  1394. package/scripts/resume-from-candidate-run.mjs +0 -1117
  1395. package/scripts/route-offline-runners.mjs +0 -237
  1396. package/scripts/run-candidate-body-prefix-renderer.mjs +0 -187
  1397. package/scripts/run-lifecycle-core.mjs +0 -850
  1398. package/scripts/run-lifecycle.mjs +0 -56
  1399. package/scripts/runtime-ref-core.mjs +0 -171
  1400. package/scripts/seal-artifact-signing-requests.mjs +0 -431
  1401. package/scripts/seal-macos-credential-input.mjs +0 -135
  1402. package/scripts/shifu-gate-profile.mjs +0 -374
  1403. package/scripts/sign-detached-artifact-requests.mjs +0 -237
  1404. package/scripts/source-verification-evidence.mjs +0 -344
  1405. package/scripts/stable-candidate-patrol.mjs +0 -527
  1406. package/scripts/stable-candidate-policy.mjs +0 -25
  1407. package/scripts/stable-candidate-qualification.mjs +0 -358
  1408. package/scripts/stable-release-gate.mjs +0 -351
  1409. package/scripts/stage-capsule-qualification.mjs +0 -528
  1410. package/scripts/tail-reseal.mjs +0 -416
  1411. package/scripts/universal-facade-maintainability.mjs +0 -91
  1412. package/scripts/universal-workflow-backflow.mjs +0 -212
  1413. package/scripts/universal-workflow-engine.mjs +0 -620
  1414. package/scripts/universal-workflow-self-dogfood.mjs +0 -212
  1415. package/scripts/validate-package-manager-contract.mjs +0 -24
  1416. package/scripts/verify-artifact-signing-results.mjs +0 -124
  1417. package/scripts/verify-publish-channel-ref.mjs +0 -125
  1418. package/scripts/verify-publish-source-lock.mjs +0 -37
  1419. package/scripts/verify-release-pr.mjs +0 -34
  1420. package/scripts/verify-version-state-delta.mjs +0 -175
  1421. package/scripts/verify-web-surface-publication-capability.mjs +0 -78
  1422. package/scripts/web-surface-core.mjs +0 -2603
  1423. package/scripts/web-surface-production-decision.mjs +0 -158
  1424. package/scripts/web-surface-production-release-pr.mjs +0 -712
  1425. package/scripts/web-surface-release-feedback.mjs +0 -358
  1426. package/scripts/web-surface-release-pr-review.mjs +0 -187
  1427. package/scripts/web-surface.mjs +0 -460
  1428. package/scripts/workflow-call-contract.mjs +0 -133
  1429. package/scripts/workflow-friction-report.mjs +0 -375
  1430. package/scripts/workflow-taxonomy.mjs +0 -507
  1431. /package/actions/{macos-credential-island → build/credential/macos-island}/README.md +0 -0
  1432. /package/actions/{release-candidate-promote → release/promotion/candidate}/README.md +0 -0
  1433. /package/actions/{release-tail → release/tail/settle}/README.md +0 -0
  1434. /package/packages/core/{adopter-delivery-gate.js → adoption/adopter-delivery-gate.js} +0 -0
  1435. /package/packages/core/{adopter-delivery-json.js → adoption/adopter-delivery-json.js} +0 -0
  1436. /package/packages/core/{adopter-delivery-passport.js → adoption/adopter-delivery-passport.js} +0 -0
  1437. /package/packages/core/{adopter-delivery-vectors.js → adoption/adopter-delivery-vectors.js} +0 -0
  1438. /package/packages/core/{adopter-delivery-vectors.json → adoption/adopter-delivery-vectors.json} +0 -0
  1439. /package/packages/core/{buildchain-agent-manuals.js → adoption/buildchain-agent-manuals.js} +0 -0
  1440. /package/packages/core/{kfd-adopter-category-driver.js → adoption/kfd-adopter-category-driver.js} +0 -0
  1441. /package/packages/core/{kfd-adopter-manifest.js → adoption/kfd-adopter-manifest.js} +0 -0
  1442. /package/packages/core/{kfd-gate.js → adoption/kfd-gate.js} +0 -0
  1443. /package/packages/core/{kfd-product-gates.js → adoption/kfd-product-gates.js} +0 -0
  1444. /package/packages/core/{artifact-signing-result.js → build/artifact-signing-result.js} +0 -0
  1445. /package/packages/core/{artifact-signing.js → build/artifact-signing.js} +0 -0
  1446. /package/packages/core/{build-configuration.js → build/build-configuration.js} +0 -0
  1447. /package/{scripts → packages/core/build/commands}/resolve-artifact-signing-upload-route.mjs +0 -0
  1448. /package/packages/core/{detached-artifact-signature.js → build/detached-artifact-signature.js} +0 -0
  1449. /package/{scripts/gate-profile-core.mjs → packages/core/build/gate/contracts.js} +0 -0
  1450. /package/packages/core/{portable-dev-cache.js → build/portable-dev-cache.js} +0 -0
  1451. /package/packages/core/{buildchain-channel-identity.js → consumer/buildchain-channel-identity.js} +0 -0
  1452. /package/packages/core/{floating-consumer-release-passport.js → consumer/floating-consumer-release-passport.js} +0 -0
  1453. /package/packages/core/{runtime-ref-resume-authority.js → consumer/runtime-ref-resume-authority.js} +0 -0
  1454. /package/packages/core/{buildchain-layout.js → contracts/buildchain-layout.js} +0 -0
  1455. /package/{bin/internal → packages/core/contracts}/command-registry.mjs +0 -0
  1456. /package/packages/core/{kungfu-temporal-fact.js → contracts/kungfu-temporal-fact.js} +0 -0
  1457. /package/packages/core/{surface-manifest.js → contracts/surface-manifest.js} +0 -0
  1458. /package/packages/core/{workflow-call-contract.js → contracts/workflow-call-contract.js} +0 -0
  1459. /package/{scripts → packages/core/dev-delivery/commands}/project-cut-merge-queue-admission.mjs +0 -0
  1460. /package/packages/core/{dev-delivery-authority-evidence.js → dev-delivery/dev-delivery-authority-evidence.js} +0 -0
  1461. /package/packages/core/{dev-delivery-authority-observation.js → dev-delivery/dev-delivery-authority-observation.js} +0 -0
  1462. /package/packages/core/{dev-delivery-authority-qualification.js → dev-delivery/dev-delivery-authority-qualification.js} +0 -0
  1463. /package/packages/core/{dev-delivery-authority-settlement.js → dev-delivery/dev-delivery-authority-settlement.js} +0 -0
  1464. /package/packages/core/{dev-delivery-common.js → dev-delivery/dev-delivery-common.js} +0 -0
  1465. /package/packages/core/{dev-delivery-execution-failure.js → dev-delivery/dev-delivery-execution-failure.js} +0 -0
  1466. /package/packages/core/{dev-delivery-execution-transfer.js → dev-delivery/dev-delivery-execution-transfer.js} +0 -0
  1467. /package/packages/core/{dev-delivery-landing-admission-core.js → dev-delivery/dev-delivery-landing-admission-core.js} +0 -0
  1468. /package/packages/core/{dev-delivery-landing-readback.js → dev-delivery/dev-delivery-landing-readback.js} +0 -0
  1469. /package/packages/core/{dev-delivery-landing-terminal-evidence.js → dev-delivery/dev-delivery-landing-terminal-evidence.js} +0 -0
  1470. /package/packages/core/{dev-delivery-landing-testing-port.js → dev-delivery/dev-delivery-landing-testing-port.js} +0 -0
  1471. /package/packages/core/{dev-delivery-native-execution.js → dev-delivery/dev-delivery-native-execution.js} +0 -0
  1472. /package/packages/core/{dev-delivery-process-boundary.js → dev-delivery/dev-delivery-process-boundary.js} +0 -0
  1473. /package/packages/core/{dev-delivery-provider-attempt.js → dev-delivery/dev-delivery-provider-attempt.js} +0 -0
  1474. /package/packages/core/{dev-delivery-provider-heartbeat.js → dev-delivery/dev-delivery-provider-heartbeat.js} +0 -0
  1475. /package/packages/core/{dev-delivery-warrant-cancellation.js → dev-delivery/dev-delivery-warrant-cancellation.js} +0 -0
  1476. /package/packages/core/{dev-delivery-warrant-qualification.js → dev-delivery/dev-delivery-warrant-qualification.js} +0 -0
  1477. /package/packages/core/{dev-delivery-warrant-settlement.js → dev-delivery/dev-delivery-warrant-settlement.js} +0 -0
  1478. /package/packages/core/{dev-delivery-writer-protocol-transition.js → dev-delivery/dev-delivery-writer-protocol-transition.js} +0 -0
  1479. /package/packages/core/{engineering-housekeeper-github-client.js → governance/engineering-housekeeper-github-client.js} +0 -0
  1480. /package/packages/core/{engineering-housekeeper-github.js → governance/engineering-housekeeper-github.js} +0 -0
  1481. /package/packages/core/{engineering-housekeeper.js → governance/engineering-housekeeper.js} +0 -0
  1482. /package/packages/core/{issue-reporting.js → governance/issue-reporting.js} +0 -0
  1483. /package/packages/core/{cache-evidence.js → observability/cache-evidence.js} +0 -0
  1484. /package/packages/core/{candidate-timeline.js → observability/candidate-timeline.js} +0 -0
  1485. /package/packages/core/{logging.js → observability/logging.js} +0 -0
  1486. /package/packages/core/{paper-work.js → paper/paper-work.js} +0 -0
  1487. /package/{scripts → packages/core/providers/commands}/aws-macos-jit-controller-core.mjs +0 -0
  1488. /package/{scripts → packages/core/providers/commands}/aws-macos-jit-controller.mjs +0 -0
  1489. /package/{scripts → packages/core/providers/commands}/aws-macos-jit-core.mjs +0 -0
  1490. /package/{scripts → packages/core/providers/commands}/aws-macos-jit-job-controller.mjs +0 -0
  1491. /package/{scripts → packages/core/providers/commands}/aws-macos-jit.mjs +0 -0
  1492. /package/{scripts → packages/core/providers/commands}/aws-windows-jit-campaign-core.mjs +0 -0
  1493. /package/{scripts → packages/core/providers/commands}/aws-windows-jit-controller-core.mjs +0 -0
  1494. /package/{scripts → packages/core/providers/commands}/aws-windows-jit-core.mjs +0 -0
  1495. /package/{scripts → packages/core/providers/commands}/aws-windows-jit.mjs +0 -0
  1496. /package/{scripts → packages/core/providers/commands}/github-output.mjs +0 -0
  1497. /package/packages/core/{oci-publication-graph.js → publication/oci-publication-graph.js} +0 -0
  1498. /package/packages/core/{publication-control-plane-audit.js → publication/publication-control-plane-audit.js} +0 -0
  1499. /package/packages/core/{publication-qualification.js → publication/publication-qualification.js} +0 -0
  1500. /package/packages/core/{publication-rehearsal-provider-bindings.js → publication/publication-rehearsal-provider-bindings.js} +0 -0
  1501. /package/packages/core/{publication-sealed-bundle.js → publication/publication-sealed-bundle.js} +0 -0
  1502. /package/packages/core/{channel-candidate.js → release/channel-candidate.js} +0 -0
  1503. /package/packages/core/{channel-promotion-baseline.js → release/channel-promotion-baseline.js} +0 -0
  1504. /package/{scripts → packages/core/release/commands}/promotion-routing-evidence.mjs +0 -0
  1505. /package/packages/core/{dev-alpha-active-release-train.js → release/dev-alpha-active-release-train.js} +0 -0
  1506. /package/packages/core/{dev-alpha-candidate-selection.js → release/dev-alpha-candidate-selection.js} +0 -0
  1507. /package/packages/core/{next-development-candidate-reservation.js → release/next-development-candidate-reservation.js} +0 -0
  1508. /package/packages/core/{next-development-controller.js → release/next-development-controller.js} +0 -0
  1509. /package/packages/core/{publish-transaction.js → release/publish-transaction.js} +0 -0
  1510. /package/packages/core/{release-activation-transaction.js → release/release-activation-transaction.js} +0 -0
  1511. /package/packages/core/{release-propagation-agent-entry.js → release/release-propagation-agent-entry.js} +0 -0
  1512. /package/packages/core/{release-propagation-capture.js → release/release-propagation-capture.js} +0 -0
  1513. /package/packages/core/{release-propagation-common.js → release/release-propagation-common.js} +0 -0
  1514. /package/packages/core/{release-propagation-execution-profile.js → release/release-propagation-execution-profile.js} +0 -0
  1515. /package/packages/core/{release-propagation-pickup.js → release/release-propagation-pickup.js} +0 -0
  1516. /package/packages/core/{release-propagation-push.js → release/release-propagation-push.js} +0 -0
  1517. /package/packages/core/{release-propagation-release.js → release/release-propagation-release.js} +0 -0
  1518. /package/packages/core/{release-propagation-stage-evidence.js → release/release-propagation-stage-evidence.js} +0 -0
  1519. /package/packages/core/{release-propagation-work-capture.js → release/release-propagation-work-capture.js} +0 -0
  1520. /package/packages/core/{release-propagation-work-constants.js → release/release-propagation-work-constants.js} +0 -0
  1521. /package/packages/core/{release-propagation-work-control.js → release/release-propagation-work-control.js} +0 -0
  1522. /package/packages/core/{release-propagation-work-transitions.js → release/release-propagation-work-transitions.js} +0 -0
  1523. /package/packages/core/{release-propagation-work.js → release/release-propagation-work.js} +0 -0
  1524. /package/packages/core/{release-propagation.js → release/release-propagation.js} +0 -0
  1525. /package/packages/core/{release-tail-product-capabilities.js → release/release-tail-product-capabilities.js} +0 -0
  1526. /package/packages/core/{release-train.js → release/release-train.js} +0 -0
  1527. /package/packages/core/{self-dogfood-version.js → release/self-dogfood-version.js} +0 -0
  1528. /package/packages/core/{stable-candidate-ledger.js → release/stable-candidate-ledger.js} +0 -0
  1529. /package/packages/core/{stable-release-gate.js → release/stable-release-gate.js} +0 -0
  1530. /package/packages/core/{tail-reseal-contract.js → release/tail-reseal-contract.js} +0 -0
  1531. /package/packages/core/{domain-wasm.js → runtime/domain-wasm.js} +0 -0
  1532. /package/packages/core/{spawn-command.js → runtime/spawn-command.js} +0 -0
  1533. /package/packages/core/{badges.js → web/badges.js} +0 -0
  1534. /package/{scripts → packages/core/web/commands}/web-surface-cloudfront-rewrite.mjs +0 -0
  1535. /package/{scripts → packages/core/web/commands}/web-surface-immutable-object.mjs +0 -0
  1536. /package/{scripts → packages/core/web/commands}/web-surface-routing.mjs +0 -0
@@ -1,1324 +0,0 @@
1
- #!/usr/bin/env node
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
- import crypto from "node:crypto";
5
- import fs from "node:fs";
6
- import os from "node:os";
7
- import path from "node:path";
8
- import { spawnSync } from "node:child_process";
9
- import { fileURLToPath } from "node:url";
10
- import { readRendererManifest, validateRendererCompositionInputs, validateRenditionSet, validateTerminalCapture } from "./auditable-demo-renditions.mjs";
11
-
12
- const UTF8 = new TextDecoder("utf-8", { fatal: true });
13
- const IMAGE_PATTERN = /^[a-z0-9][a-z0-9./_-]*@sha256:[0-9a-f]{64}$/;
14
- const DIGEST_PATTERN = /^sha256:[0-9a-f]{64}$/;
15
- const MAX_BUNDLE_MEMBER_BYTES = 8 * 1024 * 1024;
16
- const SCRIPT_DIRECTORY = path.dirname(fileURLToPath(import.meta.url));
17
- const MEDIA_PROFILE_CATALOG = path.resolve(
18
- SCRIPT_DIRECTORY,
19
- "../contracts/auditable-demo-media-profiles-v1.json",
20
- );
21
- const REQUIRED_ADAPTER_FILES = [
22
- "complete-transcript.txt",
23
- "public-projection.json",
24
- "scene.json",
25
- ];
26
- const OPTIONAL_ADAPTER_FILES = [
27
- "terminal-capture.json",
28
- "complete-transcript-720p.txt",
29
- "public-projection-720p.json",
30
- "scene-720p.json",
31
- "terminal-capture-720p.json",
32
- "rendition-set.json",
33
- ];
34
- const MAX_TERMINAL_CAPTURE_BYTES = 4 * 1024 * 1024;
35
- const MAX_TERMINAL_CAPTURE_EVENTS = 10_000;
36
- const STANDARD_MAX_DURATION_MS = 60_000;
37
- const LONG_FORM_MAX_DURATION_MS = 180_000;
38
- const LONG_FORM_MAX_FPS = 10;
39
- const MAX_RENDER_FRAMES = 1_800;
40
-
41
- function invariant(condition, message) {
42
- if (!condition) throw new Error(message);
43
- }
44
-
45
- function stableJson(value) {
46
- const canonical = (item) => {
47
- if (Array.isArray(item)) return item.map(canonical);
48
- if (!item || typeof item !== "object") return item;
49
- return Object.fromEntries(Object.keys(item).sort().map((key) => [key, canonical(item[key])]));
50
- };
51
- return `${JSON.stringify(canonical(value), null, 2)}\n`;
52
- }
53
-
54
- function sha256(bytes) {
55
- return `sha256:${crypto.createHash("sha256").update(bytes).digest("hex")}`;
56
- }
57
-
58
- function readRegular(filePath, label, maximumBytes = 8 * 1024 * 1024) {
59
- const metadata = fs.lstatSync(filePath);
60
- invariant(metadata.isFile() && !metadata.isSymbolicLink(), `${label} must be a regular non-symlink file`);
61
- invariant(metadata.size <= maximumBytes, `${label} exceeds ${maximumBytes} bytes`);
62
- return fs.readFileSync(filePath);
63
- }
64
-
65
- function decodeUtf8(bytes, label) {
66
- try {
67
- return UTF8.decode(bytes);
68
- } catch {
69
- throw new Error(`${label} must be valid UTF-8`);
70
- }
71
- }
72
-
73
- function readJson(filePath, label) {
74
- try {
75
- return JSON.parse(decodeUtf8(readRegular(filePath, label), label));
76
- } catch (error) {
77
- if (error instanceof SyntaxError) throw new Error(`${label} must be valid JSON`);
78
- throw error;
79
- }
80
- }
81
-
82
- function writeJson(filePath, value) {
83
- fs.writeFileSync(filePath, stableJson(value));
84
- }
85
-
86
- function resolveInside(root, relativePath, label) {
87
- invariant(typeof relativePath === "string" && relativePath.length > 0, `${label} is required`);
88
- invariant(!path.isAbsolute(relativePath), `${label} must be repository-relative`);
89
- const resolvedRoot = path.resolve(root);
90
- const resolved = path.resolve(resolvedRoot, relativePath);
91
- const relation = path.relative(resolvedRoot, resolved);
92
- invariant(relation && !relation.startsWith("..") && !path.isAbsolute(relation), `${label} escapes its root`);
93
- return resolved;
94
- }
95
-
96
- function ensureEmptyDirectory(directory, label) {
97
- fs.mkdirSync(directory, { recursive: true });
98
- const metadata = fs.lstatSync(directory);
99
- invariant(metadata.isDirectory() && !metadata.isSymbolicLink(), `${label} must be a non-symlink directory`);
100
- invariant(fs.readdirSync(directory).length === 0, `${label} must be initially empty`);
101
- }
102
-
103
- function listFiles(root, prefix = "") {
104
- const directory = path.join(root, prefix);
105
- const entries = fs.readdirSync(directory, { withFileTypes: true }).sort((left, right) =>
106
- left.name.localeCompare(right.name, "en"),
107
- );
108
- const files = [];
109
- for (const entry of entries) {
110
- invariant(!entry.isSymbolicLink(), `bundle member must not be a symlink: ${path.join(prefix, entry.name)}`);
111
- const relative = path.join(prefix, entry.name);
112
- if (entry.isDirectory()) {
113
- files.push(...listFiles(root, relative));
114
- } else {
115
- invariant(entry.isFile(), `bundle member must be a regular file: ${relative}`);
116
- files.push(relative.split(path.sep).join("/"));
117
- }
118
- }
119
- return files;
120
- }
121
-
122
- function writeChecksums(root, checksumName = "checksums.sha256") {
123
- const names = listFiles(root).filter((name) => name !== checksumName);
124
- const rows = names.map((name) => `${sha256(fs.readFileSync(path.join(root, name))).slice(7)} ${name}`);
125
- const bytes = `${rows.join("\n")}\n`;
126
- fs.writeFileSync(path.join(root, checksumName), bytes);
127
- return sha256(Buffer.from(bytes));
128
- }
129
-
130
- function verifyChecksums(root, checksumName = "checksums.sha256", options = {}) {
131
- const bytes = readRegular(path.join(root, checksumName), checksumName);
132
- const text = decodeUtf8(bytes, checksumName);
133
- invariant(text.endsWith("\n"), `${checksumName} must end with a newline`);
134
- const rows = text.slice(0, -1).split("\n").filter(Boolean);
135
- const declared = new Set();
136
- for (const row of rows) {
137
- const match = /^([0-9a-f]{64}) ([^\0\r\n]+)$/.exec(row);
138
- invariant(match, `invalid checksum row: ${row}`);
139
- const member = match[2];
140
- const target = resolveInside(root, member, "checksum member");
141
- invariant(!declared.has(member), `duplicate checksum member: ${member}`);
142
- declared.add(member);
143
- const maximumBytes = options.allowLongFormRendererManifest && member === "manifest.json"
144
- ? 32 * 1024 * 1024
145
- : MAX_BUNDLE_MEMBER_BYTES;
146
- invariant(
147
- sha256(readRegular(target, member, maximumBytes)).slice(7) === match[1],
148
- `checksum mismatch: ${member}`,
149
- );
150
- }
151
- const actual = listFiles(root).filter((name) => name !== checksumName);
152
- invariant(
153
- actual.length === declared.size && actual.every((name) => declared.has(name)),
154
- `${checksumName} must cover every bundle member exactly once`,
155
- );
156
- return sha256(bytes);
157
- }
158
-
159
- function exactKeys(value, required, optional, label) {
160
- invariant(value && typeof value === "object" && !Array.isArray(value), `${label} must be an object`);
161
- const allowed = new Set([...required, ...optional]);
162
- for (const key of Object.keys(value)) invariant(allowed.has(key), `${label}.${key} is not declared`);
163
- for (const key of required) invariant(key in value, `${label}.${key} is required`);
164
- }
165
-
166
- function integer(value, minimum, maximum, label) {
167
- invariant(Number.isInteger(value) && value >= minimum && value <= maximum, `${label} is out of range`);
168
- return value;
169
- }
170
-
171
- function text(value, minimum, maximum, label) {
172
- invariant(typeof value === "string" && value.length >= minimum && value.length <= maximum, `${label} is invalid`);
173
- return value;
174
- }
175
-
176
- function decodeBase64(value, label) {
177
- invariant(
178
- typeof value === "string"
179
- && value.length > 0
180
- && value.length <= MAX_TERMINAL_CAPTURE_BYTES * 2
181
- && /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(value),
182
- `${label} must be canonical base64`,
183
- );
184
- const decoded = Buffer.from(value, "base64");
185
- invariant(decoded.toString("base64") === value, `${label} must be canonical base64`);
186
- return decoded;
187
- }
188
-
189
- function validateScene(value) {
190
- exactKeys(
191
- value,
192
- ["schema", "id", "width", "height", "fps", "durationMs", "title"],
193
- ["durationClass", "compositionMode", "commandLabel", "background", "accent"],
194
- "scene",
195
- );
196
- invariant(value.schema === "build-images.demo-scene/v1", "unsupported scene schema");
197
- invariant(/^[a-z0-9][a-z0-9._-]{0,63}$/.test(value.id), "scene.id is invalid");
198
- integer(value.width, 640, 1920, "scene.width");
199
- integer(value.height, 360, 1080, "scene.height");
200
- const durationClass = value.durationClass ?? "standard";
201
- invariant(durationClass === "standard" || durationClass === "long-form", "scene.durationClass is invalid");
202
- const compositionMode = value.compositionMode ?? "presentation-framed";
203
- invariant(
204
- compositionMode === "presentation-framed" || compositionMode === "terminal-fill",
205
- "scene.compositionMode is invalid",
206
- );
207
- const maximumDurationMs = durationClass === "long-form" ? LONG_FORM_MAX_DURATION_MS : STANDARD_MAX_DURATION_MS;
208
- const maximumFps = durationClass === "long-form" ? LONG_FORM_MAX_FPS : 30;
209
- integer(value.fps, 1, maximumFps, "scene.fps");
210
- integer(value.durationMs, 500, maximumDurationMs, "scene.durationMs");
211
- invariant(Math.ceil((value.durationMs / 1000) * value.fps) <= MAX_RENDER_FRAMES, "scene exceeds the deterministic source-frame bound");
212
- text(value.title, 1, 120, "scene.title");
213
- if (value.commandLabel !== undefined) text(value.commandLabel, 0, 160, "scene.commandLabel");
214
- for (const key of ["background", "accent"]) {
215
- if (value[key] !== undefined) invariant(/^#[0-9a-fA-F]{6}$/.test(value[key]), `scene.${key} is invalid`);
216
- }
217
- return {
218
- schema: value.schema,
219
- id: value.id,
220
- width: value.width,
221
- height: value.height,
222
- fps: value.fps,
223
- ...(value.durationClass === undefined ? {} : { durationClass }),
224
- compositionMode,
225
- durationMs: value.durationMs,
226
- title: value.title,
227
- commandLabel: value.commandLabel ?? "",
228
- background: (value.background ?? "#10151f").toLowerCase(),
229
- accent: (value.accent ?? "#67e8a5").toLowerCase(),
230
- };
231
- }
232
-
233
- function validateProjection(value, scene, transcriptLineCount) {
234
- exactKeys(value, ["schema", "evidenceClass", "claimBoundary", "cues"], [], "projection");
235
- invariant(value.schema === "build-images.demo-projection/v1", "unsupported projection schema");
236
- text(value.evidenceClass, 1, 120, "projection.evidenceClass");
237
- text(value.claimBoundary, 1, 500, "projection.claimBoundary");
238
- invariant(Array.isArray(value.cues) && value.cues.length > 0 && value.cues.length <= 240, "projection.cues is invalid");
239
- for (const [index, cue] of value.cues.entries()) {
240
- exactKeys(cue, ["startMs", "endMs", "transcriptLines"], ["annotation"], `projection.cues[${index}]`);
241
- integer(cue.startMs, 0, scene.durationMs - 1, `projection.cues[${index}].startMs`);
242
- integer(cue.endMs, 1, scene.durationMs, `projection.cues[${index}].endMs`);
243
- invariant(cue.endMs > cue.startMs, `projection.cues[${index}] has a non-positive interval`);
244
- invariant(
245
- Array.isArray(cue.transcriptLines) && cue.transcriptLines.length > 0 && cue.transcriptLines.length <= 80,
246
- `projection.cues[${index}].transcriptLines is invalid`,
247
- );
248
- const lines = new Set();
249
- for (const line of cue.transcriptLines) {
250
- integer(line, 1, transcriptLineCount, `projection.cues[${index}] transcript line`);
251
- invariant(!lines.has(line), `projection.cues[${index}] repeats transcript line ${line}`);
252
- lines.add(line);
253
- }
254
- if (cue.annotation !== undefined) text(cue.annotation, 0, 200, `projection.cues[${index}].annotation`);
255
- }
256
- return {
257
- schema: value.schema,
258
- evidenceClass: value.evidenceClass,
259
- claimBoundary: value.claimBoundary,
260
- cues: value.cues.map((cue) => ({
261
- startMs: cue.startMs,
262
- endMs: cue.endMs,
263
- transcriptLines: cue.transcriptLines,
264
- annotation: cue.annotation ?? "",
265
- })),
266
- };
267
- }
268
-
269
- const RENDITION_VALIDATION_HELPERS = {
270
- decodeBase64, decodeUtf8, digestPattern: DIGEST_PATTERN, exactKeys, integer, invariant,
271
- maxBytes: MAX_TERMINAL_CAPTURE_BYTES, maxEvents: MAX_TERMINAL_CAPTURE_EVENTS,
272
- readJson, readRegular, sha256, text, validateProjection, validateScene,
273
- };
274
-
275
- function validateSourceCoordinate(value) {
276
- exactKeys(
277
- value,
278
- [
279
- "schema",
280
- "repository",
281
- "runId",
282
- "runAttempt",
283
- "sourceSha",
284
- "id",
285
- "nodeId",
286
- "name",
287
- "digest",
288
- "sizeInBytes",
289
- "createdAt",
290
- "expiresAt",
291
- ],
292
- [],
293
- "sourceArtifact",
294
- );
295
- invariant(value.schema === "buildchain.github-artifact-coordinate/v1", "unsupported source artifact coordinate schema");
296
- invariant(/^[^/\s]+\/[^/\s]+$/.test(value.repository), "sourceArtifact.repository is invalid");
297
- for (const key of ["runId", "runAttempt", "id"]) {
298
- invariant(/^[1-9][0-9]*$/.test(value[key]), `sourceArtifact.${key} is invalid`);
299
- }
300
- invariant(/^[0-9a-f]{40}$/.test(value.sourceSha), "sourceArtifact.sourceSha is invalid");
301
- text(value.nodeId, 1, 256, "sourceArtifact.nodeId");
302
- text(value.name, 1, 256, "sourceArtifact.name");
303
- invariant(!/[\0\r\n]/.test(value.name), "sourceArtifact.name is invalid");
304
- invariant(DIGEST_PATTERN.test(value.digest), "sourceArtifact.digest is invalid");
305
- integer(value.sizeInBytes, 0, Number.MAX_SAFE_INTEGER, "sourceArtifact.sizeInBytes");
306
- const createdAt = Date.parse(value.createdAt);
307
- const expiresAt = Date.parse(value.expiresAt);
308
- invariant(Number.isFinite(createdAt), "sourceArtifact.createdAt is invalid");
309
- invariant(Number.isFinite(expiresAt) && expiresAt > createdAt, "sourceArtifact.expiresAt is invalid");
310
- return value;
311
- }
312
-
313
- function validateAdapterOutput(output, strict = true) {
314
- for (const name of REQUIRED_ADAPTER_FILES) readRegular(path.join(output, name), `adapter output ${name}`, 4 * 1024 * 1024);
315
- const transcript = decodeUtf8(
316
- readRegular(path.join(output, "complete-transcript.txt"), "complete transcript", 4 * 1024 * 1024),
317
- "complete transcript",
318
- ).replace(/\r\n/g, "\n");
319
- invariant(transcript.trim().length > 0, "complete transcript must not be empty");
320
- const lines = transcript.endsWith("\n") ? transcript.slice(0, -1).split("\n") : transcript.split("\n");
321
- invariant(lines.length <= 20000, "complete transcript exceeds 20000 lines");
322
- const scene = validateScene(readJson(path.join(output, "scene.json"), "scene"));
323
- const projection = validateProjection(
324
- readJson(path.join(output, "public-projection.json"), "projection"),
325
- scene,
326
- lines.length,
327
- );
328
- const terminalCapturePath = path.join(output, "terminal-capture.json");
329
- const terminalCapture = fs.existsSync(terminalCapturePath)
330
- ? validateTerminalCapture(
331
- readJson(terminalCapturePath, "terminal capture"),
332
- scene,
333
- RENDITION_VALIDATION_HELPERS,
334
- )
335
- : null;
336
- const renditionSet = validateRenditionSet(output, RENDITION_VALIDATION_HELPERS);
337
- invariant(
338
- !renditionSet || terminalCapture,
339
- "rendition set requires the primary terminal capture",
340
- );
341
- if (strict) {
342
- const allowed = new Set([...REQUIRED_ADAPTER_FILES, ...OPTIONAL_ADAPTER_FILES]);
343
- for (const member of listFiles(output)) invariant(allowed.has(member), `undeclared adapter output: ${member}`);
344
- }
345
- return {
346
- transcript: transcript.endsWith("\n") ? transcript : `${transcript}\n`,
347
- lines,
348
- scene,
349
- projection,
350
- terminalCapture,
351
- renditionSet,
352
- };
353
- }
354
-
355
- function parseArguments(argv) {
356
- const command = argv[0];
357
- const values = {};
358
- for (let index = 1; index < argv.length; index += 2) {
359
- const key = argv[index];
360
- const value = argv[index + 1];
361
- invariant(key?.startsWith("--") && value !== undefined, `invalid argument near ${key || "<empty>"}`);
362
- invariant(!(key in values), `duplicate argument: ${key}`);
363
- values[key] = value;
364
- }
365
- return { command, values };
366
- }
367
-
368
- function required(values, key) {
369
- invariant(values[key], `${key} is required`);
370
- return values[key];
371
- }
372
-
373
- function appendOutputs(outputPath, entries) {
374
- if (!outputPath) return;
375
- const rows = Object.entries(entries).map(([key, value]) => `${key}=${value}`);
376
- fs.appendFileSync(outputPath, `${rows.join("\n")}\n`);
377
- }
378
-
379
- function copyFile(source, target) {
380
- fs.mkdirSync(path.dirname(target), { recursive: true });
381
- fs.copyFileSync(source, target);
382
- }
383
-
384
- function parseAdapterArguments(value = "[]") {
385
- let parsed;
386
- try {
387
- parsed = JSON.parse(value);
388
- } catch {
389
- invariant(false, "adapter arguments must be valid JSON");
390
- }
391
- invariant(
392
- Array.isArray(parsed) && parsed.length <= 32,
393
- "adapter arguments must be an array with at most 32 entries",
394
- );
395
- const reserved = new Set([
396
- "--artifact-root",
397
- "--output",
398
- "--source-coordinate",
399
- ]);
400
- for (const [index, argument] of parsed.entries()) {
401
- invariant(
402
- typeof argument === "string"
403
- && argument.length > 0
404
- && argument.length <= 256
405
- && !/[\0\r\n]/.test(argument),
406
- `adapter argument ${index} is invalid`,
407
- );
408
- invariant(
409
- !reserved.has(argument),
410
- `adapter argument ${index} attempts to override a reserved coordinate`,
411
- );
412
- }
413
- return parsed;
414
- }
415
-
416
- function runAdapter(values) {
417
- const sourceRoot = path.resolve(required(values, "--source-root"));
418
- const artifactRoot = path.resolve(required(values, "--artifact-root"));
419
- const output = path.resolve(required(values, "--output"));
420
- const diagnostics = path.resolve(required(values, "--diagnostics"));
421
- const sourceCoordinate = path.resolve(required(values, "--source-coordinate"));
422
- const adapterRelative = required(values, "--adapter");
423
- const adapterArguments = parseAdapterArguments(
424
- values["--adapter-arguments-json"] || "[]",
425
- );
426
- const adapter = resolveInside(sourceRoot, adapterRelative, "adapter path");
427
- const metadata = fs.lstatSync(adapter);
428
- invariant(metadata.isFile() && !metadata.isSymbolicLink(), "adapter must be a regular non-symlink file");
429
- invariant((metadata.mode & 0o111) !== 0, "adapter must be executable");
430
- invariant(fs.realpathSync(adapter).startsWith(`${fs.realpathSync(sourceRoot)}${path.sep}`), "adapter resolves outside source");
431
- validateSourceCoordinate(readJson(sourceCoordinate, "source artifact coordinate"));
432
- ensureEmptyDirectory(output, "adapter output");
433
- fs.mkdirSync(diagnostics, { recursive: true });
434
- const disposableHome = fs.mkdtempSync(path.join(os.tmpdir(), "buildchain-auditable-demo-home-"));
435
- const environment = {
436
- PATH: process.env.PATH || "/usr/local/bin:/usr/bin:/bin",
437
- HOME: disposableHome,
438
- XDG_CACHE_HOME: path.join(disposableHome, ".cache"),
439
- XDG_CONFIG_HOME: path.join(disposableHome, ".config"),
440
- XDG_DATA_HOME: path.join(disposableHome, ".local", "share"),
441
- XDG_STATE_HOME: path.join(disposableHome, ".local", "state"),
442
- npm_config_prefix: path.join(disposableHome, ".npm-prefix"),
443
- LANG: "C.UTF-8",
444
- LC_ALL: "C.UTF-8",
445
- TZ: "UTC",
446
- CI: "true",
447
- SOURCE_DATE_EPOCH: "0",
448
- };
449
- try {
450
- const result = spawnSync(
451
- adapter,
452
- [
453
- "--artifact-root",
454
- artifactRoot,
455
- "--output",
456
- output,
457
- "--source-coordinate",
458
- sourceCoordinate,
459
- ...adapterArguments,
460
- ],
461
- { cwd: sourceRoot, env: environment, encoding: "utf8", maxBuffer: 4 * 1024 * 1024 },
462
- );
463
- fs.writeFileSync(path.join(diagnostics, "adapter.stdout.log"), result.stdout || "");
464
- fs.writeFileSync(path.join(diagnostics, "adapter.stderr.log"), result.stderr || result.error?.message || "");
465
- invariant(!result.error && result.status === 0, `adapter failed with exit code ${result.status ?? "spawn-error"}`);
466
- const normalized = validateAdapterOutput(output);
467
- fs.writeFileSync(path.join(output, "complete-transcript.txt"), normalized.transcript);
468
- writeJson(path.join(output, "scene.json"), normalized.scene);
469
- writeJson(path.join(output, "public-projection.json"), normalized.projection);
470
- if (normalized.terminalCapture) {
471
- writeJson(path.join(output, "terminal-capture.json"), normalized.terminalCapture);
472
- }
473
- writeJson(path.join(diagnostics, "adapter.json"), {
474
- schema: "buildchain.auditable-demo-adapter-execution/v1",
475
- path: adapterRelative,
476
- sha256: sha256(readRegular(adapter, "adapter", 4 * 1024 * 1024)),
477
- arguments: adapterArguments,
478
- argumentsRoot: sha256(Buffer.from(stableJson(adapterArguments))),
479
- exitCode: 0,
480
- });
481
- } finally {
482
- fs.rmSync(disposableHome, { recursive: true, force: true });
483
- }
484
- }
485
-
486
- function prepareSmoke(values) {
487
- const adapterOutput = path.resolve(required(values, "--adapter-output"));
488
- const output = path.resolve(required(values, "--output"));
489
- const normalized = validateAdapterOutput(adapterOutput);
490
- ensureEmptyDirectory(output, "smoke input");
491
- const firstCue = normalized.projection.cues[0];
492
- const identifier = `${normalized.scene.id.slice(0, 52)}.gate-smoke`.slice(0, 64);
493
- const scene = {
494
- schema: "build-images.demo-scene/v1",
495
- id: identifier,
496
- width: 1280,
497
- height: 720,
498
- fps: 5,
499
- durationMs: 1000,
500
- title: `${normalized.scene.title.slice(0, 96)} gate smoke`,
501
- commandLabel: "buildchain auditable demo gate",
502
- background: normalized.scene.background || "#10151f",
503
- accent: normalized.scene.accent || "#67e8a5",
504
- };
505
- const projection = {
506
- schema: "build-images.demo-projection/v1",
507
- evidenceClass: normalized.projection.evidenceClass,
508
- claimBoundary: normalized.projection.claimBoundary,
509
- cues: [{
510
- startMs: 0,
511
- endMs: 1000,
512
- transcriptLines: firstCue.transcriptLines.slice(0, 8),
513
- annotation: "bounded renderer compatibility smoke",
514
- }],
515
- };
516
- fs.writeFileSync(path.join(output, "complete-transcript.txt"), normalized.transcript);
517
- writeJson(path.join(output, "scene.json"), scene);
518
- writeJson(path.join(output, "public-projection.json"), projection);
519
- }
520
-
521
- function semanticRoot(value) {
522
- return sha256(Buffer.from(stableJson(value)));
523
- }
524
-
525
- function validateBudgetBasis(entry, label) {
526
- exactKeys(
527
- entry.budgetBasis,
528
- ["evidence", "observedPath", "observedBytes", "multiplier", "rounding"],
529
- [],
530
- `${label}.budgetBasis`,
531
- );
532
- invariant(
533
- entry.budgetBasis.evidence === "contracts/evidence/auditable-demo-web-delivery-v1.json",
534
- `${label}.budgetBasis.evidence is unsupported`,
535
- );
536
- text(entry.budgetBasis.observedPath, 1, 128, `${label}.budgetBasis.observedPath`);
537
- const observedBytes = integer(
538
- entry.budgetBasis.observedBytes,
539
- 1,
540
- MAX_BUNDLE_MEMBER_BYTES,
541
- `${label}.budgetBasis.observedBytes`,
542
- );
543
- const multiplier = integer(entry.budgetBasis.multiplier, 1, 128, `${label}.budgetBasis.multiplier`);
544
- invariant(entry.budgetBasis.rounding === "next-power-of-two", `${label}.budgetBasis.rounding is unsupported`);
545
- const expected = 2 ** Math.ceil(Math.log2(observedBytes * multiplier));
546
- invariant(entry.maximumBytes === expected, `${label}.maximumBytes does not match its measured budget basis`);
547
- }
548
-
549
- function loadMediaProfile(profileId) {
550
- const catalog = readJson(MEDIA_PROFILE_CATALOG, "auditable demo media profile catalog");
551
- invariant(
552
- catalog.schema === "buildchain.auditable-demo-media-profiles/v1",
553
- "unsupported media profile catalog",
554
- );
555
- invariant(catalog.profiles && typeof catalog.profiles === "object", "media profile catalog is invalid");
556
- const seen = new Set();
557
- const resolve = (identifier) => {
558
- invariant(!seen.has(identifier), `media profile inheritance cycle: ${identifier}`);
559
- const declared = catalog.profiles[identifier];
560
- invariant(declared && typeof declared === "object", `unsupported media profile: ${identifier}`);
561
- seen.add(identifier);
562
- const inherited = declared.extends ? resolve(declared.extends) : {
563
- mode: "archive",
564
- renditions: [],
565
- singletonRoles: [],
566
- additionalRenditions: null,
567
- };
568
- seen.delete(identifier);
569
- const byPath = new Map(inherited.renditions.map((entry) => [entry.path, entry]));
570
- for (const entry of declared.renditions || []) {
571
- invariant(entry && typeof entry === "object" && typeof entry.path === "string", `${identifier} rendition is invalid`);
572
- byPath.set(entry.path, { ...(byPath.get(entry.path) || {}), ...entry });
573
- }
574
- return {
575
- mode: declared.mode || inherited.mode,
576
- renditions: [...byPath.values()],
577
- singletonRoles: [...new Set([...(inherited.singletonRoles || []), ...(declared.singletonRoles || [])])],
578
- additionalRenditions: declared.additionalRenditions || inherited.additionalRenditions || null,
579
- };
580
- };
581
- const resolved = resolve(profileId);
582
- const profile = { id: profileId, ...resolved };
583
- for (const [index, entry] of profile.renditions.entries()) {
584
- if (profile.mode === "web-delivery") {
585
- invariant(entry.budgetBasis, `${profileId}.renditions[${index}].budgetBasis is required`);
586
- validateBudgetBasis(entry, `${profileId}.renditions[${index}]`);
587
- }
588
- }
589
- return {
590
- catalog,
591
- catalogRoot: semanticRoot(catalog),
592
- profile,
593
- profileRoot: semanticRoot(profile),
594
- };
595
- }
596
-
597
- function inspectIsoBmffFastStart(filePath) {
598
- const bytes = readRegular(filePath, "MP4 rendition", MAX_BUNDLE_MEMBER_BYTES);
599
- let offset = 0;
600
- let moovOffset = -1;
601
- let mdatOffset = -1;
602
- let ftypSeen = false;
603
- while (offset + 8 <= bytes.length) {
604
- let size = bytes.readUInt32BE(offset);
605
- const type = bytes.toString("ascii", offset + 4, offset + 8);
606
- let headerSize = 8;
607
- if (size === 1) {
608
- invariant(offset + 16 <= bytes.length, "MP4 extended box header is truncated");
609
- const extended = bytes.readBigUInt64BE(offset + 8);
610
- invariant(extended <= BigInt(Number.MAX_SAFE_INTEGER), "MP4 box size is too large");
611
- size = Number(extended);
612
- headerSize = 16;
613
- } else if (size === 0) {
614
- size = bytes.length - offset;
615
- }
616
- invariant(size >= headerSize && offset + size <= bytes.length, "MP4 box layout is invalid");
617
- if (type === "ftyp") ftypSeen = true;
618
- if (type === "moov" && moovOffset === -1) moovOffset = offset;
619
- if (type === "mdat" && mdatOffset === -1) mdatOffset = offset;
620
- offset += size;
621
- }
622
- invariant(offset === bytes.length && ftypSeen, "MP4 top-level boxes are incomplete");
623
- if (moovOffset === -1 || mdatOffset === -1) return "missing-moov-or-mdat";
624
- return moovOffset < mdatOffset ? "moov-before-mdat" : "mdat-before-moov";
625
- }
626
-
627
- function rationalNumber(value) {
628
- const match = /^([0-9]+)\/([0-9]+)$/.exec(String(value || ""));
629
- if (!match || Number(match[2]) === 0) return 0;
630
- return Number(match[1]) / Number(match[2]);
631
- }
632
-
633
- function inspectMediaFile(filePath) {
634
- const result = spawnSync(
635
- "ffprobe",
636
- [
637
- "-v", "error",
638
- "-show_entries", "format=format_name,duration:stream=codec_type,codec_name,pix_fmt,width,height,avg_frame_rate",
639
- "-of", "json",
640
- filePath,
641
- ],
642
- { encoding: "utf8", maxBuffer: 1024 * 1024 },
643
- );
644
- invariant(!result.error && result.status === 0, `ffprobe failed for ${path.basename(filePath)}`);
645
- let parsed;
646
- try {
647
- parsed = JSON.parse(result.stdout);
648
- } catch {
649
- throw new Error(`ffprobe returned invalid JSON for ${path.basename(filePath)}`);
650
- }
651
- const streams = Array.isArray(parsed.streams) ? parsed.streams : [];
652
- const videos = streams.filter((entry) => entry.codec_type === "video");
653
- const audioStreams = streams.filter((entry) => entry.codec_type === "audio").length;
654
- invariant(videos.length === 1, `${path.basename(filePath)} must contain exactly one video or image stream`);
655
- const video = videos[0];
656
- const formatNames = String(parsed.format?.format_name || "").split(",");
657
- let container = formatNames.includes("mp4") ? "mp4" : "";
658
- if (formatNames.includes("webm")) container = "webm";
659
- if (formatNames.includes("gif") || video.codec_name === "gif") container = "gif";
660
- if (video.codec_name === "png") container = "png";
661
- if (video.codec_name === "webp") container = "webp";
662
- if (video.codec_name === "av1" && formatNames.includes("avif")) container = "avif";
663
- const duration = Number(parsed.format?.duration || 0);
664
- return {
665
- container,
666
- videoCodec: String(video.codec_name || ""),
667
- pixelFormat: String(video.pix_fmt || ""),
668
- width: Number(video.width || 0),
669
- height: Number(video.height || 0),
670
- durationMs: Number.isFinite(duration) ? Math.round(duration * 1000) : 0,
671
- frameRate: rationalNumber(video.avg_frame_rate),
672
- audioStreams,
673
- progressiveDownload: container === "mp4" ? inspectIsoBmffFastStart(filePath) : "not-applicable",
674
- };
675
- }
676
-
677
- function inspectRendererMedia(values) {
678
- const renderOutput = path.resolve(required(values, "--render-output"));
679
- const output = path.resolve(required(values, "--output"));
680
- const rendererImage = required(values, "--renderer-image");
681
- invariant(IMAGE_PATTERN.test(rendererImage), "renderer image must use an immutable sha256 coordinate");
682
- invariant(!fs.existsSync(output), "media inspection output must not already exist");
683
- const { manifest } = readRendererManifest(path.join(renderOutput, "manifest.json"), RENDITION_VALIDATION_HELPERS);
684
- invariant(manifest.renderer?.image === rendererImage, "renderer manifest image coordinate mismatch");
685
- const members = Object.keys(manifest.outputs || {})
686
- .filter((name) => name !== "media-probe.json")
687
- .sort()
688
- .map((name) => {
689
- const target = resolveInside(renderOutput, name, "media inspection member");
690
- const bytes = readRegular(target, name, MAX_BUNDLE_MEMBER_BYTES);
691
- return {
692
- path: name,
693
- root: sha256(bytes),
694
- bytes: bytes.length,
695
- facts: inspectMediaFile(target),
696
- };
697
- });
698
- const body = {
699
- schema: "buildchain.auditable-demo-media-inspection/v1",
700
- rendererImage,
701
- members,
702
- };
703
- writeJson(output, { ...body, inspectionRoot: semanticRoot(body) });
704
- }
705
-
706
- function qualifyMediaFixture(values) {
707
- const renderOutput = path.resolve(required(values, "--render-output"));
708
- const output = path.resolve(required(values, "--output"));
709
- const rendererImage = required(values, "--renderer-image");
710
- const rendererSourceRepository = required(values, "--renderer-source-repository");
711
- const rendererSourceRef = required(values, "--renderer-source-ref");
712
- const rendererSourceSha = required(values, "--renderer-source-sha");
713
- const mediaProfile = required(values, "--media-profile");
714
- invariant(IMAGE_PATTERN.test(rendererImage), "renderer image must use an immutable sha256 coordinate");
715
- invariant(/^[a-z0-9_.-]+\/[a-z0-9_.-]+$/.test(rendererSourceRepository), "renderer source repository is invalid");
716
- invariant(/^refs\/tags\/[a-zA-Z0-9._-]+$/.test(rendererSourceRef), "renderer source ref must be an exact tag ref");
717
- invariant(/^[0-9a-f]{40}$/.test(rendererSourceSha), "renderer source SHA must be exact");
718
- invariant(!fs.existsSync(output), "media fixture evidence output must not already exist");
719
- const mediaInspection = loadMediaInspection(
720
- path.resolve(required(values, "--media-inspection")),
721
- renderOutput,
722
- rendererImage,
723
- );
724
- const verified = verifyRendererOutput(renderOutput, rendererImage, {
725
- scene: path.join(renderOutput, "scene.json"),
726
- transcript: path.join(renderOutput, "complete-transcript.txt"),
727
- projection: path.join(renderOutput, "public-projection.json"),
728
- }, {
729
- mediaProfile,
730
- inspectMedia: mediaInspection.inspectMedia,
731
- inspectionRoot: mediaInspection.inspectionRoot,
732
- });
733
- const body = {
734
- schema: "buildchain.auditable-demo-media-profile-fixture/v1",
735
- renderer: {
736
- image: rendererImage,
737
- sourceRepository: rendererSourceRepository,
738
- sourceRef: rendererSourceRef,
739
- sourceSha: rendererSourceSha,
740
- },
741
- inputs: Object.fromEntries(
742
- ["complete-transcript.txt", "public-projection.json", "scene.json"].map((name) => [
743
- name,
744
- sha256(readRegular(path.join(renderOutput, name), `fixture ${name}`)),
745
- ]),
746
- ),
747
- rendererManifestRoot: sha256(readRendererManifest(path.join(renderOutput, "manifest.json"), RENDITION_VALIDATION_HELPERS).bytes),
748
- qualification: verified.qualification,
749
- };
750
- writeJson(output, { ...body, evidenceRoot: semanticRoot(body) });
751
- }
752
-
753
- function loadMediaInspection(filePath, renderOutput, rendererImage) {
754
- const value = readJson(filePath, "media inspection");
755
- exactKeys(value, ["schema", "rendererImage", "members", "inspectionRoot"], [], "mediaInspection");
756
- invariant(value.schema === "buildchain.auditable-demo-media-inspection/v1", "unsupported media inspection schema");
757
- invariant(value.rendererImage === rendererImage, "media inspection renderer image mismatch");
758
- invariant(Array.isArray(value.members), "mediaInspection.members must be an array");
759
- const body = {
760
- schema: value.schema,
761
- rendererImage: value.rendererImage,
762
- members: value.members,
763
- };
764
- invariant(value.inspectionRoot === semanticRoot(body), "media inspection root mismatch");
765
- const byPath = new Map();
766
- for (const [index, entry] of value.members.entries()) {
767
- exactKeys(entry, ["path", "root", "bytes", "facts"], [], `mediaInspection.members[${index}]`);
768
- text(entry.path, 1, 256, `mediaInspection.members[${index}].path`);
769
- invariant(DIGEST_PATTERN.test(entry.root), `mediaInspection.members[${index}].root is invalid`);
770
- integer(entry.bytes, 1, MAX_BUNDLE_MEMBER_BYTES, `mediaInspection.members[${index}].bytes`);
771
- exactKeys(
772
- entry.facts,
773
- [
774
- "container",
775
- "videoCodec",
776
- "pixelFormat",
777
- "width",
778
- "height",
779
- "durationMs",
780
- "frameRate",
781
- "audioStreams",
782
- "progressiveDownload",
783
- ],
784
- [],
785
- `mediaInspection.members[${index}].facts`,
786
- );
787
- const facts = {
788
- container: text(entry.facts.container, 1, 32, `mediaInspection.members[${index}].facts.container`),
789
- videoCodec: text(entry.facts.videoCodec, 1, 32, `mediaInspection.members[${index}].facts.videoCodec`),
790
- pixelFormat: text(entry.facts.pixelFormat, 0, 32, `mediaInspection.members[${index}].facts.pixelFormat`),
791
- width: integer(entry.facts.width, 1, 16384, `mediaInspection.members[${index}].facts.width`),
792
- height: integer(entry.facts.height, 1, 16384, `mediaInspection.members[${index}].facts.height`),
793
- durationMs: integer(entry.facts.durationMs, 0, 3_600_000, `mediaInspection.members[${index}].facts.durationMs`),
794
- frameRate: entry.facts.frameRate,
795
- audioStreams: integer(entry.facts.audioStreams, 0, 64, `mediaInspection.members[${index}].facts.audioStreams`),
796
- progressiveDownload: text(
797
- entry.facts.progressiveDownload,
798
- 1,
799
- 32,
800
- `mediaInspection.members[${index}].facts.progressiveDownload`,
801
- ),
802
- };
803
- invariant(
804
- Number.isFinite(facts.frameRate) && facts.frameRate >= 0 && facts.frameRate <= 240,
805
- `mediaInspection.members[${index}].facts.frameRate is out of range`,
806
- );
807
- invariant(!byPath.has(entry.path), `duplicate media inspection member: ${entry.path}`);
808
- const target = resolveInside(renderOutput, entry.path, "media inspection member");
809
- const bytes = readRegular(target, entry.path, MAX_BUNDLE_MEMBER_BYTES);
810
- invariant(entry.root === sha256(bytes), `media inspection member root mismatch: ${entry.path}`);
811
- invariant(entry.bytes === bytes.length, `media inspection member byte count mismatch: ${entry.path}`);
812
- byPath.set(entry.path, facts);
813
- }
814
- return {
815
- inspectionRoot: value.inspectionRoot,
816
- inspectMedia: (target) => {
817
- const facts = byPath.get(path.relative(renderOutput, target).split(path.sep).join("/"));
818
- invariant(facts, `media inspection facts are missing: ${path.basename(target)}`);
819
- return facts;
820
- },
821
- };
822
- }
823
-
824
- function constraintsForAdditionalRendition(entry, policy) {
825
- const common = {
826
- path: entry.path,
827
- role: entry.role,
828
- mimeType: entry.mimeType,
829
- maximumBytes: policy.maximumBytesByMimeType[entry.mimeType],
830
- audioStreams: 0,
831
- };
832
- if (entry.mimeType === "video/mp4") {
833
- return { ...common, container: "mp4", videoCodec: "h264", pixelFormat: "yuv420p", progressiveDownload: "moov-before-mdat" };
834
- }
835
- if (entry.mimeType === "video/webm") {
836
- return { ...common, container: "webm", videoCodec: "vp9", pixelFormat: "yuv420p" };
837
- }
838
- if (entry.mimeType === "image/webp") return { ...common, container: "webp", videoCodec: "webp" };
839
- if (entry.mimeType === "image/avif") return { ...common, container: "avif", videoCodec: "av1" };
840
- throw new Error(`additional rendition MIME type is not allowed: ${entry.mimeType}`);
841
- }
842
-
843
- function expectedRenditionDimensions(rule, scene) {
844
- if (rule.dimensions === undefined) {
845
- return {
846
- policy: "scene-exact",
847
- width: scene.width,
848
- height: scene.height,
849
- };
850
- }
851
- exactKeys(
852
- rule.dimensions,
853
- ["policy", "width", "height"],
854
- [],
855
- `${rule.path}.dimensions`,
856
- );
857
- invariant(
858
- rule.dimensions.policy === "exact-downscale-same-aspect",
859
- `${rule.path} dimension policy is unsupported`,
860
- );
861
- const width = integer(rule.dimensions.width, 1, 16384, `${rule.path}.dimensions.width`);
862
- const height = integer(rule.dimensions.height, 1, 16384, `${rule.path}.dimensions.height`);
863
- invariant(width <= scene.width && height <= scene.height, `${rule.path} dimensions would upscale the scene`);
864
- invariant(
865
- width * scene.height === height * scene.width,
866
- `${rule.path} dimensions drift from the scene aspect ratio`,
867
- );
868
- return {
869
- policy: rule.dimensions.policy,
870
- width,
871
- height,
872
- };
873
- }
874
-
875
- function qualifyRendererOutput(renderOutput, manifest, scene, profileId, inspectMedia, inspectionRoot = "") {
876
- const loaded = loadMediaProfile(profileId);
877
- const { profile, catalog } = loaded;
878
- const outputs = manifest.outputs || {};
879
- const rules = profile.renditions.map((entry) => ({ ...entry }));
880
- const knownPaths = new Set(rules.map((entry) => entry.path));
881
- const declaration = manifest.webDelivery;
882
- if (declaration !== undefined) {
883
- exactKeys(declaration, ["schema", "renditions"], [], "manifest.webDelivery");
884
- invariant(
885
- declaration.schema === "build-images.auditable-demo-web-delivery/v1",
886
- "unsupported renderer web-delivery declaration",
887
- );
888
- invariant(Array.isArray(declaration.renditions), "manifest.webDelivery.renditions must be an array");
889
- for (const [index, entry] of declaration.renditions.entries()) {
890
- exactKeys(entry, ["path", "role", "mimeType"], [], `manifest.webDelivery.renditions[${index}]`);
891
- invariant(!knownPaths.has(entry.path), `renderer web-delivery path is already profile-owned: ${entry.path}`);
892
- const policy = profile.additionalRenditions;
893
- invariant(policy, `media profile ${profileId} does not admit additional renditions`);
894
- invariant(policy.allowedRoles.includes(entry.role), `additional rendition role is not allowed: ${entry.role}`);
895
- invariant(policy.allowedMimeTypes.includes(entry.mimeType), `additional rendition MIME type is not allowed: ${entry.mimeType}`);
896
- const maximumBytes = policy.maximumBytesByMimeType?.[entry.mimeType];
897
- integer(maximumBytes, 1, MAX_BUNDLE_MEMBER_BYTES, `media profile ${profileId} additional ${entry.mimeType} budget`);
898
- rules.push(constraintsForAdditionalRendition(entry, policy));
899
- knownPaths.add(entry.path);
900
- }
901
- }
902
- for (const name of Object.keys(outputs)) {
903
- if (name !== "media-probe.json") invariant(knownPaths.has(name), `unbound renderer output: ${name}`);
904
- }
905
- const singletonRoles = new Set(profile.singletonRoles || []);
906
- const observedRoles = new Set();
907
- const renditions = [];
908
- for (const rule of rules) {
909
- const declared = outputs[rule.path];
910
- invariant(declared && typeof declared === "object", `required renderer output is missing: ${rule.path}`);
911
- const target = resolveInside(renderOutput, rule.path, "renderer output path");
912
- const bytes = readRegular(target, rule.path, MAX_BUNDLE_MEMBER_BYTES);
913
- invariant(declared.root === sha256(bytes), `renderer manifest root mismatch: ${rule.path}`);
914
- invariant(declared.bytes === bytes.length, `renderer manifest byte count mismatch: ${rule.path}`);
915
- if (rule.maximumBytes !== undefined) {
916
- invariant(bytes.length <= rule.maximumBytes, `${rule.path} byte budget exceeded`);
917
- }
918
- if (singletonRoles.has(rule.role)) {
919
- invariant(!observedRoles.has(rule.role), `duplicate singleton role: ${rule.role}`);
920
- observedRoles.add(rule.role);
921
- }
922
- const facts = profile.mode === "web-delivery" ? inspectMedia(target) : {};
923
- if (profile.mode === "web-delivery") {
924
- const expectedDimensions = expectedRenditionDimensions(rule, scene);
925
- invariant(facts && typeof facts === "object", `${rule.path} inspection is missing`);
926
- invariant(facts.container === rule.container, `${rule.path} container mismatch`);
927
- invariant(facts.videoCodec === rule.videoCodec, `${rule.path} video codec mismatch`);
928
- if (rule.pixelFormat) invariant(facts.pixelFormat === rule.pixelFormat, `${rule.path} pixel format mismatch`);
929
- invariant(facts.audioStreams === rule.audioStreams, `${rule.path} audio stream policy failed`);
930
- invariant(
931
- facts.width === expectedDimensions.width && facts.height === expectedDimensions.height,
932
- `${rule.path} dimensions mismatch`,
933
- );
934
- if (facts.durationMs > 0) {
935
- invariant(
936
- Math.abs(facts.durationMs - scene.durationMs) <= catalog.qualification.durationToleranceMs,
937
- `${rule.path} duration mismatch`,
938
- );
939
- }
940
- if (rule.frameRatePolicy === "scene-exact") {
941
- invariant(Math.abs(facts.frameRate - scene.fps) < 0.001, `${rule.path} frame rate mismatch`);
942
- }
943
- if (rule.progressiveDownload) {
944
- invariant(
945
- facts.progressiveDownload === rule.progressiveDownload,
946
- `${rule.path} progressive download evidence mismatch`,
947
- );
948
- }
949
- }
950
- renditions.push({
951
- path: rule.path,
952
- role: rule.role,
953
- mimeType: rule.mimeType,
954
- root: declared.root,
955
- bytes: declared.bytes,
956
- maximumBytes: rule.maximumBytes || 0,
957
- dimensionPolicy: profile.mode === "web-delivery"
958
- ? expectedRenditionDimensions(rule, scene).policy
959
- : "not-qualified",
960
- ...facts,
961
- });
962
- }
963
- const body = {
964
- schema: "buildchain.auditable-demo-media-qualification/v1",
965
- profile: {
966
- id: profileId,
967
- mode: profile.mode,
968
- catalogRoot: loaded.catalogRoot,
969
- profileRoot: loaded.profileRoot,
970
- },
971
- inspectionRoot,
972
- renditions,
973
- nonClaims: catalog.qualification.nonClaims,
974
- };
975
- return { ...body, qualificationRoot: semanticRoot(body) };
976
- }
977
-
978
- function verifyRendererOutput(renderOutput, expectedImage, expectedInputs, options = {}) {
979
- invariant(IMAGE_PATTERN.test(expectedImage), "renderer image must use an immutable sha256 coordinate");
980
- const fixedMembers = [
981
- "checksums.sha256",
982
- "complete-transcript.txt",
983
- "manifest.json",
984
- "public-projection.json",
985
- "scene.json",
986
- ];
987
- verifyChecksums(renderOutput, "checksums.sha256", { allowLongFormRendererManifest: true });
988
- const { manifest } = readRendererManifest(path.join(renderOutput, "manifest.json"), RENDITION_VALIDATION_HELPERS);
989
- invariant(manifest.renderer?.image === expectedImage, "renderer manifest image coordinate mismatch");
990
- const outputNames = Object.keys(manifest.outputs || {}).sort();
991
- invariant(outputNames.includes("media-probe.json"), "renderer manifest must declare media-probe.json");
992
- const expectedMembers = [...new Set([...fixedMembers, ...outputNames])].sort();
993
- invariant(JSON.stringify(listFiles(renderOutput)) === JSON.stringify(expectedMembers), "renderer output member set is not exact");
994
- for (const name of outputNames) {
995
- invariant(!name.includes("\\") && !name.split("/").includes(".."), `renderer output path is invalid: ${name}`);
996
- const target = resolveInside(renderOutput, name, "renderer manifest output");
997
- const bytes = readRegular(target, name, MAX_BUNDLE_MEMBER_BYTES);
998
- const declared = manifest.outputs[name];
999
- invariant(declared?.root === sha256(bytes), `renderer manifest root mismatch: ${name}`);
1000
- invariant(declared?.bytes === bytes.length, `renderer manifest byte count mismatch: ${name}`);
1001
- }
1002
- for (const [key, filePath] of Object.entries(expectedInputs)) {
1003
- const observed = manifest.inputs?.[key]?.root;
1004
- invariant(observed === sha256(readRegular(filePath, `${key} input`)), `renderer ${key} input root mismatch`);
1005
- }
1006
- const composition = validateRendererCompositionInputs(
1007
- manifest,
1008
- expectedInputs,
1009
- RENDITION_VALIDATION_HELPERS,
1010
- );
1011
- const probe = readJson(path.join(renderOutput, "media-probe.json"), "media probe");
1012
- invariant(probe.schema === "build-images.demo-media-probe/v1" && probe.passed === true, "renderer media probe failed");
1013
- const qualification = qualifyRendererOutput(
1014
- renderOutput,
1015
- manifest,
1016
- readJson(path.join(renderOutput, "scene.json"), "renderer scene"),
1017
- options.mediaProfile || "archive-v1",
1018
- options.inspectMedia || inspectMediaFile,
1019
- options.inspectionRoot || "",
1020
- );
1021
- return { manifest, probe, qualification, composition };
1022
- }
1023
-
1024
- function renditionInputRoots(root, renditions) {
1025
- return renditions.map((rendition) => ({
1026
- id: rendition.id, role: rendition.role, captureRoot: rendition.captureRoot,
1027
- sceneRoot: sha256(readRegular(path.join(root, rendition.files.scene), `${rendition.id} scene`)),
1028
- transcriptRoot: sha256(readRegular(path.join(root, rendition.files.transcript), `${rendition.id} transcript`)),
1029
- projectionRoot: sha256(readRegular(path.join(root, rendition.files.projection), `${rendition.id} projection`)),
1030
- }));
1031
- }
1032
-
1033
- function finalizeGate(values) {
1034
- const adapterOutput = path.resolve(required(values, "--adapter-output"));
1035
- const smokeInput = path.resolve(required(values, "--smoke-input"));
1036
- const smokeOutput = path.resolve(required(values, "--smoke-output"));
1037
- const sourceCoordinatePath = path.resolve(required(values, "--source-coordinate"));
1038
- const diagnostics = path.resolve(required(values, "--diagnostics"));
1039
- const output = path.resolve(required(values, "--output"));
1040
- const rendererImage = required(values, "--renderer-image");
1041
- const adapterRelative = required(values, "--adapter");
1042
- const sourceSha = required(values, "--source-sha");
1043
- const mediaProfile = values["--media-profile"] || "archive-v1";
1044
- invariant(/^[0-9a-f]{40}$/.test(sourceSha), "source SHA must be exact");
1045
- const normalized = validateAdapterOutput(adapterOutput);
1046
- const selectedProfile = loadMediaProfile(mediaProfile).profile;
1047
- const mediaInspectionPath = values["--media-inspection"]
1048
- ? path.resolve(values["--media-inspection"])
1049
- : "";
1050
- const mediaInspection = selectedProfile.mode === "web-delivery"
1051
- ? loadMediaInspection(
1052
- required({ "--media-inspection": mediaInspectionPath }, "--media-inspection"),
1053
- smokeOutput,
1054
- rendererImage,
1055
- )
1056
- : null;
1057
- const verifiedSmoke = verifyRendererOutput(smokeOutput, rendererImage, {
1058
- scene: path.join(smokeInput, "scene.json"),
1059
- transcript: path.join(smokeInput, "complete-transcript.txt"),
1060
- projection: path.join(smokeInput, "public-projection.json"),
1061
- }, {
1062
- mediaProfile,
1063
- inspectMedia: mediaInspection?.inspectMedia,
1064
- inspectionRoot: mediaInspection?.inspectionRoot || "",
1065
- });
1066
- const sourceCoordinate = validateSourceCoordinate(readJson(sourceCoordinatePath, "source artifact coordinate"));
1067
- invariant(sourceCoordinate.sourceSha === sourceSha, "source artifact coordinate SHA mismatch");
1068
- ensureEmptyDirectory(output, "gate bundle");
1069
- fs.writeFileSync(path.join(output, "complete-transcript.txt"), normalized.transcript);
1070
- writeJson(path.join(output, "scene.json"), normalized.scene);
1071
- writeJson(path.join(output, "public-projection.json"), normalized.projection);
1072
- for (const name of OPTIONAL_ADAPTER_FILES) {
1073
- if (fs.existsSync(path.join(adapterOutput, name))) {
1074
- copyFile(path.join(adapterOutput, name), path.join(output, name));
1075
- }
1076
- }
1077
- copyFile(sourceCoordinatePath, path.join(output, "source-artifact.json"));
1078
- copyFile(path.join(diagnostics, "adapter.json"), path.join(output, "adapter.json"));
1079
- for (const name of listFiles(smokeOutput)) {
1080
- copyFile(path.join(smokeOutput, name), path.join(output, "smoke", name));
1081
- }
1082
- writeJson(path.join(output, "gate-receipt.json"), {
1083
- schema: "buildchain.auditable-demo-gate/v1",
1084
- status: "passed",
1085
- sourceRepository: sourceCoordinate.repository,
1086
- sourceSha,
1087
- sourceArtifact: {
1088
- id: sourceCoordinate.id,
1089
- name: sourceCoordinate.name,
1090
- digest: sourceCoordinate.digest,
1091
- runId: sourceCoordinate.runId,
1092
- expiresAt: sourceCoordinate.expiresAt,
1093
- },
1094
- adapter: {
1095
- path: adapterRelative,
1096
- sha256: readJson(path.join(diagnostics, "adapter.json"), "adapter execution").sha256,
1097
- argumentsRoot: readJson(
1098
- path.join(diagnostics, "adapter.json"),
1099
- "adapter execution",
1100
- ).argumentsRoot,
1101
- },
1102
- renderer: {
1103
- image: rendererImage,
1104
- smokeManifestRoot: sha256(readRegular(path.join(smokeOutput, "manifest.json"), "smoke manifest")),
1105
- mediaProfile,
1106
- mediaQualificationRoot: verifiedSmoke.qualification.qualificationRoot,
1107
- },
1108
- qualifiedInputs: {
1109
- transcript: sha256(readRegular(path.join(output, "complete-transcript.txt"), "transcript")),
1110
- projection: sha256(readRegular(path.join(output, "public-projection.json"), "projection")),
1111
- scene: sha256(readRegular(path.join(output, "scene.json"), "scene")),
1112
- ...(normalized.terminalCapture
1113
- ? {
1114
- terminalCapture: {
1115
- schema: normalized.terminalCapture.schema,
1116
- root: sha256(readRegular(path.join(output, "terminal-capture.json"), "terminal capture")),
1117
- },
1118
- }
1119
- : {}),
1120
- ...(normalized.renditionSet
1121
- ? {
1122
- renditionSet: {
1123
- schema: normalized.renditionSet.schema,
1124
- root: sha256(readRegular(path.join(output, "rendition-set.json"), "rendition set")),
1125
- renditions: renditionInputRoots(output, normalized.renditionSet.renditions),
1126
- },
1127
- }
1128
- : {}),
1129
- evidenceClass: normalized.projection.evidenceClass,
1130
- claimBoundary: normalized.projection.claimBoundary,
1131
- },
1132
- });
1133
- const root = writeChecksums(output);
1134
- const artifactName = `auditable-demo-gate-${sourceSha.slice(0, 12)}-${root.slice(7, 23)}`;
1135
- appendOutputs(values["--github-output"], {
1136
- "gate-root": root,
1137
- "gate-artifact-name": artifactName,
1138
- });
1139
- process.stdout.write(stableJson({ status: "passed", root, artifactName }));
1140
- }
1141
-
1142
- function verifyGate(values) {
1143
- const bundle = path.resolve(required(values, "--bundle"));
1144
- const expectedRoot = required(values, "--expected-root");
1145
- const expectedImage = required(values, "--renderer-image");
1146
- const expectedSourceSha = required(values, "--source-sha");
1147
- const expectedMediaProfile = values["--media-profile"] || "archive-v1";
1148
- invariant(DIGEST_PATTERN.test(expectedRoot), "expected gate root must be sha256");
1149
- invariant(verifyChecksums(bundle) === expectedRoot, "gate bundle root mismatch");
1150
- const receipt = readJson(path.join(bundle, "gate-receipt.json"), "gate receipt");
1151
- invariant(receipt.schema === "buildchain.auditable-demo-gate/v1" && receipt.status === "passed", "gate did not pass");
1152
- invariant(receipt.sourceSha === expectedSourceSha, "gate source SHA mismatch");
1153
- invariant(receipt.renderer?.image === expectedImage, "gate renderer image mismatch");
1154
- invariant(receipt.renderer?.mediaProfile === expectedMediaProfile, "gate media profile mismatch");
1155
- invariant(
1156
- DIGEST_PATTERN.test(receipt.renderer?.mediaQualificationRoot || ""),
1157
- "gate media qualification root is invalid",
1158
- );
1159
- const normalized = validateAdapterOutput(bundle, false);
1160
- invariant(
1161
- receipt.qualifiedInputs?.transcript === sha256(readRegular(path.join(bundle, "complete-transcript.txt"), "transcript"))
1162
- && receipt.qualifiedInputs?.projection === sha256(readRegular(path.join(bundle, "public-projection.json"), "projection"))
1163
- && receipt.qualifiedInputs?.scene === sha256(readRegular(path.join(bundle, "scene.json"), "scene")),
1164
- "gate qualified input roots mismatch",
1165
- );
1166
- const qualifiedCapture = receipt.qualifiedInputs?.terminalCapture;
1167
- invariant(
1168
- Boolean(qualifiedCapture) === Boolean(normalized.terminalCapture),
1169
- "gate terminal capture presence drifted",
1170
- );
1171
- if (normalized.terminalCapture) {
1172
- invariant(
1173
- qualifiedCapture.schema === normalized.terminalCapture.schema
1174
- && qualifiedCapture.root
1175
- === sha256(readRegular(path.join(bundle, "terminal-capture.json"), "terminal capture")),
1176
- "gate terminal capture root mismatch",
1177
- );
1178
- }
1179
- const qualifiedRenditionSet = receipt.qualifiedInputs?.renditionSet;
1180
- invariant(
1181
- Boolean(qualifiedRenditionSet) === Boolean(normalized.renditionSet),
1182
- "gate rendition set presence drifted",
1183
- );
1184
- if (normalized.renditionSet) {
1185
- invariant(
1186
- qualifiedRenditionSet.schema === normalized.renditionSet.schema
1187
- && qualifiedRenditionSet.root === sha256(readRegular(path.join(bundle, "rendition-set.json"), "rendition set"))
1188
- && stableJson(qualifiedRenditionSet.renditions)
1189
- === stableJson(renditionInputRoots(bundle, normalized.renditionSet.renditions)),
1190
- "gate native rendition roots mismatch",
1191
- );
1192
- }
1193
- invariant(receipt.qualifiedInputs.evidenceClass === normalized.projection.evidenceClass, "gate evidence class drifted");
1194
- }
1195
-
1196
- function finalizeMedia(values) {
1197
- const gateBundle = path.resolve(required(values, "--gate-bundle"));
1198
- const renderOutput = path.resolve(required(values, "--render-output"));
1199
- const output = path.resolve(required(values, "--output"));
1200
- const rendererImage = required(values, "--renderer-image");
1201
- const gateRoot = required(values, "--gate-root");
1202
- const sourceSha = required(values, "--source-sha");
1203
- const mediaProfile = values["--media-profile"] || "archive-v1";
1204
- const selectedProfile = loadMediaProfile(mediaProfile).profile;
1205
- const mediaInspectionPath = values["--media-inspection"]
1206
- ? path.resolve(values["--media-inspection"])
1207
- : "";
1208
- const mediaInspection = selectedProfile.mode === "web-delivery"
1209
- ? loadMediaInspection(
1210
- required({ "--media-inspection": mediaInspectionPath }, "--media-inspection"),
1211
- renderOutput,
1212
- rendererImage,
1213
- )
1214
- : null;
1215
- verifyGate({
1216
- "--bundle": gateBundle,
1217
- "--expected-root": gateRoot,
1218
- "--renderer-image": rendererImage,
1219
- "--source-sha": sourceSha,
1220
- "--media-profile": mediaProfile,
1221
- });
1222
- const terminalCapturePath = path.join(gateBundle, "terminal-capture.json");
1223
- const renditionSetPath = path.join(gateBundle, "rendition-set.json");
1224
- const verifiedRenderer = verifyRendererOutput(renderOutput, rendererImage, {
1225
- scene: path.join(gateBundle, "scene.json"),
1226
- transcript: path.join(gateBundle, "complete-transcript.txt"),
1227
- projection: path.join(gateBundle, "public-projection.json"),
1228
- ...(fs.existsSync(terminalCapturePath)
1229
- ? { terminalCapture: terminalCapturePath }
1230
- : {}),
1231
- ...(fs.existsSync(renditionSetPath)
1232
- ? { renditionSet: renditionSetPath }
1233
- : {}),
1234
- }, {
1235
- mediaProfile,
1236
- inspectMedia: mediaInspection?.inspectMedia,
1237
- inspectionRoot: mediaInspection?.inspectionRoot || "",
1238
- });
1239
- ensureEmptyDirectory(output, "media bundle");
1240
- for (const name of listFiles(renderOutput)) {
1241
- const destination = name === "checksums.sha256" ? "renderer-checksums.sha256" : name;
1242
- copyFile(path.join(renderOutput, name), path.join(output, destination));
1243
- }
1244
- copyFile(path.join(gateBundle, "gate-receipt.json"), path.join(output, "gate-receipt.json"));
1245
- if (mediaInspectionPath) copyFile(mediaInspectionPath, path.join(output, "media-inspection.json"));
1246
- const commonReceipt = {
1247
- status: "passed",
1248
- sourceSha,
1249
- qualifiedGateRoot: gateRoot,
1250
- rendererImage,
1251
- rendererManifestRoot: sha256(readRendererManifest(path.join(renderOutput, "manifest.json"), RENDITION_VALIDATION_HELPERS).bytes),
1252
- };
1253
- const mediaReceipt = selectedProfile.mode === "archive"
1254
- ? { schema: "buildchain.auditable-demo-media/v1", ...commonReceipt }
1255
- : {
1256
- schema: "buildchain.auditable-demo-media/v2",
1257
- ...commonReceipt,
1258
- qualification: verifiedRenderer.qualification,
1259
- qualificationRoot: verifiedRenderer.qualification.qualificationRoot,
1260
- };
1261
- writeJson(path.join(output, "media-receipt.json"), mediaReceipt);
1262
- const root = writeChecksums(output);
1263
- const artifactName = `auditable-demo-media-${sourceSha.slice(0, 12)}-${root.slice(7, 23)}`;
1264
- appendOutputs(values["--github-output"], {
1265
- "media-root": root,
1266
- "media-artifact-name": artifactName,
1267
- "media-profile": mediaProfile,
1268
- "media-qualification-root": verifiedRenderer.qualification.qualificationRoot,
1269
- });
1270
- process.stdout.write(stableJson({ status: "passed", root, artifactName }));
1271
- }
1272
-
1273
- function main(argv) {
1274
- const { command, values } = parseArguments(argv);
1275
- switch (command) {
1276
- case "run-adapter":
1277
- return runAdapter(values);
1278
- case "prepare-smoke":
1279
- return prepareSmoke(values);
1280
- case "finalize-gate":
1281
- return finalizeGate(values);
1282
- case "verify-gate":
1283
- return verifyGate(values);
1284
- case "finalize-media":
1285
- return finalizeMedia(values);
1286
- case "inspect-media":
1287
- return inspectRendererMedia(values);
1288
- case "qualify-media-fixture":
1289
- return qualifyMediaFixture(values);
1290
- default:
1291
- throw new Error(`unknown command: ${command || "<empty>"}`);
1292
- }
1293
- }
1294
-
1295
- const invokedDirectly = process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url);
1296
- if (invokedDirectly) {
1297
- try {
1298
- main(process.argv.slice(2));
1299
- } catch (error) {
1300
- process.stderr.write(`auditable-demo: ${error instanceof Error ? error.message : String(error)}\n`);
1301
- process.exitCode = 1;
1302
- }
1303
- }
1304
-
1305
- export {
1306
- finalizeGate,
1307
- finalizeMedia,
1308
- inspectIsoBmffFastStart,
1309
- inspectMediaFile,
1310
- inspectRendererMedia,
1311
- parseAdapterArguments,
1312
- qualifyMediaFixture,
1313
- renditionInputRoots,
1314
- prepareSmoke,
1315
- runAdapter,
1316
- sha256,
1317
- stableJson,
1318
- validateAdapterOutput,
1319
- validateSourceCoordinate,
1320
- verifyChecksums,
1321
- verifyGate,
1322
- verifyRendererOutput,
1323
- writeChecksums,
1324
- };