@kungfu-tech/buildchain 4.0.10-alpha.0 → 4.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1527) hide show
  1. package/AGENTS.md +55 -36
  2. package/CONTRIBUTING.md +22 -34
  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 +527 -0
  11. package/architecture/agent-change-map.md +2128 -481
  12. package/architecture/build-environments.json +1 -2
  13. package/architecture/build-orchestration.json +65 -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 +2213 -223
  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 +9 -15
  25. package/architecture/history/warrant-shadow-observations.json +900 -0
  26. package/architecture/internal-capabilities.json +2335 -375
  27. package/architecture/layered-transition.json +32 -0
  28. package/architecture/maintainability-debt.json +963 -1835
  29. package/architecture/maintainability-policy.json +64 -1448
  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 +104 -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 +233 -214
  40. package/architecture/runtime-entry.json +26 -0
  41. package/architecture/runtime-resume-lineage.json +23 -0
  42. package/architecture/runtime-semantic-closure.json +27 -17
  43. package/architecture/rust-libnode-bridge-evaluation.json +1 -1
  44. package/architecture/rust-wasm-production-authority.json +7 -7
  45. package/architecture/stable-publication-fence.json +4 -4
  46. package/architecture/stage-capsule-qualification.json +6 -6
  47. package/architecture/stage-capsule-resume-planner.json +1 -1
  48. package/architecture/stage-capsule-store-contract.json +2 -2
  49. package/architecture/tail-reseal-parity.json +22 -17
  50. package/architecture/universal-workflow-bootstrap.json +115 -111
  51. package/architecture/universal-workflow-capability-policy.json +61 -0
  52. package/architecture/universal-workflow-fault-campaign.json +25 -31
  53. package/architecture/workflow-taxonomy.json +80 -808
  54. package/bin/buildchain.mjs +2 -1820
  55. package/contracts/buildchain-v2-residuals-v1.json +2 -138
  56. package/contracts/dev-delivery-authority-v2.schema.json +509 -231
  57. package/contracts/fixtures/runtime-resume-lineage-v2/scenario.json +14 -0
  58. package/contracts/fixtures/v4-floating-consumer-policy-v1/cases.json +2 -2
  59. package/contracts/fixtures/v4-tail-reseal-v1/valid.json +1 -1
  60. package/contracts/promotion-invocation-v1.schema.json +503 -0
  61. package/contracts/promotion-request-v1.schema.json +433 -0
  62. package/contracts/runtime-resume-lineage-v2.schema.json +182 -0
  63. package/contracts/v4-adopter-delivery-v1.schema.json +1 -1
  64. package/contracts/v4-compatibility-facts-v1.schema.json +4 -4
  65. package/contracts/v4-floating-consumer-policy-receipt-v1.schema.json +124 -21
  66. package/contracts/v4-release-invocation-v1.schema.json +1 -1
  67. package/crates/buildchain-host-bridge/src/main.rs +1 -1
  68. package/dist/site/buildchain-contract.json +1028 -2978
  69. package/dist/site/buildchain-site.json +387 -363
  70. package/dist/site/capability-registry.json +17 -17
  71. package/dist/site/cli-registry.json +358 -369
  72. package/dist/site/controller-registry.json +129 -686
  73. package/dist/site/kfd-claims.json +5841 -3227
  74. package/dist/site/kfd-upstream-aggregate.json +1 -1
  75. package/dist/site/manual-registry.json +29 -29
  76. package/dist/site/node-api-registry.json +12561 -16178
  77. package/dist/site/page-registry.json +346 -326
  78. package/dist/site/public-surface-audit.json +3833 -3641
  79. package/dist/site/publication-authority-registry.json +276 -1121
  80. package/dist/site/publication-registry.json +5 -5
  81. package/dist/site/release-provenance.json +80 -90
  82. package/dist/site/schemas/dev-delivery-authority-v2.schema.json +509 -231
  83. package/dist/site/schemas/v4-adopter-delivery-v1.schema.json +1 -1
  84. package/dist/site/schemas/v4-compatibility-facts-v1.schema.json +4 -4
  85. package/dist/site/site-manifest.json +34 -34
  86. package/dist/site/workflow-registry.json +7136 -5343
  87. package/docs/MAP.md +10 -8
  88. package/docs/auditable-demo.md +6 -6
  89. package/docs/aws-us-elastic-runner-burst-plane.md +5 -5
  90. package/docs/binary-distribution.md +2 -2
  91. package/docs/bootstrap-recovery.md +50 -0
  92. package/docs/cli-reference.md +4 -37
  93. package/docs/cli.md +6 -6
  94. package/docs/code-organization.md +132 -0
  95. package/docs/consumer-issue-reporting.md +1 -1
  96. package/docs/controller-evidence.md +2 -2
  97. package/docs/dev-alpha-candidate-patrol.md +6 -6
  98. package/docs/dev-delivery-orchestration.md +116 -0
  99. package/docs/dev-delivery-qualification-landing-adr.md +1 -1
  100. package/docs/dev-delivery-warrant.md +19 -26
  101. package/docs/dev-qualification-patrol.md +1 -1
  102. package/docs/engineering-housekeeper.md +6 -6
  103. package/docs/github-artifact-attestation.md +10 -13
  104. package/docs/github-governance-authority.md +4 -4
  105. package/docs/kfd-support.md +1 -1
  106. package/docs/lifecycle-protocol.md +8 -8
  107. package/docs/migration-inventory.md +6 -6
  108. package/docs/next-development-transition.md +4 -4
  109. package/docs/node-api-reference.md +2260 -2645
  110. package/docs/ownership.md +3 -3
  111. package/docs/publication-artifacts.md +7 -8
  112. package/docs/publication-authority.md +6 -6
  113. package/docs/publish-transaction.md +10 -10
  114. package/docs/release-activation-transaction.md +1 -1
  115. package/docs/release-candidate.md +24 -30
  116. package/docs/release-governance.md +33 -33
  117. package/docs/release-passport.md +2 -2
  118. package/docs/release-promotion-request.md +57 -0
  119. package/docs/release-propagation.md +24 -24
  120. package/docs/release-tail-contract.md +40 -76
  121. package/docs/release-tail-provider-plane.md +18 -28
  122. package/docs/reusable-build-surface.md +34 -22
  123. package/docs/runtime-entry.md +111 -0
  124. package/docs/runtime-train-validation.md +30 -41
  125. package/docs/shifu-gate-profiles.md +4 -4
  126. package/docs/site-bundle-contract.md +1 -1
  127. package/docs/stable-candidate-patrol.md +1 -1
  128. package/docs/v4-adopter-delivery.md +50 -121
  129. package/docs/v4-canonical-contracts.md +3 -3
  130. package/docs/v4-compatibility-facts.md +1 -1
  131. package/docs/v4-declarative-release-tail-migration.md +24 -29
  132. package/docs/v4-publication-rehearsal.md +6 -6
  133. package/docs/v4-rust-wasm-production-authority.md +2 -2
  134. package/docs/v4-stage-capsule.md +10 -11
  135. package/docs/web-surface-deployments.md +32 -42
  136. package/docs/workflow-catalog.md +81 -127
  137. package/docs/workflow-path-migration.md +1 -5
  138. package/package.json +100 -103
  139. package/packages/core/README.md +41 -164
  140. package/packages/core/adoption/adopter-delivery-parity.js +219 -0
  141. package/packages/core/adoption/adopter-delivery.js +210 -0
  142. package/packages/core/adoption/buildchain-kfd-claims.js +733 -0
  143. package/packages/core/adoption/cli/delivery.mjs +39 -0
  144. package/packages/core/adoption/cli/dispatch.mjs +5 -0
  145. package/packages/core/adoption/cli/kfd-aggregate.mjs +20 -0
  146. package/packages/core/adoption/cli/kfd-hub.mjs +53 -0
  147. package/packages/core/adoption/cli/kfd-migrate-layout.mjs +27 -0
  148. package/packages/core/adoption/cli/kfd-schema.mjs +55 -0
  149. package/packages/core/adoption/cli/kfd-status.mjs +21 -0
  150. package/packages/core/adoption/cli/kfd-upstream.mjs +69 -0
  151. package/packages/core/adoption/cli/kfd.mjs +63 -0
  152. package/packages/core/adoption/cli/output.mjs +18 -0
  153. package/packages/core/adoption/cli/product-gate.mjs +110 -0
  154. package/packages/core/adoption/cli/project.mjs +38 -0
  155. package/packages/core/adoption/cli/standards.mjs +282 -0
  156. package/packages/core/adoption/cli/support.mjs +101 -0
  157. package/packages/core/adoption/cli/surface-register.mjs +172 -0
  158. package/packages/core/adoption/commands/cross-platform-adopter-qualification.mjs +28 -0
  159. package/packages/core/adoption/commands/init-repo.mjs +518 -0
  160. package/packages/core/adoption/cross-platform-adopter-qualification.js +206 -0
  161. package/packages/core/adoption/kfd-agent-hub.js +496 -0
  162. package/packages/core/adoption/kfd.js +966 -0
  163. package/packages/core/adoption/kfd2-product-claims.js +454 -0
  164. package/packages/core/adoption/kfd3-surface-register.js +924 -0
  165. package/packages/core/adoption/qualification/actions.js +104 -0
  166. package/packages/core/adoption/qualification/admission.js +95 -0
  167. package/packages/core/adoption/qualification/aggregate.js +10 -0
  168. package/packages/core/adoption/qualification/io.js +51 -0
  169. package/packages/core/adoption/qualification/platform.js +120 -0
  170. package/packages/core/build/anchored-version-material.js +281 -0
  171. package/packages/core/build/artifact/actions.js +47 -0
  172. package/packages/core/build/artifact/attestation.js +165 -0
  173. package/packages/core/build/artifact/contracts.js +165 -0
  174. package/packages/core/build/artifact/coordinates.js +113 -0
  175. package/packages/core/build/artifact/credential-transport.js +68 -0
  176. package/packages/core/build/artifact/expectations.js +94 -0
  177. package/packages/core/build/artifact/files.js +14 -0
  178. package/packages/core/build/artifact/naming.js +65 -0
  179. package/packages/core/build/artifact/services.js +17 -0
  180. package/packages/core/build/artifact/store.js +120 -0
  181. package/packages/core/build/artifact/summary.js +20 -0
  182. package/packages/core/build/artifact/transfer-policy.js +34 -0
  183. package/packages/core/build/artifact/transport.js +112 -0
  184. package/packages/core/build/artifact/upload.js +178 -0
  185. package/packages/core/build/artifact-coordinate-action.js +46 -0
  186. package/packages/core/build/artifact-coordinate.js +58 -0
  187. package/packages/core/build/artifact-integrity.js +10 -0
  188. package/packages/core/build/artifact-passport.js +842 -0
  189. package/packages/core/build/artifact-signing.js +468 -0
  190. package/packages/core/build/artifact-verification-envelope.js +500 -0
  191. package/packages/core/build/binary/actions.js +83 -0
  192. package/packages/core/build/binary/checksums.js +33 -0
  193. package/packages/core/build/binary/distribution.js +271 -0
  194. package/packages/core/build/binary-publication-dispatch.js +45 -0
  195. package/packages/core/build/build-facts.js +518 -0
  196. package/packages/core/build/cache/compiler-evidence.js +287 -0
  197. package/packages/core/build/cli/cache.mjs +77 -0
  198. package/packages/core/build/cli/facts.mjs +120 -0
  199. package/packages/core/build/cli/homebrew.mjs +101 -0
  200. package/packages/core/build/cli/lifecycle.mjs +66 -0
  201. package/packages/core/build/commands/aggregate-build-summary.mjs +75 -0
  202. package/packages/core/build/commands/anchored-version-material.mjs +42 -0
  203. package/packages/core/build/commands/artifact-signing-controller.mjs +112 -0
  204. package/packages/core/build/commands/artifact-signing-delegation.mjs +34 -0
  205. package/packages/core/build/commands/auditable-demo-platform.mjs +77 -0
  206. package/packages/core/build/commands/auditable-demo-transport-smoke.mjs +24 -0
  207. package/packages/core/build/commands/auditable-demo.mjs +63 -0
  208. package/packages/core/build/commands/compiler-cache-evidence.mjs +39 -0
  209. package/packages/core/build/commands/dispatch-artifact-signing-authority.mjs +19 -0
  210. package/packages/core/build/commands/import-artifact-signing-results.mjs +10 -0
  211. package/packages/core/build/commands/lifecycle-substage-evidence.mjs +42 -0
  212. package/packages/core/build/commands/resolve-artifact-coordinates.mjs +58 -0
  213. package/packages/core/build/commands/resolve-artifact-transfer-mode.mjs +54 -0
  214. package/packages/core/build/commands/resolve-build-configuration.mjs +23 -0
  215. package/packages/core/build/commands/resolve-build-contract.mjs +94 -0
  216. package/packages/core/build/commands/run-candidate-body-prefix-renderer.mjs +24 -0
  217. package/packages/core/build/commands/run-lifecycle.mjs +56 -0
  218. package/packages/core/build/commands/seal-artifact-signing-requests.mjs +10 -0
  219. package/packages/core/build/commands/seal-macos-credential-input.mjs +4 -0
  220. package/packages/core/build/commands/shifu-gate-profile.mjs +43 -0
  221. package/packages/core/build/commands/source-verification-evidence.mjs +14 -0
  222. package/packages/core/build/commands/stage-capsule-qualification.mjs +79 -0
  223. package/packages/core/build/commands/validate-package-manager-contract.mjs +24 -0
  224. package/packages/core/build/credential/seal-input.js +109 -0
  225. package/packages/core/build/demo/action-context.js +16 -0
  226. package/packages/core/build/demo/adapter-actions.js +35 -0
  227. package/packages/core/build/demo/adapter-transactions.js +66 -0
  228. package/packages/core/build/demo/adapter.js +272 -0
  229. package/packages/core/build/demo/binary-action.js +27 -0
  230. package/packages/core/build/demo/bundle-verification.js +211 -0
  231. package/packages/core/build/demo/capture-adaptation.js +37 -0
  232. package/packages/core/build/demo/capture.js +377 -0
  233. package/packages/core/build/demo/collection-actions.js +62 -0
  234. package/packages/core/build/demo/collection-containers.js +136 -0
  235. package/packages/core/build/demo/collection-context.js +40 -0
  236. package/packages/core/build/demo/collection.js +129 -0
  237. package/packages/core/build/demo/composition.js +319 -0
  238. package/packages/core/build/demo/container.js +113 -0
  239. package/packages/core/build/demo/gate.js +297 -0
  240. package/packages/core/build/demo/inspection-worker.js +4 -0
  241. package/packages/core/build/demo/io.js +220 -0
  242. package/packages/core/build/demo/materialization.js +350 -0
  243. package/packages/core/build/demo/media-bundle.js +112 -0
  244. package/packages/core/build/demo/media-inspection.js +332 -0
  245. package/packages/core/build/demo/media-profile.js +399 -0
  246. package/packages/core/build/demo/media-qualification-action.js +37 -0
  247. package/packages/core/build/demo/media-qualification.js +117 -0
  248. package/packages/core/build/demo/presentation.js +222 -0
  249. package/packages/core/build/demo/publication.js +118 -0
  250. package/packages/core/build/demo/renderer-evidence.js +193 -0
  251. package/packages/core/build/demo/renditions.js +398 -0
  252. package/packages/core/build/demo/scenario.js +493 -0
  253. package/packages/core/build/demo/schema.js +278 -0
  254. package/packages/core/build/demo/transport-smoke.js +149 -0
  255. package/packages/core/build/demo/values.js +137 -0
  256. package/packages/core/build/environment/action.js +17 -0
  257. package/packages/core/build/environment/provision.js +121 -0
  258. package/packages/core/build/gate/actions.js +99 -0
  259. package/packages/core/build/gate/aggregate.js +21 -0
  260. package/packages/core/build/gate/commands.js +66 -0
  261. package/packages/core/build/gate/controller.js +41 -0
  262. package/packages/core/build/gate/environment.js +18 -0
  263. package/packages/core/build/gate/execution.js +88 -0
  264. package/packages/core/build/gate/files.js +46 -0
  265. package/packages/core/build/gate/outputs.js +31 -0
  266. package/packages/core/build/gate/plan.js +61 -0
  267. package/packages/core/build/github-artifact-attestation.js +642 -0
  268. package/packages/core/build/github-attestation/action.js +21 -0
  269. package/packages/core/build/github-attestation/admission.js +26 -0
  270. package/packages/core/build/github-attestation/transaction.js +82 -0
  271. package/packages/core/build/homebrew.js +416 -0
  272. package/packages/core/build/lifecycle/action.js +65 -0
  273. package/packages/core/build/lifecycle/artifacts.js +123 -0
  274. package/packages/core/build/lifecycle/context.js +202 -0
  275. package/packages/core/build/lifecycle/diagnostics.js +254 -0
  276. package/packages/core/build/lifecycle/errors.js +44 -0
  277. package/packages/core/build/lifecycle/execution.js +221 -0
  278. package/packages/core/build/lifecycle/files.js +61 -0
  279. package/packages/core/build/lifecycle/manifest.js +107 -0
  280. package/packages/core/build/lifecycle/sampling.js +209 -0
  281. package/packages/core/build/lifecycle/stage-action.js +20 -0
  282. package/packages/core/build/lifecycle/stage.js +146 -0
  283. package/packages/core/build/lifecycle/substage-evidence.js +232 -0
  284. package/packages/core/build/lifecycle/transaction.js +13 -0
  285. package/packages/core/build/macos-credential-island/action.js +704 -0
  286. package/packages/core/build/macos-credential-island/cleanup.js +48 -0
  287. package/packages/core/build/macos-credential-island/dmg-assembly.js +441 -0
  288. package/packages/core/build/macos-credential-island/lib.js +812 -0
  289. package/packages/core/build/package-manager.js +315 -0
  290. package/packages/core/build/plan/action-context.js +23 -0
  291. package/packages/core/build/plan/action.js +75 -0
  292. package/packages/core/build/plan/admission.js +26 -0
  293. package/packages/core/build/plan/configuration.js +196 -0
  294. package/packages/core/build/plan/environment.js +18 -0
  295. package/packages/core/build/plan/identity.js +45 -0
  296. package/packages/core/build/plan/lifecycle.js +38 -0
  297. package/packages/core/build/plan/matrices.js +58 -0
  298. package/packages/core/build/plan/resolve.js +82 -0
  299. package/packages/core/build/plan/runners.js +48 -0
  300. package/packages/core/build/plan/source.js +58 -0
  301. package/packages/core/build/plan/stage-order.js +10 -0
  302. package/packages/core/build/plan/values.js +10 -0
  303. package/packages/core/build/platform-stage-checkpoints.js +471 -0
  304. package/packages/core/build/recovery/checkpoint.js +158 -0
  305. package/packages/core/build/recovery/transaction.js +51 -0
  306. package/packages/core/build/release-evidence-bundle.js +156 -0
  307. package/packages/core/build/runner/matrix.js +266 -0
  308. package/packages/core/build/runner/presets.js +115 -0
  309. package/packages/core/build/signing/actions.js +54 -0
  310. package/packages/core/build/signing/authority-actions.js +138 -0
  311. package/packages/core/build/signing/authority-transaction.js +82 -0
  312. package/packages/core/build/signing/control.js +218 -0
  313. package/packages/core/build/signing/controller-transaction.js +109 -0
  314. package/packages/core/build/signing/credential-transaction.js +66 -0
  315. package/packages/core/build/signing/delegation.js +279 -0
  316. package/packages/core/build/signing/detached.js +170 -0
  317. package/packages/core/build/signing/dispatch.js +261 -0
  318. package/packages/core/build/signing/environment.js +13 -0
  319. package/packages/core/build/signing/files.js +53 -0
  320. package/packages/core/build/signing/import-results.js +151 -0
  321. package/packages/core/build/signing/intake.js +109 -0
  322. package/packages/core/build/signing/materialize.js +54 -0
  323. package/packages/core/build/signing/merge-results.js +82 -0
  324. package/packages/core/build/signing/native-result.js +244 -0
  325. package/packages/core/build/signing/prepare.js +44 -0
  326. package/packages/core/build/signing/request.js +514 -0
  327. package/packages/core/build/signing/seal-requests.js +402 -0
  328. package/packages/core/build/signing/transaction.js +158 -0
  329. package/packages/core/build/signing/verify-results.js +118 -0
  330. package/packages/core/build/source/checkout-action.js +12 -0
  331. package/packages/core/build/source/controller-actions.js +52 -0
  332. package/packages/core/build/source/controller.js +179 -0
  333. package/packages/core/build/source/lifecycle-action.js +32 -0
  334. package/packages/core/build/source/lifecycle.js +124 -0
  335. package/packages/core/build/source/proof-actions.js +57 -0
  336. package/packages/core/build/source/proof-lookup.js +82 -0
  337. package/packages/core/build/source/proof.js +134 -0
  338. package/packages/core/build/source-admission.js +35 -0
  339. package/packages/core/build/stage-capsule/actions.js +43 -0
  340. package/packages/core/build/stage-capsule/campaign/aggregate.js +51 -0
  341. package/packages/core/build/stage-capsule/campaign/context.js +51 -0
  342. package/packages/core/build/stage-capsule/campaign/resume.js +245 -0
  343. package/packages/core/build/stage-capsule/campaign/run.js +47 -0
  344. package/packages/core/build/stage-capsule/campaign/seed.js +124 -0
  345. package/packages/core/build/stage-capsule/campaign/worker.js +17 -0
  346. package/packages/core/build/stage-capsule/canary.js +62 -0
  347. package/packages/core/build/stage-capsule/rehearsal/checkpoint.js +110 -0
  348. package/packages/core/build/stage-capsule/rehearsal/files.js +36 -0
  349. package/packages/core/build/stage-capsule/rehearsal/macos-tail.js +104 -0
  350. package/packages/core/build/stage-capsule/rehearsal/resume.js +38 -0
  351. package/packages/core/build/stage-capsule/rehearsal/run.js +46 -0
  352. package/packages/core/build/stage-capsule/rehearsal/verify.js +55 -0
  353. package/packages/core/build/stage-capsule/rehearsal/worker.js +11 -0
  354. package/packages/core/build/stage-capsule-local-store.js +428 -0
  355. package/packages/core/build/stage-capsule-qualification-campaign.js +511 -0
  356. package/packages/core/build/stage-capsule-qualification.js +455 -0
  357. package/packages/core/build/stage-capsule-resume-planner.js +396 -0
  358. package/packages/core/build/stage-capsule-store.js +404 -0
  359. package/packages/core/build/stage-capsule.js +319 -0
  360. package/packages/core/build/standalone/build.js +266 -0
  361. package/packages/core/build/standalone/bundle.js +69 -0
  362. package/packages/core/build/standalone/identity.js +47 -0
  363. package/packages/core/build/standalone/logging.js +72 -0
  364. package/packages/core/build/standalone/process.js +50 -0
  365. package/packages/core/build/summary/action.js +33 -0
  366. package/packages/core/build/summary/aggregation.js +120 -0
  367. package/packages/core/build/summary/artifacts.js +165 -0
  368. package/packages/core/build/summary/controller-receipt.js +50 -0
  369. package/packages/core/build/summary/execution.js +39 -0
  370. package/packages/core/build/summary/finalization.js +133 -0
  371. package/packages/core/build/summary/payloads.js +80 -0
  372. package/packages/core/build/validate-config/action.js +58 -0
  373. package/packages/core/build/validate-config/lib.js +42 -0
  374. package/packages/core/build/verification/actions.js +45 -0
  375. package/packages/core/build/verification/discovery.js +115 -0
  376. package/packages/core/build/verification/identity.js +123 -0
  377. package/packages/core/build/verification/proof.js +8 -0
  378. package/packages/core/build/verification/repository.js +4 -0
  379. package/packages/core/build/verification/runner.js +71 -0
  380. package/packages/core/build/verification/source.js +169 -0
  381. package/packages/core/consumer/buildchain-config.js +1825 -0
  382. package/packages/core/consumer/cli/infrastructure.mjs +6 -0
  383. package/packages/core/consumer/commands/consumer-policy.mjs +229 -0
  384. package/packages/core/consumer/floating-consumer-evidence.js +323 -0
  385. package/packages/core/consumer/floating-consumer-policy.js +505 -0
  386. package/packages/core/consumer/floating-consumer-release-passport.js +239 -0
  387. package/packages/core/consumer/policy-admission.js +101 -0
  388. package/packages/core/consumer/policy-scan.js +33 -0
  389. package/packages/core/consumer/runtime-selector-persistence.js +291 -0
  390. package/packages/core/contracts/action-inventory.js +78 -0
  391. package/packages/core/contracts/action-taxonomy.js +46 -0
  392. package/packages/core/contracts/buildchain-contract.js +904 -0
  393. package/packages/core/contracts/canonical-contracts.js +239 -0
  394. package/packages/core/contracts/cli/context.mjs +28 -0
  395. package/packages/core/contracts/cli/introspection.mjs +47 -0
  396. package/packages/core/contracts/cli/options.mjs +85 -0
  397. package/packages/core/contracts/cli-reference.js +192 -0
  398. package/packages/core/contracts/commands/buildchain-contract-lock.mjs +120 -0
  399. package/packages/core/contracts/commands/workflow-call-contract.mjs +133 -0
  400. package/packages/core/contracts/public-surface-audit.js +274 -0
  401. package/packages/core/contracts/public-surface-cli.js +134 -0
  402. package/packages/core/contracts/runtime-contract-inspection.js +115 -0
  403. package/packages/core/contracts/structured-values.js +29 -0
  404. package/packages/core/contracts/workflow-yaml-contract.js +383 -0
  405. package/packages/core/dev-delivery/admission/gh-cli-client.js +110 -0
  406. package/packages/core/dev-delivery/admission/github-client.js +274 -0
  407. package/packages/core/dev-delivery/admission/policy.js +177 -0
  408. package/packages/core/dev-delivery/admission/queue.js +554 -0
  409. package/packages/core/dev-delivery/admission/readiness.js +222 -0
  410. package/packages/core/dev-delivery/admission/report.js +27 -0
  411. package/packages/core/dev-delivery/admission/request.js +34 -0
  412. package/packages/core/dev-delivery/admission/targeted.js +375 -0
  413. package/packages/core/dev-delivery/admission/transaction.js +47 -0
  414. package/packages/core/dev-delivery/buildchain-delivery-bootstrap.js +240 -0
  415. package/packages/core/dev-delivery/buildchain-delivery-infrastructure.js +164 -0
  416. package/packages/core/dev-delivery/buildchain-delivery-self-dogfood.js +395 -0
  417. package/packages/core/dev-delivery/candidate/admission-actions.js +34 -0
  418. package/packages/core/dev-delivery/candidate/admission.js +171 -0
  419. package/packages/core/dev-delivery/candidate/coordinates.js +38 -0
  420. package/packages/core/dev-delivery/candidate/evidence.js +20 -0
  421. package/packages/core/dev-delivery/candidate/request.js +39 -0
  422. package/packages/core/dev-delivery/candidate/reservation-action.js +21 -0
  423. package/packages/core/dev-delivery/candidate/reservation.js +98 -0
  424. package/packages/core/dev-delivery/candidate/source-paths.js +102 -0
  425. package/packages/core/dev-delivery/candidate/submission.js +41 -0
  426. package/packages/core/dev-delivery/cli/dispatch.mjs +54 -0
  427. package/packages/core/dev-delivery/commands/dev-delivery-authority-command-adapters.mjs +193 -0
  428. package/packages/core/dev-delivery/commands/dev-delivery-authority-provider.mjs +28 -0
  429. package/packages/core/dev-delivery/commands/dev-delivery-authority.mjs +454 -0
  430. package/packages/core/dev-delivery/commands/dev-delivery-process-boundary.mjs +93 -0
  431. package/packages/core/dev-delivery/commands/dev-delivery-proof.mjs +258 -0
  432. package/packages/core/dev-delivery/commands/dev-delivery-provider-heartbeat.mjs +76 -0
  433. package/packages/core/dev-delivery/commands/dev-delivery-request.sh +152 -0
  434. package/packages/core/dev-delivery/commands/dev-delivery-source-proof-reuse.mjs +125 -0
  435. package/packages/core/dev-delivery/commands/dev-delivery-two-phase.mjs +180 -0
  436. package/packages/core/dev-delivery/commands/dev-delivery-warrant-options.mjs +283 -0
  437. package/packages/core/dev-delivery/commands/dev-delivery-warrant.mjs +65 -0
  438. package/packages/core/dev-delivery/commands/dev-merge-queue.mjs +98 -0
  439. package/packages/core/dev-delivery/commands/dev-pr-auto-merge.mjs +111 -0
  440. package/packages/core/dev-delivery/commands/dev-pr-delivery-warrant.mjs +467 -0
  441. package/packages/core/dev-delivery/commands/dev-pr-prequeue-guard.mjs +381 -0
  442. package/packages/core/dev-delivery/commands/dev-qualification-patrol.mjs +21 -0
  443. package/packages/core/dev-delivery/delivery-warrant-fixture-runner.js +375 -0
  444. package/packages/core/dev-delivery/delivery-warrant-read-candidate.js +281 -0
  445. package/packages/core/dev-delivery/delivery-warrant-semantic-diff-gate.js +351 -0
  446. package/packages/core/dev-delivery/delivery-warrant-shadow-adapter.js +444 -0
  447. package/packages/core/dev-delivery/dev-delivery-authority-candidate.js +197 -0
  448. package/packages/core/dev-delivery/dev-delivery-authority-landing.js +459 -0
  449. package/packages/core/dev-delivery/dev-delivery-authority-state.js +424 -0
  450. package/packages/core/dev-delivery/dev-delivery-candidate-identity.js +152 -0
  451. package/packages/core/dev-delivery/dev-delivery-contract-surface.js +26 -0
  452. package/packages/core/dev-delivery/dev-delivery-execution-transfer.js +578 -0
  453. package/packages/core/dev-delivery/dev-delivery-native-proof.js +509 -0
  454. package/packages/core/dev-delivery/dev-delivery-proof.js +282 -0
  455. package/packages/core/dev-delivery/dev-delivery-warrant-native-requirements.js +7 -0
  456. package/packages/core/dev-delivery/dev-delivery-warrant-state.js +580 -0
  457. package/packages/core/dev-delivery/dev-delivery-warrant.js +588 -0
  458. package/packages/core/dev-delivery/merge-queue-policy.js +543 -0
  459. package/packages/core/dev-delivery/native/action-context.js +31 -0
  460. package/packages/core/dev-delivery/native/actions.js +74 -0
  461. package/packages/core/dev-delivery/native/attempt.js +93 -0
  462. package/packages/core/dev-delivery/native/candidate.js +101 -0
  463. package/packages/core/dev-delivery/native/context-record.js +26 -0
  464. package/packages/core/dev-delivery/native/execution.js +176 -0
  465. package/packages/core/dev-delivery/native/failure.js +105 -0
  466. package/packages/core/dev-delivery/native/files.js +11 -0
  467. package/packages/core/dev-delivery/native/finalizer-admission.js +93 -0
  468. package/packages/core/dev-delivery/native/heartbeat-action.js +29 -0
  469. package/packages/core/dev-delivery/native/heartbeat.js +137 -0
  470. package/packages/core/dev-delivery/native/provider-boundary.js +69 -0
  471. package/packages/core/dev-delivery/native/qualification.js +228 -0
  472. package/packages/core/dev-delivery/native/readback.js +32 -0
  473. package/packages/core/dev-delivery/native/reuse.js +60 -0
  474. package/packages/core/dev-delivery/native/seal-action.js +19 -0
  475. package/packages/core/dev-delivery/native/transactions.js +155 -0
  476. package/packages/core/dev-delivery/native/transfer.js +122 -0
  477. package/packages/core/dev-delivery/published-delivery-authority.js +266 -0
  478. package/packages/core/dev-delivery/qualification/action.js +60 -0
  479. package/packages/core/dev-delivery/qualification/controller.js +218 -0
  480. package/packages/core/dev-delivery/qualification/github-client.js +108 -0
  481. package/packages/core/dev-delivery/qualification/model.js +186 -0
  482. package/packages/core/dev-delivery/qualification/report.js +25 -0
  483. package/packages/core/dev-delivery/queue/completion.js +52 -0
  484. package/packages/core/dev-delivery/queue/landing-action.js +60 -0
  485. package/packages/core/dev-delivery/queue/reconciliation-action.js +41 -0
  486. package/packages/core/dev-delivery/source-proof/evidence.js +92 -0
  487. package/packages/core/dev-delivery/source-proof/io.js +97 -0
  488. package/packages/core/dev-delivery/source-proof/predicates.js +82 -0
  489. package/packages/core/dev-delivery/source-proof/replay.js +143 -0
  490. package/packages/core/dev-delivery/source-proof/reuse.js +114 -0
  491. package/packages/core/dev-delivery/source-proof/seal.js +30 -0
  492. package/packages/core/dev-delivery/warrant/actions.js +78 -0
  493. package/packages/core/dev-delivery/warrant/cancellation.js +49 -0
  494. package/packages/core/dev-delivery/warrant/failure-settlement.js +93 -0
  495. package/packages/core/dev-delivery/warrant/handoff.js +107 -0
  496. package/packages/core/dev-delivery/warrant/observation.js +59 -0
  497. package/packages/core/dev-delivery/warrant/persistence.js +109 -0
  498. package/packages/core/dev-delivery/warrant/reservation-readback.js +72 -0
  499. package/packages/core/dev-delivery/warrant/service.js +134 -0
  500. package/packages/core/dev-delivery/warrant/terminal-policy.js +53 -0
  501. package/packages/core/dev-delivery/warrant/terminal.js +89 -0
  502. package/packages/core/dev-delivery/warrant/transitions.js +222 -0
  503. package/packages/core/dev-delivery/warrant/values.js +102 -0
  504. package/packages/core/governance/alpha-candidate/action.js +87 -0
  505. package/packages/core/governance/alpha-candidate/controller.js +490 -0
  506. package/packages/core/governance/alpha-candidate/lifecycle.js +121 -0
  507. package/packages/core/governance/alpha-candidate/options.js +60 -0
  508. package/packages/core/governance/alpha-candidate/outputs.js +23 -0
  509. package/packages/core/governance/alpha-candidate/provider.js +192 -0
  510. package/packages/core/governance/alpha-candidate/report.js +56 -0
  511. package/packages/core/governance/alpha-candidate/state.js +184 -0
  512. package/packages/core/governance/alpha-candidate/values.js +90 -0
  513. package/packages/core/governance/architecture-graph.js +24 -0
  514. package/packages/core/governance/audit/actions.js +55 -0
  515. package/packages/core/governance/audit/collection.js +257 -0
  516. package/packages/core/governance/audit/github-reader.js +204 -0
  517. package/packages/core/governance/audit/identity.js +58 -0
  518. package/packages/core/governance/audit/incident.mjs +39 -0
  519. package/packages/core/governance/audit/transactions.js +73 -0
  520. package/packages/core/governance/buildchain-compatibility-authority.js +335 -0
  521. package/packages/core/governance/buildchain-compatibility-fact.js +386 -0
  522. package/packages/core/governance/buildchain-compatibility-facts.json +18 -0
  523. package/packages/core/governance/buildchain-compatibility-proof.js +523 -0
  524. package/packages/core/governance/buildchain-publication-authority.js +116 -0
  525. package/packages/core/governance/candidate/body-action.js +18 -0
  526. package/packages/core/governance/candidate/body-renderer.js +160 -0
  527. package/packages/core/governance/ci-lane-change-budget.js +260 -0
  528. package/packages/core/governance/cli/compatibility-facts.mjs +101 -0
  529. package/packages/core/governance/cli/dispatch.mjs +19 -0
  530. package/packages/core/governance/cli/doctor.mjs +144 -0
  531. package/packages/core/governance/commands/architecture.mjs +594 -0
  532. package/packages/core/governance/commands/audit-github-governance.mjs +44 -0
  533. package/packages/core/governance/commands/audit-publication-control-plane.mjs +26 -0
  534. package/packages/core/governance/commands/buildchain-patrol.mjs +32 -0
  535. package/packages/core/governance/commands/create-github-artifact-attestation-policy.mjs +62 -0
  536. package/packages/core/governance/commands/engineering-housekeeper-workflow.mjs +23 -0
  537. package/packages/core/governance/commands/reconcile-github-governance.mjs +689 -0
  538. package/packages/core/governance/commands/reconcile-release-governance.mjs +77 -0
  539. package/packages/core/governance/commands/workflow-friction-report.mjs +375 -0
  540. package/packages/core/governance/github-governance-authority.js +1362 -0
  541. package/packages/core/governance/housekeeping/action.js +45 -0
  542. package/packages/core/governance/housekeeping/execution.js +75 -0
  543. package/packages/core/governance/housekeeping/options.js +103 -0
  544. package/packages/core/governance/housekeeping/report.js +53 -0
  545. package/packages/core/governance/housekeeping/transactions.js +96 -0
  546. package/packages/core/governance/patrol/action.js +41 -0
  547. package/packages/core/governance/patrol/controller.js +125 -0
  548. package/packages/core/governance/patrol/options.js +121 -0
  549. package/packages/core/governance/patrol/report.js +53 -0
  550. package/packages/core/governance/patrol/transaction.js +30 -0
  551. package/packages/core/governance/publication/audit.js +26 -0
  552. package/packages/core/governance/publication/collection.js +396 -0
  553. package/packages/core/governance/publication/policy-values.js +227 -0
  554. package/packages/core/governance/publication/source-authorization.js +293 -0
  555. package/packages/core/governance/receipt-admission-action.js +12 -0
  556. package/packages/core/governance/receipt-admission.js +19 -0
  557. package/packages/core/governance/release-check-policy.js +179 -0
  558. package/packages/core/governance/release-reconciliation-action.js +25 -0
  559. package/packages/core/governance/release-reconciliation.js +122 -0
  560. package/packages/core/governance/report-issue/action.js +201 -0
  561. package/packages/core/index.js +85 -117
  562. package/packages/core/observability/cli/candidate.mjs +42 -0
  563. package/packages/core/observability/cli/context.mjs +47 -0
  564. package/packages/core/observability/cli/diagnostics.mjs +88 -0
  565. package/packages/core/observability/cli/events.mjs +126 -0
  566. package/packages/core/observability/cli/process-sample.mjs +71 -0
  567. package/packages/core/observability/commands/aggregate-diagnostics-summary.mjs +45 -0
  568. package/packages/core/observability/commands/controller-evidence.mjs +109 -0
  569. package/packages/core/observability/commands/observed-evidence.mjs +27 -0
  570. package/packages/core/observability/controller/identity-action.js +11 -0
  571. package/packages/core/observability/controller/identity.js +31 -0
  572. package/packages/core/observability/controller-actions.js +63 -0
  573. package/packages/core/observability/controller-evidence-io.js +112 -0
  574. package/packages/core/observability/controller-evidence.js +550 -0
  575. package/packages/core/observability/controller-input-boundary.js +47 -0
  576. package/packages/core/observability/diagnostics/aggregate.js +25 -0
  577. package/packages/core/observability/diagnostics.js +1904 -0
  578. package/packages/core/observability/evidence/actions.js +20 -0
  579. package/packages/core/observability/evidence/bundle.js +163 -0
  580. package/packages/core/observability/evidence/publication.js +360 -0
  581. package/packages/core/observability/evidence/transactions.js +62 -0
  582. package/packages/core/observability/process/sampling.js +128 -0
  583. package/packages/core/observability/publisher-admission.js +26 -0
  584. package/packages/core/observability/transaction-journal.js +40 -0
  585. package/packages/core/paper/cli/dispatch.mjs +17 -0
  586. package/packages/core/paper/commands/paper-agent-cli.mjs +35 -0
  587. package/packages/core/paper/commands/paper-work-fleet-cli.mjs +577 -0
  588. package/packages/core/paper/commands/paper.mjs +632 -0
  589. package/packages/core/paper/operations/bootstrap.js +73 -0
  590. package/packages/core/paper/operations/files.js +48 -0
  591. package/packages/core/paper/operations/github-observation.js +136 -0
  592. package/packages/core/paper/operations/identity.js +59 -0
  593. package/packages/core/paper/operations/npm-observation.js +118 -0
  594. package/packages/core/paper/operations/plans.js +213 -0
  595. package/packages/core/paper/operations/preflight-checks.js +269 -0
  596. package/packages/core/paper/operations/provisioning-validation.js +155 -0
  597. package/packages/core/paper/operations/provisioning.js +113 -0
  598. package/packages/core/paper/operations/runtime-observation.js +25 -0
  599. package/packages/core/paper/operations/runtime.js +84 -0
  600. package/packages/core/paper/operations/scaffold-config.js +77 -0
  601. package/packages/core/paper/operations/scaffold-workflows.js +116 -0
  602. package/packages/core/paper/operations/scaffold.js +398 -0
  603. package/packages/core/paper/operations/status-facts.js +264 -0
  604. package/packages/core/paper/operations/status.js +353 -0
  605. package/packages/core/paper/operations/toolchain-observation.js +49 -0
  606. package/packages/core/paper/operations/workspace.js +60 -0
  607. package/packages/core/paper/paper-agent-entry.js +385 -0
  608. package/packages/core/paper/paper-fleet.js +310 -0
  609. package/packages/core/paper/paper-npm-bootstrap.js +492 -0
  610. package/packages/core/paper/paper-repository.js +214 -0
  611. package/packages/core/paper/paper-runtime-channels.js +299 -0
  612. package/packages/core/paper/paper-scaffold-content.js +574 -0
  613. package/packages/core/paper/paper.js +312 -0
  614. package/packages/core/paper/publication/actions.js +109 -0
  615. package/packages/core/paper/publication/candidate.js +131 -0
  616. package/packages/core/paper/publication/controller.js +117 -0
  617. package/packages/core/paper/publication/envelope.js +118 -0
  618. package/packages/core/paper/publication/propagation.js +135 -0
  619. package/packages/core/paper/publication/readback.js +89 -0
  620. package/packages/core/paper/publication/target.js +54 -0
  621. package/packages/core/paper/publication-controller.js +142 -0
  622. package/packages/core/providers/artifact-relay/files.js +71 -0
  623. package/packages/core/providers/artifact-relay/s3-client.js +259 -0
  624. package/packages/core/providers/artifact-relay/transactions.js +258 -0
  625. package/packages/core/providers/commands/artifact-relay-s3.mjs +62 -0
  626. package/packages/core/providers/commands/aws-codebuild-toolchain.mjs +15 -0
  627. package/packages/core/providers/commands/aws-macos-jit-controller-runtime.mjs +82 -0
  628. package/packages/core/providers/commands/aws-runner-burst-core.mjs +249 -0
  629. package/packages/core/providers/commands/aws-runner-burst.mjs +80 -0
  630. package/packages/core/providers/commands/aws-windows-jit-campaign.mjs +202 -0
  631. package/packages/core/providers/commands/aws-windows-jit-controller.mjs +578 -0
  632. package/packages/core/providers/commands/aws-windows-jit-operator.sh +506 -0
  633. package/packages/core/providers/commands/infra-contract-core.mjs +1032 -0
  634. package/packages/core/providers/commands/infra-contract.mjs +345 -0
  635. package/packages/core/providers/commands/locked-source-checkout.mjs +9 -0
  636. package/packages/core/providers/commands/route-offline-runners.mjs +30 -0
  637. package/packages/core/providers/demo/capture-worker.py +541 -0
  638. package/packages/core/providers/dev-delivery/candidate.js +112 -0
  639. package/packages/core/providers/dev-delivery/protection.js +29 -0
  640. package/packages/core/providers/dev-delivery/store.js +292 -0
  641. package/packages/core/providers/git/fetch-process.js +27 -0
  642. package/packages/core/providers/git/fetch-worker.js +146 -0
  643. package/packages/core/providers/git/patch-root.js +54 -0
  644. package/packages/core/providers/git-ref-readback.mjs +22 -0
  645. package/packages/core/providers/github/artifact-attestation.js +32 -0
  646. package/packages/core/providers/github/commits.js +32 -0
  647. package/packages/core/providers/github/json-client.js +65 -0
  648. package/packages/core/providers/github/product-publication.js +44 -0
  649. package/packages/core/providers/github/publication-control-plane.js +116 -0
  650. package/packages/core/providers/github/pull-requests.js +24 -0
  651. package/packages/core/providers/github/qualification.js +181 -0
  652. package/packages/core/providers/github/release-assets.js +91 -0
  653. package/packages/core/providers/github/signing-request.js +81 -0
  654. package/packages/core/providers/github/source-lock.js +98 -0
  655. package/packages/core/providers/github-cli-api.js +35 -0
  656. package/packages/core/providers/github-issue-comment.js +83 -0
  657. package/packages/core/providers/github-permission.js +11 -0
  658. package/packages/core/providers/github-token.js +121 -0
  659. package/packages/core/providers/process/sample-worker.mjs +14 -0
  660. package/packages/core/providers/runner/observation.js +30 -0
  661. package/packages/core/providers/runner/offline-routing.js +205 -0
  662. package/packages/core/providers/signing/detached-key.js +20 -0
  663. package/packages/core/providers/signing/macos/compound-archive.py +434 -0
  664. package/packages/core/providers/signing/macos/sign-request.sh +145 -0
  665. package/packages/core/providers/signing/native.js +77 -0
  666. package/packages/core/providers/signing/windows/sign-request.ps1 +48 -0
  667. package/packages/core/providers/source-checkout/action.js +31 -0
  668. package/packages/core/providers/source-checkout/auth.js +32 -0
  669. package/packages/core/providers/source-checkout/fetch.js +135 -0
  670. package/packages/core/providers/source-checkout/git.js +220 -0
  671. package/packages/core/providers/source-checkout/transaction.js +360 -0
  672. package/packages/core/providers/source-checkout/values.js +115 -0
  673. package/packages/core/providers/source-checkout/workspace.js +50 -0
  674. package/packages/core/providers/sync-git/action.mjs +16 -0
  675. package/packages/core/providers/sync-git/transfer.mjs +86 -0
  676. package/packages/core/providers/toolchain/codebuild-policy.js +36 -0
  677. package/packages/core/providers/toolchain/codebuild.js +220 -0
  678. package/packages/core/publication/authority/actions.js +152 -0
  679. package/packages/core/publication/authority/admission.js +113 -0
  680. package/packages/core/publication/authority/assembly.js +72 -0
  681. package/packages/core/publication/authority/binary-evidence.js +77 -0
  682. package/packages/core/publication/authority/candidate-evidence.js +42 -0
  683. package/packages/core/publication/authority/consumer-gate.js +80 -0
  684. package/packages/core/publication/authority/control-plane.js +38 -0
  685. package/packages/core/publication/authority/evidence.js +113 -0
  686. package/packages/core/publication/authority/gate.js +39 -0
  687. package/packages/core/publication/authority/governance.js +54 -0
  688. package/packages/core/publication/authority/paper-evidence.js +24 -0
  689. package/packages/core/publication/authority/request.js +13 -0
  690. package/packages/core/publication/authority/result.js +37 -0
  691. package/packages/core/publication/authority/runner.js +26 -0
  692. package/packages/core/publication/authority/seal.js +97 -0
  693. package/packages/core/publication/authority/verification-evidence.js +80 -0
  694. package/packages/core/publication/authority/verification.js +79 -0
  695. package/packages/core/publication/binary/action.js +31 -0
  696. package/packages/core/publication/binary/capability.js +55 -0
  697. package/packages/core/publication/binary/evidence.js +109 -0
  698. package/packages/core/publication/binary/transaction.js +38 -0
  699. package/packages/core/publication/candidate/artifact.js +71 -0
  700. package/packages/core/publication/candidate/collection-action.js +24 -0
  701. package/packages/core/publication/candidate/collection.js +70 -0
  702. package/packages/core/publication/candidate/kind.js +93 -0
  703. package/packages/core/publication/candidate/manifest.js +35 -0
  704. package/packages/core/publication/candidate/package-binding.js +42 -0
  705. package/packages/core/publication/candidate/package.js +50 -0
  706. package/packages/core/publication/candidate/paper-package.js +120 -0
  707. package/packages/core/publication/candidate/passport.js +36 -0
  708. package/packages/core/publication/candidate/qualification-action.js +36 -0
  709. package/packages/core/publication/candidate/qualification.js +56 -0
  710. package/packages/core/publication/candidate/registry-hydration.js +204 -0
  711. package/packages/core/publication/candidate/reproducibility.js +29 -0
  712. package/packages/core/publication/candidate/sealing.js +184 -0
  713. package/packages/core/publication/candidate/stage-capsules.js +205 -0
  714. package/packages/core/publication/candidate/toolchain.js +80 -0
  715. package/packages/core/publication/cli/dispatch.mjs +107 -0
  716. package/packages/core/publication/commands/create-release-bundle.mjs +32 -0
  717. package/packages/core/publication/commands/generate-release-candidate-passport.mjs +80 -0
  718. package/packages/core/publication/commands/installer-publication.mjs +45 -0
  719. package/packages/core/publication/commands/npm-publish-dry-run.mjs +48 -0
  720. package/packages/core/publication/commands/npm-publish-transaction.mjs +55 -0
  721. package/packages/core/publication/commands/publication-artifact-candidate.mjs +48 -0
  722. package/packages/core/publication/commands/publication-artifact.mjs +67 -0
  723. package/packages/core/publication/commands/publication-package.mjs +38 -0
  724. package/packages/core/publication/commands/publication-registry-hydrate.mjs +19 -0
  725. package/packages/core/publication/commands/publication-reproducibility.mjs +62 -0
  726. package/packages/core/publication/installer/evidence.js +319 -0
  727. package/packages/core/publication/npm/environment.js +18 -0
  728. package/packages/core/publication/npm/evidence.js +57 -0
  729. package/packages/core/publication/npm/pack-preview.js +22 -0
  730. package/packages/core/publication/npm/package-plan.js +82 -0
  731. package/packages/core/publication/npm/package.js +120 -0
  732. package/packages/core/publication/npm/preview-action.js +24 -0
  733. package/packages/core/publication/npm/preview.js +92 -0
  734. package/packages/core/publication/npm/registry.js +61 -0
  735. package/packages/core/publication/npm/transaction.js +115 -0
  736. package/packages/core/publication/oci/preview-actions.js +39 -0
  737. package/packages/core/publication/oci/preview-admission.js +93 -0
  738. package/packages/core/publication/oci/preview-promotion.js +64 -0
  739. package/packages/core/publication/oci/preview-registry.js +36 -0
  740. package/packages/core/publication/oci/preview-transaction.js +42 -0
  741. package/packages/core/publication/oci/preview-values.js +8 -0
  742. package/packages/core/publication/oci-compose-qualification.js +143 -0
  743. package/packages/core/publication/oci-publication-bundle.js +281 -0
  744. package/packages/core/publication/publication-artifact-candidate.js +128 -0
  745. package/packages/core/publication/publication-artifact.js +641 -0
  746. package/packages/core/publication/publication-authority.js +1163 -0
  747. package/packages/core/publication/publication-development.js +72 -0
  748. package/packages/core/publication/publication-package.js +252 -0
  749. package/packages/core/publication/publication-rehearsal-capsule.js +468 -0
  750. package/packages/core/publication/publication-rehearsal-projection.js +104 -0
  751. package/packages/core/publication/publication-rehearsal-runtime.js +190 -0
  752. package/packages/core/publication/publication-rehearsal.js +481 -0
  753. package/packages/core/publication/publication-reproducibility.js +947 -0
  754. package/packages/core/publication/settlement/actions.js +54 -0
  755. package/packages/core/publication/settlement/transaction.js +197 -0
  756. package/packages/core/release/binary/coordinates-action.js +12 -0
  757. package/packages/core/release/binary/coordinates.js +59 -0
  758. package/packages/core/release/candidate/download.js +64 -0
  759. package/packages/core/release/candidate/lineage.js +72 -0
  760. package/packages/core/release/candidate/materialize.js +155 -0
  761. package/packages/core/release/candidate/payloads.js +330 -0
  762. package/packages/core/release/candidate/publication-intent.js +89 -0
  763. package/packages/core/release/candidate/resolve.js +132 -0
  764. package/packages/core/release/candidate/run-selection.js +88 -0
  765. package/packages/core/release/candidate/selection.js +181 -0
  766. package/packages/core/release/candidate/transport.js +143 -0
  767. package/packages/core/release/cli/command-handlers.mjs +14 -0
  768. package/packages/core/release/cli/dispatch.mjs +39 -0
  769. package/packages/core/release/cli/inspection-handlers.mjs +178 -0
  770. package/packages/core/release/cli/release-handlers.mjs +332 -0
  771. package/packages/core/release/cli/trust-release.mjs +19 -0
  772. package/packages/core/release/cli/verification-handlers.mjs +303 -0
  773. package/packages/core/release/commands/dev-alpha-candidate-patrol.mjs +42 -0
  774. package/packages/core/release/commands/ensure-github-release.mjs +199 -0
  775. package/packages/core/release/commands/next-development-review.mjs +77 -0
  776. package/packages/core/release/commands/next-development-transition.mjs +47 -0
  777. package/packages/core/release/commands/promotion-channel-router.mjs +18 -0
  778. package/packages/core/release/commands/publish-source-ref-resolver.mjs +113 -0
  779. package/packages/core/release/commands/release-candidate-resolver.mjs +122 -0
  780. package/packages/core/release/commands/release-line-dry-run.mjs +53 -0
  781. package/packages/core/release/commands/release-propagation.mjs +411 -0
  782. package/packages/core/release/commands/release-tail.mjs +169 -0
  783. package/packages/core/release/commands/release-transaction.mjs +212 -0
  784. package/packages/core/release/commands/resolve-publish-gate.mjs +34 -0
  785. package/packages/core/release/commands/resolve-publish-source.mjs +96 -0
  786. package/packages/core/release/commands/resume-from-candidate-run.mjs +106 -0
  787. package/packages/core/release/commands/stable-candidate-patrol.mjs +31 -0
  788. package/packages/core/release/commands/stable-candidate-qualification.mjs +24 -0
  789. package/packages/core/release/commands/stable-release-gate.mjs +351 -0
  790. package/packages/core/release/commands/tail-reseal.mjs +148 -0
  791. package/packages/core/release/commands/verify-publish-channel-ref.mjs +83 -0
  792. package/packages/core/release/commands/verify-publish-source-lock.mjs +37 -0
  793. package/packages/core/release/commands/verify-release-pr.mjs +6 -0
  794. package/packages/core/release/commands/verify-version-state-delta.mjs +21 -0
  795. package/packages/core/release/dev-alpha-active-release-train.js +455 -0
  796. package/packages/core/release/github-provider-plane.js +319 -0
  797. package/packages/core/release/github-release.js +385 -0
  798. package/packages/core/release/line/action.js +38 -0
  799. package/packages/core/release/line/governance.js +96 -0
  800. package/packages/core/release/line/plan.js +56 -0
  801. package/packages/core/release/line/policy.js +320 -0
  802. package/packages/core/release/line/protection.js +35 -0
  803. package/packages/core/release/line/request.js +22 -0
  804. package/packages/core/release/line/source.js +79 -0
  805. package/packages/core/release/line/transaction.js +33 -0
  806. package/packages/core/release/line/verification-action.js +13 -0
  807. package/packages/core/release/line/verification.js +13 -0
  808. package/packages/core/release/next-development/actions.js +119 -0
  809. package/packages/core/release/next-development/approval.js +59 -0
  810. package/packages/core/release/next-development/enqueue.js +51 -0
  811. package/packages/core/release/next-development/finalization.js +127 -0
  812. package/packages/core/release/next-development/observation.js +41 -0
  813. package/packages/core/release/next-development/review-policy.js +56 -0
  814. package/packages/core/release/next-development/verification.js +89 -0
  815. package/packages/core/release/next-development-projection.js +310 -0
  816. package/packages/core/release/next-development-transition.js +737 -0
  817. package/packages/core/release/partial-mutation-recovery-qualification.js +18 -0
  818. package/packages/core/release/passport/artifact-index.js +65 -0
  819. package/packages/core/release/passport/assembly-artifacts.js +43 -0
  820. package/packages/core/release/passport/assembly-inputs.js +107 -0
  821. package/packages/core/release/passport/assembly-material.js +261 -0
  822. package/packages/core/release/passport/assembly-render.js +320 -0
  823. package/packages/core/release/passport/assembly.js +12 -0
  824. package/packages/core/release/passport/assets.js +46 -0
  825. package/packages/core/release/passport/attachments.js +88 -0
  826. package/packages/core/release/passport/authoritative-base.js +123 -0
  827. package/packages/core/release/passport/build.js +39 -0
  828. package/packages/core/release/passport/collection-inputs.js +383 -0
  829. package/packages/core/release/passport/collection-material.js +199 -0
  830. package/packages/core/release/passport/collection-options.js +97 -0
  831. package/packages/core/release/passport/collection-output.js +303 -0
  832. package/packages/core/release/passport/collection.js +10 -0
  833. package/packages/core/release/passport/commands.js +44 -0
  834. package/packages/core/release/passport/consumer-input.js +18 -0
  835. package/packages/core/release/passport/consumer-validation.js +56 -0
  836. package/packages/core/release/passport/discovery.js +36 -0
  837. package/packages/core/release/passport/documents.js +116 -0
  838. package/packages/core/release/passport/evidence-validation.js +280 -0
  839. package/packages/core/release/passport/files.js +43 -0
  840. package/packages/core/release/passport/fixture.js +19 -0
  841. package/packages/core/release/passport/identity.js +46 -0
  842. package/packages/core/release/passport/impact-validation.js +230 -0
  843. package/packages/core/release/passport/impact.js +149 -0
  844. package/packages/core/release/passport/inputs.js +55 -0
  845. package/packages/core/release/passport/invariants.js +93 -0
  846. package/packages/core/release/passport/issues.js +29 -0
  847. package/packages/core/release/passport/json.js +16 -0
  848. package/packages/core/release/passport/locations.js +82 -0
  849. package/packages/core/release/passport/packages.js +123 -0
  850. package/packages/core/release/passport/publish-validation.js +279 -0
  851. package/packages/core/release/passport/publish.js +58 -0
  852. package/packages/core/release/passport/report.js +154 -0
  853. package/packages/core/release/passport/state-validation.js +163 -0
  854. package/packages/core/release/passport/transaction.js +69 -0
  855. package/packages/core/release/passport/trust-claims.js +365 -0
  856. package/packages/core/release/passport/trust-validation.js +528 -0
  857. package/packages/core/release/product-publication.js +59 -0
  858. package/packages/core/release/promote-candidate/action.js +9 -0
  859. package/packages/core/release/promote-candidate/development-source.js +38 -0
  860. package/packages/core/release/promote-candidate/evidence-binding.js +142 -0
  861. package/packages/core/release/promote-candidate/evidence-inputs.js +99 -0
  862. package/packages/core/release/promote-candidate/files.js +10 -0
  863. package/packages/core/release/promote-candidate/next-development-provider.js +300 -0
  864. package/packages/core/release/promote-candidate/next-development-queue.js +63 -0
  865. package/packages/core/release/promote-candidate/oci-provider.js +241 -0
  866. package/packages/core/release/promote-candidate/oci-registry-client.js +67 -0
  867. package/packages/core/release/promote-candidate/outputs.js +29 -0
  868. package/packages/core/release/promote-candidate/product-finalization-wait.js +52 -0
  869. package/packages/core/release/promote-candidate/product-provider-adapters.js +462 -0
  870. package/packages/core/release/promote-candidate/product-provider-github-adapters.js +595 -0
  871. package/packages/core/release/promote-candidate/product-provider.js +188 -0
  872. package/packages/core/release/promote-candidate/provider-request.js +51 -0
  873. package/packages/core/release/promote-candidate/provider-settlement.js +83 -0
  874. package/packages/core/release/promote-candidate/publication-completion.js +56 -0
  875. package/packages/core/release/promote-candidate/release-documents.js +156 -0
  876. package/packages/core/release/promote-candidate/transaction.js +130 -0
  877. package/packages/core/release/promote-ref/action-environment.js +2 -0
  878. package/packages/core/release/promote-ref/action-inputs.js +285 -0
  879. package/packages/core/release/promote-ref/action-outputs.js +140 -0
  880. package/packages/core/release/promote-ref/action-request.js +205 -0
  881. package/packages/core/release/promote-ref/action.js +92 -0
  882. package/packages/core/release/promote-ref/internal/branch-protection.js +218 -0
  883. package/packages/core/release/promote-ref/internal/candidate-admission.js +149 -0
  884. package/packages/core/release/promote-ref/internal/channel-governance.js +297 -0
  885. package/packages/core/release/promote-ref/internal/channel-resume.js +198 -0
  886. package/packages/core/release/promote-ref/internal/channel-tags.js +207 -0
  887. package/packages/core/release/promote-ref/internal/contained-published-version-state.js +80 -0
  888. package/packages/core/release/promote-ref/internal/durable-transaction-operations.js +463 -0
  889. package/packages/core/release/promote-ref/internal/durable-transaction-store.js +395 -0
  890. package/packages/core/release/promote-ref/internal/generated-branch.js +16 -0
  891. package/packages/core/release/promote-ref/internal/generated-identity.js +12 -0
  892. package/packages/core/release/promote-ref/internal/generated-ref.js +93 -0
  893. package/packages/core/release/promote-ref/internal/github-adapter.js +312 -0
  894. package/packages/core/release/promote-ref/internal/npm-distribution.js +185 -0
  895. package/packages/core/release/promote-ref/internal/npm-existing-evidence.js +61 -0
  896. package/packages/core/release/promote-ref/internal/passport-files.js +116 -0
  897. package/packages/core/release/promote-ref/internal/passport-generation.js +567 -0
  898. package/packages/core/release/promote-ref/internal/promote-alpha-channel.js +588 -0
  899. package/packages/core/release/promote-ref/internal/promote-major-channel.js +476 -0
  900. package/packages/core/release/promote-ref/internal/promote-release-channel.js +573 -0
  901. package/packages/core/release/promote-ref/internal/promotion-operations.js +1170 -0
  902. package/packages/core/release/promote-ref/internal/promotion-options.js +101 -0
  903. package/packages/core/release/promote-ref/internal/promotion-policy.js +218 -0
  904. package/packages/core/release/promote-ref/internal/publish-command.js +211 -0
  905. package/packages/core/release/promote-ref/internal/publish-contract.js +181 -0
  906. package/packages/core/release/promote-ref/internal/publish-transaction.js +510 -0
  907. package/packages/core/release/promote-ref/internal/tag-selection.js +159 -0
  908. package/packages/core/release/promote-ref/internal/transaction-context.js +506 -0
  909. package/packages/core/release/promote-ref/internal/transaction-recovery.js +379 -0
  910. package/packages/core/release/promote-ref/internal/version-state-operations.js +545 -0
  911. package/packages/core/release/promote-ref/lib.js +600 -0
  912. package/packages/core/release/promote-ref/release-tail.js +102 -0
  913. package/packages/core/release/promote-ref/source-lock.js +91 -0
  914. package/packages/core/release/promotion/actions.js +102 -0
  915. package/packages/core/release/promotion/admission.js +5 -0
  916. package/packages/core/release/promotion/candidate.js +69 -0
  917. package/packages/core/release/promotion/channel.js +16 -0
  918. package/packages/core/release/promotion/product-state.js +68 -0
  919. package/packages/core/release/promotion/publish-gate.js +128 -0
  920. package/packages/core/release/promotion/qualification-action.js +61 -0
  921. package/packages/core/release/promotion/qualification.js +95 -0
  922. package/packages/core/release/promotion/routing.js +29 -0
  923. package/packages/core/release/promotion/selection.js +47 -0
  924. package/packages/core/release/promotion/source-intent.js +35 -0
  925. package/packages/core/release/promotion-request.js +109 -0
  926. package/packages/core/release/propagation/actions.js +75 -0
  927. package/packages/core/release/propagation/delivery.js +202 -0
  928. package/packages/core/release/propagation/planning.js +197 -0
  929. package/packages/core/release/propagation/report.js +97 -0
  930. package/packages/core/release/propagation/store.js +26 -0
  931. package/packages/core/release/propagation/transactions.js +213 -0
  932. package/packages/core/release/propagation/work.js +146 -0
  933. package/packages/core/release/protected-publication-source.js +91 -0
  934. package/packages/core/release/provider-operation-journal.js +62 -0
  935. package/packages/core/release/provider-readback-idempotency.js +309 -0
  936. package/packages/core/release/qualification/actions.js +43 -0
  937. package/packages/core/release/qualification/campaign.js +154 -0
  938. package/packages/core/release/qualification/options.js +102 -0
  939. package/packages/core/release/qualification/public-build.js +109 -0
  940. package/packages/core/release/recovery/artifacts.js +161 -0
  941. package/packages/core/release/recovery/candidate.js +523 -0
  942. package/packages/core/release/recovery/capsules.js +94 -0
  943. package/packages/core/release/recovery/download.js +191 -0
  944. package/packages/core/release/recovery/files.js +39 -0
  945. package/packages/core/release/recovery/lineage.js +305 -0
  946. package/packages/core/release/recovery/provenance.js +198 -0
  947. package/packages/core/release/recovery/publication.js +183 -0
  948. package/packages/core/release/recovery/readback.js +156 -0
  949. package/packages/core/release/recovery/runtime.js +133 -0
  950. package/packages/core/release/recovery/transactions.js +139 -0
  951. package/packages/core/release/release-activation-shadow.js +32 -0
  952. package/packages/core/release/release-blocker-priority.js +183 -0
  953. package/packages/core/release/release-candidate-recovery.js +590 -0
  954. package/packages/core/release/release-candidate.js +588 -0
  955. package/packages/core/release/release-invocation.js +64 -0
  956. package/packages/core/release/release-line-bootstrap.js +292 -0
  957. package/packages/core/release/release-line-dry-run.js +302 -0
  958. package/packages/core/release/release-passport-contract.js +479 -0
  959. package/packages/core/release/release-passport.js +74 -0
  960. package/packages/core/release/release-tail-provider-adapters.js +460 -0
  961. package/packages/core/release/release-tail-provider-plane.js +248 -0
  962. package/packages/core/release/reseal/actions.js +65 -0
  963. package/packages/core/release/reseal/admission.js +73 -0
  964. package/packages/core/release/reseal/files.js +39 -0
  965. package/packages/core/release/reseal/finalize-platform.js +63 -0
  966. package/packages/core/release/reseal/outputs.js +21 -0
  967. package/packages/core/release/reseal/plan.js +24 -0
  968. package/packages/core/release/reseal/platform.js +135 -0
  969. package/packages/core/release/reseal/readbacks.js +36 -0
  970. package/packages/core/release/reseal/seal.js +125 -0
  971. package/packages/core/release/reuse-complete-release.js +240 -0
  972. package/packages/core/release/settle/action.js +412 -0
  973. package/packages/core/release/source/channel.js +45 -0
  974. package/packages/core/release/source/coordinates.js +160 -0
  975. package/packages/core/release/source/lineage.js +144 -0
  976. package/packages/core/release/source/manifest.js +114 -0
  977. package/packages/core/release/stable-patrol/action.js +87 -0
  978. package/packages/core/release/stable-patrol/controller.js +346 -0
  979. package/packages/core/release/stable-patrol/coordinates.js +16 -0
  980. package/packages/core/release/stable-patrol/github-client.js +181 -0
  981. package/packages/core/release/stable-patrol/options.js +87 -0
  982. package/packages/core/release/stable-patrol/report.js +28 -0
  983. package/packages/core/release/stable-publication-fence.js +28 -0
  984. package/packages/core/release/tail-reseal-github.js +174 -0
  985. package/packages/core/release/tail-reseal-receipt.js +227 -0
  986. package/packages/core/release/tail-reseal.js +576 -0
  987. package/packages/core/release/version-state/verification.js +164 -0
  988. package/packages/core/release/version-state.js +449 -0
  989. package/packages/core/runtime/action-host.js +19 -0
  990. package/packages/core/runtime/action-process.mjs +23 -0
  991. package/packages/core/runtime/buildchain-domain.wasm +0 -0
  992. package/packages/core/runtime/checkout-identity.js +14 -0
  993. package/packages/core/runtime/commands/bridge-bootstrap.mjs +147 -0
  994. package/packages/core/runtime/commands/host-adapter.mjs +185 -0
  995. package/packages/core/runtime/consumer-shell.js +174 -0
  996. package/packages/core/runtime/domain-wasm-artifact.js +7 -0
  997. package/packages/core/runtime/entry/actions.js +121 -0
  998. package/packages/core/runtime/entry/activation.js +86 -0
  999. package/packages/core/runtime/entry/github.js +52 -0
  1000. package/packages/core/runtime/entry/recovery.js +37 -0
  1001. package/packages/core/runtime/entry/selection.js +110 -0
  1002. package/packages/core/runtime/installation-root.js +29 -0
  1003. package/packages/core/runtime/locked-dependencies.js +74 -0
  1004. package/packages/core/runtime/toolchain/actions.js +14 -0
  1005. package/packages/core/runtime/toolchain/user-paths.js +9 -0
  1006. package/packages/core/runtime/toolchain/windows-rust.js +67 -0
  1007. package/packages/core/web/apply-admission-action.js +20 -0
  1008. package/packages/core/web/apply-admission.js +44 -0
  1009. package/packages/core/web/cli/badges.mjs +100 -0
  1010. package/packages/core/web/cli/surface.mjs +6 -0
  1011. package/packages/core/web/commands/web-surface-core.mjs +2603 -0
  1012. package/packages/core/web/commands/web-surface-production-release-pr.mjs +126 -0
  1013. package/packages/core/web/commands/web-surface.mjs +294 -0
  1014. package/packages/core/web/controller-actions.js +45 -0
  1015. package/packages/core/web/controller.js +145 -0
  1016. package/packages/core/web/deployment/apply-action.js +31 -0
  1017. package/packages/core/web/deployment/apply-evidence.js +134 -0
  1018. package/packages/core/web/deployment/apply.js +118 -0
  1019. package/packages/core/web/deployment/cloudfront-wait.js +88 -0
  1020. package/packages/core/web/deployment/plan-files.js +41 -0
  1021. package/packages/core/web/deployment/planning-action.js +28 -0
  1022. package/packages/core/web/deployment/planning.js +126 -0
  1023. package/packages/core/web/deployment/report-action.js +74 -0
  1024. package/packages/core/web/deployment/summary.js +44 -0
  1025. package/packages/core/web/preview-feedback-action.js +26 -0
  1026. package/packages/core/web/preview-feedback.js +40 -0
  1027. package/packages/core/web/production-decision-action.js +42 -0
  1028. package/packages/core/web/production-decision.js +85 -0
  1029. package/packages/core/web/production-intent-action.js +14 -0
  1030. package/packages/core/web/production-intent.js +167 -0
  1031. package/packages/core/web/publication-admission-action.js +85 -0
  1032. package/packages/core/web/publication-admission.js +183 -0
  1033. package/packages/core/web/publication-capability-action.js +22 -0
  1034. package/packages/core/web/publication-capability.js +73 -0
  1035. package/packages/core/web/readme-badges.js +891 -0
  1036. package/packages/core/web/release-feedback.js +414 -0
  1037. package/packages/core/web/release-pr-action.js +47 -0
  1038. package/packages/core/web/release-pr-handoff.js +176 -0
  1039. package/packages/core/web/release-pr-provider.js +295 -0
  1040. package/packages/core/web/release-pr-summary.js +42 -0
  1041. package/packages/core/web/release-pr-transaction.js +158 -0
  1042. package/packages/core/web/release-review-action.js +21 -0
  1043. package/packages/core/web/release-review.js +130 -0
  1044. package/packages/core/web/web-surface-publication-candidate.js +159 -0
  1045. package/packages/core/workflow/admission/actions.js +36 -0
  1046. package/packages/core/workflow/admission/recovery.js +7 -0
  1047. package/packages/core/workflow/admission/transactions.js +44 -0
  1048. package/packages/core/workflow/cli/main.mjs +131 -0
  1049. package/packages/core/workflow/cli/process.mjs +16 -0
  1050. package/packages/core/workflow/commands/buildchain-cli-help.mjs +318 -0
  1051. package/packages/core/workflow/commands/universal-workflow-engine.mjs +68 -0
  1052. package/packages/core/workflow/dogfood/actions.js +45 -0
  1053. package/packages/core/workflow/dogfood/readiness.js +74 -0
  1054. package/packages/core/workflow/dogfood/transactions.js +90 -0
  1055. package/packages/core/workflow/engine/action.js +37 -0
  1056. package/packages/core/workflow/engine/conformance.js +93 -0
  1057. package/packages/core/workflow/engine/execution.js +73 -0
  1058. package/packages/core/workflow/engine/identity.js +29 -0
  1059. package/packages/core/workflow/engine/provider-context.js +16 -0
  1060. package/packages/core/workflow/engine/release-environment.js +33 -0
  1061. package/packages/core/workflow/engine/release-evidence.js +39 -0
  1062. package/packages/core/workflow/engine/release-observation.js +97 -0
  1063. package/packages/core/workflow/engine/release-promotion.js +227 -0
  1064. package/packages/core/workflow/event-trust.js +25 -0
  1065. package/packages/core/workflow/request-rejection.js +3 -0
  1066. package/packages/core/workflow/settlement/actions.js +22 -0
  1067. package/packages/core/workflow/universal-self-dogfood.js +149 -0
  1068. package/packages/core/workflow/universal-workflow-bootstrap.js +361 -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 +44 -0
  1078. package/scripts/check-floating-consumer-policy-contract.mjs +36 -62
  1079. package/scripts/check-implementation-naming.mjs +2 -23
  1080. package/scripts/check-internal-architecture.mjs +3 -3
  1081. package/scripts/check-inventory.mjs +158 -325
  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 +187 -51
  1086. package/scripts/check-release-tail-contract.mjs +62 -71
  1087. package/scripts/check-release-topology.mjs +103 -83
  1088. package/scripts/check-runtime-entry.mjs +133 -0
  1089. package/scripts/check-runtime-semantic-closure.mjs +5 -8
  1090. package/scripts/check-source-bindings.mjs +54 -0
  1091. package/scripts/check-universal-workflow-bootstrap.mjs +46 -270
  1092. package/scripts/check-workflow-taxonomy.mjs +1 -1
  1093. package/scripts/check-workflows.sh +4 -0
  1094. package/scripts/generate-bootstrap-admission.mjs +32 -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 +74 -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/runtime-source-boundaries.mjs +70 -0
  1114. package/scripts/site-action-audit.mjs +16 -0
  1115. package/scripts/site-capability-metadata.mjs +5 -9
  1116. package/scripts/source-metric-lineage.mjs +17 -0
  1117. package/scripts/stage-capsule-resume-rehearsal.mjs +19 -55
  1118. package/scripts/tail-reseal-macos-rehearsal.mjs +1 -109
  1119. package/scripts/tsup-action.config.mjs +21 -0
  1120. package/scripts/verify-golden-path.mjs +1 -1
  1121. package/scripts/warrant-shadow-plan.mjs +49 -243
  1122. package/scripts/workflow-action-graph.mjs +136 -0
  1123. package/scripts/workflow-self-reference.mjs +20 -0
  1124. package/templates/native-dev-delivery.yml +31 -44
  1125. package/templates/universal-buildchain-bootstrap.yml +13 -3
  1126. package/actions/github-artifact-attestation/README.md +0 -10
  1127. package/actions/promote-buildchain-ref/README.md +0 -549
  1128. package/actions/report-buildchain-issue/README.md +0 -107
  1129. package/actions/run-lifecycle/README.md +0 -71
  1130. package/actions/validate-config/README.md +0 -52
  1131. package/architecture/implementation-naming.json +0 -1273
  1132. package/architecture/runtime-ref-resume-authority.json +0 -64
  1133. package/architecture/universal-workflow-train-admission.json +0 -40
  1134. package/bin/internal/adopter-delivery-cli.mjs +0 -70
  1135. package/bin/internal/cli-options.mjs +0 -79
  1136. package/bin/internal/compatibility-facts-cli.mjs +0 -101
  1137. package/bin/internal/trust-release-cli.mjs +0 -19
  1138. package/bin/internal/trust-release-command-handlers.mjs +0 -14
  1139. package/bin/internal/trust-release-inspection-handlers.mjs +0 -175
  1140. package/bin/internal/trust-release-release-handlers.mjs +0 -332
  1141. package/bin/internal/trust-release-verification-handlers.mjs +0 -306
  1142. package/contracts/fixtures/v4-adopter-delivery-v1/archive-template.json +0 -19
  1143. package/contracts/fixtures/v4-adopter-delivery-v1/bootstrap-positive.json +0 -93
  1144. package/contracts/fixtures/v4-runtime-ref-resume-authority-v1/scenario.json +0 -15
  1145. package/contracts/v4-runtime-ref-resume-authority-v1.schema.json +0 -235
  1146. package/docs/v4-runtime-ref-resume-authority.md +0 -69
  1147. package/packages/compatibility/adopter-delivery.js +0 -16
  1148. package/packages/compatibility/cross-platform-adopter-qualification.js +0 -12
  1149. package/packages/compatibility/floating-consumer-policy.js +0 -14
  1150. package/packages/compatibility/publication-qualification.js +0 -11
  1151. package/packages/compatibility/publication-rehearsal.js +0 -18
  1152. package/packages/compatibility/runtime-ref-resume-authority.js +0 -13
  1153. package/packages/compatibility/tail-reseal-receipt.js +0 -7
  1154. package/packages/compatibility/tail-reseal.js +0 -11
  1155. package/packages/core/adopter-delivery-parity.js +0 -219
  1156. package/packages/core/adopter-delivery.js +0 -359
  1157. package/packages/core/anchored-version-material.js +0 -281
  1158. package/packages/core/artifact-passport.js +0 -847
  1159. package/packages/core/artifact-signing.js +0 -474
  1160. package/packages/core/artifact-verification-envelope.js +0 -500
  1161. package/packages/core/build-facts.js +0 -575
  1162. package/packages/core/buildchain-compatibility-authority.js +0 -336
  1163. package/packages/core/buildchain-compatibility-fact.js +0 -394
  1164. package/packages/core/buildchain-compatibility-facts.json +0 -217
  1165. package/packages/core/buildchain-compatibility-proof.js +0 -566
  1166. package/packages/core/buildchain-config.js +0 -1887
  1167. package/packages/core/buildchain-contract.js +0 -1048
  1168. package/packages/core/buildchain-delivery-bootstrap.js +0 -240
  1169. package/packages/core/buildchain-delivery-infrastructure.js +0 -164
  1170. package/packages/core/buildchain-delivery-self-dogfood.js +0 -395
  1171. package/packages/core/buildchain-domain.wasm +0 -0
  1172. package/packages/core/buildchain-kfd-claims.js +0 -733
  1173. package/packages/core/buildchain-publication-authority.js +0 -118
  1174. package/packages/core/canonical-contracts.js +0 -239
  1175. package/packages/core/ci-lane-change-budget.js +0 -260
  1176. package/packages/core/controller-evidence.js +0 -553
  1177. package/packages/core/cross-platform-adopter-qualification.js +0 -343
  1178. package/packages/core/delivery-warrant-fixture-runner.js +0 -375
  1179. package/packages/core/delivery-warrant-read-candidate.js +0 -286
  1180. package/packages/core/delivery-warrant-semantic-diff-gate.js +0 -351
  1181. package/packages/core/delivery-warrant-shadow-adapter.js +0 -447
  1182. package/packages/core/dev-alpha-active-release-train.js +0 -460
  1183. package/packages/core/dev-delivery-authority-candidate.js +0 -270
  1184. package/packages/core/dev-delivery-authority-landing.js +0 -461
  1185. package/packages/core/dev-delivery-authority-state.js +0 -583
  1186. package/packages/core/dev-delivery-candidate-identity.js +0 -169
  1187. package/packages/core/dev-delivery-contract-surface.js +0 -76
  1188. package/packages/core/dev-delivery-execution-transfer.js +0 -591
  1189. package/packages/core/dev-delivery-native-proof.js +0 -566
  1190. package/packages/core/dev-delivery-proof.js +0 -286
  1191. package/packages/core/dev-delivery-warrant-legacy-recovery.js +0 -248
  1192. package/packages/core/dev-delivery-warrant-native-compatibility.js +0 -33
  1193. package/packages/core/dev-delivery-warrant-state.js +0 -599
  1194. package/packages/core/dev-delivery-warrant.js +0 -598
  1195. package/packages/core/diagnostics.js +0 -1904
  1196. package/packages/core/domain-wasm-artifact.js +0 -7
  1197. package/packages/core/floating-consumer-evidence.js +0 -338
  1198. package/packages/core/floating-consumer-policy.js +0 -571
  1199. package/packages/core/floating-consumer-release-passport.js +0 -272
  1200. package/packages/core/github-artifact-attestation.js +0 -642
  1201. package/packages/core/github-governance-authority.js +0 -1369
  1202. package/packages/core/homebrew.js +0 -414
  1203. package/packages/core/kfd-agent-hub.js +0 -496
  1204. package/packages/core/kfd.js +0 -966
  1205. package/packages/core/kfd2-product-claims.js +0 -454
  1206. package/packages/core/kfd3-surface-register.js +0 -924
  1207. package/packages/core/legacy-kfd-adopter-driver.js +0 -167
  1208. package/packages/core/next-development-projection.js +0 -310
  1209. package/packages/core/next-development-transition.js +0 -737
  1210. package/packages/core/oci-compose-qualification.js +0 -143
  1211. package/packages/core/oci-publication-bundle.js +0 -281
  1212. package/packages/core/package-manager.js +0 -323
  1213. package/packages/core/paper-agent-entry.js +0 -396
  1214. package/packages/core/paper-fleet.js +0 -313
  1215. package/packages/core/paper-npm-bootstrap.js +0 -492
  1216. package/packages/core/paper-repository.js +0 -214
  1217. package/packages/core/paper-runtime-channels.js +0 -348
  1218. package/packages/core/paper-scaffold-content.js +0 -574
  1219. package/packages/core/paper.js +0 -2478
  1220. package/packages/core/partial-mutation-recovery-qualification.js +0 -18
  1221. package/packages/core/platform-stage-checkpoints.js +0 -471
  1222. package/packages/core/product-publication.js +0 -59
  1223. package/packages/core/protected-publication-source.js +0 -91
  1224. package/packages/core/provider-operation-journal.js +0 -62
  1225. package/packages/core/provider-readback-idempotency.js +0 -309
  1226. package/packages/core/public-export-compatibility.js +0 -33
  1227. package/packages/core/public-surface-audit.js +0 -273
  1228. package/packages/core/public-surface-cli.js +0 -128
  1229. package/packages/core/publication-artifact-candidate.js +0 -128
  1230. package/packages/core/publication-artifact.js +0 -641
  1231. package/packages/core/publication-authority.js +0 -1163
  1232. package/packages/core/publication-development.js +0 -72
  1233. package/packages/core/publication-package.js +0 -252
  1234. package/packages/core/publication-rehearsal-capsule.js +0 -468
  1235. package/packages/core/publication-rehearsal-projection.js +0 -104
  1236. package/packages/core/publication-rehearsal-runtime.js +0 -190
  1237. package/packages/core/publication-rehearsal.js +0 -481
  1238. package/packages/core/publication-reproducibility.js +0 -947
  1239. package/packages/core/published-delivery-authority.js +0 -266
  1240. package/packages/core/readme-badges.js +0 -893
  1241. package/packages/core/release-activation-shadow.js +0 -32
  1242. package/packages/core/release-blocker-priority.js +0 -192
  1243. package/packages/core/release-candidate-recovery.js +0 -595
  1244. package/packages/core/release-candidate.js +0 -591
  1245. package/packages/core/release-invocation.js +0 -64
  1246. package/packages/core/release-line-bootstrap.js +0 -297
  1247. package/packages/core/release-line-dry-run.js +0 -303
  1248. package/packages/core/release-passport-contract.js +0 -479
  1249. package/packages/core/release-passport.js +0 -2884
  1250. package/packages/core/release-tail-compatibility.js +0 -60
  1251. package/packages/core/release-tail-provider-adapters.js +0 -461
  1252. package/packages/core/release-tail-provider-plane.js +0 -248
  1253. package/packages/core/runtime-ref-resume-authority.js +0 -621
  1254. package/packages/core/runtime-selector-persistence.js +0 -228
  1255. package/packages/core/stable-publication-fence.js +0 -28
  1256. package/packages/core/stage-capsule-local-store.js +0 -428
  1257. package/packages/core/stage-capsule-qualification-campaign.js +0 -511
  1258. package/packages/core/stage-capsule-qualification.js +0 -455
  1259. package/packages/core/stage-capsule-resume-planner.js +0 -397
  1260. package/packages/core/stage-capsule-store.js +0 -404
  1261. package/packages/core/stage-capsule.js +0 -319
  1262. package/packages/core/tail-reseal-github.js +0 -178
  1263. package/packages/core/tail-reseal-receipt.js +0 -225
  1264. package/packages/core/tail-reseal.js +0 -594
  1265. package/packages/core/universal-workflow-bootstrap.js +0 -586
  1266. package/packages/core/web-surface-publication-candidate.js +0 -162
  1267. package/packages/core/workflow-yaml-contract.js +0 -342
  1268. package/scripts/aggregate-build-summary.mjs +0 -187
  1269. package/scripts/aggregate-diagnostics-summary.mjs +0 -54
  1270. package/scripts/anchored-version-material.mjs +0 -42
  1271. package/scripts/architecture.mjs +0 -610
  1272. package/scripts/artifact-relay-s3.mjs +0 -539
  1273. package/scripts/artifact-signing-controller-core.mjs +0 -525
  1274. package/scripts/artifact-signing-controller.mjs +0 -302
  1275. package/scripts/artifact-signing-delegation.mjs +0 -316
  1276. package/scripts/assemble-binary-release-admission.mjs +0 -213
  1277. package/scripts/assemble-publication-artifact-admission.mjs +0 -200
  1278. package/scripts/assemble-self-publication-admission.mjs +0 -201
  1279. package/scripts/assemble-web-surface-publication-admission.mjs +0 -204
  1280. package/scripts/audit-github-governance.mjs +0 -493
  1281. package/scripts/audit-publication-control-plane.mjs +0 -527
  1282. package/scripts/auditable-demo-bundle-verification.mjs +0 -148
  1283. package/scripts/auditable-demo-platform.mjs +0 -600
  1284. package/scripts/auditable-demo-presentation.mjs +0 -83
  1285. package/scripts/auditable-demo-renditions.mjs +0 -399
  1286. package/scripts/auditable-demo-transport-smoke.mjs +0 -176
  1287. package/scripts/auditable-demo.mjs +0 -1324
  1288. package/scripts/aws-codebuild-toolchain.mjs +0 -285
  1289. package/scripts/aws-macos-jit-controller-runtime.mjs +0 -82
  1290. package/scripts/aws-runner-burst-core.mjs +0 -248
  1291. package/scripts/aws-runner-burst.mjs +0 -79
  1292. package/scripts/aws-windows-jit-campaign.mjs +0 -202
  1293. package/scripts/aws-windows-jit-controller.mjs +0 -578
  1294. package/scripts/binary-publication-evidence.mjs +0 -133
  1295. package/scripts/bridge-bootstrap.mjs +0 -137
  1296. package/scripts/build-contract-core.mjs +0 -1216
  1297. package/scripts/buildchain-channel-router.mjs +0 -249
  1298. package/scripts/buildchain-cli-help.mjs +0 -321
  1299. package/scripts/buildchain-contract-lock.mjs +0 -184
  1300. package/scripts/buildchain-patrol.mjs +0 -280
  1301. package/scripts/compiler-cache-evidence.mjs +0 -304
  1302. package/scripts/consumer-policy.mjs +0 -231
  1303. package/scripts/controller-evidence.mjs +0 -208
  1304. package/scripts/copy-domain-wasm.mjs +0 -14
  1305. package/scripts/create-github-artifact-attestation-policy.mjs +0 -62
  1306. package/scripts/create-release-bundle.mjs +0 -167
  1307. package/scripts/cross-platform-adopter-qualification.mjs +0 -228
  1308. package/scripts/declarative-promotion-admission.mjs +0 -45
  1309. package/scripts/dev-alpha-candidate-patrol.mjs +0 -1197
  1310. package/scripts/dev-delivery-authority-command-adapters.mjs +0 -206
  1311. package/scripts/dev-delivery-authority-provider.mjs +0 -28
  1312. package/scripts/dev-delivery-authority.mjs +0 -490
  1313. package/scripts/dev-delivery-native-run.mjs +0 -177
  1314. package/scripts/dev-delivery-process-boundary.mjs +0 -260
  1315. package/scripts/dev-delivery-proof.mjs +0 -258
  1316. package/scripts/dev-delivery-provider-heartbeat.mjs +0 -215
  1317. package/scripts/dev-delivery-source-proof-replay.mjs +0 -153
  1318. package/scripts/dev-delivery-source-proof-reuse.mjs +0 -548
  1319. package/scripts/dev-delivery-two-phase-resume.mjs +0 -345
  1320. package/scripts/dev-delivery-two-phase.mjs +0 -573
  1321. package/scripts/dev-delivery-warrant-options.mjs +0 -298
  1322. package/scripts/dev-delivery-warrant-store.mjs +0 -316
  1323. package/scripts/dev-delivery-warrant-transition.mjs +0 -109
  1324. package/scripts/dev-delivery-warrant.mjs +0 -559
  1325. package/scripts/dev-merge-queue.mjs +0 -536
  1326. package/scripts/dev-pr-auto-merge.mjs +0 -1222
  1327. package/scripts/dev-pr-delivery-warrant.mjs +0 -467
  1328. package/scripts/dev-pr-prequeue-guard.mjs +0 -381
  1329. package/scripts/dev-qualification-patrol.mjs +0 -594
  1330. package/scripts/dispatch-artifact-signing-authority.mjs +0 -407
  1331. package/scripts/engineering-housekeeper-workflow.mjs +0 -401
  1332. package/scripts/ensure-github-release.mjs +0 -199
  1333. package/scripts/finalize-native-artifact-signing-result.mjs +0 -272
  1334. package/scripts/generate-channel-build-workflow.mjs +0 -69
  1335. package/scripts/generate-release-candidate-passport.mjs +0 -285
  1336. package/scripts/generate-universal-workflow-facades.mjs +0 -499
  1337. package/scripts/git-fetch-process-tree.mjs +0 -175
  1338. package/scripts/host-adapter.mjs +0 -182
  1339. package/scripts/implementation-references.mjs +0 -25
  1340. package/scripts/import-artifact-signing-results.mjs +0 -135
  1341. package/scripts/infra-contract-core.mjs +0 -1032
  1342. package/scripts/infra-contract.mjs +0 -345
  1343. package/scripts/init-repo.mjs +0 -518
  1344. package/scripts/inspect-artifact-signing-requests.mjs +0 -157
  1345. package/scripts/installer-publication.mjs +0 -361
  1346. package/scripts/lifecycle-substage-evidence.mjs +0 -274
  1347. package/scripts/locked-source-checkout.mjs +0 -595
  1348. package/scripts/materialize-artifact-signing-request.mjs +0 -66
  1349. package/scripts/merge-artifact-signing-results.mjs +0 -76
  1350. package/scripts/next-development-review.mjs +0 -331
  1351. package/scripts/next-development-transition.mjs +0 -47
  1352. package/scripts/npm-publish-dry-run.mjs +0 -182
  1353. package/scripts/npm-publish-transaction.mjs +0 -331
  1354. package/scripts/observed-evidence.mjs +0 -311
  1355. package/scripts/oci-compose-preview.mjs +0 -261
  1356. package/scripts/paper-agent-cli.mjs +0 -35
  1357. package/scripts/paper-work-fleet-cli.mjs +0 -594
  1358. package/scripts/paper.mjs +0 -644
  1359. package/scripts/product-publication-intent.mjs +0 -129
  1360. package/scripts/promotion-channel-router.mjs +0 -139
  1361. package/scripts/promotion-identity-resolver.mjs +0 -129
  1362. package/scripts/publication-artifact-candidate.mjs +0 -122
  1363. package/scripts/publication-artifact.mjs +0 -67
  1364. package/scripts/publication-candidate-kind.mjs +0 -93
  1365. package/scripts/publication-candidate-sealer.mjs +0 -119
  1366. package/scripts/publication-package.mjs +0 -38
  1367. package/scripts/publication-registry-hydrate.mjs +0 -216
  1368. package/scripts/publication-reproducibility.mjs +0 -62
  1369. package/scripts/publication-settlement.mjs +0 -217
  1370. package/scripts/publish-source-ref-resolver.mjs +0 -113
  1371. package/scripts/reconcile-github-governance.mjs +0 -689
  1372. package/scripts/reconcile-release-governance.mjs +0 -368
  1373. package/scripts/release-asset-client.mjs +0 -91
  1374. package/scripts/release-candidate-adapter.mjs +0 -41
  1375. package/scripts/release-candidate-anchor-provenance.mjs +0 -99
  1376. package/scripts/release-candidate-resolver.mjs +0 -842
  1377. package/scripts/release-finalization-review.mjs +0 -53
  1378. package/scripts/release-line-dry-run.mjs +0 -53
  1379. package/scripts/release-line-policy.mjs +0 -231
  1380. package/scripts/release-propagation.mjs +0 -411
  1381. package/scripts/release-tail.mjs +0 -178
  1382. package/scripts/release-transaction.mjs +0 -212
  1383. package/scripts/resolve-artifact-coordinates.mjs +0 -174
  1384. package/scripts/resolve-artifact-transfer-mode.mjs +0 -126
  1385. package/scripts/resolve-build-configuration.mjs +0 -105
  1386. package/scripts/resolve-build-contract.mjs +0 -96
  1387. package/scripts/resolve-publish-gate.mjs +0 -33
  1388. package/scripts/resolve-publish-source.mjs +0 -99
  1389. package/scripts/resume-from-candidate-run.mjs +0 -1117
  1390. package/scripts/route-offline-runners.mjs +0 -237
  1391. package/scripts/run-candidate-body-prefix-renderer.mjs +0 -187
  1392. package/scripts/run-lifecycle-core.mjs +0 -850
  1393. package/scripts/run-lifecycle.mjs +0 -56
  1394. package/scripts/runtime-ref-core.mjs +0 -171
  1395. package/scripts/seal-artifact-signing-requests.mjs +0 -431
  1396. package/scripts/seal-macos-credential-input.mjs +0 -135
  1397. package/scripts/shifu-gate-profile.mjs +0 -374
  1398. package/scripts/sign-detached-artifact-requests.mjs +0 -237
  1399. package/scripts/source-verification-evidence.mjs +0 -344
  1400. package/scripts/stable-candidate-patrol.mjs +0 -527
  1401. package/scripts/stable-candidate-policy.mjs +0 -25
  1402. package/scripts/stable-candidate-qualification.mjs +0 -358
  1403. package/scripts/stable-release-gate.mjs +0 -351
  1404. package/scripts/stage-capsule-qualification.mjs +0 -528
  1405. package/scripts/tail-reseal.mjs +0 -416
  1406. package/scripts/universal-facade-maintainability.mjs +0 -91
  1407. package/scripts/universal-workflow-backflow.mjs +0 -212
  1408. package/scripts/universal-workflow-engine.mjs +0 -620
  1409. package/scripts/universal-workflow-self-dogfood.mjs +0 -212
  1410. package/scripts/validate-package-manager-contract.mjs +0 -24
  1411. package/scripts/verify-artifact-signing-results.mjs +0 -124
  1412. package/scripts/verify-publish-channel-ref.mjs +0 -125
  1413. package/scripts/verify-publish-source-lock.mjs +0 -37
  1414. package/scripts/verify-release-pr.mjs +0 -34
  1415. package/scripts/verify-version-state-delta.mjs +0 -175
  1416. package/scripts/verify-web-surface-publication-capability.mjs +0 -78
  1417. package/scripts/web-surface-core.mjs +0 -2603
  1418. package/scripts/web-surface-production-decision.mjs +0 -158
  1419. package/scripts/web-surface-production-release-pr.mjs +0 -712
  1420. package/scripts/web-surface-release-feedback.mjs +0 -358
  1421. package/scripts/web-surface-release-pr-review.mjs +0 -187
  1422. package/scripts/web-surface.mjs +0 -460
  1423. package/scripts/workflow-call-contract.mjs +0 -133
  1424. package/scripts/workflow-friction-report.mjs +0 -375
  1425. package/scripts/workflow-taxonomy.mjs +0 -507
  1426. package/templates/universal-buildchain-bootstrap-recovery.yml +0 -282
  1427. /package/actions/{macos-credential-island → build/credential/macos-island}/README.md +0 -0
  1428. /package/actions/{release-candidate-promote → release/promotion/candidate}/README.md +0 -0
  1429. /package/actions/{release-tail → release/tail/settle}/README.md +0 -0
  1430. /package/packages/core/{adopter-delivery-gate.js → adoption/adopter-delivery-gate.js} +0 -0
  1431. /package/packages/core/{adopter-delivery-json.js → adoption/adopter-delivery-json.js} +0 -0
  1432. /package/packages/core/{adopter-delivery-passport.js → adoption/adopter-delivery-passport.js} +0 -0
  1433. /package/packages/core/{adopter-delivery-vectors.js → adoption/adopter-delivery-vectors.js} +0 -0
  1434. /package/packages/core/{adopter-delivery-vectors.json → adoption/adopter-delivery-vectors.json} +0 -0
  1435. /package/packages/core/{buildchain-agent-manuals.js → adoption/buildchain-agent-manuals.js} +0 -0
  1436. /package/packages/core/{kfd-adopter-category-driver.js → adoption/kfd-adopter-category-driver.js} +0 -0
  1437. /package/packages/core/{kfd-adopter-manifest.js → adoption/kfd-adopter-manifest.js} +0 -0
  1438. /package/packages/core/{kfd-gate.js → adoption/kfd-gate.js} +0 -0
  1439. /package/packages/core/{kfd-product-gates.js → adoption/kfd-product-gates.js} +0 -0
  1440. /package/packages/core/{artifact-signing-result.js → build/artifact-signing-result.js} +0 -0
  1441. /package/packages/core/{build-configuration.js → build/build-configuration.js} +0 -0
  1442. /package/{scripts → packages/core/build/commands}/resolve-artifact-signing-upload-route.mjs +0 -0
  1443. /package/packages/core/{detached-artifact-signature.js → build/detached-artifact-signature.js} +0 -0
  1444. /package/{scripts/gate-profile-core.mjs → packages/core/build/gate/contracts.js} +0 -0
  1445. /package/packages/core/{portable-dev-cache.js → build/portable-dev-cache.js} +0 -0
  1446. /package/packages/core/{buildchain-channel-identity.js → consumer/buildchain-channel-identity.js} +0 -0
  1447. /package/packages/core/{buildchain-layout.js → contracts/buildchain-layout.js} +0 -0
  1448. /package/{bin/internal → packages/core/contracts}/command-registry.mjs +0 -0
  1449. /package/packages/core/{kungfu-temporal-fact.js → contracts/kungfu-temporal-fact.js} +0 -0
  1450. /package/packages/core/{surface-manifest.js → contracts/surface-manifest.js} +0 -0
  1451. /package/packages/core/{workflow-call-contract.js → contracts/workflow-call-contract.js} +0 -0
  1452. /package/{scripts → packages/core/dev-delivery/commands}/project-cut-merge-queue-admission.mjs +0 -0
  1453. /package/packages/core/{dev-delivery-authority-evidence.js → dev-delivery/dev-delivery-authority-evidence.js} +0 -0
  1454. /package/packages/core/{dev-delivery-authority-observation.js → dev-delivery/dev-delivery-authority-observation.js} +0 -0
  1455. /package/packages/core/{dev-delivery-authority-qualification.js → dev-delivery/dev-delivery-authority-qualification.js} +0 -0
  1456. /package/packages/core/{dev-delivery-authority-settlement.js → dev-delivery/dev-delivery-authority-settlement.js} +0 -0
  1457. /package/packages/core/{dev-delivery-common.js → dev-delivery/dev-delivery-common.js} +0 -0
  1458. /package/packages/core/{dev-delivery-execution-failure.js → dev-delivery/dev-delivery-execution-failure.js} +0 -0
  1459. /package/packages/core/{dev-delivery-landing-admission-core.js → dev-delivery/dev-delivery-landing-admission-core.js} +0 -0
  1460. /package/packages/core/{dev-delivery-landing-readback.js → dev-delivery/dev-delivery-landing-readback.js} +0 -0
  1461. /package/packages/core/{dev-delivery-landing-terminal-evidence.js → dev-delivery/dev-delivery-landing-terminal-evidence.js} +0 -0
  1462. /package/packages/core/{dev-delivery-landing-testing-port.js → dev-delivery/dev-delivery-landing-testing-port.js} +0 -0
  1463. /package/packages/core/{dev-delivery-native-execution.js → dev-delivery/dev-delivery-native-execution.js} +0 -0
  1464. /package/packages/core/{dev-delivery-process-boundary.js → dev-delivery/dev-delivery-process-boundary.js} +0 -0
  1465. /package/packages/core/{dev-delivery-provider-attempt.js → dev-delivery/dev-delivery-provider-attempt.js} +0 -0
  1466. /package/packages/core/{dev-delivery-provider-heartbeat.js → dev-delivery/dev-delivery-provider-heartbeat.js} +0 -0
  1467. /package/packages/core/{dev-delivery-warrant-cancellation.js → dev-delivery/dev-delivery-warrant-cancellation.js} +0 -0
  1468. /package/packages/core/{dev-delivery-warrant-qualification.js → dev-delivery/dev-delivery-warrant-qualification.js} +0 -0
  1469. /package/packages/core/{dev-delivery-warrant-settlement.js → dev-delivery/dev-delivery-warrant-settlement.js} +0 -0
  1470. /package/packages/core/{dev-delivery-writer-protocol-transition.js → dev-delivery/dev-delivery-writer-protocol-transition.js} +0 -0
  1471. /package/packages/core/{engineering-housekeeper-github-client.js → governance/engineering-housekeeper-github-client.js} +0 -0
  1472. /package/packages/core/{engineering-housekeeper-github.js → governance/engineering-housekeeper-github.js} +0 -0
  1473. /package/packages/core/{engineering-housekeeper.js → governance/engineering-housekeeper.js} +0 -0
  1474. /package/packages/core/{issue-reporting.js → governance/issue-reporting.js} +0 -0
  1475. /package/packages/core/{cache-evidence.js → observability/cache-evidence.js} +0 -0
  1476. /package/packages/core/{candidate-timeline.js → observability/candidate-timeline.js} +0 -0
  1477. /package/packages/core/{logging.js → observability/logging.js} +0 -0
  1478. /package/packages/core/{paper-work.js → paper/paper-work.js} +0 -0
  1479. /package/{scripts → packages/core/providers/commands}/aws-macos-jit-controller-core.mjs +0 -0
  1480. /package/{scripts → packages/core/providers/commands}/aws-macos-jit-controller.mjs +0 -0
  1481. /package/{scripts → packages/core/providers/commands}/aws-macos-jit-core.mjs +0 -0
  1482. /package/{scripts → packages/core/providers/commands}/aws-macos-jit-job-controller.mjs +0 -0
  1483. /package/{scripts → packages/core/providers/commands}/aws-macos-jit.mjs +0 -0
  1484. /package/{scripts → packages/core/providers/commands}/aws-windows-jit-campaign-core.mjs +0 -0
  1485. /package/{scripts → packages/core/providers/commands}/aws-windows-jit-controller-core.mjs +0 -0
  1486. /package/{scripts → packages/core/providers/commands}/aws-windows-jit-core.mjs +0 -0
  1487. /package/{scripts → packages/core/providers/commands}/aws-windows-jit.mjs +0 -0
  1488. /package/{scripts → packages/core/providers/commands}/github-output.mjs +0 -0
  1489. /package/packages/core/{oci-publication-graph.js → publication/oci-publication-graph.js} +0 -0
  1490. /package/packages/core/{publication-control-plane-audit.js → publication/publication-control-plane-audit.js} +0 -0
  1491. /package/packages/core/{publication-qualification.js → publication/publication-qualification.js} +0 -0
  1492. /package/packages/core/{publication-rehearsal-provider-bindings.js → publication/publication-rehearsal-provider-bindings.js} +0 -0
  1493. /package/packages/core/{publication-sealed-bundle.js → publication/publication-sealed-bundle.js} +0 -0
  1494. /package/packages/core/{channel-candidate.js → release/channel-candidate.js} +0 -0
  1495. /package/packages/core/{channel-promotion-baseline.js → release/channel-promotion-baseline.js} +0 -0
  1496. /package/{scripts → packages/core/release/commands}/promotion-routing-evidence.mjs +0 -0
  1497. /package/packages/core/{dev-alpha-candidate-selection.js → release/dev-alpha-candidate-selection.js} +0 -0
  1498. /package/packages/core/{next-development-candidate-reservation.js → release/next-development-candidate-reservation.js} +0 -0
  1499. /package/packages/core/{next-development-controller.js → release/next-development-controller.js} +0 -0
  1500. /package/packages/core/{publish-transaction.js → release/publish-transaction.js} +0 -0
  1501. /package/packages/core/{release-activation-transaction.js → release/release-activation-transaction.js} +0 -0
  1502. /package/packages/core/{release-propagation-agent-entry.js → release/release-propagation-agent-entry.js} +0 -0
  1503. /package/packages/core/{release-propagation-capture.js → release/release-propagation-capture.js} +0 -0
  1504. /package/packages/core/{release-propagation-common.js → release/release-propagation-common.js} +0 -0
  1505. /package/packages/core/{release-propagation-execution-profile.js → release/release-propagation-execution-profile.js} +0 -0
  1506. /package/packages/core/{release-propagation-pickup.js → release/release-propagation-pickup.js} +0 -0
  1507. /package/packages/core/{release-propagation-push.js → release/release-propagation-push.js} +0 -0
  1508. /package/packages/core/{release-propagation-release.js → release/release-propagation-release.js} +0 -0
  1509. /package/packages/core/{release-propagation-stage-evidence.js → release/release-propagation-stage-evidence.js} +0 -0
  1510. /package/packages/core/{release-propagation-work-capture.js → release/release-propagation-work-capture.js} +0 -0
  1511. /package/packages/core/{release-propagation-work-constants.js → release/release-propagation-work-constants.js} +0 -0
  1512. /package/packages/core/{release-propagation-work-control.js → release/release-propagation-work-control.js} +0 -0
  1513. /package/packages/core/{release-propagation-work-transitions.js → release/release-propagation-work-transitions.js} +0 -0
  1514. /package/packages/core/{release-propagation-work.js → release/release-propagation-work.js} +0 -0
  1515. /package/packages/core/{release-propagation.js → release/release-propagation.js} +0 -0
  1516. /package/packages/core/{release-tail-product-capabilities.js → release/release-tail-product-capabilities.js} +0 -0
  1517. /package/packages/core/{release-train.js → release/release-train.js} +0 -0
  1518. /package/packages/core/{self-dogfood-version.js → release/self-dogfood-version.js} +0 -0
  1519. /package/packages/core/{stable-candidate-ledger.js → release/stable-candidate-ledger.js} +0 -0
  1520. /package/packages/core/{stable-release-gate.js → release/stable-release-gate.js} +0 -0
  1521. /package/packages/core/{tail-reseal-contract.js → release/tail-reseal-contract.js} +0 -0
  1522. /package/packages/core/{domain-wasm.js → runtime/domain-wasm.js} +0 -0
  1523. /package/packages/core/{spawn-command.js → runtime/spawn-command.js} +0 -0
  1524. /package/packages/core/{badges.js → web/badges.js} +0 -0
  1525. /package/{scripts → packages/core/web/commands}/web-surface-cloudfront-rewrite.mjs +0 -0
  1526. /package/{scripts → packages/core/web/commands}/web-surface-immutable-object.mjs +0 -0
  1527. /package/{scripts → packages/core/web/commands}/web-surface-routing.mjs +0 -0
@@ -1,1887 +0,0 @@
1
- import fs from "node:fs";
2
- import os from "node:os";
3
- import path from "node:path";
4
- import { isDeepStrictEqual } from "node:util";
5
- import { parse } from "smol-toml";
6
- import {
7
- BUILDCHAIN_CONFIG_PATH,
8
- resolveBuildchainConfigPath,
9
- } from "./buildchain-layout.js";
10
- import { runShellCommandSync } from "./spawn-command.js";
11
- import { normalizeBuildConfiguration } from "./build-configuration.js";
12
-
13
- const CONFIG_FILE = BUILDCHAIN_CONFIG_PATH;
14
- const RESERVED_LIFECYCLE_KEYS = new Set(["env", "shell"]);
15
- const SUPPORTED_VERSION_FILE_TYPES = new Set(["json", "toml", "regex"]);
16
- const SUPPORTED_VERSION_STRATEGIES = new Set(["semver", "anchored"]);
17
- const SUPPORTED_VERSION_NEXT = new Set(["auto", "manual"]);
18
- const SUPPORTED_PROJECT_TYPES = new Set(["package", "web-surface", "infra-contract", "distribution-index", "publication-artifact"]);
19
- const SUPPORTED_PUBLISH_MODES = new Set(["publish-final-version", "promote-existing-version"]);
20
- const SUPPORTED_PUBLISH_AUTH = new Set(["trusted-publishing", "npm-token"]);
21
- const SUPPORTED_PUBLISH_KINDS = new Set(["npm-package", "npm-paper-package"]);
22
- const SUPPORTED_PACKAGE_SET_ORDER = new Set(["as-provided", "platforms-first-main-last"]);
23
- const SUPPORTED_STABLE_RELEASE_STRATEGIES = new Set(["manual", "latest-qualified-alpha"]);
24
- const SUPPORTED_MERGE_QUEUE_MODES = new Set(["inherit", "enabled", "disabled"]);
25
- const SUPPORTED_NATIVE_COMPILER_CACHE = new Set(["auto", "ccache", "sccache", "none"]);
26
- const WEB_SURFACE_CHANNELS = ["preview", "staging", "production"];
27
- const SUPPORTED_CHANNEL_VISIBILITY = new Set(["ephemeral", "protected", "public", "internal"]);
28
- const SUPPORTED_ACCESS_CONTROL = new Set(["none", "managed-network", "edge-basic-auth", "oidc", "app-auth"]);
29
- const SUPPORTED_EDGE_AUTH = new Set(["none", "cloudfront-basic-auth", "oidc", "app-auth"]);
30
- const SUPPORTED_DEPLOY_ADAPTERS = new Set([
31
- "aws-s3-cloudfront",
32
- "aws-elastic-beanstalk",
33
- "aws-ecs-service",
34
- ]);
35
- const SUPPORTED_DIRECTORY_INDEX_REWRITE = new Set(["buildchain", "external"]);
36
- const SUPPORTED_HEALTH_STRATEGIES = new Set(["http", "s3-object"]);
37
- const SUPPORTED_INFRA_ADAPTERS = new Set([
38
- "manual-observed",
39
- "aws-cloudformation",
40
- "terraform",
41
- "opentofu",
42
- "pulumi",
43
- "aws-cdk",
44
- "aws-cli",
45
- "custom-command",
46
- ]);
47
- const SUPPORTED_INFRA_ADOPTION_MODES = new Set([
48
- "validate-only",
49
- "plan-only",
50
- "observe-only",
51
- "manual-observed",
52
- "import-planned",
53
- "managed-apply",
54
- ]);
55
- const SUPPORTED_INFRA_APPLY_MODES = new Set(["disabled", "manual-approval", "environment-approval"]);
56
- const SUPPORTED_FACT_VERSION_SOURCE_TYPES = new Set(["static", "json", "toml", "regex", "command"]);
57
- const SUPPORTED_FACT_LEGACY_PROJECTIONS = new Set(["kungfu-buildinfo"]);
58
- const SUPPORTED_PUBLICATION_TOOLCHAINS = new Set(["custom-command", "latex-docker"]);
59
- const SUPPORTED_SIGNING_PROFILES = new Set([
60
- "auto",
61
- "apple-developer-id",
62
- "windows-authenticode",
63
- "detached-signature-v1",
64
- ]);
65
- const SUPPORTED_SIGNING_ENTITLEMENTS_PROFILES = new Set([
66
- "none",
67
- "jit-executable-v1",
68
- ]);
69
- const SUPPORTED_SIGNING_ARTIFACT_KINDS = new Set([
70
- "auto", "binary", "archive", "blob", "directory", "mach-o", "app-bundle",
71
- "framework-bundle", "plugin-bundle", "xpc-bundle", "dylib", "pkg", "dmg",
72
- "pe",
73
- ]);
74
-
75
- function posixPath(value) {
76
- return String(value || "").split(path.sep).join("/");
77
- }
78
-
79
- function assertPlainObject(value, label) {
80
- if (!value || typeof value !== "object" || Array.isArray(value)) {
81
- throw new Error(`${label} must be a table`);
82
- }
83
- return value;
84
- }
85
-
86
- function assertString(value, label) {
87
- if (typeof value !== "string" || value.trim() === "") {
88
- throw new Error(`${label} must be a non-empty string`);
89
- }
90
- return value;
91
- }
92
-
93
- function optionalBoolean(value, fallback) {
94
- return value === undefined ? fallback : Boolean(value);
95
- }
96
-
97
- function normalizeStringArray(value, label) {
98
- if (value === undefined) {
99
- return [];
100
- }
101
- if (!Array.isArray(value)) {
102
- throw new Error(`${label} must be an array of strings`);
103
- }
104
- return value.map((entry, index) => assertString(entry, `${label}[${index}]`));
105
- }
106
-
107
- function normalizeSigningEntitlementsPaths(value, label) {
108
- const paths = normalizeStringArray(value, label);
109
- for (const [index, entry] of paths.entries()) {
110
- const parts = entry.split("/");
111
- if (
112
- entry.startsWith("/") ||
113
- entry.includes("\\") ||
114
- entry.includes(",") ||
115
- parts.some((part) => part === "" || part === "." || part === "..")
116
- ) {
117
- throw new Error(
118
- `${label}[${index}] must be a safe archive-relative path`,
119
- );
120
- }
121
- }
122
- if (new Set(paths).size !== paths.length) {
123
- throw new Error(`${label} must not contain duplicate paths`);
124
- }
125
- return paths;
126
- }
127
-
128
- function getByDottedKey(target, key) {
129
- return String(key)
130
- .split(".")
131
- .reduce((current, segment) => current?.[segment], target);
132
- }
133
-
134
- function setByDottedKey(target, key, value) {
135
- const segments = String(key).split(".");
136
- let current = target;
137
- for (const segment of segments.slice(0, -1)) {
138
- if (!current[segment] || typeof current[segment] !== "object" || Array.isArray(current[segment])) {
139
- current[segment] = {};
140
- }
141
- current = current[segment];
142
- }
143
- current[segments[segments.length - 1]] = value;
144
- }
145
-
146
- function updateTomlStringValuePreservingSource({ source, content, key, value, filePath }) {
147
- const currentValue = getByDottedKey(content, key);
148
- if (currentValue === value) {
149
- return source;
150
- }
151
- if (typeof currentValue !== "string" || currentValue.length === 0) {
152
- throw new Error(`Configured TOML version key is missing or empty: ${filePath}:${key}`);
153
- }
154
-
155
- const expected = structuredClone(content);
156
- setByDottedKey(expected, key, value);
157
- const candidates = [];
158
- let offset = 0;
159
- while (offset <= source.length - currentValue.length) {
160
- const index = source.indexOf(currentValue, offset);
161
- if (index === -1) {
162
- break;
163
- }
164
- const candidate = `${source.slice(0, index)}${value}${source.slice(index + currentValue.length)}`;
165
- try {
166
- if (isDeepStrictEqual(parse(candidate), expected)) {
167
- candidates.push(candidate);
168
- }
169
- } catch {
170
- // Keep searching. Only a parser-confirmed single-field update is safe.
171
- }
172
- offset = index + currentValue.length;
173
- }
174
-
175
- if (candidates.length !== 1) {
176
- throw new Error(
177
- `Configured TOML version key cannot be updated losslessly: ${filePath}:${key} ` +
178
- `(matching candidates: ${candidates.length})`,
179
- );
180
- }
181
- return candidates[0];
182
- }
183
-
184
- export function loadBuildchainConfig(cwd = process.cwd()) {
185
- const configPath = resolveBuildchainConfigPath(cwd);
186
- const filePath = path.join(cwd, configPath);
187
- if (!fs.existsSync(filePath)) {
188
- return undefined;
189
- }
190
- const source = fs.readFileSync(filePath, "utf8");
191
- let config;
192
- try {
193
- config = parse(source);
194
- } catch (error) {
195
- throw new Error(`${configPath} parse failed: ${error.message}`);
196
- }
197
- if (config.schema !== 1) {
198
- throw new Error(`${configPath} schema must be 1`);
199
- }
200
- return {
201
- path: configPath,
202
- filePath,
203
- config: normalizeBuildchainConfig(config),
204
- };
205
- }
206
-
207
- export function normalizeBuildchainConfig(config) {
208
- assertPlainObject(config, CONFIG_FILE);
209
- const normalized = { ...config };
210
- if (normalized.build !== undefined) normalized.build = normalizeBuildConfiguration(normalized.build);
211
- if (normalized.project !== undefined) {
212
- normalized.project = normalizeProjectSection(normalized.project);
213
- }
214
- if (normalized.version !== undefined) {
215
- normalized.version = normalizeVersionSection(normalized.version);
216
- }
217
- if (normalized.lifecycle !== undefined) {
218
- normalized.lifecycle = normalizeLifecycleSection(normalized.lifecycle);
219
- }
220
- if (normalized.publish !== undefined) {
221
- normalized.publish = normalizePublishSection(normalized.publish);
222
- }
223
- if (normalized.release !== undefined) {
224
- normalized.release = normalizeReleaseSection(normalized.release);
225
- }
226
- if (normalized.governance !== undefined) {
227
- normalized.governance = normalizeGovernanceSection(normalized.governance);
228
- }
229
- if (normalized.channels !== undefined) {
230
- normalized.channels = normalizeChannelsSection(normalized.channels, normalized.project);
231
- }
232
- if (normalized.deploy !== undefined) {
233
- normalized.deploy = normalizeDeploySection(normalized.deploy, normalized.project);
234
- }
235
- if (normalized.infra !== undefined) {
236
- normalized.infra = normalizeInfraSection(normalized.infra);
237
- }
238
- if (normalized.publication !== undefined) {
239
- normalized.publication = normalizePublicationSection(normalized.publication);
240
- }
241
- if (normalized.publication_rehearsal !== undefined) {
242
- normalized.publication_rehearsal = normalizePublicationRehearsalSection(
243
- normalized.publication_rehearsal,
244
- );
245
- }
246
- if (normalized.adopter_delivery !== undefined) {
247
- normalized.adopter_delivery = normalizeAdopterDeliverySection(
248
- normalized.adopter_delivery,
249
- );
250
- }
251
- if (normalized.consumers !== undefined) {
252
- normalized.consumers = normalizeConsumersSection(normalized.consumers);
253
- }
254
- if (normalized.surfaces !== undefined) {
255
- normalized.surfaces = normalizeSurfacesSection(normalized.surfaces);
256
- }
257
- if (normalized.retention !== undefined) {
258
- normalized.retention = normalizeRetentionSection(normalized.retention);
259
- }
260
- if (normalized.security !== undefined) {
261
- normalized.security = normalizeSecuritySection(normalized.security);
262
- }
263
- if (normalized.diagnostics !== undefined) {
264
- normalized.diagnostics = normalizeDiagnosticsSection(normalized.diagnostics);
265
- }
266
- if (normalized.facts !== undefined) {
267
- normalized.facts = normalizeFactsSection(normalized.facts);
268
- }
269
- if (normalized.signing !== undefined) {
270
- normalized.signing = normalizeSigningSection(normalized.signing);
271
- }
272
- validateWebSurfaceConfig(normalized);
273
- validateInfraContractConfig(normalized);
274
- validateAnchoredDerivedVersionMaterialConfig(normalized);
275
- return normalized;
276
- }
277
-
278
- function normalizeGovernanceSection(governance) {
279
- assertPlainObject(governance, "governance");
280
- const normalized = { ...governance };
281
- if (governance.dev !== undefined) {
282
- assertPlainObject(governance.dev, "governance.dev");
283
- normalized.dev = { ...governance.dev };
284
- if (governance.dev.merge_queue !== undefined) {
285
- const mergeQueue = assertPlainObject(governance.dev.merge_queue, "governance.dev.merge_queue");
286
- const mode = mergeQueue.mode === undefined
287
- ? "inherit"
288
- : assertString(mergeQueue.mode, "governance.dev.merge_queue.mode");
289
- if (!SUPPORTED_MERGE_QUEUE_MODES.has(mode)) {
290
- throw new Error("governance.dev.merge_queue.mode must be one of inherit, enabled, or disabled");
291
- }
292
- const checkResponseTimeoutMinutes = mergeQueue.check_response_timeout_minutes === undefined
293
- ? 120
294
- : Number(mergeQueue.check_response_timeout_minutes);
295
- const maxEntriesToBuild = mergeQueue.max_entries_to_build === undefined
296
- ? 1
297
- : Number(mergeQueue.max_entries_to_build);
298
- if (!Number.isInteger(checkResponseTimeoutMinutes) || checkResponseTimeoutMinutes < 1) {
299
- throw new Error("governance.dev.merge_queue.check_response_timeout_minutes must be a positive integer");
300
- }
301
- if (!Number.isInteger(maxEntriesToBuild) || maxEntriesToBuild < 1) {
302
- throw new Error("governance.dev.merge_queue.max_entries_to_build must be a positive integer");
303
- }
304
- normalized.dev = {
305
- ...governance.dev,
306
- mergeQueue: {
307
- mode,
308
- requiredWorkflows: normalizeStringArray(
309
- mergeQueue.required_workflows,
310
- "governance.dev.merge_queue.required_workflows",
311
- ),
312
- checkResponseTimeoutMinutes,
313
- maxEntriesToBuild,
314
- bypassApps: normalizeStringArray(mergeQueue.bypass_apps, "governance.dev.merge_queue.bypass_apps"),
315
- bypassUsers: normalizeStringArray(mergeQueue.bypass_users, "governance.dev.merge_queue.bypass_users"),
316
- bypassTeams: normalizeStringArray(mergeQueue.bypass_teams, "governance.dev.merge_queue.bypass_teams"),
317
- },
318
- };
319
- delete normalized.dev.merge_queue;
320
- }
321
- }
322
- return normalized;
323
- }
324
-
325
- function normalizeReleaseSection(release) {
326
- assertPlainObject(release, "release");
327
- const normalized = { ...release };
328
- if (release.stable !== undefined) {
329
- assertPlainObject(release.stable, "release.stable");
330
- const strategy = release.stable.strategy === undefined
331
- ? "manual"
332
- : assertString(release.stable.strategy, "release.stable.strategy");
333
- if (!SUPPORTED_STABLE_RELEASE_STRATEGIES.has(strategy)) {
334
- throw new Error("release.stable.strategy must be one of manual or latest-qualified-alpha");
335
- }
336
- const minimumSoakSeconds = release.stable.minimum_soak_seconds === undefined
337
- ? 3600
338
- : Number(release.stable.minimum_soak_seconds);
339
- if (!Number.isInteger(minimumSoakSeconds) || minimumSoakSeconds < 0) {
340
- throw new Error("release.stable.minimum_soak_seconds must be a non-negative integer");
341
- }
342
- normalized.stable = {
343
- strategy,
344
- timezone: release.stable.timezone === undefined
345
- ? "UTC"
346
- : assertString(release.stable.timezone, "release.stable.timezone"),
347
- publishAt: release.stable.publish_at === undefined
348
- ? "03:00"
349
- : assertString(release.stable.publish_at, "release.stable.publish_at"),
350
- minimumSoakSeconds,
351
- requiredChecks: normalizeStringArray(release.stable.required_checks, "release.stable.required_checks"),
352
- ledgerRef: release.stable.ledger_ref === undefined
353
- ? ""
354
- : assertString(release.stable.ledger_ref, "release.stable.ledger_ref"),
355
- autoPromote: optionalBoolean(release.stable.auto_promote, strategy === "latest-qualified-alpha"),
356
- autoMerge: optionalBoolean(release.stable.auto_merge, false),
357
- };
358
- if (!/^([01]\d|2[0-3]):[0-5]\d$/.test(normalized.stable.publishAt)) {
359
- throw new Error("release.stable.publish_at must be HH:MM in 24-hour time");
360
- }
361
- }
362
- return normalized;
363
- }
364
-
365
- export function getStableReleasePolicy(loadedConfig) {
366
- return loadedConfig?.config?.release?.stable || {
367
- strategy: "manual",
368
- timezone: "UTC",
369
- publishAt: "03:00",
370
- minimumSoakSeconds: 3600,
371
- requiredChecks: [],
372
- ledgerRef: "",
373
- autoPromote: false,
374
- autoMerge: false,
375
- };
376
- }
377
-
378
- function normalizeFactsSection(facts) {
379
- assertPlainObject(facts, "facts");
380
- return {
381
- outputDir: facts.output_dir === undefined ? ".buildchain/facts" : posixPath(assertString(facts.output_dir, "facts.output_dir")),
382
- versionSources: normalizeFactVersionSources(facts.version_sources),
383
- modules: normalizeFactModules(facts.modules),
384
- products: normalizeFactProducts(facts.products),
385
- legacyProjections: normalizeFactLegacyProjections(facts.legacy_projections),
386
- };
387
- }
388
-
389
- function normalizeSigningSection(signing) {
390
- assertPlainObject(signing, "signing");
391
- for (const key of Object.keys(signing)) {
392
- if (key !== "artifacts") {
393
- throw new Error(`signing.${key} is not supported; consumer signing declarations cannot configure credentials or authority infrastructure`);
394
- }
395
- }
396
- if (!Array.isArray(signing.artifacts) || signing.artifacts.length === 0) {
397
- throw new Error("signing.artifacts must declare at least one artifact");
398
- }
399
- const artifacts = signing.artifacts.map((artifact, index) => {
400
- const label = `signing.artifacts[${index}]`;
401
- assertPlainObject(artifact, label);
402
- const allowedKeys = new Set([
403
- "id",
404
- "path",
405
- "profile",
406
- "entitlements_profile",
407
- "entitlements_paths",
408
- "kind",
409
- "platforms",
410
- "required",
411
- ]);
412
- for (const key of Object.keys(artifact)) {
413
- if (!allowedKeys.has(key)) {
414
- throw new Error(`${label}.${key} is not supported; declare desired signature state only`);
415
- }
416
- }
417
- const artifactPath = posixPath(assertString(artifact.path, `${label}.path`));
418
- const profile = artifact.profile === undefined ? "auto" : assertString(artifact.profile, `${label}.profile`);
419
- if (!SUPPORTED_SIGNING_PROFILES.has(profile)) {
420
- throw new Error(`${label}.profile must be one of auto, apple-developer-id, windows-authenticode, or detached-signature-v1`);
421
- }
422
- const kind = artifact.kind === undefined ? "auto" : assertString(artifact.kind, `${label}.kind`);
423
- if (!SUPPORTED_SIGNING_ARTIFACT_KINDS.has(kind)) {
424
- throw new Error(`${label}.kind is not a supported signing artifact kind`);
425
- }
426
- const entitlementsProfile =
427
- artifact.entitlements_profile === undefined
428
- ? "none"
429
- : assertString(
430
- artifact.entitlements_profile,
431
- `${label}.entitlements_profile`,
432
- );
433
- if (!SUPPORTED_SIGNING_ENTITLEMENTS_PROFILES.has(entitlementsProfile)) {
434
- throw new Error(
435
- `${label}.entitlements_profile must be one of none or jit-executable-v1`,
436
- );
437
- }
438
- if (entitlementsProfile !== "none" && kind !== "archive") {
439
- throw new Error(
440
- `${label}.entitlements_profile ${entitlementsProfile} requires kind = "archive"`,
441
- );
442
- }
443
- const entitlementsPaths = normalizeSigningEntitlementsPaths(
444
- artifact.entitlements_paths,
445
- `${label}.entitlements_paths`,
446
- );
447
- if (
448
- (entitlementsProfile === "none" && entitlementsPaths.length !== 0) ||
449
- (entitlementsProfile !== "none" && entitlementsPaths.length === 0)
450
- ) {
451
- throw new Error(
452
- `${label}.entitlements_paths must be non-empty exactly when entitlements_profile is enabled`,
453
- );
454
- }
455
- return {
456
- id: artifact.id === undefined ? artifactPath : assertString(artifact.id, `${label}.id`),
457
- path: artifactPath,
458
- profile,
459
- entitlementsProfile,
460
- entitlementsPaths,
461
- kind,
462
- platforms: normalizeStringArray(artifact.platforms, `${label}.platforms`),
463
- required: optionalBoolean(artifact.required, true),
464
- };
465
- });
466
- if (new Set(artifacts.map((artifact) => artifact.id)).size !== artifacts.length) {
467
- throw new Error("signing.artifacts must use unique ids");
468
- }
469
- return { artifacts };
470
- }
471
-
472
- function normalizeFactVersionSources(sources = []) {
473
- if (sources === undefined) {
474
- return [];
475
- }
476
- if (!Array.isArray(sources)) {
477
- throw new Error("facts.version_sources must be an array of tables");
478
- }
479
- return sources.map((source, index) => {
480
- assertPlainObject(source, `facts.version_sources[${index}]`);
481
- const id = assertString(source.id, `facts.version_sources[${index}].id`);
482
- const type = source.type === undefined ? "static" : assertString(source.type, `facts.version_sources[${index}].type`);
483
- if (!SUPPORTED_FACT_VERSION_SOURCE_TYPES.has(type)) {
484
- throw new Error("facts.version_sources[].type must be one of static, json, toml, regex, or command");
485
- }
486
- if (["json", "toml", "regex"].includes(type) && source.path === undefined) {
487
- throw new Error(`facts.version_sources[${index}].path is required for ${type}`);
488
- }
489
- if (["json", "toml"].includes(type) && source.key === undefined) {
490
- throw new Error(`facts.version_sources[${index}].key is required for ${type}`);
491
- }
492
- if (type === "regex" && source.pattern === undefined) {
493
- throw new Error(`facts.version_sources[${index}].pattern is required for regex`);
494
- }
495
- if (type === "command" && source.command === undefined) {
496
- throw new Error(`facts.version_sources[${index}].command is required for command`);
497
- }
498
- return {
499
- id,
500
- type,
501
- value: source.value === undefined ? undefined : String(source.value),
502
- path: source.path === undefined ? "" : posixPath(assertString(source.path, `facts.version_sources[${index}].path`)),
503
- key: source.key === undefined ? "" : assertString(source.key, `facts.version_sources[${index}].key`),
504
- pattern: source.pattern === undefined ? "" : assertString(source.pattern, `facts.version_sources[${index}].pattern`),
505
- command: source.command === undefined ? "" : assertString(source.command, `facts.version_sources[${index}].command`),
506
- trust: source.trust === undefined ? "" : assertString(source.trust, `facts.version_sources[${index}].trust`),
507
- reproducible: optionalBoolean(source.reproducible, type !== "command"),
508
- };
509
- });
510
- }
511
-
512
- function normalizeFactModules(modules = []) {
513
- if (modules === undefined) {
514
- return [];
515
- }
516
- if (!Array.isArray(modules)) {
517
- throw new Error("facts.modules must be an array of tables");
518
- }
519
- return modules.map((module, index) => {
520
- assertPlainObject(module, `facts.modules[${index}]`);
521
- return {
522
- id: assertString(module.id, `facts.modules[${index}].id`),
523
- root: module.root === undefined ? "." : posixPath(assertString(module.root, `facts.modules[${index}].root`)),
524
- scope: module.scope === undefined ? "" : assertString(module.scope, `facts.modules[${index}].scope`),
525
- versionSource: module.version_source === undefined ? "" : assertString(module.version_source, `facts.modules[${index}].version_source`),
526
- lifecycle: module.lifecycle === undefined ? "" : assertString(module.lifecycle, `facts.modules[${index}].lifecycle`),
527
- outputs: normalizeStringArray(module.outputs, `facts.modules[${index}].outputs`).map(posixPath),
528
- };
529
- });
530
- }
531
-
532
- function normalizeFactProducts(products = []) {
533
- if (products === undefined) {
534
- return [];
535
- }
536
- if (!Array.isArray(products)) {
537
- throw new Error("facts.products must be an array of tables");
538
- }
539
- return products.map((product, index) => {
540
- assertPlainObject(product, `facts.products[${index}]`);
541
- return {
542
- id: assertString(product.id, `facts.products[${index}].id`),
543
- moduleFacts: normalizeStringArray(product.module_facts, `facts.products[${index}].module_facts`).map(posixPath),
544
- artifacts: normalizeStringArray(product.artifacts, `facts.products[${index}].artifacts`).map(posixPath),
545
- };
546
- });
547
- }
548
-
549
- function normalizeFactLegacyProjections(projections = []) {
550
- if (projections === undefined) {
551
- return [];
552
- }
553
- if (!Array.isArray(projections)) {
554
- throw new Error("facts.legacy_projections must be an array of tables");
555
- }
556
- return projections.map((projection, index) => {
557
- assertPlainObject(projection, `facts.legacy_projections[${index}]`);
558
- const type = assertString(projection.type, `facts.legacy_projections[${index}].type`);
559
- if (!SUPPORTED_FACT_LEGACY_PROJECTIONS.has(type)) {
560
- throw new Error("facts.legacy_projections[].type must be kungfu-buildinfo");
561
- }
562
- return {
563
- type,
564
- module: projection.module === undefined ? "" : assertString(projection.module, `facts.legacy_projections[${index}].module`),
565
- path: posixPath(assertString(projection.path, `facts.legacy_projections[${index}].path`)),
566
- };
567
- });
568
- }
569
-
570
- function normalizeDiagnosticsSection(diagnostics) {
571
- assertPlainObject(diagnostics, "diagnostics");
572
- const normalized = { ...diagnostics };
573
- if (diagnostics.native !== undefined) {
574
- normalized.native = normalizeNativeDiagnosticsProfile(diagnostics.native);
575
- }
576
- return normalized;
577
- }
578
-
579
- function normalizeNativeDiagnosticsProfile(native) {
580
- assertPlainObject(native, "diagnostics.native");
581
- const compilerCache = native.compiler_cache === undefined
582
- ? "auto"
583
- : assertString(native.compiler_cache, "diagnostics.native.compiler_cache");
584
- if (!SUPPORTED_NATIVE_COMPILER_CACHE.has(compilerCache)) {
585
- throw new Error("diagnostics.native.compiler_cache must be one of auto, ccache, sccache, or none");
586
- }
587
- return {
588
- enabled: optionalBoolean(native.enabled, false),
589
- sampleProcessTree: optionalBoolean(native.sample_process_tree, false),
590
- compilerCache,
591
- expectedTools: normalizeStringArray(native.expected_tools, "diagnostics.native.expected_tools"),
592
- artifactDirs: normalizeStringArray(native.artifact_dirs, "diagnostics.native.artifact_dirs").map(posixPath),
593
- cacheDirs: normalizeStringArray(native.cache_dirs, "diagnostics.native.cache_dirs").map(posixPath),
594
- };
595
- }
596
-
597
- export function getNativeDiagnosticsProfile(loadedConfig) {
598
- return loadedConfig?.config?.diagnostics?.native || {
599
- enabled: false,
600
- sampleProcessTree: false,
601
- compilerCache: "auto",
602
- expectedTools: [],
603
- artifactDirs: [],
604
- cacheDirs: [],
605
- };
606
- }
607
-
608
- function normalizePublishSection(publish) {
609
- assertPlainObject(publish, "publish");
610
- const mode = publish.mode === undefined
611
- ? "publish-final-version"
612
- : assertString(publish.mode, "publish.mode");
613
- if (!SUPPORTED_PUBLISH_MODES.has(mode)) {
614
- throw new Error("publish.mode must be one of publish-final-version or promote-existing-version");
615
- }
616
- const auth = publish.auth === undefined
617
- ? "trusted-publishing"
618
- : assertString(publish.auth, "publish.auth");
619
- if (!SUPPORTED_PUBLISH_AUTH.has(auth)) {
620
- throw new Error("publish.auth must be one of trusted-publishing or npm-token");
621
- }
622
- if (mode === "promote-existing-version" && auth !== "npm-token") {
623
- throw new Error('publish.mode = "promote-existing-version" requires publish.auth = "npm-token"');
624
- }
625
- const kind = publish.kind === undefined
626
- ? ""
627
- : assertString(publish.kind, "publish.kind");
628
- if (kind && !SUPPORTED_PUBLISH_KINDS.has(kind)) {
629
- throw new Error("publish.kind must be one of npm-package or npm-paper-package");
630
- }
631
- const packageSetOrder = publish.package_set_order === undefined
632
- ? "as-provided"
633
- : assertString(publish.package_set_order, "publish.package_set_order");
634
- if (!SUPPORTED_PACKAGE_SET_ORDER.has(packageSetOrder)) {
635
- throw new Error("publish.package_set_order must be one of as-provided or platforms-first-main-last");
636
- }
637
- const normalized = {
638
- mode,
639
- auth,
640
- distTag: publish.dist_tag === undefined
641
- ? undefined
642
- : assertString(publish.dist_tag, "publish.dist_tag"),
643
- packageSetOrder,
644
- mainPackage: publish.main_package === undefined
645
- ? ""
646
- : assertString(publish.main_package, "publish.main_package"),
647
- };
648
- if (publish.shared_alpha_authority_major !== undefined) {
649
- const sharedAlphaAuthorityMajor = Number(
650
- publish.shared_alpha_authority_major,
651
- );
652
- if (
653
- !Number.isSafeInteger(sharedAlphaAuthorityMajor) ||
654
- sharedAlphaAuthorityMajor < 1
655
- ) {
656
- throw new Error(
657
- "publish.shared_alpha_authority_major must be a positive integer",
658
- );
659
- }
660
- normalized.sharedAlphaAuthorityMajor = sharedAlphaAuthorityMajor;
661
- }
662
- if (publish.kind !== undefined) {
663
- normalized.kind = kind;
664
- }
665
- if (publish.package !== undefined) {
666
- normalized.package = assertString(publish.package, "publish.package");
667
- }
668
- return normalized;
669
- }
670
-
671
- function normalizeProjectSection(project) {
672
- assertPlainObject(project, "project");
673
- const type = assertString(project.type, "project.type");
674
- if (!SUPPORTED_PROJECT_TYPES.has(type)) {
675
- throw new Error("project.type must be one of package, web-surface, infra-contract, distribution-index, or publication-artifact");
676
- }
677
- const normalized = { type };
678
- for (const key of ["name", "site"]) {
679
- if (project[key] !== undefined) {
680
- normalized[key] = assertString(project[key], `project.${key}`);
681
- }
682
- }
683
- return normalized;
684
- }
685
-
686
- function normalizePublicationSection(publication) {
687
- assertPlainObject(publication, "publication");
688
- const kind = publication.kind === undefined ? "paper" : assertString(publication.kind, "publication.kind");
689
- if (!["paper", "report", "specification", "article", "dataset-note"].includes(kind)) {
690
- throw new Error("publication.kind must be one of paper, report, specification, article, or dataset-note");
691
- }
692
- const primaryArtifact = posixPath(assertString(publication.primary_artifact, "publication.primary_artifact"));
693
- return {
694
- kind,
695
- title: assertString(publication.title, "publication.title"),
696
- primaryArtifact,
697
- version: publication.version === undefined ? "" : assertString(publication.version, "publication.version"),
698
- abstract: publication.abstract === undefined ? "" : assertString(publication.abstract, "publication.abstract"),
699
- authors: normalizeStringArray(publication.authors, "publication.authors"),
700
- artifactPaths: normalizeStringArray(publication.artifact_paths, "publication.artifact_paths").map(posixPath),
701
- metadataPaths: normalizeStringArray(publication.metadata_paths, "publication.metadata_paths").map(posixPath),
702
- sourcePaths: normalizeStringArray(publication.source_paths, "publication.source_paths").map(posixPath),
703
- siteConsumers: normalizeStringArray(publication.site_consumers, "publication.site_consumers"),
704
- toolchain: normalizePublicationToolchain(publication.toolchain),
705
- manifestPath: publication.manifest_path === undefined
706
- ? ".buildchain/publication/publication-artifact.json"
707
- : posixPath(assertString(publication.manifest_path, "publication.manifest_path")),
708
- sourceBundlePath: publication.source_bundle_path === undefined
709
- ? ".buildchain/publication/source.tar.gz"
710
- : posixPath(assertString(publication.source_bundle_path, "publication.source_bundle_path")),
711
- archive: normalizePublicationArchive(publication.archive),
712
- };
713
- }
714
-
715
- function normalizePublicationRehearsalSection(rehearsal) {
716
- assertPlainObject(rehearsal, "publication_rehearsal");
717
- const allowed = ["contract", "capsule_path", "candidate_root", "state_path", "evidence_path", "effect_default"];
718
- const unknown = Object.keys(rehearsal).filter((key) => !allowed.includes(key));
719
- if (unknown.length > 0) {
720
- throw new Error(`publication_rehearsal contains unsupported fields: ${unknown.join(", ")}`);
721
- }
722
- const normalized = {
723
- contract: assertString(rehearsal.contract, "publication_rehearsal.contract"),
724
- capsulePath: posixPath(assertString(rehearsal.capsule_path, "publication_rehearsal.capsule_path")),
725
- candidateRoot: posixPath(assertString(rehearsal.candidate_root, "publication_rehearsal.candidate_root")),
726
- statePath: posixPath(assertString(rehearsal.state_path, "publication_rehearsal.state_path")),
727
- evidencePath: posixPath(assertString(rehearsal.evidence_path, "publication_rehearsal.evidence_path")),
728
- effectDefault: assertString(rehearsal.effect_default, "publication_rehearsal.effect_default"),
729
- };
730
- if (
731
- normalized.contract !== "buildchain-v4-publication-rehearsal-capsule/v1" ||
732
- normalized.effectDefault !== "disabled"
733
- ) {
734
- throw new Error("publication_rehearsal must use the v4 capsule contract with effect_default = disabled");
735
- }
736
- for (const [key, value] of Object.entries({
737
- capsule_path: normalized.capsulePath,
738
- candidate_root: normalized.candidateRoot,
739
- state_path: normalized.statePath,
740
- evidence_path: normalized.evidencePath,
741
- })) {
742
- if (value.startsWith("/") || value.includes("\\") || value.split("/").includes("..")) {
743
- throw new Error(`publication_rehearsal.${key} must be repository-relative`);
744
- }
745
- }
746
- return normalized;
747
- }
748
-
749
- function normalizeAdopterDeliverySection(delivery) {
750
- assertPlainObject(delivery, "adopter_delivery");
751
- const allowed = ["contract", "input_path", "readback_path", "bootstrap_path", "archive_path", "result_path", "driver_selector", "artifact_profile_selector"];
752
- const unknown = Object.keys(delivery).filter((key) => !allowed.includes(key));
753
- if (unknown.length > 0) {
754
- throw new Error(`adopter_delivery contains unsupported fields: ${unknown.join(", ")}`);
755
- }
756
- const normalized = {
757
- contract: assertString(delivery.contract, "adopter_delivery.contract"),
758
- inputPath: posixPath(assertString(delivery.input_path, "adopter_delivery.input_path")),
759
- readbackPath: posixPath(assertString(delivery.readback_path, "adopter_delivery.readback_path")),
760
- bootstrapPath: posixPath(assertString(delivery.bootstrap_path, "adopter_delivery.bootstrap_path")),
761
- archivePath: posixPath(assertString(delivery.archive_path, "adopter_delivery.archive_path")),
762
- resultPath: posixPath(assertString(delivery.result_path, "adopter_delivery.result_path")),
763
- driverSelector: assertString(delivery.driver_selector, "adopter_delivery.driver_selector"),
764
- artifactProfileSelector: assertString(delivery.artifact_profile_selector, "adopter_delivery.artifact_profile_selector"),
765
- };
766
- if (normalized.contract !== "kungfu-buildchain-v4-adopter-delivery/v1") {
767
- throw new Error("adopter_delivery contract is unsupported");
768
- }
769
- if (
770
- !["json-assertion", "kfd-category", "legacy-kfd"].includes(normalized.driverSelector) ||
771
- !["git-commit", "package"].includes(normalized.artifactProfileSelector)
772
- ) {
773
- throw new Error("adopter_delivery selector is unsupported");
774
- }
775
- for (const [key, value] of Object.entries({
776
- input_path: normalized.inputPath,
777
- readback_path: normalized.readbackPath,
778
- bootstrap_path: normalized.bootstrapPath,
779
- archive_path: normalized.archivePath,
780
- result_path: normalized.resultPath,
781
- })) {
782
- if (value.startsWith("/") || value.includes("\\") || value.split("/").includes("..")) {
783
- throw new Error(`adopter_delivery.${key} must be repository-relative`);
784
- }
785
- }
786
- return normalized;
787
- }
788
-
789
- function normalizePublicationArchive(archive = undefined) {
790
- if (archive === undefined) {
791
- return undefined;
792
- }
793
- assertPlainObject(archive, "publication.archive");
794
- const immutableUrlPrefix = archive.immutable_url_prefix === undefined
795
- ? ""
796
- : assertString(archive.immutable_url_prefix, "publication.archive.immutable_url_prefix");
797
- const immutableBaseUrl = archive.immutable_base_url === undefined
798
- ? ""
799
- : assertString(archive.immutable_base_url, "publication.archive.immutable_base_url");
800
- if (!immutableUrlPrefix && !immutableBaseUrl) {
801
- throw new Error("publication.archive requires immutable_url_prefix or immutable_base_url");
802
- }
803
- return {
804
- id: archive.id === undefined ? "" : assertString(archive.id, "publication.archive.id"),
805
- canonicalUrl: assertString(archive.canonical_url, "publication.archive.canonical_url"),
806
- latestUrl: archive.latest_url === undefined
807
- ? ""
808
- : assertString(archive.latest_url, "publication.archive.latest_url"),
809
- latestEvidenceUrl: archive.latest_evidence_url === undefined
810
- ? ""
811
- : assertString(archive.latest_evidence_url, "publication.archive.latest_evidence_url"),
812
- immutableBaseUrl,
813
- immutableUrlPrefix,
814
- artifactUrlPrefix: archive.artifact_url_prefix === undefined
815
- ? ""
816
- : assertString(archive.artifact_url_prefix, "publication.archive.artifact_url_prefix"),
817
- registryPath: archive.registry_path === undefined
818
- ? ".buildchain/publication/publication-registry.json"
819
- : posixPath(assertString(archive.registry_path, "publication.archive.registry_path")),
820
- };
821
- }
822
-
823
- function normalizePublicationToolchain(toolchain = undefined) {
824
- if (toolchain === undefined) {
825
- return {
826
- type: "custom-command",
827
- image: "",
828
- digest: "",
829
- command: "",
830
- trustClassification: "custom-command",
831
- };
832
- }
833
- assertPlainObject(toolchain, "publication.toolchain");
834
- const type = toolchain.type === undefined
835
- ? "custom-command"
836
- : assertString(toolchain.type, "publication.toolchain.type");
837
- if (!SUPPORTED_PUBLICATION_TOOLCHAINS.has(type)) {
838
- throw new Error("publication.toolchain.type must be one of custom-command or latex-docker");
839
- }
840
- const command = toolchain.command === undefined
841
- ? ""
842
- : assertString(toolchain.command, "publication.toolchain.command");
843
- const image = toolchain.image === undefined
844
- ? ""
845
- : assertString(toolchain.image, "publication.toolchain.image");
846
- const digest = toolchain.digest === undefined
847
- ? ""
848
- : assertString(toolchain.digest, "publication.toolchain.digest");
849
- if (type === "latex-docker") {
850
- if (!image) throw new Error("publication.toolchain.image is required for latex-docker");
851
- if (!digest) throw new Error("publication.toolchain.digest is required for latex-docker");
852
- if (!/^sha256:[0-9a-f]{64}$/i.test(digest)) {
853
- throw new Error("publication.toolchain.digest must be a sha256:<64 hex> image digest");
854
- }
855
- if (!command) throw new Error("publication.toolchain.command is required for latex-docker");
856
- }
857
- return {
858
- type,
859
- image,
860
- digest,
861
- command,
862
- trustClassification: type === "latex-docker" ? "pinned-docker-toolchain" : "custom-command",
863
- };
864
- }
865
-
866
- function normalizeInfraSection(infra) {
867
- assertPlainObject(infra, "infra");
868
- const adapter = assertString(infra.adapter, "infra.adapter");
869
- if (!SUPPORTED_INFRA_ADAPTERS.has(adapter)) {
870
- throw new Error(
871
- "infra.adapter must be one of manual-observed, aws-cloudformation, terraform, opentofu, pulumi, aws-cdk, aws-cli, or custom-command",
872
- );
873
- }
874
- const adoptionMode = infra.adoption_mode === undefined
875
- ? (adapter === "manual-observed" ? "manual-observed" : "validate-only")
876
- : assertString(infra.adoption_mode, "infra.adoption_mode");
877
- if (!SUPPORTED_INFRA_ADOPTION_MODES.has(adoptionMode)) {
878
- throw new Error(
879
- "infra.adoption_mode must be one of validate-only, plan-only, observe-only, manual-observed, import-planned, or managed-apply",
880
- );
881
- }
882
- const applyMode = infra.apply === undefined
883
- ? "disabled"
884
- : assertString(infra.apply, "infra.apply");
885
- if (!SUPPORTED_INFRA_APPLY_MODES.has(applyMode)) {
886
- throw new Error("infra.apply must be one of disabled, manual-approval, or environment-approval");
887
- }
888
- const normalized = {
889
- adapter,
890
- adoptionMode,
891
- applyMode,
892
- environment: infra.environment === undefined ? "" : assertString(infra.environment, "infra.environment"),
893
- identityRef: infra.identity_ref === undefined ? "" : assertString(infra.identity_ref, "infra.identity_ref"),
894
- desired: normalizeStringArray(infra.desired, "infra.desired").map(posixPath),
895
- contract: normalizeStringArray(infra.contract, "infra.contract").map(posixPath),
896
- secretRefs: normalizeStringArray(infra.secret_refs, "infra.secret_refs"),
897
- };
898
- if (infra.commands !== undefined) {
899
- normalized.commands = normalizeInfraCommands(infra.commands);
900
- }
901
- assertNoInlineSecretValues(infra, "infra", new Set(["secret_refs", "commands"]));
902
- return normalized;
903
- }
904
-
905
- function normalizeInfraCommands(commands) {
906
- assertPlainObject(commands, "infra.commands");
907
- const normalized = {};
908
- for (const stage of ["validate", "plan", "apply", "observe"]) {
909
- if (commands[stage] !== undefined) {
910
- normalized[stage] = assertString(commands[stage], `infra.commands.${stage}`);
911
- }
912
- }
913
- return normalized;
914
- }
915
-
916
- function normalizeConsumersSection(consumers) {
917
- if (!Array.isArray(consumers)) {
918
- throw new Error("consumers must be an array of tables");
919
- }
920
- return consumers.map((consumer, index) => normalizeConsumerConfig(consumer, index));
921
- }
922
-
923
- function normalizeConsumerConfig(consumer, index) {
924
- assertPlainObject(consumer, `consumers[${index}]`);
925
- return {
926
- repo: assertString(consumer.repo, `consumers[${index}].repo`),
927
- path: posixPath(assertString(consumer.path, `consumers[${index}].path`)),
928
- source: posixPath(assertString(consumer.source, `consumers[${index}].source`)),
929
- branch: consumer.branch === undefined ? "" : assertString(consumer.branch, `consumers[${index}].branch`),
930
- };
931
- }
932
-
933
- function normalizeChannelsSection(channels) {
934
- assertPlainObject(channels, "channels");
935
- return Object.fromEntries(
936
- Object.entries(channels).map(([name, channel]) => [
937
- name,
938
- normalizeChannelConfig(name, channel),
939
- ]),
940
- );
941
- }
942
-
943
- function normalizeChannelConfig(name, channel) {
944
- assertPlainObject(channel, `channels.${name}`);
945
- const hasUrl = channel.url !== undefined;
946
- const hasUrlPattern = channel.url_pattern !== undefined;
947
- if (hasUrl && hasUrlPattern) {
948
- throw new Error(`channels.${name} must define only one of url or url_pattern`);
949
- }
950
- if (!hasUrl && !hasUrlPattern) {
951
- throw new Error(`channels.${name} must define url or url_pattern`);
952
- }
953
- const visibility = channel.visibility === undefined
954
- ? defaultChannelVisibility(name)
955
- : assertString(channel.visibility, `channels.${name}.visibility`);
956
- if (!SUPPORTED_CHANNEL_VISIBILITY.has(visibility)) {
957
- throw new Error(`channels.${name}.visibility must be one of ephemeral, protected, public, or internal`);
958
- }
959
- const accessControl = normalizeAccessControl(channel, name);
960
- const edgeAuth = normalizeEdgeAuth(channel, name, accessControl);
961
- const normalized = {
962
- name,
963
- visibility,
964
- requiresAuth: optionalBoolean(channel.requires_auth, accessControl !== "none"),
965
- requiresControlledAccess: accessControl !== "none",
966
- noindex: optionalBoolean(channel.noindex, name !== "production"),
967
- promotable: optionalBoolean(channel.promotable, name === "staging"),
968
- canonical: optionalBoolean(channel.canonical, name === "production"),
969
- accessControl,
970
- edgeAuth,
971
- };
972
- if (hasUrl) {
973
- normalized.url = assertString(channel.url, `channels.${name}.url`);
974
- }
975
- if (hasUrlPattern) {
976
- normalized.urlPattern = assertString(channel.url_pattern, `channels.${name}.url_pattern`);
977
- }
978
- return normalized;
979
- }
980
-
981
- function normalizeAccessControl(channel, name) {
982
- if (channel.access_control !== undefined) {
983
- const accessControl = assertString(channel.access_control, `channels.${name}.access_control`);
984
- if (!SUPPORTED_ACCESS_CONTROL.has(accessControl)) {
985
- throw new Error(`channels.${name}.access_control must be one of none, managed-network, edge-basic-auth, oidc, or app-auth`);
986
- }
987
- return accessControl;
988
- }
989
- if (name === "staging") {
990
- return "edge-basic-auth";
991
- }
992
- if (name === "production") {
993
- return "none";
994
- }
995
- return "none";
996
- }
997
-
998
- function normalizeEdgeAuth(channel, name, accessControl) {
999
- if (channel.edge_auth !== undefined) {
1000
- const edgeAuth = assertString(channel.edge_auth, `channels.${name}.edge_auth`);
1001
- if (!SUPPORTED_EDGE_AUTH.has(edgeAuth)) {
1002
- throw new Error(`channels.${name}.edge_auth must be one of none, cloudfront-basic-auth, oidc, or app-auth`);
1003
- }
1004
- return edgeAuth;
1005
- }
1006
- return accessControl === "edge-basic-auth"
1007
- ? "cloudfront-basic-auth"
1008
- : "none";
1009
- }
1010
-
1011
- function defaultChannelVisibility(name) {
1012
- if (name === "preview") {
1013
- return "ephemeral";
1014
- }
1015
- if (name === "staging") {
1016
- return "protected";
1017
- }
1018
- if (name === "production") {
1019
- return "public";
1020
- }
1021
- return "internal";
1022
- }
1023
-
1024
- function normalizeDeploySection(deploy) {
1025
- assertPlainObject(deploy, "deploy");
1026
- return Object.fromEntries(
1027
- Object.entries(deploy).map(([name, config]) => [
1028
- name,
1029
- normalizeDeployConfig(name, config),
1030
- ]),
1031
- );
1032
- }
1033
-
1034
- function normalizeDeployConfig(name, config) {
1035
- assertPlainObject(config, `deploy.${name}`);
1036
- const adapter = assertString(config.adapter, `deploy.${name}.adapter`);
1037
- if (!SUPPORTED_DEPLOY_ADAPTERS.has(adapter)) {
1038
- throw new Error(`deploy.${name}.adapter must be one of aws-s3-cloudfront, aws-elastic-beanstalk, or aws-ecs-service`);
1039
- }
1040
- const directoryIndexRewrite = config.directory_index_rewrite === undefined
1041
- ? "buildchain"
1042
- : assertString(config.directory_index_rewrite, `deploy.${name}.directory_index_rewrite`);
1043
- if (!SUPPORTED_DIRECTORY_INDEX_REWRITE.has(directoryIndexRewrite)) {
1044
- throw new Error(`deploy.${name}.directory_index_rewrite must be one of buildchain or external`);
1045
- }
1046
- const healthStrategy = config.health_strategy === undefined
1047
- ? undefined
1048
- : assertString(config.health_strategy, `deploy.${name}.health_strategy`);
1049
- if (healthStrategy !== undefined && !SUPPORTED_HEALTH_STRATEGIES.has(healthStrategy)) {
1050
- throw new Error(`deploy.${name}.health_strategy must be one of http or s3-object`);
1051
- }
1052
- const cacheControl = normalizeWebSurfaceCacheControl(config, `deploy.${name}`);
1053
- const normalized = {
1054
- ...config,
1055
- adapter,
1056
- directoryIndexRewrite,
1057
- healthStrategy,
1058
- cacheControl,
1059
- artifactPath: config.artifact_path === undefined
1060
- ? undefined
1061
- : posixPath(assertString(config.artifact_path, `deploy.${name}.artifact_path`)),
1062
- secretRefs: normalizeStringArray(config.secret_refs, `deploy.${name}.secret_refs`),
1063
- surfaces: config.surfaces === undefined
1064
- ? undefined
1065
- : normalizeDeploySurfaceOverrides(name, config.surfaces),
1066
- };
1067
- delete normalized.directory_index_rewrite;
1068
- delete normalized.health_strategy;
1069
- delete normalized.cache_control_default;
1070
- delete normalized.cache_control_mutable;
1071
- delete normalized.cache_control_immutable;
1072
- delete normalized.artifact_path;
1073
- delete normalized.secret_refs;
1074
- if (normalized.healthStrategy === undefined) {
1075
- delete normalized.healthStrategy;
1076
- }
1077
- if (normalized.cacheControl === undefined) {
1078
- delete normalized.cacheControl;
1079
- }
1080
- if (normalized.surfaces === undefined) {
1081
- delete normalized.surfaces;
1082
- }
1083
- assertNoInlineSecretValues(config, `deploy.${name}`, new Set(["secret_refs", "surfaces"]));
1084
- return normalized;
1085
- }
1086
-
1087
- function normalizeWebSurfaceCacheControl(config, label) {
1088
- const entries = [
1089
- ["default", "cache_control_default"],
1090
- ["mutable", "cache_control_mutable"],
1091
- ["immutable", "cache_control_immutable"],
1092
- ].flatMap(([normalizedKey, sourceKey]) => (
1093
- config[sourceKey] === undefined
1094
- ? []
1095
- : [[normalizedKey, assertString(config[sourceKey], `${label}.${sourceKey}`)]]
1096
- ));
1097
- return entries.length > 0 ? Object.fromEntries(entries) : undefined;
1098
- }
1099
-
1100
- function normalizeDeploySurfaceOverrides(channelName, surfaces) {
1101
- assertPlainObject(surfaces, `deploy.${channelName}.surfaces`);
1102
- return Object.fromEntries(
1103
- Object.entries(surfaces).map(([surfaceName, override]) => [
1104
- surfaceName,
1105
- normalizeDeploySurfaceOverride(channelName, surfaceName, override),
1106
- ]),
1107
- );
1108
- }
1109
-
1110
- function normalizeDeploySurfaceOverride(channelName, surfaceName, override) {
1111
- assertPlainObject(override, `deploy.${channelName}.surfaces.${surfaceName}`);
1112
- const label = `deploy.${channelName}.surfaces.${surfaceName}`;
1113
- const directoryIndexRewrite = override.directory_index_rewrite === undefined
1114
- ? undefined
1115
- : assertString(override.directory_index_rewrite, `${label}.directory_index_rewrite`);
1116
- if (directoryIndexRewrite !== undefined && !SUPPORTED_DIRECTORY_INDEX_REWRITE.has(directoryIndexRewrite)) {
1117
- throw new Error(`${label}.directory_index_rewrite must be one of buildchain or external`);
1118
- }
1119
- const healthStrategy = override.health_strategy === undefined
1120
- ? undefined
1121
- : assertString(override.health_strategy, `${label}.health_strategy`);
1122
- if (healthStrategy !== undefined && !SUPPORTED_HEALTH_STRATEGIES.has(healthStrategy)) {
1123
- throw new Error(`${label}.health_strategy must be one of http or s3-object`);
1124
- }
1125
- const cacheControl = normalizeWebSurfaceCacheControl(override, label);
1126
- const normalized = {
1127
- ...override,
1128
- directoryIndexRewrite,
1129
- healthStrategy,
1130
- cacheControl,
1131
- artifactPath: override.artifact_path === undefined
1132
- ? undefined
1133
- : posixPath(assertString(override.artifact_path, `${label}.artifact_path`)),
1134
- originPath: override.origin_path === undefined
1135
- ? undefined
1136
- : assertString(override.origin_path, `${label}.origin_path`),
1137
- secretRefs: normalizeStringArray(override.secret_refs, `${label}.secret_refs`),
1138
- };
1139
- delete normalized.directory_index_rewrite;
1140
- delete normalized.health_strategy;
1141
- delete normalized.cache_control_default;
1142
- delete normalized.cache_control_mutable;
1143
- delete normalized.cache_control_immutable;
1144
- delete normalized.artifact_path;
1145
- delete normalized.origin_path;
1146
- delete normalized.secret_refs;
1147
- if (normalized.artifactPath === undefined) {
1148
- delete normalized.artifactPath;
1149
- }
1150
- if (normalized.originPath === undefined) {
1151
- delete normalized.originPath;
1152
- }
1153
- if (normalized.secretRefs.length === 0) {
1154
- delete normalized.secretRefs;
1155
- }
1156
- if (normalized.directoryIndexRewrite === undefined) {
1157
- delete normalized.directoryIndexRewrite;
1158
- }
1159
- if (normalized.healthStrategy === undefined) {
1160
- delete normalized.healthStrategy;
1161
- }
1162
- if (normalized.cacheControl === undefined) {
1163
- delete normalized.cacheControl;
1164
- }
1165
- assertNoInlineSecretValues(override, label, new Set(["secret_refs"]));
1166
- return normalized;
1167
- }
1168
-
1169
- function assertNoInlineSecretValues(config, label, ignoredKeys = new Set()) {
1170
- for (const [key, value] of Object.entries(config)) {
1171
- if (ignoredKeys.has(key) || key.endsWith("_ref") || key.endsWith("_refs")) {
1172
- continue;
1173
- }
1174
- if (/(secret|token|password)/i.test(key) && value !== undefined) {
1175
- throw new Error(`${label}.${key} must be declared as a secret reference, not a secret value`);
1176
- }
1177
- }
1178
- }
1179
-
1180
- function normalizeSurfacesSection(surfaces) {
1181
- assertPlainObject(surfaces, "surfaces");
1182
- const entries = Object.entries(surfaces);
1183
- if (entries.length === 0) {
1184
- throw new Error("surfaces must declare at least one surface");
1185
- }
1186
- return Object.fromEntries(
1187
- entries.map(([name, surface]) => [
1188
- name,
1189
- normalizeSurfaceConfig(name, surface),
1190
- ]),
1191
- );
1192
- }
1193
-
1194
- function normalizeSurfaceConfig(name, surface) {
1195
- assertPlainObject(surface, `surfaces.${name}`);
1196
- const normalized = {
1197
- name,
1198
- path: surface.path === undefined
1199
- ? "/"
1200
- : normalizeSurfacePath(assertString(surface.path, `surfaces.${name}.path`)),
1201
- pathOnly: optionalBoolean(surface.path_only, false),
1202
- canonical: optionalBoolean(surface.canonical, name === "default" || name === "hub"),
1203
- };
1204
- if (surface.preview_url_pattern !== undefined) {
1205
- normalized.previewUrlPattern = assertString(surface.preview_url_pattern, `surfaces.${name}.preview_url_pattern`);
1206
- }
1207
- if (surface.staging_url !== undefined) {
1208
- normalized.stagingUrl = assertString(surface.staging_url, `surfaces.${name}.staging_url`);
1209
- }
1210
- if (surface.production_url !== undefined) {
1211
- normalized.productionUrl = assertString(surface.production_url, `surfaces.${name}.production_url`);
1212
- }
1213
- return normalized;
1214
- }
1215
-
1216
- function normalizeSurfacePath(value) {
1217
- const normalized = `/${String(value).replace(/^\/+/, "")}`.replace(/\/{2,}/g, "/");
1218
- if (normalized === "/") {
1219
- return normalized;
1220
- }
1221
- return normalized.endsWith("/") ? normalized : `${normalized}/`;
1222
- }
1223
-
1224
- function normalizeRetentionSection(retention) {
1225
- assertPlainObject(retention, "retention");
1226
- return Object.fromEntries(
1227
- Object.entries(retention).map(([name, config]) => [
1228
- name,
1229
- normalizeRetentionConfig(name, config),
1230
- ]),
1231
- );
1232
- }
1233
-
1234
- function normalizeRetentionConfig(name, config) {
1235
- assertPlainObject(config, `retention.${name}`);
1236
- const normalized = {};
1237
- for (const [key, value] of Object.entries(config)) {
1238
- const numberValue = Number(value);
1239
- if (!Number.isInteger(numberValue) || numberValue < 0) {
1240
- throw new Error(`retention.${name}.${key} must be a non-negative integer`);
1241
- }
1242
- normalized[key] = numberValue;
1243
- }
1244
- return normalized;
1245
- }
1246
-
1247
- function normalizeSecuritySection(security) {
1248
- assertPlainObject(security, "security");
1249
- return Object.fromEntries(
1250
- Object.entries(security).map(([name, config]) => [
1251
- name,
1252
- normalizeSecurityConfig(name, config),
1253
- ]),
1254
- );
1255
- }
1256
-
1257
- function normalizeSecurityConfig(name, config) {
1258
- assertPlainObject(config, `security.${name}`);
1259
- return {
1260
- requiresAuth: optionalBoolean(config.requires_auth, undefined),
1261
- noindex: optionalBoolean(config.noindex, undefined),
1262
- isolatedProviders: optionalBoolean(config.isolated_providers, undefined),
1263
- sandboxData: optionalBoolean(config.sandbox_data, undefined),
1264
- secretRefs: normalizeStringArray(config.secret_refs, `security.${name}.secret_refs`),
1265
- };
1266
- }
1267
-
1268
- function validateWebSurfaceConfig(config) {
1269
- if (config.project?.type !== "web-surface") {
1270
- return;
1271
- }
1272
- for (const name of WEB_SURFACE_CHANNELS) {
1273
- if (!config.channels?.[name]) {
1274
- throw new Error(`project.type = "web-surface" requires channels.${name}`);
1275
- }
1276
- if (!config.deploy?.[name]) {
1277
- throw new Error(`project.type = "web-surface" requires deploy.${name}`);
1278
- }
1279
- }
1280
- if (!config.channels.preview.urlPattern) {
1281
- throw new Error("channels.preview.url_pattern is required for web-surface preview aliases");
1282
- }
1283
- for (const name of ["staging", "production"]) {
1284
- if (!config.channels[name].url) {
1285
- throw new Error(`channels.${name}.url is required for web-surface`);
1286
- }
1287
- }
1288
- if (config.channels.staging.visibility === "public") {
1289
- throw new Error("channels.staging.visibility must not be public for web-surface");
1290
- }
1291
- if (config.channels.staging.accessControl === "none") {
1292
- throw new Error("channels.staging.access_control must protect staging for web-surface");
1293
- }
1294
- if (config.channels.staging.accessControl === "edge-basic-auth" && config.channels.staging.edgeAuth === "none") {
1295
- throw new Error("channels.staging.edge_auth must not be none when access_control = edge-basic-auth");
1296
- }
1297
- if (!config.channels.staging.noindex) {
1298
- throw new Error("channels.staging.noindex must be true for web-surface");
1299
- }
1300
- const stagingSecurity = config.security?.staging;
1301
- if (stagingSecurity) {
1302
- if (stagingSecurity.noindex === false) {
1303
- throw new Error("security.staging.noindex must not disable staging noindex");
1304
- }
1305
- if (stagingSecurity.isolatedProviders === false) {
1306
- throw new Error("security.staging.isolated_providers must not be false for web-surface");
1307
- }
1308
- }
1309
- validateWebSurfaceSurfaces(config);
1310
- }
1311
-
1312
- function validateInfraContractConfig(config) {
1313
- if (config.project?.type !== "infra-contract") {
1314
- return;
1315
- }
1316
- if (!config.infra) {
1317
- throw new Error('project.type = "infra-contract" requires [infra]');
1318
- }
1319
- if (config.infra.desired.length === 0) {
1320
- throw new Error('project.type = "infra-contract" requires infra.desired');
1321
- }
1322
- if (config.infra.contract.length === 0) {
1323
- throw new Error('project.type = "infra-contract" requires infra.contract');
1324
- }
1325
- if (!Array.isArray(config.consumers) || config.consumers.length === 0) {
1326
- throw new Error('project.type = "infra-contract" requires at least one [[consumers]] entry');
1327
- }
1328
- if (config.infra.applyMode !== "disabled" && config.infra.adoptionMode !== "managed-apply") {
1329
- throw new Error("infra.apply requires infra.adoption_mode = managed-apply");
1330
- }
1331
- if (config.infra.applyMode !== "disabled" && !config.infra.environment) {
1332
- throw new Error("infra.apply requires infra.environment");
1333
- }
1334
- if (config.infra.applyMode !== "disabled" && !config.infra.identityRef) {
1335
- throw new Error("infra.apply requires infra.identity_ref");
1336
- }
1337
- if (config.infra.adapter === "manual-observed" && config.infra.applyMode !== "disabled") {
1338
- throw new Error('infra.adapter = "manual-observed" requires infra.apply = "disabled"');
1339
- }
1340
- }
1341
-
1342
- function validateAnchoredDerivedVersionMaterialConfig(config) {
1343
- const derivedFiles = config.version?.derivedFiles || [];
1344
- if (derivedFiles.length === 0) {
1345
- return;
1346
- }
1347
- const versionState =
1348
- config.lifecycle?.["version-state"] ||
1349
- config.lifecycle?.version_state;
1350
- if (!versionState) {
1351
- throw new Error(
1352
- "version.derived_files requires lifecycle.version-state to regenerate declared material",
1353
- );
1354
- }
1355
- if (!config.lifecycle?.verify) {
1356
- throw new Error(
1357
- "version.derived_files requires lifecycle.verify to validate regenerated material",
1358
- );
1359
- }
1360
- const versionPaths = new Set((config.version.files || []).map((file) => file.path));
1361
- if (config.version.manifest) {
1362
- versionPaths.add(config.version.manifest);
1363
- }
1364
- for (const filePath of derivedFiles) {
1365
- if (versionPaths.has(filePath)) {
1366
- throw new Error(
1367
- `version.derived_files must not repeat version.files or version.manifest: ${filePath}`,
1368
- );
1369
- }
1370
- }
1371
- }
1372
-
1373
- function validateWebSurfaceSurfaces(config) {
1374
- const surfaces = config.surfaces || {};
1375
- for (const [name, surface] of Object.entries(surfaces)) {
1376
- if (!surface.pathOnly && !surface.previewUrlPattern) {
1377
- throw new Error(`surfaces.${name}.preview_url_pattern is required unless path_only = true`);
1378
- }
1379
- if (!surface.pathOnly && !surface.stagingUrl) {
1380
- throw new Error(`surfaces.${name}.staging_url is required unless path_only = true`);
1381
- }
1382
- if (!surface.pathOnly && !surface.productionUrl) {
1383
- throw new Error(`surfaces.${name}.production_url is required unless path_only = true`);
1384
- }
1385
- if (surface.productionUrl && !surface.pathOnly && !surface.stagingUrl) {
1386
- throw new Error(`surfaces.${name}.staging_url is required when production_url declares a first-class host`);
1387
- }
1388
- }
1389
- }
1390
-
1391
- function normalizeVersionSection(version) {
1392
- assertPlainObject(version, "version");
1393
- const files = version.files === undefined ? [] : version.files;
1394
- if (!Array.isArray(files)) {
1395
- throw new Error("version.files must be an array of tables");
1396
- }
1397
- const strategy = version.strategy === undefined
1398
- ? "semver"
1399
- : assertString(version.strategy, "version.strategy");
1400
- if (!SUPPORTED_VERSION_STRATEGIES.has(strategy)) {
1401
- throw new Error("version.strategy must be one of semver or anchored");
1402
- }
1403
- const next = version.next === undefined
1404
- ? "auto"
1405
- : assertString(version.next, "version.next");
1406
- if (!SUPPORTED_VERSION_NEXT.has(next)) {
1407
- throw new Error("version.next must be one of auto or manual");
1408
- }
1409
- if (strategy === "semver" && next !== "auto") {
1410
- throw new Error('version.next = "manual" requires version.strategy = "anchored"');
1411
- }
1412
- if (strategy === "anchored" && next !== "manual") {
1413
- throw new Error('version.strategy = "anchored" requires version.next = "manual"');
1414
- }
1415
- const derivedFiles = normalizeStringArray(
1416
- version.derived_files,
1417
- "version.derived_files",
1418
- ).map((filePath) => posixPath(filePath));
1419
- if (new Set(derivedFiles).size !== derivedFiles.length) {
1420
- throw new Error("version.derived_files must not contain duplicate paths");
1421
- }
1422
- return {
1423
- required: version.required === undefined ? false : Boolean(version.required),
1424
- strategy,
1425
- next,
1426
- manifest: version.manifest === undefined
1427
- ? undefined
1428
- : posixPath(assertString(version.manifest, "version.manifest")),
1429
- files: files.map((file, index) => normalizeVersionFile(file, index)),
1430
- derivedFiles,
1431
- };
1432
- }
1433
-
1434
- function normalizeVersionFile(file, index) {
1435
- assertPlainObject(file, `version.files[${index}]`);
1436
- const type = assertString(file.type, `version.files[${index}].type`);
1437
- if (!SUPPORTED_VERSION_FILE_TYPES.has(type)) {
1438
- throw new Error(`version.files[${index}].type must be one of json, toml, or regex`);
1439
- }
1440
- const normalized = {
1441
- type,
1442
- path: posixPath(assertString(file.path, `version.files[${index}].path`)),
1443
- };
1444
- if (type === "json" || type === "toml") {
1445
- normalized.key = assertString(file.key, `version.files[${index}].key`);
1446
- }
1447
- if (type === "regex") {
1448
- normalized.pattern = assertString(file.pattern, `version.files[${index}].pattern`);
1449
- normalized.replacement = assertString(file.replacement, `version.files[${index}].replacement`);
1450
- }
1451
- return normalized;
1452
- }
1453
-
1454
- function normalizeLifecycleSection(lifecycle) {
1455
- assertPlainObject(lifecycle, "lifecycle");
1456
- const normalized = {};
1457
- if (lifecycle.shell !== undefined) {
1458
- normalized.shell = assertString(lifecycle.shell, "lifecycle.shell");
1459
- }
1460
- if (lifecycle.env !== undefined) {
1461
- normalized.env = normalizeEnv(lifecycle.env, "lifecycle.env");
1462
- }
1463
- for (const [name, value] of Object.entries(lifecycle)) {
1464
- if (RESERVED_LIFECYCLE_KEYS.has(name)) {
1465
- continue;
1466
- }
1467
- normalized[name] = normalizeLifecycleStage(value, `lifecycle.${name}`, normalized);
1468
- }
1469
- return normalized;
1470
- }
1471
-
1472
- function normalizeEnv(env, label) {
1473
- assertPlainObject(env, label);
1474
- return Object.fromEntries(
1475
- Object.entries(env).map(([key, value]) => [key, String(value)]),
1476
- );
1477
- }
1478
-
1479
- export function normalizeLifecycleStage(stage, label = "lifecycle stage", lifecycle = {}) {
1480
- assertPlainObject(stage, label);
1481
- const hasCommand = stage.command !== undefined;
1482
- const hasCommands = stage.commands !== undefined;
1483
- const hasScript = stage.script !== undefined;
1484
- const modeCount = [hasCommand, hasCommands, hasScript].filter(Boolean).length;
1485
- if (modeCount !== 1) {
1486
- throw new Error(`${label} must define exactly one of command, commands, or script`);
1487
- }
1488
- const normalized = {
1489
- shell: stage.shell === undefined ? lifecycle.shell : assertString(stage.shell, `${label}.shell`),
1490
- env: stage.env === undefined ? undefined : normalizeEnv(stage.env, `${label}.env`),
1491
- timeoutMinutes: stage.timeout_minutes === undefined ? undefined : Number(stage.timeout_minutes),
1492
- retries: stage.retries === undefined ? 1 : Number(stage.retries),
1493
- };
1494
- if (normalized.timeoutMinutes !== undefined && (!Number.isFinite(normalized.timeoutMinutes) || normalized.timeoutMinutes <= 0)) {
1495
- throw new Error(`${label}.timeout_minutes must be a positive number`);
1496
- }
1497
- if (!Number.isInteger(normalized.retries) || normalized.retries < 1) {
1498
- throw new Error(`${label}.retries must be a positive integer`);
1499
- }
1500
- if (hasCommand) {
1501
- normalized.commands = [assertString(stage.command, `${label}.command`)];
1502
- normalized.mode = "command";
1503
- } else if (hasCommands) {
1504
- if (!Array.isArray(stage.commands) || stage.commands.length === 0) {
1505
- throw new Error(`${label}.commands must be a non-empty array`);
1506
- }
1507
- normalized.commands = stage.commands.map((command, index) =>
1508
- assertString(command, `${label}.commands[${index}]`),
1509
- );
1510
- normalized.mode = "commands";
1511
- } else {
1512
- normalized.script = assertString(stage.script, `${label}.script`);
1513
- normalized.mode = "script";
1514
- }
1515
- return normalized;
1516
- }
1517
-
1518
- export function getLifecycleStage(loadedConfig, name) {
1519
- return loadedConfig?.config?.lifecycle?.[name];
1520
- }
1521
-
1522
- export function getPublishContract(loadedConfig) {
1523
- return loadedConfig?.config?.publish;
1524
- }
1525
-
1526
- export function runLifecycleStage({ cwd = process.cwd(), loadedConfig, name, stage, env: extraEnv, timeoutMinutes }) {
1527
- const lifecycle = loadedConfig?.config?.lifecycle || {};
1528
- const selected = stage || getLifecycleStage(loadedConfig, name);
1529
- if (!selected) {
1530
- return false;
1531
- }
1532
- const env = {
1533
- ...process.env,
1534
- ...(lifecycle.env || {}),
1535
- ...(selected.env || {}),
1536
- ...(extraEnv || {}),
1537
- };
1538
- const effectiveTimeoutMinutes = selected.timeoutMinutes ?? timeoutMinutes;
1539
- if (effectiveTimeoutMinutes !== undefined && (!Number.isFinite(effectiveTimeoutMinutes) || effectiveTimeoutMinutes <= 0)) {
1540
- throw new Error("lifecycle timeoutMinutes must be a positive number");
1541
- }
1542
- const timeout = effectiveTimeoutMinutes ? effectiveTimeoutMinutes * 60_000 : undefined;
1543
- const execOptions = {
1544
- cwd,
1545
- env,
1546
- stdio: "inherit",
1547
- shell: selected.shell || true,
1548
- timeout,
1549
- };
1550
- const runOnce = () => {
1551
- if (selected.mode === "script") {
1552
- runShellCommandSync(selected.script, execOptions);
1553
- return;
1554
- }
1555
- for (const command of selected.commands) {
1556
- runShellCommandSync(command, execOptions);
1557
- }
1558
- };
1559
- let lastError;
1560
- for (let attempt = 1; attempt <= selected.retries; attempt += 1) {
1561
- try {
1562
- runOnce();
1563
- return true;
1564
- } catch (error) {
1565
- lastError = error;
1566
- if (attempt < selected.retries) {
1567
- console.log(`> lifecycle ${name || "stage"} failed, retry ${attempt + 1}/${selected.retries}`);
1568
- }
1569
- }
1570
- }
1571
- throw lastError;
1572
- }
1573
-
1574
- export function discoverConfiguredVersionStateFiles(cwd = process.cwd(), loadedConfig = loadBuildchainConfig(cwd)) {
1575
- const configured = loadedConfig?.config?.version?.files || [];
1576
- const files = configured.map((entry) => {
1577
- const filePath = path.join(cwd, entry.path);
1578
- if (!fs.existsSync(filePath)) {
1579
- throw new Error(`Configured version file does not exist: ${entry.path}`);
1580
- }
1581
- const source = fs.readFileSync(filePath, "utf8");
1582
- const file = { ...entry, source };
1583
- if (entry.type === "json") {
1584
- const content = JSON.parse(source);
1585
- if (typeof getByDottedKey(content, entry.key) !== "string") {
1586
- throw new Error(`Configured JSON version key is missing or not a string: ${entry.path}:${entry.key}`);
1587
- }
1588
- return { ...file, content };
1589
- }
1590
- if (entry.type === "toml") {
1591
- const content = parse(source);
1592
- if (typeof getByDottedKey(content, entry.key) !== "string") {
1593
- throw new Error(`Configured TOML version key is missing or not a string: ${entry.path}:${entry.key}`);
1594
- }
1595
- return { ...file, content };
1596
- }
1597
- const pattern = new RegExp(entry.pattern, "m");
1598
- const match = source.match(pattern);
1599
- if (!match) {
1600
- throw new Error(`Configured regex version pattern did not match: ${entry.path}`);
1601
- }
1602
- if (typeof match.groups?.version !== "string") {
1603
- throw new Error(`Configured regex version pattern must define a named capture group called version: ${entry.path}`);
1604
- }
1605
- return { ...file, pattern };
1606
- });
1607
- if (loadedConfig?.config?.version?.required && files.length === 0) {
1608
- throw new Error("version.required is true but no version.files are configured");
1609
- }
1610
- return files;
1611
- }
1612
-
1613
- export function discoverConfiguredDerivedVersionMaterial(
1614
- cwd = process.cwd(),
1615
- loadedConfig = loadBuildchainConfig(cwd),
1616
- ) {
1617
- const configured = loadedConfig?.config?.version?.derivedFiles || [];
1618
- return configured.map((filePath) => {
1619
- const absolutePath = path.join(cwd, filePath);
1620
- if (!fs.existsSync(absolutePath)) {
1621
- throw new Error(`Configured derived version material does not exist: ${filePath}`);
1622
- }
1623
- if (!fs.statSync(absolutePath).isFile()) {
1624
- throw new Error(`Configured derived version material must be a file: ${filePath}`);
1625
- }
1626
- return {
1627
- path: filePath,
1628
- filePath: absolutePath,
1629
- content: fs.readFileSync(absolutePath),
1630
- };
1631
- });
1632
- }
1633
-
1634
- function summarizeManifestFields(content) {
1635
- assertPlainObject(content, "version.manifest content");
1636
- return Object.fromEntries(
1637
- Object.entries(content).map(([key, value]) => {
1638
- if (value === null || ["string", "number", "boolean"].includes(typeof value)) {
1639
- return [key, value];
1640
- }
1641
- return [key, JSON.stringify(value)];
1642
- }),
1643
- );
1644
- }
1645
-
1646
- export function getVersionStrategy(loadedConfig) {
1647
- const version = loadedConfig?.config?.version;
1648
- return {
1649
- strategy: version?.strategy || "semver",
1650
- next: version?.next || "auto",
1651
- manifest: version?.manifest,
1652
- };
1653
- }
1654
-
1655
- export function loadConfiguredAnchorManifest(cwd = process.cwd(), loadedConfig = loadBuildchainConfig(cwd)) {
1656
- const manifest = loadedConfig?.config?.version?.manifest;
1657
- if (!manifest) {
1658
- return undefined;
1659
- }
1660
- const filePath = path.join(cwd, manifest);
1661
- if (!fs.existsSync(filePath)) {
1662
- throw new Error(`Configured anchor manifest does not exist: ${manifest}`);
1663
- }
1664
- const source = fs.readFileSync(filePath, "utf8");
1665
- let content;
1666
- if (manifest.endsWith(".json")) {
1667
- content = JSON.parse(source);
1668
- } else if (manifest.endsWith(".toml")) {
1669
- content = parse(source);
1670
- } else {
1671
- throw new Error("version.manifest must point to a .json or .toml file");
1672
- }
1673
- return {
1674
- path: manifest,
1675
- filePath,
1676
- fields: summarizeManifestFields(content),
1677
- };
1678
- }
1679
-
1680
- function configuredLifecycleStages(loadedConfig) {
1681
- const lifecycle = loadedConfig?.config?.lifecycle || {};
1682
- return Object.entries(lifecycle)
1683
- .filter(([, stage]) => stage && typeof stage === "object" && typeof stage.mode === "string")
1684
- .map(([name, stage]) => ({
1685
- name,
1686
- mode: stage.mode,
1687
- timeoutMinutes: stage.timeoutMinutes,
1688
- retries: stage.retries,
1689
- commandCount: stage.mode === "script" ? 1 : stage.commands.length,
1690
- }));
1691
- }
1692
-
1693
- export function validateBuildchainConfig(
1694
- cwd = process.cwd(),
1695
- {
1696
- requireConfig = true,
1697
- requireVersionState = false,
1698
- requireLifecycleStages = [],
1699
- } = {},
1700
- ) {
1701
- const loadedConfig = loadBuildchainConfig(cwd);
1702
- if (!loadedConfig) {
1703
- if (requireConfig) {
1704
- throw new Error(`${CONFIG_FILE} is required`);
1705
- }
1706
- return {
1707
- config: undefined,
1708
- versionFiles: [],
1709
- lifecycleStages: [],
1710
- };
1711
- }
1712
-
1713
- const versionFiles = loadedConfig.config.version
1714
- ? discoverConfiguredVersionStateFiles(cwd, loadedConfig)
1715
- : [];
1716
- const anchorManifest = loadConfiguredAnchorManifest(cwd, loadedConfig);
1717
- if (requireVersionState && versionFiles.length === 0) {
1718
- throw new Error("version state is required but no version.files are configured");
1719
- }
1720
-
1721
- const lifecycleStages = configuredLifecycleStages(loadedConfig);
1722
- const stageNames = new Set(lifecycleStages.map((stage) => stage.name));
1723
- const missingStages = requireLifecycleStages.filter((stage) => !stageNames.has(stage));
1724
- if (missingStages.length > 0) {
1725
- throw new Error(`required lifecycle stage missing: ${missingStages.join(", ")}`);
1726
- }
1727
-
1728
- return {
1729
- config: {
1730
- path: loadedConfig.path,
1731
- filePath: loadedConfig.filePath,
1732
- schema: loadedConfig.config.schema,
1733
- },
1734
- project: loadedConfig.config.project,
1735
- channels: loadedConfig.config.channels
1736
- ? Object.fromEntries(
1737
- Object.entries(loadedConfig.config.channels).map(([name, channel]) => [
1738
- name,
1739
- {
1740
- visibility: channel.visibility,
1741
- requiresAuth: channel.requiresAuth,
1742
- requiresControlledAccess: channel.requiresControlledAccess,
1743
- accessControl: channel.accessControl,
1744
- edgeAuth: channel.edgeAuth,
1745
- noindex: channel.noindex,
1746
- promotable: channel.promotable,
1747
- canonical: channel.canonical,
1748
- url: channel.url,
1749
- urlPattern: channel.urlPattern,
1750
- },
1751
- ]),
1752
- )
1753
- : undefined,
1754
- deploy: loadedConfig.config.deploy
1755
- ? Object.fromEntries(
1756
- Object.entries(loadedConfig.config.deploy).map(([name, deploy]) => [
1757
- name,
1758
- {
1759
- adapter: deploy.adapter,
1760
- artifactPath: deploy.artifactPath,
1761
- directoryIndexRewrite: deploy.directoryIndexRewrite,
1762
- healthStrategy: deploy.healthStrategy,
1763
- secretRefs: deploy.secretRefs,
1764
- },
1765
- ]),
1766
- )
1767
- : undefined,
1768
- infra: loadedConfig.config.infra
1769
- ? {
1770
- adapter: loadedConfig.config.infra.adapter,
1771
- adoptionMode: loadedConfig.config.infra.adoptionMode,
1772
- applyMode: loadedConfig.config.infra.applyMode,
1773
- environment: loadedConfig.config.infra.environment,
1774
- identityRef: loadedConfig.config.infra.identityRef,
1775
- desired: loadedConfig.config.infra.desired,
1776
- contract: loadedConfig.config.infra.contract,
1777
- secretRefs: loadedConfig.config.infra.secretRefs,
1778
- commands: loadedConfig.config.infra.commands,
1779
- }
1780
- : undefined,
1781
- consumers: loadedConfig.config.consumers,
1782
- surfaces: loadedConfig.config.surfaces
1783
- ? Object.fromEntries(
1784
- Object.entries(loadedConfig.config.surfaces).map(([name, surface]) => [
1785
- name,
1786
- {
1787
- path: surface.path,
1788
- pathOnly: surface.pathOnly,
1789
- canonical: surface.canonical,
1790
- previewUrlPattern: surface.previewUrlPattern,
1791
- stagingUrl: surface.stagingUrl,
1792
- productionUrl: surface.productionUrl,
1793
- },
1794
- ]),
1795
- )
1796
- : undefined,
1797
- retention: loadedConfig.config.retention,
1798
- security: loadedConfig.config.security,
1799
- version: loadedConfig.config.version
1800
- ? getVersionStrategy(loadedConfig)
1801
- : undefined,
1802
- anchorManifest: anchorManifest
1803
- ? {
1804
- path: anchorManifest.path,
1805
- fields: anchorManifest.fields,
1806
- }
1807
- : undefined,
1808
- versionFiles: versionFiles.map((file) => ({
1809
- path: file.path,
1810
- type: file.type,
1811
- key: file.key,
1812
- pattern: file.pattern?.source,
1813
- })),
1814
- derivedVersionMaterial: discoverConfiguredDerivedVersionMaterial(cwd, loadedConfig)
1815
- .map((file) => ({ path: file.path })),
1816
- lifecycleStages,
1817
- publish: loadedConfig.config.publish,
1818
- release: loadedConfig.config.release,
1819
- governance: loadedConfig.config.governance,
1820
- facts: loadedConfig.config.facts,
1821
- signing: loadedConfig.config.signing,
1822
- publication: loadedConfig.config.publication,
1823
- };
1824
- }
1825
-
1826
- export function updateConfiguredVersionStateContents(files, version) {
1827
- return files
1828
- .map((file) => {
1829
- let content;
1830
- if (
1831
- (file.type === "json" || file.type === "toml") &&
1832
- getByDottedKey(file.content, file.key) === version
1833
- ) {
1834
- content = file.source;
1835
- } else if (file.type === "json") {
1836
- const next = structuredClone(file.content);
1837
- setByDottedKey(next, file.key, version);
1838
- content = `${JSON.stringify(next, null, 2)}\n`;
1839
- } else if (file.type === "toml") {
1840
- content = updateTomlStringValuePreservingSource({
1841
- source: file.source,
1842
- content: file.content,
1843
- key: file.key,
1844
- value: version,
1845
- filePath: file.path,
1846
- });
1847
- } else if (file.type === "regex") {
1848
- content = file.source.replace(file.pattern, (...args) => {
1849
- const groups = args.at(-1) || {};
1850
- const current = groups.version;
1851
- if (typeof current !== "string") {
1852
- throw new Error(`Configured regex version pattern must define a named capture group called version: ${file.path}`);
1853
- }
1854
- return args[0].replace(current, file.replacement.replaceAll("${version}", version));
1855
- });
1856
- } else {
1857
- throw new Error(`Unsupported configured version file type: ${file.type}`);
1858
- }
1859
- return {
1860
- path: file.path,
1861
- kind: file.type,
1862
- changed: content !== file.source,
1863
- content,
1864
- };
1865
- })
1866
- .filter((file) => file.changed);
1867
- }
1868
-
1869
- export function writeLifecycleScriptFixture(cwd, name, script) {
1870
- const filePath = path.join(cwd, `${name}-${Date.now()}.sh`);
1871
- fs.writeFileSync(filePath, script.replace(/\$\{TMPDIR\}/g, os.tmpdir()));
1872
- return filePath;
1873
- }
1874
-
1875
- export default {
1876
- discoverConfiguredVersionStateFiles,
1877
- getVersionStrategy,
1878
- getLifecycleStage,
1879
- loadConfiguredAnchorManifest,
1880
- loadBuildchainConfig,
1881
- normalizeBuildchainConfig,
1882
- normalizeLifecycleStage,
1883
- runLifecycleStage,
1884
- updateConfiguredVersionStateContents,
1885
- validateBuildchainConfig,
1886
- writeLifecycleScriptFixture,
1887
- };