@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
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: draft
|
|
3
|
+
period: ongoing
|
|
4
|
+
theme: oci-publication
|
|
5
|
+
doc_type: technical-reference
|
|
6
|
+
source_level: local-files
|
|
7
|
+
confidence: high
|
|
8
|
+
sensitivity: public
|
|
9
|
+
evidence_grade: B
|
|
10
|
+
review_state: unreviewed
|
|
11
|
+
last_reviewed: 2026-09-07
|
|
12
|
+
ai_provenance:
|
|
13
|
+
model_family: GPT-6
|
|
14
|
+
product: Codex
|
|
15
|
+
generated_at: 2026-09-06
|
|
16
|
+
invisible_context_boundary: No credentials or production registry state inspected.
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# OCI image family publication
|
|
20
|
+
|
|
21
|
+
Compose preview uses the workflow's scoped `packages: write` token for GHCR
|
|
22
|
+
requests. The separate `BUILDCHAIN_PROMOTION_TOKEN` serves GitHub governance
|
|
23
|
+
and receipt publication; it is never a fallback registry credential. Missing
|
|
24
|
+
registry identity fails before a write, and an unsuccessful registry response
|
|
25
|
+
reports only its HTTP status while retaining the exact qualification for recovery.
|
|
26
|
+
|
|
27
|
+
Buildchain v4 can publish a sealed family of container images to GHCR through
|
|
28
|
+
`publish-artifact-kind: oci` on the public release candidate promotion workflow.
|
|
29
|
+
The candidate build produces the image bytes and smoke evidence. The built-in
|
|
30
|
+
provider verifies and uploads those bytes, reads back every public image digest,
|
|
31
|
+
then allows release references and GitHub Release evidence to converge.
|
|
32
|
+
|
|
33
|
+
## Candidate contract
|
|
34
|
+
|
|
35
|
+
Publish exactly one `oci-family.json` alongside OCI layouts and smoke JSON files
|
|
36
|
+
in the Build artifact. Import `sealOciPublicationBundle` from
|
|
37
|
+
`@kungfu-tech/buildchain/oci-publication` to validate and seal the family. Its
|
|
38
|
+
`body` contains:
|
|
39
|
+
|
|
40
|
+
- `schema: kungfu-buildchain-oci-family/v1`, consumer `repository`, exact Git
|
|
41
|
+
`sourceSha`, and candidate package `version`.
|
|
42
|
+
- `expectedImages`: the complete set of image names.
|
|
43
|
+
- `images`: one entry for each expected image, with `name`, `repository`,
|
|
44
|
+
`digest`, `layout`, `platform`, `action`, `content`, and `smoke`.
|
|
45
|
+
|
|
46
|
+
Destinations must be `ghcr.io/<consumer-owner>/<consumer-repo>/<image-name>`.
|
|
47
|
+
`layout` is a relative OCI layout directory. Each image is a single Linux
|
|
48
|
+
amd64 or arm64 manifest; OCI and Docker schema 2 manifests are supported.
|
|
49
|
+
Layouts may share blobs and an index; each shared index entry identifies its
|
|
50
|
+
image with the `org.opencontainers.image.ref.name` annotation.
|
|
51
|
+
|
|
52
|
+
`content` records the image's original `sourceSha` and `version`, matching its
|
|
53
|
+
OCI revision/version labels. For `action: built`, both equal the candidate.
|
|
54
|
+
For `action: reused`, they retain the original content provenance while the
|
|
55
|
+
family binds the current candidate. `smoke` records a relative `path` and SHA256
|
|
56
|
+
`sha256`; its JSON must identify the image and record `passed: true`. The
|
|
57
|
+
consumer owns the actual smoke command and must fail the build if it fails.
|
|
58
|
+
|
|
59
|
+
Sealing verifies all config/layer sizes and digests, platform and provenance
|
|
60
|
+
labels, smoke bytes, and family completeness. Absolute paths, traversal, and
|
|
61
|
+
symlinks are rejected. The resolver derives the exact required image artifacts
|
|
62
|
+
from this sealed family, including when recovering a previous candidate run.
|
|
63
|
+
|
|
64
|
+
## Authority and publication
|
|
65
|
+
|
|
66
|
+
The thin caller grants `packages: write` in addition to its existing promotion
|
|
67
|
+
permissions. Reusable promotion wrappers inherit that caller envelope; npm
|
|
68
|
+
consumers do not need to request package registry authority. The provider uses
|
|
69
|
+
the action token only for GHCR, scoped to each declared consumer image.
|
|
70
|
+
No consumer publish command is executed.
|
|
71
|
+
|
|
72
|
+
The rooted product plan declares version-state materialization, OCI family
|
|
73
|
+
publication, then release reference convergence. Each image uses the exact
|
|
74
|
+
`v<version>` tag. A different existing digest aborts publication; a matching
|
|
75
|
+
existing image is reused. After a partial failure, recovery validates the same
|
|
76
|
+
candidate bytes and publishes only missing images. GHCR does not provide tag
|
|
77
|
+
compare-and-swap: callers must serialize publishers for a version, and external
|
|
78
|
+
writers must not race the publication workflow.
|
|
79
|
+
|
|
80
|
+
Success requires anonymous readback of every declared image at its expected
|
|
81
|
+
digest. Existing GHCR packages must permit the repository token to write and
|
|
82
|
+
anonymous clients to pull. The provider does not change package visibility or
|
|
83
|
+
access policy. It attaches `oci-publication-readback.json` to the GitHub Release;
|
|
84
|
+
the caller should also include the family and smoke JSON files in
|
|
85
|
+
`github-release-payload-patterns`.
|
|
86
|
+
|
|
87
|
+
See [Runtime Train Validation](runtime-train-validation.md) for testing an
|
|
88
|
+
unreleased runtime without persisting a train or exact SHA in the workflow.
|
|
89
|
+
|
|
90
|
+
## Multi-platform images and Compose applications
|
|
91
|
+
|
|
92
|
+
Use `schema: kungfu-buildchain-oci-family/v2` when the family includes an OCI
|
|
93
|
+
index or a Compose application. Existing v1 families keep their published
|
|
94
|
+
single-platform contract.
|
|
95
|
+
|
|
96
|
+
An index entry declares `platform: multi-platform` and the complete `platforms`
|
|
97
|
+
array, for example `["linux/amd64", "linux/arm64"]`. Every runnable child must
|
|
98
|
+
have matching platform and content labels. Descriptor sizes, digests and media
|
|
99
|
+
types are verified recursively; nested manifests are uploaded before their
|
|
100
|
+
parent index. BuildKit attestation manifests must identify a runnable child and
|
|
101
|
+
contain matching in-toto subjects. Missing platforms, duplicate platforms,
|
|
102
|
+
foreign URLs and broken blob references fail sealing. Embedded descriptor `data`
|
|
103
|
+
is accepted only as canonical Base64 for at most 1 MiB, with the declared size
|
|
104
|
+
and digest matching the required local blob byte for byte. Malformed or
|
|
105
|
+
inconsistent embedded content fails sealing; manifests are never rewritten.
|
|
106
|
+
This follows the [OCI embedded-content contract](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#embedded-content).
|
|
107
|
+
|
|
108
|
+
A Compose entry declares `kind: compose`, `platform: compose`, and `targetImage`
|
|
109
|
+
pointing to an image in the same family. Its unique family name may differ from
|
|
110
|
+
that image, but its destination repository must match it. The immutable tag is
|
|
111
|
+
`compose-v<version>`; image entries retain `v<version>`.
|
|
112
|
+
|
|
113
|
+
The bounded Compose representation is an OCI 1.1 image manifest with
|
|
114
|
+
`artifactType: application/vnd.docker.compose.project`, an empty JSON config
|
|
115
|
+
and one `application/vnd.docker.compose.file+yaml` layer. That layer contains
|
|
116
|
+
JSON, a YAML subset, so structural verification needs no executable YAML loader.
|
|
117
|
+
Every service image is pinned to a digest and at least one uses the exact
|
|
118
|
+
family image. Environment interpolation inside other fields can remain intact.
|
|
119
|
+
These media types follow the [Docker Compose publisher](https://github.com/docker/compose/blob/v5.1.2/internal/oci/push.go).
|
|
120
|
+
|
|
121
|
+
Candidate smoke evidence describes its actual pre-publication checks. It must
|
|
122
|
+
not claim that an unpublished public Compose reference was installed. Public
|
|
123
|
+
installation qualification occurs after immutable publication and before a
|
|
124
|
+
preview alias moves.
|
|
125
|
+
|
|
126
|
+
## Evidence-gated Compose preview
|
|
127
|
+
|
|
128
|
+
An optional Compose `preview` declaration contains exactly the supported alias
|
|
129
|
+
`compose-preview`, the previously accepted `previousDigest` (or `none`), and
|
|
130
|
+
`qualificationWorkflow`, a repository workflow path. The immutable family seals
|
|
131
|
+
this policy before any publication effect.
|
|
132
|
+
|
|
133
|
+
After v4 publication is complete, dispatch that qualification workflow on the
|
|
134
|
+
exact published alpha tag. It must pull the immutable public image and Compose,
|
|
135
|
+
run fresh installation, restart, account-isolation, runtime-hardening, upgrade
|
|
136
|
+
and rollback checks, and qualify both Linux architectures. The workflow has no
|
|
137
|
+
registry write authority. Upload one artifact named
|
|
138
|
+
`oci-compose-qualification-<run-id>-<run-attempt>` containing `qualification.json`
|
|
139
|
+
and its hash-bound JSON evidence files.
|
|
140
|
+
|
|
141
|
+
The receipt uses `schema: kungfu-buildchain-compose-qualification/v1` and binds
|
|
142
|
+
`repository`, `tag`, published `sourceSha`, sealed `familyRoot`, `runId`,
|
|
143
|
+
`runAttempt`, exact `image` and `application` repository/digest references,
|
|
144
|
+
`previousDigest`, and `passed: true`. Its `checks` object requires all of
|
|
145
|
+
`freshInstall`, `restartPersistence`, `upgradePersistence`, `rollbackPersistence`,
|
|
146
|
+
`accountIsolation`, and `hardenedRuntime` to be true. Its `platforms` object
|
|
147
|
+
requires `linux/amd64` and `linux/arm64` entries with `passed: true`; `evidence`
|
|
148
|
+
contains nonempty `{path, sha256}` bindings to the actual JSON results.
|
|
149
|
+
|
|
150
|
+
A thin consumer workflow listens to completion of that qualification workflow
|
|
151
|
+
and calls `public-release-oci-compose-preview.yml@v4-alpha`, passing
|
|
152
|
+
`BUILDCHAIN_PROMOTION_TOKEN`. The reusable workflow resolves its own exact
|
|
153
|
+
runtime, enforces the dual floating-channel locks, verifies the public v4
|
|
154
|
+
settlement, family and provider readback roots, and checks the live GitHub run's
|
|
155
|
+
repository, source, workflow, event, attempt and successful conclusion. It never
|
|
156
|
+
executes the consumer's artifact files. Only then does it copy the exact Compose
|
|
157
|
+
manifest bytes to the declared alias and verify the public digest.
|
|
158
|
+
|
|
159
|
+
The expected-old digest is checked immediately before mutation. An already
|
|
160
|
+
matching target is an idempotent success; any other drift blocks the move.
|
|
161
|
+
Publishers for this alias share repository-level concurrency. GHCR has no atomic
|
|
162
|
+
tag compare-and-swap, so external writers must also avoid racing this workflow.
|
|
163
|
+
The immutable release retains the appended
|
|
164
|
+
`buildchain-compose-preview-<run-id>-<run-attempt>.json` receipt. A failed
|
|
165
|
+
qualification leaves the existing preview intact, while the immutable alpha
|
|
166
|
+
and its original publication evidence remain available for diagnosis.
|
|
167
|
+
|
|
168
|
+
The verified publication Passport distinguishes the built candidate from the
|
|
169
|
+
protected publication commit. Compose family source identity follows
|
|
170
|
+
`source.builtSourceSha`; `source.builtSourceTreeSha` must equal the admitted
|
|
171
|
+
invocation tree. Registry readback and qualification runs remain bound to the
|
|
172
|
+
protected publication SHA. A tree-equivalent protected merge therefore retains
|
|
173
|
+
the original image identity without accepting a different source tree.
|
|
@@ -8,11 +8,11 @@ confidence: high
|
|
|
8
8
|
sensitivity: public
|
|
9
9
|
evidence_grade: A
|
|
10
10
|
review_state: unreviewed
|
|
11
|
-
last_reviewed: 2026-
|
|
11
|
+
last_reviewed: 2026-09-06
|
|
12
12
|
ai_provenance:
|
|
13
|
-
model_family: GPT-
|
|
13
|
+
model_family: GPT-6
|
|
14
14
|
product: Codex
|
|
15
|
-
generated_at: 2026-
|
|
15
|
+
generated_at: 2026-09-06
|
|
16
16
|
invisible_context: not asserted
|
|
17
17
|
---
|
|
18
18
|
|
|
@@ -113,6 +113,39 @@ a missing or different id fails before provider mutation. An absent transaction
|
|
|
113
113
|
is created only when no expected existing identity was requested. See
|
|
114
114
|
[Release Candidate: Resume from an existing candidate run](release-candidate.md#resume-from-an-existing-candidate-run).
|
|
115
115
|
|
|
116
|
+
## V4 sealed npm package sets
|
|
117
|
+
|
|
118
|
+
The v4 alpha provider accepts a sealed set of 2–64 npm tarballs with one main
|
|
119
|
+
package and same-version platform packages. The candidate resolver records each
|
|
120
|
+
package's name, version, role, relative path, size, SHA-256, and npm integrity in
|
|
121
|
+
the candidate root. QUALIFY passes the set into the Rust/WASM publication
|
|
122
|
+
planner, which binds every package to its own operation and orders platform
|
|
123
|
+
packages by name before the main package. A single package retains the existing
|
|
124
|
+
operation identity.
|
|
125
|
+
|
|
126
|
+
Use `publish-package-main` to name the main package. The optional
|
|
127
|
+
`publish-package-set-order: platforms-first-main-last` input states the same
|
|
128
|
+
ordering. Omit legacy `publish-mode` and `publish-command` inputs: the v4 provider
|
|
129
|
+
publishes the sealed tarballs through npm trusted publishing. It does not run a
|
|
130
|
+
consumer publish command.
|
|
131
|
+
|
|
132
|
+
Before any provider effect, APPLY checks the complete package inventory,
|
|
133
|
+
tarball package identities, bytes, and integrity against the rooted intent.
|
|
134
|
+
Each package receives independent registry readback and a Release Tail receipt.
|
|
135
|
+
After an interrupted attempt, existing matching versions are observed without
|
|
136
|
+
republishing; conflicting integrity stops the transaction. Release refs follow
|
|
137
|
+
only after every package is confirmed.
|
|
138
|
+
|
|
139
|
+
Anchored alpha versions such as `22.22.3-kf.5-alpha.4` remain unchanged. For
|
|
140
|
+
`anchored/manual` repositories, successful publication leaves next development
|
|
141
|
+
in `waiting-anchor`; it does not invent the next upstream anchor. Multi-package
|
|
142
|
+
stable rematerialization is not supported by this provider and fails before
|
|
143
|
+
publication. The existing singleton stable flow remains available.
|
|
144
|
+
|
|
145
|
+
The contract is exercised by `product-publication-topology.test.mjs`,
|
|
146
|
+
`product-provider-adapters.test.mjs`, and
|
|
147
|
+
`alpha-next-development-provider.test.mjs` under `tests/`.
|
|
148
|
+
|
|
116
149
|
## Lifecycle
|
|
117
150
|
|
|
118
151
|
Repositories declare publish work in `.buildchain/buildchain.toml`:
|
package/docs/release-flow.md
CHANGED
|
@@ -352,7 +352,7 @@ before writing the transaction state as `complete`.
|
|
|
352
352
|
|
|
353
353
|
| Evidence | Meaning and reuse boundary |
|
|
354
354
|
| --- | --- |
|
|
355
|
-
| Full source execution | `pnpm run check` runs source tests, Rust gates, policy checks and generated artifact checks. Each Node test file runs once; the focused `check:
|
|
355
|
+
| Full source execution | `pnpm run check` runs source tests, Rust gates, policy checks and generated artifact checks. Each Node test file runs once; the focused `check:contracts` command still includes its 22 contract test files. |
|
|
356
356
|
| Merge queue proof | A successful full merge-group run seals its exact source SHA/tree, workflow, check definition, WASM runtime, toolchain versions, dependency locks, hosted image and platform. The proof expires after six hours and is verified against the completed GitHub run attempt and artifact archive digest. |
|
|
357
357
|
| Push reuse | A Dev push may reuse that exact full execution. Its summary links the original run and proof; it does not claim to have rerun tests. Missing, failed, expired, ambiguous, tampered or unavailable evidence executes the full check. |
|
|
358
358
|
| Version-state projection | Requires an authenticated full-source proof for the exact base and an ancestor-bound delta containing only declared version files and derived material. The base generator reconstructs every tracked byte, including derived digests. Any source, workflow, lock, configuration, file-mode or unexplained output change executes the full check. Projection results cannot issue a new full-source proof. |
|
|
@@ -128,7 +128,7 @@ in the final Release Passport. See
|
|
|
128
128
|
[`v4-runtime-ref-resume-authority.md`](v4-runtime-ref-resume-authority.md).
|
|
129
129
|
|
|
130
130
|
See the normative
|
|
131
|
-
[`v4 floating consumer policy`](../architecture/
|
|
131
|
+
[`v4 floating consumer policy`](../architecture/floating-consumer-policy.md)
|
|
132
132
|
and its machine declaration for the exact acceptance boundary. This policy does
|
|
133
133
|
not change v3 behavior.
|
|
134
134
|
|
|
@@ -33,7 +33,7 @@ minimal v4 absorption base
|
|
|
33
33
|
verified protected-base advances through
|
|
34
34
|
`dev/v4/v4.0@e0342713c7447960c13bd73377282b2e93f4853d` before delivery. These
|
|
35
35
|
identities, the v3 vector-suite root, and the KFD package cut are committed in
|
|
36
|
-
[`
|
|
36
|
+
[`adopter-delivery-parity.json`](../architecture/adopter-delivery-parity.json)
|
|
37
37
|
and exposed by the public Node API.
|
|
38
38
|
|
|
39
39
|
## Public contract
|
|
@@ -139,7 +139,7 @@ terminal verification and N-1 bootstrap must pass, and the independent
|
|
|
139
139
|
The workflow then reconciles one exact report from each platform. Final family
|
|
140
140
|
qualification combines the Buildchain self-dogfood and `agent-hub-demo`
|
|
141
141
|
matrices through the exported
|
|
142
|
-
`@kungfu-tech/buildchain/
|
|
142
|
+
`@kungfu-tech/buildchain/cross-platform-adopter-qualification` aggregator.
|
|
143
143
|
The report and aggregate explicitly grant no production, provider, release, or
|
|
144
144
|
stable-publication authority.
|
|
145
145
|
|
|
@@ -41,21 +41,21 @@ Event, receipt, and typed-fault objects use closed versioned shapes in [`contrac
|
|
|
41
41
|
|
|
42
42
|
## Implementations and proof
|
|
43
43
|
|
|
44
|
-
- JavaScript: [`packages/core/
|
|
45
|
-
- Rust: [`crates/buildchain-
|
|
46
|
-
- Shared golden and adversarial cases: [`architecture/
|
|
44
|
+
- JavaScript: [`packages/core/canonical-contracts.js`](../packages/core/canonical-contracts.js)
|
|
45
|
+
- Rust: [`crates/buildchain-domain-contracts`](../crates/buildchain-domain-contracts)
|
|
46
|
+
- Shared golden and adversarial cases: [`architecture/canonical-contract-fixtures.json`](../architecture/canonical-contract-fixtures.json)
|
|
47
47
|
|
|
48
48
|
Run the focused proof with:
|
|
49
49
|
|
|
50
50
|
```sh
|
|
51
|
-
pnpm run check:
|
|
51
|
+
pnpm run check:contracts
|
|
52
52
|
```
|
|
53
53
|
|
|
54
54
|
The check validates both implementations, compares exact UTF-8 bytes and SHA-256 roots, exercises invalid numbers, keys, clocks, domains, and envelope shapes, and scans the pure libraries for ambient clock or provider imports. Delivery Warrant decide/fold, shadow invocation, provider effects, and production authority remain outside this contract slice.
|
|
55
55
|
|
|
56
56
|
## Shared Delivery Warrant fixture runner
|
|
57
57
|
|
|
58
|
-
The versioned trace contract in [`contracts/v4-delivery-warrant-trace-v1.schema.json`](../contracts/v4-delivery-warrant-trace-v1.schema.json) is the language-neutral boundary for retained Delivery Warrant fixtures. The JavaScript runner in [`packages/core/
|
|
58
|
+
The versioned trace contract in [`contracts/v4-delivery-warrant-trace-v1.schema.json`](../contracts/v4-delivery-warrant-trace-v1.schema.json) is the language-neutral boundary for retained Delivery Warrant fixtures. The JavaScript runner in [`packages/core/delivery-warrant-fixture-runner.js`](../packages/core/delivery-warrant-fixture-runner.js) and the Rust runner in [`crates/buildchain-domain-contracts`](../crates/buildchain-domain-contracts) consume the same UTF-8 fixture bytes and emit the same deterministic semantic projection.
|
|
59
59
|
|
|
60
60
|
Each trace is closed and ordered. It binds the exact prior root, event, action or typed fault, canonical successor bytes and root, generation, fencing counter, ordered declarative effects, provider-neutral observations, and rooted receipt. The runner verifies the full root chain before returning a projection. Malformed JSON, missing or unknown fields, reordered sequences, stale roots, and unsupported contract versions fail closed.
|
|
61
61
|
|
|
@@ -68,13 +68,13 @@ The runner is not a state-machine implementation and does not sample time, execu
|
|
|
68
68
|
|
|
69
69
|
## TypeScript shadow adapter
|
|
70
70
|
|
|
71
|
-
The adapter in [`packages/core/
|
|
71
|
+
The adapter in [`packages/core/delivery-warrant-shadow-adapter.js`](../packages/core/delivery-warrant-shadow-adapter.js) runs the existing TypeScript v3 fixture projection first and preserves that exact result as the only authoritative output. When explicitly enabled, it sends the same canonical input bytes to the replaceable Rust host command, requires the effect-disabled host capability, and captures the returned semantic projection only as a non-authoritative observation. Rust never receives effect authority, and success, failure, timeout, cancellation, malformed output, or an unsupported host cannot change the v3 result.
|
|
72
72
|
|
|
73
73
|
Shadow retention accepts only checked-in fixtures or captured replays explicitly marked public-safe. Each returned observation binds the input root, exact TypeScript and Rust source revisions, validator version, capture time, fixed retention deadline, both projections, and sanitized diagnostics. It contains no comparison verdict or cutover signal. The adapter is disabled unless the caller opts in or sets `BUILDCHAIN_V4_WARRANT_SHADOW=enabled`; even then, invalid source bindings or an unsafe retention class skip Rust invocation.
|
|
74
74
|
|
|
75
75
|
## Pure Rust Delivery Warrant domain
|
|
76
76
|
|
|
77
|
-
The `warrant` module in [`crates/buildchain-
|
|
77
|
+
The `warrant` module in [`crates/buildchain-domain-contracts`](../crates/buildchain-domain-contracts) implements the protected Delivery Warrant manifest as provider-free typed state, seven event decisions, and a separate fold. It freezes all nine candidate states and all nine primitives from the shadow bootstrap plan. Every decision binds the event's exact `subjectRoot`, takes time only from the validated event envelope, and returns a typed action or fault. Fold produces a canonical successor; the combined transition produces only ordered `persist-successor` and `request-admission` intents plus a rooted receipt. It never executes either intent.
|
|
78
78
|
|
|
79
79
|
Duplicate submission deliberately retains the legacy generation/root mutation for shadow comparability. Manifest aliases remain explicit, waiting and blocked remain valid states without invented public transitions, and response-loss reconciliation is symmetric for every declarative effect. Stale expected-old roots and fences, lease expiry, terminal duplicates, cancellation, response loss, provider conflict, and retry exhaustion are closed typed outcomes. The retry policy permits at most one reread/redecision and then stops.
|
|
80
80
|
|
|
@@ -52,7 +52,7 @@ buildchain dev warrant observe \
|
|
|
52
52
|
--read-typescript-revision <sha> \
|
|
53
53
|
--read-rust-revision <sha> \
|
|
54
54
|
--read-validator-version semantic-diff-gate-v1 \
|
|
55
|
-
--read-evidence-output .buildchain/dev-delivery/
|
|
55
|
+
--read-evidence-output .buildchain/dev-delivery/read-evidence.json
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
The returned command result keeps the existing v3 observation schema for
|
|
@@ -64,8 +64,8 @@ root, and the retained evidence receipt root.
|
|
|
64
64
|
Focused verification:
|
|
65
65
|
|
|
66
66
|
```sh
|
|
67
|
-
node --test tests/
|
|
68
|
-
pnpm run check:
|
|
67
|
+
node --test tests/delivery-warrant-read-candidate.test.mjs
|
|
68
|
+
pnpm run check:contracts
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
This candidate does not authorize a v4 write cutover. Protected-window parity,
|
|
@@ -50,7 +50,7 @@ provider effects, modify v3 authority, or provide a v4 write cutover receipt.
|
|
|
50
50
|
|
|
51
51
|
## Run the gate
|
|
52
52
|
|
|
53
|
-
Call `
|
|
53
|
+
Call `runDeliveryWarrantSemanticDiffGate` with exact source revisions,
|
|
54
54
|
explicit observation time, schema and runner roots, public-safe retained cases,
|
|
55
55
|
bounded fault probes, an observation retention sink, and a report retention
|
|
56
56
|
sink. The returned report is canonical JSON data suitable for a caller-owned
|
|
@@ -59,7 +59,7 @@ retained evidence file.
|
|
|
59
59
|
The checked-in focused suite exercises that API against the real Rust host:
|
|
60
60
|
|
|
61
61
|
```sh
|
|
62
|
-
node --test tests/
|
|
62
|
+
node --test tests/delivery-warrant-fixture-runner.test.mjs
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
A qualified report makes only the next
|
|
@@ -71,5 +71,5 @@ documented in
|
|
|
71
71
|
Focused verification:
|
|
72
72
|
|
|
73
73
|
```sh
|
|
74
|
-
pnpm run check:
|
|
74
|
+
pnpm run check:contracts
|
|
75
75
|
```
|
|
@@ -8,11 +8,11 @@ confidence: high
|
|
|
8
8
|
sensitivity: public
|
|
9
9
|
evidence_grade: A
|
|
10
10
|
review_state: unreviewed
|
|
11
|
-
last_reviewed: 2026-09-
|
|
11
|
+
last_reviewed: 2026-09-07
|
|
12
12
|
ai_provenance:
|
|
13
13
|
model_family: GPT-6
|
|
14
14
|
product: Codex
|
|
15
|
-
generated_at: 2026-09-
|
|
15
|
+
generated_at: 2026-09-07
|
|
16
16
|
invisible_context: Provider credentials and private provider state were not read.
|
|
17
17
|
---
|
|
18
18
|
|
|
@@ -30,6 +30,12 @@ for stable, with matching stable and alpha contract locks. Exact commits and
|
|
|
30
30
|
immutable release tags identify retained evidence and explicitly admitted runtime
|
|
31
31
|
inputs; tracked v4 reusable-workflow selectors remain `@v4` or `@v4-alpha`.
|
|
32
32
|
|
|
33
|
+
Before qualifying a new release, run `node scripts/check-universal-workflow-bootstrap.mjs`.
|
|
34
|
+
The required repository check rejects an expired or not-yet-valid candidate admission
|
|
35
|
+
policy before publication. Renew the bounded validity window through protected review;
|
|
36
|
+
keep its capability, permission, reviewer and exact-source requirements unchanged.
|
|
37
|
+
Historical publication receipts remain immutable when a later admission window expires.
|
|
38
|
+
|
|
33
39
|
The release transaction is fail-closed. The v4 provider-operation journal,
|
|
34
40
|
activation plan, stable publication fence, and partial-mutation recovery plan
|
|
35
41
|
bind the exact source, qualification, policy, provider readback, protected
|
|
@@ -27,7 +27,7 @@ release candidate and asks the production release-tail planner and executor to
|
|
|
27
27
|
simulate, replay, or observe provider-facing publication behavior.
|
|
28
28
|
|
|
29
29
|
The rooted parity matrix is
|
|
30
|
-
[`architecture/
|
|
30
|
+
[`architecture/publication-rehearsal-parity.json`](../architecture/publication-rehearsal-parity.json),
|
|
31
31
|
and the public schema is
|
|
32
32
|
[`v4-publication-rehearsal-capsule-v1.schema.json`](../contracts/v4-publication-rehearsal-capsule-v1.schema.json).
|
|
33
33
|
|
|
@@ -125,6 +125,6 @@ records Linux, macOS and Windows projections. Their capsule, transaction,
|
|
|
125
125
|
state, and evidence roots are byte-identical. Regenerate or verify them with:
|
|
126
126
|
|
|
127
127
|
```sh
|
|
128
|
-
node scripts/
|
|
129
|
-
node scripts/
|
|
128
|
+
node scripts/publication-rehearsal-fixture.mjs
|
|
129
|
+
node scripts/publication-rehearsal-fixture.mjs --check
|
|
130
130
|
```
|
|
@@ -60,9 +60,9 @@ construction and verification.
|
|
|
60
60
|
|
|
61
61
|
Normative files:
|
|
62
62
|
|
|
63
|
-
- `architecture/
|
|
63
|
+
- `architecture/runtime-ref-resume-authority.json`
|
|
64
64
|
- `contracts/v4-runtime-ref-resume-authority-v1.schema.json`
|
|
65
|
-
- `packages/core/
|
|
65
|
+
- `packages/core/runtime-ref-resume-authority.js`
|
|
66
66
|
- `scripts/authorize-promotion-runtime-override.cjs`
|
|
67
67
|
|
|
68
68
|
This contract changes no v3 behavior, grants no provider mutation authority,
|
|
@@ -19,16 +19,16 @@ ai_provenance:
|
|
|
19
19
|
# Buildchain v4 Rust/WASM production authority
|
|
20
20
|
|
|
21
21
|
Buildchain v4 的确定性发布语义由
|
|
22
|
-
`crates/buildchain-
|
|
22
|
+
`crates/buildchain-domain-contracts` 编译出的同一份 WebAssembly artifact 执行。Node
|
|
23
23
|
仍是 GitHub Action 和 npm 包的宿主,但只负责 provider SDK、文件系统、凭据、环境变量及
|
|
24
24
|
workflow 输入输出等副作用边界。权威契约见
|
|
25
|
-
`architecture/
|
|
25
|
+
`architecture/rust-wasm-production-authority.json`。
|
|
26
26
|
|
|
27
27
|
## 分发与调用
|
|
28
28
|
|
|
29
|
-
`packages/core/buildchain-
|
|
29
|
+
`packages/core/buildchain-domain.wasm` 与 JavaScript 一起提交和发布。三个生产 Action
|
|
30
30
|
在构建时把完全相同的字节复制到各自 `dist/`;运行时不进入调用方仓库寻找 Rust
|
|
31
|
-
源码,也不要求安装 Rust。`packages/core/
|
|
31
|
+
源码,也不要求安装 Rust。`packages/core/domain-wasm.js` 从自身相邻路径同步读取
|
|
32
32
|
artifact,先核验生成元数据中的 SHA-256,再实例化 WebAssembly 并通过封闭 JSON/bytes
|
|
33
33
|
ABI 调用领域操作。
|
|
34
34
|
|
|
@@ -38,9 +38,9 @@ ABI 调用领域操作。
|
|
|
38
38
|
|
|
39
39
|
## 构建和审计
|
|
40
40
|
|
|
41
|
-
`pnpm run build:
|
|
41
|
+
`pnpm run build:wasm` 使用锁定的 Rust 工具链和 `wasm32-unknown-unknown` target 生成
|
|
42
42
|
artifact 与绑定元数据,并把 Cargo 依赖源目录映射到稳定的虚拟路径,禁止主机 Cargo
|
|
43
|
-
registry 路径进入 artifact。`pnpm run check:
|
|
43
|
+
registry 路径进入 artifact。`pnpm run check:wasm` 在干净临时 target 目录重新构建并逐字节
|
|
44
44
|
比较已跟踪 artifact。这个检查不是生产运行时的重复编译:生产只加载已提交字节;检查
|
|
45
45
|
用于证明这些字节仍能由当前 Rust 真相源和锁定工具链唯一导出,从而阻止源码、二进制或
|
|
46
46
|
生成元数据静默漂移。
|
package/docs/v4-stage-capsule.md
CHANGED
|
@@ -20,7 +20,7 @@ ai_provenance:
|
|
|
20
20
|
|
|
21
21
|
## Platform checkpoint projection
|
|
22
22
|
|
|
23
|
-
`architecture/
|
|
23
|
+
`architecture/platform-stage-checkpoints.json` is the single declaration
|
|
24
24
|
for the macOS arm64, Linux x64, and Windows x64 shadow checkpoint lanes. It
|
|
25
25
|
defines the allowed platform/stage pairs and the exact declared inputs,
|
|
26
26
|
outputs, environment names, toolchains, and portable restore paths.
|
|
@@ -100,19 +100,19 @@ GitHub Artifact and S3-compatible adapters expose only `effect-disabled` and
|
|
|
100
100
|
`fixture-backed` modes in this slice. They accept rooted locators, never raw
|
|
101
101
|
credentials or signed URLs, and cannot perform a provider upload or restore.
|
|
102
102
|
The executable architecture ceiling is
|
|
103
|
-
[`
|
|
103
|
+
[`stage-capsule-store-contract.json`](../architecture/stage-capsule-store-contract.json),
|
|
104
104
|
and the shared Rust/JavaScript fixture is
|
|
105
105
|
[`shared.json`](../contracts/fixtures/v4-stage-capsule-store-v1/shared.json).
|
|
106
106
|
|
|
107
107
|
Focused verification:
|
|
108
108
|
|
|
109
109
|
```sh
|
|
110
|
-
pnpm run check:
|
|
110
|
+
pnpm run check:contracts
|
|
111
111
|
```
|
|
112
112
|
|
|
113
113
|
## Deterministic resume planning
|
|
114
114
|
|
|
115
|
-
`architecture/
|
|
115
|
+
`architecture/stage-capsule-resume-planner.json` closes the Wave 2 resume
|
|
116
116
|
planner. Its request is an explicit topological stage graph with targets,
|
|
117
117
|
expected Capsule identity and retention, current Capsule/availability
|
|
118
118
|
observations, an evaluation clock, and separately declared provider or
|
|
@@ -133,7 +133,7 @@ shadow-only: it does not skip a v3 production stage or move v3 authority.
|
|
|
133
133
|
|
|
134
134
|
## Three-platform qualification and Wave reconciliation
|
|
135
135
|
|
|
136
|
-
`architecture/
|
|
136
|
+
`architecture/stage-capsule-qualification.json` closes the Wave 2
|
|
137
137
|
qualification boundary. Buildchain and external repositories use the same
|
|
138
138
|
Buildchain-owned public reusable workflow,
|
|
139
139
|
`.github/workflows/public-build-stage-capsule-canary.yml`. Buildchain's caller is the thin
|
|
@@ -182,12 +182,12 @@ authorized by this qualification.
|
|
|
182
182
|
Focused local rehearsal:
|
|
183
183
|
|
|
184
184
|
```sh
|
|
185
|
-
node scripts/
|
|
185
|
+
node scripts/stage-capsule-qualification.mjs campaign \
|
|
186
186
|
--work-root /tmp/buildchain-v4-stage-qualification \
|
|
187
187
|
--platform linux-x64 \
|
|
188
188
|
--consumer buildchain \
|
|
189
189
|
--runtime-ref <exact-buildchain-commit> \
|
|
190
190
|
--consumer-source-revision <exact-consumer-commit> \
|
|
191
191
|
--consumer-root . \
|
|
192
|
-
--lifecycle-evidence-root .buildchain/artifacts/
|
|
192
|
+
--lifecycle-evidence-root .buildchain/artifacts/stage-capsule-canary
|
|
193
193
|
```
|
package/docs/v4-tail-reseal.md
CHANGED
|
@@ -70,4 +70,4 @@ and archive digest; no credential or provider effect is replayed from a Stage
|
|
|
70
70
|
Capsule.
|
|
71
71
|
|
|
72
72
|
The v3-to-v4 invariant mapping is recorded in
|
|
73
|
-
[`architecture/
|
|
73
|
+
[`architecture/tail-reseal-parity.json`](../architecture/tail-reseal-parity.json).
|
package/docs/workflow-catalog.md
CHANGED
|
@@ -90,6 +90,7 @@ all related declarations. Run `pnpm run generate:workflows` and
|
|
|
90
90
|
| [public-ops-warrant-cancel.yml](../.github/workflows/public-ops-warrant-cancel.yml) | ops | reusable | active | Dev Delivery Warrant Queued Candidate Cancel | `dev-delivery-warrant-cancel.yml` |
|
|
91
91
|
| [public-ops-warrant-close.yml](../.github/workflows/public-ops-warrant-close.yml) | ops | reusable | active | Dev Delivery Warrant Close | `dev-delivery-warrant-close.yml` |
|
|
92
92
|
| [public-release-artifact-attestation.yml](../.github/workflows/public-release-artifact-attestation.yml) | release | reusable | active | Buildchain GitHub Artifact Attestation | `github-artifact-attestation.yml` |
|
|
93
|
+
| [public-release-oci-compose-preview.yml](../.github/workflows/public-release-oci-compose-preview.yml) | release | reusable | active | Buildchain OCI Compose Preview | — |
|
|
93
94
|
| [public-release-paper-sealed.yml](../.github/workflows/public-release-paper-sealed.yml) | release | reusable | active | Buildchain Sealed Paper Release | `paper-release-sealed.yml` |
|
|
94
95
|
| [public-release-paper.yml](../.github/workflows/public-release-paper.yml) | release | reusable | active | Buildchain Paper Release | `paper-release.yml` |
|
|
95
96
|
| [public-release-promote.yml](../.github/workflows/public-release-promote.yml) | release | reusable | active | Release Candidate Promote | `release-candidate-promote.yml` |
|