@kungfu-tech/buildchain 2.12.5-alpha.1 → 2.12.5-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/dist/site/buildchain-contract.json +5 -5
- package/dist/site/buildchain-site.json +4 -4
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/node-api-registry.json +2 -2
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/site-manifest.json +4 -4
- package/package.json +1 -1
- package/packages/core/controller-evidence.js +12 -2
- package/packages/core/release-passport.js +6 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"product": {
|
|
5
5
|
"name": "Buildchain",
|
|
6
6
|
"package": "@kungfu-tech/buildchain",
|
|
7
|
-
"version": "2.12.5-alpha.
|
|
7
|
+
"version": "2.12.5-alpha.2",
|
|
8
8
|
"repository": "https://github.com/kungfu-systems/buildchain"
|
|
9
9
|
},
|
|
10
10
|
"majorLine": "v2",
|
|
@@ -328,7 +328,7 @@
|
|
|
328
328
|
"release-state SHA is recorded as a durable audit entrance"
|
|
329
329
|
],
|
|
330
330
|
"breakingDigest": "sha256:b627e1b2ece9b6049517a942c5139e342e6077cdd3d8962d61cef8481b1f70ad",
|
|
331
|
-
"auditDigest": "sha256:
|
|
331
|
+
"auditDigest": "sha256:32fd54ceb8e1a0219918e7744797e3a1bf3f614bb8498028209275b98304ac5b"
|
|
332
332
|
},
|
|
333
333
|
{
|
|
334
334
|
"contractVersion": 1,
|
|
@@ -377,7 +377,7 @@
|
|
|
377
377
|
"prose-only public claims downgrade the release trust passport audit"
|
|
378
378
|
],
|
|
379
379
|
"breakingDigest": "sha256:f0b636eb925ddbf45ff1a8872454ab7b4dd98857cac12bb75217830130e62a16",
|
|
380
|
-
"auditDigest": "sha256:
|
|
380
|
+
"auditDigest": "sha256:32fd54ceb8e1a0219918e7744797e3a1bf3f614bb8498028209275b98304ac5b"
|
|
381
381
|
},
|
|
382
382
|
{
|
|
383
383
|
"contractVersion": 1,
|
|
@@ -549,7 +549,7 @@
|
|
|
549
549
|
"agents can discover supported Node APIs without importing internal file paths"
|
|
550
550
|
],
|
|
551
551
|
"breakingDigest": "sha256:48f925608d3e2131d90936b07dc2a30341204cae3e6e785c0f77d61ad755c945",
|
|
552
|
-
"auditDigest": "sha256:
|
|
552
|
+
"auditDigest": "sha256:3bcfa43a81ab6b7cab1a82deee789d412978df48496f8cc73b6edef71a38569a"
|
|
553
553
|
},
|
|
554
554
|
{
|
|
555
555
|
"contractVersion": 1,
|
|
@@ -2549,5 +2549,5 @@
|
|
|
2549
2549
|
}
|
|
2550
2550
|
],
|
|
2551
2551
|
"compatibilityDigest": "sha256:2520207c5d6d6a737dd32251a42be9c5299644d9aebf690a8402ead1724ed495",
|
|
2552
|
-
"contractDigest": "sha256:
|
|
2552
|
+
"contractDigest": "sha256:297bf3fb92da8a668f0bcbe9cf4d87fc544dd24b241a1047404eaf64fdfba420"
|
|
2553
2553
|
}
|
|
@@ -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-14T02:08:07.124Z",
|
|
5
|
+
"publishedAt": "2026-07-14T02:08:07.124Z",
|
|
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": "0cb2a220385a2ef7bc6eafb76d1e99eaf4b31501",
|
|
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.5-alpha.
|
|
40
|
+
"version": "2.12.5-alpha.2",
|
|
41
41
|
"versionSource": "package.json#version"
|
|
42
42
|
},
|
|
43
43
|
"source": {
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"specifier": "@kungfu-tech/buildchain/controller-evidence",
|
|
87
87
|
"export": "./controller-evidence",
|
|
88
88
|
"target": "./packages/core/controller-evidence.js",
|
|
89
|
-
"digest": "sha256:
|
|
89
|
+
"digest": "sha256:6aba1af5216feaec16581a1ea36fdf318cf4af4e03b22fe5399a8bf597b8c003",
|
|
90
90
|
"summary": "Project-independent controller descriptors, source/runtime-bound plans, receipts, aggregates, and validation APIs.",
|
|
91
91
|
"capabilityGroup": "reusable-build",
|
|
92
92
|
"audience": [
|
|
@@ -281,7 +281,7 @@
|
|
|
281
281
|
"specifier": "@kungfu-tech/buildchain/release-passport",
|
|
282
282
|
"export": "./release-passport",
|
|
283
283
|
"target": "./packages/core/release-passport.js",
|
|
284
|
-
"digest": "sha256:
|
|
284
|
+
"digest": "sha256:32fd54ceb8e1a0219918e7744797e3a1bf3f614bb8498028209275b98304ac5b",
|
|
285
285
|
"summary": "Release passport collection, verification, explanation, and evidence APIs.",
|
|
286
286
|
"capabilityGroup": "release-passport-trust",
|
|
287
287
|
"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-14T02:08:07.124Z",
|
|
5
|
+
"publishedAt": "2026-07-14T02:08:07.124Z",
|
|
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": "0cb2a220385a2ef7bc6eafb76d1e99eaf4b31501",
|
|
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.5-alpha.
|
|
35
|
+
"version": "2.12.5-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-14T02:08:07.124Z",
|
|
5
|
+
"publishedAt": "2026-07-14T02:08:07.124Z",
|
|
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": "0cb2a220385a2ef7bc6eafb76d1e99eaf4b31501",
|
|
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.5-alpha.
|
|
40
|
+
"version": "2.12.5-alpha.2",
|
|
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.12.5-alpha.
|
|
3
|
+
"version": "2.12.5-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",
|
|
@@ -452,6 +452,7 @@ export function createControllerReceiptReference(receipt) {
|
|
|
452
452
|
|
|
453
453
|
export function validateControllerReceiptReference(reference, {
|
|
454
454
|
expectedSourceSha = "",
|
|
455
|
+
acceptedSourceShas = [],
|
|
455
456
|
expectedRuntimeSha = "",
|
|
456
457
|
requirePassed = false,
|
|
457
458
|
} = {}) {
|
|
@@ -468,7 +469,10 @@ export function validateControllerReceiptReference(reference, {
|
|
|
468
469
|
issues.push("controller receipt reference status is invalid");
|
|
469
470
|
}
|
|
470
471
|
if (requirePassed && reference.status !== "passed") issues.push("controller receipt reference status must be passed");
|
|
471
|
-
|
|
472
|
+
const allowedSourceShas = new Set([expectedSourceSha, ...(acceptedSourceShas || [])].filter(Boolean));
|
|
473
|
+
if (allowedSourceShas.size > 0 && !allowedSourceShas.has(reference.sourceSha)) {
|
|
474
|
+
issues.push("controller receipt reference source SHA mismatch");
|
|
475
|
+
}
|
|
472
476
|
if (expectedRuntimeSha && reference.runtimeSha !== expectedRuntimeSha) issues.push("controller receipt reference runtime SHA mismatch");
|
|
473
477
|
return { ok: issues.length === 0, issues };
|
|
474
478
|
}
|
|
@@ -477,6 +481,7 @@ export function normalizeControllerReceiptReferences({
|
|
|
477
481
|
receipts = [],
|
|
478
482
|
references = [],
|
|
479
483
|
expectedSourceSha = "",
|
|
484
|
+
acceptedSourceShas = [],
|
|
480
485
|
expectedRuntimeSha = "",
|
|
481
486
|
requirePassed = false,
|
|
482
487
|
} = {}) {
|
|
@@ -486,7 +491,12 @@ export function normalizeControllerReceiptReferences({
|
|
|
486
491
|
];
|
|
487
492
|
const seen = new Set();
|
|
488
493
|
for (const reference of normalized) {
|
|
489
|
-
const validation = validateControllerReceiptReference(reference, {
|
|
494
|
+
const validation = validateControllerReceiptReference(reference, {
|
|
495
|
+
expectedSourceSha,
|
|
496
|
+
acceptedSourceShas,
|
|
497
|
+
expectedRuntimeSha,
|
|
498
|
+
requirePassed,
|
|
499
|
+
});
|
|
490
500
|
if (!validation.ok) throw new Error(`controller receipt reference is invalid: ${validation.issues.join("; ")}`);
|
|
491
501
|
if (seen.has(reference.controllerId)) throw new Error(`duplicate controller receipt reference: ${reference.controllerId}`);
|
|
492
502
|
seen.add(reference.controllerId);
|
|
@@ -1019,10 +1019,16 @@ export function createReleasePassport({
|
|
|
1019
1019
|
kfd1Section: normalizedKfd1?.passportSection,
|
|
1020
1020
|
kfd3Section: normalizedKfd3?.passportSection,
|
|
1021
1021
|
});
|
|
1022
|
+
const builtSourceSha = optionalString(release.builtSourceSha || release.built_source_sha);
|
|
1023
|
+
const promotionChannelSha = optionalString(release.promotionChannelSha || release.promotion_channel_sha);
|
|
1024
|
+
const treeEquivalent = release.treeEquivalent === true;
|
|
1022
1025
|
const normalizedControllerReceipts = normalizeControllerReceiptReferences({
|
|
1023
1026
|
receipts: controllerReceipts,
|
|
1024
1027
|
references: controllerReceiptReferences,
|
|
1025
1028
|
expectedSourceSha: sourceSha,
|
|
1029
|
+
acceptedSourceShas: treeEquivalent && promotionChannelSha === sourceSha && builtSourceSha
|
|
1030
|
+
? [builtSourceSha]
|
|
1031
|
+
: [],
|
|
1026
1032
|
requirePassed: true,
|
|
1027
1033
|
});
|
|
1028
1034
|
const publishArtifacts = normalizedPublishEvidence?.artifacts || [];
|