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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1535) hide show
  1. package/AGENTS.md +35 -5
  2. package/CONTRIBUTING.md +18 -29
  3. package/README.md +55 -29
  4. package/actions/build/artifact/prepare-attestation/README.md +26 -0
  5. package/actions/build/artifact/seal-attestation/README.md +26 -0
  6. package/actions/build/lifecycle/run/README.md +71 -0
  7. package/actions/build/lifecycle/validate/README.md +52 -0
  8. package/actions/governance/incident/report/README.md +107 -0
  9. package/actions/release/promotion/ref/README.md +92 -0
  10. package/architecture/action-taxonomy.json +543 -0
  11. package/architecture/agent-change-map.md +2061 -432
  12. package/architecture/build-environments.json +1 -2
  13. package/architecture/build-orchestration.json +58 -9
  14. package/architecture/capability-state-machine-manifest.json +15 -16
  15. package/architecture/capability-state-machine-manifest.schema.json +2 -2
  16. package/architecture/ci-lane-change-budget.json +2105 -225
  17. package/architecture/code-layout.json +55 -0
  18. package/architecture/core-mechanisms.json +1160 -0
  19. package/architecture/cross-platform-adopter-qualification.json +4 -14
  20. package/architecture/delivery-authority-parity.json +46 -46
  21. package/architecture/delivery-warrant-shadow-bootstrap-plan.json +4 -4
  22. package/architecture/delivery-warrant-shadow-bootstrap-plan.md +3 -3
  23. package/architecture/dev-delivery-orchestration.json +175 -0
  24. package/architecture/floating-consumer-policy.json +15 -11
  25. package/architecture/history/warrant-shadow-observations.json +900 -0
  26. package/architecture/internal-capabilities.json +2332 -358
  27. package/architecture/layered-transition.json +32 -0
  28. package/architecture/maintainability-debt.json +883 -1841
  29. package/architecture/maintainability-policy.json +63 -1438
  30. package/architecture/partial-mutation-recovery-qualification.json +4 -4
  31. package/architecture/platform-stage-checkpoints.json +1 -1
  32. package/architecture/promotion-job-topology.json +85 -0
  33. package/architecture/provider-operation-journal-contract.json +5 -5
  34. package/architecture/publication-facade-patches.json +5 -5
  35. package/architecture/release-activation-shadow-domain.json +4 -4
  36. package/architecture/release-invocation-fixtures.json +31 -16
  37. package/architecture/release-tail-contract-inventory.json +1 -9
  38. package/architecture/release-tail-contract.json +273 -0
  39. package/architecture/release-topology.json +245 -215
  40. package/architecture/runtime-ref-resume-authority.json +1 -1
  41. package/architecture/runtime-semantic-closure.json +27 -17
  42. package/architecture/rust-libnode-bridge-evaluation.json +1 -1
  43. package/architecture/rust-wasm-production-authority.json +7 -7
  44. package/architecture/stable-publication-fence.json +4 -4
  45. package/architecture/stage-capsule-qualification.json +4 -4
  46. package/architecture/stage-capsule-resume-planner.json +1 -1
  47. package/architecture/stage-capsule-store-contract.json +2 -2
  48. package/architecture/tail-reseal-parity.json +22 -17
  49. package/architecture/universal-workflow-bootstrap.json +121 -102
  50. package/architecture/universal-workflow-fault-campaign.json +11 -11
  51. package/architecture/universal-workflow-train-admission.json +44 -8
  52. package/architecture/workflow-taxonomy.json +81 -798
  53. package/bin/buildchain.mjs +2 -1820
  54. package/contracts/buildchain-v2-residuals-v1.json +2 -138
  55. package/contracts/dev-delivery-authority-v2.schema.json +509 -231
  56. package/contracts/fixtures/v4-tail-reseal-v1/valid.json +1 -1
  57. package/contracts/promotion-invocation-v1.schema.json +547 -0
  58. package/contracts/promotion-request-v1.schema.json +472 -0
  59. package/contracts/v4-adopter-delivery-v1.schema.json +1 -1
  60. package/contracts/v4-compatibility-facts-v1.schema.json +4 -4
  61. package/contracts/v4-floating-consumer-policy-receipt-v1.schema.json +124 -21
  62. package/contracts/v4-release-invocation-v1.schema.json +1 -1
  63. package/crates/buildchain-host-bridge/src/main.rs +1 -1
  64. package/dist/site/buildchain-contract.json +145 -2206
  65. package/dist/site/buildchain-site.json +348 -324
  66. package/dist/site/capability-registry.json +17 -17
  67. package/dist/site/cli-registry.json +354 -365
  68. package/dist/site/controller-registry.json +142 -715
  69. package/dist/site/kfd-claims.json +5871 -3138
  70. package/dist/site/kfd-upstream-aggregate.json +1 -1
  71. package/dist/site/manual-registry.json +26 -26
  72. package/dist/site/node-api-registry.json +12561 -16063
  73. package/dist/site/page-registry.json +310 -290
  74. package/dist/site/public-surface-audit.json +3844 -3601
  75. package/dist/site/publication-authority-registry.json +295 -1117
  76. package/dist/site/publication-registry.json +5 -5
  77. package/dist/site/release-provenance.json +80 -90
  78. package/dist/site/schemas/dev-delivery-authority-v2.schema.json +509 -231
  79. package/dist/site/schemas/v4-adopter-delivery-v1.schema.json +1 -1
  80. package/dist/site/schemas/v4-compatibility-facts-v1.schema.json +4 -4
  81. package/dist/site/site-manifest.json +31 -31
  82. package/dist/site/workflow-registry.json +7274 -5321
  83. package/docs/MAP.md +8 -6
  84. package/docs/auditable-demo.md +4 -4
  85. package/docs/aws-us-elastic-runner-burst-plane.md +5 -5
  86. package/docs/binary-distribution.md +2 -2
  87. package/docs/bootstrap-recovery.md +50 -0
  88. package/docs/cli-reference.md +2 -35
  89. package/docs/cli.md +6 -6
  90. package/docs/code-organization.md +131 -0
  91. package/docs/consumer-issue-reporting.md +1 -1
  92. package/docs/dev-alpha-candidate-patrol.md +1 -1
  93. package/docs/dev-delivery-orchestration.md +116 -0
  94. package/docs/dev-delivery-qualification-landing-adr.md +1 -1
  95. package/docs/dev-delivery-warrant.md +5 -2
  96. package/docs/dev-qualification-patrol.md +1 -1
  97. package/docs/engineering-housekeeper.md +3 -3
  98. package/docs/github-artifact-attestation.md +3 -3
  99. package/docs/kfd-support.md +1 -1
  100. package/docs/lifecycle-protocol.md +8 -8
  101. package/docs/migration-inventory.md +6 -6
  102. package/docs/next-development-transition.md +4 -4
  103. package/docs/node-api-reference.md +2273 -2644
  104. package/docs/ownership.md +3 -3
  105. package/docs/publication-artifacts.md +5 -5
  106. package/docs/publication-authority.md +4 -4
  107. package/docs/publish-transaction.md +10 -10
  108. package/docs/release-activation-transaction.md +1 -1
  109. package/docs/release-candidate.md +4 -4
  110. package/docs/release-governance.md +25 -25
  111. package/docs/release-passport.md +2 -2
  112. package/docs/release-promotion-request.md +64 -0
  113. package/docs/release-propagation.md +19 -18
  114. package/docs/release-tail-contract.md +40 -76
  115. package/docs/release-tail-provider-plane.md +17 -26
  116. package/docs/reusable-build-surface.md +22 -16
  117. package/docs/shifu-gate-profiles.md +4 -4
  118. package/docs/site-bundle-contract.md +1 -1
  119. package/docs/stable-candidate-patrol.md +1 -1
  120. package/docs/v4-adopter-delivery.md +50 -121
  121. package/docs/v4-canonical-contracts.md +3 -3
  122. package/docs/v4-compatibility-facts.md +1 -1
  123. package/docs/v4-declarative-release-tail-migration.md +24 -29
  124. package/docs/v4-publication-rehearsal.md +1 -1
  125. package/docs/v4-runtime-ref-resume-authority.md +2 -2
  126. package/docs/v4-rust-wasm-production-authority.md +2 -2
  127. package/docs/v4-stage-capsule.md +1 -1
  128. package/docs/web-surface-deployments.md +22 -28
  129. package/docs/workflow-catalog.md +82 -127
  130. package/docs/workflow-path-migration.md +1 -5
  131. package/package.json +99 -102
  132. package/packages/core/README.md +41 -164
  133. package/packages/core/adoption/adopter-delivery-parity.js +219 -0
  134. package/packages/core/adoption/adopter-delivery.js +210 -0
  135. package/packages/core/adoption/buildchain-kfd-claims.js +733 -0
  136. package/packages/core/adoption/cli/delivery.mjs +39 -0
  137. package/packages/core/adoption/cli/dispatch.mjs +5 -0
  138. package/packages/core/adoption/cli/kfd-aggregate.mjs +20 -0
  139. package/packages/core/adoption/cli/kfd-hub.mjs +53 -0
  140. package/packages/core/adoption/cli/kfd-migrate-layout.mjs +27 -0
  141. package/packages/core/adoption/cli/kfd-schema.mjs +55 -0
  142. package/packages/core/adoption/cli/kfd-status.mjs +21 -0
  143. package/packages/core/adoption/cli/kfd-upstream.mjs +69 -0
  144. package/packages/core/adoption/cli/kfd.mjs +63 -0
  145. package/packages/core/adoption/cli/output.mjs +18 -0
  146. package/packages/core/adoption/cli/product-gate.mjs +110 -0
  147. package/packages/core/adoption/cli/project.mjs +38 -0
  148. package/packages/core/adoption/cli/standards.mjs +282 -0
  149. package/packages/core/adoption/cli/support.mjs +101 -0
  150. package/packages/core/adoption/cli/surface-register.mjs +172 -0
  151. package/packages/core/adoption/commands/cross-platform-adopter-qualification.mjs +28 -0
  152. package/packages/core/adoption/commands/init-repo.mjs +518 -0
  153. package/packages/core/adoption/cross-platform-adopter-qualification.js +217 -0
  154. package/packages/core/adoption/kfd-agent-hub.js +496 -0
  155. package/packages/core/adoption/kfd.js +966 -0
  156. package/packages/core/adoption/kfd2-product-claims.js +454 -0
  157. package/packages/core/adoption/kfd3-surface-register.js +924 -0
  158. package/packages/core/adoption/qualification/actions.js +106 -0
  159. package/packages/core/adoption/qualification/admission.js +96 -0
  160. package/packages/core/adoption/qualification/aggregate.js +10 -0
  161. package/packages/core/adoption/qualification/io.js +51 -0
  162. package/packages/core/adoption/qualification/platform.js +120 -0
  163. package/packages/core/build/anchored-version-material.js +281 -0
  164. package/packages/core/build/artifact/actions.js +47 -0
  165. package/packages/core/build/artifact/attestation.js +166 -0
  166. package/packages/core/build/artifact/contracts.js +168 -0
  167. package/packages/core/build/artifact/coordinates.js +113 -0
  168. package/packages/core/build/artifact/credential-transport.js +68 -0
  169. package/packages/core/build/artifact/expectations.js +94 -0
  170. package/packages/core/build/artifact/files.js +14 -0
  171. package/packages/core/build/artifact/naming.js +65 -0
  172. package/packages/core/build/artifact/services.js +17 -0
  173. package/packages/core/build/artifact/store.js +119 -0
  174. package/packages/core/build/artifact/summary.js +20 -0
  175. package/packages/core/build/artifact/transfer-policy.js +34 -0
  176. package/packages/core/build/artifact/transport.js +112 -0
  177. package/packages/core/build/artifact/upload.js +178 -0
  178. package/packages/core/build/artifact-coordinate-action.js +46 -0
  179. package/packages/core/build/artifact-coordinate.js +58 -0
  180. package/packages/core/build/artifact-integrity.js +10 -0
  181. package/packages/core/build/artifact-passport.js +842 -0
  182. package/packages/core/build/artifact-verification-envelope.js +500 -0
  183. package/packages/core/build/binary/actions.js +77 -0
  184. package/packages/core/build/binary/checksums.js +33 -0
  185. package/packages/core/build/binary/distribution.js +271 -0
  186. package/packages/core/build/binary-publication-dispatch.js +49 -0
  187. package/packages/core/build/build-facts.js +518 -0
  188. package/packages/core/build/cache/compiler-evidence.js +287 -0
  189. package/packages/core/build/cli/cache.mjs +77 -0
  190. package/packages/core/build/cli/facts.mjs +120 -0
  191. package/packages/core/build/cli/homebrew.mjs +101 -0
  192. package/packages/core/build/cli/lifecycle.mjs +66 -0
  193. package/packages/core/build/commands/aggregate-build-summary.mjs +75 -0
  194. package/packages/core/build/commands/anchored-version-material.mjs +42 -0
  195. package/packages/core/build/commands/artifact-signing-controller.mjs +112 -0
  196. package/packages/core/build/commands/artifact-signing-delegation.mjs +34 -0
  197. package/packages/core/build/commands/auditable-demo-platform.mjs +77 -0
  198. package/packages/core/build/commands/auditable-demo-transport-smoke.mjs +24 -0
  199. package/packages/core/build/commands/auditable-demo.mjs +63 -0
  200. package/packages/core/build/commands/compiler-cache-evidence.mjs +39 -0
  201. package/packages/core/build/commands/dispatch-artifact-signing-authority.mjs +19 -0
  202. package/packages/core/build/commands/import-artifact-signing-results.mjs +10 -0
  203. package/packages/core/build/commands/lifecycle-substage-evidence.mjs +42 -0
  204. package/packages/core/build/commands/resolve-artifact-coordinates.mjs +58 -0
  205. package/packages/core/build/commands/resolve-artifact-transfer-mode.mjs +54 -0
  206. package/packages/core/build/commands/resolve-build-configuration.mjs +23 -0
  207. package/packages/core/build/commands/resolve-build-contract.mjs +94 -0
  208. package/packages/core/build/commands/run-candidate-body-prefix-renderer.mjs +24 -0
  209. package/packages/core/build/commands/run-lifecycle.mjs +56 -0
  210. package/packages/core/build/commands/seal-artifact-signing-requests.mjs +10 -0
  211. package/packages/core/build/commands/seal-macos-credential-input.mjs +4 -0
  212. package/packages/core/build/commands/shifu-gate-profile.mjs +43 -0
  213. package/packages/core/build/commands/source-verification-evidence.mjs +14 -0
  214. package/packages/core/build/commands/stage-capsule-qualification.mjs +79 -0
  215. package/packages/core/build/commands/validate-package-manager-contract.mjs +24 -0
  216. package/packages/core/build/credential/seal-input.js +109 -0
  217. package/packages/core/build/demo/action-context.js +25 -0
  218. package/packages/core/build/demo/adapter-actions.js +35 -0
  219. package/packages/core/build/demo/adapter-transactions.js +66 -0
  220. package/packages/core/build/demo/adapter.js +272 -0
  221. package/packages/core/build/demo/binary-action.js +29 -0
  222. package/packages/core/build/demo/bundle-verification.js +211 -0
  223. package/packages/core/build/demo/capture-adaptation.js +37 -0
  224. package/packages/core/build/demo/capture.js +377 -0
  225. package/packages/core/build/demo/collection-actions.js +62 -0
  226. package/packages/core/build/demo/collection-containers.js +136 -0
  227. package/packages/core/build/demo/collection-context.js +40 -0
  228. package/packages/core/build/demo/collection.js +129 -0
  229. package/packages/core/build/demo/composition.js +319 -0
  230. package/packages/core/build/demo/container.js +113 -0
  231. package/packages/core/build/demo/gate.js +297 -0
  232. package/packages/core/build/demo/inspection-worker.js +4 -0
  233. package/packages/core/build/demo/io.js +220 -0
  234. package/packages/core/build/demo/materialization.js +350 -0
  235. package/packages/core/build/demo/media-bundle.js +112 -0
  236. package/packages/core/build/demo/media-inspection.js +332 -0
  237. package/packages/core/build/demo/media-profile.js +399 -0
  238. package/packages/core/build/demo/media-qualification-action.js +37 -0
  239. package/packages/core/build/demo/media-qualification.js +117 -0
  240. package/packages/core/build/demo/presentation.js +222 -0
  241. package/packages/core/build/demo/publication.js +118 -0
  242. package/packages/core/build/demo/renderer-evidence.js +193 -0
  243. package/packages/core/build/demo/renditions.js +398 -0
  244. package/packages/core/build/demo/scenario.js +493 -0
  245. package/packages/core/build/demo/schema.js +278 -0
  246. package/packages/core/build/demo/transport-smoke.js +149 -0
  247. package/packages/core/build/demo/values.js +137 -0
  248. package/packages/core/build/environment/action.js +17 -0
  249. package/packages/core/build/environment/provision.js +121 -0
  250. package/packages/core/build/gate/actions.js +99 -0
  251. package/packages/core/build/gate/aggregate.js +21 -0
  252. package/packages/core/build/gate/commands.js +66 -0
  253. package/packages/core/build/gate/controller.js +43 -0
  254. package/packages/core/build/gate/environment.js +18 -0
  255. package/packages/core/build/gate/execution.js +88 -0
  256. package/packages/core/build/gate/files.js +46 -0
  257. package/packages/core/build/gate/outputs.js +31 -0
  258. package/packages/core/build/gate/plan.js +61 -0
  259. package/packages/core/build/github-artifact-attestation.js +642 -0
  260. package/packages/core/build/github-attestation/action.js +26 -0
  261. package/packages/core/build/github-attestation/admission.js +34 -0
  262. package/packages/core/build/github-attestation/transaction.js +83 -0
  263. package/packages/core/build/homebrew.js +416 -0
  264. package/packages/core/build/lifecycle/action.js +65 -0
  265. package/packages/core/build/lifecycle/artifacts.js +123 -0
  266. package/packages/core/build/lifecycle/context.js +202 -0
  267. package/packages/core/build/lifecycle/diagnostics.js +254 -0
  268. package/packages/core/build/lifecycle/errors.js +44 -0
  269. package/packages/core/build/lifecycle/execution.js +221 -0
  270. package/packages/core/build/lifecycle/files.js +61 -0
  271. package/packages/core/build/lifecycle/manifest.js +107 -0
  272. package/packages/core/build/lifecycle/sampling.js +209 -0
  273. package/packages/core/build/lifecycle/stage-action.js +18 -0
  274. package/packages/core/build/lifecycle/stage.js +143 -0
  275. package/packages/core/build/lifecycle/substage-evidence.js +232 -0
  276. package/packages/core/build/lifecycle/transaction.js +13 -0
  277. package/packages/core/build/macos-credential-island/action.js +704 -0
  278. package/packages/core/build/macos-credential-island/cleanup.js +48 -0
  279. package/packages/core/build/macos-credential-island/dmg-assembly.js +443 -0
  280. package/packages/core/build/macos-credential-island/lib.js +816 -0
  281. package/packages/core/build/package-manager.js +315 -0
  282. package/packages/core/build/plan/action-context.js +30 -0
  283. package/packages/core/build/plan/action.js +79 -0
  284. package/packages/core/build/plan/admission.js +93 -0
  285. package/packages/core/build/plan/configuration.js +196 -0
  286. package/packages/core/build/plan/environment.js +18 -0
  287. package/packages/core/build/plan/identity.js +49 -0
  288. package/packages/core/build/plan/lifecycle.js +38 -0
  289. package/packages/core/build/plan/matrices.js +58 -0
  290. package/packages/core/build/plan/resolve.js +76 -0
  291. package/packages/core/build/plan/runners.js +48 -0
  292. package/packages/core/build/plan/source.js +58 -0
  293. package/packages/core/build/plan/stage-order.js +10 -0
  294. package/packages/core/build/plan/values.js +10 -0
  295. package/packages/core/build/platform-stage-checkpoints.js +471 -0
  296. package/packages/core/build/release-evidence-bundle.js +156 -0
  297. package/packages/core/build/runner/matrix.js +266 -0
  298. package/packages/core/build/runner/presets.js +115 -0
  299. package/packages/core/build/signing/actions.js +54 -0
  300. package/packages/core/build/signing/authority-actions.js +147 -0
  301. package/packages/core/build/signing/authority-transaction.js +82 -0
  302. package/packages/core/build/signing/control.js +223 -0
  303. package/packages/core/build/signing/controller-transaction.js +110 -0
  304. package/packages/core/build/signing/credential-transaction.js +66 -0
  305. package/packages/core/build/signing/delegation.js +281 -0
  306. package/packages/core/build/signing/detached.js +170 -0
  307. package/packages/core/build/signing/dispatch.js +307 -0
  308. package/packages/core/build/signing/environment.js +13 -0
  309. package/packages/core/build/signing/files.js +53 -0
  310. package/packages/core/build/signing/import-results.js +151 -0
  311. package/packages/core/build/signing/intake.js +113 -0
  312. package/packages/core/build/signing/materialize.js +54 -0
  313. package/packages/core/build/signing/merge-results.js +82 -0
  314. package/packages/core/build/signing/native-result.js +244 -0
  315. package/packages/core/build/signing/prepare.js +44 -0
  316. package/packages/core/build/signing/request.js +519 -0
  317. package/packages/core/build/signing/seal-requests.js +402 -0
  318. package/packages/core/build/signing/transaction.js +158 -0
  319. package/packages/core/build/signing/verify-results.js +118 -0
  320. package/packages/core/build/source/checkout-action.js +16 -0
  321. package/packages/core/build/source/controller-actions.js +52 -0
  322. package/packages/core/build/source/controller.js +182 -0
  323. package/packages/core/build/source/lifecycle-action.js +32 -0
  324. package/packages/core/build/source/lifecycle.js +134 -0
  325. package/packages/core/build/source/proof-actions.js +57 -0
  326. package/packages/core/build/source/proof-lookup.js +82 -0
  327. package/packages/core/build/source/proof.js +134 -0
  328. package/packages/core/build/source-admission.js +35 -0
  329. package/packages/core/build/stage-capsule/actions.js +53 -0
  330. package/packages/core/build/stage-capsule/campaign/aggregate.js +51 -0
  331. package/packages/core/build/stage-capsule/campaign/context.js +51 -0
  332. package/packages/core/build/stage-capsule/campaign/resume.js +240 -0
  333. package/packages/core/build/stage-capsule/campaign/run.js +47 -0
  334. package/packages/core/build/stage-capsule/campaign/seed.js +124 -0
  335. package/packages/core/build/stage-capsule/campaign/worker.js +17 -0
  336. package/packages/core/build/stage-capsule/canary.js +62 -0
  337. package/packages/core/build/stage-capsule/rehearsal/checkpoint.js +110 -0
  338. package/packages/core/build/stage-capsule/rehearsal/files.js +36 -0
  339. package/packages/core/build/stage-capsule/rehearsal/macos-tail.js +104 -0
  340. package/packages/core/build/stage-capsule/rehearsal/resume.js +38 -0
  341. package/packages/core/build/stage-capsule/rehearsal/run.js +46 -0
  342. package/packages/core/build/stage-capsule/rehearsal/verify.js +56 -0
  343. package/packages/core/build/stage-capsule/rehearsal/worker.js +11 -0
  344. package/packages/core/build/stage-capsule-local-store.js +428 -0
  345. package/packages/core/build/stage-capsule-qualification-campaign.js +511 -0
  346. package/packages/core/build/stage-capsule-qualification.js +455 -0
  347. package/packages/core/build/stage-capsule-resume-planner.js +397 -0
  348. package/packages/core/build/stage-capsule-store.js +404 -0
  349. package/packages/core/build/stage-capsule.js +319 -0
  350. package/packages/core/build/standalone/build.js +266 -0
  351. package/packages/core/build/standalone/bundle.js +69 -0
  352. package/packages/core/build/standalone/identity.js +47 -0
  353. package/packages/core/build/standalone/logging.js +72 -0
  354. package/packages/core/build/standalone/process.js +50 -0
  355. package/packages/core/build/summary/action.js +33 -0
  356. package/packages/core/build/summary/aggregation.js +120 -0
  357. package/packages/core/build/summary/artifacts.js +165 -0
  358. package/packages/core/build/summary/controller-receipt.js +50 -0
  359. package/packages/core/build/summary/execution.js +39 -0
  360. package/packages/core/build/summary/finalization.js +133 -0
  361. package/packages/core/build/summary/payloads.js +80 -0
  362. package/packages/core/build/validate-config/action.js +58 -0
  363. package/packages/core/build/validate-config/lib.js +42 -0
  364. package/packages/core/build/verification/actions.js +54 -0
  365. package/packages/core/build/verification/discovery.js +115 -0
  366. package/packages/core/build/verification/identity.js +123 -0
  367. package/packages/core/build/verification/proof.js +8 -0
  368. package/packages/core/build/verification/repository.js +4 -0
  369. package/packages/core/build/verification/runner.js +69 -0
  370. package/packages/core/build/verification/source.js +169 -0
  371. package/packages/core/consumer/buildchain-config.js +1825 -0
  372. package/packages/core/consumer/channel-selection.js +211 -0
  373. package/packages/core/consumer/cli/infrastructure.mjs +6 -0
  374. package/packages/core/consumer/commands/buildchain-channel-router.mjs +81 -0
  375. package/packages/core/consumer/commands/consumer-policy.mjs +229 -0
  376. package/packages/core/consumer/floating-consumer-evidence.js +341 -0
  377. package/packages/core/consumer/floating-consumer-policy.js +596 -0
  378. package/packages/core/consumer/invocation-selector.js +4 -0
  379. package/packages/core/consumer/policy-admission.js +103 -0
  380. package/packages/core/consumer/policy-scan.js +33 -0
  381. package/packages/core/consumer/runtime-selector-persistence.js +291 -0
  382. package/packages/core/consumer/workflow-definition-authority.js +64 -0
  383. package/packages/core/contracts/action-inventory.js +78 -0
  384. package/packages/core/contracts/action-taxonomy.js +46 -0
  385. package/packages/core/contracts/buildchain-contract.js +1038 -0
  386. package/packages/core/contracts/canonical-contracts.js +239 -0
  387. package/packages/core/contracts/cli/context.mjs +28 -0
  388. package/packages/core/contracts/cli/introspection.mjs +47 -0
  389. package/packages/core/contracts/cli/options.mjs +85 -0
  390. package/packages/core/contracts/cli-reference.js +192 -0
  391. package/packages/core/contracts/commands/buildchain-contract-lock.mjs +120 -0
  392. package/packages/core/contracts/commands/workflow-call-contract.mjs +133 -0
  393. package/packages/core/contracts/public-surface-audit.js +274 -0
  394. package/packages/core/contracts/public-surface-cli.js +134 -0
  395. package/packages/core/contracts/runtime-contract-action.js +48 -0
  396. package/packages/core/contracts/runtime-contract-inspection.js +115 -0
  397. package/packages/core/contracts/structured-values.js +29 -0
  398. package/packages/core/contracts/workflow-yaml-contract.js +373 -0
  399. package/packages/core/dev-delivery/admission/gh-cli-client.js +110 -0
  400. package/packages/core/dev-delivery/admission/github-client.js +274 -0
  401. package/packages/core/dev-delivery/admission/policy.js +177 -0
  402. package/packages/core/dev-delivery/admission/queue.js +554 -0
  403. package/packages/core/dev-delivery/admission/readiness.js +222 -0
  404. package/packages/core/dev-delivery/admission/report.js +27 -0
  405. package/packages/core/dev-delivery/admission/request.js +34 -0
  406. package/packages/core/dev-delivery/admission/targeted.js +375 -0
  407. package/packages/core/dev-delivery/admission/transaction.js +47 -0
  408. package/packages/core/dev-delivery/buildchain-delivery-bootstrap.js +240 -0
  409. package/packages/core/dev-delivery/buildchain-delivery-infrastructure.js +164 -0
  410. package/packages/core/dev-delivery/buildchain-delivery-self-dogfood.js +395 -0
  411. package/packages/core/dev-delivery/candidate/admission-actions.js +34 -0
  412. package/packages/core/dev-delivery/candidate/admission.js +172 -0
  413. package/packages/core/dev-delivery/candidate/coordinates.js +46 -0
  414. package/packages/core/dev-delivery/candidate/evidence.js +20 -0
  415. package/packages/core/dev-delivery/candidate/request.js +39 -0
  416. package/packages/core/dev-delivery/candidate/reservation-action.js +21 -0
  417. package/packages/core/dev-delivery/candidate/reservation.js +98 -0
  418. package/packages/core/dev-delivery/candidate/source-paths.js +102 -0
  419. package/packages/core/dev-delivery/candidate/submission.js +41 -0
  420. package/packages/core/dev-delivery/cli/dispatch.mjs +54 -0
  421. package/packages/core/dev-delivery/commands/dev-delivery-authority-command-adapters.mjs +193 -0
  422. package/packages/core/dev-delivery/commands/dev-delivery-authority-provider.mjs +28 -0
  423. package/packages/core/dev-delivery/commands/dev-delivery-authority.mjs +454 -0
  424. package/packages/core/dev-delivery/commands/dev-delivery-process-boundary.mjs +93 -0
  425. package/packages/core/dev-delivery/commands/dev-delivery-proof.mjs +258 -0
  426. package/packages/core/dev-delivery/commands/dev-delivery-provider-heartbeat.mjs +76 -0
  427. package/packages/core/dev-delivery/commands/dev-delivery-request.sh +160 -0
  428. package/packages/core/dev-delivery/commands/dev-delivery-source-proof-reuse.mjs +128 -0
  429. package/packages/core/dev-delivery/commands/dev-delivery-two-phase.mjs +180 -0
  430. package/packages/core/dev-delivery/commands/dev-delivery-warrant-options.mjs +283 -0
  431. package/packages/core/dev-delivery/commands/dev-delivery-warrant.mjs +65 -0
  432. package/packages/core/dev-delivery/commands/dev-merge-queue.mjs +98 -0
  433. package/packages/core/dev-delivery/commands/dev-pr-auto-merge.mjs +111 -0
  434. package/packages/core/dev-delivery/commands/dev-pr-delivery-warrant.mjs +467 -0
  435. package/packages/core/dev-delivery/commands/dev-pr-prequeue-guard.mjs +381 -0
  436. package/packages/core/dev-delivery/commands/dev-qualification-patrol.mjs +21 -0
  437. package/packages/core/dev-delivery/delivery-warrant-fixture-runner.js +375 -0
  438. package/packages/core/dev-delivery/delivery-warrant-read-candidate.js +281 -0
  439. package/packages/core/dev-delivery/delivery-warrant-semantic-diff-gate.js +351 -0
  440. package/packages/core/dev-delivery/delivery-warrant-shadow-adapter.js +444 -0
  441. package/packages/core/dev-delivery/dev-delivery-authority-candidate.js +197 -0
  442. package/packages/core/dev-delivery/dev-delivery-authority-landing.js +459 -0
  443. package/packages/core/dev-delivery/dev-delivery-authority-state.js +424 -0
  444. package/packages/core/dev-delivery/dev-delivery-candidate-identity.js +152 -0
  445. package/packages/core/dev-delivery/dev-delivery-contract-surface.js +74 -0
  446. package/packages/core/dev-delivery/dev-delivery-native-proof.js +509 -0
  447. package/packages/core/dev-delivery/dev-delivery-proof.js +282 -0
  448. package/packages/core/dev-delivery/dev-delivery-warrant-native-requirements.js +7 -0
  449. package/packages/core/dev-delivery/dev-delivery-warrant-state.js +580 -0
  450. package/packages/core/dev-delivery/dev-delivery-warrant.js +588 -0
  451. package/packages/core/dev-delivery/merge-queue-policy.js +543 -0
  452. package/packages/core/dev-delivery/native/action-context.js +59 -0
  453. package/packages/core/dev-delivery/native/actions.js +74 -0
  454. package/packages/core/dev-delivery/native/attempt.js +93 -0
  455. package/packages/core/dev-delivery/native/candidate.js +101 -0
  456. package/packages/core/dev-delivery/native/context-record.js +26 -0
  457. package/packages/core/dev-delivery/native/execution.js +176 -0
  458. package/packages/core/dev-delivery/native/failure.js +105 -0
  459. package/packages/core/dev-delivery/native/files.js +11 -0
  460. package/packages/core/dev-delivery/native/finalizer-admission.js +93 -0
  461. package/packages/core/dev-delivery/native/heartbeat-action.js +29 -0
  462. package/packages/core/dev-delivery/native/heartbeat.js +137 -0
  463. package/packages/core/dev-delivery/native/provider-boundary.js +71 -0
  464. package/packages/core/dev-delivery/native/qualification.js +228 -0
  465. package/packages/core/dev-delivery/native/readback.js +32 -0
  466. package/packages/core/dev-delivery/native/reuse.js +60 -0
  467. package/packages/core/dev-delivery/native/seal-action.js +19 -0
  468. package/packages/core/dev-delivery/native/transactions.js +156 -0
  469. package/packages/core/dev-delivery/native/transfer.js +122 -0
  470. package/packages/core/dev-delivery/published-delivery-authority.js +266 -0
  471. package/packages/core/dev-delivery/qualification/action.js +60 -0
  472. package/packages/core/dev-delivery/qualification/controller.js +218 -0
  473. package/packages/core/dev-delivery/qualification/github-client.js +108 -0
  474. package/packages/core/dev-delivery/qualification/model.js +186 -0
  475. package/packages/core/dev-delivery/qualification/report.js +25 -0
  476. package/packages/core/dev-delivery/queue/completion.js +52 -0
  477. package/packages/core/dev-delivery/queue/landing-action.js +60 -0
  478. package/packages/core/dev-delivery/queue/reconciliation-action.js +45 -0
  479. package/packages/core/dev-delivery/source-proof/evidence.js +92 -0
  480. package/packages/core/dev-delivery/source-proof/io.js +97 -0
  481. package/packages/core/dev-delivery/source-proof/predicates.js +88 -0
  482. package/packages/core/dev-delivery/source-proof/replay.js +143 -0
  483. package/packages/core/dev-delivery/source-proof/reuse.js +116 -0
  484. package/packages/core/dev-delivery/source-proof/seal.js +32 -0
  485. package/packages/core/dev-delivery/warrant/actions.js +78 -0
  486. package/packages/core/dev-delivery/warrant/cancellation.js +49 -0
  487. package/packages/core/dev-delivery/warrant/failure-settlement.js +93 -0
  488. package/packages/core/dev-delivery/warrant/handoff.js +107 -0
  489. package/packages/core/dev-delivery/warrant/observation.js +59 -0
  490. package/packages/core/dev-delivery/warrant/persistence.js +109 -0
  491. package/packages/core/dev-delivery/warrant/reservation-readback.js +72 -0
  492. package/packages/core/dev-delivery/warrant/service.js +134 -0
  493. package/packages/core/dev-delivery/warrant/terminal-policy.js +53 -0
  494. package/packages/core/dev-delivery/warrant/terminal.js +89 -0
  495. package/packages/core/dev-delivery/warrant/transitions.js +222 -0
  496. package/packages/core/dev-delivery/warrant/values.js +102 -0
  497. package/packages/core/governance/alpha-candidate/action.js +96 -0
  498. package/packages/core/governance/alpha-candidate/controller.js +490 -0
  499. package/packages/core/governance/alpha-candidate/lifecycle.js +121 -0
  500. package/packages/core/governance/alpha-candidate/options.js +60 -0
  501. package/packages/core/governance/alpha-candidate/outputs.js +23 -0
  502. package/packages/core/governance/alpha-candidate/provider.js +192 -0
  503. package/packages/core/governance/alpha-candidate/report.js +56 -0
  504. package/packages/core/governance/alpha-candidate/state.js +184 -0
  505. package/packages/core/governance/alpha-candidate/values.js +90 -0
  506. package/packages/core/governance/architecture-graph.js +24 -0
  507. package/packages/core/governance/audit/actions.js +57 -0
  508. package/packages/core/governance/audit/collection.js +259 -0
  509. package/packages/core/governance/audit/github-reader.js +204 -0
  510. package/packages/core/governance/audit/identity.js +86 -0
  511. package/packages/core/governance/audit/incident.mjs +39 -0
  512. package/packages/core/governance/audit/transactions.js +75 -0
  513. package/packages/core/governance/buildchain-compatibility-authority.js +335 -0
  514. package/packages/core/governance/buildchain-compatibility-fact.js +386 -0
  515. package/packages/core/governance/buildchain-compatibility-facts.json +18 -0
  516. package/packages/core/governance/buildchain-compatibility-proof.js +523 -0
  517. package/packages/core/governance/buildchain-publication-authority.js +117 -0
  518. package/packages/core/governance/candidate/body-action.js +18 -0
  519. package/packages/core/governance/candidate/body-renderer.js +160 -0
  520. package/packages/core/governance/ci-lane-change-budget.js +260 -0
  521. package/packages/core/governance/cli/compatibility-facts.mjs +101 -0
  522. package/packages/core/governance/cli/dispatch.mjs +19 -0
  523. package/packages/core/governance/cli/doctor.mjs +144 -0
  524. package/packages/core/governance/commands/architecture.mjs +594 -0
  525. package/packages/core/governance/commands/audit-github-governance.mjs +43 -0
  526. package/packages/core/governance/commands/audit-publication-control-plane.mjs +26 -0
  527. package/packages/core/governance/commands/buildchain-patrol.mjs +32 -0
  528. package/packages/core/governance/commands/create-github-artifact-attestation-policy.mjs +62 -0
  529. package/packages/core/governance/commands/engineering-housekeeper-workflow.mjs +23 -0
  530. package/packages/core/governance/commands/reconcile-github-governance.mjs +689 -0
  531. package/packages/core/governance/commands/reconcile-release-governance.mjs +77 -0
  532. package/packages/core/governance/commands/workflow-friction-report.mjs +375 -0
  533. package/packages/core/governance/github-governance-authority.js +1367 -0
  534. package/packages/core/governance/housekeeping/action.js +45 -0
  535. package/packages/core/governance/housekeeping/execution.js +75 -0
  536. package/packages/core/governance/housekeeping/options.js +103 -0
  537. package/packages/core/governance/housekeeping/report.js +53 -0
  538. package/packages/core/governance/housekeeping/transactions.js +96 -0
  539. package/packages/core/governance/patrol/action.js +41 -0
  540. package/packages/core/governance/patrol/controller.js +125 -0
  541. package/packages/core/governance/patrol/options.js +121 -0
  542. package/packages/core/governance/patrol/report.js +53 -0
  543. package/packages/core/governance/patrol/transaction.js +30 -0
  544. package/packages/core/governance/publication/audit.js +26 -0
  545. package/packages/core/governance/publication/collection.js +396 -0
  546. package/packages/core/governance/publication/policy-values.js +227 -0
  547. package/packages/core/governance/publication/source-authorization.js +293 -0
  548. package/packages/core/governance/receipt-admission-action.js +12 -0
  549. package/packages/core/governance/receipt-admission.js +34 -0
  550. package/packages/core/governance/release-check-policy.js +179 -0
  551. package/packages/core/governance/release-reconciliation-action.js +25 -0
  552. package/packages/core/governance/release-reconciliation.js +122 -0
  553. package/packages/core/governance/report-issue/action.js +201 -0
  554. package/packages/core/index.js +85 -117
  555. package/packages/core/observability/cli/candidate.mjs +42 -0
  556. package/packages/core/observability/cli/context.mjs +47 -0
  557. package/packages/core/observability/cli/diagnostics.mjs +88 -0
  558. package/packages/core/observability/cli/events.mjs +126 -0
  559. package/packages/core/observability/cli/process-sample.mjs +71 -0
  560. package/packages/core/observability/commands/aggregate-diagnostics-summary.mjs +45 -0
  561. package/packages/core/observability/commands/controller-evidence.mjs +109 -0
  562. package/packages/core/observability/commands/observed-evidence.mjs +27 -0
  563. package/packages/core/observability/controller/identity-action.js +11 -0
  564. package/packages/core/observability/controller/identity.js +32 -0
  565. package/packages/core/observability/controller-actions.js +63 -0
  566. package/packages/core/observability/controller-evidence-io.js +112 -0
  567. package/packages/core/observability/controller-evidence.js +555 -0
  568. package/packages/core/observability/controller-input-boundary.js +47 -0
  569. package/packages/core/observability/diagnostics/aggregate.js +25 -0
  570. package/packages/core/observability/diagnostics.js +1904 -0
  571. package/packages/core/observability/evidence/actions.js +20 -0
  572. package/packages/core/observability/evidence/bundle.js +163 -0
  573. package/packages/core/observability/evidence/publication.js +360 -0
  574. package/packages/core/observability/evidence/transactions.js +62 -0
  575. package/packages/core/observability/process/sampling.js +128 -0
  576. package/packages/core/observability/publisher-admission.js +26 -0
  577. package/packages/core/observability/transaction-journal.js +40 -0
  578. package/packages/core/paper/cli/dispatch.mjs +17 -0
  579. package/packages/core/paper/commands/paper-agent-cli.mjs +35 -0
  580. package/packages/core/paper/commands/paper-work-fleet-cli.mjs +577 -0
  581. package/packages/core/paper/commands/paper.mjs +632 -0
  582. package/packages/core/paper/operations/bootstrap.js +73 -0
  583. package/packages/core/paper/operations/files.js +48 -0
  584. package/packages/core/paper/operations/github-observation.js +136 -0
  585. package/packages/core/paper/operations/identity.js +59 -0
  586. package/packages/core/paper/operations/npm-observation.js +118 -0
  587. package/packages/core/paper/operations/plans.js +213 -0
  588. package/packages/core/paper/operations/preflight-checks.js +269 -0
  589. package/packages/core/paper/operations/provisioning-validation.js +155 -0
  590. package/packages/core/paper/operations/provisioning.js +113 -0
  591. package/packages/core/paper/operations/runtime-observation.js +25 -0
  592. package/packages/core/paper/operations/runtime.js +84 -0
  593. package/packages/core/paper/operations/scaffold-config.js +77 -0
  594. package/packages/core/paper/operations/scaffold-workflows.js +99 -0
  595. package/packages/core/paper/operations/scaffold.js +370 -0
  596. package/packages/core/paper/operations/status-facts.js +264 -0
  597. package/packages/core/paper/operations/status.js +353 -0
  598. package/packages/core/paper/operations/toolchain-observation.js +49 -0
  599. package/packages/core/paper/operations/workspace.js +60 -0
  600. package/packages/core/paper/paper-agent-entry.js +396 -0
  601. package/packages/core/paper/paper-fleet.js +310 -0
  602. package/packages/core/paper/paper-npm-bootstrap.js +492 -0
  603. package/packages/core/paper/paper-repository.js +214 -0
  604. package/packages/core/paper/paper-runtime-channels.js +344 -0
  605. package/packages/core/paper/paper-scaffold-content.js +574 -0
  606. package/packages/core/paper/paper.js +308 -0
  607. package/packages/core/paper/publication/actions.js +109 -0
  608. package/packages/core/paper/publication/candidate.js +140 -0
  609. package/packages/core/paper/publication/controller.js +117 -0
  610. package/packages/core/paper/publication/envelope.js +118 -0
  611. package/packages/core/paper/publication/propagation.js +135 -0
  612. package/packages/core/paper/publication/readback.js +89 -0
  613. package/packages/core/paper/publication/target.js +54 -0
  614. package/packages/core/paper/publication-controller.js +144 -0
  615. package/packages/core/providers/artifact-relay/files.js +71 -0
  616. package/packages/core/providers/artifact-relay/s3-client.js +259 -0
  617. package/packages/core/providers/artifact-relay/transactions.js +258 -0
  618. package/packages/core/providers/commands/artifact-relay-s3.mjs +62 -0
  619. package/packages/core/providers/commands/aws-codebuild-toolchain.mjs +15 -0
  620. package/packages/core/providers/commands/aws-macos-jit-controller-runtime.mjs +82 -0
  621. package/packages/core/providers/commands/aws-runner-burst-core.mjs +249 -0
  622. package/packages/core/providers/commands/aws-runner-burst.mjs +80 -0
  623. package/packages/core/providers/commands/aws-windows-jit-campaign.mjs +202 -0
  624. package/packages/core/providers/commands/aws-windows-jit-controller.mjs +578 -0
  625. package/packages/core/providers/commands/aws-windows-jit-operator.sh +506 -0
  626. package/packages/core/providers/commands/infra-contract-core.mjs +1032 -0
  627. package/packages/core/providers/commands/infra-contract.mjs +345 -0
  628. package/packages/core/providers/commands/locked-source-checkout.mjs +9 -0
  629. package/packages/core/providers/commands/route-offline-runners.mjs +30 -0
  630. package/packages/core/providers/demo/capture-worker.py +541 -0
  631. package/packages/core/providers/dev-delivery/candidate.js +112 -0
  632. package/packages/core/providers/dev-delivery/protection.js +29 -0
  633. package/packages/core/providers/dev-delivery/store.js +292 -0
  634. package/packages/core/providers/git/fetch-process.js +27 -0
  635. package/packages/core/providers/git/fetch-worker.js +146 -0
  636. package/packages/core/providers/git/patch-root.js +54 -0
  637. package/packages/core/providers/git-ref-readback.mjs +22 -0
  638. package/packages/core/providers/github/artifact-attestation.js +32 -0
  639. package/packages/core/providers/github/commits.js +32 -0
  640. package/packages/core/providers/github/json-client.js +65 -0
  641. package/packages/core/providers/github/product-publication.js +44 -0
  642. package/packages/core/providers/github/publication-control-plane.js +116 -0
  643. package/packages/core/providers/github/pull-requests.js +24 -0
  644. package/packages/core/providers/github/qualification.js +181 -0
  645. package/packages/core/providers/github/release-assets.js +91 -0
  646. package/packages/core/providers/github/signing-request.js +81 -0
  647. package/packages/core/providers/github/source-lock.js +98 -0
  648. package/packages/core/providers/github-cli-api.js +35 -0
  649. package/packages/core/providers/github-issue-comment.js +83 -0
  650. package/packages/core/providers/github-permission.js +11 -0
  651. package/packages/core/providers/github-token.js +121 -0
  652. package/packages/core/providers/process/sample-worker.mjs +14 -0
  653. package/packages/core/providers/runner/observation.js +30 -0
  654. package/packages/core/providers/runner/offline-routing.js +205 -0
  655. package/packages/core/providers/signing/detached-key.js +20 -0
  656. package/packages/core/providers/signing/macos/compound-archive.py +434 -0
  657. package/packages/core/providers/signing/macos/sign-request.sh +145 -0
  658. package/packages/core/providers/signing/native.js +77 -0
  659. package/packages/core/providers/signing/windows/sign-request.ps1 +48 -0
  660. package/packages/core/providers/source-checkout/action.js +31 -0
  661. package/packages/core/providers/source-checkout/auth.js +32 -0
  662. package/packages/core/providers/source-checkout/fetch.js +135 -0
  663. package/packages/core/providers/source-checkout/git.js +220 -0
  664. package/packages/core/providers/source-checkout/transaction.js +360 -0
  665. package/packages/core/providers/source-checkout/values.js +115 -0
  666. package/packages/core/providers/source-checkout/workspace.js +50 -0
  667. package/packages/core/providers/sync-git/action.mjs +16 -0
  668. package/packages/core/providers/sync-git/transfer.mjs +86 -0
  669. package/packages/core/providers/toolchain/codebuild-policy.js +36 -0
  670. package/packages/core/providers/toolchain/codebuild.js +220 -0
  671. package/packages/core/publication/authority/actions.js +156 -0
  672. package/packages/core/publication/authority/admission.js +113 -0
  673. package/packages/core/publication/authority/assembly.js +77 -0
  674. package/packages/core/publication/authority/binary-evidence.js +77 -0
  675. package/packages/core/publication/authority/candidate-evidence.js +42 -0
  676. package/packages/core/publication/authority/consumer-gate.js +80 -0
  677. package/packages/core/publication/authority/control-plane.js +38 -0
  678. package/packages/core/publication/authority/evidence.js +113 -0
  679. package/packages/core/publication/authority/gate.js +39 -0
  680. package/packages/core/publication/authority/governance.js +61 -0
  681. package/packages/core/publication/authority/paper-evidence.js +24 -0
  682. package/packages/core/publication/authority/request.js +13 -0
  683. package/packages/core/publication/authority/result.js +37 -0
  684. package/packages/core/publication/authority/runner.js +26 -0
  685. package/packages/core/publication/authority/seal.js +97 -0
  686. package/packages/core/publication/authority/verification-evidence.js +80 -0
  687. package/packages/core/publication/authority/verification.js +94 -0
  688. package/packages/core/publication/binary/action.js +33 -0
  689. package/packages/core/publication/binary/capability.js +55 -0
  690. package/packages/core/publication/binary/evidence.js +109 -0
  691. package/packages/core/publication/binary/transaction.js +38 -0
  692. package/packages/core/publication/candidate/artifact.js +71 -0
  693. package/packages/core/publication/candidate/collection-action.js +24 -0
  694. package/packages/core/publication/candidate/collection.js +70 -0
  695. package/packages/core/publication/candidate/kind.js +93 -0
  696. package/packages/core/publication/candidate/manifest.js +35 -0
  697. package/packages/core/publication/candidate/package-binding.js +42 -0
  698. package/packages/core/publication/candidate/package.js +50 -0
  699. package/packages/core/publication/candidate/paper-package.js +120 -0
  700. package/packages/core/publication/candidate/passport.js +36 -0
  701. package/packages/core/publication/candidate/qualification-action.js +41 -0
  702. package/packages/core/publication/candidate/qualification.js +56 -0
  703. package/packages/core/publication/candidate/registry-hydration.js +204 -0
  704. package/packages/core/publication/candidate/reproducibility.js +29 -0
  705. package/packages/core/publication/candidate/sealing.js +184 -0
  706. package/packages/core/publication/candidate/stage-capsules.js +205 -0
  707. package/packages/core/publication/candidate/toolchain.js +80 -0
  708. package/packages/core/publication/cli/dispatch.mjs +107 -0
  709. package/packages/core/publication/commands/create-release-bundle.mjs +32 -0
  710. package/packages/core/publication/commands/generate-release-candidate-passport.mjs +80 -0
  711. package/packages/core/publication/commands/installer-publication.mjs +45 -0
  712. package/packages/core/publication/commands/npm-publish-dry-run.mjs +48 -0
  713. package/packages/core/publication/commands/npm-publish-transaction.mjs +55 -0
  714. package/packages/core/publication/commands/publication-artifact-candidate.mjs +48 -0
  715. package/packages/core/publication/commands/publication-artifact.mjs +67 -0
  716. package/packages/core/publication/commands/publication-package.mjs +38 -0
  717. package/packages/core/publication/commands/publication-registry-hydrate.mjs +19 -0
  718. package/packages/core/publication/commands/publication-reproducibility.mjs +62 -0
  719. package/packages/core/publication/installer/evidence.js +319 -0
  720. package/packages/core/publication/npm/environment.js +18 -0
  721. package/packages/core/publication/npm/evidence.js +57 -0
  722. package/packages/core/publication/npm/pack-preview.js +22 -0
  723. package/packages/core/publication/npm/package-plan.js +82 -0
  724. package/packages/core/publication/npm/package.js +120 -0
  725. package/packages/core/publication/npm/preview-action.js +30 -0
  726. package/packages/core/publication/npm/preview.js +92 -0
  727. package/packages/core/publication/npm/registry.js +61 -0
  728. package/packages/core/publication/npm/transaction.js +115 -0
  729. package/packages/core/publication/oci/preview-actions.js +48 -0
  730. package/packages/core/publication/oci/preview-admission.js +93 -0
  731. package/packages/core/publication/oci/preview-promotion.js +64 -0
  732. package/packages/core/publication/oci/preview-registry.js +36 -0
  733. package/packages/core/publication/oci/preview-transaction.js +42 -0
  734. package/packages/core/publication/oci/preview-values.js +8 -0
  735. package/packages/core/publication/oci-compose-qualification.js +143 -0
  736. package/packages/core/publication/oci-publication-bundle.js +281 -0
  737. package/packages/core/publication/publication-artifact-candidate.js +128 -0
  738. package/packages/core/publication/publication-artifact.js +641 -0
  739. package/packages/core/publication/publication-authority.js +1163 -0
  740. package/packages/core/publication/publication-development.js +72 -0
  741. package/packages/core/publication/publication-package.js +252 -0
  742. package/packages/core/publication/publication-rehearsal-capsule.js +468 -0
  743. package/packages/core/publication/publication-rehearsal-projection.js +104 -0
  744. package/packages/core/publication/publication-rehearsal-runtime.js +190 -0
  745. package/packages/core/publication/publication-rehearsal.js +481 -0
  746. package/packages/core/publication/publication-reproducibility.js +947 -0
  747. package/packages/core/publication/settlement/actions.js +63 -0
  748. package/packages/core/publication/settlement/transaction.js +197 -0
  749. package/packages/core/release/binary/coordinates-action.js +25 -0
  750. package/packages/core/release/binary/coordinates.js +76 -0
  751. package/packages/core/release/candidate/download.js +64 -0
  752. package/packages/core/release/candidate/lineage.js +72 -0
  753. package/packages/core/release/candidate/materialize.js +155 -0
  754. package/packages/core/release/candidate/payloads.js +330 -0
  755. package/packages/core/release/candidate/publication-intent.js +89 -0
  756. package/packages/core/release/candidate/resolve.js +132 -0
  757. package/packages/core/release/candidate/run-selection.js +88 -0
  758. package/packages/core/release/candidate/selection.js +181 -0
  759. package/packages/core/release/candidate/transport.js +143 -0
  760. package/packages/core/release/cli/command-handlers.mjs +14 -0
  761. package/packages/core/release/cli/dispatch.mjs +39 -0
  762. package/packages/core/release/cli/inspection-handlers.mjs +178 -0
  763. package/packages/core/release/cli/release-handlers.mjs +332 -0
  764. package/packages/core/release/cli/trust-release.mjs +19 -0
  765. package/packages/core/release/cli/verification-handlers.mjs +303 -0
  766. package/packages/core/release/commands/dev-alpha-candidate-patrol.mjs +42 -0
  767. package/packages/core/release/commands/ensure-github-release.mjs +199 -0
  768. package/packages/core/release/commands/next-development-review.mjs +77 -0
  769. package/packages/core/release/commands/next-development-transition.mjs +47 -0
  770. package/packages/core/release/commands/promotion-channel-router.mjs +62 -0
  771. package/packages/core/release/commands/promotion-identity-resolver.mjs +77 -0
  772. package/packages/core/release/commands/publish-source-ref-resolver.mjs +113 -0
  773. package/packages/core/release/commands/release-candidate-resolver.mjs +122 -0
  774. package/packages/core/release/commands/release-line-dry-run.mjs +53 -0
  775. package/packages/core/release/commands/release-propagation.mjs +411 -0
  776. package/packages/core/release/commands/release-tail.mjs +169 -0
  777. package/packages/core/release/commands/release-transaction.mjs +212 -0
  778. package/packages/core/release/commands/resolve-publish-gate.mjs +34 -0
  779. package/packages/core/release/commands/resolve-publish-source.mjs +96 -0
  780. package/packages/core/release/commands/resume-from-candidate-run.mjs +107 -0
  781. package/packages/core/release/commands/stable-candidate-patrol.mjs +31 -0
  782. package/packages/core/release/commands/stable-candidate-qualification.mjs +24 -0
  783. package/packages/core/release/commands/stable-release-gate.mjs +351 -0
  784. package/packages/core/release/commands/tail-reseal.mjs +148 -0
  785. package/packages/core/release/commands/verify-promotion-router-binding.sh +36 -0
  786. package/packages/core/release/commands/verify-publish-channel-ref.mjs +83 -0
  787. package/packages/core/release/commands/verify-publish-source-lock.mjs +37 -0
  788. package/packages/core/release/commands/verify-release-pr.mjs +6 -0
  789. package/packages/core/release/commands/verify-version-state-delta.mjs +21 -0
  790. package/packages/core/release/github-provider-plane.js +319 -0
  791. package/packages/core/release/github-release.js +385 -0
  792. package/packages/core/release/line/action.js +49 -0
  793. package/packages/core/release/line/governance.js +96 -0
  794. package/packages/core/release/line/plan.js +56 -0
  795. package/packages/core/release/line/policy.js +320 -0
  796. package/packages/core/release/line/protection.js +35 -0
  797. package/packages/core/release/line/request.js +22 -0
  798. package/packages/core/release/line/source.js +79 -0
  799. package/packages/core/release/line/transaction.js +33 -0
  800. package/packages/core/release/line/verification-action.js +13 -0
  801. package/packages/core/release/line/verification.js +13 -0
  802. package/packages/core/release/next-development/actions.js +122 -0
  803. package/packages/core/release/next-development/approval.js +59 -0
  804. package/packages/core/release/next-development/enqueue.js +51 -0
  805. package/packages/core/release/next-development/finalization.js +127 -0
  806. package/packages/core/release/next-development/observation.js +41 -0
  807. package/packages/core/release/next-development/review-policy.js +56 -0
  808. package/packages/core/release/next-development/verification.js +89 -0
  809. package/packages/core/release/next-development-projection.js +310 -0
  810. package/packages/core/release/next-development-transition.js +737 -0
  811. package/packages/core/release/partial-mutation-recovery-qualification.js +18 -0
  812. package/packages/core/release/passport/artifact-index.js +65 -0
  813. package/packages/core/release/passport/assembly-artifacts.js +43 -0
  814. package/packages/core/release/passport/assembly-inputs.js +107 -0
  815. package/packages/core/release/passport/assembly-material.js +261 -0
  816. package/packages/core/release/passport/assembly-render.js +320 -0
  817. package/packages/core/release/passport/assembly.js +12 -0
  818. package/packages/core/release/passport/assets.js +46 -0
  819. package/packages/core/release/passport/attachments.js +88 -0
  820. package/packages/core/release/passport/authoritative-base.js +123 -0
  821. package/packages/core/release/passport/build.js +39 -0
  822. package/packages/core/release/passport/collection-inputs.js +383 -0
  823. package/packages/core/release/passport/collection-material.js +199 -0
  824. package/packages/core/release/passport/collection-options.js +97 -0
  825. package/packages/core/release/passport/collection-output.js +303 -0
  826. package/packages/core/release/passport/collection.js +10 -0
  827. package/packages/core/release/passport/commands.js +44 -0
  828. package/packages/core/release/passport/consumer-input.js +18 -0
  829. package/packages/core/release/passport/consumer-validation.js +83 -0
  830. package/packages/core/release/passport/discovery.js +36 -0
  831. package/packages/core/release/passport/documents.js +116 -0
  832. package/packages/core/release/passport/evidence-validation.js +280 -0
  833. package/packages/core/release/passport/files.js +43 -0
  834. package/packages/core/release/passport/fixture.js +19 -0
  835. package/packages/core/release/passport/identity.js +46 -0
  836. package/packages/core/release/passport/impact-validation.js +230 -0
  837. package/packages/core/release/passport/impact.js +149 -0
  838. package/packages/core/release/passport/inputs.js +55 -0
  839. package/packages/core/release/passport/invariants.js +93 -0
  840. package/packages/core/release/passport/issues.js +29 -0
  841. package/packages/core/release/passport/json.js +16 -0
  842. package/packages/core/release/passport/locations.js +82 -0
  843. package/packages/core/release/passport/packages.js +123 -0
  844. package/packages/core/release/passport/publish-validation.js +279 -0
  845. package/packages/core/release/passport/publish.js +58 -0
  846. package/packages/core/release/passport/report.js +154 -0
  847. package/packages/core/release/passport/state-validation.js +163 -0
  848. package/packages/core/release/passport/transaction.js +69 -0
  849. package/packages/core/release/passport/trust-claims.js +365 -0
  850. package/packages/core/release/passport/trust-validation.js +528 -0
  851. package/packages/core/release/product-publication.js +59 -0
  852. package/packages/core/release/promote-candidate/action.js +9 -0
  853. package/packages/core/release/promote-candidate/development-source.js +39 -0
  854. package/packages/core/release/promote-candidate/evidence-binding.js +142 -0
  855. package/packages/core/release/promote-candidate/evidence-inputs.js +99 -0
  856. package/packages/core/release/promote-candidate/files.js +10 -0
  857. package/packages/core/release/promote-candidate/next-development-provider.js +300 -0
  858. package/packages/core/release/promote-candidate/next-development-queue.js +63 -0
  859. package/packages/core/release/promote-candidate/oci-provider.js +241 -0
  860. package/packages/core/release/promote-candidate/oci-registry-client.js +67 -0
  861. package/packages/core/release/promote-candidate/outputs.js +29 -0
  862. package/packages/core/release/promote-candidate/product-finalization-wait.js +52 -0
  863. package/packages/core/release/promote-candidate/product-provider-adapters.js +462 -0
  864. package/packages/core/release/promote-candidate/product-provider-github-adapters.js +595 -0
  865. package/packages/core/release/promote-candidate/product-provider.js +188 -0
  866. package/packages/core/release/promote-candidate/provider-request.js +51 -0
  867. package/packages/core/release/promote-candidate/provider-settlement.js +83 -0
  868. package/packages/core/release/promote-candidate/publication-completion.js +56 -0
  869. package/packages/core/release/promote-candidate/release-documents.js +156 -0
  870. package/packages/core/release/promote-candidate/transaction.js +130 -0
  871. package/packages/core/release/promote-ref/action-environment.js +2 -0
  872. package/packages/core/release/promote-ref/action-inputs.js +285 -0
  873. package/packages/core/release/promote-ref/action-outputs.js +140 -0
  874. package/packages/core/release/promote-ref/action-request.js +205 -0
  875. package/packages/core/release/promote-ref/action.js +92 -0
  876. package/packages/core/release/promote-ref/internal/branch-protection.js +218 -0
  877. package/packages/core/release/promote-ref/internal/candidate-admission.js +149 -0
  878. package/packages/core/release/promote-ref/internal/channel-governance.js +297 -0
  879. package/packages/core/release/promote-ref/internal/channel-resume.js +198 -0
  880. package/packages/core/release/promote-ref/internal/channel-tags.js +207 -0
  881. package/packages/core/release/promote-ref/internal/contained-published-version-state.js +80 -0
  882. package/packages/core/release/promote-ref/internal/durable-transaction-operations.js +463 -0
  883. package/packages/core/release/promote-ref/internal/durable-transaction-store.js +395 -0
  884. package/packages/core/release/promote-ref/internal/generated-branch.js +16 -0
  885. package/packages/core/release/promote-ref/internal/generated-identity.js +12 -0
  886. package/packages/core/release/promote-ref/internal/generated-ref.js +93 -0
  887. package/packages/core/release/promote-ref/internal/github-adapter.js +312 -0
  888. package/packages/core/release/promote-ref/internal/npm-distribution.js +185 -0
  889. package/packages/core/release/promote-ref/internal/npm-existing-evidence.js +61 -0
  890. package/packages/core/release/promote-ref/internal/passport-files.js +116 -0
  891. package/packages/core/release/promote-ref/internal/passport-generation.js +567 -0
  892. package/packages/core/release/promote-ref/internal/promote-alpha-channel.js +588 -0
  893. package/packages/core/release/promote-ref/internal/promote-major-channel.js +476 -0
  894. package/packages/core/release/promote-ref/internal/promote-release-channel.js +573 -0
  895. package/packages/core/release/promote-ref/internal/promotion-operations.js +1170 -0
  896. package/packages/core/release/promote-ref/internal/promotion-options.js +101 -0
  897. package/packages/core/release/promote-ref/internal/promotion-policy.js +218 -0
  898. package/packages/core/release/promote-ref/internal/publish-command.js +211 -0
  899. package/packages/core/release/promote-ref/internal/publish-contract.js +181 -0
  900. package/packages/core/release/promote-ref/internal/publish-transaction.js +510 -0
  901. package/packages/core/release/promote-ref/internal/tag-selection.js +159 -0
  902. package/packages/core/release/promote-ref/internal/transaction-context.js +506 -0
  903. package/packages/core/release/promote-ref/internal/transaction-recovery.js +379 -0
  904. package/packages/core/release/promote-ref/internal/version-state-operations.js +545 -0
  905. package/packages/core/release/promote-ref/lib.js +600 -0
  906. package/packages/core/release/promote-ref/release-tail.js +102 -0
  907. package/packages/core/release/promote-ref/source-lock.js +91 -0
  908. package/packages/core/release/promotion/actions.js +133 -0
  909. package/packages/core/release/promotion/admission.js +52 -0
  910. package/packages/core/release/promotion/candidate.js +71 -0
  911. package/packages/core/release/promotion/channel.js +104 -0
  912. package/packages/core/release/promotion/identities.js +56 -0
  913. package/packages/core/release/promotion/product-state.js +68 -0
  914. package/packages/core/release/promotion/publish-gate.js +128 -0
  915. package/packages/core/release/promotion/qualification-action.js +72 -0
  916. package/packages/core/release/promotion/qualification.js +95 -0
  917. package/packages/core/release/promotion/routing.js +94 -0
  918. package/packages/core/release/promotion/selection.js +55 -0
  919. package/packages/core/release/promotion/source-intent.js +35 -0
  920. package/packages/core/release/promotion-request.js +148 -0
  921. package/packages/core/release/propagation/actions.js +75 -0
  922. package/packages/core/release/propagation/delivery.js +202 -0
  923. package/packages/core/release/propagation/planning.js +197 -0
  924. package/packages/core/release/propagation/report.js +97 -0
  925. package/packages/core/release/propagation/store.js +26 -0
  926. package/packages/core/release/propagation/transactions.js +213 -0
  927. package/packages/core/release/propagation/work.js +146 -0
  928. package/packages/core/release/protected-publication-source.js +91 -0
  929. package/packages/core/release/provider-operation-journal.js +62 -0
  930. package/packages/core/release/provider-readback-idempotency.js +309 -0
  931. package/packages/core/release/qualification/actions.js +51 -0
  932. package/packages/core/release/qualification/campaign.js +154 -0
  933. package/packages/core/release/qualification/options.js +102 -0
  934. package/packages/core/release/qualification/public-build.js +109 -0
  935. package/packages/core/release/recovery/artifacts.js +161 -0
  936. package/packages/core/release/recovery/candidate.js +529 -0
  937. package/packages/core/release/recovery/capsules.js +102 -0
  938. package/packages/core/release/recovery/download.js +191 -0
  939. package/packages/core/release/recovery/files.js +39 -0
  940. package/packages/core/release/recovery/provenance.js +199 -0
  941. package/packages/core/release/recovery/publication.js +193 -0
  942. package/packages/core/release/recovery/readback.js +169 -0
  943. package/packages/core/release/recovery/runtime.js +224 -0
  944. package/packages/core/release/recovery/transactions.js +139 -0
  945. package/packages/core/release/release-activation-shadow.js +32 -0
  946. package/packages/core/release/release-blocker-priority.js +183 -0
  947. package/packages/core/release/release-candidate-recovery.js +595 -0
  948. package/packages/core/release/release-candidate.js +591 -0
  949. package/packages/core/release/release-invocation.js +64 -0
  950. package/packages/core/release/release-line-bootstrap.js +292 -0
  951. package/packages/core/release/release-line-dry-run.js +302 -0
  952. package/packages/core/release/release-passport-contract.js +479 -0
  953. package/packages/core/release/release-passport.js +74 -0
  954. package/packages/core/release/release-tail-provider-adapters.js +460 -0
  955. package/packages/core/release/release-tail-provider-plane.js +248 -0
  956. package/packages/core/release/reseal/actions.js +84 -0
  957. package/packages/core/release/reseal/admission.js +75 -0
  958. package/packages/core/release/reseal/files.js +39 -0
  959. package/packages/core/release/reseal/finalize-platform.js +65 -0
  960. package/packages/core/release/reseal/outputs.js +21 -0
  961. package/packages/core/release/reseal/plan.js +24 -0
  962. package/packages/core/release/reseal/platform.js +135 -0
  963. package/packages/core/release/reseal/readbacks.js +36 -0
  964. package/packages/core/release/reseal/seal.js +125 -0
  965. package/packages/core/release/reuse-complete-release.js +240 -0
  966. package/packages/core/release/runtime-override-authorization.js +242 -0
  967. package/packages/core/release/settle/action.js +412 -0
  968. package/packages/core/release/source/channel.js +45 -0
  969. package/packages/core/release/source/coordinates.js +160 -0
  970. package/packages/core/release/source/lineage.js +144 -0
  971. package/packages/core/release/source/manifest.js +114 -0
  972. package/packages/core/release/stable-patrol/action.js +87 -0
  973. package/packages/core/release/stable-patrol/controller.js +346 -0
  974. package/packages/core/release/stable-patrol/coordinates.js +16 -0
  975. package/packages/core/release/stable-patrol/github-client.js +181 -0
  976. package/packages/core/release/stable-patrol/options.js +87 -0
  977. package/packages/core/release/stable-patrol/report.js +28 -0
  978. package/packages/core/release/stable-publication-fence.js +28 -0
  979. package/packages/core/release/tail-reseal-github.js +175 -0
  980. package/packages/core/release/tail-reseal-receipt.js +228 -0
  981. package/packages/core/release/tail-reseal.js +594 -0
  982. package/packages/core/release/version-state/verification.js +164 -0
  983. package/packages/core/release/version-state.js +458 -0
  984. package/packages/core/runtime/action-host.js +19 -0
  985. package/packages/core/runtime/action-process.mjs +23 -0
  986. package/packages/core/runtime/buildchain-domain.wasm +0 -0
  987. package/packages/core/runtime/checkout-identity.js +27 -0
  988. package/packages/core/runtime/commands/bridge-bootstrap.mjs +147 -0
  989. package/packages/core/runtime/commands/host-adapter.mjs +185 -0
  990. package/packages/core/runtime/commands/runtime-ref-core.mjs +171 -0
  991. package/packages/core/runtime/consumer-shell.js +174 -0
  992. package/packages/core/runtime/domain-wasm-artifact.js +7 -0
  993. package/packages/core/runtime/installation-root.js +29 -0
  994. package/packages/core/runtime/locked-dependencies.js +74 -0
  995. package/packages/core/runtime/provider-closure.js +60 -0
  996. package/packages/core/runtime/runtime-selection-action.js +34 -0
  997. package/packages/core/runtime/runtime-selection.js +136 -0
  998. package/packages/core/runtime/toolchain/actions.js +14 -0
  999. package/packages/core/runtime/toolchain/user-paths.js +9 -0
  1000. package/packages/core/runtime/toolchain/windows-rust.js +67 -0
  1001. package/packages/core/runtime/workflow-runtime.js +11 -0
  1002. package/packages/core/web/apply-admission-action.js +20 -0
  1003. package/packages/core/web/apply-admission.js +44 -0
  1004. package/packages/core/web/cli/badges.mjs +100 -0
  1005. package/packages/core/web/cli/surface.mjs +6 -0
  1006. package/packages/core/web/commands/web-surface-core.mjs +2603 -0
  1007. package/packages/core/web/commands/web-surface-production-release-pr.mjs +126 -0
  1008. package/packages/core/web/commands/web-surface.mjs +294 -0
  1009. package/packages/core/web/controller-actions.js +45 -0
  1010. package/packages/core/web/controller.js +145 -0
  1011. package/packages/core/web/deployment/apply-action.js +31 -0
  1012. package/packages/core/web/deployment/apply-evidence.js +134 -0
  1013. package/packages/core/web/deployment/apply.js +118 -0
  1014. package/packages/core/web/deployment/cloudfront-wait.js +88 -0
  1015. package/packages/core/web/deployment/plan-files.js +41 -0
  1016. package/packages/core/web/deployment/planning-action.js +28 -0
  1017. package/packages/core/web/deployment/planning.js +126 -0
  1018. package/packages/core/web/deployment/report-action.js +74 -0
  1019. package/packages/core/web/deployment/summary.js +44 -0
  1020. package/packages/core/web/preview-feedback-action.js +26 -0
  1021. package/packages/core/web/preview-feedback.js +40 -0
  1022. package/packages/core/web/production-decision-action.js +42 -0
  1023. package/packages/core/web/production-decision.js +85 -0
  1024. package/packages/core/web/production-intent-action.js +14 -0
  1025. package/packages/core/web/production-intent.js +167 -0
  1026. package/packages/core/web/publication-admission-action.js +92 -0
  1027. package/packages/core/web/publication-admission.js +183 -0
  1028. package/packages/core/web/publication-capability-action.js +22 -0
  1029. package/packages/core/web/publication-capability.js +73 -0
  1030. package/packages/core/web/readme-badges.js +891 -0
  1031. package/packages/core/web/release-feedback.js +414 -0
  1032. package/packages/core/web/release-pr-action.js +47 -0
  1033. package/packages/core/web/release-pr-handoff.js +176 -0
  1034. package/packages/core/web/release-pr-provider.js +295 -0
  1035. package/packages/core/web/release-pr-summary.js +42 -0
  1036. package/packages/core/web/release-pr-transaction.js +158 -0
  1037. package/packages/core/web/release-review-action.js +21 -0
  1038. package/packages/core/web/release-review.js +130 -0
  1039. package/packages/core/web/web-surface-publication-candidate.js +162 -0
  1040. package/packages/core/workflow/admission/actions.js +56 -0
  1041. package/packages/core/workflow/admission/recovery.js +47 -0
  1042. package/packages/core/workflow/admission/review.js +188 -0
  1043. package/packages/core/workflow/admission/transactions.js +60 -0
  1044. package/packages/core/workflow/cli/main.mjs +131 -0
  1045. package/packages/core/workflow/cli/process.mjs +16 -0
  1046. package/packages/core/workflow/commands/buildchain-cli-help.mjs +318 -0
  1047. package/packages/core/workflow/commands/universal-workflow-backflow.mjs +26 -0
  1048. package/packages/core/workflow/commands/universal-workflow-engine.mjs +73 -0
  1049. package/packages/core/workflow/dogfood/actions.js +62 -0
  1050. package/packages/core/workflow/dogfood/readiness.js +74 -0
  1051. package/packages/core/workflow/dogfood/transactions.js +90 -0
  1052. package/packages/core/workflow/engine/action.js +42 -0
  1053. package/packages/core/workflow/engine/conformance.js +93 -0
  1054. package/packages/core/workflow/engine/execution.js +77 -0
  1055. package/packages/core/workflow/engine/identity.js +34 -0
  1056. package/packages/core/workflow/engine/provider-context.js +16 -0
  1057. package/packages/core/workflow/engine/release-environment.js +57 -0
  1058. package/packages/core/workflow/engine/release-evidence.js +39 -0
  1059. package/packages/core/workflow/engine/release-observation.js +97 -0
  1060. package/packages/core/workflow/engine/release-promotion.js +227 -0
  1061. package/packages/core/workflow/event-trust.js +25 -0
  1062. package/packages/core/workflow/installation.js +33 -0
  1063. package/packages/core/workflow/request-rejection.js +3 -0
  1064. package/packages/core/workflow/settlement/actions.js +34 -0
  1065. package/packages/core/workflow/settlement/backflow.js +187 -0
  1066. package/packages/core/workflow/universal-self-dogfood.js +163 -0
  1067. package/packages/core/workflow/universal-workflow-bootstrap.js +586 -0
  1068. package/packages/core/workflow/workflow-taxonomy.mjs +351 -0
  1069. package/scripts/bridge-evidence.mjs +9 -2
  1070. package/scripts/build-domain-wasm.mjs +15 -3
  1071. package/scripts/build-standalone-binary.mjs +1 -375
  1072. package/scripts/check-action-bundles.mjs +14 -25
  1073. package/scripts/check-ci-lane-change-budget.mjs +3 -3
  1074. package/scripts/check-code-layout.mjs +386 -0
  1075. package/scripts/check-core-mechanism-inventory.mjs +17 -16
  1076. package/scripts/check-dev-delivery-actions.mjs +35 -0
  1077. package/scripts/check-floating-consumer-policy-contract.mjs +33 -59
  1078. package/scripts/check-implementation-naming.mjs +2 -23
  1079. package/scripts/check-internal-architecture.mjs +3 -3
  1080. package/scripts/check-inventory.mjs +160 -318
  1081. package/scripts/check-javascript-syntax.mjs +1 -1
  1082. package/scripts/check-maintainability.mjs +25 -21
  1083. package/scripts/check-project-cut-merge-queue-admission.mjs +1 -1
  1084. package/scripts/check-public-dogfood-contract.mjs +166 -43
  1085. package/scripts/check-release-tail-contract.mjs +62 -71
  1086. package/scripts/check-release-topology.mjs +101 -77
  1087. package/scripts/check-runtime-semantic-closure.mjs +5 -8
  1088. package/scripts/check-source-bindings.mjs +54 -0
  1089. package/scripts/check-universal-workflow-bootstrap.mjs +136 -124
  1090. package/scripts/check-workflow-taxonomy.mjs +1 -1
  1091. package/scripts/check-workflows.sh +11 -0
  1092. package/scripts/generate-bootstrap-admission.mjs +32 -0
  1093. package/scripts/generate-bootstrap-recovery.mjs +94 -0
  1094. package/scripts/generate-buildchain-kfd-witnesses.mjs +3 -3
  1095. package/scripts/generate-channel-promotion-workflow.mjs +39 -518
  1096. package/scripts/generate-next-development-guidance.mjs +1 -1
  1097. package/scripts/generate-public-reference.mjs +2 -2
  1098. package/scripts/generate-site-bundle.mjs +42 -43
  1099. package/scripts/generate-tail-reseal-fixture.mjs +108 -0
  1100. package/scripts/generate-workflow-taxonomy.mjs +2 -2
  1101. package/scripts/inventory/binary.mjs +36 -0
  1102. package/scripts/inventory/promotion.mjs +72 -0
  1103. package/scripts/maintainability-domain-metrics.mjs +1 -1
  1104. package/scripts/maintainability-metrics.mjs +37 -37
  1105. package/scripts/maintainability-public-surface.mjs +19 -95
  1106. package/scripts/next-development-self-dogfood-harness.mjs +2 -2
  1107. package/scripts/next-development-self-dogfood.mjs +2 -2
  1108. package/scripts/platform-stage-checkpoint-rehearsal.mjs +33 -201
  1109. package/scripts/public-reference.mjs +0 -187
  1110. package/scripts/publication-rehearsal-fixture.mjs +1 -1
  1111. package/scripts/release-train-self-dogfood.mjs +9 -14
  1112. package/scripts/site-action-audit.mjs +16 -0
  1113. package/scripts/site-capability-metadata.mjs +3 -7
  1114. package/scripts/source-metric-lineage.mjs +17 -0
  1115. package/scripts/stage-capsule-resume-rehearsal.mjs +19 -55
  1116. package/scripts/tail-reseal-macos-rehearsal.mjs +1 -109
  1117. package/scripts/tsup-action.config.mjs +21 -0
  1118. package/scripts/verify-golden-path.mjs +1 -1
  1119. package/scripts/warrant-shadow-plan.mjs +49 -243
  1120. package/scripts/workflow-action-graph.mjs +149 -0
  1121. package/templates/bootstrap-recovery/actions/build/source/admit/action.yml +17 -0
  1122. package/templates/bootstrap-recovery/actions/build/source/admit/dist/index.js +63 -0
  1123. package/templates/bootstrap-recovery/actions/runtime/dependencies/install/action.yml +18 -0
  1124. package/templates/bootstrap-recovery/actions/runtime/dependencies/install/dist/index.js +63 -0
  1125. package/templates/bootstrap-recovery/actions/runtime/environment/prepare/action.yml +21 -0
  1126. package/templates/bootstrap-recovery/actions/workflow/admission/inspect/action.yml +27 -0
  1127. package/templates/bootstrap-recovery/actions/workflow/admission/inspect/dist/index.js +64 -0
  1128. package/templates/bootstrap-recovery/actions/workflow/admission/review/action.yml +15 -0
  1129. package/templates/bootstrap-recovery/actions/workflow/admission/review/dist/index.js +65 -0
  1130. package/templates/bootstrap-recovery/actions/workflow/recovery/admit/action.yml +47 -0
  1131. package/templates/bootstrap-recovery/actions/workflow/recovery/execute/action.yml +48 -0
  1132. package/templates/bootstrap-recovery/actions/workflow/recovery/settle/action.yml +54 -0
  1133. package/templates/bootstrap-recovery/actions/workflow/settlement/seal/action.yml +17 -0
  1134. package/templates/bootstrap-recovery/actions/workflow/settlement/seal/dist/index.js +65 -0
  1135. package/templates/bootstrap-recovery/manifest.json +68 -0
  1136. package/templates/bootstrap-recovery/package.json +9 -0
  1137. package/templates/native-dev-delivery.yml +28 -41
  1138. package/templates/universal-buildchain-bootstrap-recovery.yml +46 -213
  1139. package/templates/universal-buildchain-bootstrap.yml +1 -1
  1140. package/actions/github-artifact-attestation/README.md +0 -10
  1141. package/actions/promote-buildchain-ref/README.md +0 -549
  1142. package/actions/report-buildchain-issue/README.md +0 -107
  1143. package/actions/run-lifecycle/README.md +0 -71
  1144. package/actions/validate-config/README.md +0 -52
  1145. package/architecture/implementation-naming.json +0 -1273
  1146. package/bin/internal/adopter-delivery-cli.mjs +0 -70
  1147. package/bin/internal/cli-options.mjs +0 -79
  1148. package/bin/internal/compatibility-facts-cli.mjs +0 -101
  1149. package/bin/internal/trust-release-cli.mjs +0 -19
  1150. package/bin/internal/trust-release-command-handlers.mjs +0 -14
  1151. package/bin/internal/trust-release-inspection-handlers.mjs +0 -175
  1152. package/bin/internal/trust-release-release-handlers.mjs +0 -332
  1153. package/bin/internal/trust-release-verification-handlers.mjs +0 -306
  1154. package/contracts/fixtures/v4-adopter-delivery-v1/archive-template.json +0 -19
  1155. package/contracts/fixtures/v4-adopter-delivery-v1/bootstrap-positive.json +0 -93
  1156. package/packages/compatibility/adopter-delivery.js +0 -16
  1157. package/packages/compatibility/cross-platform-adopter-qualification.js +0 -12
  1158. package/packages/compatibility/floating-consumer-policy.js +0 -14
  1159. package/packages/compatibility/publication-qualification.js +0 -11
  1160. package/packages/compatibility/publication-rehearsal.js +0 -18
  1161. package/packages/compatibility/runtime-ref-resume-authority.js +0 -13
  1162. package/packages/compatibility/tail-reseal-receipt.js +0 -7
  1163. package/packages/compatibility/tail-reseal.js +0 -11
  1164. package/packages/core/adopter-delivery-parity.js +0 -219
  1165. package/packages/core/adopter-delivery.js +0 -359
  1166. package/packages/core/anchored-version-material.js +0 -281
  1167. package/packages/core/artifact-passport.js +0 -847
  1168. package/packages/core/artifact-verification-envelope.js +0 -500
  1169. package/packages/core/build-facts.js +0 -575
  1170. package/packages/core/buildchain-compatibility-authority.js +0 -336
  1171. package/packages/core/buildchain-compatibility-fact.js +0 -394
  1172. package/packages/core/buildchain-compatibility-facts.json +0 -217
  1173. package/packages/core/buildchain-compatibility-proof.js +0 -566
  1174. package/packages/core/buildchain-config.js +0 -1887
  1175. package/packages/core/buildchain-contract.js +0 -1048
  1176. package/packages/core/buildchain-delivery-bootstrap.js +0 -240
  1177. package/packages/core/buildchain-delivery-infrastructure.js +0 -164
  1178. package/packages/core/buildchain-delivery-self-dogfood.js +0 -395
  1179. package/packages/core/buildchain-domain.wasm +0 -0
  1180. package/packages/core/buildchain-kfd-claims.js +0 -733
  1181. package/packages/core/buildchain-publication-authority.js +0 -118
  1182. package/packages/core/canonical-contracts.js +0 -239
  1183. package/packages/core/ci-lane-change-budget.js +0 -260
  1184. package/packages/core/controller-evidence.js +0 -553
  1185. package/packages/core/cross-platform-adopter-qualification.js +0 -343
  1186. package/packages/core/delivery-warrant-fixture-runner.js +0 -375
  1187. package/packages/core/delivery-warrant-read-candidate.js +0 -286
  1188. package/packages/core/delivery-warrant-semantic-diff-gate.js +0 -351
  1189. package/packages/core/delivery-warrant-shadow-adapter.js +0 -447
  1190. package/packages/core/dev-delivery-authority-candidate.js +0 -270
  1191. package/packages/core/dev-delivery-authority-landing.js +0 -461
  1192. package/packages/core/dev-delivery-authority-state.js +0 -583
  1193. package/packages/core/dev-delivery-candidate-identity.js +0 -169
  1194. package/packages/core/dev-delivery-contract-surface.js +0 -76
  1195. package/packages/core/dev-delivery-native-proof.js +0 -566
  1196. package/packages/core/dev-delivery-proof.js +0 -286
  1197. package/packages/core/dev-delivery-warrant-legacy-recovery.js +0 -248
  1198. package/packages/core/dev-delivery-warrant-native-compatibility.js +0 -33
  1199. package/packages/core/dev-delivery-warrant-state.js +0 -599
  1200. package/packages/core/dev-delivery-warrant.js +0 -598
  1201. package/packages/core/diagnostics.js +0 -1904
  1202. package/packages/core/domain-wasm-artifact.js +0 -7
  1203. package/packages/core/floating-consumer-evidence.js +0 -338
  1204. package/packages/core/floating-consumer-policy.js +0 -571
  1205. package/packages/core/github-artifact-attestation.js +0 -642
  1206. package/packages/core/github-governance-authority.js +0 -1369
  1207. package/packages/core/homebrew.js +0 -414
  1208. package/packages/core/kfd-agent-hub.js +0 -496
  1209. package/packages/core/kfd.js +0 -966
  1210. package/packages/core/kfd2-product-claims.js +0 -454
  1211. package/packages/core/kfd3-surface-register.js +0 -924
  1212. package/packages/core/legacy-kfd-adopter-driver.js +0 -167
  1213. package/packages/core/next-development-projection.js +0 -310
  1214. package/packages/core/next-development-transition.js +0 -737
  1215. package/packages/core/oci-compose-qualification.js +0 -143
  1216. package/packages/core/oci-publication-bundle.js +0 -281
  1217. package/packages/core/package-manager.js +0 -323
  1218. package/packages/core/paper-agent-entry.js +0 -396
  1219. package/packages/core/paper-fleet.js +0 -313
  1220. package/packages/core/paper-npm-bootstrap.js +0 -492
  1221. package/packages/core/paper-repository.js +0 -214
  1222. package/packages/core/paper-runtime-channels.js +0 -348
  1223. package/packages/core/paper-scaffold-content.js +0 -574
  1224. package/packages/core/paper.js +0 -2478
  1225. package/packages/core/partial-mutation-recovery-qualification.js +0 -18
  1226. package/packages/core/platform-stage-checkpoints.js +0 -471
  1227. package/packages/core/product-publication.js +0 -59
  1228. package/packages/core/protected-publication-source.js +0 -91
  1229. package/packages/core/provider-operation-journal.js +0 -62
  1230. package/packages/core/provider-readback-idempotency.js +0 -309
  1231. package/packages/core/public-export-compatibility.js +0 -33
  1232. package/packages/core/public-surface-audit.js +0 -273
  1233. package/packages/core/public-surface-cli.js +0 -128
  1234. package/packages/core/publication-artifact-candidate.js +0 -128
  1235. package/packages/core/publication-artifact.js +0 -641
  1236. package/packages/core/publication-authority.js +0 -1163
  1237. package/packages/core/publication-development.js +0 -72
  1238. package/packages/core/publication-package.js +0 -252
  1239. package/packages/core/publication-rehearsal-capsule.js +0 -468
  1240. package/packages/core/publication-rehearsal-projection.js +0 -104
  1241. package/packages/core/publication-rehearsal-runtime.js +0 -190
  1242. package/packages/core/publication-rehearsal.js +0 -481
  1243. package/packages/core/publication-reproducibility.js +0 -947
  1244. package/packages/core/published-delivery-authority.js +0 -266
  1245. package/packages/core/readme-badges.js +0 -893
  1246. package/packages/core/release-activation-shadow.js +0 -32
  1247. package/packages/core/release-blocker-priority.js +0 -192
  1248. package/packages/core/release-candidate-recovery.js +0 -595
  1249. package/packages/core/release-candidate.js +0 -591
  1250. package/packages/core/release-invocation.js +0 -64
  1251. package/packages/core/release-line-bootstrap.js +0 -297
  1252. package/packages/core/release-line-dry-run.js +0 -303
  1253. package/packages/core/release-passport-contract.js +0 -479
  1254. package/packages/core/release-passport.js +0 -2884
  1255. package/packages/core/release-tail-compatibility.js +0 -60
  1256. package/packages/core/release-tail-provider-adapters.js +0 -461
  1257. package/packages/core/release-tail-provider-plane.js +0 -248
  1258. package/packages/core/runtime-selector-persistence.js +0 -228
  1259. package/packages/core/stable-publication-fence.js +0 -28
  1260. package/packages/core/stage-capsule-local-store.js +0 -428
  1261. package/packages/core/stage-capsule-qualification-campaign.js +0 -511
  1262. package/packages/core/stage-capsule-qualification.js +0 -455
  1263. package/packages/core/stage-capsule-resume-planner.js +0 -397
  1264. package/packages/core/stage-capsule-store.js +0 -404
  1265. package/packages/core/stage-capsule.js +0 -319
  1266. package/packages/core/tail-reseal-github.js +0 -178
  1267. package/packages/core/tail-reseal-receipt.js +0 -225
  1268. package/packages/core/tail-reseal.js +0 -594
  1269. package/packages/core/universal-workflow-bootstrap.js +0 -586
  1270. package/packages/core/web-surface-publication-candidate.js +0 -162
  1271. package/packages/core/workflow-yaml-contract.js +0 -342
  1272. package/scripts/aggregate-build-summary.mjs +0 -187
  1273. package/scripts/aggregate-diagnostics-summary.mjs +0 -54
  1274. package/scripts/anchored-version-material.mjs +0 -42
  1275. package/scripts/architecture.mjs +0 -610
  1276. package/scripts/artifact-relay-s3.mjs +0 -539
  1277. package/scripts/artifact-signing-controller-core.mjs +0 -525
  1278. package/scripts/artifact-signing-controller.mjs +0 -302
  1279. package/scripts/artifact-signing-delegation.mjs +0 -316
  1280. package/scripts/assemble-binary-release-admission.mjs +0 -213
  1281. package/scripts/assemble-publication-artifact-admission.mjs +0 -200
  1282. package/scripts/assemble-self-publication-admission.mjs +0 -201
  1283. package/scripts/assemble-web-surface-publication-admission.mjs +0 -204
  1284. package/scripts/audit-github-governance.mjs +0 -493
  1285. package/scripts/audit-publication-control-plane.mjs +0 -527
  1286. package/scripts/auditable-demo-bundle-verification.mjs +0 -148
  1287. package/scripts/auditable-demo-platform.mjs +0 -600
  1288. package/scripts/auditable-demo-presentation.mjs +0 -83
  1289. package/scripts/auditable-demo-renditions.mjs +0 -399
  1290. package/scripts/auditable-demo-transport-smoke.mjs +0 -176
  1291. package/scripts/auditable-demo.mjs +0 -1324
  1292. package/scripts/aws-codebuild-toolchain.mjs +0 -285
  1293. package/scripts/aws-macos-jit-controller-runtime.mjs +0 -82
  1294. package/scripts/aws-runner-burst-core.mjs +0 -248
  1295. package/scripts/aws-runner-burst.mjs +0 -79
  1296. package/scripts/aws-windows-jit-campaign.mjs +0 -202
  1297. package/scripts/aws-windows-jit-controller.mjs +0 -578
  1298. package/scripts/binary-publication-evidence.mjs +0 -133
  1299. package/scripts/bridge-bootstrap.mjs +0 -137
  1300. package/scripts/build-contract-core.mjs +0 -1216
  1301. package/scripts/buildchain-channel-router.mjs +0 -249
  1302. package/scripts/buildchain-cli-help.mjs +0 -321
  1303. package/scripts/buildchain-contract-lock.mjs +0 -184
  1304. package/scripts/buildchain-patrol.mjs +0 -280
  1305. package/scripts/compiler-cache-evidence.mjs +0 -304
  1306. package/scripts/consumer-policy.mjs +0 -231
  1307. package/scripts/controller-evidence.mjs +0 -208
  1308. package/scripts/copy-domain-wasm.mjs +0 -14
  1309. package/scripts/create-github-artifact-attestation-policy.mjs +0 -62
  1310. package/scripts/create-release-bundle.mjs +0 -167
  1311. package/scripts/cross-platform-adopter-qualification.mjs +0 -228
  1312. package/scripts/declarative-promotion-admission.mjs +0 -45
  1313. package/scripts/dev-alpha-candidate-patrol.mjs +0 -1197
  1314. package/scripts/dev-delivery-authority-command-adapters.mjs +0 -206
  1315. package/scripts/dev-delivery-authority-provider.mjs +0 -28
  1316. package/scripts/dev-delivery-authority.mjs +0 -490
  1317. package/scripts/dev-delivery-native-run.mjs +0 -177
  1318. package/scripts/dev-delivery-process-boundary.mjs +0 -260
  1319. package/scripts/dev-delivery-proof.mjs +0 -258
  1320. package/scripts/dev-delivery-provider-heartbeat.mjs +0 -215
  1321. package/scripts/dev-delivery-source-proof-replay.mjs +0 -153
  1322. package/scripts/dev-delivery-source-proof-reuse.mjs +0 -548
  1323. package/scripts/dev-delivery-two-phase-resume.mjs +0 -345
  1324. package/scripts/dev-delivery-two-phase.mjs +0 -573
  1325. package/scripts/dev-delivery-warrant-options.mjs +0 -298
  1326. package/scripts/dev-delivery-warrant-store.mjs +0 -316
  1327. package/scripts/dev-delivery-warrant-transition.mjs +0 -109
  1328. package/scripts/dev-delivery-warrant.mjs +0 -559
  1329. package/scripts/dev-merge-queue.mjs +0 -536
  1330. package/scripts/dev-pr-auto-merge.mjs +0 -1222
  1331. package/scripts/dev-pr-delivery-warrant.mjs +0 -467
  1332. package/scripts/dev-pr-prequeue-guard.mjs +0 -381
  1333. package/scripts/dev-qualification-patrol.mjs +0 -594
  1334. package/scripts/dispatch-artifact-signing-authority.mjs +0 -407
  1335. package/scripts/engineering-housekeeper-workflow.mjs +0 -401
  1336. package/scripts/ensure-github-release.mjs +0 -199
  1337. package/scripts/finalize-native-artifact-signing-result.mjs +0 -272
  1338. package/scripts/generate-channel-build-workflow.mjs +0 -69
  1339. package/scripts/generate-release-candidate-passport.mjs +0 -285
  1340. package/scripts/generate-universal-workflow-facades.mjs +0 -499
  1341. package/scripts/git-fetch-process-tree.mjs +0 -175
  1342. package/scripts/host-adapter.mjs +0 -182
  1343. package/scripts/implementation-references.mjs +0 -25
  1344. package/scripts/import-artifact-signing-results.mjs +0 -135
  1345. package/scripts/infra-contract-core.mjs +0 -1032
  1346. package/scripts/infra-contract.mjs +0 -345
  1347. package/scripts/init-repo.mjs +0 -518
  1348. package/scripts/inspect-artifact-signing-requests.mjs +0 -157
  1349. package/scripts/installer-publication.mjs +0 -361
  1350. package/scripts/lifecycle-substage-evidence.mjs +0 -274
  1351. package/scripts/locked-source-checkout.mjs +0 -595
  1352. package/scripts/materialize-artifact-signing-request.mjs +0 -66
  1353. package/scripts/merge-artifact-signing-results.mjs +0 -76
  1354. package/scripts/next-development-review.mjs +0 -331
  1355. package/scripts/next-development-transition.mjs +0 -47
  1356. package/scripts/npm-publish-dry-run.mjs +0 -182
  1357. package/scripts/npm-publish-transaction.mjs +0 -331
  1358. package/scripts/observed-evidence.mjs +0 -311
  1359. package/scripts/oci-compose-preview.mjs +0 -261
  1360. package/scripts/paper-agent-cli.mjs +0 -35
  1361. package/scripts/paper-work-fleet-cli.mjs +0 -594
  1362. package/scripts/paper.mjs +0 -644
  1363. package/scripts/product-publication-intent.mjs +0 -129
  1364. package/scripts/promotion-channel-router.mjs +0 -139
  1365. package/scripts/promotion-identity-resolver.mjs +0 -129
  1366. package/scripts/publication-artifact-candidate.mjs +0 -122
  1367. package/scripts/publication-artifact.mjs +0 -67
  1368. package/scripts/publication-candidate-kind.mjs +0 -93
  1369. package/scripts/publication-candidate-sealer.mjs +0 -119
  1370. package/scripts/publication-package.mjs +0 -38
  1371. package/scripts/publication-registry-hydrate.mjs +0 -216
  1372. package/scripts/publication-reproducibility.mjs +0 -62
  1373. package/scripts/publication-settlement.mjs +0 -217
  1374. package/scripts/publish-source-ref-resolver.mjs +0 -113
  1375. package/scripts/reconcile-github-governance.mjs +0 -689
  1376. package/scripts/reconcile-release-governance.mjs +0 -368
  1377. package/scripts/release-asset-client.mjs +0 -91
  1378. package/scripts/release-candidate-adapter.mjs +0 -41
  1379. package/scripts/release-candidate-anchor-provenance.mjs +0 -99
  1380. package/scripts/release-candidate-resolver.mjs +0 -842
  1381. package/scripts/release-finalization-review.mjs +0 -53
  1382. package/scripts/release-line-dry-run.mjs +0 -53
  1383. package/scripts/release-line-policy.mjs +0 -231
  1384. package/scripts/release-propagation.mjs +0 -411
  1385. package/scripts/release-tail.mjs +0 -178
  1386. package/scripts/release-transaction.mjs +0 -212
  1387. package/scripts/resolve-artifact-coordinates.mjs +0 -174
  1388. package/scripts/resolve-artifact-transfer-mode.mjs +0 -126
  1389. package/scripts/resolve-build-configuration.mjs +0 -105
  1390. package/scripts/resolve-build-contract.mjs +0 -96
  1391. package/scripts/resolve-publish-gate.mjs +0 -33
  1392. package/scripts/resolve-publish-source.mjs +0 -99
  1393. package/scripts/resume-from-candidate-run.mjs +0 -1117
  1394. package/scripts/route-offline-runners.mjs +0 -237
  1395. package/scripts/run-candidate-body-prefix-renderer.mjs +0 -187
  1396. package/scripts/run-lifecycle-core.mjs +0 -850
  1397. package/scripts/run-lifecycle.mjs +0 -56
  1398. package/scripts/runtime-ref-core.mjs +0 -171
  1399. package/scripts/seal-artifact-signing-requests.mjs +0 -431
  1400. package/scripts/seal-macos-credential-input.mjs +0 -135
  1401. package/scripts/shifu-gate-profile.mjs +0 -374
  1402. package/scripts/sign-detached-artifact-requests.mjs +0 -237
  1403. package/scripts/source-verification-evidence.mjs +0 -344
  1404. package/scripts/stable-candidate-patrol.mjs +0 -527
  1405. package/scripts/stable-candidate-policy.mjs +0 -25
  1406. package/scripts/stable-candidate-qualification.mjs +0 -358
  1407. package/scripts/stable-release-gate.mjs +0 -351
  1408. package/scripts/stage-capsule-qualification.mjs +0 -528
  1409. package/scripts/tail-reseal.mjs +0 -416
  1410. package/scripts/universal-facade-maintainability.mjs +0 -91
  1411. package/scripts/universal-workflow-backflow.mjs +0 -212
  1412. package/scripts/universal-workflow-engine.mjs +0 -620
  1413. package/scripts/universal-workflow-self-dogfood.mjs +0 -212
  1414. package/scripts/validate-package-manager-contract.mjs +0 -24
  1415. package/scripts/verify-artifact-signing-results.mjs +0 -124
  1416. package/scripts/verify-publish-channel-ref.mjs +0 -125
  1417. package/scripts/verify-publish-source-lock.mjs +0 -37
  1418. package/scripts/verify-release-pr.mjs +0 -34
  1419. package/scripts/verify-version-state-delta.mjs +0 -175
  1420. package/scripts/verify-web-surface-publication-capability.mjs +0 -78
  1421. package/scripts/web-surface-core.mjs +0 -2603
  1422. package/scripts/web-surface-production-decision.mjs +0 -158
  1423. package/scripts/web-surface-production-release-pr.mjs +0 -712
  1424. package/scripts/web-surface-release-feedback.mjs +0 -358
  1425. package/scripts/web-surface-release-pr-review.mjs +0 -187
  1426. package/scripts/web-surface.mjs +0 -460
  1427. package/scripts/workflow-call-contract.mjs +0 -133
  1428. package/scripts/workflow-friction-report.mjs +0 -375
  1429. package/scripts/workflow-taxonomy.mjs +0 -507
  1430. /package/actions/{macos-credential-island → build/credential/macos-island}/README.md +0 -0
  1431. /package/actions/{release-candidate-promote → release/promotion/candidate}/README.md +0 -0
  1432. /package/actions/{release-tail → release/tail/settle}/README.md +0 -0
  1433. /package/packages/core/{adopter-delivery-gate.js → adoption/adopter-delivery-gate.js} +0 -0
  1434. /package/packages/core/{adopter-delivery-json.js → adoption/adopter-delivery-json.js} +0 -0
  1435. /package/packages/core/{adopter-delivery-passport.js → adoption/adopter-delivery-passport.js} +0 -0
  1436. /package/packages/core/{adopter-delivery-vectors.js → adoption/adopter-delivery-vectors.js} +0 -0
  1437. /package/packages/core/{adopter-delivery-vectors.json → adoption/adopter-delivery-vectors.json} +0 -0
  1438. /package/packages/core/{buildchain-agent-manuals.js → adoption/buildchain-agent-manuals.js} +0 -0
  1439. /package/packages/core/{kfd-adopter-category-driver.js → adoption/kfd-adopter-category-driver.js} +0 -0
  1440. /package/packages/core/{kfd-adopter-manifest.js → adoption/kfd-adopter-manifest.js} +0 -0
  1441. /package/packages/core/{kfd-gate.js → adoption/kfd-gate.js} +0 -0
  1442. /package/packages/core/{kfd-product-gates.js → adoption/kfd-product-gates.js} +0 -0
  1443. /package/packages/core/{artifact-signing-result.js → build/artifact-signing-result.js} +0 -0
  1444. /package/packages/core/{artifact-signing.js → build/artifact-signing.js} +0 -0
  1445. /package/packages/core/{build-configuration.js → build/build-configuration.js} +0 -0
  1446. /package/{scripts → packages/core/build/commands}/resolve-artifact-signing-upload-route.mjs +0 -0
  1447. /package/packages/core/{detached-artifact-signature.js → build/detached-artifact-signature.js} +0 -0
  1448. /package/{scripts/gate-profile-core.mjs → packages/core/build/gate/contracts.js} +0 -0
  1449. /package/packages/core/{portable-dev-cache.js → build/portable-dev-cache.js} +0 -0
  1450. /package/packages/core/{buildchain-channel-identity.js → consumer/buildchain-channel-identity.js} +0 -0
  1451. /package/packages/core/{floating-consumer-release-passport.js → consumer/floating-consumer-release-passport.js} +0 -0
  1452. /package/packages/core/{runtime-ref-resume-authority.js → consumer/runtime-ref-resume-authority.js} +0 -0
  1453. /package/packages/core/{buildchain-layout.js → contracts/buildchain-layout.js} +0 -0
  1454. /package/{bin/internal → packages/core/contracts}/command-registry.mjs +0 -0
  1455. /package/packages/core/{kungfu-temporal-fact.js → contracts/kungfu-temporal-fact.js} +0 -0
  1456. /package/packages/core/{surface-manifest.js → contracts/surface-manifest.js} +0 -0
  1457. /package/packages/core/{workflow-call-contract.js → contracts/workflow-call-contract.js} +0 -0
  1458. /package/{scripts → packages/core/dev-delivery/commands}/project-cut-merge-queue-admission.mjs +0 -0
  1459. /package/packages/core/{dev-delivery-authority-evidence.js → dev-delivery/dev-delivery-authority-evidence.js} +0 -0
  1460. /package/packages/core/{dev-delivery-authority-observation.js → dev-delivery/dev-delivery-authority-observation.js} +0 -0
  1461. /package/packages/core/{dev-delivery-authority-qualification.js → dev-delivery/dev-delivery-authority-qualification.js} +0 -0
  1462. /package/packages/core/{dev-delivery-authority-settlement.js → dev-delivery/dev-delivery-authority-settlement.js} +0 -0
  1463. /package/packages/core/{dev-delivery-common.js → dev-delivery/dev-delivery-common.js} +0 -0
  1464. /package/packages/core/{dev-delivery-execution-failure.js → dev-delivery/dev-delivery-execution-failure.js} +0 -0
  1465. /package/packages/core/{dev-delivery-execution-transfer.js → dev-delivery/dev-delivery-execution-transfer.js} +0 -0
  1466. /package/packages/core/{dev-delivery-landing-admission-core.js → dev-delivery/dev-delivery-landing-admission-core.js} +0 -0
  1467. /package/packages/core/{dev-delivery-landing-readback.js → dev-delivery/dev-delivery-landing-readback.js} +0 -0
  1468. /package/packages/core/{dev-delivery-landing-terminal-evidence.js → dev-delivery/dev-delivery-landing-terminal-evidence.js} +0 -0
  1469. /package/packages/core/{dev-delivery-landing-testing-port.js → dev-delivery/dev-delivery-landing-testing-port.js} +0 -0
  1470. /package/packages/core/{dev-delivery-native-execution.js → dev-delivery/dev-delivery-native-execution.js} +0 -0
  1471. /package/packages/core/{dev-delivery-process-boundary.js → dev-delivery/dev-delivery-process-boundary.js} +0 -0
  1472. /package/packages/core/{dev-delivery-provider-attempt.js → dev-delivery/dev-delivery-provider-attempt.js} +0 -0
  1473. /package/packages/core/{dev-delivery-provider-heartbeat.js → dev-delivery/dev-delivery-provider-heartbeat.js} +0 -0
  1474. /package/packages/core/{dev-delivery-warrant-cancellation.js → dev-delivery/dev-delivery-warrant-cancellation.js} +0 -0
  1475. /package/packages/core/{dev-delivery-warrant-qualification.js → dev-delivery/dev-delivery-warrant-qualification.js} +0 -0
  1476. /package/packages/core/{dev-delivery-warrant-settlement.js → dev-delivery/dev-delivery-warrant-settlement.js} +0 -0
  1477. /package/packages/core/{dev-delivery-writer-protocol-transition.js → dev-delivery/dev-delivery-writer-protocol-transition.js} +0 -0
  1478. /package/packages/core/{engineering-housekeeper-github-client.js → governance/engineering-housekeeper-github-client.js} +0 -0
  1479. /package/packages/core/{engineering-housekeeper-github.js → governance/engineering-housekeeper-github.js} +0 -0
  1480. /package/packages/core/{engineering-housekeeper.js → governance/engineering-housekeeper.js} +0 -0
  1481. /package/packages/core/{issue-reporting.js → governance/issue-reporting.js} +0 -0
  1482. /package/packages/core/{cache-evidence.js → observability/cache-evidence.js} +0 -0
  1483. /package/packages/core/{candidate-timeline.js → observability/candidate-timeline.js} +0 -0
  1484. /package/packages/core/{logging.js → observability/logging.js} +0 -0
  1485. /package/packages/core/{paper-work.js → paper/paper-work.js} +0 -0
  1486. /package/{scripts → packages/core/providers/commands}/aws-macos-jit-controller-core.mjs +0 -0
  1487. /package/{scripts → packages/core/providers/commands}/aws-macos-jit-controller.mjs +0 -0
  1488. /package/{scripts → packages/core/providers/commands}/aws-macos-jit-core.mjs +0 -0
  1489. /package/{scripts → packages/core/providers/commands}/aws-macos-jit-job-controller.mjs +0 -0
  1490. /package/{scripts → packages/core/providers/commands}/aws-macos-jit.mjs +0 -0
  1491. /package/{scripts → packages/core/providers/commands}/aws-windows-jit-campaign-core.mjs +0 -0
  1492. /package/{scripts → packages/core/providers/commands}/aws-windows-jit-controller-core.mjs +0 -0
  1493. /package/{scripts → packages/core/providers/commands}/aws-windows-jit-core.mjs +0 -0
  1494. /package/{scripts → packages/core/providers/commands}/aws-windows-jit.mjs +0 -0
  1495. /package/{scripts → packages/core/providers/commands}/github-output.mjs +0 -0
  1496. /package/packages/core/{oci-publication-graph.js → publication/oci-publication-graph.js} +0 -0
  1497. /package/packages/core/{publication-control-plane-audit.js → publication/publication-control-plane-audit.js} +0 -0
  1498. /package/packages/core/{publication-qualification.js → publication/publication-qualification.js} +0 -0
  1499. /package/packages/core/{publication-rehearsal-provider-bindings.js → publication/publication-rehearsal-provider-bindings.js} +0 -0
  1500. /package/packages/core/{publication-sealed-bundle.js → publication/publication-sealed-bundle.js} +0 -0
  1501. /package/packages/core/{channel-candidate.js → release/channel-candidate.js} +0 -0
  1502. /package/packages/core/{channel-promotion-baseline.js → release/channel-promotion-baseline.js} +0 -0
  1503. /package/{scripts → packages/core/release/commands}/promotion-routing-evidence.mjs +0 -0
  1504. /package/packages/core/{dev-alpha-active-release-train.js → release/dev-alpha-active-release-train.js} +0 -0
  1505. /package/packages/core/{dev-alpha-candidate-selection.js → release/dev-alpha-candidate-selection.js} +0 -0
  1506. /package/packages/core/{next-development-candidate-reservation.js → release/next-development-candidate-reservation.js} +0 -0
  1507. /package/packages/core/{next-development-controller.js → release/next-development-controller.js} +0 -0
  1508. /package/packages/core/{publish-transaction.js → release/publish-transaction.js} +0 -0
  1509. /package/packages/core/{release-activation-transaction.js → release/release-activation-transaction.js} +0 -0
  1510. /package/packages/core/{release-propagation-agent-entry.js → release/release-propagation-agent-entry.js} +0 -0
  1511. /package/packages/core/{release-propagation-capture.js → release/release-propagation-capture.js} +0 -0
  1512. /package/packages/core/{release-propagation-common.js → release/release-propagation-common.js} +0 -0
  1513. /package/packages/core/{release-propagation-execution-profile.js → release/release-propagation-execution-profile.js} +0 -0
  1514. /package/packages/core/{release-propagation-pickup.js → release/release-propagation-pickup.js} +0 -0
  1515. /package/packages/core/{release-propagation-push.js → release/release-propagation-push.js} +0 -0
  1516. /package/packages/core/{release-propagation-release.js → release/release-propagation-release.js} +0 -0
  1517. /package/packages/core/{release-propagation-stage-evidence.js → release/release-propagation-stage-evidence.js} +0 -0
  1518. /package/packages/core/{release-propagation-work-capture.js → release/release-propagation-work-capture.js} +0 -0
  1519. /package/packages/core/{release-propagation-work-constants.js → release/release-propagation-work-constants.js} +0 -0
  1520. /package/packages/core/{release-propagation-work-control.js → release/release-propagation-work-control.js} +0 -0
  1521. /package/packages/core/{release-propagation-work-transitions.js → release/release-propagation-work-transitions.js} +0 -0
  1522. /package/packages/core/{release-propagation-work.js → release/release-propagation-work.js} +0 -0
  1523. /package/packages/core/{release-propagation.js → release/release-propagation.js} +0 -0
  1524. /package/packages/core/{release-tail-product-capabilities.js → release/release-tail-product-capabilities.js} +0 -0
  1525. /package/packages/core/{release-train.js → release/release-train.js} +0 -0
  1526. /package/packages/core/{self-dogfood-version.js → release/self-dogfood-version.js} +0 -0
  1527. /package/packages/core/{stable-candidate-ledger.js → release/stable-candidate-ledger.js} +0 -0
  1528. /package/packages/core/{stable-release-gate.js → release/stable-release-gate.js} +0 -0
  1529. /package/packages/core/{tail-reseal-contract.js → release/tail-reseal-contract.js} +0 -0
  1530. /package/packages/core/{domain-wasm.js → runtime/domain-wasm.js} +0 -0
  1531. /package/packages/core/{spawn-command.js → runtime/spawn-command.js} +0 -0
  1532. /package/packages/core/{badges.js → web/badges.js} +0 -0
  1533. /package/{scripts → packages/core/web/commands}/web-surface-cloudfront-rewrite.mjs +0 -0
  1534. /package/{scripts → packages/core/web/commands}/web-surface-immutable-object.mjs +0 -0
  1535. /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
- };