@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.
@@ -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": 51
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": "ccc8ab882a30d8c180c109aa484c619d34a5e889c571757f11e555f113c4d338",
2727
- "pageRegistryDigest": "394ef34331be95e72b6c2c875ce138ea0b3344e539793291dc8126d168a2c1f9"
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-13T12:43:26.201Z",
5
- "publishedAt": "2026-07-13T12:43:26.201Z",
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": "d61a8cfd6d147aadc73306dbc97bf2ce6b825895",
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-13T12:43:26.201Z",
5
- "publishedAt": "2026-07-13T12:43:26.201Z",
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": "d61a8cfd6d147aadc73306dbc97bf2ce6b825895",
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:f278f148e36f508f7217ad0e41501fa1cf5fe4d0a54d81dfbab867b3d35465c7"
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:fbc74dee3a6f2283ea69a2a9a31945ac82ccaf1d270995539f5d80235ab74614"
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:2523dd9a81e837918afae30c203349a7b29f00fdf953962a6db360fd95e0c6cb"
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:3ae2bbc2df394726f350e58be1a71dd0379b99b19cd6ccf15fbe3b843f3890b6"
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": 51,
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
@@ -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. For the default `publish-artifact-kind: npm` path, consumers do
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",