@kungfu-tech/buildchain 4.0.2-alpha.4 → 4.0.2-alpha.41
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 +10 -1
- package/CONTRIBUTING.md +24 -0
- package/README.md +2 -2
- package/actions/promote-buildchain-ref/README.md +1 -1
- package/actions/v4-release-candidate-promote/README.md +28 -0
- package/architecture/agent-change-map.md +66 -7
- package/architecture/ci-lane-change-budget.json +366 -0
- package/architecture/internal-capabilities.json +52 -8
- package/architecture/maintainability-debt.json +148 -92
- package/architecture/maintainability-policy.json +34 -30
- package/architecture/release-tail-contract-inventory.json +6 -6
- package/architecture/v4-architecture-constitution.md +23 -20
- package/architecture/v4-cross-platform-adopter-qualification.json +1 -1
- package/architecture/v4-delivery-authority-parity.json +2 -2
- package/architecture/v4-delivery-warrant-shadow-bootstrap-plan.json +1 -1
- package/architecture/v4-floating-consumer-policy.json +2 -2
- package/architecture/v4-next-development-parity.json +5 -5
- package/architecture/v4-partial-mutation-recovery-qualification.json +4 -1
- package/architecture/v4-platform-stage-checkpoints.json +1 -1
- package/architecture/v4-provider-operation-journal-contract.json +5 -2
- package/architecture/v4-publication-facade-patches.json +64 -0
- package/architecture/v4-release-activation-shadow-domain.json +5 -2
- package/architecture/v4-release-topology.json +143 -35
- package/architecture/v4-rust-wasm-production-authority.json +58 -0
- package/architecture/v4-stable-publication-fence.json +5 -2
- package/architecture/v4-stage-capsule-qualification.json +2 -2
- package/architecture/v4-tail-reseal-parity.json +8 -6
- package/architecture/v4-universal-workflow-bootstrap.json +171 -0
- package/architecture/v4-universal-workflow-fault-campaign.json +72 -0
- package/architecture/v4-universal-workflow-train-admission.json +40 -0
- package/architecture/workflow-taxonomy.json +1451 -0
- package/bin/buildchain.mjs +7 -7
- 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/dist/site/buildchain-contract.json +93 -48
- package/dist/site/buildchain-site.json +222 -69
- package/dist/site/capability-registry.json +4 -4
- package/dist/site/controller-registry.json +50 -13
- package/dist/site/kfd-claims.json +2569 -982
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +13 -13
- package/dist/site/node-api-registry.json +88 -83
- package/dist/site/page-registry.json +204 -51
- package/dist/site/public-surface-audit.json +3207 -1219
- package/dist/site/publication-authority-registry.json +1124 -362
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/schemas/dev-delivery-authority-v2.schema.json +16 -2
- package/dist/site/site-manifest.json +17 -17
- package/dist/site/workflow-registry.json +5063 -1659
- package/docs/MAP.md +1 -0
- package/docs/auditable-demo.md +1 -1
- package/docs/cli.md +3 -3
- 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 +2 -2
- package/docs/node-api-reference.md +129 -129
- package/docs/publication-authority.md +2 -2
- 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 +16 -0
- package/docs/v4-adopter-delivery.md +2 -2
- package/docs/v4-production-release.md +71 -8
- package/docs/v4-rust-wasm-production-authority.md +58 -0
- package/docs/v4-stage-capsule.md +2 -2
- package/docs/v4-tail-reseal.md +1 -1
- package/docs/workflow-catalog.md +154 -0
- package/docs/workflow-path-migration.md +109 -0
- package/package.json +10 -6
- package/packages/core/artifact-verification-envelope.js +5 -5
- package/packages/core/buildchain-contract.js +1 -1
- package/packages/core/buildchain-kfd-claims.js +2 -2
- package/packages/core/buildchain-publication-authority.js +42 -26
- package/packages/core/buildchain-v4-domain.wasm +0 -0
- package/packages/core/ci-lane-change-budget.js +14 -1
- package/packages/core/controller-evidence.js +4 -1
- package/packages/core/dev-delivery-candidate-identity.js +40 -6
- package/packages/core/dev-delivery-warrant-state.js +3 -4
- package/packages/core/dev-delivery-warrant.js +12 -2
- package/packages/core/github-governance-authority.js +4 -4
- package/packages/core/kfd-adopter-manifest.js +46 -47
- package/packages/core/next-development-projection.js +2 -2
- 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 +5 -4
- package/packages/core/release-tail-product-capabilities.js +29 -0
- package/packages/core/release-tail-provider-plane.js +68 -1048
- package/packages/core/v4-canonical-contracts.js +14 -75
- package/packages/core/v4-domain-wasm-artifact.js +7 -0
- package/packages/core/v4-domain-wasm.js +216 -0
- package/packages/core/v4-floating-consumer-evidence.js +1 -1
- package/packages/core/v4-floating-consumer-policy.js +1 -1
- package/packages/core/v4-partial-mutation-recovery-qualification.js +9 -386
- package/packages/core/v4-product-publication.js +57 -0
- package/packages/core/v4-protected-publication-source.js +19 -21
- package/packages/core/v4-provider-operation-journal.js +18 -487
- package/packages/core/v4-provider-readback-idempotency.js +12 -97
- package/packages/core/v4-release-activation-shadow.js +13 -500
- package/packages/core/v4-release-invocation.js +28 -389
- package/packages/core/v4-stable-publication-fence.js +13 -342
- package/packages/core/v4-universal-workflow-bootstrap.js +586 -0
- package/scripts/binary-publication-evidence.mjs +135 -0
- package/scripts/build-contract-core.mjs +1 -14
- package/scripts/build-v4-domain-wasm.mjs +189 -0
- package/scripts/check-action-bundles.mjs +12 -2
- package/scripts/check-ci-lane-change-budget.mjs +4 -1
- package/scripts/check-core-mechanism-inventory.mjs +4 -3
- package/scripts/check-inventory.mjs +35 -44
- package/scripts/check-maintainability.mjs +16 -113
- package/scripts/check-v4-floating-consumer-policy-contract.mjs +2 -2
- package/scripts/check-v4-public-dogfood-contract.mjs +22 -9
- package/scripts/check-v4-release-topology.mjs +214 -50
- package/scripts/check-v4-runtime-semantic-closure.mjs +4 -1
- package/scripts/check-v4-universal-workflow-bootstrap.mjs +266 -0
- package/scripts/check-workflow-taxonomy.mjs +6 -0
- package/scripts/copy-v4-domain-wasm.mjs +14 -0
- 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 +14 -9
- package/scripts/dev-delivery-warrant-store.mjs +73 -7
- package/scripts/dev-delivery-warrant-transition.mjs +109 -0
- package/scripts/dev-delivery-warrant.mjs +76 -99
- package/scripts/dev-pr-auto-merge.mjs +15 -15
- package/scripts/generate-channel-build-workflow.mjs +7 -2
- package/scripts/generate-channel-promotion-workflow.mjs +7 -5
- package/scripts/generate-site-bundle.mjs +11 -11
- package/scripts/generate-v4-universal-workflow-facades.mjs +458 -0
- package/scripts/generate-workflow-taxonomy.mjs +25 -0
- package/scripts/github-output.mjs +31 -0
- package/scripts/maintainability-metrics.mjs +16 -5
- package/scripts/maintainability-public-surface.mjs +115 -0
- package/scripts/next-development-review.mjs +307 -0
- package/scripts/release-asset-client.mjs +91 -0
- package/scripts/release-candidate-resolver.mjs +17 -18
- package/scripts/resume-from-candidate-run.mjs +1 -1
- package/scripts/source-verification-evidence.mjs +344 -0
- package/scripts/stable-candidate-qualification.mjs +1 -1
- package/scripts/universal-facade-maintainability.mjs +82 -0
- package/scripts/v4-product-publication-intent.mjs +121 -0
- package/scripts/v4-publication-settlement.mjs +211 -0
- package/scripts/v4-universal-workflow-backflow.mjs +212 -0
- package/scripts/v4-universal-workflow-engine.mjs +618 -0
- package/scripts/v4-universal-workflow-self-dogfood.mjs +205 -0
- package/scripts/verify-version-state-delta.mjs +173 -0
- 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
|
@@ -427,7 +427,7 @@
|
|
|
427
427
|
"repository": "kungfu-systems/buildchain",
|
|
428
428
|
"sourceCommit": "7c8956e8babb521d3e743d40108f115a59a40427",
|
|
429
429
|
"sourceTree": "7e24ca6bafe98b571d94c3bcf07a9d38b31092c5",
|
|
430
|
-
"workflow": ".github/workflows/
|
|
430
|
+
"workflow": ".github/workflows/self-release-promote.yml",
|
|
431
431
|
"runtimeRef": "local exact checkout",
|
|
432
432
|
"executableSurfaceIds": []
|
|
433
433
|
},
|
|
@@ -454,7 +454,7 @@
|
|
|
454
454
|
"repository": "kungfu-systems/kungfu",
|
|
455
455
|
"sourceCommit": "445ec32d6bf53dd5ff502d685792406ad38dd4f5",
|
|
456
456
|
"sourceTree": "4963b2f9deb0245f7277cea7224ab0d062a0cc54",
|
|
457
|
-
"workflow": ".github/workflows/release-new-version.yml",
|
|
457
|
+
"workflow": ".github/workflows/self-release-new-version-compat.yml",
|
|
458
458
|
"runtimeRef": "train/v3/v3.0/resume-candidate-run",
|
|
459
459
|
"executableSurfaceIds": [
|
|
460
460
|
"publication-admission-commands",
|
|
@@ -470,7 +470,7 @@
|
|
|
470
470
|
"repository": "kungfu-systems/libnode",
|
|
471
471
|
"sourceCommit": "4bef69b88a441f22024fa9f3d7bfd76a89963e8a",
|
|
472
472
|
"sourceTree": "6c4dec7fd70cbdcfbc9ada19e66271654eb393af",
|
|
473
|
-
"workflow": ".github/workflows/release-new-version.yml",
|
|
473
|
+
"workflow": ".github/workflows/self-release-new-version-compat.yml",
|
|
474
474
|
"runtimeRef": "v3-alpha",
|
|
475
475
|
"executableSurfaceIds": ["release-passport-producer-commands"]
|
|
476
476
|
},
|
|
@@ -479,7 +479,7 @@
|
|
|
479
479
|
"repository": "kungfu-systems/kfd",
|
|
480
480
|
"sourceCommit": "e82fe11acecdbebfd0c42778c7a1bd6fdc54ab81",
|
|
481
481
|
"sourceTree": "fe0ad4f4b98889c7c246fe16958e118ff79b193b",
|
|
482
|
-
"workflow": ".github/workflows/
|
|
482
|
+
"workflow": ".github/workflows/self-release-promote.yml",
|
|
483
483
|
"runtimeRef": "v3-alpha",
|
|
484
484
|
"executableSurfaceIds": []
|
|
485
485
|
},
|
|
@@ -488,7 +488,7 @@
|
|
|
488
488
|
"repository": "kungfu-systems/paper-kungfu-product-white-paper",
|
|
489
489
|
"sourceCommit": "82dd748d6b0edf18d0074262cc8d8ac803e45c7e",
|
|
490
490
|
"sourceTree": "a918f8840608931fdf88d007e20bc4f70ab7eb54",
|
|
491
|
-
"workflow": ".github/workflows/
|
|
491
|
+
"workflow": ".github/workflows/self-release-promote.yml",
|
|
492
492
|
"runtimeRef": "v3",
|
|
493
493
|
"executableSurfaceIds": []
|
|
494
494
|
}
|
|
@@ -497,7 +497,7 @@
|
|
|
497
497
|
{
|
|
498
498
|
"repository": "kungfu-systems/agent-hub-demo",
|
|
499
499
|
"sourceCommit": "633111450867919d5063298308cdbfcbd77a8d2e",
|
|
500
|
-
"workflow": ".github/workflows/
|
|
500
|
+
"workflow": ".github/workflows/self-release-promote.yml",
|
|
501
501
|
"runtimeRef": "v2",
|
|
502
502
|
"reason": "outside the Buildchain v3 contract inventory"
|
|
503
503
|
}
|
|
@@ -43,8 +43,8 @@ ledger.
|
|
|
43
43
|
Dependencies point inward only:
|
|
44
44
|
|
|
45
45
|
```text
|
|
46
|
-
workflows ->
|
|
47
|
-
legacy compatibility ->
|
|
46
|
+
workflows -> Node provider/IO adapters -> tracked Rust/WASM domain -> contracts
|
|
47
|
+
legacy compatibility -> Node facades / contracts
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
Contracts contain serialization and compatibility facts, not provider SDK
|
|
@@ -55,12 +55,12 @@ or Rust domain are hard-zero violations. Cycles are forbidden.
|
|
|
55
55
|
## 3. Single-writer rule
|
|
56
56
|
|
|
57
57
|
Every state machine has exactly one authoritative writer. The v4 cutover marks
|
|
58
|
-
the
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
write, cross-machine mutable file, or implicit
|
|
63
|
-
hard-zero budget.
|
|
58
|
+
the Rust/WASM domain authoritative and the legacy v3 and duplicate TypeScript
|
|
59
|
+
semantic writers retired. Node owns provider and IO effects and exposes
|
|
60
|
+
compatibility facades, but every deterministic release plan, fold, root, retry,
|
|
61
|
+
and receipt decision crosses the checked WASM ABI. A second writer, permanent
|
|
62
|
+
dual write, semantic fallback, cross-machine mutable file, or implicit
|
|
63
|
+
compatibility authority has a hard-zero budget.
|
|
64
64
|
|
|
65
65
|
## 4. Explicit complexity budgets
|
|
66
66
|
|
|
@@ -85,10 +85,14 @@ second hand-maintained architecture list is authoritative.
|
|
|
85
85
|
## 6. Production cutover boundary
|
|
86
86
|
|
|
87
87
|
The v4 line owns Delivery Warrant, Release Transaction, activation,
|
|
88
|
-
publication, propagation, and release-tail state.
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
88
|
+
publication, propagation, and release-tail state. Its production domain is the
|
|
89
|
+
tracked artifact governed by
|
|
90
|
+
[`v4-rust-wasm-production-authority.json`](v4-rust-wasm-production-authority.json):
|
|
91
|
+
Node verifies the artifact digest and ABI before use and fails closed without a
|
|
92
|
+
JavaScript semantic fallback. This does not introduce a daemon, a service
|
|
93
|
+
database, provider SDKs in contracts or Rust domain code, or a second writer.
|
|
94
|
+
The retained `release/v3/v3.0` coordinate is rollback evidence only and cannot
|
|
95
|
+
regain production authority without a new reviewed cutover.
|
|
92
96
|
|
|
93
97
|
## 7. Wave 0 host boundary
|
|
94
98
|
|
|
@@ -133,9 +137,8 @@ The executable provider operation journal contract is
|
|
|
133
137
|
[`v4-provider-operation-journal-contract.json`](v4-provider-operation-journal-contract.json).
|
|
134
138
|
It freezes one closed schema authority and one Rust v4 state-fold authority
|
|
135
139
|
for append-only intent, attempt, rooted observation, confirmation, and
|
|
136
|
-
reconciliation records. The
|
|
137
|
-
|
|
138
|
-
production writer.
|
|
140
|
+
reconciliation records. The Node v4 plane performs provider adaptation and
|
|
141
|
+
calls the tracked Rust/WASM authority; it contains no second state fold.
|
|
139
142
|
|
|
140
143
|
Logical operation identity excludes attempt ordinals and mutable provider or
|
|
141
144
|
runner facts. Every retry preserves `operationRoot`, while every attempt and
|
|
@@ -161,9 +164,9 @@ The executable release activation boundary is
|
|
|
161
164
|
[`v4-release-activation-shadow-domain.json`](v4-release-activation-shadow-domain.json).
|
|
162
165
|
It consumes an explicit qualification root, dependency graph, compensation
|
|
163
166
|
boundaries, provider-operation identities, and append-only journal facts to
|
|
164
|
-
derive one deterministic activation plan and resume state. Rust is the
|
|
165
|
-
plan-and-fold authority;
|
|
166
|
-
|
|
167
|
+
derive one deterministic activation plan and resume state. Rust/WASM is the
|
|
168
|
+
sole v4 plan-and-fold authority; the Node facade delegates through the checked
|
|
169
|
+
ABI and retains only provider adaptation.
|
|
167
170
|
|
|
168
171
|
Confirmed operations are never eligible for replay. Attempting, observed, and
|
|
169
172
|
confirmable operations require provider-neutral readback before any retry,
|
|
@@ -203,8 +206,8 @@ Every nonterminal operation maps deterministically to `retry`, `wait`,
|
|
|
203
206
|
`terminal-noop` facts and never re-enter the next-operation set. Missing,
|
|
204
207
|
expired, corrupt, conflicting, cross-boundary, or attempt-budget-exhausted
|
|
205
208
|
evidence fails closed at an exact Stage Capsule or provider-operation
|
|
206
|
-
checkpoint. The Rust domain is the sole v4 planner and
|
|
207
|
-
|
|
209
|
+
checkpoint. The Rust/WASM domain is the sole v4 planner and the Node facade
|
|
210
|
+
delegates to it. The planner is pure: it performs zero provider,
|
|
208
211
|
filesystem, network, credential, ref, package, image, or release mutation.
|
|
209
212
|
Their exact plan is the only recovery authority consumed by the TypeScript v4
|
|
210
213
|
provider adapter.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"inventoryAuthority": "architecture/v3-v4-live-capability-inventory.json",
|
|
5
5
|
"implementation": "packages/core/v4-cross-platform-adopter-qualification.js",
|
|
6
6
|
"runner": "scripts/v4-cross-platform-adopter-qualification.mjs",
|
|
7
|
-
"publicWorkflow": ".github/workflows/
|
|
7
|
+
"publicWorkflow": ".github/workflows/public-build-adopter-qualification.yml",
|
|
8
8
|
"sourceBinding": {
|
|
9
9
|
"runtime": "job.workflow_sha",
|
|
10
10
|
"consumer": "exact checked-out consumer commit",
|
|
@@ -227,7 +227,7 @@
|
|
|
227
227
|
"docs/dev-delivery-warrant.md",
|
|
228
228
|
"docs/dev-delivery-qualification-landing-adr.md",
|
|
229
229
|
"templates/native-dev-delivery.yml",
|
|
230
|
-
".github/workflows/
|
|
230
|
+
".github/workflows/self-ops-dev-delivery.yml",
|
|
231
231
|
".buildchain/contract-lock.json",
|
|
232
232
|
".buildchain/alpha-contract-lock.json"
|
|
233
233
|
],
|
|
@@ -246,5 +246,5 @@
|
|
|
246
246
|
"verificationEvidence": []
|
|
247
247
|
}
|
|
248
248
|
],
|
|
249
|
-
"matrixRoot": "sha256:
|
|
249
|
+
"matrixRoot": "sha256:85fc624f09abb2014601a9857dbcd07a59750b6dd6d77ab240ed037d3169ac69"
|
|
250
250
|
}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"legacyCore": "packages/core/dev-delivery-warrant.js",
|
|
10
10
|
"legacyStore": "scripts/dev-delivery-warrant.mjs",
|
|
11
11
|
"legacyWorkflows": [
|
|
12
|
-
".github/workflows/
|
|
12
|
+
".github/workflows/self-ops-dev-delivery.yml",
|
|
13
13
|
".github/workflows/dev-delivery-warrant-close.yml",
|
|
14
14
|
".github/workflows/dev-delivery-warrant-cancel.yml"
|
|
15
15
|
]
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
".github/workflows/.build.yml",
|
|
11
11
|
".github/workflows/publication-artifact.yml",
|
|
12
12
|
".github/workflows/release-candidate-promote.yml",
|
|
13
|
-
".github/workflows/
|
|
13
|
+
".github/workflows/public-build-stage-capsule-canary.yml"
|
|
14
14
|
]
|
|
15
15
|
},
|
|
16
16
|
"contractLocks": {
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"persistedSelectorOverride": false,
|
|
39
39
|
"protectedAlphaRecoveryBootstrap": {
|
|
40
40
|
"selector": "alpha/v4/v4.0",
|
|
41
|
-
"sourcePath": ".github/workflows/
|
|
41
|
+
"sourcePath": ".github/workflows/self-ops-promotion-recovery.yml",
|
|
42
42
|
"workflow": ".github/workflows/.release-candidate-promote.yml",
|
|
43
43
|
"repository": "kungfu-systems/buildchain"
|
|
44
44
|
},
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"target": {
|
|
12
12
|
"branch": "dev/v4/v4.0",
|
|
13
13
|
"implementationBaseline": "36ad1dc03a9d2785aca938a7a369e4b96707fa32",
|
|
14
|
-
"publicConsumerCaller": ".github/workflows/
|
|
15
|
-
"publicConsumerReusable": "kungfu-systems/buildchain/.github/workflows/
|
|
14
|
+
"publicConsumerCaller": ".github/workflows/self-build-public-consumer-dogfood.yml",
|
|
15
|
+
"publicConsumerReusable": "kungfu-systems/buildchain/.github/workflows/public-build-stage-capsule-canary.yml@v4-alpha"
|
|
16
16
|
},
|
|
17
17
|
"earlierContinuityDelta": {
|
|
18
18
|
"assignment": "2026-08-11-buildchain-next-development-version-continuity",
|
|
@@ -152,8 +152,8 @@
|
|
|
152
152
|
"claim": "V4 recovery proof runs as pure tests through the standard lifecycle.verify reached by the exact thin public consumer caller, while existing hosted dual-channel evidence keeps public v4-alpha and v4 routes.",
|
|
153
153
|
"disposition": "implemented",
|
|
154
154
|
"implementationEvidence": [
|
|
155
|
-
".github/workflows/
|
|
156
|
-
".github/workflows/
|
|
155
|
+
".github/workflows/self-build-public-consumer-dogfood.yml",
|
|
156
|
+
".github/workflows/self-build-alpha-dogfood.yml",
|
|
157
157
|
".buildchain/buildchain.toml",
|
|
158
158
|
"scripts/next-development-self-dogfood.mjs",
|
|
159
159
|
"scripts/next-development-self-dogfood-harness.mjs"
|
|
@@ -188,5 +188,5 @@
|
|
|
188
188
|
"verificationEvidence": []
|
|
189
189
|
}
|
|
190
190
|
],
|
|
191
|
-
"matrixRoot": "sha256:
|
|
191
|
+
"matrixRoot": "sha256:6affa0278532cfc96d3af04d113d7c509ec18df3a86d86945a2a5e7418d7c83e"
|
|
192
192
|
}
|
|
@@ -39,7 +39,10 @@
|
|
|
39
39
|
],
|
|
40
40
|
"implementations": {
|
|
41
41
|
"rustDomain": "crates/buildchain-v4-contracts/src/partial_mutation_recovery.rs",
|
|
42
|
-
"typescript": "packages/core/v4-partial-mutation-recovery-qualification.js"
|
|
42
|
+
"typescript": "packages/core/v4-partial-mutation-recovery-qualification.js",
|
|
43
|
+
"wasmRuntime": "packages/core/v4-domain-wasm.js",
|
|
44
|
+
"wasmArtifact": "packages/core/buildchain-v4-domain.wasm",
|
|
45
|
+
"artifactMetadata": "packages/core/v4-domain-wasm-artifact.js"
|
|
43
46
|
},
|
|
44
47
|
"roots": [
|
|
45
48
|
"partial-mutation-recovery-checkpoint",
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
}
|
|
82
82
|
],
|
|
83
83
|
"projections": {
|
|
84
|
-
"protectedWorkflow": ".github/workflows/verify.yml",
|
|
84
|
+
"protectedWorkflow": ".github/workflows/self-build-verify.yml",
|
|
85
85
|
"generatedTemplate": "scripts/init-repo.mjs",
|
|
86
86
|
"agentGuidance": "AGENTS.md",
|
|
87
87
|
"manual": "docs/v4-stage-capsule.md"
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"productionWriterCount": 1,
|
|
10
10
|
"stateFoldAuthority": "rust-v4-core",
|
|
11
11
|
"stateFoldWriterCount": 1,
|
|
12
|
-
"typescript": "provider-adapter-and-conformance-plane",
|
|
12
|
+
"typescript": "wasm-calling-provider-adapter-and-conformance-plane",
|
|
13
13
|
"productionWriteChange": true
|
|
14
14
|
},
|
|
15
15
|
"implementations": {
|
|
@@ -17,7 +17,10 @@
|
|
|
17
17
|
"rustFold": "crates/buildchain-v4-contracts/src/provider_operation_journal/fold.rs",
|
|
18
18
|
"rustReadback": "crates/buildchain-v4-contracts/src/provider_readback_idempotency.rs",
|
|
19
19
|
"typescript": "packages/core/v4-provider-operation-journal.js",
|
|
20
|
-
"typescriptReadback": "packages/core/v4-provider-readback-idempotency.js"
|
|
20
|
+
"typescriptReadback": "packages/core/v4-provider-readback-idempotency.js",
|
|
21
|
+
"wasmRuntime": "packages/core/v4-domain-wasm.js",
|
|
22
|
+
"wasmArtifact": "packages/core/buildchain-v4-domain.wasm",
|
|
23
|
+
"artifactMetadata": "packages/core/v4-domain-wasm-artifact.js"
|
|
21
24
|
},
|
|
22
25
|
"activationDomain": {
|
|
23
26
|
"architecture": "architecture/v4-release-activation-shadow-domain.json",
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"sourceRevision": "a41c00a0c0b2dbd57c238cd9b326b167a1d27ca8",
|
|
4
|
+
"purpose": "Retain completed v4 publication receipt independently of next-development and preserve immutable binary publication assets. Scope publication checks to governed Paper repositories without changing generic report lifecycle contracts.",
|
|
5
|
+
"facades": [
|
|
6
|
+
{
|
|
7
|
+
"workflow": ".github/workflows/.binary-release-assets.yml",
|
|
8
|
+
"beforeSha256": "5dfaea0f9cf83500706f423eca08f43594fe3653fa139da359041e88fae49266",
|
|
9
|
+
"afterSha256": "06831b3ec8db28fbf96ffa8907fd58c1a77dd09e8d4fe02100a98febe10dba34",
|
|
10
|
+
"replacements": [
|
|
11
|
+
{
|
|
12
|
+
"before": " fs.writeFileSync(\".buildchain/publication-authority/capability.json\", `${JSON.stringify(capability, null, 2)}\\n`);\n NODE\n\n - name: Upload GitHub Release assets\n env:\n GH_TOKEN: ${{ github.token }}\n RELEASE_TAG: ${{ inputs.release-tag }}\n",
|
|
13
|
+
"after": " fs.writeFileSync(\".buildchain/publication-authority/capability.json\", `${JSON.stringify(capability, null, 2)}\\n`);\n NODE\n\n - uses: actions/setup-node@v6.4.0\n if: ${{ startsWith(inputs.release-tag, 'v4.') }}\n with:\n node-version: \"24\"\n\n - name: Install exact publication runtime dependencies\n if: ${{ startsWith(inputs.release-tag, 'v4.') }}\n run: corepack pnpm@11.7.0 install --frozen-lockfile --ignore-scripts\n\n - name: Upload immutable GitHub Release assets and verify readback\n if: ${{ startsWith(inputs.release-tag, 'v4.') }}\n env:\n GH_TOKEN: ${{ github.token }}\n RELEASE_TAG: ${{ inputs.release-tag }}\n run: node scripts/binary-publication-evidence.mjs publish\n\n - name: Retain binary publication readback\n if: ${{ startsWith(inputs.release-tag, 'v4.') }}\n uses: actions/upload-artifact@v7.0.1\n with:\n name: binary-publication-readback-${{ inputs.release-tag }}\n path: .buildchain/binary-publication/readback.json\n include-hidden-files: true\n if-no-files-found: error\n\n - name: Upload GitHub Release assets\n if: ${{ !startsWith(inputs.release-tag, 'v4.') }}\n env:\n GH_TOKEN: ${{ github.token }}\n RELEASE_TAG: ${{ inputs.release-tag }}\n"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"workflow": ".github/workflows/.release-candidate-promote.yml",
|
|
19
|
+
"beforeSha256": "177b3c50685405e5ed2bf1ac893469fdb3a27e7b03d55025611b2985028cd8cf",
|
|
20
|
+
"afterSha256": "9c7f3586a3444cdad34d2a61be3cb9b0ae271fb56f9e371d9c37940e6b317780",
|
|
21
|
+
"replacements": [
|
|
22
|
+
{
|
|
23
|
+
"before": " release-candidate-artifact: ${{ needs.qualify.outputs.candidate-artifact }}\n release-candidate-action: canonical-release-invocation\n release-candidate-outcome: success\n promotion-outcome: success\n finalization-needed: \"false\"\n release-tail-transaction-state: ${{ steps.provider.outputs.transaction-state || steps.resume.outputs.transaction-state }}\n release-tail-declaration-root: ${{ steps.provider.outputs.declaration-root || steps.resume.outputs.declaration-root }}\n release-tail-transaction-root: ${{ steps.provider.outputs.transaction-root || steps.resume.outputs.transaction-root }}\n",
|
|
24
|
+
"after": " release-candidate-artifact: ${{ needs.qualify.outputs.candidate-artifact }}\n release-candidate-action: canonical-release-invocation\n release-candidate-outcome: success\n promotion-outcome: ${{ steps.publication-settlement.outputs.status == 'complete' && 'success' || 'failure' }}\n finalization-needed: ${{ steps.publication-settlement.outputs.status != 'complete' }}\n release-tail-transaction-state: ${{ steps.provider.outputs.transaction-state || steps.resume.outputs.transaction-state }}\n release-tail-declaration-root: ${{ steps.provider.outputs.declaration-root || steps.resume.outputs.declaration-root }}\n release-tail-transaction-root: ${{ steps.provider.outputs.transaction-root || steps.resume.outputs.transaction-root }}\n"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"before": " release-tail-receipt-roots-json: ${{ steps.provider.outputs.receipt-roots-json || steps.resume.outputs.receipt-roots-json }}\n release-invocation-root: ${{ steps.provider.outputs.release-invocation-root || steps.resume.outputs.release-invocation-root }}\n release-transaction-root: ${{ steps.provider.outputs.release-transaction-root || steps.resume.outputs.release-transaction-root }}\n release-receipt-root: ${{ steps.provider.outputs.release-receipt-root || steps.resume.outputs.release-receipt-root }}\n steps:\n - name: Checkout the admitted protected channel state\n uses: actions/checkout@v7.0.0\n",
|
|
28
|
+
"after": " release-tail-receipt-roots-json: ${{ steps.provider.outputs.receipt-roots-json || steps.resume.outputs.receipt-roots-json }}\n release-invocation-root: ${{ steps.provider.outputs.release-invocation-root || steps.resume.outputs.release-invocation-root }}\n release-transaction-root: ${{ steps.provider.outputs.release-transaction-root || steps.resume.outputs.release-transaction-root }}\n release-receipt-root: ${{ steps.publication-settlement.outputs.receipt-root || steps.provider.outputs.release-receipt-root || steps.resume.outputs.release-receipt-root }}\n steps:\n - name: Checkout the admitted protected channel state\n uses: actions/checkout@v7.0.0\n"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"before": " uses: ./.buildchain/runtime/actions/v4-release-candidate-promote\n with: *provider-inputs\n\n - name: Retain canonical APPLY and ReleaseReceipt evidence\n if: ${{ always() }}\n uses: actions/upload-artifact@v7.0.1\n",
|
|
32
|
+
"after": " uses: ./.buildchain/runtime/actions/v4-release-candidate-promote\n with: *provider-inputs\n\n - name: Retain completed publication independently of next-development\n id: publication-settlement\n if: ${{ always() && hashFiles('.buildchain/release-tail/release-receipt.json') != '' }}\n env:\n GH_TOKEN: ${{ github.token }}\n CANDIDATE_SHA: ${{ needs.qualify.outputs.requested-sha }}\n APPLY_OUTCOME: ${{ (steps.resume.outcome == 'success' || steps.resume.outcome == 'failure') && steps.resume.outcome || steps.provider.outcome }}\n run: node .buildchain/runtime/scripts/v4-publication-settlement.mjs .buildchain\n\n - name: Retain canonical APPLY and ReleaseReceipt evidence\n if: ${{ always() }}\n uses: actions/upload-artifact@v7.0.1\n"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"before": " controller-receipt-status: ${{ steps.verify.outputs.status || steps.projection-state.outputs.status }}\n steps:\n - name: Checkout the admitted receipt verifier\n if: ${{ needs.apply.result == 'success' }}\n uses: actions/checkout@v7.0.0\n with:\n repository: kungfu-systems/buildchain\n",
|
|
36
|
+
"after": " controller-receipt-status: ${{ steps.verify.outputs.status || steps.projection-state.outputs.status }}\n steps:\n - name: Checkout the admitted receipt verifier\n if: ${{ needs.qualify.outputs.action == 'promote' && !inputs.dry-run }}\n uses: actions/checkout@v7.0.0\n with:\n repository: kungfu-systems/buildchain\n"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"before": " persist-credentials: false\n\n - name: Restore canonical APPLY evidence\n if: ${{ needs.apply.result == 'success' }}\n uses: actions/download-artifact@v7.0.0\n with:\n name: buildchain-v4-release-apply-${{ needs.qualify.outputs.requested-sha }}\n",
|
|
40
|
+
"after": " persist-credentials: false\n\n - name: Restore canonical APPLY evidence\n if: ${{ needs.qualify.outputs.action == 'promote' && !inputs.dry-run }}\n uses: actions/download-artifact@v7.0.0\n with:\n name: buildchain-v4-release-apply-${{ needs.qualify.outputs.requested-sha }}\n"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"before": "\n - name: Verify the single terminal receipt\n id: verify\n if: ${{ needs.apply.result == 'success' }}\n shell: bash\n run: |\n node --input-type=module <<'NODE'\n import fs from \"node:fs\";\n import {\n createV4ReleaseInvocation,\n createV4ReleaseReceipt,\n createV4ReleaseTransaction,\n } from \"./.buildchain/runtime/packages/core/v4-release-invocation.js\";\n const base = \".buildchain/evidence/release-tail\";\n const invocation = JSON.parse(fs.readFileSync(`${base}/release-invocation.json`, \"utf8\"));\n const transaction = JSON.parse(fs.readFileSync(`${base}/release-transaction.json`, \"utf8\"));\n const storedReceipt = JSON.parse(fs.readFileSync(`${base}/release-receipt.json`, \"utf8\"));\n const invocationProjection = createV4ReleaseInvocation(invocation);\n const transactionProjection = createV4ReleaseTransaction({\n invocationRoot: transaction.invocationRoot,\n publisherRoot: transaction.publisherRoot,\n runtimeRoot: transaction.runtimeRoot,\n providerRoot: transaction.providerRoot,\n parentRoot: transaction.parentRoot,\n });\n const { receiptRoot, ...receipt } = storedReceipt;\n const receiptProjection = createV4ReleaseReceipt(receipt);\n if (transaction.invocationRoot !== invocationProjection.roots.invocationRoot ||\n transaction.transactionRoot !== transactionProjection.transactionRoot ||\n receipt.transactionRoot !== transactionProjection.transactionRoot ||\n receiptProjection.receiptRoot !== receiptRoot || receipt.outcome !== \"complete\") {\n throw new Error(\"terminal ReleaseReceipt lineage does not verify\");\n }\n fs.appendFileSync(process.env.GITHUB_OUTPUT,\n `receipt-json=${JSON.stringify(storedReceipt)}\\nreceipt-root=${receiptRoot}\\nstatus=complete\\n`);\n NODE\n\n - name: Record non-terminal projection state\n id: projection-state\n if: ${{ needs.apply.result != 'success' }}\n shell: bash\n run: |\n echo \"status=${{ inputs.dry-run && 'dry-run' || needs.qualify.outputs.action == 'noop' && 'noop' || 'blocked' }}\" >> \"$GITHUB_OUTPUT\"\n",
|
|
44
|
+
"after": "\n - name: Verify the single terminal receipt\n id: verify\n env:\n CANDIDATE_SHA: ${{ needs.qualify.outputs.requested-sha }}\n if: ${{ needs.qualify.outputs.action == 'promote' && !inputs.dry-run }}\n shell: bash\n run: |\n node --input-type=module <<'NODE'\n import fs from \"node:fs\";\n const { readApplyDocuments, verifyPublicationSettlement } = await import(\"./.buildchain/runtime/scripts/v4-publication-settlement.mjs\");\n const documents = readApplyDocuments(\".buildchain/evidence\");\n verifyPublicationSettlement(documents, {\n repository: process.env.GITHUB_REPOSITORY,\n candidateSha: process.env.CANDIDATE_SHA,\n tag: documents.invocation.target.tag,\n sourceSha: documents.product.publication.releaseSha,\n });\n const storedReceipt = documents.receipt;\n const receiptRoot = storedReceipt.receiptRoot;\n fs.appendFileSync(process.env.GITHUB_OUTPUT,\n `receipt-json=${JSON.stringify(storedReceipt)}\\nreceipt-root=${receiptRoot}\\nstatus=complete\\n`);\n NODE\n\n - name: Record non-terminal projection state\n id: projection-state\n if: ${{ always() && steps.verify.outcome != 'success' }}\n shell: bash\n run: |\n echo \"status=${{ inputs.dry-run && 'dry-run' || needs.qualify.outputs.action == 'noop' && 'noop' || 'blocked' }}\" >> \"$GITHUB_OUTPUT\"\n"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"before": " .buildchain/evidence/release-tail/release-invocation.json\n .buildchain/evidence/release-tail/release-transaction.json\n .buildchain/evidence/release-tail/release-receipt.json\n if-no-files-found: error\n",
|
|
48
|
+
"after": " .buildchain/evidence/release-tail/release-invocation.json\n .buildchain/evidence/release-tail/release-transaction.json\n .buildchain/evidence/release-tail/release-receipt.json\n .buildchain/evidence/release-tail/delivery-summary.json\n .buildchain/evidence/release-tail/buildchain-publication-settlement.json\n if-no-files-found: error\n"
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"workflow": ".github/workflows/check.yml",
|
|
54
|
+
"beforeSha256": "44797c1b64e54806e19cf401300a27e587d6a2f0730ee7509eb84aefb9b60f74",
|
|
55
|
+
"afterSha256": "fbf3549e4f4987733f53ff362bf49d2001d56ae5842bbd1ed343c0fba40d9429",
|
|
56
|
+
"replacements": [
|
|
57
|
+
{
|
|
58
|
+
"before": " config=\"${BUILDCHAIN_WORKING_DIRECTORY}/.buildchain/buildchain.toml\"\n if [ -f \"$config\" ] && grep -Eq '^[[:space:]]*type[[:space:]]*=[[:space:]]*\"publication-artifact\"[[:space:]]*$' \"$config\"; then\n node .buildchain/runtime/bin/buildchain.mjs paper preflight \\\n --cwd \"$BUILDCHAIN_WORKING_DIRECTORY\" \\\n --offline \\\n --ci \\\n --json\n else\n echo \"Buildchain Paper policy: not applicable\"\n fi\n",
|
|
59
|
+
"after": " node --input-type=module <<'NODE'\n import fs from \"node:fs\";\n import path from \"node:path\";\n import { loadBuildchainConfig } from \"./.buildchain/runtime/packages/core/buildchain-config.js\";\n import { spawnSyncCommand } from \"./.buildchain/runtime/packages/core/spawn-command.js\";\n const cwd = path.resolve(process.env.BUILDCHAIN_WORKING_DIRECTORY || \".\");\n // Validate before deciding applicability; malformed config never skips policy.\n const config = loadBuildchainConfig(cwd)?.config;\n const governedPaper = fs.existsSync(path.join(cwd, \".buildchain/paper\"))\n || config?.publish?.kind === \"npm-paper-package\"\n || (config?.project?.type === \"publication-artifact\"\n && (!config.publication || config.publication.kind === \"paper\"));\n if (governedPaper) {\n const result = spawnSyncCommand(process.execPath, [\n \".buildchain/runtime/bin/buildchain.mjs\", \"paper\", \"preflight\",\n \"--cwd\", cwd, \"--offline\", \"--ci\", \"--json\",\n ], { stdio: \"inherit\" });\n if (result.error) throw result.error;\n process.exitCode = result.status ?? 1;\n } else {\n console.log(\"Buildchain Paper policy: not applicable\");\n }\n NODE\n"
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
}
|
|
@@ -10,14 +10,17 @@
|
|
|
10
10
|
"productionWriterCount": 1,
|
|
11
11
|
"planAndFoldAuthority": "rust-v4-core",
|
|
12
12
|
"planAndFoldWriterCount": 1,
|
|
13
|
-
"typescript": "
|
|
13
|
+
"typescript": "wasm-calling-provider-adapter",
|
|
14
14
|
"productionWriteChange": true
|
|
15
15
|
},
|
|
16
16
|
"implementations": {
|
|
17
17
|
"rustDomain": "crates/buildchain-v4-contracts/src/release_activation_shadow.rs",
|
|
18
18
|
"rustModel": "crates/buildchain-v4-contracts/src/release_activation_shadow/model.rs",
|
|
19
19
|
"rustJournalMaterializer": "crates/buildchain-v4-contracts/src/release_activation_shadow/journal.rs",
|
|
20
|
-
"typescript": "packages/core/v4-release-activation-shadow.js"
|
|
20
|
+
"typescript": "packages/core/v4-release-activation-shadow.js",
|
|
21
|
+
"wasmRuntime": "packages/core/v4-domain-wasm.js",
|
|
22
|
+
"wasmArtifact": "packages/core/buildchain-v4-domain.wasm",
|
|
23
|
+
"artifactMetadata": "packages/core/v4-domain-wasm-artifact.js"
|
|
21
24
|
},
|
|
22
25
|
"roots": [
|
|
23
26
|
"release-activation-step",
|