@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.
- package/architecture/agent-change-map.md +3 -0
- package/architecture/internal-capabilities.json +2 -0
- package/architecture/maintainability-debt.json +17 -15
- package/architecture/maintainability-policy.json +6 -6
- package/architecture/v3-core-mechanism-inventory.json +1 -0
- package/architecture/v4-delivery-warrant-shadow-fixtures.json +5 -5
- package/architecture/v4-release-invocation-fixtures.json +20 -0
- package/architecture/v4-release-topology.json +85 -80
- package/architecture/v4-runtime-semantic-closure.json +4 -1
- package/contracts/v4-release-invocation-v1.schema.json +50 -2
- package/dist/site/buildchain-contract.json +8 -8
- package/dist/site/buildchain-site.json +7 -7
- package/dist/site/kfd-claims.json +20 -3
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +1 -1
- package/dist/site/node-api-registry.json +88 -13
- package/dist/site/page-registry.json +2 -2
- package/dist/site/public-surface-audit.json +20 -3
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/site-manifest.json +5 -5
- package/dist/site/workflow-registry.json +22 -5
- package/docs/node-api-reference.md +13 -10
- package/package.json +1 -1
- package/packages/core/dev-delivery-execution-transfer.js +6 -7
- package/packages/core/dev-delivery-warrant-legacy-recovery.js +4 -2
- package/packages/core/dev-delivery-warrant-native-compatibility.js +33 -0
- package/packages/core/dev-delivery-warrant-state.js +42 -26
- package/packages/core/dev-delivery-warrant.js +8 -0
- package/packages/core/dev-delivery-writer-protocol-transition.js +72 -0
- package/packages/core/v4-canonical-contracts.js +2 -0
- package/packages/core/v4-protected-publication-source.js +93 -0
- package/packages/core/v4-publication-qualification.js +1 -0
- package/packages/core/v4-release-invocation.js +72 -3
- package/scripts/check-v4-release-topology.mjs +169 -23
- package/scripts/dev-delivery-warrant.mjs +13 -1
- package/scripts/generate-channel-promotion-workflow.mjs +2 -1
- package/scripts/release-candidate-resolver.mjs +17 -17
- package/scripts/resume-from-candidate-run.mjs +15 -16
- 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":
|
|
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": "
|
|
8928
|
-
"pageRegistryDigest": "
|
|
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-
|
|
5
|
-
"publishedAt": "2026-08-
|
|
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": "
|
|
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.
|
|
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-
|
|
5
|
-
"publishedAt": "2026-08-
|
|
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": "
|
|
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.
|
|
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:
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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":
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
| `
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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.
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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 (
|
|
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:
|
|
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
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
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,
|
|
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(
|
|
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",
|