@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.
- package/AGENTS.md +4 -4
- package/CONTRIBUTING.md +34 -0
- package/README.md +1 -1
- package/architecture/agent-change-map.md +154 -147
- package/architecture/{v4-architecture-constitution.md → architecture-constitution.md} +11 -11
- package/architecture/{v3-core-mechanism-inventory.md → baseline-core-mechanism-inventory.md} +1 -1
- package/architecture/{v4-bootstrap-authority.json → bootstrap-authority.json} +3 -3
- package/architecture/{v3-v4-capability-closure.md → capability-parity-closure.md} +3 -3
- package/architecture/{v3-v4-live-capability-inventory.json → capability-parity-live-capability-inventory.json} +4 -4
- package/architecture/{v4-capability-state-machine-manifest.json → capability-state-machine-manifest.json} +2 -2
- package/architecture/{v4-capability-state-machine-manifest.schema.json → capability-state-machine-manifest.schema.json} +2 -2
- package/architecture/ci-lane-change-budget.json +18 -0
- package/architecture/{v4-cross-platform-adopter-qualification.json → cross-platform-adopter-qualification.json} +3 -3
- package/architecture/{v4-delivery-authority-parity.json → delivery-authority-parity.json} +16 -16
- package/architecture/{v4-delivery-warrant-shadow-bootstrap-plan.json → delivery-warrant-shadow-bootstrap-plan.json} +3 -3
- package/architecture/{v4-delivery-warrant-shadow-bootstrap-plan.md → delivery-warrant-shadow-bootstrap-plan.md} +7 -7
- package/architecture/{v4-floating-consumer-policy.md → floating-consumer-policy.md} +1 -1
- package/architecture/implementation-naming.json +1273 -0
- package/architecture/internal-capabilities.json +171 -169
- package/architecture/maintainability-debt.json +87 -82
- package/architecture/maintainability-policy.json +15 -15
- package/architecture/{v4-next-development-parity.json → next-development-parity.json} +8 -8
- package/architecture/{v4-partial-mutation-recovery-qualification.json → partial-mutation-recovery-qualification.json} +8 -8
- package/architecture/{v4-platform-stage-checkpoints.json → platform-stage-checkpoints.json} +2 -2
- package/architecture/{v4-provider-operation-journal-contract.json → provider-operation-journal-contract.json} +9 -9
- package/architecture/{v4-publication-rehearsal-parity.json → publication-rehearsal-parity.json} +4 -4
- package/architecture/{v4-release-activation-shadow-domain.json → release-activation-shadow-domain.json} +8 -8
- package/architecture/{v4-release-topology.json → release-topology.json} +112 -56
- package/architecture/{v4-release-train-parity.json → release-train-parity.json} +2 -2
- package/architecture/{v4-runtime-ref-resume-authority.json → runtime-ref-resume-authority.json} +1 -1
- package/architecture/{v4-runtime-semantic-closure.json → runtime-semantic-closure.json} +2 -2
- package/architecture/{v4-rust-libnode-bridge-evaluation.json → rust-libnode-bridge-evaluation.json} +3 -3
- package/architecture/{v4-rust-libnode-bridge-spike.md → rust-libnode-bridge-spike.md} +6 -6
- package/architecture/{v4-rust-wasm-production-authority.json → rust-wasm-production-authority.json} +11 -11
- package/architecture/{v4-stable-publication-fence.json → stable-publication-fence.json} +6 -6
- package/architecture/{v4-stage-capsule-contract.json → stage-capsule-contract.json} +1 -1
- package/architecture/{v4-stage-capsule-qualification.json → stage-capsule-qualification.json} +6 -6
- package/architecture/{v4-stage-capsule-resume-planner.json → stage-capsule-resume-planner.json} +2 -2
- package/architecture/{v4-stage-capsule-store-contract.json → stage-capsule-store-contract.json} +4 -4
- package/architecture/{v4-tail-reseal-parity.json → tail-reseal-parity.json} +28 -28
- package/architecture/{v4-universal-workflow-bootstrap.json → universal-workflow-bootstrap.json} +9 -4
- package/architecture/{v4-universal-workflow-fault-campaign.json → universal-workflow-fault-campaign.json} +8 -8
- package/architecture/{v4-universal-workflow-train-admission.json → universal-workflow-train-admission.json} +8 -8
- package/architecture/workflow-taxonomy.json +11 -0
- package/bin/buildchain.mjs +3 -3
- package/bin/internal/adopter-delivery-cli.mjs +9 -9
- package/contracts/fixtures/v4-tail-reseal-v1/valid.json +1 -1
- package/crates/{buildchain-v4-bridge → buildchain-host-bridge}/Cargo.lock +1 -1
- package/crates/{buildchain-v4-bridge → buildchain-host-bridge}/Cargo.toml +1 -1
- package/crates/{buildchain-v4-bridge → buildchain-host-bridge}/src/main.rs +3 -3
- package/dist/site/buildchain-contract.json +18 -18
- package/dist/site/buildchain-site.json +167 -71
- package/dist/site/capability-registry.json +5 -5
- package/dist/site/kfd-claims.json +226 -90
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +7 -7
- package/dist/site/node-api-registry.json +12929 -10491
- package/dist/site/page-registry.json +155 -59
- package/dist/site/public-surface-audit.json +65 -46
- package/dist/site/publication-authority-registry.json +27 -17
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/release-provenance.json +18 -9
- package/dist/site/site-manifest.json +11 -11
- package/dist/site/workflow-registry.json +86 -52
- package/docs/MAP.md +4 -3
- package/docs/next-development-transition.md +24 -1
- package/docs/node-api-reference.md +435 -175
- package/docs/oci-publication.md +173 -0
- package/docs/publish-transaction.md +36 -3
- package/docs/release-flow.md +1 -1
- package/docs/reusable-build-surface.md +1 -1
- package/docs/v4-adopter-delivery.md +2 -2
- package/docs/v4-canonical-contracts.md +7 -7
- package/docs/v4-delivery-warrant-read-candidate.md +3 -3
- package/docs/v4-delivery-warrant-semantic-diff.md +3 -3
- package/docs/v4-production-release.md +8 -2
- package/docs/v4-publication-rehearsal.md +3 -3
- package/docs/v4-runtime-ref-resume-authority.md +2 -2
- package/docs/v4-rust-wasm-production-authority.md +6 -6
- package/docs/v4-stage-capsule.md +7 -7
- package/docs/v4-tail-reseal.md +1 -1
- package/docs/workflow-catalog.md +1 -0
- package/package.json +37 -26
- package/packages/compatibility/adopter-delivery.js +16 -0
- package/packages/compatibility/cross-platform-adopter-qualification.js +12 -0
- package/packages/compatibility/floating-consumer-policy.js +14 -0
- package/packages/compatibility/publication-qualification.js +11 -0
- package/packages/compatibility/publication-rehearsal.js +18 -0
- package/packages/compatibility/runtime-ref-resume-authority.js +13 -0
- package/packages/compatibility/tail-reseal-receipt.js +7 -0
- package/packages/compatibility/tail-reseal.js +11 -0
- package/packages/core/{v4-adopter-delivery-parity.js → adopter-delivery-parity.js} +12 -12
- package/packages/core/{v4-adopter-delivery.js → adopter-delivery.js} +24 -24
- package/packages/core/buildchain-contract.js +5 -5
- package/packages/core/buildchain-domain.wasm +0 -0
- package/packages/core/buildchain-publication-authority.js +1 -0
- package/packages/core/{v4-canonical-contracts.js → canonical-contracts.js} +32 -31
- package/packages/core/{v4-cross-platform-adopter-qualification.js → cross-platform-adopter-qualification.js} +19 -19
- package/packages/core/{v4-delivery-warrant-fixture-runner.js → delivery-warrant-fixture-runner.js} +36 -32
- package/packages/core/{v4-delivery-warrant-read-candidate.js → delivery-warrant-read-candidate.js} +40 -40
- package/packages/core/{v4-delivery-warrant-semantic-diff-gate.js → delivery-warrant-semantic-diff-gate.js} +58 -59
- package/packages/core/{v4-delivery-warrant-shadow-adapter.js → delivery-warrant-shadow-adapter.js} +15 -15
- package/packages/core/dev-delivery-execution-transfer.js +6 -6
- package/packages/core/dev-delivery-native-proof.js +12 -8
- package/packages/core/dev-delivery-warrant-legacy-recovery.js +1 -1
- package/packages/core/dev-delivery-warrant-native-compatibility.js +4 -4
- package/packages/core/dev-delivery-warrant-state.js +11 -11
- package/packages/core/dev-delivery-warrant.js +3 -3
- package/packages/core/domain-wasm-artifact.js +7 -0
- package/packages/core/{v4-domain-wasm.js → domain-wasm.js} +31 -31
- package/packages/core/{v4-floating-consumer-evidence.js → floating-consumer-evidence.js} +13 -13
- package/packages/core/{v4-floating-consumer-policy.js → floating-consumer-policy.js} +27 -29
- package/packages/core/{v4-floating-consumer-release-passport.js → floating-consumer-release-passport.js} +25 -25
- package/packages/core/index.js +4 -8
- package/packages/core/next-development-projection.js +24 -1
- package/packages/core/next-development-transition.js +5 -6
- package/packages/core/oci-compose-qualification.js +143 -0
- package/packages/core/oci-publication-bundle.js +281 -0
- package/packages/core/oci-publication-graph.js +206 -0
- package/packages/core/paper-runtime-channels.js +2 -2
- package/packages/core/paper.js +3 -3
- package/packages/core/partial-mutation-recovery-qualification.js +18 -0
- package/packages/core/{v4-platform-stage-checkpoints.js → platform-stage-checkpoints.js} +37 -37
- package/packages/core/{v4-product-publication.js → product-publication.js} +11 -9
- package/packages/core/{v4-protected-publication-source.js → protected-publication-source.js} +3 -3
- package/packages/core/provider-operation-journal.js +62 -0
- package/packages/core/{v4-provider-readback-idempotency.js → provider-readback-idempotency.js} +33 -33
- package/packages/core/public-export-compatibility.js +33 -0
- package/packages/core/publication-development.js +72 -0
- package/packages/core/{v4-publication-qualification.js → publication-qualification.js} +17 -17
- package/packages/core/{v4-publication-rehearsal-capsule.js → publication-rehearsal-capsule.js} +23 -23
- package/packages/core/publication-rehearsal-projection.js +2 -2
- package/packages/core/{v4-publication-rehearsal-provider-bindings.js → publication-rehearsal-provider-bindings.js} +4 -4
- package/packages/core/publication-rehearsal-runtime.js +21 -21
- package/packages/core/{v4-publication-rehearsal.js → publication-rehearsal.js} +33 -33
- package/packages/core/publication-sealed-bundle.js +78 -13
- package/packages/core/release-activation-shadow.js +32 -0
- package/packages/core/release-candidate.js +6 -6
- package/packages/core/{v4-release-invocation.js → release-invocation.js} +15 -15
- package/packages/core/release-passport.js +36 -36
- package/packages/core/release-tail-product-capabilities.js +9 -0
- package/packages/core/release-tail-provider-plane.js +10 -10
- package/packages/core/{v4-runtime-ref-resume-authority.js → runtime-ref-resume-authority.js} +36 -40
- package/packages/core/{v4-runtime-selector-persistence.js → runtime-selector-persistence.js} +7 -7
- package/packages/core/stable-publication-fence.js +28 -0
- package/packages/core/{v4-stage-capsule-local-store.js → stage-capsule-local-store.js} +56 -54
- package/packages/core/{v4-stage-capsule-qualification-campaign.js → stage-capsule-qualification-campaign.js} +37 -38
- package/packages/core/{v4-stage-capsule-qualification.js → stage-capsule-qualification.js} +28 -29
- package/packages/core/{v4-stage-capsule-resume-planner.js → stage-capsule-resume-planner.js} +29 -29
- package/packages/core/{v4-stage-capsule-store.js → stage-capsule-store.js} +59 -56
- package/packages/core/{v4-stage-capsule.js → stage-capsule.js} +45 -45
- package/packages/core/{v4-tail-reseal-contract.js → tail-reseal-contract.js} +6 -6
- package/packages/core/{v4-tail-reseal-github.js → tail-reseal-github.js} +12 -12
- package/packages/core/{v4-tail-reseal-receipt.js → tail-reseal-receipt.js} +22 -22
- package/packages/core/{v4-tail-reseal.js → tail-reseal.js} +29 -29
- package/packages/core/{v4-universal-workflow-bootstrap.js → universal-workflow-bootstrap.js} +23 -23
- package/scripts/{v4-architecture.mjs → architecture.mjs} +6 -6
- package/scripts/binary-publication-evidence.mjs +1 -1
- package/scripts/{v4-bridge-bootstrap.mjs → bridge-bootstrap.mjs} +14 -18
- package/scripts/{v4-bridge-evidence.mjs → bridge-evidence.mjs} +8 -8
- package/scripts/{build-v4-domain-wasm.mjs → build-domain-wasm.mjs} +6 -18
- package/scripts/{v3-v4-capability-catalog.mjs → capability-parity-catalog.mjs} +19 -19
- package/scripts/check-action-bundles.mjs +2 -2
- package/scripts/{check-v3-v4-capability-inventory.mjs → check-capability-parity-inventory.mjs} +42 -42
- package/scripts/check-core-mechanism-inventory.mjs +4 -1
- package/scripts/{check-v4-floating-consumer-policy-contract.mjs → check-floating-consumer-policy-contract.mjs} +8 -8
- package/scripts/check-implementation-naming.mjs +135 -0
- package/scripts/check-inventory.mjs +6 -5
- package/scripts/check-maintainability.mjs +9 -2
- package/scripts/{check-v4-public-dogfood-contract.mjs → check-public-dogfood-contract.mjs} +15 -15
- package/scripts/{check-v4-release-topology.mjs → check-release-topology.mjs} +53 -31
- package/scripts/{check-v4-runtime-semantic-closure.mjs → check-runtime-semantic-closure.mjs} +19 -16
- package/scripts/{check-v4-universal-workflow-bootstrap.mjs → check-universal-workflow-bootstrap.mjs} +14 -14
- package/scripts/{v4-consumer-policy.mjs → consumer-policy.mjs} +15 -15
- package/scripts/{copy-v4-domain-wasm.mjs → copy-domain-wasm.mjs} +3 -3
- package/scripts/{v4-cross-platform-adopter-qualification.mjs → cross-platform-adopter-qualification.mjs} +9 -9
- package/scripts/{v4-declarative-promotion-admission.mjs → declarative-promotion-admission.mjs} +4 -4
- package/scripts/dev-delivery-warrant-options.mjs +1 -1
- package/scripts/dev-delivery-warrant-store.mjs +29 -10
- package/scripts/dev-delivery-warrant.mjs +4 -4
- package/scripts/dev-pr-delivery-warrant.mjs +1 -1
- package/scripts/generate-channel-build-workflow.mjs +2 -2
- package/scripts/generate-channel-promotion-workflow.mjs +14 -31
- package/scripts/generate-release-candidate-passport.mjs +23 -23
- package/scripts/generate-site-bundle.mjs +17 -17
- package/scripts/{generate-v4-universal-workflow-facades.mjs → generate-universal-workflow-facades.mjs} +61 -21
- package/scripts/{v4-host-adapter.mjs → host-adapter.mjs} +1 -1
- package/scripts/implementation-references.mjs +25 -0
- package/scripts/init-repo.mjs +1 -1
- package/scripts/next-development-review.mjs +17 -11
- package/scripts/oci-compose-preview.mjs +261 -0
- package/scripts/{v4-platform-stage-checkpoint-rehearsal.mjs → platform-stage-checkpoint-rehearsal.mjs} +17 -17
- package/scripts/{v4-product-publication-intent.mjs → product-publication-intent.mjs} +16 -8
- package/scripts/publication-candidate-kind.mjs +93 -0
- package/scripts/publication-candidate-sealer.mjs +16 -1
- package/scripts/{v4-publication-rehearsal-fixture.mjs → publication-rehearsal-fixture.mjs} +5 -5
- package/scripts/{v4-publication-settlement.mjs → publication-settlement.mjs} +8 -8
- package/scripts/{v4-release-candidate-adapter.mjs → release-candidate-adapter.mjs} +4 -4
- package/scripts/release-candidate-resolver.mjs +15 -26
- package/scripts/release-tail.mjs +5 -5
- package/scripts/resume-from-candidate-run.mjs +35 -42
- package/scripts/site-capability-metadata.mjs +9 -0
- package/scripts/source-verification-evidence.mjs +7 -7
- package/scripts/{v4-stage-capsule-qualification.mjs → stage-capsule-qualification.mjs} +62 -62
- package/scripts/{v4-stage-capsule-resume-rehearsal.mjs → stage-capsule-resume-rehearsal.mjs} +6 -6
- package/scripts/{v4-tail-reseal-macos-rehearsal.mjs → tail-reseal-macos-rehearsal.mjs} +9 -9
- package/scripts/{v4-tail-reseal.mjs → tail-reseal.mjs} +19 -19
- package/scripts/universal-facade-maintainability.mjs +12 -3
- package/scripts/{v4-universal-workflow-backflow.mjs → universal-workflow-backflow.mjs} +10 -10
- package/scripts/{v4-universal-workflow-engine.mjs → universal-workflow-engine.mjs} +40 -38
- package/scripts/{v4-universal-workflow-self-dogfood.mjs → universal-workflow-self-dogfood.mjs} +12 -12
- package/scripts/verify-version-state-delta.mjs +4 -2
- package/scripts/{v4-warrant-shadow-plan.mjs → warrant-shadow-plan.mjs} +6 -6
- package/templates/universal-buildchain-bootstrap-recovery.yml +4 -4
- package/packages/core/buildchain-v4-domain.wasm +0 -0
- package/packages/core/v4-domain-wasm-artifact.js +0 -7
- package/packages/core/v4-partial-mutation-recovery-qualification.js +0 -18
- package/packages/core/v4-provider-operation-journal.js +0 -62
- package/packages/core/v4-release-activation-shadow.js +0 -32
- package/packages/core/v4-stable-publication-fence.js +0 -28
- /package/actions/{v4-release-candidate-promote → release-candidate-promote}/README.md +0 -0
- /package/architecture/{v4-adopter-delivery-parity.json → adopter-delivery-parity.json} +0 -0
- /package/architecture/{v3-core-mechanism-inventory.json → baseline-core-mechanism-inventory.json} +0 -0
- /package/architecture/{v4-canonical-contract-fixtures.json → canonical-contract-fixtures.json} +0 -0
- /package/architecture/{v4-compatibility-facts-parity.json → compatibility-facts-parity.json} +0 -0
- /package/architecture/{v4-delivery-warrant-shadow-bootstrap-plan.schema.json → delivery-warrant-shadow-bootstrap-plan.schema.json} +0 -0
- /package/architecture/{v4-delivery-warrant-shadow-fixtures.json → delivery-warrant-shadow-fixtures.json} +0 -0
- /package/architecture/{v4-delivery-warrant-shadow-fixtures.schema.json → delivery-warrant-shadow-fixtures.schema.json} +0 -0
- /package/architecture/{v4-exception-ledger.json → exception-ledger.json} +0 -0
- /package/architecture/{v4-exception-ledger.schema.json → exception-ledger.schema.json} +0 -0
- /package/architecture/{v4-floating-consumer-policy.json → floating-consumer-policy.json} +0 -0
- /package/architecture/{v4-publication-facade-patches.json → publication-facade-patches.json} +0 -0
- /package/architecture/{v4-release-invocation-fixtures.json → release-invocation-fixtures.json} +0 -0
|
@@ -264,7 +264,7 @@ function explicitWorld(root, ref) {
|
|
|
264
264
|
};
|
|
265
265
|
}
|
|
266
266
|
|
|
267
|
-
export function
|
|
267
|
+
export function paperChannels({
|
|
268
268
|
cwd,
|
|
269
269
|
buildchainRoot,
|
|
270
270
|
buildchainVersion,
|
|
@@ -312,7 +312,7 @@ export function paperV4Channels({
|
|
|
312
312
|
return { selectedRef, channels };
|
|
313
313
|
}
|
|
314
314
|
|
|
315
|
-
export function
|
|
315
|
+
export function bindPaperAuthority(authority, channelPlan, files) {
|
|
316
316
|
const { selectedRef, channels } = channelPlan;
|
|
317
317
|
const entryPath = authority.agentEntry.policyPath;
|
|
318
318
|
const entry = JSON.parse(files.get(entryPath));
|
package/packages/core/paper.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
|
-
import {
|
|
2
|
+
import { bindPaperAuthority, paperChannels, selectPaperRuntime, paperRuntimeLockPath, paperProvisioningWorkflowErrors, resolvePaperNpmRuntimeSha } from "./paper-runtime-channels.js";
|
|
3
3
|
import fs from "node:fs";
|
|
4
4
|
import os from "node:os";
|
|
5
5
|
import path from "node:path";
|
|
@@ -808,7 +808,7 @@ function migrationFiles({
|
|
|
808
808
|
[".gitignore", paperDependencyIgnore(fs.existsSync(path.join(cwd, ".gitignore")) ? fs.readFileSync(path.join(cwd, ".gitignore"), "utf8") : "")],
|
|
809
809
|
]);
|
|
810
810
|
if (runtimeIdentity.version.startsWith("4.")) {
|
|
811
|
-
const channelPlan =
|
|
811
|
+
const channelPlan = paperChannels({
|
|
812
812
|
cwd, buildchainRoot, buildchainVersion: runtimeIdentity.version,
|
|
813
813
|
buildchainSha: runtimeSha, contractWorld: runtimeContractWorld(buildchainRoot),
|
|
814
814
|
acceptedAt: contractLock.buildchain.acceptedAt,
|
|
@@ -823,7 +823,7 @@ function migrationFiles({
|
|
|
823
823
|
const alphaJob = releaseJob.replace(" paper-release:\n", " paper-release-alpha:\n if: ${{ startsWith(github.ref_name, 'alpha/') }}\n").replaceAll(runtimeSha, "v4-alpha").replaceAll(".buildchain/contract-lock.json", ".buildchain/alpha-contract-lock.json");
|
|
824
824
|
const stableJob = releaseJob.replace(" paper-release:\n", " paper-release:\n if: ${{ startsWith(github.ref_name, 'release/') }}\n").replaceAll(runtimeSha, "v4");
|
|
825
825
|
files.set(PAPER_PATHS.releaseWorkflow, `${releaseWorkflow.slice(0, releaseStart)}${alphaJob}\n${stableJob}`);
|
|
826
|
-
files.set(PAPER_PATHS.provisioningAuthority, jsonText(
|
|
826
|
+
files.set(PAPER_PATHS.provisioningAuthority, jsonText(bindPaperAuthority(provisioningAuthority, channelPlan, files)));
|
|
827
827
|
}
|
|
828
828
|
return files;
|
|
829
829
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ContractFault } from "./canonical-contracts.js";
|
|
2
|
+
import { DomainWasmFault, invokeDomainWasm } from "./domain-wasm.js";
|
|
3
|
+
|
|
4
|
+
export const PARTIAL_MUTATION_RECOVERY_REQUEST_CONTRACT =
|
|
5
|
+
"buildchain-v4-partial-mutation-recovery-request/v1";
|
|
6
|
+
export const PARTIAL_MUTATION_RECOVERY_PLAN_CONTRACT =
|
|
7
|
+
"buildchain-v4-partial-mutation-recovery-plan/v1";
|
|
8
|
+
|
|
9
|
+
export function planPartialMutationRecovery(request) {
|
|
10
|
+
try {
|
|
11
|
+
return invokeDomainWasm("partial-mutation-recovery", request);
|
|
12
|
+
} catch (error) {
|
|
13
|
+
if (error instanceof DomainWasmFault) {
|
|
14
|
+
throw new ContractFault(error.code, error.path, error.message);
|
|
15
|
+
}
|
|
16
|
+
throw error;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -2,34 +2,34 @@ import fs from "node:fs";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
} from "./
|
|
5
|
+
ContractFault,
|
|
6
|
+
domainCanonicalBytes,
|
|
7
|
+
validateClock,
|
|
8
|
+
validateRoot,
|
|
9
|
+
} from "./canonical-contracts.js";
|
|
10
10
|
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
} from "./
|
|
11
|
+
STAGE_CAPSULE_CONTRACT,
|
|
12
|
+
STAGE_CAPSULE_IDENTITY_CONTRACT,
|
|
13
|
+
stageCapsuleIdentityRoot,
|
|
14
|
+
stageCapsuleRoot,
|
|
15
|
+
validateStageCapsule,
|
|
16
|
+
} from "./stage-capsule.js";
|
|
17
17
|
import {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
} from "./
|
|
18
|
+
STAGE_CAPSULE_OUTPUT_MANIFEST_CONTRACT,
|
|
19
|
+
stageCapsuleBlobRoot,
|
|
20
|
+
stageCapsuleOutputManifestRoot,
|
|
21
|
+
} from "./stage-capsule-store.js";
|
|
22
22
|
|
|
23
|
-
export const
|
|
23
|
+
export const PLATFORM_STAGE_CHECKPOINT_CONTRACT =
|
|
24
24
|
"buildchain-v4-platform-stage-checkpoint/v1";
|
|
25
|
-
export const
|
|
25
|
+
export const PLATFORM_STAGE_RESTORE_CONTRACT =
|
|
26
26
|
"buildchain-v4-platform-stage-restore/v1";
|
|
27
27
|
|
|
28
28
|
const TOKEN = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u;
|
|
29
29
|
const ZERO_ROOT = `sha256:${"0".repeat(64)}`;
|
|
30
30
|
|
|
31
31
|
function fault(code, location, message) {
|
|
32
|
-
throw new
|
|
32
|
+
throw new ContractFault(code, location, message);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
function object(value, location) {
|
|
@@ -76,14 +76,14 @@ function tokens(values, location) {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
function rootOf(value) {
|
|
79
|
-
return
|
|
79
|
+
return stageCapsuleBlobRoot(domainCanonicalBytes(value));
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
function declaredMap(value, names, location, { roots = false } = {}) {
|
|
83
83
|
exactKeys(value, names, location);
|
|
84
84
|
return names.map((name) => {
|
|
85
85
|
const entry = value[name];
|
|
86
|
-
if (roots)
|
|
86
|
+
if (roots) validateRoot(entry, `${location}/${name}`);
|
|
87
87
|
else if (typeof entry !== "string")
|
|
88
88
|
fault(
|
|
89
89
|
"invalid-stage-checkpoint-value",
|
|
@@ -112,7 +112,7 @@ function safeRelative(relativePath, location) {
|
|
|
112
112
|
return relativePath;
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
export function
|
|
115
|
+
export function validatePlatformStageCheckpointDeclaration(value) {
|
|
116
116
|
exactKeys(
|
|
117
117
|
value,
|
|
118
118
|
[
|
|
@@ -250,7 +250,7 @@ export function validateV4PlatformStageCheckpointDeclaration(value) {
|
|
|
250
250
|
}
|
|
251
251
|
|
|
252
252
|
function select(declaration, platformId, stageId) {
|
|
253
|
-
|
|
253
|
+
validatePlatformStageCheckpointDeclaration(declaration);
|
|
254
254
|
const platform = declaration.platforms.find(
|
|
255
255
|
(entry) => entry.id === platformId,
|
|
256
256
|
);
|
|
@@ -273,24 +273,24 @@ function outputManifest(stage, outputs) {
|
|
|
273
273
|
const entries = stage.outputs
|
|
274
274
|
.map(({ name }) => {
|
|
275
275
|
const bytes = Buffer.from(outputs[name]);
|
|
276
|
-
return { name, root:
|
|
276
|
+
return { name, root: stageCapsuleBlobRoot(bytes), size: bytes.length };
|
|
277
277
|
})
|
|
278
278
|
.sort((left, right) => left.name.localeCompare(right.name, "en"));
|
|
279
279
|
const draft = {
|
|
280
|
-
schema:
|
|
280
|
+
schema: STAGE_CAPSULE_OUTPUT_MANIFEST_CONTRACT,
|
|
281
281
|
entries,
|
|
282
282
|
manifestRoot: ZERO_ROOT,
|
|
283
283
|
};
|
|
284
|
-
return { ...draft, manifestRoot:
|
|
284
|
+
return { ...draft, manifestRoot: stageCapsuleOutputManifestRoot(draft) };
|
|
285
285
|
}
|
|
286
286
|
|
|
287
|
-
export function
|
|
287
|
+
export function emitPlatformStageCheckpoint(request) {
|
|
288
288
|
const { platform, stage } = select(
|
|
289
289
|
request.declaration,
|
|
290
290
|
request.platformId,
|
|
291
291
|
request.stageId,
|
|
292
292
|
);
|
|
293
|
-
|
|
293
|
+
validateClock(request.recordedAt, "$/request/recordedAt");
|
|
294
294
|
if (request.stageOutcome !== "success")
|
|
295
295
|
return Object.freeze({ emitted: false, reason: "stage-not-successful" });
|
|
296
296
|
if (!Number.isSafeInteger(request.overheadMs) || request.overheadMs < 0)
|
|
@@ -342,7 +342,7 @@ export function emitV4PlatformStageCheckpoint(request) {
|
|
|
342
342
|
shadowLifecycleRoot,
|
|
343
343
|
};
|
|
344
344
|
const identity = {
|
|
345
|
-
schema:
|
|
345
|
+
schema: STAGE_CAPSULE_IDENTITY_CONTRACT,
|
|
346
346
|
sourceRoot: request.inputs["source-tree"],
|
|
347
347
|
platform: platform.id,
|
|
348
348
|
platformRoot: rootOf(platform),
|
|
@@ -360,16 +360,16 @@ export function emitV4PlatformStageCheckpoint(request) {
|
|
|
360
360
|
],
|
|
361
361
|
};
|
|
362
362
|
const capsule = {
|
|
363
|
-
schema:
|
|
363
|
+
schema: STAGE_CAPSULE_CONTRACT,
|
|
364
364
|
writerAuthority: "typescript-v3",
|
|
365
365
|
rustAuthority: "validation-only",
|
|
366
366
|
identity,
|
|
367
|
-
identityRoot:
|
|
367
|
+
identityRoot: stageCapsuleIdentityRoot(identity),
|
|
368
368
|
retentionPromise: request.retentionPromise,
|
|
369
369
|
capsuleRoot: ZERO_ROOT,
|
|
370
370
|
};
|
|
371
|
-
capsule.capsuleRoot =
|
|
372
|
-
|
|
371
|
+
capsule.capsuleRoot = stageCapsuleRoot(capsule);
|
|
372
|
+
validateStageCapsule(capsule);
|
|
373
373
|
const blobs = manifest.entries.map((entry) => ({
|
|
374
374
|
name: entry.name,
|
|
375
375
|
bytes: Buffer.from(request.outputs[entry.name]),
|
|
@@ -381,7 +381,7 @@ export function emitV4PlatformStageCheckpoint(request) {
|
|
|
381
381
|
recordedAt: request.recordedAt,
|
|
382
382
|
});
|
|
383
383
|
const body = {
|
|
384
|
-
schema:
|
|
384
|
+
schema: PLATFORM_STAGE_CHECKPOINT_CONTRACT,
|
|
385
385
|
mode: "shadow-only",
|
|
386
386
|
platform: platform.id,
|
|
387
387
|
stage: stage.id,
|
|
@@ -413,13 +413,13 @@ function ensureEmptyDirectory(targetDirectory) {
|
|
|
413
413
|
return target;
|
|
414
414
|
}
|
|
415
415
|
|
|
416
|
-
export function
|
|
416
|
+
export function restorePlatformStageCheckpoint(request) {
|
|
417
417
|
const { stage } = select(
|
|
418
418
|
request.declaration,
|
|
419
419
|
request.expectedPlatform,
|
|
420
420
|
request.expectedStage,
|
|
421
421
|
);
|
|
422
|
-
|
|
422
|
+
validateClock(request.recordedAt, "$/request/recordedAt");
|
|
423
423
|
const restored = request.store.restore({
|
|
424
424
|
capsuleRoot: request.capsuleRoot,
|
|
425
425
|
recordedAt: request.recordedAt,
|
|
@@ -449,7 +449,7 @@ export function restoreV4PlatformStageCheckpoint(request) {
|
|
|
449
449
|
);
|
|
450
450
|
fs.mkdirSync(path.dirname(destination), { recursive: true });
|
|
451
451
|
fs.writeFileSync(destination, blob.bytes, { flag: "wx" });
|
|
452
|
-
if (
|
|
452
|
+
if (stageCapsuleBlobRoot(fs.readFileSync(destination)) !== blob.root)
|
|
453
453
|
fault(
|
|
454
454
|
"stage-capsule-root-mismatch",
|
|
455
455
|
`$/restore/${output.name}`,
|
|
@@ -457,7 +457,7 @@ export function restoreV4PlatformStageCheckpoint(request) {
|
|
|
457
457
|
);
|
|
458
458
|
}
|
|
459
459
|
const body = {
|
|
460
|
-
schema:
|
|
460
|
+
schema: PLATFORM_STAGE_RESTORE_CONTRACT,
|
|
461
461
|
platform: request.expectedPlatform,
|
|
462
462
|
stage: request.expectedStage,
|
|
463
463
|
capsuleRoot: request.capsuleRoot,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { invokeDomainWasm } from "./domain-wasm.js";
|
|
2
2
|
|
|
3
|
-
export const
|
|
3
|
+
export const PRODUCT_PUBLICATION_INTENT_CONTRACT =
|
|
4
4
|
"kungfu-buildchain-v4-product-publication-intent/v1";
|
|
5
|
-
export const
|
|
5
|
+
export const PRODUCT_PUBLICATION_PLAN_CONTRACT =
|
|
6
6
|
"kungfu-buildchain-v4-product-publication-plan/v1";
|
|
7
7
|
|
|
8
|
-
export function
|
|
8
|
+
export function selectProductPublicationIntent({
|
|
9
9
|
channel,
|
|
10
10
|
targetRef,
|
|
11
11
|
sourceSha,
|
|
@@ -13,6 +13,7 @@ export function selectV4ProductPublicationIntent({
|
|
|
13
13
|
repository,
|
|
14
14
|
artifactKind = "npm",
|
|
15
15
|
packageName,
|
|
16
|
+
npmPackages,
|
|
16
17
|
distTag,
|
|
17
18
|
sealedBundleRoot,
|
|
18
19
|
requiredArtifactsRoot,
|
|
@@ -20,13 +21,14 @@ export function selectV4ProductPublicationIntent({
|
|
|
20
21
|
recoveredVersion = "",
|
|
21
22
|
observedVersions = [],
|
|
22
23
|
}) {
|
|
23
|
-
return
|
|
24
|
+
return invokeDomainWasm("product-publication-intent", {
|
|
24
25
|
channel,
|
|
25
26
|
targetRef,
|
|
26
27
|
sourceSha,
|
|
27
28
|
sourceTimestamp,
|
|
28
29
|
repository,
|
|
29
30
|
artifactKind,
|
|
31
|
+
...(npmPackages === undefined ? {} : { npmPackages }),
|
|
30
32
|
...(packageName === undefined ? {} : { packageName }),
|
|
31
33
|
...(distTag === undefined ? {} : { distTag }),
|
|
32
34
|
...(sealedBundleRoot === undefined ? {} : { sealedBundleRoot }),
|
|
@@ -37,20 +39,20 @@ export function selectV4ProductPublicationIntent({
|
|
|
37
39
|
});
|
|
38
40
|
}
|
|
39
41
|
|
|
40
|
-
export function
|
|
42
|
+
export function createProductPublicationPlan({
|
|
41
43
|
intent,
|
|
42
44
|
invocationRoot,
|
|
43
45
|
transactionRoot,
|
|
44
46
|
}) {
|
|
45
|
-
return
|
|
47
|
+
return invokeDomainWasm("product-publication-plan", {
|
|
46
48
|
intent,
|
|
47
49
|
invocationRoot,
|
|
48
50
|
transactionRoot,
|
|
49
51
|
});
|
|
50
52
|
}
|
|
51
53
|
|
|
52
|
-
export function
|
|
53
|
-
return
|
|
54
|
+
export function createProductPublicationDeclaration({ intent, plan }) {
|
|
55
|
+
return invokeDomainWasm("product-publication-declaration", {
|
|
54
56
|
intent,
|
|
55
57
|
plan,
|
|
56
58
|
});
|
package/packages/core/{v4-protected-publication-source.js → protected-publication-source.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { domainContentRoot } from "./canonical-contracts.js";
|
|
2
2
|
|
|
3
3
|
const SHA_PATTERN = /^[0-9a-f]{40}$/u;
|
|
4
4
|
|
|
@@ -15,7 +15,7 @@ function exactParents(value, label) {
|
|
|
15
15
|
return value.map((entry, index) => exactSha(entry, `${label}[${index}]`));
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
export function
|
|
18
|
+
export function bindProtectedPublicationSource({
|
|
19
19
|
repository,
|
|
20
20
|
protectedCommit,
|
|
21
21
|
candidateCommit,
|
|
@@ -86,6 +86,6 @@ export function bindV4ProtectedPublicationSource({
|
|
|
86
86
|
};
|
|
87
87
|
return {
|
|
88
88
|
...binding,
|
|
89
|
-
bindingRoot:
|
|
89
|
+
bindingRoot: domainContentRoot("candidate-identity", binding),
|
|
90
90
|
};
|
|
91
91
|
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ContractFault } from "./canonical-contracts.js";
|
|
2
|
+
import { DomainWasmFault, invokeDomainWasm } from "./domain-wasm.js";
|
|
3
|
+
|
|
4
|
+
export const PROVIDER_OPERATION_IDENTITY_CONTRACT =
|
|
5
|
+
"buildchain-v4-provider-operation-identity/v1";
|
|
6
|
+
export const PROVIDER_OPERATION_INTENT_CONTRACT =
|
|
7
|
+
"buildchain-v4-provider-operation-intent/v1";
|
|
8
|
+
export const PROVIDER_OPERATION_ATTEMPT_CONTRACT =
|
|
9
|
+
"buildchain-v4-provider-operation-attempt/v1";
|
|
10
|
+
export const PROVIDER_OPERATION_OBSERVATION_CONTRACT =
|
|
11
|
+
"buildchain-v4-provider-operation-observation/v1";
|
|
12
|
+
export const PROVIDER_OPERATION_CONFIRMATION_CONTRACT =
|
|
13
|
+
"buildchain-v4-provider-operation-confirmation/v1";
|
|
14
|
+
export const PROVIDER_OPERATION_RECONCILIATION_CONTRACT =
|
|
15
|
+
"buildchain-v4-provider-operation-reconciliation/v1";
|
|
16
|
+
export const PROVIDER_OPERATION_JOURNAL_STATE_CONTRACT =
|
|
17
|
+
"buildchain-v4-provider-operation-journal-state/v1";
|
|
18
|
+
|
|
19
|
+
function invoke(operation, payload) {
|
|
20
|
+
try {
|
|
21
|
+
return invokeDomainWasm(operation, payload);
|
|
22
|
+
} catch (error) {
|
|
23
|
+
if (error instanceof DomainWasmFault) {
|
|
24
|
+
throw new ContractFault(error.code, error.path, error.message);
|
|
25
|
+
}
|
|
26
|
+
throw error;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function validateProviderOperationIdentity(value) {
|
|
31
|
+
invoke("provider-operation-identity-validate", value);
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function providerOperationRoot(identity) {
|
|
36
|
+
return invoke("provider-operation-identity-root", identity).root;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function providerOperationEntryRoot(entry) {
|
|
40
|
+
return invoke("provider-operation-entry-root", entry).root;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function validateProviderOperationEntry(entry) {
|
|
44
|
+
invoke("provider-operation-entry-validate", entry);
|
|
45
|
+
return entry;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function foldProviderOperationJournal(entries) {
|
|
49
|
+
return invoke("provider-operation-journal", entries).state;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export function providerOperationJournalRoot(entries) {
|
|
53
|
+
return invoke("provider-operation-journal", entries).journalRoot;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function providerOperationJournalStateRoot(entries) {
|
|
57
|
+
return invoke("provider-operation-journal", entries).stateRoot;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function projectProviderOperationFixtures(fixtures) {
|
|
61
|
+
return invoke("provider-operation-fixtures", fixtures);
|
|
62
|
+
}
|
package/packages/core/{v4-provider-readback-idempotency.js → provider-readback-idempotency.js}
RENAMED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
} from "./
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
2
|
+
ContractFault,
|
|
3
|
+
domainContentRoot,
|
|
4
|
+
validateRoot,
|
|
5
|
+
} from "./canonical-contracts.js";
|
|
6
|
+
import { providerOperationJournalStateRoot } from "./provider-operation-journal.js";
|
|
7
|
+
import { DomainWasmFault, invokeDomainWasm } from "./domain-wasm.js";
|
|
8
8
|
|
|
9
|
-
export const
|
|
9
|
+
export const PROVIDER_READBACK_SAMPLE_CONTRACT =
|
|
10
10
|
"buildchain-v4-provider-readback-sample/v1";
|
|
11
|
-
export const
|
|
11
|
+
export const PROVIDER_READBACK_FOLD_CONTRACT =
|
|
12
12
|
"buildchain-v4-provider-readback-fold/v1";
|
|
13
13
|
|
|
14
14
|
const PROVIDERS = Object.freeze({
|
|
@@ -48,7 +48,7 @@ const PROVIDERS = Object.freeze({
|
|
|
48
48
|
});
|
|
49
49
|
|
|
50
50
|
function fault(code, path, message) {
|
|
51
|
-
throw new
|
|
51
|
+
throw new ContractFault(code, path, message);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
function exactKeys(value, keys, path) {
|
|
@@ -74,12 +74,12 @@ function validateContext(context) {
|
|
|
74
74
|
"$/context",
|
|
75
75
|
);
|
|
76
76
|
for (const key of Object.keys(context))
|
|
77
|
-
|
|
77
|
+
validateRoot(context[key], `$/context/${key}`);
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
function sampleRoot(sample) {
|
|
81
81
|
const { sampleRoot: _sampleRoot, ...payload } = sample;
|
|
82
|
-
return
|
|
82
|
+
return domainContentRoot("provider-readback-sample", payload);
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
function validateSample(sample, path = "$/samples") {
|
|
@@ -96,7 +96,7 @@ function validateSample(sample, path = "$/samples") {
|
|
|
96
96
|
],
|
|
97
97
|
path,
|
|
98
98
|
);
|
|
99
|
-
if (sample.schema !==
|
|
99
|
+
if (sample.schema !== PROVIDER_READBACK_SAMPLE_CONTRACT)
|
|
100
100
|
fault(
|
|
101
101
|
"unsupported-provider-readback-version",
|
|
102
102
|
`${path}/schema`,
|
|
@@ -113,15 +113,15 @@ function validateSample(sample, path = "$/samples") {
|
|
|
113
113
|
"provider readback state is unsupported",
|
|
114
114
|
);
|
|
115
115
|
for (const key of ["operationRoot", "attemptRoot", "sampleRoot"])
|
|
116
|
-
|
|
116
|
+
validateRoot(sample[key], `${path}/${key}`);
|
|
117
117
|
if (sample.observedTargetRoot !== null)
|
|
118
|
-
|
|
118
|
+
validateRoot(sample.observedTargetRoot, `${path}/observedTargetRoot`);
|
|
119
119
|
if (
|
|
120
120
|
!Array.isArray(sample.evidenceRoots) ||
|
|
121
121
|
sample.evidenceRoots.length === 0 ||
|
|
122
122
|
sample.evidenceRoots.some(
|
|
123
123
|
(root, index) => (
|
|
124
|
-
|
|
124
|
+
validateRoot(root, `${path}/evidenceRoots/${index}`),
|
|
125
125
|
false
|
|
126
126
|
),
|
|
127
127
|
)
|
|
@@ -176,13 +176,13 @@ function adaptProviderReadback(provider, response, context) {
|
|
|
176
176
|
"$/response/schema",
|
|
177
177
|
"provider response schema does not match its adapter",
|
|
178
178
|
);
|
|
179
|
-
|
|
179
|
+
validateRoot(
|
|
180
180
|
response[descriptor.subject],
|
|
181
181
|
`$/response/${descriptor.subject}`,
|
|
182
182
|
);
|
|
183
|
-
|
|
183
|
+
validateRoot(response.evidenceRoot, "$/response/evidenceRoot");
|
|
184
184
|
if (response[descriptor.target] !== null)
|
|
185
|
-
|
|
185
|
+
validateRoot(
|
|
186
186
|
response[descriptor.target],
|
|
187
187
|
`$/response/${descriptor.target}`,
|
|
188
188
|
);
|
|
@@ -221,7 +221,7 @@ function adaptProviderReadback(provider, response, context) {
|
|
|
221
221
|
);
|
|
222
222
|
}
|
|
223
223
|
const sample = {
|
|
224
|
-
schema:
|
|
224
|
+
schema: PROVIDER_READBACK_SAMPLE_CONTRACT,
|
|
225
225
|
operationRoot: context.operationRoot,
|
|
226
226
|
attemptRoot: context.attemptRoot,
|
|
227
227
|
state,
|
|
@@ -234,39 +234,39 @@ function adaptProviderReadback(provider, response, context) {
|
|
|
234
234
|
return validateSample(sample);
|
|
235
235
|
}
|
|
236
236
|
|
|
237
|
-
export function
|
|
237
|
+
export function adaptGitHubReleaseReadback(response, context) {
|
|
238
238
|
return adaptProviderReadback("github", response, context);
|
|
239
239
|
}
|
|
240
240
|
|
|
241
|
-
export function
|
|
241
|
+
export function adaptNpmPublicationReadback(response, context) {
|
|
242
242
|
return adaptProviderReadback("npm", response, context);
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
-
export function
|
|
245
|
+
export function adaptOciManifestReadback(response, context) {
|
|
246
246
|
return adaptProviderReadback("oci", response, context);
|
|
247
247
|
}
|
|
248
248
|
|
|
249
|
-
export function
|
|
249
|
+
export function foldProviderReadbackSamples(samples, coordinates) {
|
|
250
250
|
try {
|
|
251
|
-
return
|
|
251
|
+
return invokeDomainWasm("provider-readback-fold", {
|
|
252
252
|
samples,
|
|
253
253
|
coordinates,
|
|
254
254
|
});
|
|
255
255
|
} catch (error) {
|
|
256
|
-
if (error instanceof
|
|
257
|
-
throw new
|
|
256
|
+
if (error instanceof DomainWasmFault) {
|
|
257
|
+
throw new ContractFault(error.code, error.path, error.message);
|
|
258
258
|
}
|
|
259
259
|
throw error;
|
|
260
260
|
}
|
|
261
261
|
}
|
|
262
262
|
|
|
263
263
|
const ADAPTERS = Object.freeze({
|
|
264
|
-
github:
|
|
265
|
-
npm:
|
|
266
|
-
oci:
|
|
264
|
+
github: adaptGitHubReleaseReadback,
|
|
265
|
+
npm: adaptNpmPublicationReadback,
|
|
266
|
+
oci: adaptOciManifestReadback,
|
|
267
267
|
});
|
|
268
268
|
|
|
269
|
-
export function
|
|
269
|
+
export function projectProviderReadbackFixtures(fixtures) {
|
|
270
270
|
const projectCase = (fixture) => {
|
|
271
271
|
const samples = fixture.readbacks.map(({ provider, response }) =>
|
|
272
272
|
ADAPTERS[provider](response, fixtures.context),
|
|
@@ -277,14 +277,14 @@ export function projectV4ProviderReadbackFixtures(fixtures) {
|
|
|
277
277
|
"$/neutralSamples",
|
|
278
278
|
"provider adapters did not produce the retained neutral samples",
|
|
279
279
|
);
|
|
280
|
-
const projection =
|
|
280
|
+
const projection = foldProviderReadbackSamples(
|
|
281
281
|
samples,
|
|
282
282
|
fixtures.coordinates,
|
|
283
283
|
);
|
|
284
284
|
return {
|
|
285
285
|
id: fixture.id,
|
|
286
286
|
...projection,
|
|
287
|
-
journalStateRoot:
|
|
287
|
+
journalStateRoot: providerOperationJournalStateRoot([
|
|
288
288
|
...fixtures.journalPrefix,
|
|
289
289
|
projection.observation,
|
|
290
290
|
]),
|
|
@@ -295,7 +295,7 @@ export function projectV4ProviderReadbackFixtures(fixtures) {
|
|
|
295
295
|
try {
|
|
296
296
|
projectCase(fixture);
|
|
297
297
|
} catch (error) {
|
|
298
|
-
if (error instanceof
|
|
298
|
+
if (error instanceof ContractFault)
|
|
299
299
|
return { id: fixture.id, fault: error.code };
|
|
300
300
|
throw error;
|
|
301
301
|
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Published export aliases; implementations use responsibility names.
|
|
2
|
+
export { PublicationQualificationError as V4PublicationQualificationError } from "./publication-qualification.js";
|
|
3
|
+
export { FLOATING_CONSUMER_CERTIFICATION as V4_FLOATING_CONSUMER_CERTIFICATION } from "./floating-consumer-evidence.js";
|
|
4
|
+
export { FLOATING_CONSUMER_POLICY as V4_FLOATING_CONSUMER_POLICY } from "./floating-consumer-evidence.js";
|
|
5
|
+
export { FLOATING_CONSUMER_RECEIPT as V4_FLOATING_CONSUMER_RECEIPT } from "./floating-consumer-evidence.js";
|
|
6
|
+
export { PUBLICATION_QUALIFICATION_SCHEMA as V4_PUBLICATION_QUALIFICATION_SCHEMA } from "./publication-qualification.js";
|
|
7
|
+
export { RUNTIME_AUTHORIZATION_CONTRACT as V4_RUNTIME_AUTHORIZATION_CONTRACT } from "./runtime-ref-resume-authority.js";
|
|
8
|
+
export { RUNTIME_PERSISTENCE_SCAN_CONTRACT as V4_RUNTIME_PERSISTENCE_SCAN_CONTRACT } from "./runtime-selector-persistence.js";
|
|
9
|
+
export { RUNTIME_RESUME_LINEAGE_CONTRACT as V4_RUNTIME_RESUME_LINEAGE_CONTRACT } from "./runtime-ref-resume-authority.js";
|
|
10
|
+
export { assertNoExecutionFields as assertNoV4ExecutionFields } from "./publication-qualification.js";
|
|
11
|
+
export { assertDeclarativePromotionInputs as assertV4DeclarativePromotionInputs } from "./publication-qualification.js";
|
|
12
|
+
export { authorizeRuntimeSelection as authorizeV4RuntimeSelection } from "./runtime-ref-resume-authority.js";
|
|
13
|
+
export { certifyFloatingConsumerPolicyReceipt as certifyV4FloatingConsumerPolicyReceipt } from "./floating-consumer-evidence.js";
|
|
14
|
+
export { createDomainPublicationQualificationReceipt as createV4PublicationQualificationReceipt } from "./publication-qualification.js";
|
|
15
|
+
export { createRuntimeResumeLineage as createV4RuntimeResumeLineage } from "./runtime-ref-resume-authority.js";
|
|
16
|
+
export { resolveFloatingConsumerPolicyAuthority as resolveV4FloatingConsumerPolicyAuthority } from "./floating-consumer-policy.js";
|
|
17
|
+
export { scanFloatingConsumerPolicy as scanV4FloatingConsumerPolicy } from "./floating-consumer-policy.js";
|
|
18
|
+
export { scanRuntimeSelectorPersistence as scanV4RuntimeSelectorPersistence } from "./runtime-selector-persistence.js";
|
|
19
|
+
export { consumerPolicyScannerRoot as v4ConsumerPolicyScannerRoot } from "./floating-consumer-policy.js";
|
|
20
|
+
export { floatingConsumerDocumentRoot as v4FloatingConsumerDocumentRoot } from "./floating-consumer-evidence.js";
|
|
21
|
+
export { domainPublicationQualificationRoot as v4PublicationQualificationRoot } from "./publication-qualification.js";
|
|
22
|
+
export { runtimeResumeDocumentRoot as v4RuntimeResumeDocumentRoot } from "./runtime-ref-resume-authority.js";
|
|
23
|
+
export { validatePublicationQualificationReceipt as validateV4PublicationQualificationReceipt } from "./publication-qualification.js";
|
|
24
|
+
export { verifyFloatingConsumerPolicyCertification as verifyV4FloatingConsumerPolicyCertification } from "./floating-consumer-evidence.js";
|
|
25
|
+
export { verifyFloatingConsumerPolicyReceipt as verifyV4FloatingConsumerPolicyReceipt } from "./floating-consumer-evidence.js";
|
|
26
|
+
export { verifyRuntimeAuthorizationReceipt as verifyV4RuntimeAuthorizationReceipt } from "./runtime-ref-resume-authority.js";
|
|
27
|
+
export { verifyRuntimeResumeLineage as verifyV4RuntimeResumeLineage } from "./runtime-ref-resume-authority.js";
|
|
28
|
+
|
|
29
|
+
export {
|
|
30
|
+
SURFACE_TIMESTAMP_POLICY_CONTRACT,
|
|
31
|
+
applySurfaceTimestampPolicy,
|
|
32
|
+
createSurfaceTimestampPolicy,
|
|
33
|
+
} from "./surface-manifest.js";
|