@kungfu-tech/buildchain 2.14.18-alpha.6 → 2.14.18-alpha.8
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/dist/site/buildchain-contract.json +3 -3
- package/dist/site/buildchain-site.json +4 -4
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/node-api-registry.json +1 -1
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/site-manifest.json +4 -4
- package/package.json +1 -1
- package/packages/core/publication-control-plane-audit.js +3 -1
- package/scripts/audit-publication-control-plane.mjs +21 -4
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"product": {
|
|
5
5
|
"name": "Buildchain",
|
|
6
6
|
"package": "@kungfu-tech/buildchain",
|
|
7
|
-
"version": "2.14.18-alpha.
|
|
7
|
+
"version": "2.14.18-alpha.8",
|
|
8
8
|
"repository": "https://github.com/kungfu-systems/buildchain"
|
|
9
9
|
},
|
|
10
10
|
"majorLine": "v2",
|
|
@@ -663,7 +663,7 @@
|
|
|
663
663
|
"agents can discover supported Node APIs without importing internal file paths"
|
|
664
664
|
],
|
|
665
665
|
"breakingDigest": "sha256:48f925608d3e2131d90936b07dc2a30341204cae3e6e785c0f77d61ad755c945",
|
|
666
|
-
"auditDigest": "sha256:
|
|
666
|
+
"auditDigest": "sha256:6cc4353f5c2ae7b5e260b38b1810e4216e7ac31528ffe8da850d22e73246b6f6"
|
|
667
667
|
},
|
|
668
668
|
{
|
|
669
669
|
"contractVersion": 1,
|
|
@@ -3126,5 +3126,5 @@
|
|
|
3126
3126
|
}
|
|
3127
3127
|
],
|
|
3128
3128
|
"compatibilityDigest": "sha256:df13c3b8066068925ce847b31002201d533034d10d342542422db3a665c10475",
|
|
3129
|
-
"contractDigest": "sha256:
|
|
3129
|
+
"contractDigest": "sha256:b6192f49aca3f3e70767290dea22578aa295fccd274c0482dae9968145844e02"
|
|
3130
3130
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"contract": "kungfu-buildchain-site-bundle",
|
|
4
|
-
"generatedAt": "2026-07-
|
|
5
|
-
"publishedAt": "2026-07-
|
|
4
|
+
"generatedAt": "2026-07-24T14:23:08.194Z",
|
|
5
|
+
"publishedAt": "2026-07-24T14:23:08.194Z",
|
|
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": "c432ae15fe0c8efc912628dfaaf6b0b3eec196fb",
|
|
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.14.18-alpha.
|
|
40
|
+
"version": "2.14.18-alpha.8",
|
|
41
41
|
"versionSource": "package.json#version"
|
|
42
42
|
},
|
|
43
43
|
"source": {
|
|
@@ -320,7 +320,7 @@
|
|
|
320
320
|
"specifier": "@kungfu-tech/buildchain/publication-control-plane-audit",
|
|
321
321
|
"export": "./publication-control-plane-audit",
|
|
322
322
|
"target": "./packages/core/publication-control-plane-audit.js",
|
|
323
|
-
"digest": "sha256:
|
|
323
|
+
"digest": "sha256:319cd46deac8d720698ffbb40f63cec33901b7ac33cd8c0dbc720f448686a789",
|
|
324
324
|
"summary": "Read-only publication control-plane snapshot evaluation APIs.",
|
|
325
325
|
"capabilityGroup": "release-passport-trust",
|
|
326
326
|
"audience": [
|
|
@@ -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-24T14:23:08.194Z",
|
|
5
|
+
"publishedAt": "2026-07-24T14:23:08.194Z",
|
|
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": "c432ae15fe0c8efc912628dfaaf6b0b3eec196fb",
|
|
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.14.18-alpha.
|
|
35
|
+
"version": "2.14.18-alpha.8",
|
|
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-24T14:23:08.194Z",
|
|
5
|
+
"publishedAt": "2026-07-24T14:23:08.194Z",
|
|
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": "c432ae15fe0c8efc912628dfaaf6b0b3eec196fb",
|
|
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.14.18-alpha.
|
|
40
|
+
"version": "2.14.18-alpha.8",
|
|
41
41
|
"versionSource": "package.json#version"
|
|
42
42
|
},
|
|
43
43
|
"entrypoint": "buildchain-site.json",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kungfu-tech/buildchain",
|
|
3
|
-
"version": "2.14.18-alpha.
|
|
3
|
+
"version": "2.14.18-alpha.8",
|
|
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",
|
|
@@ -122,6 +122,8 @@ export function evaluatePublicationControlPlaneSnapshot({
|
|
|
122
122
|
Array.isArray(branchPolicy.releaseReconciliation.changedPaths) &&
|
|
123
123
|
branchPolicy.releaseReconciliation.changedPaths.length > 0
|
|
124
124
|
);
|
|
125
|
+
const sourceBranchBindingPass = branchPolicy.sourceSha === branchPolicy.headSha ||
|
|
126
|
+
branchPolicy.sourceContainedInBranch === true;
|
|
125
127
|
const providerTransactionBranchPass = branchPolicy.ref === branch &&
|
|
126
128
|
branchPolicy.policyMode === "provider-enforced-transaction" &&
|
|
127
129
|
branchPolicy.protected === true &&
|
|
@@ -132,7 +134,7 @@ export function evaluatePublicationControlPlaneSnapshot({
|
|
|
132
134
|
branchPolicy.requiredCheckPassed === true &&
|
|
133
135
|
/^[0-9a-f]{40}$/i.test(String(branchPolicy.requiredCheckSha || "")) &&
|
|
134
136
|
branchPolicy.requiredCheckSha === branchPolicy.pullRequestHeadSha &&
|
|
135
|
-
|
|
137
|
+
sourceBranchBindingPass &&
|
|
136
138
|
sourceAuthorizationPass &&
|
|
137
139
|
branchPolicy.mergedPullRequest === true &&
|
|
138
140
|
branchPolicy.baseRef === branch &&
|
|
@@ -277,10 +277,24 @@ function main() {
|
|
|
277
277
|
message: sourceMessage,
|
|
278
278
|
changedPaths: sourceChangedPaths,
|
|
279
279
|
};
|
|
280
|
+
const branchHeadSha = String(branchState.commit?.sha || "").toLowerCase();
|
|
281
|
+
const sourceComparison = sourceSha === branchHeadSha
|
|
282
|
+
? null
|
|
283
|
+
: githubJson(
|
|
284
|
+
`repos/${repository}/compare/${sourceSha}...${branchHeadSha}`,
|
|
285
|
+
"source protected-branch lineage",
|
|
286
|
+
);
|
|
287
|
+
const sourceContainedInBranch = sourceSha === branchHeadSha || (
|
|
288
|
+
sourceComparison?.status === "ahead" &&
|
|
289
|
+
String(sourceComparison?.merge_base_commit?.sha || "").toLowerCase() === sourceSha
|
|
290
|
+
);
|
|
280
291
|
let pullRequests = githubJson(`repos/${repository}/commits/${authorizationSha}/pulls`, "source pull-request lineage");
|
|
281
292
|
let mergedPullRequest = (Array.isArray(pullRequests) ? pullRequests : []).find((entry) =>
|
|
282
293
|
entry?.merged_at &&
|
|
283
|
-
|
|
294
|
+
(
|
|
295
|
+
String(entry.merge_commit_sha || "").toLowerCase() === authorizationSha ||
|
|
296
|
+
String(entry.head?.sha || "").toLowerCase() === authorizationSha
|
|
297
|
+
) &&
|
|
284
298
|
entry.base?.ref === branch &&
|
|
285
299
|
entry.head?.repo?.full_name === repository
|
|
286
300
|
);
|
|
@@ -318,10 +332,12 @@ function main() {
|
|
|
318
332
|
const login = String(review?.user?.login || "");
|
|
319
333
|
if (login) latestReviews.set(login, review);
|
|
320
334
|
}
|
|
335
|
+
const pullRequestHeadSha = String(mergedPullRequest?.head?.sha || "").toLowerCase();
|
|
321
336
|
const independentApprovals = [...latestReviews.values()].filter((review) =>
|
|
322
|
-
review.state === "APPROVED" &&
|
|
337
|
+
review.state === "APPROVED" &&
|
|
338
|
+
review.user?.login !== mergedPullRequest?.user?.login &&
|
|
339
|
+
String(review.commit_id || "").toLowerCase() === pullRequestHeadSha
|
|
323
340
|
);
|
|
324
|
-
const pullRequestHeadSha = String(mergedPullRequest?.head?.sha || "").toLowerCase();
|
|
325
341
|
const checkRuns = /^[0-9a-f]{40}$/.test(pullRequestHeadSha)
|
|
326
342
|
? githubJson(`repos/${repository}/commits/${pullRequestHeadSha}/check-runs?per_page=100`, "merged pull-request head check runs")
|
|
327
343
|
: { check_runs: [] };
|
|
@@ -360,7 +376,8 @@ function main() {
|
|
|
360
376
|
requiredCheckSha: pullRequestHeadSha,
|
|
361
377
|
sourceSha,
|
|
362
378
|
authorizationSha,
|
|
363
|
-
headSha:
|
|
379
|
+
headSha: branchHeadSha,
|
|
380
|
+
sourceContainedInBranch,
|
|
364
381
|
releaseReconciliation,
|
|
365
382
|
mergedPullRequest: Boolean(mergedPullRequest),
|
|
366
383
|
pullRequestNumber: mergedPullRequest?.number || 0,
|