@kungfu-tech/buildchain 4.0.2 → 4.0.3-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 (233) hide show
  1. package/AGENTS.md +4 -4
  2. package/CONTRIBUTING.md +34 -0
  3. package/README.md +1 -1
  4. package/architecture/agent-change-map.md +154 -147
  5. package/architecture/{v4-architecture-constitution.md → architecture-constitution.md} +11 -11
  6. package/architecture/{v3-core-mechanism-inventory.md → baseline-core-mechanism-inventory.md} +1 -1
  7. package/architecture/{v4-bootstrap-authority.json → bootstrap-authority.json} +3 -3
  8. package/architecture/{v3-v4-capability-closure.md → capability-parity-closure.md} +3 -3
  9. package/architecture/{v3-v4-live-capability-inventory.json → capability-parity-live-capability-inventory.json} +4 -4
  10. package/architecture/{v4-capability-state-machine-manifest.json → capability-state-machine-manifest.json} +2 -2
  11. package/architecture/{v4-capability-state-machine-manifest.schema.json → capability-state-machine-manifest.schema.json} +2 -2
  12. package/architecture/ci-lane-change-budget.json +18 -0
  13. package/architecture/{v4-cross-platform-adopter-qualification.json → cross-platform-adopter-qualification.json} +3 -3
  14. package/architecture/{v4-delivery-authority-parity.json → delivery-authority-parity.json} +16 -16
  15. package/architecture/{v4-delivery-warrant-shadow-bootstrap-plan.json → delivery-warrant-shadow-bootstrap-plan.json} +3 -3
  16. package/architecture/{v4-delivery-warrant-shadow-bootstrap-plan.md → delivery-warrant-shadow-bootstrap-plan.md} +7 -7
  17. package/architecture/{v4-floating-consumer-policy.md → floating-consumer-policy.md} +1 -1
  18. package/architecture/implementation-naming.json +1273 -0
  19. package/architecture/internal-capabilities.json +171 -169
  20. package/architecture/maintainability-debt.json +87 -82
  21. package/architecture/maintainability-policy.json +15 -15
  22. package/architecture/{v4-next-development-parity.json → next-development-parity.json} +8 -8
  23. package/architecture/{v4-partial-mutation-recovery-qualification.json → partial-mutation-recovery-qualification.json} +8 -8
  24. package/architecture/{v4-platform-stage-checkpoints.json → platform-stage-checkpoints.json} +2 -2
  25. package/architecture/{v4-provider-operation-journal-contract.json → provider-operation-journal-contract.json} +9 -9
  26. package/architecture/{v4-publication-rehearsal-parity.json → publication-rehearsal-parity.json} +4 -4
  27. package/architecture/{v4-release-activation-shadow-domain.json → release-activation-shadow-domain.json} +8 -8
  28. package/architecture/{v4-release-topology.json → release-topology.json} +112 -56
  29. package/architecture/{v4-release-train-parity.json → release-train-parity.json} +2 -2
  30. package/architecture/{v4-runtime-ref-resume-authority.json → runtime-ref-resume-authority.json} +1 -1
  31. package/architecture/{v4-runtime-semantic-closure.json → runtime-semantic-closure.json} +2 -2
  32. package/architecture/{v4-rust-libnode-bridge-evaluation.json → rust-libnode-bridge-evaluation.json} +3 -3
  33. package/architecture/{v4-rust-libnode-bridge-spike.md → rust-libnode-bridge-spike.md} +6 -6
  34. package/architecture/{v4-rust-wasm-production-authority.json → rust-wasm-production-authority.json} +11 -11
  35. package/architecture/{v4-stable-publication-fence.json → stable-publication-fence.json} +6 -6
  36. package/architecture/{v4-stage-capsule-contract.json → stage-capsule-contract.json} +1 -1
  37. package/architecture/{v4-stage-capsule-qualification.json → stage-capsule-qualification.json} +6 -6
  38. package/architecture/{v4-stage-capsule-resume-planner.json → stage-capsule-resume-planner.json} +2 -2
  39. package/architecture/{v4-stage-capsule-store-contract.json → stage-capsule-store-contract.json} +4 -4
  40. package/architecture/{v4-tail-reseal-parity.json → tail-reseal-parity.json} +28 -28
  41. package/architecture/{v4-universal-workflow-bootstrap.json → universal-workflow-bootstrap.json} +9 -4
  42. package/architecture/{v4-universal-workflow-fault-campaign.json → universal-workflow-fault-campaign.json} +8 -8
  43. package/architecture/{v4-universal-workflow-train-admission.json → universal-workflow-train-admission.json} +8 -8
  44. package/architecture/workflow-taxonomy.json +11 -0
  45. package/bin/buildchain.mjs +3 -3
  46. package/bin/internal/adopter-delivery-cli.mjs +9 -9
  47. package/contracts/fixtures/v4-tail-reseal-v1/valid.json +1 -1
  48. package/crates/{buildchain-v4-bridge → buildchain-host-bridge}/Cargo.lock +1 -1
  49. package/crates/{buildchain-v4-bridge → buildchain-host-bridge}/Cargo.toml +1 -1
  50. package/crates/{buildchain-v4-bridge → buildchain-host-bridge}/src/main.rs +3 -3
  51. package/dist/site/buildchain-contract.json +18 -18
  52. package/dist/site/buildchain-site.json +167 -71
  53. package/dist/site/capability-registry.json +5 -5
  54. package/dist/site/kfd-claims.json +226 -90
  55. package/dist/site/kfd-upstream-aggregate.json +1 -1
  56. package/dist/site/manual-registry.json +7 -7
  57. package/dist/site/node-api-registry.json +12929 -10491
  58. package/dist/site/page-registry.json +155 -59
  59. package/dist/site/public-surface-audit.json +65 -46
  60. package/dist/site/publication-authority-registry.json +27 -17
  61. package/dist/site/publication-registry.json +4 -4
  62. package/dist/site/release-provenance.json +18 -9
  63. package/dist/site/site-manifest.json +11 -11
  64. package/dist/site/workflow-registry.json +86 -52
  65. package/docs/MAP.md +4 -3
  66. package/docs/next-development-transition.md +24 -1
  67. package/docs/node-api-reference.md +435 -175
  68. package/docs/oci-publication.md +173 -0
  69. package/docs/publish-transaction.md +36 -3
  70. package/docs/release-flow.md +1 -1
  71. package/docs/reusable-build-surface.md +1 -1
  72. package/docs/v4-adopter-delivery.md +2 -2
  73. package/docs/v4-canonical-contracts.md +7 -7
  74. package/docs/v4-delivery-warrant-read-candidate.md +3 -3
  75. package/docs/v4-delivery-warrant-semantic-diff.md +3 -3
  76. package/docs/v4-production-release.md +8 -2
  77. package/docs/v4-publication-rehearsal.md +3 -3
  78. package/docs/v4-runtime-ref-resume-authority.md +2 -2
  79. package/docs/v4-rust-wasm-production-authority.md +6 -6
  80. package/docs/v4-stage-capsule.md +7 -7
  81. package/docs/v4-tail-reseal.md +1 -1
  82. package/docs/workflow-catalog.md +1 -0
  83. package/package.json +37 -26
  84. package/packages/compatibility/adopter-delivery.js +16 -0
  85. package/packages/compatibility/cross-platform-adopter-qualification.js +12 -0
  86. package/packages/compatibility/floating-consumer-policy.js +14 -0
  87. package/packages/compatibility/publication-qualification.js +11 -0
  88. package/packages/compatibility/publication-rehearsal.js +18 -0
  89. package/packages/compatibility/runtime-ref-resume-authority.js +13 -0
  90. package/packages/compatibility/tail-reseal-receipt.js +7 -0
  91. package/packages/compatibility/tail-reseal.js +11 -0
  92. package/packages/core/{v4-adopter-delivery-parity.js → adopter-delivery-parity.js} +12 -12
  93. package/packages/core/{v4-adopter-delivery.js → adopter-delivery.js} +24 -24
  94. package/packages/core/buildchain-contract.js +5 -5
  95. package/packages/core/buildchain-domain.wasm +0 -0
  96. package/packages/core/buildchain-publication-authority.js +1 -0
  97. package/packages/core/{v4-canonical-contracts.js → canonical-contracts.js} +32 -31
  98. package/packages/core/{v4-cross-platform-adopter-qualification.js → cross-platform-adopter-qualification.js} +19 -19
  99. package/packages/core/{v4-delivery-warrant-fixture-runner.js → delivery-warrant-fixture-runner.js} +36 -32
  100. package/packages/core/{v4-delivery-warrant-read-candidate.js → delivery-warrant-read-candidate.js} +40 -40
  101. package/packages/core/{v4-delivery-warrant-semantic-diff-gate.js → delivery-warrant-semantic-diff-gate.js} +58 -59
  102. package/packages/core/{v4-delivery-warrant-shadow-adapter.js → delivery-warrant-shadow-adapter.js} +15 -15
  103. package/packages/core/dev-delivery-execution-transfer.js +6 -6
  104. package/packages/core/dev-delivery-native-proof.js +12 -8
  105. package/packages/core/dev-delivery-warrant-legacy-recovery.js +1 -1
  106. package/packages/core/dev-delivery-warrant-native-compatibility.js +4 -4
  107. package/packages/core/dev-delivery-warrant-state.js +11 -11
  108. package/packages/core/dev-delivery-warrant.js +3 -3
  109. package/packages/core/domain-wasm-artifact.js +7 -0
  110. package/packages/core/{v4-domain-wasm.js → domain-wasm.js} +31 -31
  111. package/packages/core/{v4-floating-consumer-evidence.js → floating-consumer-evidence.js} +13 -13
  112. package/packages/core/{v4-floating-consumer-policy.js → floating-consumer-policy.js} +27 -29
  113. package/packages/core/{v4-floating-consumer-release-passport.js → floating-consumer-release-passport.js} +25 -25
  114. package/packages/core/index.js +4 -8
  115. package/packages/core/next-development-projection.js +24 -1
  116. package/packages/core/next-development-transition.js +5 -6
  117. package/packages/core/oci-compose-qualification.js +143 -0
  118. package/packages/core/oci-publication-bundle.js +281 -0
  119. package/packages/core/oci-publication-graph.js +206 -0
  120. package/packages/core/paper-runtime-channels.js +2 -2
  121. package/packages/core/paper.js +3 -3
  122. package/packages/core/partial-mutation-recovery-qualification.js +18 -0
  123. package/packages/core/{v4-platform-stage-checkpoints.js → platform-stage-checkpoints.js} +37 -37
  124. package/packages/core/{v4-product-publication.js → product-publication.js} +11 -9
  125. package/packages/core/{v4-protected-publication-source.js → protected-publication-source.js} +3 -3
  126. package/packages/core/provider-operation-journal.js +62 -0
  127. package/packages/core/{v4-provider-readback-idempotency.js → provider-readback-idempotency.js} +33 -33
  128. package/packages/core/public-export-compatibility.js +33 -0
  129. package/packages/core/publication-development.js +72 -0
  130. package/packages/core/{v4-publication-qualification.js → publication-qualification.js} +17 -17
  131. package/packages/core/{v4-publication-rehearsal-capsule.js → publication-rehearsal-capsule.js} +23 -23
  132. package/packages/core/publication-rehearsal-projection.js +2 -2
  133. package/packages/core/{v4-publication-rehearsal-provider-bindings.js → publication-rehearsal-provider-bindings.js} +4 -4
  134. package/packages/core/publication-rehearsal-runtime.js +21 -21
  135. package/packages/core/{v4-publication-rehearsal.js → publication-rehearsal.js} +33 -33
  136. package/packages/core/publication-sealed-bundle.js +78 -13
  137. package/packages/core/release-activation-shadow.js +32 -0
  138. package/packages/core/release-candidate.js +6 -6
  139. package/packages/core/{v4-release-invocation.js → release-invocation.js} +15 -15
  140. package/packages/core/release-passport.js +36 -36
  141. package/packages/core/release-tail-product-capabilities.js +9 -0
  142. package/packages/core/release-tail-provider-plane.js +10 -10
  143. package/packages/core/{v4-runtime-ref-resume-authority.js → runtime-ref-resume-authority.js} +36 -40
  144. package/packages/core/{v4-runtime-selector-persistence.js → runtime-selector-persistence.js} +7 -7
  145. package/packages/core/stable-publication-fence.js +28 -0
  146. package/packages/core/{v4-stage-capsule-local-store.js → stage-capsule-local-store.js} +56 -54
  147. package/packages/core/{v4-stage-capsule-qualification-campaign.js → stage-capsule-qualification-campaign.js} +37 -38
  148. package/packages/core/{v4-stage-capsule-qualification.js → stage-capsule-qualification.js} +28 -29
  149. package/packages/core/{v4-stage-capsule-resume-planner.js → stage-capsule-resume-planner.js} +29 -29
  150. package/packages/core/{v4-stage-capsule-store.js → stage-capsule-store.js} +59 -56
  151. package/packages/core/{v4-stage-capsule.js → stage-capsule.js} +45 -45
  152. package/packages/core/{v4-tail-reseal-contract.js → tail-reseal-contract.js} +6 -6
  153. package/packages/core/{v4-tail-reseal-github.js → tail-reseal-github.js} +12 -12
  154. package/packages/core/{v4-tail-reseal-receipt.js → tail-reseal-receipt.js} +22 -22
  155. package/packages/core/{v4-tail-reseal.js → tail-reseal.js} +29 -29
  156. package/packages/core/{v4-universal-workflow-bootstrap.js → universal-workflow-bootstrap.js} +23 -23
  157. package/scripts/{v4-architecture.mjs → architecture.mjs} +6 -6
  158. package/scripts/binary-publication-evidence.mjs +1 -1
  159. package/scripts/{v4-bridge-bootstrap.mjs → bridge-bootstrap.mjs} +14 -18
  160. package/scripts/{v4-bridge-evidence.mjs → bridge-evidence.mjs} +8 -8
  161. package/scripts/{build-v4-domain-wasm.mjs → build-domain-wasm.mjs} +6 -18
  162. package/scripts/{v3-v4-capability-catalog.mjs → capability-parity-catalog.mjs} +19 -19
  163. package/scripts/check-action-bundles.mjs +2 -2
  164. package/scripts/{check-v3-v4-capability-inventory.mjs → check-capability-parity-inventory.mjs} +42 -42
  165. package/scripts/check-core-mechanism-inventory.mjs +4 -1
  166. package/scripts/{check-v4-floating-consumer-policy-contract.mjs → check-floating-consumer-policy-contract.mjs} +8 -8
  167. package/scripts/check-implementation-naming.mjs +135 -0
  168. package/scripts/check-inventory.mjs +6 -5
  169. package/scripts/check-maintainability.mjs +9 -2
  170. package/scripts/{check-v4-public-dogfood-contract.mjs → check-public-dogfood-contract.mjs} +15 -15
  171. package/scripts/{check-v4-release-topology.mjs → check-release-topology.mjs} +53 -31
  172. package/scripts/{check-v4-runtime-semantic-closure.mjs → check-runtime-semantic-closure.mjs} +19 -16
  173. package/scripts/{check-v4-universal-workflow-bootstrap.mjs → check-universal-workflow-bootstrap.mjs} +14 -14
  174. package/scripts/{v4-consumer-policy.mjs → consumer-policy.mjs} +15 -15
  175. package/scripts/{copy-v4-domain-wasm.mjs → copy-domain-wasm.mjs} +3 -3
  176. package/scripts/{v4-cross-platform-adopter-qualification.mjs → cross-platform-adopter-qualification.mjs} +9 -9
  177. package/scripts/{v4-declarative-promotion-admission.mjs → declarative-promotion-admission.mjs} +4 -4
  178. package/scripts/dev-delivery-warrant-options.mjs +1 -1
  179. package/scripts/dev-delivery-warrant-store.mjs +29 -10
  180. package/scripts/dev-delivery-warrant.mjs +4 -4
  181. package/scripts/dev-pr-delivery-warrant.mjs +1 -1
  182. package/scripts/generate-channel-build-workflow.mjs +2 -2
  183. package/scripts/generate-channel-promotion-workflow.mjs +14 -31
  184. package/scripts/generate-release-candidate-passport.mjs +23 -23
  185. package/scripts/generate-site-bundle.mjs +17 -17
  186. package/scripts/{generate-v4-universal-workflow-facades.mjs → generate-universal-workflow-facades.mjs} +61 -21
  187. package/scripts/{v4-host-adapter.mjs → host-adapter.mjs} +1 -1
  188. package/scripts/implementation-references.mjs +25 -0
  189. package/scripts/init-repo.mjs +1 -1
  190. package/scripts/next-development-review.mjs +17 -11
  191. package/scripts/oci-compose-preview.mjs +261 -0
  192. package/scripts/{v4-platform-stage-checkpoint-rehearsal.mjs → platform-stage-checkpoint-rehearsal.mjs} +17 -17
  193. package/scripts/{v4-product-publication-intent.mjs → product-publication-intent.mjs} +16 -8
  194. package/scripts/publication-candidate-kind.mjs +93 -0
  195. package/scripts/publication-candidate-sealer.mjs +16 -1
  196. package/scripts/{v4-publication-rehearsal-fixture.mjs → publication-rehearsal-fixture.mjs} +5 -5
  197. package/scripts/{v4-publication-settlement.mjs → publication-settlement.mjs} +8 -8
  198. package/scripts/{v4-release-candidate-adapter.mjs → release-candidate-adapter.mjs} +4 -4
  199. package/scripts/release-candidate-resolver.mjs +15 -26
  200. package/scripts/release-tail.mjs +5 -5
  201. package/scripts/resume-from-candidate-run.mjs +35 -42
  202. package/scripts/site-capability-metadata.mjs +9 -0
  203. package/scripts/source-verification-evidence.mjs +7 -7
  204. package/scripts/{v4-stage-capsule-qualification.mjs → stage-capsule-qualification.mjs} +62 -62
  205. package/scripts/{v4-stage-capsule-resume-rehearsal.mjs → stage-capsule-resume-rehearsal.mjs} +6 -6
  206. package/scripts/{v4-tail-reseal-macos-rehearsal.mjs → tail-reseal-macos-rehearsal.mjs} +9 -9
  207. package/scripts/{v4-tail-reseal.mjs → tail-reseal.mjs} +19 -19
  208. package/scripts/universal-facade-maintainability.mjs +12 -3
  209. package/scripts/{v4-universal-workflow-backflow.mjs → universal-workflow-backflow.mjs} +10 -10
  210. package/scripts/{v4-universal-workflow-engine.mjs → universal-workflow-engine.mjs} +40 -38
  211. package/scripts/{v4-universal-workflow-self-dogfood.mjs → universal-workflow-self-dogfood.mjs} +12 -12
  212. package/scripts/verify-version-state-delta.mjs +4 -2
  213. package/scripts/{v4-warrant-shadow-plan.mjs → warrant-shadow-plan.mjs} +6 -6
  214. package/templates/universal-buildchain-bootstrap-recovery.yml +4 -4
  215. package/packages/core/buildchain-v4-domain.wasm +0 -0
  216. package/packages/core/v4-domain-wasm-artifact.js +0 -7
  217. package/packages/core/v4-partial-mutation-recovery-qualification.js +0 -18
  218. package/packages/core/v4-provider-operation-journal.js +0 -62
  219. package/packages/core/v4-release-activation-shadow.js +0 -32
  220. package/packages/core/v4-stable-publication-fence.js +0 -28
  221. /package/actions/{v4-release-candidate-promote → release-candidate-promote}/README.md +0 -0
  222. /package/architecture/{v4-adopter-delivery-parity.json → adopter-delivery-parity.json} +0 -0
  223. /package/architecture/{v3-core-mechanism-inventory.json → baseline-core-mechanism-inventory.json} +0 -0
  224. /package/architecture/{v4-canonical-contract-fixtures.json → canonical-contract-fixtures.json} +0 -0
  225. /package/architecture/{v4-compatibility-facts-parity.json → compatibility-facts-parity.json} +0 -0
  226. /package/architecture/{v4-delivery-warrant-shadow-bootstrap-plan.schema.json → delivery-warrant-shadow-bootstrap-plan.schema.json} +0 -0
  227. /package/architecture/{v4-delivery-warrant-shadow-fixtures.json → delivery-warrant-shadow-fixtures.json} +0 -0
  228. /package/architecture/{v4-delivery-warrant-shadow-fixtures.schema.json → delivery-warrant-shadow-fixtures.schema.json} +0 -0
  229. /package/architecture/{v4-exception-ledger.json → exception-ledger.json} +0 -0
  230. /package/architecture/{v4-exception-ledger.schema.json → exception-ledger.schema.json} +0 -0
  231. /package/architecture/{v4-floating-consumer-policy.json → floating-consumer-policy.json} +0 -0
  232. /package/architecture/{v4-publication-facade-patches.json → publication-facade-patches.json} +0 -0
  233. /package/architecture/{v4-release-invocation-fixtures.json → release-invocation-fixtures.json} +0 -0
@@ -2,10 +2,10 @@ import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import { pathToFileURL } from "node:url";
4
4
  import {
5
- createV4ReleaseInvocation,
6
- createV4ReleaseReceipt,
7
- createV4ReleaseTransaction,
8
- } from "../packages/core/v4-release-invocation.js";
5
+ createReleaseInvocation,
6
+ createReleaseReceipt,
7
+ createDomainReleaseTransaction,
8
+ } from "../packages/core/release-invocation.js";
9
9
  import {
10
10
  releaseTailRoot,
11
11
  validateReleaseTailTransaction,
@@ -26,8 +26,8 @@ export function verifyPublicationSettlement(
26
26
  providerState,
27
27
  productState,
28
28
  } = documents;
29
- const projected = createV4ReleaseInvocation(invocation);
30
- const roots = createV4ReleaseTransaction({
29
+ const projected = createReleaseInvocation(invocation);
30
+ const roots = createDomainReleaseTransaction({
31
31
  invocationRoot: projected.roots.invocationRoot,
32
32
  publisherRoot: projected.roots.publisherRoot,
33
33
  runtimeRoot: projected.roots.runtimeRoot,
@@ -48,7 +48,7 @@ export function verifyPublicationSettlement(
48
48
  ...roots.transaction,
49
49
  transactionRoot: roots.transactionRoot,
50
50
  }) ||
51
- createV4ReleaseReceipt(receiptBody).receiptRoot !== receiptRoot ||
51
+ createReleaseReceipt(receiptBody).receiptRoot !== receiptRoot ||
52
52
  receipt.transactionRoot !== roots.transactionRoot ||
53
53
  receipt.outcome !== "complete" ||
54
54
  passportRoot !== releaseTailRoot(passportBody) ||
@@ -202,7 +202,7 @@ async function main() {
202
202
 
203
203
  if (
204
204
  process.argv[1] &&
205
- path.basename(process.argv[1]) === "v4-publication-settlement.mjs" &&
205
+ path.basename(process.argv[1]) === "publication-settlement.mjs" &&
206
206
  import.meta.url === pathToFileURL(process.argv[1]).href
207
207
  )
208
208
  main().catch((error) => {
@@ -6,7 +6,7 @@ import { fileURLToPath, pathToFileURL } from "node:url";
6
6
 
7
7
  const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
8
8
 
9
- export function resolveV4ReleaseCandidateAdapter({
9
+ export function resolveReleaseCandidateAdapter({
10
10
  resumeCandidateRunId = "",
11
11
  } = {}) {
12
12
  const mode = String(resumeCandidateRunId || "").trim() ? "recovery" : "fresh";
@@ -19,11 +19,11 @@ export function resolveV4ReleaseCandidateAdapter({
19
19
  });
20
20
  }
21
21
 
22
- export function runV4ReleaseCandidateAdapter({
22
+ export function runReleaseCandidateAdapter({
23
23
  env = process.env,
24
24
  exec = execFileSync,
25
25
  } = {}) {
26
- const route = resolveV4ReleaseCandidateAdapter({
26
+ const route = resolveReleaseCandidateAdapter({
27
27
  resumeCandidateRunId: env.BUILDCHAIN_RESUME_CANDIDATE_RUN_ID,
28
28
  });
29
29
  exec(process.execPath, [path.join(root, route.script)], {
@@ -37,5 +37,5 @@ if (
37
37
  process.argv[1] &&
38
38
  import.meta.url === pathToFileURL(process.argv[1]).href
39
39
  ) {
40
- runV4ReleaseCandidateAdapter();
40
+ runReleaseCandidateAdapter();
41
41
  }
@@ -7,10 +7,10 @@ import { execFileSync } from "node:child_process";
7
7
  import { Readable } from "node:stream";
8
8
  import { pipeline } from "node:stream/promises";
9
9
  import { pathToFileURL } from "node:url";
10
- import { createResolvedPublicationSealedBundle } from "./publication-candidate-sealer.mjs";
10
+ import { resolveCandidatePublicationBundle } from "./publication-candidate-sealer.mjs";
11
11
  import { writeGitHubOutputs } from "./build-contract-core.mjs";
12
- import { v4ContentRoot } from "../packages/core/v4-canonical-contracts.js";
13
- import { v4PublicationQualificationRoot, validateV4PublicationQualificationReceipt } from "../packages/core/v4-publication-qualification.js";
12
+ import { domainContentRoot } from "../packages/core/canonical-contracts.js";
13
+ import { domainPublicationQualificationRoot, validatePublicationQualificationReceipt } from "../packages/core/publication-qualification.js";
14
14
 
15
15
  const DEFAULT_WORKFLOW_FILE = "self-build-fixture.yml";
16
16
  function env(name, fallback = "") {
@@ -436,7 +436,7 @@ function findDownloadedFile(root, filename) {
436
436
  return "";
437
437
  }
438
438
 
439
- function resolveV4PublicationEvidence(passportDir, passport, outputPath) {
439
+ function resolvePublicationEvidence(passportDir, passport, outputPath) {
440
440
  const stageCapsulesPath = findDownloadedFile(passportDir, "release-candidate-stage-capsules.json");
441
441
  const publicationQualificationPath = findDownloadedFile(passportDir, "release-candidate-publication-qualification.json");
442
442
  if (!passport.consumerPolicy?.receiptRoot) {
@@ -453,12 +453,12 @@ function resolveV4PublicationEvidence(passportDir, passport, outputPath) {
453
453
  }
454
454
  const stageCapsules = JSON.parse(fs.readFileSync(stageCapsulesPath, "utf8"));
455
455
  const qualification = JSON.parse(fs.readFileSync(publicationQualificationPath, "utf8"));
456
- validateV4PublicationQualificationReceipt(qualification, {
456
+ validatePublicationQualificationReceipt(qualification, {
457
457
  repository: passport.repository,
458
458
  candidateRoot: `sha256:${passport.candidateHash}`,
459
459
  sourceSha: passport.source.headSha,
460
- sourceRoot: v4ContentRoot("candidate-identity", passport.source),
461
- artifactRoot: v4PublicationQualificationRoot(stageCapsules.capsules.map(({ publicationArtifact }) => publicationArtifact)),
460
+ sourceRoot: domainContentRoot("candidate-identity", passport.source),
461
+ artifactRoot: domainPublicationQualificationRoot(stageCapsules.capsules.map(({ publicationArtifact }) => publicationArtifact)),
462
462
  policyDigest: passport.consumerPolicy.receiptRoot,
463
463
  });
464
464
  if (stageCapsules.publicationQualificationRoot !== qualification.receiptRoot) throw new Error("Stage Capsules do not bind the publication qualification receipt");
@@ -705,7 +705,7 @@ export async function resolveReleaseCandidateArtifacts({
705
705
  throw new Error("downloaded release-candidate artifacts did not contain release-candidate-passport.json and build-summary.json");
706
706
  }
707
707
  const passport = JSON.parse(fs.readFileSync(passportPath, "utf8"));
708
- const v4Publication = resolveV4PublicationEvidence(passportDir, passport, outputPath);
708
+ const domainPublication = resolvePublicationEvidence(passportDir, passport, outputPath);
709
709
  const platformManifestPaths = findDownloadedFiles(payloadDir, "manifest.json");
710
710
  const githubArtifactAttestationPolicyPaths = findDownloadedFiles(
711
711
  payloadDir,
@@ -725,23 +725,12 @@ export async function resolveReleaseCandidateArtifacts({
725
725
  const noun = publishArtifactKind === "npm" ? "npm package tarballs" : "platform manifests";
726
726
  throw new Error(`expected at least ${minimumPayloadCount} downloaded ${noun}, found ${downloadedRequiredArtifactCount}`);
727
727
  }
728
- const sealedBundle = publishArtifactKind === "npm"
729
- ? createResolvedPublicationSealedBundle({
730
- bundleRoot: payloadDir,
731
- repository: repoInfo.fullName,
732
- sourceSha: passport.source?.headSha,
733
- sourceTreeSha: passport.source?.treeHash,
734
- runtimeSha: releaseCandidateRuntimeSha(passport),
735
- releaseCandidateRoot: passport.candidateHash,
736
- npmArtifacts: npmTarballPaths.map((tarballPath) => ({
737
- path: tarballPath,
738
- ...readNpmPackageArtifact({ tarballPath, mainPackage: publishPackageMain }),
739
- })),
740
- releaseAssetPaths,
741
- })
742
- : undefined;
728
+ const sealedBundle = resolveCandidatePublicationBundle({ kind: publishArtifactKind, payloadDir, passport,
729
+ runtimeSha: releaseCandidateRuntimeSha(passport), releaseAssetPaths,
730
+ npmArtifacts: npmTarballPaths.map((tarballPath) => ({ path: tarballPath,
731
+ ...readNpmPackageArtifact({ tarballPath, mainPackage: publishPackageMain }) })) });
743
732
  const manifests = platformManifestPaths.map((manifestPath) => JSON.parse(fs.readFileSync(manifestPath, "utf8"))), publicationVersion = resolveFreshPublicationVersion({ sealedBundle, candidateVersion: passport.target?.version });
744
- const generatedRequiredArtifacts = generatePublishRequiredArtifacts({
733
+ const generatedRequiredArtifacts = sealedBundle?.requiredArtifacts || generatePublishRequiredArtifacts({
745
734
  manifests,
746
735
  version: publicationVersion,
747
736
  kind: publishArtifactKind,
@@ -759,7 +748,7 @@ export async function resolveReleaseCandidateArtifacts({
759
748
  paths: {
760
749
  passport: outputPath(passportPath),
761
750
  buildSummary: outputPath(buildSummaryPath),
762
- ...v4Publication.paths,
751
+ ...domainPublication.paths,
763
752
  payloads: outputPath(payloadDir),
764
753
  platformManifests: platformManifestPaths.map(outputPath),
765
754
  githubArtifactAttestationPolicies: githubArtifactAttestationPolicyPaths.map(outputPath),
@@ -777,7 +766,7 @@ export async function resolveReleaseCandidateArtifacts({
777
766
  githubArtifactAttestationPolicyCount: githubArtifactAttestationPolicyPaths.length,
778
767
  npmTarballCount: npmTarballPaths.length,
779
768
  publishRequiredArtifacts: generatedRequiredArtifacts,
780
- publicationQualificationRoot: v4Publication.publicationQualificationRoot,
769
+ publicationQualificationRoot: domainPublication.publicationQualificationRoot,
781
770
  };
782
771
  }
783
772
 
@@ -12,9 +12,9 @@ import {
12
12
  } from "../packages/core/release-tail-provider-plane.js";
13
13
  import { diagnoseLegacyReleaseTailHooks } from "../packages/core/release-tail-compatibility.js";
14
14
  import {
15
- V4_PUBLICATION_REHEARSAL_EVIDENCE_CONTRACT,
16
- executeV4PublicationRehearsal,
17
- } from "../packages/core/v4-publication-rehearsal.js";
15
+ DOMAIN_PUBLICATION_REHEARSAL_EVIDENCE_CONTRACT,
16
+ executeDomainPublicationRehearsal,
17
+ } from "../packages/core/publication-rehearsal.js";
18
18
 
19
19
  function flag(args, name, fallback = "") {
20
20
  const index = args.indexOf(`--${name}`);
@@ -76,7 +76,7 @@ export async function runReleaseTailCli(args = process.argv.slice(2)) {
76
76
  error.code = "ambient-environment-forbidden";
77
77
  throw error;
78
78
  }
79
- const result = await executeV4PublicationRehearsal({
79
+ const result = await executeDomainPublicationRehearsal({
80
80
  capsule: readJson(capsulePath, "--capsule"),
81
81
  candidateRoot,
82
82
  mode: rehearsalMode,
@@ -89,7 +89,7 @@ export async function runReleaseTailCli(args = process.argv.slice(2)) {
89
89
  } catch (error) {
90
90
  output(
91
91
  {
92
- schema: V4_PUBLICATION_REHEARSAL_EVIDENCE_CONTRACT,
92
+ schema: DOMAIN_PUBLICATION_REHEARSAL_EVIDENCE_CONTRACT,
93
93
  status: "rejected",
94
94
  code: error.code || "publication-rehearsal-runtime-error",
95
95
  message: error.message,
@@ -6,6 +6,8 @@ import path from "node:path";
6
6
  import { execFileSync } from "node:child_process";
7
7
  import { fileURLToPath, pathToFileURL } from "node:url";
8
8
 
9
+ import { resolveOciCandidate, resolveRecoveredPublicationVersion, resolveRecoveredCandidateVersion } from "./publication-candidate-kind.mjs";
10
+ export { resolveRecoveredPublicationVersion, resolveRecoveredCandidateVersion } from "./publication-candidate-kind.mjs";
9
11
  import { writeGitHubOutputs } from "./build-contract-core.mjs";
10
12
  import { compareSemver } from "./publication-registry-hydrate.mjs";
11
13
  import { normalizeAnchorProvenance, normalizeCandidateRun, recoverCandidateProvenance } from "./release-candidate-anchor-provenance.mjs";
@@ -31,15 +33,15 @@ import {
31
33
  } from "../packages/core/publication-artifact-candidate.js";
32
34
  import { createPublicationSealedBundle } from "../packages/core/publication-sealed-bundle.js";
33
35
  import { releaseTransactionStateRef } from "../packages/core/publish-transaction.js";
34
- import { v4ContentRoot } from "../packages/core/v4-canonical-contracts.js";
35
- import { validateV4StageCapsule } from "../packages/core/v4-stage-capsule.js";
36
+ import { domainContentRoot } from "../packages/core/canonical-contracts.js";
37
+ import { validateStageCapsule } from "../packages/core/stage-capsule.js";
36
38
  import {
37
- authorizeV4RuntimeSelection,
38
- createV4RuntimeResumeLineage,
39
- scanV4RuntimeSelectorPersistence,
40
- v4RuntimeResumeDocumentRoot,
41
- verifyV4RuntimeAuthorizationReceipt,
42
- } from "../packages/core/v4-runtime-ref-resume-authority.js";
39
+ authorizeRuntimeSelection,
40
+ createRuntimeResumeLineage,
41
+ scanRuntimeSelectorPersistence,
42
+ runtimeResumeDocumentRoot,
43
+ verifyRuntimeAuthorizationReceipt,
44
+ } from "../packages/core/runtime-ref-resume-authority.js";
43
45
 
44
46
  function env(name, fallback = "") { return process.env[name] || fallback; }
45
47
  function requiredEnv(name) {
@@ -117,7 +119,7 @@ export function trackedRuntimePersistenceScan({
117
119
  )
118
120
  .split(/\r?\n/)
119
121
  .filter((entry) => /\.(?:json|toml|ya?ml)$/u.test(entry));
120
- return scanV4RuntimeSelectorPersistence({ root: runtimeRoot, paths });
122
+ return scanRuntimeSelectorPersistence({ root: runtimeRoot, paths });
121
123
  }
122
124
 
123
125
  export function verifyReleaseCandidateStageCapsules({ sidecar, passport, downloads }) {
@@ -136,7 +138,7 @@ export function verifyReleaseCandidateStageCapsules({ sidecar, passport, downloa
136
138
  const expectedAttempt =
137
139
  `github-run:${passport.workflow.runId}:attempt:${passport.workflow.runAttempt}`;
138
140
  if (
139
- sidecar.root !== v4RuntimeResumeDocumentRoot(payload) ||
141
+ sidecar.root !== runtimeResumeDocumentRoot(payload) ||
140
142
  sidecar.repository !== passport.repository ||
141
143
  sidecar.source?.sha !== passport.source.headSha ||
142
144
  sidecar.source?.treeSha !== passport.source.treeHash ||
@@ -158,7 +160,7 @@ export function verifyReleaseCandidateStageCapsules({ sidecar, passport, downloa
158
160
  throw new Error("release-candidate Stage Capsule platform set is incomplete");
159
161
  }
160
162
  return entries.map((entry) => {
161
- validateV4StageCapsule(entry.capsule);
163
+ validateStageCapsule(entry.capsule);
162
164
  const download = artifactByName.get(entry.artifactName);
163
165
  const artifact = entry.artifact;
164
166
  if (
@@ -174,9 +176,9 @@ export function verifyReleaseCandidateStageCapsules({ sidecar, passport, downloa
174
176
  new Date(download.artifact.expires_at).toISOString() ||
175
177
  entry.capsule.identity.policyRoot !== sidecar.consumerPolicyReceiptRoot ||
176
178
  entry.capsule.identity.sourceRoot !==
177
- v4ContentRoot("candidate-identity", passport.source) ||
179
+ domainContentRoot("candidate-identity", passport.source) ||
178
180
  entry.capsule.identity.runtimeRoot !==
179
- v4ContentRoot("candidate-identity", { sha: passport.buildchain.sha })
181
+ domainContentRoot("candidate-identity", { sha: passport.buildchain.sha })
180
182
  ) {
181
183
  throw new Error(
182
184
  `Stage Capsule ${entry.platform} does not bind the verified provider artifact`,
@@ -196,7 +198,7 @@ export function verifyReleaseCandidateStageCapsules({ sidecar, passport, downloa
196
198
  });
197
199
  }
198
200
 
199
- export function validateV4RuntimeResumePublicReadback({
201
+ export function validateRuntimeResumePublicReadback({
200
202
  targetRef,
201
203
  targetSha,
202
204
  targetVersion,
@@ -273,7 +275,7 @@ export async function readPublicResumeState({
273
275
  if (targetPackageFile?.type !== "file" || targetPackageFile.encoding !== "base64" || !targetPackageFile.content)
274
276
  throw new Error("cross-runtime recovery requires protected target version state");
275
277
  const targetVersion = JSON.parse(Buffer.from(String(targetPackageFile.content).replace(/\s/g, ""), "base64").toString("utf8")).version;
276
- validateV4RuntimeResumePublicReadback({ targetRef, targetSha, targetVersion, alphaSha,
278
+ validateRuntimeResumePublicReadback({ targetRef, targetSha, targetVersion, alphaSha,
277
279
  exactTagSha, tagLineage, runtimeLineage, floatingTargetLineage, runtimeSha,
278
280
  version, transaction, main, npm });
279
281
  const body = {
@@ -296,10 +298,10 @@ export async function readPublicResumeState({
296
298
  distTagIntegrity: npm.versions[npm["dist-tags"].alpha].dist.integrity,
297
299
  },
298
300
  };
299
- return { ...body, root: v4RuntimeResumeDocumentRoot(body) };
301
+ return { ...body, root: runtimeResumeDocumentRoot(body) };
300
302
  }
301
303
 
302
- export const resolveV4RuntimeResumePublicRuntimeSha = (material) =>
304
+ export const resolveRuntimeResumePublicRuntimeSha = (material) =>
303
305
  material?.buildAttempt?.runtimeSha || "";
304
306
 
305
307
  function prepareRuntimeResumeEvidence({
@@ -313,14 +315,14 @@ function prepareRuntimeResumeEvidence({
313
315
  recovery,
314
316
  outputDir,
315
317
  }) {
316
- const authorizationPath = path.resolve(".buildchain/release-candidate/v4-runtime-authorization.json");
318
+ const authorizationPath = path.resolve(".buildchain/release-candidate/runtime-authorization.json");
317
319
  const delegatedRaw = env("BUILDCHAIN_RUNTIME_AUTHORIZATION_JSON").trim();
318
320
  const delegatedRoot = env("BUILDCHAIN_RUNTIME_AUTHORIZATION_ROOT").trim();
319
321
  const authorizationFileExists = fs.existsSync(authorizationPath);
320
322
  if (!authorizationFileExists && (!delegatedRaw || !delegatedRoot)) throw new Error("cross-runtime recovery requires a fresh runtime authorization receipt");
321
323
  const delegated = authorizationFileExists ? readOnlyJson([{ absolutePath: authorizationPath }], "runtime authorization") : JSON.parse(delegatedRaw);
322
324
  if (!authorizationFileExists && delegated.receiptRoot !== delegatedRoot) throw new Error("fresh recovery runtime authorization handoff root mismatch");
323
- const delegatedVerification = verifyV4RuntimeAuthorizationReceipt({
325
+ const delegatedVerification = verifyRuntimeAuthorizationReceipt({
324
326
  receipt: delegated.receipt,
325
327
  receiptRoot: delegated.receiptRoot,
326
328
  repository: repoInfo.fullName,
@@ -332,7 +334,7 @@ function prepareRuntimeResumeEvidence({
332
334
  );
333
335
  }
334
336
  const policy = passport.consumerPolicy.receipt;
335
- const authorization = authorizeV4RuntimeSelection({
337
+ const authorization = authorizeRuntimeSelection({
336
338
  repository: repoInfo.fullName,
337
339
  eventName: "workflow_dispatch",
338
340
  mode: "resume",
@@ -362,7 +364,7 @@ function prepareRuntimeResumeEvidence({
362
364
  rebuildPlatforms: [],
363
365
  skippedBuildStages: recovery.receipt.skippedBuildStages,
364
366
  };
365
- const plan = { ...planBody, root: v4RuntimeResumeDocumentRoot(planBody) };
367
+ const plan = { ...planBody, root: runtimeResumeDocumentRoot(planBody) };
366
368
  const materialBody = {
367
369
  schemaVersion: 1,
368
370
  contract: "kungfu-buildchain-v4-runtime-resume-material/v1",
@@ -389,7 +391,7 @@ function prepareRuntimeResumeEvidence({
389
391
  };
390
392
  const material = {
391
393
  ...materialBody,
392
- root: v4RuntimeResumeDocumentRoot(materialBody),
394
+ root: runtimeResumeDocumentRoot(materialBody),
393
395
  };
394
396
  for (const [name, value] of [
395
397
  ["v4-runtime-resume-plan.json", plan],
@@ -416,7 +418,7 @@ export async function finalizeRuntimeResumeEvidence({
416
418
  delete body.root;
417
419
  if (
418
420
  material.contract !== "kungfu-buildchain-v4-runtime-resume-material/v1" ||
419
- material.root !== v4RuntimeResumeDocumentRoot(body)
421
+ material.root !== runtimeResumeDocumentRoot(body)
420
422
  ) {
421
423
  throw new Error("cross-runtime resume material root mismatch");
422
424
  }
@@ -436,14 +438,14 @@ export async function finalizeRuntimeResumeEvidence({
436
438
  const readback = await readPublicResumeState({
437
439
  repoInfo,
438
440
  targetRef,
439
- runtimeSha: resolveV4RuntimeResumePublicRuntimeSha(material),
441
+ runtimeSha: resolveRuntimeResumePublicRuntimeSha(material),
440
442
  version,
441
443
  transaction,
442
444
  token,
443
445
  apiUrl,
444
446
  fetchImpl,
445
447
  });
446
- const resumed = createV4RuntimeResumeLineage({
448
+ const resumed = createRuntimeResumeLineage({
447
449
  authorization: material.authorization,
448
450
  authorizationRoot: material.authorizationRoot,
449
451
  buildAttempt: material.buildAttempt,
@@ -695,22 +697,6 @@ export function createRecoveredPublicationCandidate({
695
697
  };
696
698
  return { ...payload, candidateDigest: publicationArtifactCandidateDigest(payload) };
697
699
  }
698
- export function resolveRecoveredPublicationVersion({ artifactVersion, channel, rematerializeOnResume = false } = {}) {
699
- const version = String(artifactVersion || "").trim(), match = version.match(/^(\d+\.\d+\.\d+)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/u);
700
- if (!match) throw new Error(`recovered npm artifact has invalid publication version: ${version || "<empty>"}`);
701
- return channel === "release" && rematerializeOnResume ? match[1] : version;
702
- }
703
- export function resolveRecoveredCandidateVersion({ artifactVersion, publicationVersion, channel, rematerializeOnResume = false, targetRef = "", candidateRef = "" } = {}) {
704
- const version = String(artifactVersion || "").trim(), target = String(targetRef || "").replace(/^refs\/heads\//u, ""), candidate = String(candidateRef || "").replace(/^refs\/heads\//u, "");
705
- if (channel !== "release" || !rematerializeOnResume) return version;
706
- const prefix = `publish-gate/${target}/`;
707
- if (!target || !candidate.startsWith(prefix)) throw new Error(`stable recovery candidate ref must descend from ${prefix || "publish-gate/<target>/"}`);
708
- const candidateVersion = candidate.slice(prefix.length);
709
- if (!/^\d+\.\d+\.\d+-alpha\.\d+$/u.test(candidateVersion)) throw new Error(`stable recovery candidate ref must bind an exact alpha version, got ${candidateVersion || "<empty>"}`);
710
- if (candidateVersion.replace(/-alpha\.\d+$/u, "") !== publicationVersion) throw new Error(`stable recovery candidate ${candidateVersion} does not match publication ${publicationVersion || "<empty>"}`);
711
- if ((version.match(/^(\d+\.\d+\.\d+)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/u)?.[1] || "") !== publicationVersion) throw new Error(`recovered npm artifact version ${version || "<empty>"} does not match publication ${publicationVersion}`);
712
- return candidateVersion;
713
- }
714
700
  export function createRecoveredPublication({ downloads, bundleRoot, repository, passport, candidateRuntimeSha, publishArtifactKind, publishPackageMain, releasePatterns, platformManifests, channel, targetRef = "", candidateRef = "", rematerializeOnResume = false }) {
715
701
  const allFiles = downloads.flatMap((download) => download.files.map((file) => ({ path: path.relative(bundleRoot, file.absolutePath).split(path.sep).join("/"),
716
702
  size: file.size, sha256: file.sha256.replace(/^sha256:/, ""), absolutePath: file.absolutePath })))
@@ -718,6 +704,13 @@ export function createRecoveredPublication({ downloads, bundleRoot, repository,
718
704
  const kind = String(publishArtifactKind || "npm");
719
705
  const releaseMatchers = splitPatterns(releasePatterns).map(patternMatcher);
720
706
  const releaseAssets = allFiles.filter((file) => releaseMatchers.some((matcher) => matcher.test(path.basename(file.path))));
707
+ if (kind === "oci") {
708
+ createRecoveredPublicationCandidate({ allFiles, repository, passport, candidateRuntimeSha });
709
+ const sealed = resolveOciCandidate({ payloadRoot: bundleRoot, passport });
710
+ return { manifest: sealed.manifest, bundleRoot: sealed.root, npmArtifacts: [], allFiles, releaseAssets,
711
+ version: sealed.manifest.version, candidateVersion: sealed.manifest.version,
712
+ publishRequiredArtifacts: sealed.requiredArtifacts };
713
+ }
721
714
  if (kind !== "npm") {
722
715
  createRecoveredPublicationCandidate({ allFiles, repository, passport, candidateRuntimeSha });
723
716
  const version = String(passport.target?.version || "").trim();
@@ -1019,7 +1012,7 @@ export async function resumeFromCandidateRun({
1019
1012
  npmTarballs: tarballs,
1020
1013
  releaseAssets: publication.releaseAssets.map((asset) => outputPath(asset.absolutePath)),
1021
1014
  publishRequiredArtifacts: outputPath(requiredArtifactsPath),
1022
- sealedBundleRoot: publication.manifest ? outputPath(bundleRoot) : "",
1015
+ sealedBundleRoot: publication.manifest ? outputPath(publication.bundleRoot || bundleRoot) : "",
1023
1016
  sealedBundleManifest: publication.manifest ? outputPath(sealedManifestPath) : "",
1024
1017
  recoveryReceipt: outputPath(recoveryReceiptPath),
1025
1018
  stageCapsules: stageCapsuleFile ? outputPath(stageCapsuleFile.absolutePath) : "",
@@ -206,6 +206,7 @@ export function nodeApiMeta(exportName) {
206
206
  "./publication-artifact": { group: "reusable-build", summary: "Publication artifact manifest, source bundle, and publication passport APIs." },
207
207
  "./publication-package": { group: "reusable-build", summary: "Publication npm package synthesis APIs for Buildchain-managed paper release presets." },
208
208
  "./publication-reproducibility": { group: "reusable-build", summary: "Two-clean-build publication byte reproducibility receipt APIs." },
209
+ "./oci-publication": { group: "reusable-build", summary: "Sealed OCI image family verification, provenance, and smoke evidence APIs." },
209
210
  "./publication-sealed-bundle": { group: "reusable-build", summary: "Build-once publication bundle manifests and exact-byte resume verification APIs." },
210
211
  "./paper": { group: "reusable-build", summary: "Unified Paper work, fleet, scaffold, preflight, npm bootstrap, build, Alpha, status, and resume planning APIs." },
211
212
  "./publication-authority": { group: "release-passport-trust", summary: "Sealed publication authority registry, runner provenance, control-plane audit, admission, and independent verification APIs." },
@@ -226,13 +227,19 @@ export function nodeApiMeta(exportName) {
226
227
  "./release-passport-contract": { group: "release-passport-trust", summary: "Standalone release passport JSON Schema, ownership/check manifest, and structural validation APIs." },
227
228
  "./release-candidate": { group: "reusable-build", summary: "PR-stage release-candidate artifact, passport, and promote-only resolver APIs." },
228
229
  "./v4-floating-consumer-policy": { group: "governance-versioning", summary: "Semantic floating-selector admission, dual-lock receipt, and independent v4 consumer certification APIs." },
230
+ "./floating-consumer-policy": { group: "governance-versioning", summary: "Semantic floating-selector admission, dual-lock receipt, and independent v4 consumer certification APIs." },
229
231
  "./v4-runtime-ref-resume-authority": { group: "release-passport-trust", summary: "Transient exact-runtime authorization, persisted-selector rejection, fresh-attempt Stage Capsule reuse, and A+B Passport lineage APIs." },
232
+ "./runtime-ref-resume-authority": { group: "release-passport-trust", summary: "Transient exact-runtime authorization, persisted-selector rejection, fresh-attempt Stage Capsule reuse, and A+B Passport lineage APIs." },
230
233
  "./v4-tail-reseal": { group: "release-passport-trust", summary: "Effect-pure retained Stage Capsule validation and explicit Warrant-, credential-, and release-tail-fenced macOS reseal planning APIs." },
234
+ "./tail-reseal": { group: "release-passport-trust", summary: "Effect-pure retained Stage Capsule validation and explicit Warrant-, credential-, and release-tail-fenced macOS reseal planning APIs." },
231
235
  "./v4-tail-reseal-receipt": { group: "release-passport-trust", summary: "Four-platform byte readback, standard candidate Passport binding, and terminal v4 tail-reseal receipt APIs." },
236
+ "./tail-reseal-receipt": { group: "release-passport-trust", summary: "Four-platform byte readback, standard candidate Passport binding, and terminal v4 tail-reseal receipt APIs." },
232
237
  "./v4-publication-rehearsal": { group: "release-passport-trust", summary: "Content-addressed v4 publication rehearsal capsules, shared production release-tail execution, replay, provider observation, and fail-closed verification APIs." },
238
+ "./publication-rehearsal": { group: "release-passport-trust", summary: "Content-addressed v4 publication rehearsal capsules, shared production release-tail execution, replay, provider observation, and fail-closed verification APIs." },
233
239
  "./publication-rehearsal-runtime": { group: "release-passport-trust", summary: "Compatibility names for the source-bound v4 publication rehearsal runtime and explicit rooted migration diagnostics." },
234
240
  "./publication-rehearsal-projection": { group: "release-passport-trust", summary: "Compatibility projection helpers that emit only the current source-bound v4 publication rehearsal configuration and workflow." },
235
241
  "./v4-publication-qualification": { group: "release-passport-trust", summary: "Sealed v4 candidate, source, artifact, policy, freshness, and command-free promotion admission APIs." },
242
+ "./publication-qualification": { group: "release-passport-trust", summary: "Sealed v4 candidate, source, artifact, policy, freshness, and command-free promotion admission APIs." },
236
243
  "./adopter-delivery-gate": { group: "reusable-build", summary: "Protocol-neutral adopter delivery gate, driver interface, artifact profiles, and canonical result APIs." },
237
244
  "./kfd-adopter-category-driver": { group: "kfd-trust", summary: "Published KFD adopter-category driver and exact package-cut verification APIs." },
238
245
  "./buildchain-delivery-infrastructure": { group: "reusable-build", summary: "Public delivery-infrastructure instance creation and KFD verification APIs." },
@@ -243,7 +250,9 @@ export function nodeApiMeta(exportName) {
243
250
  "./adopter-delivery-passport": { group: "release-passport-trust", summary: "Non-authoritative adopter delivery Release Passport binding and substitution checks." },
244
251
  "./adopter-delivery-vectors": { group: "reusable-build", summary: "Rooted public adopter delivery conformance vector suite APIs." },
245
252
  "./v4-adopter-delivery": { group: "reusable-build", summary: "Public v4 adopter delivery runtime, exact readback, N-1 lineage, and published archive verification APIs." },
253
+ "./adopter-delivery": { group: "reusable-build", summary: "Public v4 adopter delivery runtime, exact readback, N-1 lineage, and published archive verification APIs." },
246
254
  "./v4-cross-platform-adopter-qualification": { group: "reusable-build", summary: "Exact-source v3 capability matrix reports, executed failure and recovery evidence, and cross-platform public adopter qualification APIs." },
255
+ "./cross-platform-adopter-qualification": { group: "reusable-build", summary: "Exact-source v3 capability matrix reports, executed failure and recovery evidence, and cross-platform public adopter qualification APIs." },
247
256
  "./release-candidate-recovery": { group: "release-passport-trust", summary: "Fail-closed verification and immutable receipts for reusing a successful sealed candidate run without rebuilding product payloads." },
248
257
  "./release-train": { group: "governance-versioning", summary: "Frozen Release Cut identity, rooted Release Train transitions, Dev observations, supersession, replay, and legacy read compatibility APIs." },
249
258
  "./next-development-transition": { group: "governance-versioning", summary: "Provider-neutral completed-Alpha preservation and rooted next-development state, version-model, idempotency, and local materialization APIs." },
@@ -3,7 +3,7 @@ import fs from "node:fs";
3
3
  import path from "node:path";
4
4
  import { execFileSync } from "node:child_process";
5
5
  import { pathToFileURL } from "node:url";
6
- import { invokeV4DomainWasm } from "../packages/core/v4-domain-wasm.js";
6
+ import { invokeDomainWasm } from "../packages/core/domain-wasm.js";
7
7
 
8
8
  const workflow = ".github/workflows/self-build-verify.yml";
9
9
  const proofPath = ".buildchain/source-verification/evidence.json";
@@ -46,14 +46,14 @@ export function verificationIdentity({
46
46
  "scripts/verify-version-state-delta.mjs",
47
47
  ]),
48
48
  runtimeRoot: named([
49
- "packages/core/buildchain-v4-domain.wasm",
50
- "packages/core/v4-domain-wasm-artifact.js",
49
+ "packages/core/buildchain-domain.wasm",
50
+ "packages/core/domain-wasm-artifact.js",
51
51
  ]),
52
52
  dependencyRoot: named([
53
53
  "pnpm-lock.yaml",
54
54
  "pnpm-workspace.yaml",
55
- "crates/buildchain-v4-contracts/Cargo.lock",
56
- "crates/buildchain-v4-bridge/Cargo.lock",
55
+ "crates/buildchain-domain-contracts/Cargo.lock",
56
+ "crates/buildchain-host-bridge/Cargo.lock",
57
57
  ]),
58
58
  toolchainRoot: hash(
59
59
  JSON.stringify([
@@ -99,11 +99,11 @@ export function verificationIdentity({
99
99
  }
100
100
 
101
101
  export function planVerification(input) {
102
- return invokeV4DomainWasm("source-verification-plan", input);
102
+ return invokeDomainWasm("source-verification-plan", input);
103
103
  }
104
104
 
105
105
  export function sealVerification(input) {
106
- return invokeV4DomainWasm("source-verification-seal", input);
106
+ return invokeDomainWasm("source-verification-seal", input);
107
107
  }
108
108
 
109
109
  const api = (endpoint, binary = false) =>