@kungfu-tech/buildchain 2.12.2 → 2.12.3-alpha.2
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/actions/promote-buildchain-ref/README.md +20 -1
- package/dist/site/buildchain-contract.json +54 -8
- package/dist/site/buildchain-site.json +23 -18
- package/dist/site/kfd-claims.json +4 -3
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +4 -4
- package/dist/site/node-api-registry.json +2 -2
- package/dist/site/page-registry.json +15 -10
- package/dist/site/public-surface-audit.json +4 -3
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/site-manifest.json +8 -8
- package/dist/site/workflow-registry.json +2 -1
- package/docs/publish-transaction.md +82 -1
- package/docs/release-governance.md +8 -0
- package/docs/release-passport.md +3 -1
- package/docs/reusable-build-surface.md +4 -1
- package/package.json +1 -1
- package/packages/core/buildchain-contract.js +34 -0
- package/packages/core/publish-transaction.js +287 -15
- package/packages/core/release-passport.js +60 -6
|
@@ -1203,6 +1203,7 @@
|
|
|
1203
1203
|
"publish-tooling-sha",
|
|
1204
1204
|
"publish-transaction",
|
|
1205
1205
|
"publish-transaction-override",
|
|
1206
|
+
"reconciliation-workspace",
|
|
1206
1207
|
"release-candidate-build-summary-path",
|
|
1207
1208
|
"release-candidate-passport-path",
|
|
1208
1209
|
"release-candidate-version",
|
|
@@ -1230,7 +1231,7 @@
|
|
|
1230
1231
|
"transaction-state-path",
|
|
1231
1232
|
"verification-command"
|
|
1232
1233
|
],
|
|
1233
|
-
"inputCount":
|
|
1234
|
+
"inputCount": 52
|
|
1234
1235
|
},
|
|
1235
1236
|
{
|
|
1236
1237
|
"id": "report-buildchain-issue",
|
|
@@ -2723,8 +2724,8 @@
|
|
|
2723
2724
|
"workflowRegistryPath": "dist/site/workflow-registry.json",
|
|
2724
2725
|
"pageRegistryPath": "dist/site/page-registry.json",
|
|
2725
2726
|
"cliRegistryDigest": "ab57fec294efb9dde1612787bfd0d532b5bb95298b5da14a2b51a5e71b9c7dcc",
|
|
2726
|
-
"workflowRegistryDigest": "
|
|
2727
|
-
"pageRegistryDigest": "
|
|
2727
|
+
"workflowRegistryDigest": "967e63f8539a9d0c35473efba0538990304d00c14d0bbeba58783072855ec540",
|
|
2728
|
+
"pageRegistryDigest": "a14e95f2f81cd81c07541f0d7da75d40fdd62e3ce69e0a861f7558ae23d73af4"
|
|
2728
2729
|
},
|
|
2729
2730
|
"comparison": {
|
|
2730
2731
|
"missingCliRegistry": [],
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"contract": "kungfu-buildchain-publication-release-registry",
|
|
4
|
-
"generatedAt": "2026-07-
|
|
5
|
-
"publishedAt": "2026-07-
|
|
4
|
+
"generatedAt": "2026-07-13T13:40:03.654Z",
|
|
5
|
+
"publishedAt": "2026-07-13T13:40:03.654Z",
|
|
6
6
|
"reproducible": true,
|
|
7
7
|
"timestampPolicy": "ci-injected",
|
|
8
8
|
"deterministicInputs": [
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"declared Buildchain surface manifest contract"
|
|
20
20
|
],
|
|
21
21
|
"sourceDateEpoch": "0",
|
|
22
|
-
"sourceRevision": "
|
|
22
|
+
"sourceRevision": "4d203ebe153c8a4481b4b5febb0dd88be935a7b8",
|
|
23
23
|
"timestampPolicyDetails": {
|
|
24
24
|
"contract": "kungfu-buildchain-surface-timestamp-policy",
|
|
25
25
|
"timestampFields": [
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
"package": {
|
|
34
34
|
"name": "@kungfu-tech/buildchain",
|
|
35
|
-
"version": "2.12.2",
|
|
35
|
+
"version": "2.12.3-alpha.2",
|
|
36
36
|
"versionSource": "package.json#version"
|
|
37
37
|
},
|
|
38
38
|
"sourceKind": "package-site-bundle",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"contract": "kungfu-buildchain-site-manifest",
|
|
4
|
-
"generatedAt": "2026-07-
|
|
5
|
-
"publishedAt": "2026-07-
|
|
4
|
+
"generatedAt": "2026-07-13T13:40:03.654Z",
|
|
5
|
+
"publishedAt": "2026-07-13T13:40:03.654Z",
|
|
6
6
|
"reproducible": true,
|
|
7
7
|
"timestampPolicy": "ci-injected",
|
|
8
8
|
"deterministicInputs": [
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"declared Buildchain surface manifest contract"
|
|
20
20
|
],
|
|
21
21
|
"sourceDateEpoch": "0",
|
|
22
|
-
"sourceRevision": "
|
|
22
|
+
"sourceRevision": "4d203ebe153c8a4481b4b5febb0dd88be935a7b8",
|
|
23
23
|
"timestampPolicyDetails": {
|
|
24
24
|
"contract": "kungfu-buildchain-surface-timestamp-policy",
|
|
25
25
|
"timestampFields": [
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
"package": {
|
|
39
39
|
"name": "@kungfu-tech/buildchain",
|
|
40
|
-
"version": "2.12.2",
|
|
40
|
+
"version": "2.12.3-alpha.2",
|
|
41
41
|
"versionSource": "package.json#version"
|
|
42
42
|
},
|
|
43
43
|
"entrypoint": "buildchain-site.json",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"path": "docs/release-passport.md",
|
|
70
70
|
"plane": "verify",
|
|
71
71
|
"exists": true,
|
|
72
|
-
"digest": "sha256:
|
|
72
|
+
"digest": "sha256:b339c4de0a19a58507bb0aa3efb57c63e4bb4e8002891b9fcc1d73223a8e2c7f"
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
75
|
"id": "release-candidate",
|
|
@@ -205,7 +205,7 @@
|
|
|
205
205
|
"path": "docs/reusable-build-surface.md",
|
|
206
206
|
"plane": "use",
|
|
207
207
|
"exists": true,
|
|
208
|
-
"digest": "sha256:
|
|
208
|
+
"digest": "sha256:6916d88ae0f25fa129308354b04d339552b72796d4d7d7938015e0e2f4dcaa6a"
|
|
209
209
|
},
|
|
210
210
|
{
|
|
211
211
|
"id": "publish-transaction",
|
|
@@ -213,7 +213,7 @@
|
|
|
213
213
|
"path": "docs/publish-transaction.md",
|
|
214
214
|
"plane": "verify",
|
|
215
215
|
"exists": true,
|
|
216
|
-
"digest": "sha256:
|
|
216
|
+
"digest": "sha256:8d5d7075cf8b4280a4c5097726f5c51ae40db83e2652eafefe4fa5e487794f57"
|
|
217
217
|
},
|
|
218
218
|
{
|
|
219
219
|
"id": "release-governance",
|
|
@@ -221,7 +221,7 @@
|
|
|
221
221
|
"path": "docs/release-governance.md",
|
|
222
222
|
"plane": "why",
|
|
223
223
|
"exists": true,
|
|
224
|
-
"digest": "sha256:
|
|
224
|
+
"digest": "sha256:beba38634bfdde032bb2ff85dc98dd8d755f942dabe227bf9b7aba8127ab7ce9"
|
|
225
225
|
},
|
|
226
226
|
{
|
|
227
227
|
"id": "release-flow",
|
|
@@ -942,6 +942,7 @@
|
|
|
942
942
|
"publish-tooling-sha",
|
|
943
943
|
"publish-transaction",
|
|
944
944
|
"publish-transaction-override",
|
|
945
|
+
"reconciliation-workspace",
|
|
945
946
|
"release-candidate-build-summary-path",
|
|
946
947
|
"release-candidate-passport-path",
|
|
947
948
|
"release-candidate-version",
|
|
@@ -969,7 +970,7 @@
|
|
|
969
970
|
"transaction-state-path",
|
|
970
971
|
"verification-command"
|
|
971
972
|
],
|
|
972
|
-
"inputCount":
|
|
973
|
+
"inputCount": 52,
|
|
973
974
|
"capabilityGroup": "release-passport-trust",
|
|
974
975
|
"status": "active"
|
|
975
976
|
},
|
|
@@ -103,6 +103,7 @@ BUILDCHAIN_RELEASE_SHA
|
|
|
103
103
|
BUILDCHAIN_RELEASE_MATERIAL_SHA
|
|
104
104
|
BUILDCHAIN_PUBLISH_TOOLING_SHA
|
|
105
105
|
BUILDCHAIN_PUBLISH_EVIDENCE
|
|
106
|
+
BUILDCHAIN_REQUIRED_ARTIFACTS
|
|
106
107
|
BUILDCHAIN_PUBLISH_MODE
|
|
107
108
|
BUILDCHAIN_PUBLISH_AUTH
|
|
108
109
|
BUILDCHAIN_NPM_DIST_TAG
|
|
@@ -126,6 +127,83 @@ public refs.
|
|
|
126
127
|
match. `BUILDCHAIN_PUBLISH_TOOLING_SHA` identifies the publishing code. A repair
|
|
127
128
|
run may change tooling, but material drift fails closed.
|
|
128
129
|
|
|
130
|
+
## Post-Publish Requirements And Artifact Provenance
|
|
131
|
+
|
|
132
|
+
`publish-required-artifacts-json` is a pre-publish family declaration, not a
|
|
133
|
+
request to guess registry digests. A descriptor must include `kind + name`; it
|
|
134
|
+
may omit `ref` and `digest`. The action resolves a missing `ref` to the exact
|
|
135
|
+
`BUILDCHAIN_VERSION`. Registries whose exact refs add a stable prefix or suffix
|
|
136
|
+
may instead declare a `ref_template` containing exactly one `{version}`, such
|
|
137
|
+
as `v{version}`. The template is expanded only after exact version selection,
|
|
138
|
+
so a resumed alpha transaction receives the newly selected prerelease rather
|
|
139
|
+
than the checked-out version. Declaring both `ref` and `ref_template`, using
|
|
140
|
+
another placeholder, or leaving unmatched braces fails before
|
|
141
|
+
`lifecycle.publish`. The action exports the normalized exact refs as
|
|
142
|
+
`BUILDCHAIN_REQUIRED_ARTIFACTS`, runs `lifecycle.publish`, and then requires the
|
|
143
|
+
final evidence to contain every exact member with a non-empty digest. Existing
|
|
144
|
+
callers may continue supplying exact refs and digests.
|
|
145
|
+
|
|
146
|
+
OCI publishers can opt into strict per-artifact provenance by adding
|
|
147
|
+
`action: built` or `action: reused`. Those artifacts carry two separate
|
|
148
|
+
coordinates:
|
|
149
|
+
|
|
150
|
+
- `content`: the version, ref, source SHA, and material SHA that produced the
|
|
151
|
+
immutable content;
|
|
152
|
+
- `release`: the exact current version/ref, target ref, source SHA, and release
|
|
153
|
+
material SHA that bind that content into this release.
|
|
154
|
+
|
|
155
|
+
This distinction permits truthful cross-version reuse without claiming that an
|
|
156
|
+
old OCI config was rebuilt from current material. For an OCI artifact with an
|
|
157
|
+
action, final evidence also requires `platform`, positive `contract_major`, and
|
|
158
|
+
`verification` containing a public manifest result, exact ref and digest,
|
|
159
|
+
platform, contract major, optional parent digest, evidence location, and a
|
|
160
|
+
passed named smoke policy. Buildchain cross-checks those values against the
|
|
161
|
+
artifact and current transaction. Missing family members and ref, digest,
|
|
162
|
+
content, release, or verification conflicts enter `repair_required` before
|
|
163
|
+
public refs move.
|
|
164
|
+
|
|
165
|
+
Example reused OCI evidence entry (the pre-publish requirement may omit
|
|
166
|
+
`ref`, `digest`, `release`, and the observed verification values):
|
|
167
|
+
|
|
168
|
+
```json
|
|
169
|
+
{
|
|
170
|
+
"group": "image",
|
|
171
|
+
"kind": "oci",
|
|
172
|
+
"name": "ghcr.io/kungfu-systems/base-linux",
|
|
173
|
+
"ref": "1.2.0-alpha.3",
|
|
174
|
+
"digest": "sha256:...",
|
|
175
|
+
"action": "reused",
|
|
176
|
+
"platform": "linux/amd64",
|
|
177
|
+
"contract_major": 1,
|
|
178
|
+
"content": {
|
|
179
|
+
"version": "1.1.9",
|
|
180
|
+
"ref": "1.1.9",
|
|
181
|
+
"source_sha": "<source-sha>",
|
|
182
|
+
"material_sha": "<material-sha>"
|
|
183
|
+
},
|
|
184
|
+
"release": {
|
|
185
|
+
"version": "1.2.0-alpha.3",
|
|
186
|
+
"ref": "1.2.0-alpha.3",
|
|
187
|
+
"target_ref": "alpha/v1/v1.2",
|
|
188
|
+
"source_sha": "<current-source-sha>",
|
|
189
|
+
"material_sha": "<current-material-sha>"
|
|
190
|
+
},
|
|
191
|
+
"verification": {
|
|
192
|
+
"public_manifest": true,
|
|
193
|
+
"ref": "1.2.0-alpha.3",
|
|
194
|
+
"digest": "sha256:...",
|
|
195
|
+
"platform": "linux/amd64",
|
|
196
|
+
"contract_major": 1,
|
|
197
|
+
"evidence": "registry-inspect.json",
|
|
198
|
+
"smoke": {
|
|
199
|
+
"policy": "manifest-contract",
|
|
200
|
+
"passed": true,
|
|
201
|
+
"evidence": "smoke.json"
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
129
207
|
## Release Modes And Auth
|
|
130
208
|
|
|
131
209
|
Buildchain distinguishes two npm release modes:
|
|
@@ -357,7 +435,10 @@ When no state file exists, creation commands also require:
|
|
|
357
435
|
workflow rule. The expected integration shape is:
|
|
358
436
|
|
|
359
437
|
- image build writes OCI digests into publish evidence;
|
|
360
|
-
- required image families are passed through `publish-required-artifacts-json
|
|
438
|
+
- required image families are passed through `publish-required-artifacts-json`
|
|
439
|
+
before their final digests are known;
|
|
440
|
+
- mixed built/reused evidence preserves content provenance separately from the
|
|
441
|
+
current release binding;
|
|
361
442
|
- reruns check GHCR or the target registry and accept existing images only when
|
|
362
443
|
tag and digest match;
|
|
363
444
|
- preview or alpha image tags remain non-stable until the transaction evidence
|
|
@@ -570,6 +570,14 @@ reuses a same-repository `buildchain/version-state/*` PR based on the current
|
|
|
570
570
|
target channel head and records `finalization-needed=true` in the durable
|
|
571
571
|
transaction output. Strict alpha bookkeeping still fails with a
|
|
572
572
|
token/protection diagnostic instead of creating a post-publish PR.
|
|
573
|
+
|
|
574
|
+
For a stable release, the wrapper also checks out the exact current development
|
|
575
|
+
channel into `.buildchain/reconciliation/dev`. When the prepared next-alpha
|
|
576
|
+
commit cannot fast-forward dev because reviewed work landed concurrently, the
|
|
577
|
+
promotion action applies the next version to that checkout, regenerates every
|
|
578
|
+
declared derived version-state file, reruns the verification lifecycle, and
|
|
579
|
+
only then creates the two-parent reconciliation commit. A checkout/current-ref
|
|
580
|
+
SHA mismatch blocks reconciliation instead of committing stale projections.
|
|
573
581
|
Buildchain's own promotion workflow reads `BUILDCHAIN_PROMOTION_BYPASS_APPS`,
|
|
574
582
|
`BUILDCHAIN_PROMOTION_BYPASS_USERS`, and
|
|
575
583
|
`BUILDCHAIN_PROMOTION_BYPASS_TEAMS` repository variables so the declared bypass
|
package/docs/release-passport.md
CHANGED
|
@@ -58,7 +58,9 @@ Additive passport sections:
|
|
|
58
58
|
version sources, lifecycle invocations, platforms, outputs, product
|
|
59
59
|
artifacts, and verification results to the release.
|
|
60
60
|
- `artifacts`: release assets and registry artifacts in one list, each pointing
|
|
61
|
-
back to the evidence file that proves its digest.
|
|
61
|
+
back to the evidence file that proves its digest. Registry artifacts retain
|
|
62
|
+
optional built/reused action, content and current-release coordinates,
|
|
63
|
+
platform/contract/parent metadata, and fail-closed verification evidence.
|
|
62
64
|
|
|
63
65
|
Buildchain's own binary lane also publishes observability artifacts generated by
|
|
64
66
|
the Buildchain logging API and CLI:
|
|
@@ -784,7 +784,10 @@ workflow's `github.token`; the last fallback can only report issues when it has
|
|
|
784
784
|
write access to the target Buildchain repository.
|
|
785
785
|
|
|
786
786
|
`publish-required-artifacts-json` can still be passed explicitly for custom
|
|
787
|
-
publish targets.
|
|
787
|
+
publish targets. Custom OCI requirements may omit pre-publish refs and digests;
|
|
788
|
+
the action resolves the exact version ref and validates final digests and any
|
|
789
|
+
built/reused provenance after `lifecycle.publish`. For the default
|
|
790
|
+
`publish-artifact-kind: npm` path, consumers do
|
|
788
791
|
not download artifacts or run repository scripts to build publish evidence. The
|
|
789
792
|
wrapper downloads the PR-stage payload artifacts, finds the downloaded `.tgz`
|
|
790
793
|
packages, reads each tarball's `package/package.json` for the real scoped
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kungfu-tech/buildchain",
|
|
3
|
-
"version": "2.12.2",
|
|
3
|
+
"version": "2.12.3-alpha.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Buildchain Release Passport, release governance, CLI toolkit, and site facts.",
|
|
6
6
|
"repository": "https://github.com/kungfu-systems/buildchain",
|
|
@@ -168,6 +168,23 @@ export function createBuildchainContractWorld({ root = process.cwd(), packageJso
|
|
|
168
168
|
"github-release-title",
|
|
169
169
|
"github-release-notes",
|
|
170
170
|
],
|
|
171
|
+
publishArtifactSchema: {
|
|
172
|
+
requirementDigest: "optional-before-publish-required-after-publish",
|
|
173
|
+
exactRefResolution: "missing requirement refs resolve to the promoted exact version",
|
|
174
|
+
exactRefTemplate: "optional ref_template expands one {version} after exact version selection",
|
|
175
|
+
provenanceActions: ["built", "reused"],
|
|
176
|
+
provenanceCoordinates: ["content", "release"],
|
|
177
|
+
verificationFields: [
|
|
178
|
+
"public_manifest",
|
|
179
|
+
"ref",
|
|
180
|
+
"digest",
|
|
181
|
+
"platform",
|
|
182
|
+
"contract_major",
|
|
183
|
+
"parent_digest",
|
|
184
|
+
"smoke",
|
|
185
|
+
"evidence",
|
|
186
|
+
],
|
|
187
|
+
},
|
|
171
188
|
guarantees: [
|
|
172
189
|
"promotion reuses PR-stage release-candidate artifacts",
|
|
173
190
|
"promotion does not run the heavy native build matrix",
|
|
@@ -241,6 +258,23 @@ export function createBuildchainContractWorld({ root = process.cwd(), packageJso
|
|
|
241
258
|
"github-release-title",
|
|
242
259
|
"github-release-notes",
|
|
243
260
|
],
|
|
261
|
+
publishArtifactSchema: {
|
|
262
|
+
requirementDigest: "optional-before-publish-required-after-publish",
|
|
263
|
+
exactRefResolution: "missing requirement refs resolve to the promoted exact version",
|
|
264
|
+
exactRefTemplate: "optional ref_template expands one {version} after exact version selection",
|
|
265
|
+
provenanceActions: ["built", "reused"],
|
|
266
|
+
provenanceCoordinates: ["content", "release"],
|
|
267
|
+
verificationFields: [
|
|
268
|
+
"public_manifest",
|
|
269
|
+
"ref",
|
|
270
|
+
"digest",
|
|
271
|
+
"platform",
|
|
272
|
+
"contract_major",
|
|
273
|
+
"parent_digest",
|
|
274
|
+
"smoke",
|
|
275
|
+
"evidence",
|
|
276
|
+
],
|
|
277
|
+
},
|
|
244
278
|
guarantees: [
|
|
245
279
|
"protected release refs and durable release-state are finalized by Buildchain",
|
|
246
280
|
"release passport finalization is idempotent after publish side effects",
|