@kungfu-tech/buildchain 4.0.2-alpha.2 → 4.0.2-alpha.4

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 (39) hide show
  1. package/architecture/agent-change-map.md +3 -0
  2. package/architecture/internal-capabilities.json +2 -0
  3. package/architecture/maintainability-debt.json +17 -15
  4. package/architecture/maintainability-policy.json +6 -6
  5. package/architecture/v3-core-mechanism-inventory.json +1 -0
  6. package/architecture/v4-delivery-warrant-shadow-fixtures.json +5 -5
  7. package/architecture/v4-release-invocation-fixtures.json +20 -0
  8. package/architecture/v4-release-topology.json +85 -80
  9. package/architecture/v4-runtime-semantic-closure.json +4 -1
  10. package/contracts/v4-release-invocation-v1.schema.json +50 -2
  11. package/dist/site/buildchain-contract.json +8 -8
  12. package/dist/site/buildchain-site.json +7 -7
  13. package/dist/site/kfd-claims.json +20 -3
  14. package/dist/site/kfd-upstream-aggregate.json +1 -1
  15. package/dist/site/manual-registry.json +1 -1
  16. package/dist/site/node-api-registry.json +88 -13
  17. package/dist/site/page-registry.json +2 -2
  18. package/dist/site/public-surface-audit.json +20 -3
  19. package/dist/site/publication-registry.json +4 -4
  20. package/dist/site/site-manifest.json +5 -5
  21. package/dist/site/workflow-registry.json +22 -5
  22. package/docs/node-api-reference.md +13 -10
  23. package/package.json +1 -1
  24. package/packages/core/dev-delivery-execution-transfer.js +6 -7
  25. package/packages/core/dev-delivery-warrant-legacy-recovery.js +4 -2
  26. package/packages/core/dev-delivery-warrant-native-compatibility.js +33 -0
  27. package/packages/core/dev-delivery-warrant-state.js +42 -26
  28. package/packages/core/dev-delivery-warrant.js +8 -0
  29. package/packages/core/dev-delivery-writer-protocol-transition.js +72 -0
  30. package/packages/core/v4-canonical-contracts.js +2 -0
  31. package/packages/core/v4-protected-publication-source.js +93 -0
  32. package/packages/core/v4-publication-qualification.js +1 -0
  33. package/packages/core/v4-release-invocation.js +72 -3
  34. package/scripts/check-v4-release-topology.mjs +169 -23
  35. package/scripts/dev-delivery-warrant.mjs +13 -1
  36. package/scripts/generate-channel-promotion-workflow.mjs +2 -1
  37. package/scripts/release-candidate-resolver.mjs +17 -17
  38. package/scripts/resume-from-candidate-run.mjs +15 -16
  39. package/scripts/v4-release-candidate-adapter.mjs +41 -0
@@ -3304,18 +3304,35 @@
3304
3304
  "path": "actions/v4-release-candidate-promote/action.yml",
3305
3305
  "inputs": [
3306
3306
  "artifact-paths",
3307
+ "candidate-build-summary-path",
3307
3308
  "candidate-passport-path",
3308
3309
  "failure-after-capability",
3310
+ "mutation-token",
3309
3311
  "publication-qualification-path",
3312
+ "publish-auth",
3313
+ "publish-command",
3314
+ "publish-dist-tag",
3315
+ "publish-mode",
3316
+ "publish-package-main",
3317
+ "publish-package-set-order",
3318
+ "publish-rematerialize-on-resume",
3319
+ "publish-transaction-override",
3310
3320
  "publisher-workflow-sha",
3311
3321
  "repository",
3322
+ "required-artifacts-path",
3323
+ "required-status-check",
3312
3324
  "runtime-commit",
3313
3325
  "runtime-tree",
3326
+ "sealed-bundle-manifest",
3327
+ "sealed-bundle-root",
3328
+ "source-sha",
3314
3329
  "stage-capsules-path",
3315
3330
  "state-path",
3331
+ "target-ref",
3332
+ "target-sha",
3316
3333
  "token"
3317
3334
  ],
3318
- "inputCount": 11
3335
+ "inputCount": 28
3319
3336
  },
3320
3337
  {
3321
3338
  "id": "validate-config",
@@ -8924,8 +8941,8 @@
8924
8941
  "workflowRegistryPath": "dist/site/workflow-registry.json",
8925
8942
  "pageRegistryPath": "dist/site/page-registry.json",
8926
8943
  "cliRegistryDigest": "fbc23073bbae240489a2f826b2c26daadc58e704050c5f8df366509f5c5a1c3e",
8927
- "workflowRegistryDigest": "bb86cef4c0a6658ff1bf05aa33cd5ff5f119f8b3c3cee90e5aa2d911247b38e4",
8928
- "pageRegistryDigest": "3a4b72100125de7e2fb37f2af4f66f131f22f5831db4203f8178e4295c89a1eb"
8944
+ "workflowRegistryDigest": "073b15c8ea629eb05c7c83a7b0760d96a86512f80c8cf2594d460afb238a4f26",
8945
+ "pageRegistryDigest": "c81347e800ca7ded1b69a8480e562e67dc46671deb39ec27ca4376e7c8a77afd"
8929
8946
  },
8930
8947
  "comparison": {
8931
8948
  "missingCliRegistry": [],
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "contract": "kungfu-buildchain-publication-release-registry",
4
- "generatedAt": "2026-08-29T09:02:41.579Z",
5
- "publishedAt": "2026-08-29T09:02:41.579Z",
4
+ "generatedAt": "2026-08-30T11:57:45.486Z",
5
+ "publishedAt": "2026-08-30T11:57:45.486Z",
6
6
  "reproducible": true,
7
7
  "timestampPolicy": "ci-injected",
8
8
  "deterministicInputs": [
@@ -19,7 +19,7 @@
19
19
  "declared Buildchain surface manifest contract"
20
20
  ],
21
21
  "sourceDateEpoch": "0",
22
- "sourceRevision": "037d638ce54635606528d8fe3bb466983a5262dd",
22
+ "sourceRevision": "78e2a3ce7604d1f07cdba6b600267306188d9b8d",
23
23
  "timestampPolicyDetails": {
24
24
  "contract": "kungfu-buildchain-surface-timestamp-policy",
25
25
  "timestampFields": [
@@ -32,7 +32,7 @@
32
32
  },
33
33
  "package": {
34
34
  "name": "@kungfu-tech/buildchain",
35
- "version": "4.0.2-alpha.2",
35
+ "version": "4.0.2-alpha.4",
36
36
  "versionSource": "package.json#version"
37
37
  },
38
38
  "sourceKind": "package-site-bundle",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "contract": "kungfu-buildchain-site-manifest",
4
- "generatedAt": "2026-08-29T09:02:41.579Z",
5
- "publishedAt": "2026-08-29T09:02:41.579Z",
4
+ "generatedAt": "2026-08-30T11:57:45.486Z",
5
+ "publishedAt": "2026-08-30T11:57:45.486Z",
6
6
  "reproducible": true,
7
7
  "timestampPolicy": "ci-injected",
8
8
  "deterministicInputs": [
@@ -19,7 +19,7 @@
19
19
  "declared Buildchain surface manifest contract"
20
20
  ],
21
21
  "sourceDateEpoch": "0",
22
- "sourceRevision": "037d638ce54635606528d8fe3bb466983a5262dd",
22
+ "sourceRevision": "78e2a3ce7604d1f07cdba6b600267306188d9b8d",
23
23
  "timestampPolicyDetails": {
24
24
  "contract": "kungfu-buildchain-surface-timestamp-policy",
25
25
  "timestampFields": [
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "package": {
39
39
  "name": "@kungfu-tech/buildchain",
40
- "version": "4.0.2-alpha.2",
40
+ "version": "4.0.2-alpha.4",
41
41
  "versionSource": "package.json#version"
42
42
  },
43
43
  "entrypoint": "buildchain-site.json",
@@ -253,7 +253,7 @@
253
253
  "path": "docs/node-api-reference.md",
254
254
  "plane": "use",
255
255
  "exists": true,
256
- "digest": "sha256:cf61043790140da9953b53522dec4f2c408ffae87ba69168f6625bf17f7063e1"
256
+ "digest": "sha256:afc6f959491ea0360ee308ee476613a9b42ab37dc5755dc66d3edb484d5e81d3"
257
257
  },
258
258
  {
259
259
  "id": "build-facts",
@@ -2041,7 +2041,7 @@
2041
2041
  "status": "preview",
2042
2042
  "owner": "buildchain-workflows",
2043
2043
  "maturity": "preview",
2044
- "introducedVersion": "4.0.2-alpha.2",
2044
+ "introducedVersion": "4.0.2-alpha.4",
2045
2045
  "compatibilityPromise": "preserved-through-the-v3-major-line",
2046
2046
  "deprecationReplacement": "",
2047
2047
  "sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
@@ -2062,7 +2062,7 @@
2062
2062
  "status": "preview",
2063
2063
  "owner": "buildchain-workflows",
2064
2064
  "maturity": "preview",
2065
- "introducedVersion": "4.0.2-alpha.2",
2065
+ "introducedVersion": "4.0.2-alpha.4",
2066
2066
  "compatibilityPromise": "preserved-through-the-v3-major-line",
2067
2067
  "deprecationReplacement": "",
2068
2068
  "sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
@@ -2083,7 +2083,7 @@
2083
2083
  "status": "preview",
2084
2084
  "owner": "buildchain-workflows",
2085
2085
  "maturity": "preview",
2086
- "introducedVersion": "4.0.2-alpha.2",
2086
+ "introducedVersion": "4.0.2-alpha.4",
2087
2087
  "compatibilityPromise": "preserved-through-the-v3-major-line",
2088
2088
  "deprecationReplacement": "",
2089
2089
  "sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
@@ -2133,7 +2133,7 @@
2133
2133
  "status": "preview",
2134
2134
  "owner": "buildchain-workflows",
2135
2135
  "maturity": "preview",
2136
- "introducedVersion": "4.0.2-alpha.2",
2136
+ "introducedVersion": "4.0.2-alpha.4",
2137
2137
  "compatibilityPromise": "preserved-through-the-v3-major-line",
2138
2138
  "deprecationReplacement": "",
2139
2139
  "sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
@@ -3533,18 +3533,35 @@
3533
3533
  "path": "actions/v4-release-candidate-promote/action.yml",
3534
3534
  "inputs": [
3535
3535
  "artifact-paths",
3536
+ "candidate-build-summary-path",
3536
3537
  "candidate-passport-path",
3537
3538
  "failure-after-capability",
3539
+ "mutation-token",
3538
3540
  "publication-qualification-path",
3541
+ "publish-auth",
3542
+ "publish-command",
3543
+ "publish-dist-tag",
3544
+ "publish-mode",
3545
+ "publish-package-main",
3546
+ "publish-package-set-order",
3547
+ "publish-rematerialize-on-resume",
3548
+ "publish-transaction-override",
3539
3549
  "publisher-workflow-sha",
3540
3550
  "repository",
3551
+ "required-artifacts-path",
3552
+ "required-status-check",
3541
3553
  "runtime-commit",
3542
3554
  "runtime-tree",
3555
+ "sealed-bundle-manifest",
3556
+ "sealed-bundle-root",
3557
+ "source-sha",
3543
3558
  "stage-capsules-path",
3544
3559
  "state-path",
3560
+ "target-ref",
3561
+ "target-sha",
3545
3562
  "token"
3546
3563
  ],
3547
- "inputCount": 11,
3564
+ "inputCount": 28,
3548
3565
  "capabilityGroup": "api-cli-reference",
3549
3566
  "status": "active",
3550
3567
  "owner": "buildchain-actions",
@@ -1688,13 +1688,13 @@ Target: `./packages/core/dev-delivery-authority-landing.js`. Public symbols: 35.
1688
1688
 
1689
1689
  ## `@kungfu-tech/buildchain/dev-delivery-warrant`
1690
1690
 
1691
- Target: `./packages/core/dev-delivery-warrant.js`. Public symbols: 56.
1691
+ Target: `./packages/core/dev-delivery-warrant.js`. Public symbols: 59.
1692
1692
 
1693
1693
  | Symbol | Kind and signature | Parameters | Return | Errors | Side effects | Example | Source |
1694
1694
  | --- | --- | --- | --- | --- | --- | --- | --- |
1695
- | `cancelQueuedDevDeliveryCandidate` | function: function cancelQueuedDevDeliveryCandidate(queueInput, input, options) | queueInput, input, options | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | none-detected-by-static-source-scan | `import { cancelQueuedDevDeliveryCandidate } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:512` |
1695
+ | `cancelQueuedDevDeliveryCandidate` | function: function cancelQueuedDevDeliveryCandidate(queueInput, input, options) | queueInput, input, options | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | none-detected-by-static-source-scan | `import { cancelQueuedDevDeliveryCandidate } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:520` |
1696
1696
  | `classifyDevDeliveryDelta` | function: function classifyDevDeliveryDelta({ proof, current = {} } = {}) | { proof, current = {} } = {} | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | none-detected-by-static-source-scan | `import { classifyDevDeliveryDelta } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-proof.js:109` |
1697
- | `closeDevDeliveryWarrant` | function: function closeDevDeliveryWarrant(queueInput, warrant, { outcome, evidenceRoot, reason = "", providerFailureAuthority = null, now = new Date().toISOString(), } = {}) | queueInput, warrant, { outcome, evidenceRoot, reason = "", providerFailureAuthority = null, now = new Date().toISOString(), } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { closeDevDeliveryWarrant } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:387` |
1697
+ | `closeDevDeliveryWarrant` | function: function closeDevDeliveryWarrant(queueInput, warrant, { outcome, evidenceRoot, reason = "", providerFailureAuthority = null, now = new Date().toISOString(), } = {}) | queueInput, warrant, { outcome, evidenceRoot, reason = "", providerFailureAuthority = null, now = new Date().toISOString(), } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { closeDevDeliveryWarrant } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:395` |
1698
1698
  | `createDevDeliveryQueue` | value: createDevDeliveryQueue | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { createDevDeliveryQueue } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:1` |
1699
1699
  | `createIntegrationDeliveryProof` | function: function createIntegrationDeliveryProof(input = {}) | input = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { createIntegrationDeliveryProof } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-proof.js:241` |
1700
1700
  | `createNativeCommandContract` | value: createNativeCommandContract | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { createNativeCommandContract } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-native-proof.js:1` |
@@ -1711,6 +1711,7 @@ Target: `./packages/core/dev-delivery-warrant.js`. Public symbols: 56.
1711
1711
  | `DEV_DELIVERY_CANCELLATION_RECEIPT_SCHEMA` | value: DEV_DELIVERY_CANCELLATION_RECEIPT_SCHEMA | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { DEV_DELIVERY_CANCELLATION_RECEIPT_SCHEMA } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:1` |
1712
1712
  | `DEV_DELIVERY_CLASSES` | value: DEV_DELIVERY_CLASSES | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { DEV_DELIVERY_CLASSES } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:1` |
1713
1713
  | `DEV_DELIVERY_LEASE_RECEIPT_SCHEMA` | value: DEV_DELIVERY_LEASE_RECEIPT_SCHEMA | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { DEV_DELIVERY_LEASE_RECEIPT_SCHEMA } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:1` |
1714
+ | `DEV_DELIVERY_MINIMUM_WRITER_PROTOCOL_ROOT` | value: DEV_DELIVERY_MINIMUM_WRITER_PROTOCOL_ROOT | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { DEV_DELIVERY_MINIMUM_WRITER_PROTOCOL_ROOT } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:1` |
1714
1715
  | `DEV_DELIVERY_PRIORITIES` | value: DEV_DELIVERY_PRIORITIES | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { DEV_DELIVERY_PRIORITIES } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:1` |
1715
1716
  | `DEV_DELIVERY_QUALIFICATION_RECEIPT_SCHEMA` | constant: const DEV_DELIVERY_QUALIFICATION_RECEIPT_SCHEMA | none | value | Import does not declare a throw contract. | none-on-import | `import { DEV_DELIVERY_QUALIFICATION_RECEIPT_SCHEMA } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-native-proof.js:41` |
1716
1717
  | `DEV_DELIVERY_QUEUE_CONTRACT` | value: DEV_DELIVERY_QUEUE_CONTRACT | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { DEV_DELIVERY_QUEUE_CONTRACT } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:1` |
@@ -1719,8 +1720,10 @@ Target: `./packages/core/dev-delivery-warrant.js`. Public symbols: 56.
1719
1720
  | `DEV_DELIVERY_SUBMISSION_RECEIPT_SCHEMA` | value: DEV_DELIVERY_SUBMISSION_RECEIPT_SCHEMA | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { DEV_DELIVERY_SUBMISSION_RECEIPT_SCHEMA } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:1` |
1720
1721
  | `DEV_DELIVERY_TERMINAL_EVIDENCE_CORRECTION_SCHEMA` | value: DEV_DELIVERY_TERMINAL_EVIDENCE_CORRECTION_SCHEMA | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { DEV_DELIVERY_TERMINAL_EVIDENCE_CORRECTION_SCHEMA } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:1` |
1721
1722
  | `DEV_DELIVERY_WARRANT_SCHEMA` | value: DEV_DELIVERY_WARRANT_SCHEMA | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { DEV_DELIVERY_WARRANT_SCHEMA } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:1` |
1723
+ | `DEV_DELIVERY_WRITER_PROTOCOL_FENCE_RECEIPT_SCHEMA` | value: DEV_DELIVERY_WRITER_PROTOCOL_FENCE_RECEIPT_SCHEMA | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { DEV_DELIVERY_WRITER_PROTOCOL_FENCE_RECEIPT_SCHEMA } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:1` |
1722
1724
  | `devDeliveryContentRoot` | function: function devDeliveryContentRoot(value) | value | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | none-detected-by-static-source-scan | `import { devDeliveryContentRoot } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-common.js:27` |
1723
- | `heartbeatDevDeliveryWarrant` | function: function heartbeatDevDeliveryWarrant(queueInput, warrant, { now = new Date().toISOString(), leaseSeconds } = {}) | queueInput, warrant, { now = new Date().toISOString(), leaseSeconds } = {} | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | none-detected-by-static-source-scan | `import { heartbeatDevDeliveryWarrant } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:258` |
1725
+ | `fenceDevDeliveryWriterProtocol` | value: fenceDevDeliveryWriterProtocol | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { fenceDevDeliveryWriterProtocol } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:1` |
1726
+ | `heartbeatDevDeliveryWarrant` | function: function heartbeatDevDeliveryWarrant(queueInput, warrant, { now = new Date().toISOString(), leaseSeconds } = {}) | queueInput, warrant, { now = new Date().toISOString(), leaseSeconds } = {} | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | none-detected-by-static-source-scan | `import { heartbeatDevDeliveryWarrant } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:266` |
1724
1727
  | `INTEGRATION_DELIVERY_PROOF_SCHEMA` | constant: const INTEGRATION_DELIVERY_PROOF_SCHEMA | none | value | Import does not declare a throw contract. | none-on-import | `import { INTEGRATION_DELIVERY_PROOF_SCHEMA } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-proof.js:6` |
1725
1728
  | `NATIVE_COMMAND_CONTRACT_SCHEMA` | value: NATIVE_COMMAND_CONTRACT_SCHEMA | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { NATIVE_COMMAND_CONTRACT_SCHEMA } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-native-proof.js:1` |
1726
1729
  | `NATIVE_EXECUTION_BINDING_SCHEMA` | value: NATIVE_EXECUTION_BINDING_SCHEMA | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { NATIVE_EXECUTION_BINDING_SCHEMA } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-native-proof.js:1` |
@@ -1730,15 +1733,15 @@ Target: `./packages/core/dev-delivery-warrant.js`. Public symbols: 56.
1730
1733
  | `NATIVE_QUALIFICATION_PROOF_SCHEMA` | constant: const NATIVE_QUALIFICATION_PROOF_SCHEMA | none | value | Import does not declare a throw contract. | none-on-import | `import { NATIVE_QUALIFICATION_PROOF_SCHEMA } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-native-proof.js:31` |
1731
1734
  | `normalizeDevDeliveryQueue` | value: normalizeDevDeliveryQueue | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { normalizeDevDeliveryQueue } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:1` |
1732
1735
  | `normalizeNativeCommandContract` | value: normalizeNativeCommandContract | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { normalizeNativeCommandContract } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-native-proof.js:1` |
1733
- | `observeDevDeliveryQueue` | function: function observeDevDeliveryQueue(queueInput, { now = new Date().toISOString(), allowLegacyV3Readback = false } = {}) | queueInput, { now = new Date().toISOString(), allowLegacyV3Readback = false } = {} | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | none-detected-by-static-source-scan | `import { observeDevDeliveryQueue } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:526` |
1736
+ | `observeDevDeliveryQueue` | function: function observeDevDeliveryQueue(queueInput, { now = new Date().toISOString(), allowLegacyV3Readback = false } = {}) | queueInput, { now = new Date().toISOString(), allowLegacyV3Readback = false } = {} | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | none-detected-by-static-source-scan | `import { observeDevDeliveryQueue } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:534` |
1734
1737
  | `PROJECT_CUT_REPLAY_PROOF_SCHEMA` | constant: const PROJECT_CUT_REPLAY_PROOF_SCHEMA | none | value | Import does not declare a throw contract. | none-on-import | `import { PROJECT_CUT_REPLAY_PROOF_SCHEMA } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-proof.js:5` |
1735
- | `qualifyDevDeliveryWarrant` | constant: const qualifyDevDeliveryWarrant | none | value | Import does not declare a throw contract. | none-on-import | `import { qualifyDevDeliveryWarrant } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:383` |
1738
+ | `qualifyDevDeliveryWarrant` | constant: const qualifyDevDeliveryWarrant | none | value | Import does not declare a throw contract. | none-on-import | `import { qualifyDevDeliveryWarrant } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:391` |
1736
1739
  | `rankDevDeliveryCandidates` | value: rankDevDeliveryCandidates | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { rankDevDeliveryCandidates } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:1` |
1737
- | `reconcileDevDeliveryTerminalEvidence` | constant: const reconcileDevDeliveryTerminalEvidence | none | value | Import does not declare a throw contract. | none-on-import | `import { reconcileDevDeliveryTerminalEvidence } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:521` |
1738
- | `recoverExpiredDevDeliveryWarrant` | function: function recoverExpiredDevDeliveryWarrant(queueInput, { now = new Date().toISOString() } = {}) | queueInput, { now = new Date().toISOString() } = {} | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | none-detected-by-static-source-scan | `import { recoverExpiredDevDeliveryWarrant } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:304` |
1740
+ | `reconcileDevDeliveryTerminalEvidence` | constant: const reconcileDevDeliveryTerminalEvidence | none | value | Import does not declare a throw contract. | none-on-import | `import { reconcileDevDeliveryTerminalEvidence } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:529` |
1741
+ | `recoverExpiredDevDeliveryWarrant` | function: function recoverExpiredDevDeliveryWarrant(queueInput, { now = new Date().toISOString() } = {}) | queueInput, { now = new Date().toISOString() } = {} | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | none-detected-by-static-source-scan | `import { recoverExpiredDevDeliveryWarrant } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:312` |
1739
1742
  | `RELEASE_BLOCKER_PRIORITY_CLAIM_SCHEMA` | constant: const RELEASE_BLOCKER_PRIORITY_CLAIM_SCHEMA | none | value | Import does not declare a throw contract. | none-on-import | `import { RELEASE_BLOCKER_PRIORITY_CLAIM_SCHEMA } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/release-blocker-priority.js:15` |
1740
- | `selectDevDeliveryWarrant` | function: function selectDevDeliveryWarrant(queueInput, { now = new Date().toISOString(), leaseSeconds } = {}) | queueInput, { now = new Date().toISOString(), leaseSeconds } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { selectDevDeliveryWarrant } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:98` |
1741
- | `settleDevDeliveryTerminalEvent` | constant: const settleDevDeliveryTerminalEvent | none | value | Import does not declare a throw contract. | none-on-import | `import { settleDevDeliveryTerminalEvent } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:515` |
1743
+ | `selectDevDeliveryWarrant` | function: function selectDevDeliveryWarrant(queueInput, { now = new Date().toISOString(), leaseSeconds } = {}) | queueInput, { now = new Date().toISOString(), leaseSeconds } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { selectDevDeliveryWarrant } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:106` |
1744
+ | `settleDevDeliveryTerminalEvent` | constant: const settleDevDeliveryTerminalEvent | none | value | Import does not declare a throw contract. | none-on-import | `import { settleDevDeliveryTerminalEvent } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:523` |
1742
1745
  | `SOURCE_QUALIFICATION_PROOF_SCHEMA` | constant: const SOURCE_QUALIFICATION_PROOF_SCHEMA | none | value | Import does not declare a throw contract. | none-on-import | `import { SOURCE_QUALIFICATION_PROOF_SCHEMA } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-proof.js:3` |
1743
1746
  | `SOURCE_QUALIFICATION_PROOF_V2_SCHEMA` | constant: const SOURCE_QUALIFICATION_PROOF_V2_SCHEMA | none | value | Import does not declare a throw contract. | none-on-import | `import { SOURCE_QUALIFICATION_PROOF_V2_SCHEMA } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-proof.js:4` |
1744
1747
  | `submitDevDeliveryCandidate` | value: submitDevDeliveryCandidate | none | unknown | No narrower error contract was mechanically discoverable. | unknown | `import { submitDevDeliveryCandidate } from "@kungfu-tech/buildchain/dev-delivery-warrant";` | `packages/core/dev-delivery-warrant.js:1` |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kungfu-tech/buildchain",
3
- "version": "4.0.2-alpha.2",
3
+ "version": "4.0.2-alpha.4",
4
4
  "private": false,
5
5
  "description": "Buildchain Release Passport, release governance, CLI toolkit, and site facts.",
6
6
  "repository": "https://github.com/kungfu-systems/buildchain",
@@ -38,7 +38,10 @@ const FAILURE_FILES = [
38
38
  ];
39
39
 
40
40
  const V4_RUNTIME_SELECTOR =
41
- /^(?:v4|v4-alpha|train\/v4\/v4\.0\/[a-z0-9][a-z0-9._-]*)$/u;
41
+ /^(?:[0-9a-f]{40}|v4|v4-alpha|train\/v4\/v4\.0\/[a-z0-9][a-z0-9._-]*)$/u;
42
+
43
+ const V4_RUNTIME_SELECTOR_DESCRIPTION =
44
+ "runtime selector must be an exact immutable SHA, v4, v4-alpha, or train/v4/v4.0/<capability>";
42
45
 
43
46
  function requiredFiles(outcome) {
44
47
  if (outcome === "succeeded") return SUCCESS_FILES;
@@ -163,9 +166,7 @@ function runtimeBinding(input = {}) {
163
166
  selectionRoot: exactRoot(input.selectionRoot, "runtime selection root"),
164
167
  };
165
168
  if (!V4_RUNTIME_SELECTOR.test(runtime.selector)) {
166
- throw new Error(
167
- "runtime selector must be v4, v4-alpha, or train/v4/v4.0/<capability>",
168
- );
169
+ throw new Error(V4_RUNTIME_SELECTOR_DESCRIPTION);
169
170
  }
170
171
  return runtime;
171
172
  }
@@ -207,9 +208,7 @@ function verifiedRuntimeSelection(directory, expected = {}) {
207
208
  throw new Error("runtime selection is not exact canonical content");
208
209
  }
209
210
  if (!V4_RUNTIME_SELECTOR.test(normalized.selector)) {
210
- throw new Error(
211
- "runtime selector must be v4, v4-alpha, or train/v4/v4.0/<capability>",
212
- );
211
+ throw new Error(V4_RUNTIME_SELECTOR_DESCRIPTION);
213
212
  }
214
213
  const selectionRoot = sha256Bytes(
215
214
  Buffer.from(`${JSON.stringify(normalized, null, 2)}\n`),
@@ -218,7 +218,8 @@ export function recoverLegacyTerminalDevDeliveryQueue(
218
218
  evidenceRoot: entry.evidenceRoot,
219
219
  });
220
220
  }
221
- queue.activeWarrant = null;
221
+ if (transitions.some((entry) => entry.activeWarrant))
222
+ queue.activeWarrant = null;
222
223
  queue.generation += 1;
223
224
  queue.updatedAt = currentTime;
224
225
  queue.stateRoot = devDeliveryContentRoot(queue);
@@ -236,7 +237,8 @@ export function recoverLegacyTerminalDevDeliveryQueue(
236
237
  nextStateRoot: after.stateRoot,
237
238
  requestRoot,
238
239
  transitions,
239
- nextAction: "Select the next strictly valid queued candidate, if any.",
240
+ nextAction:
241
+ "Continue the exact active Warrant, or select the next candidate.",
240
242
  };
241
243
  return {
242
244
  queue: after,
@@ -0,0 +1,33 @@
1
+ export function lacksExactNativeExecutionContract(
2
+ candidate,
3
+ allowLegacyV3Readback = false,
4
+ ) {
5
+ const native =
6
+ candidate.deliveryClass !== "non-native-fast" ||
7
+ candidate.environmentRoot ||
8
+ candidate.nativeCommandContract;
9
+ return Boolean(
10
+ native &&
11
+ (!candidate.environmentRoot ||
12
+ (!candidate.nativeCommandContract && !allowLegacyV3Readback)),
13
+ );
14
+ }
15
+
16
+ export function lacksLiveNativeProof(
17
+ candidate,
18
+ status,
19
+ { allowLegacyV3Readback = false, allowLegacyQueuedReadback = false } = {},
20
+ ) {
21
+ return (
22
+ lacksExactNativeExecutionContract(candidate, allowLegacyV3Readback) &&
23
+ !(status === "queued" && allowLegacyQueuedReadback) &&
24
+ !TERMINAL_STATES.has(status)
25
+ );
26
+ }
27
+ const TERMINAL_STATES = new Set([
28
+ "merged",
29
+ "terminal-failure",
30
+ "dequeued",
31
+ "cancelled",
32
+ "superseded",
33
+ ]);
@@ -21,6 +21,10 @@ import {
21
21
  normalizeNativeCommandContract,
22
22
  validateActiveDevDeliveryWarrant,
23
23
  } from "./dev-delivery-native-proof.js";
24
+ import {
25
+ lacksExactNativeExecutionContract,
26
+ lacksLiveNativeProof,
27
+ } from "./dev-delivery-warrant-native-compatibility.js";
24
28
  import {
25
29
  normalizeProviderFailureAuthorityBinding,
26
30
  normalizeTerminalEvidenceCorrection,
@@ -36,6 +40,8 @@ export const DEV_DELIVERY_WARRANT_SCHEMA =
36
40
  "kungfu.buildchain.dev-delivery-warrant/v1";
37
41
  export const DEV_DELIVERY_SUBMISSION_RECEIPT_SCHEMA =
38
42
  "kungfu.buildchain.dev-delivery-submission-receipt/v1";
43
+ export const DEV_DELIVERY_MINIMUM_WRITER_PROTOCOL_ROOT =
44
+ "sha256:54a203cadf0b14d4e3c198a3cc3c177c42813aa1c0cca03e900df714b6ae5563";
39
45
  export const DEV_DELIVERY_SELECTION_RECEIPT_SCHEMA =
40
46
  "kungfu.buildchain.dev-delivery-selection-receipt/v1";
41
47
  export const DEV_DELIVERY_LEASE_RECEIPT_SCHEMA =
@@ -148,7 +154,7 @@ function exactRoots(values, label) {
148
154
  return [...new Set(values.map((value) => exactRoot(value, label)))].sort();
149
155
  }
150
156
  function normalizePolicy(policy = {}) {
151
- return {
157
+ const normalized = {
152
158
  agingSeconds: positiveInteger(
153
159
  policy.agingSeconds,
154
160
  "policy agingSeconds",
@@ -162,22 +168,17 @@ function normalizePolicy(policy = {}) {
162
168
  ),
163
169
  emergencyPolicy: text(policy.emergencyPolicy || "reviewed-explicit-only"),
164
170
  };
171
+ if (Object.hasOwn(policy, "minimumWriterProtocolRoot")) {
172
+ const root = exactRoot(
173
+ policy.minimumWriterProtocolRoot,
174
+ "policy minimumWriterProtocolRoot",
175
+ );
176
+ if (root !== DEV_DELIVERY_MINIMUM_WRITER_PROTOCOL_ROOT)
177
+ throw new Error("unsupported dev delivery minimum writer protocol");
178
+ normalized.minimumWriterProtocolRoot = root;
179
+ }
180
+ return normalized;
165
181
  }
166
-
167
- function lacksLiveNativeProof(candidate, status, allowLegacyV3Readback) {
168
- const { environmentRoot, nativeCommandContract } = candidate;
169
- const native =
170
- candidate.deliveryClass !== "non-native-fast" ||
171
- environmentRoot ||
172
- nativeCommandContract;
173
- return (
174
- native &&
175
- (!environmentRoot ||
176
- (!nativeCommandContract && allowLegacyV3Readback !== true)) &&
177
- !TERMINAL_STATES.has(status)
178
- );
179
- }
180
-
181
182
  function normalizeCandidate(input, expected) {
182
183
  const identity = createDevDeliveryCandidateIdentity(
183
184
  input,
@@ -276,7 +277,12 @@ function normalizeCandidate(input, expected) {
276
277
  "candidate shardEvidenceRoots",
277
278
  );
278
279
  }
279
- if (lacksLiveNativeProof(candidate, status, expected.allowLegacyV3Readback))
280
+ if (
281
+ lacksLiveNativeProof(candidate, status, {
282
+ allowLegacyV3Readback: expected.allowLegacyV3Readback,
283
+ allowLegacyQueuedReadback: expected.allowLegacyQueuedNativeReadback,
284
+ })
285
+ )
280
286
  throw new Error("live native candidate requires exact native proof");
281
287
  if (Object.hasOwn(input, "releaseBlockerPriority"))
282
288
  candidate.releaseBlockerPriority = normalizeReleaseBlockerPriorityClaim(
@@ -310,7 +316,10 @@ export function createDevDeliveryQueue({
310
316
  protectedBase: protectedBase(protectedBaseInput),
311
317
  generation: 0,
312
318
  fencingCounter: 0,
313
- policy: normalizePolicy(policy),
319
+ policy: {
320
+ ...normalizePolicy(policy),
321
+ minimumWriterProtocolRoot: DEV_DELIVERY_MINIMUM_WRITER_PROTOCOL_ROOT,
322
+ },
314
323
  activeWarrant: null,
315
324
  candidates: [],
316
325
  updatedAt: timestamp(now, "now"),
@@ -346,16 +355,19 @@ export function normalizeDevDeliveryQueue(input, expected = {}) {
346
355
  "queue fencingCounter",
347
356
  );
348
357
  queue.policy = normalizePolicy(queue.policy);
358
+ const hasExecutionReceipt = !!queue.activeWarrant?.nativeExecutionReceiptRoot;
359
+ const hasQualificationReceipt =
360
+ !!queue.activeWarrant?.qualificationReceiptRoot;
349
361
  const allowLegacyV3Readback =
350
362
  expected.allowLegacyV3Readback === true &&
351
- !(queue.candidates || []).some(
352
- (candidate) => candidate?.nativeCommandContract,
353
- ) &&
354
- !queue.activeWarrant?.nativeCommandContract &&
355
- !queue.activeWarrant?.nativeExecutionReceiptRoot &&
356
- !queue.activeWarrant?.qualificationReceiptRoot;
363
+ hasExecutionReceipt === hasQualificationReceipt;
364
+ const candidateExpected = {
365
+ ...queue,
366
+ allowLegacyV3Readback,
367
+ allowLegacyQueuedNativeReadback: true,
368
+ };
357
369
  queue.candidates = (queue.candidates || []).map((candidate) =>
358
- normalizeCandidate(candidate, { ...queue, allowLegacyV3Readback }),
370
+ normalizeCandidate(candidate, candidateExpected),
359
371
  );
360
372
  validateDevDeliveryCandidateChain(queue.candidates, TERMINAL_STATES);
361
373
  queue.updatedAt = timestamp(queue.updatedAt, "queue updatedAt");
@@ -569,7 +581,11 @@ export function rankDevDeliveryCandidates(
569
581
  });
570
582
  const currentTime = timestamp(now, "now");
571
583
  return queue.candidates
572
- .filter((candidate) => candidate.status === "queued")
584
+ .filter(
585
+ (candidate) =>
586
+ candidate.status === "queued" &&
587
+ !lacksExactNativeExecutionContract(candidate),
588
+ )
573
589
  .map((candidate) => ({
574
590
  candidate,
575
591
  priority: effectivePriority(candidate, queue.policy, currentTime),
@@ -29,6 +29,7 @@ import {
29
29
  DEV_DELIVERY_QUEUE_CONTRACT,
30
30
  DEV_DELIVERY_SELECTION_RECEIPT_SCHEMA,
31
31
  DEV_DELIVERY_SUBMISSION_RECEIPT_SCHEMA,
32
+ DEV_DELIVERY_MINIMUM_WRITER_PROTOCOL_ROOT,
32
33
  DEV_DELIVERY_WARRANT_SCHEMA,
33
34
  TERMINAL_STATES,
34
35
  createDevDeliveryQueue,
@@ -38,6 +39,10 @@ import {
38
39
  submitDevDeliveryCandidate,
39
40
  transitionDevDeliveryQueue as transition,
40
41
  } from "./dev-delivery-warrant-state.js";
42
+ import {
43
+ DEV_DELIVERY_WRITER_PROTOCOL_FENCE_RECEIPT_SCHEMA,
44
+ fenceDevDeliveryWriterProtocol,
45
+ } from "./dev-delivery-writer-protocol-transition.js";
41
46
 
42
47
  export { devDeliveryContentRoot } from "./dev-delivery-common.js";
43
48
  export {
@@ -85,8 +90,11 @@ export {
85
90
  DEV_DELIVERY_QUEUE_CONTRACT,
86
91
  DEV_DELIVERY_SELECTION_RECEIPT_SCHEMA,
87
92
  DEV_DELIVERY_SUBMISSION_RECEIPT_SCHEMA,
93
+ DEV_DELIVERY_MINIMUM_WRITER_PROTOCOL_ROOT,
94
+ DEV_DELIVERY_WRITER_PROTOCOL_FENCE_RECEIPT_SCHEMA,
88
95
  DEV_DELIVERY_WARRANT_SCHEMA,
89
96
  createDevDeliveryQueue,
97
+ fenceDevDeliveryWriterProtocol,
90
98
  normalizeDevDeliveryQueue,
91
99
  rankDevDeliveryCandidates,
92
100
  submitDevDeliveryCandidate,
@@ -0,0 +1,72 @@
1
+ import { devDeliveryContentRoot } from "./dev-delivery-common.js";
2
+ import {
3
+ DEV_DELIVERY_MINIMUM_WRITER_PROTOCOL_ROOT,
4
+ TERMINAL_STATES,
5
+ transitionDevDeliveryQueue,
6
+ } from "./dev-delivery-warrant-state.js";
7
+
8
+ export const DEV_DELIVERY_WRITER_PROTOCOL = Object.freeze({
9
+ schema: "kungfu.buildchain.dev-delivery-writer-protocol/v1",
10
+ requiredCandidateCapabilities: [
11
+ "environment-root-v1",
12
+ "native-command-contract-v1",
13
+ ],
14
+ });
15
+ export const DEV_DELIVERY_WRITER_PROTOCOL_FENCE_RECEIPT_SCHEMA =
16
+ "kungfu.buildchain.dev-delivery-writer-protocol-fence-receipt/v1";
17
+ if (
18
+ devDeliveryContentRoot(DEV_DELIVERY_WRITER_PROTOCOL) !==
19
+ DEV_DELIVERY_MINIMUM_WRITER_PROTOCOL_ROOT
20
+ ) {
21
+ throw new Error("dev delivery writer protocol root drift");
22
+ }
23
+
24
+ export function fenceDevDeliveryWriterProtocol(
25
+ queueInput,
26
+ { now = new Date().toISOString() } = {},
27
+ ) {
28
+ const transaction = transitionDevDeliveryQueue(
29
+ queueInput,
30
+ (queue) => {
31
+ if (
32
+ queue.policy.minimumWriterProtocolRoot ===
33
+ DEV_DELIVERY_MINIMUM_WRITER_PROTOCOL_ROOT
34
+ ) {
35
+ return {
36
+ action: "minimum-writer-protocol-already-fenced",
37
+ preserveState: true,
38
+ };
39
+ }
40
+ if (
41
+ queue.activeWarrant ||
42
+ queue.candidates.some(
43
+ (candidate) => !TERMINAL_STATES.has(candidate.status),
44
+ )
45
+ ) {
46
+ throw new Error(
47
+ "minimum writer protocol can be fenced only while the queue is idle",
48
+ );
49
+ }
50
+ queue.policy.minimumWriterProtocolRoot =
51
+ DEV_DELIVERY_MINIMUM_WRITER_PROTOCOL_ROOT;
52
+ return { action: "minimum-writer-protocol-fenced" };
53
+ },
54
+ now,
55
+ );
56
+ const receipt = {
57
+ schema: DEV_DELIVERY_WRITER_PROTOCOL_FENCE_RECEIPT_SCHEMA,
58
+ action: transaction.result.action,
59
+ repository: transaction.after.repository,
60
+ protectedBase: transaction.after.protectedBase,
61
+ minimumWriterProtocolRoot: DEV_DELIVERY_MINIMUM_WRITER_PROTOCOL_ROOT,
62
+ expectedOldStateRoot: transaction.expectedOldStateRoot,
63
+ nextStateRoot: transaction.after.stateRoot,
64
+ nextAction:
65
+ "Use only a Buildchain runtime that preserves the rooted minimum writer protocol.",
66
+ };
67
+ return {
68
+ queue: transaction.after,
69
+ receipt,
70
+ receiptRoot: devDeliveryContentRoot(receipt),
71
+ };
72
+ }
@@ -66,6 +66,8 @@ const ROOT_DOMAINS = new Set([
66
66
  "release-invocation-candidate",
67
67
  "release-invocation-target",
68
68
  "release-invocation-authority",
69
+ "release-invocation-provider",
70
+ "release-invocation-parent",
69
71
  "release-invocation",
70
72
  "release-transaction",
71
73
  "release-receipt",