@kungfu-tech/buildchain 4.0.2-alpha.9 → 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 +14 -5
- package/CONTRIBUTING.md +58 -0
- package/README.md +3 -3
- package/actions/promote-buildchain-ref/README.md +1 -1
- package/actions/release-candidate-promote/README.md +31 -0
- package/architecture/agent-change-map.md +190 -126
- package/architecture/{v4-architecture-constitution.md → architecture-constitution.md} +33 -30
- 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 +384 -0
- package/architecture/{v4-cross-platform-adopter-qualification.json → cross-platform-adopter-qualification.json} +4 -4
- package/architecture/{v4-delivery-authority-parity.json → delivery-authority-parity.json} +17 -17
- package/architecture/{v4-delivery-warrant-shadow-bootstrap-plan.json → delivery-warrant-shadow-bootstrap-plan.json} +4 -4
- package/architecture/{v4-delivery-warrant-shadow-bootstrap-plan.md → delivery-warrant-shadow-bootstrap-plan.md} +7 -7
- package/architecture/{v4-floating-consumer-policy.json → floating-consumer-policy.json} +2 -2
- 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 +201 -154
- package/architecture/maintainability-debt.json +205 -146
- package/architecture/maintainability-policy.json +37 -33
- package/architecture/{v4-next-development-parity.json → next-development-parity.json} +12 -12
- package/architecture/{v4-partial-mutation-recovery-qualification.json → partial-mutation-recovery-qualification.json} +8 -5
- package/architecture/{v4-platform-stage-checkpoints.json → platform-stage-checkpoints.json} +3 -3
- package/architecture/{v4-provider-operation-journal-contract.json → provider-operation-journal-contract.json} +10 -7
- package/architecture/publication-facade-patches.json +64 -0
- 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} +9 -6
- package/architecture/release-tail-contract-inventory.json +6 -6
- package/architecture/{v4-release-topology.json → release-topology.json} +163 -72
- 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/rust-wasm-production-authority.json +58 -0
- package/architecture/{v4-stable-publication-fence.json → stable-publication-fence.json} +7 -4
- package/architecture/{v4-stage-capsule-contract.json → stage-capsule-contract.json} +1 -1
- package/architecture/{v4-stage-capsule-qualification.json → stage-capsule-qualification.json} +8 -8
- 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} +35 -33
- package/architecture/universal-workflow-bootstrap.json +176 -0
- package/architecture/universal-workflow-fault-campaign.json +72 -0
- package/architecture/universal-workflow-train-admission.json +40 -0
- package/architecture/workflow-taxonomy.json +1462 -0
- package/bin/buildchain.mjs +10 -10
- package/bin/internal/adopter-delivery-cli.mjs +9 -9
- package/contracts/buildchain-v2-residuals-v1.json +57 -48
- package/contracts/dev-delivery-authority-v2.schema.json +16 -2
- package/contracts/fixtures/v4-tail-reseal-v1/valid.json +1 -1
- package/contracts/v4-canonical-contracts-v1.schema.json +1 -0
- 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 +98 -53
- package/dist/site/buildchain-site.json +351 -102
- package/dist/site/capability-registry.json +7 -7
- package/dist/site/controller-registry.json +50 -13
- package/dist/site/kfd-claims.json +2773 -1052
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +14 -14
- package/dist/site/node-api-registry.json +13176 -10733
- package/dist/site/page-registry.json +332 -83
- package/dist/site/public-surface-audit.json +3227 -1222
- package/dist/site/publication-authority-registry.json +1135 -363
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/release-provenance.json +18 -9
- package/dist/site/schemas/dev-delivery-authority-v2.schema.json +16 -2
- package/dist/site/site-manifest.json +18 -18
- package/dist/site/workflow-registry.json +5367 -1931
- package/docs/MAP.md +5 -3
- package/docs/auditable-demo.md +1 -1
- package/docs/cli.md +21 -8
- package/docs/dev-delivery-warrant.md +1 -1
- package/docs/engineering-housekeeper.md +3 -3
- package/docs/kfd-support.md +26 -2
- package/docs/next-development-transition.md +26 -3
- package/docs/node-api-reference.md +618 -358
- package/docs/oci-publication.md +173 -0
- package/docs/publication-authority.md +2 -2
- package/docs/publish-transaction.md +36 -3
- package/docs/release-candidate.md +3 -3
- package/docs/release-flow.md +67 -19
- package/docs/release-governance.md +8 -8
- package/docs/release-passport.md +27 -2
- package/docs/reusable-build-surface.md +17 -1
- package/docs/v4-adopter-delivery.md +4 -4
- 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 +77 -8
- 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 +58 -0
- package/docs/v4-stage-capsule.md +9 -9
- package/docs/v4-tail-reseal.md +2 -2
- package/docs/workflow-catalog.md +155 -0
- package/docs/workflow-path-migration.md +109 -0
- package/package.json +39 -24
- 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/artifact-verification-envelope.js +5 -5
- package/packages/core/buildchain-contract.js +6 -6
- package/packages/core/buildchain-domain.wasm +0 -0
- package/packages/core/buildchain-kfd-claims.js +2 -2
- package/packages/core/buildchain-publication-authority.js +43 -26
- package/packages/core/{v4-canonical-contracts.js → canonical-contracts.js} +39 -103
- package/packages/core/ci-lane-change-budget.js +14 -1
- package/packages/core/controller-evidence.js +4 -1
- 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-candidate-identity.js +40 -6
- 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 +14 -15
- package/packages/core/dev-delivery-warrant.js +15 -5
- package/packages/core/domain-wasm-artifact.js +7 -0
- package/packages/core/domain-wasm.js +216 -0
- package/packages/core/{v4-floating-consumer-evidence.js → floating-consumer-evidence.js} +14 -14
- package/packages/core/{v4-floating-consumer-policy.js → floating-consumer-policy.js} +28 -30
- package/packages/core/{v4-floating-consumer-release-passport.js → floating-consumer-release-passport.js} +25 -25
- package/packages/core/github-governance-authority.js +4 -4
- package/packages/core/index.js +4 -8
- package/packages/core/kfd-adopter-manifest.js +46 -47
- package/packages/core/next-development-projection.js +26 -3
- 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-agent-entry.js +30 -4
- package/packages/core/paper-fleet.js +1 -1
- package/packages/core/paper-runtime-channels.js +348 -0
- package/packages/core/paper-scaffold-content.js +10 -0
- package/packages/core/paper.js +37 -71
- 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/product-publication.js +59 -0
- package/packages/core/{v4-protected-publication-source.js → protected-publication-source.js} +22 -24
- package/packages/core/provider-operation-journal.js +62 -0
- package/packages/core/{v4-provider-readback-idempotency.js → provider-readback-idempotency.js} +40 -125
- 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/release-invocation.js +64 -0
- package/packages/core/release-line-dry-run.js +1 -1
- package/packages/core/release-passport-contract.js +5 -5
- package/packages/core/release-passport.js +41 -40
- package/packages/core/release-tail-product-capabilities.js +9 -0
- package/packages/core/release-tail-provider-plane.js +68 -1048
- 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/universal-workflow-bootstrap.js +586 -0
- package/scripts/{v4-architecture.mjs → architecture.mjs} +6 -6
- package/scripts/binary-publication-evidence.mjs +135 -0
- 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-contract-core.mjs +1 -14
- package/scripts/build-domain-wasm.mjs +177 -0
- package/scripts/{v3-v4-capability-catalog.mjs → capability-parity-catalog.mjs} +19 -19
- package/scripts/check-action-bundles.mjs +12 -2
- package/scripts/{check-v3-v4-capability-inventory.mjs → check-capability-parity-inventory.mjs} +42 -42
- package/scripts/check-ci-lane-change-budget.mjs +4 -1
- package/scripts/check-core-mechanism-inventory.mjs +8 -4
- package/scripts/{check-v4-floating-consumer-policy-contract.mjs → check-floating-consumer-policy-contract.mjs} +10 -10
- package/scripts/check-implementation-naming.mjs +135 -0
- package/scripts/check-inventory.mjs +39 -47
- package/scripts/check-maintainability.mjs +25 -115
- package/scripts/{check-v4-public-dogfood-contract.mjs → check-public-dogfood-contract.mjs} +37 -24
- package/scripts/{check-v4-release-topology.mjs → check-release-topology.mjs} +131 -52
- package/scripts/{check-v4-runtime-semantic-closure.mjs → check-runtime-semantic-closure.mjs} +23 -17
- package/scripts/check-universal-workflow-bootstrap.mjs +266 -0
- package/scripts/check-workflow-taxonomy.mjs +6 -0
- package/scripts/{v4-consumer-policy.mjs → consumer-policy.mjs} +15 -15
- package/scripts/copy-domain-wasm.mjs +14 -0
- 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-authority-command-adapters.mjs +1 -1
- package/scripts/dev-delivery-authority.mjs +8 -8
- package/scripts/dev-delivery-source-proof-reuse.mjs +2 -1
- package/scripts/dev-delivery-warrant-options.mjs +15 -10
- package/scripts/dev-delivery-warrant-store.mjs +98 -13
- package/scripts/dev-delivery-warrant-transition.mjs +109 -0
- package/scripts/dev-delivery-warrant.mjs +80 -103
- package/scripts/dev-pr-auto-merge.mjs +15 -15
- package/scripts/dev-pr-delivery-warrant.mjs +1 -1
- package/scripts/generate-channel-build-workflow.mjs +7 -2
- package/scripts/generate-channel-promotion-workflow.mjs +19 -34
- package/scripts/generate-release-candidate-passport.mjs +23 -23
- package/scripts/generate-site-bundle.mjs +28 -28
- package/scripts/generate-universal-workflow-facades.mjs +498 -0
- package/scripts/generate-workflow-taxonomy.mjs +25 -0
- package/scripts/github-output.mjs +31 -0
- 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/maintainability-metrics.mjs +16 -5
- package/scripts/maintainability-public-surface.mjs +115 -0
- package/scripts/next-development-review.mjs +313 -0
- package/scripts/oci-compose-preview.mjs +261 -0
- package/scripts/paper-work-fleet-cli.mjs +2 -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} +28 -13
- 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/publication-settlement.mjs +211 -0
- package/scripts/release-asset-client.mjs +91 -0
- package/scripts/{v4-release-candidate-adapter.mjs → release-candidate-adapter.mjs} +4 -4
- package/scripts/release-candidate-resolver.mjs +24 -35
- 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 +344 -0
- package/scripts/stable-candidate-qualification.mjs +1 -1
- 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 +91 -0
- package/scripts/universal-workflow-backflow.mjs +212 -0
- package/scripts/universal-workflow-engine.mjs +620 -0
- package/scripts/universal-workflow-self-dogfood.mjs +205 -0
- package/scripts/verify-version-state-delta.mjs +175 -0
- package/scripts/{v4-warrant-shadow-plan.mjs → warrant-shadow-plan.mjs} +6 -6
- package/scripts/workflow-taxonomy.mjs +507 -0
- package/templates/native-dev-delivery.yml +4 -7
- package/templates/universal-buildchain-bootstrap-recovery.yml +282 -0
- package/templates/universal-buildchain-bootstrap.yml +28 -0
- package/actions/v4-release-candidate-promote/README.md +0 -3
- package/packages/core/v4-partial-mutation-recovery-qualification.js +0 -395
- package/packages/core/v4-product-publication.js +0 -387
- package/packages/core/v4-provider-operation-journal.js +0 -531
- package/packages/core/v4-release-activation-shadow.js +0 -519
- package/packages/core/v4-release-invocation.js +0 -425
- package/packages/core/v4-stable-publication-fence.js +0 -357
- /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-release-invocation-fixtures.json → release-invocation-fixtures.json} +0 -0
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
2
|
|
|
3
|
-
export const
|
|
3
|
+
export const FLOATING_CONSUMER_POLICY =
|
|
4
4
|
"kungfu-buildchain-v4-floating-consumer-policy/v1";
|
|
5
|
-
export const
|
|
5
|
+
export const FLOATING_CONSUMER_RECEIPT =
|
|
6
6
|
"kungfu-buildchain-v4-floating-consumer-policy-receipt/v1";
|
|
7
|
-
export const
|
|
7
|
+
export const FLOATING_CONSUMER_CERTIFICATION =
|
|
8
8
|
"kungfu-buildchain-v4-floating-consumer-certification/v1";
|
|
9
9
|
|
|
10
10
|
const SHA256_ROOT = /^sha256:[0-9a-f]{64}$/u;
|
|
11
11
|
const ALPHA_RECOVERY_BOOTSTRAP = Object.freeze({
|
|
12
12
|
repository: "kungfu-systems/buildchain",
|
|
13
|
-
sourcePath: ".github/workflows/
|
|
13
|
+
sourcePath: ".github/workflows/self-ops-promotion-recovery.yml",
|
|
14
14
|
workflow: ".github/workflows/.release-candidate-promote.yml",
|
|
15
15
|
selector: "alpha/v4/v4.0",
|
|
16
16
|
});
|
|
@@ -135,18 +135,18 @@ function verifyFloatingSelector(value, check, label) {
|
|
|
135
135
|
);
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
-
export function
|
|
138
|
+
export function floatingConsumerDocumentRoot(value) {
|
|
139
139
|
return documentRoot(value);
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
export function
|
|
142
|
+
export function verifyFloatingConsumerPolicyReceipt(options = {}) {
|
|
143
143
|
const { receipt, receiptRoot = "", expectedReceiptRoot = "" } = options;
|
|
144
144
|
const failures = [];
|
|
145
145
|
const check = checker(failures);
|
|
146
146
|
check(
|
|
147
|
-
receipt?.schema ===
|
|
147
|
+
receipt?.schema === FLOATING_CONSUMER_RECEIPT,
|
|
148
148
|
"receipt-contract-invalid",
|
|
149
|
-
`receipt must use ${
|
|
149
|
+
`receipt must use ${FLOATING_CONSUMER_RECEIPT}`,
|
|
150
150
|
);
|
|
151
151
|
check(
|
|
152
152
|
receipt?.status === "passed",
|
|
@@ -199,10 +199,10 @@ function defaultAuthority(options, receiptRoot) {
|
|
|
199
199
|
};
|
|
200
200
|
}
|
|
201
201
|
|
|
202
|
-
export function
|
|
203
|
-
const verification =
|
|
202
|
+
export function certifyFloatingConsumerPolicyReceipt(options = {}) {
|
|
203
|
+
const verification = verifyFloatingConsumerPolicyReceipt(options);
|
|
204
204
|
const certification = {
|
|
205
|
-
schema:
|
|
205
|
+
schema: FLOATING_CONSUMER_CERTIFICATION,
|
|
206
206
|
status: verification.ok ? "certified" : "rejected",
|
|
207
207
|
receiptRoot: verification.receiptRoot,
|
|
208
208
|
caller: options.receipt?.caller || {},
|
|
@@ -284,14 +284,14 @@ function verifyCertificationAuthority(certification, expected, check) {
|
|
|
284
284
|
);
|
|
285
285
|
}
|
|
286
286
|
|
|
287
|
-
export function
|
|
287
|
+
export function verifyFloatingConsumerPolicyCertification(options = {}) {
|
|
288
288
|
const { certification, certificationRoot = "" } = options;
|
|
289
289
|
const failures = [];
|
|
290
290
|
const check = checker(failures);
|
|
291
291
|
check(
|
|
292
|
-
certification?.schema ===
|
|
292
|
+
certification?.schema === FLOATING_CONSUMER_CERTIFICATION,
|
|
293
293
|
"certification-contract-invalid",
|
|
294
|
-
`certification must use ${
|
|
294
|
+
`certification must use ${FLOATING_CONSUMER_CERTIFICATION}`,
|
|
295
295
|
);
|
|
296
296
|
check(
|
|
297
297
|
certification?.status === "certified",
|
|
@@ -7,20 +7,20 @@ import {
|
|
|
7
7
|
} from "./buildchain-contract.js";
|
|
8
8
|
import { parseYamlUses } from "./workflow-yaml-contract.js";
|
|
9
9
|
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
} from "./
|
|
10
|
+
FLOATING_CONSUMER_POLICY,
|
|
11
|
+
FLOATING_CONSUMER_RECEIPT,
|
|
12
|
+
floatingConsumerDocumentRoot,
|
|
13
|
+
} from "./floating-consumer-evidence.js";
|
|
14
14
|
|
|
15
15
|
export {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
} from "./
|
|
16
|
+
FLOATING_CONSUMER_CERTIFICATION,
|
|
17
|
+
FLOATING_CONSUMER_POLICY,
|
|
18
|
+
FLOATING_CONSUMER_RECEIPT,
|
|
19
|
+
certifyFloatingConsumerPolicyReceipt,
|
|
20
|
+
floatingConsumerDocumentRoot,
|
|
21
|
+
verifyFloatingConsumerPolicyCertification,
|
|
22
|
+
verifyFloatingConsumerPolicyReceipt,
|
|
23
|
+
} from "./floating-consumer-evidence.js";
|
|
24
24
|
|
|
25
25
|
const EXACT_SHA = /^[0-9a-f]{40}$/u;
|
|
26
26
|
const SHA256_ROOT = /^sha256:[0-9a-f]{64}$/u;
|
|
@@ -28,7 +28,7 @@ const BUILDCHAIN_REPOSITORY = "kungfu-systems/buildchain";
|
|
|
28
28
|
const CHANNELS = Object.freeze({ v4: "stable", "v4-alpha": "alpha" });
|
|
29
29
|
const ALPHA_RECOVERY_BOOTSTRAP = Object.freeze({
|
|
30
30
|
selector: "alpha/v4/v4.0",
|
|
31
|
-
sourcePath: ".github/workflows/
|
|
31
|
+
sourcePath: ".github/workflows/self-ops-promotion-recovery.yml",
|
|
32
32
|
workflow: ".github/workflows/.release-candidate-promote.yml",
|
|
33
33
|
});
|
|
34
34
|
const DEFAULT_STABLE_LOCK_PATH = ".buildchain/contract-lock.json";
|
|
@@ -36,12 +36,12 @@ const DEFAULT_ALPHA_LOCK_PATH = ".buildchain/alpha-contract-lock.json";
|
|
|
36
36
|
const TRANSIENT_ACTION =
|
|
37
37
|
/^\.\/\.buildchain\/(?:runtime|workflow-shell|attester-runtime|release-tail-runtime)\//u;
|
|
38
38
|
const SCANNER_PATHS = Object.freeze([
|
|
39
|
-
"architecture/
|
|
39
|
+
"architecture/floating-consumer-policy.json",
|
|
40
40
|
"contracts/v4-floating-consumer-policy-receipt-v1.schema.json",
|
|
41
41
|
"packages/core/buildchain-contract.js",
|
|
42
|
-
"packages/core/
|
|
42
|
+
"packages/core/floating-consumer-policy.js",
|
|
43
43
|
"packages/core/workflow-yaml-contract.js",
|
|
44
|
-
"scripts/
|
|
44
|
+
"scripts/consumer-policy.mjs",
|
|
45
45
|
]);
|
|
46
46
|
|
|
47
47
|
function defaultRuntimeRoot() {
|
|
@@ -73,9 +73,7 @@ function resolveInside(root, relative, label) {
|
|
|
73
73
|
return file;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
export function
|
|
77
|
-
runtimeRoot = defaultRuntimeRoot(),
|
|
78
|
-
) {
|
|
76
|
+
export function consumerPolicyScannerRoot(runtimeRoot = defaultRuntimeRoot()) {
|
|
79
77
|
return sha256(
|
|
80
78
|
stableJson(
|
|
81
79
|
SCANNER_PATHS.map((relative) => ({
|
|
@@ -86,7 +84,7 @@ export function v4ConsumerPolicyScannerRoot(
|
|
|
86
84
|
);
|
|
87
85
|
}
|
|
88
86
|
|
|
89
|
-
export function
|
|
87
|
+
export function resolveFloatingConsumerPolicyAuthority({
|
|
90
88
|
runtimeRoot = defaultRuntimeRoot(),
|
|
91
89
|
callerRoot = process.cwd(),
|
|
92
90
|
stableLockPath = DEFAULT_STABLE_LOCK_PATH,
|
|
@@ -94,7 +92,7 @@ export function resolveV4FloatingConsumerPolicyAuthority({
|
|
|
94
92
|
} = {}) {
|
|
95
93
|
const policy = readJson(
|
|
96
94
|
runtimeRoot,
|
|
97
|
-
"architecture/
|
|
95
|
+
"architecture/floating-consumer-policy.json",
|
|
98
96
|
"v4 floating consumer policy",
|
|
99
97
|
).value;
|
|
100
98
|
const readLock = (relative, label) => {
|
|
@@ -102,12 +100,12 @@ export function resolveV4FloatingConsumerPolicyAuthority({
|
|
|
102
100
|
if (!fs.existsSync(file))
|
|
103
101
|
throw new Error(`${label} contract lock is missing: ${relative}`);
|
|
104
102
|
const value = JSON.parse(fs.readFileSync(file, "utf8"));
|
|
105
|
-
return { path: relative, root:
|
|
103
|
+
return { path: relative, root: floatingConsumerDocumentRoot(value) };
|
|
106
104
|
};
|
|
107
105
|
return {
|
|
108
106
|
policy,
|
|
109
|
-
policyRoot:
|
|
110
|
-
scannerRoot:
|
|
107
|
+
policyRoot: floatingConsumerDocumentRoot(policy),
|
|
108
|
+
scannerRoot: consumerPolicyScannerRoot(runtimeRoot),
|
|
111
109
|
contractLocks: {
|
|
112
110
|
stable: readLock(stableLockPath, "stable"),
|
|
113
111
|
alpha: readLock(alphaLockPath, "alpha"),
|
|
@@ -287,14 +285,14 @@ function classifyBuildchainUses(records, failures, { repository } = {}) {
|
|
|
287
285
|
for (const record of records) {
|
|
288
286
|
const parsed = coordinate(record.uses);
|
|
289
287
|
if (!parsed || parsed.repository !== BUILDCHAIN_REPOSITORY) continue;
|
|
290
|
-
const
|
|
288
|
+
const domainCandidate =
|
|
291
289
|
parsed.selector === "v4" ||
|
|
292
290
|
parsed.selector === "v4-alpha" ||
|
|
293
291
|
/^v4(?:[./-]|$)/u.test(parsed.selector) ||
|
|
294
292
|
parsed.selector === ALPHA_RECOVERY_BOOTSTRAP.selector ||
|
|
295
293
|
EXACT_SHA.test(parsed.selector.toLowerCase()) ||
|
|
296
294
|
parsed.selector.includes("${{");
|
|
297
|
-
if (!
|
|
295
|
+
if (!domainCandidate) continue;
|
|
298
296
|
const bootstrapShape =
|
|
299
297
|
normalizeWorkflowPath(parsed.path) ===
|
|
300
298
|
ALPHA_RECOVERY_BOOTSTRAP.workflow &&
|
|
@@ -429,7 +427,7 @@ function verifySelectedLock({
|
|
|
429
427
|
}
|
|
430
428
|
}
|
|
431
429
|
|
|
432
|
-
export function
|
|
430
|
+
export function scanFloatingConsumerPolicy({
|
|
433
431
|
root = process.cwd(),
|
|
434
432
|
invocationRoot = root,
|
|
435
433
|
repository = "",
|
|
@@ -446,8 +444,8 @@ export function scanV4FloatingConsumerPolicy({
|
|
|
446
444
|
} = {}) {
|
|
447
445
|
const resolvedRoot = path.resolve(root);
|
|
448
446
|
const resolvedInvocationRoot = path.resolve(invocationRoot);
|
|
449
|
-
if (!policy || policy.contract !==
|
|
450
|
-
throw new Error(`policy must use ${
|
|
447
|
+
if (!policy || policy.contract !== FLOATING_CONSUMER_POLICY) {
|
|
448
|
+
throw new Error(`policy must use ${FLOATING_CONSUMER_POLICY}`);
|
|
451
449
|
}
|
|
452
450
|
const failures = [];
|
|
453
451
|
const normalizedSourceSha = String(sourceSha || "").toLowerCase();
|
|
@@ -535,7 +533,7 @@ export function scanV4FloatingConsumerPolicy({
|
|
|
535
533
|
invocationUses,
|
|
536
534
|
});
|
|
537
535
|
const receipt = {
|
|
538
|
-
schema:
|
|
536
|
+
schema: FLOATING_CONSUMER_RECEIPT,
|
|
539
537
|
status: failures.length ? "failed" : "passed",
|
|
540
538
|
caller: { repository, sourceSha: normalizedSourceSha },
|
|
541
539
|
invocation: {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
} from "./
|
|
4
|
+
floatingConsumerDocumentRoot,
|
|
5
|
+
verifyFloatingConsumerPolicyCertification,
|
|
6
|
+
} from "./floating-consumer-evidence.js";
|
|
7
7
|
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
} from "./
|
|
8
|
+
verifyRuntimeAuthorizationReceipt,
|
|
9
|
+
verifyRuntimeResumeLineage,
|
|
10
|
+
} from "./runtime-ref-resume-authority.js";
|
|
11
11
|
const SHA256_ROOT = /^sha256:[0-9a-f]{64}$/u;
|
|
12
|
-
export function
|
|
12
|
+
export function isPromotionRouting(value = undefined) {
|
|
13
13
|
return [
|
|
14
14
|
value?.router?.ref,
|
|
15
15
|
value?.shell?.ref,
|
|
@@ -31,13 +31,13 @@ function resolveCallerLock(root, relative, label) {
|
|
|
31
31
|
}
|
|
32
32
|
return {
|
|
33
33
|
path: relative,
|
|
34
|
-
root:
|
|
34
|
+
root: floatingConsumerDocumentRoot(
|
|
35
35
|
JSON.parse(fs.readFileSync(file, "utf8")),
|
|
36
36
|
),
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
export function
|
|
40
|
+
export function resolveFloatingConsumerCallerLocks(value, cwd) {
|
|
41
41
|
const certification = value?.certification || value;
|
|
42
42
|
const declared = certification?.authority || {};
|
|
43
43
|
const stableLockPath = declared?.contractLocks?.stable?.path || "";
|
|
@@ -55,7 +55,7 @@ function normalizeCertification(value, expected) {
|
|
|
55
55
|
throw new Error("v4ConsumerPolicyCertification must be a JSON object");
|
|
56
56
|
}
|
|
57
57
|
const certification = value.certification || value;
|
|
58
|
-
const verification =
|
|
58
|
+
const verification = verifyFloatingConsumerPolicyCertification({
|
|
59
59
|
certification,
|
|
60
60
|
certificationRoot: value.certificationRoot || "",
|
|
61
61
|
expectedCertificationRoot: expected.certificationRoot,
|
|
@@ -76,7 +76,7 @@ function normalizeCertification(value, expected) {
|
|
|
76
76
|
}
|
|
77
77
|
return { certificationRoot: verification.certificationRoot, certification };
|
|
78
78
|
}
|
|
79
|
-
export function
|
|
79
|
+
export function resolveConsumerPolicyCertificationIdentity({
|
|
80
80
|
release = {},
|
|
81
81
|
routing = {},
|
|
82
82
|
runtimeResume = undefined,
|
|
@@ -101,7 +101,7 @@ export function resolveV4ConsumerPolicyCertificationIdentity({
|
|
|
101
101
|
runtimeSha: buildSha || certifiedSha || routing?.runtime?.resolvedSha || "",
|
|
102
102
|
};
|
|
103
103
|
}
|
|
104
|
-
export function
|
|
104
|
+
export function requireConsumerPolicyCertification({
|
|
105
105
|
value,
|
|
106
106
|
repository,
|
|
107
107
|
sourceSha,
|
|
@@ -110,14 +110,14 @@ export function requireV4ConsumerPolicyCertification({
|
|
|
110
110
|
cwd,
|
|
111
111
|
certificationRoot,
|
|
112
112
|
}) {
|
|
113
|
-
const
|
|
114
|
-
if (
|
|
113
|
+
const domainRouting = isPromotionRouting(routing);
|
|
114
|
+
if (domainRouting && !value) {
|
|
115
115
|
throw new Error(
|
|
116
116
|
"Buildchain v4 Release Passport requires an external floating consumer policy certification",
|
|
117
117
|
);
|
|
118
118
|
}
|
|
119
119
|
if (!value) return undefined;
|
|
120
|
-
if (
|
|
120
|
+
if (domainRouting && !SHA256_ROOT.test(String(certificationRoot || ""))) {
|
|
121
121
|
throw new Error(
|
|
122
122
|
"Buildchain v4 Release Passport requires an expected external certification root",
|
|
123
123
|
);
|
|
@@ -127,7 +127,7 @@ export function requireV4ConsumerPolicyCertification({
|
|
|
127
127
|
sourceSha,
|
|
128
128
|
runtimeSha: runtimeSha || routing?.runtime?.resolvedSha || "",
|
|
129
129
|
certificationRoot,
|
|
130
|
-
...(
|
|
130
|
+
...(domainRouting ? resolveFloatingConsumerCallerLocks(value, cwd) : {}),
|
|
131
131
|
});
|
|
132
132
|
}
|
|
133
133
|
|
|
@@ -137,7 +137,7 @@ export function releasePassportCertificationVerificationOptions({
|
|
|
137
137
|
routing,
|
|
138
138
|
}) {
|
|
139
139
|
const authority = evidence?.certification?.authority || {};
|
|
140
|
-
const identity =
|
|
140
|
+
const identity = resolveConsumerPolicyCertificationIdentity({
|
|
141
141
|
release: { ...passport?.release, certification: evidence?.certification },
|
|
142
142
|
routing,
|
|
143
143
|
runtimeResume: passport?.v4RuntimeResume,
|
|
@@ -203,21 +203,21 @@ export function normalizePromotionEvidence({
|
|
|
203
203
|
release = {},
|
|
204
204
|
v4ConsumerPolicyCertification: certification,
|
|
205
205
|
v4ConsumerPolicyCertificationRoot: certificationRoot,
|
|
206
|
-
|
|
206
|
+
domainRuntimeResumeEvidence,
|
|
207
207
|
repository,
|
|
208
208
|
sourceSha,
|
|
209
209
|
cwd,
|
|
210
210
|
}) {
|
|
211
211
|
const routing = normalizePromotionRouting(release.promotionRouting);
|
|
212
|
-
const identity =
|
|
212
|
+
const identity = resolveConsumerPolicyCertificationIdentity({
|
|
213
213
|
release: { ...release, certification },
|
|
214
214
|
routing,
|
|
215
|
-
runtimeResume:
|
|
215
|
+
runtimeResume: domainRuntimeResumeEvidence,
|
|
216
216
|
sourceSha,
|
|
217
217
|
});
|
|
218
218
|
return {
|
|
219
219
|
routing,
|
|
220
|
-
consumerPolicy:
|
|
220
|
+
consumerPolicy: requireConsumerPolicyCertification({
|
|
221
221
|
value: certification,
|
|
222
222
|
repository,
|
|
223
223
|
sourceSha: identity.sourceSha,
|
|
@@ -229,12 +229,12 @@ export function normalizePromotionEvidence({
|
|
|
229
229
|
};
|
|
230
230
|
}
|
|
231
231
|
|
|
232
|
-
export function
|
|
232
|
+
export function normalizeRuntimeResumeEvidence(value, expected = {}) {
|
|
233
233
|
if (value === undefined || value === null || value === "") return undefined;
|
|
234
234
|
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
235
|
-
throw new Error("
|
|
235
|
+
throw new Error("domainRuntimeResumeEvidence must be a JSON object");
|
|
236
236
|
}
|
|
237
|
-
const authorizationVerification =
|
|
237
|
+
const authorizationVerification = verifyRuntimeAuthorizationReceipt({
|
|
238
238
|
receipt: value.authorization,
|
|
239
239
|
receiptRoot: value.authorizationRoot,
|
|
240
240
|
repository: expected.repository,
|
|
@@ -247,7 +247,7 @@ export function normalizeV4RuntimeResumeEvidence(value, expected = {}) {
|
|
|
247
247
|
`v4 runtime authorization invalid: ${authorizationVerification.failures.join(", ")}`,
|
|
248
248
|
);
|
|
249
249
|
}
|
|
250
|
-
const lineageVerification =
|
|
250
|
+
const lineageVerification = verifyRuntimeResumeLineage({
|
|
251
251
|
lineage: value.lineage,
|
|
252
252
|
lineageRoot: value.lineageRoot,
|
|
253
253
|
repository: expected.repository,
|
|
@@ -118,12 +118,12 @@ const PROTECTED_AUTHORITY_PATHS = Object.freeze([
|
|
|
118
118
|
".github/CODEOWNERS",
|
|
119
119
|
".github/workflows/.publication-authority.yml",
|
|
120
120
|
".github/workflows/.release-candidate-promote.yml",
|
|
121
|
-
".github/workflows/
|
|
122
|
-
".github/workflows/
|
|
123
|
-
".github/workflows/
|
|
121
|
+
".github/workflows/self-ops-promotion-recovery.yml",
|
|
122
|
+
".github/workflows/self-release-promote.yml",
|
|
123
|
+
".github/workflows/self-ops-governance-audit.yml",
|
|
124
124
|
".github/workflows/paper-release-sealed.yml",
|
|
125
125
|
".github/workflows/paper-release.yml",
|
|
126
|
-
".github/workflows/release-line-
|
|
126
|
+
".github/workflows/self-release-line-open.yml",
|
|
127
127
|
".github/workflows/release-candidate-promote.yml",
|
|
128
128
|
"actions/promote-buildchain-ref/action.yml",
|
|
129
129
|
"actions/promote-buildchain-ref/dist/index.js",
|
package/packages/core/index.js
CHANGED
|
@@ -644,9 +644,9 @@ export {
|
|
|
644
644
|
} from "./kfd3-surface-register.js";
|
|
645
645
|
|
|
646
646
|
export * from "./release-propagation.js";
|
|
647
|
-
export * from "./
|
|
648
|
-
export * from "./
|
|
649
|
-
export * from "./
|
|
647
|
+
export * from "./floating-consumer-policy.js";
|
|
648
|
+
export * from "./runtime-ref-resume-authority.js";
|
|
649
|
+
export * from "./publication-qualification.js";
|
|
650
650
|
|
|
651
651
|
export {
|
|
652
652
|
RELEASE_ACTIVATION_CONTRACT,
|
|
@@ -698,8 +698,4 @@ export {
|
|
|
698
698
|
writePaperScaffold,
|
|
699
699
|
} from "./paper.js"; export * from "./paper-work.js"; export * from "./paper-fleet.js";
|
|
700
700
|
|
|
701
|
-
export
|
|
702
|
-
SURFACE_TIMESTAMP_POLICY_CONTRACT,
|
|
703
|
-
applySurfaceTimestampPolicy,
|
|
704
|
-
createSurfaceTimestampPolicy,
|
|
705
|
-
} from "./surface-manifest.js";
|
|
701
|
+
export * from "./public-export-compatibility.js";
|