@kungfu-tech/buildchain 2.11.8-alpha.1 → 2.11.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 +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 +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/release-passport.js +59 -28
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"product": {
|
|
5
5
|
"name": "Buildchain",
|
|
6
6
|
"package": "@kungfu-tech/buildchain",
|
|
7
|
-
"version": "2.11.8
|
|
7
|
+
"version": "2.11.8",
|
|
8
8
|
"repository": "https://github.com/kungfu-systems/buildchain"
|
|
9
9
|
},
|
|
10
10
|
"majorLine": "v2",
|
|
@@ -235,7 +235,7 @@
|
|
|
235
235
|
"release-state SHA is recorded as a durable audit entrance"
|
|
236
236
|
],
|
|
237
237
|
"breakingDigest": "sha256:b627e1b2ece9b6049517a942c5139e342e6077cdd3d8962d61cef8481b1f70ad",
|
|
238
|
-
"auditDigest": "sha256:
|
|
238
|
+
"auditDigest": "sha256:188279a8b94e9e9de331936881329720deee6788c2e052ae9208e811945d4122"
|
|
239
239
|
},
|
|
240
240
|
{
|
|
241
241
|
"contractVersion": 1,
|
|
@@ -284,7 +284,7 @@
|
|
|
284
284
|
"prose-only public claims downgrade the release trust passport audit"
|
|
285
285
|
],
|
|
286
286
|
"breakingDigest": "sha256:f0b636eb925ddbf45ff1a8872454ab7b4dd98857cac12bb75217830130e62a16",
|
|
287
|
-
"auditDigest": "sha256:
|
|
287
|
+
"auditDigest": "sha256:188279a8b94e9e9de331936881329720deee6788c2e052ae9208e811945d4122"
|
|
288
288
|
},
|
|
289
289
|
{
|
|
290
290
|
"contractVersion": 1,
|
|
@@ -456,9 +456,9 @@
|
|
|
456
456
|
"agents can discover supported Node APIs without importing internal file paths"
|
|
457
457
|
],
|
|
458
458
|
"breakingDigest": "sha256:48f925608d3e2131d90936b07dc2a30341204cae3e6e785c0f77d61ad755c945",
|
|
459
|
-
"auditDigest": "sha256:
|
|
459
|
+
"auditDigest": "sha256:db2738592b80be42f0ff3d2be1161fd09467cf45e9dc4bba7d039aea0808880b"
|
|
460
460
|
}
|
|
461
461
|
],
|
|
462
462
|
"compatibilityDigest": "sha256:967df7e854fdf582294ddfb6403eff25c00db9518a24051e7d47cbd75527c785",
|
|
463
|
-
"contractDigest": "sha256:
|
|
463
|
+
"contractDigest": "sha256:9e3222825e5f3860d9e800588e8e2ce577f3ef275290953ac77268c1f7f5bd09"
|
|
464
464
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"contract": "kungfu-buildchain-site-bundle",
|
|
4
|
-
"generatedAt": "2026-07-10T00:
|
|
5
|
-
"publishedAt": "2026-07-10T00:
|
|
4
|
+
"generatedAt": "2026-07-10T00:46:23.553Z",
|
|
5
|
+
"publishedAt": "2026-07-10T00:46:23.553Z",
|
|
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": "fee907db41bd64ca1523db86adcc241e51ffd507",
|
|
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.11.8
|
|
40
|
+
"version": "2.11.8",
|
|
41
41
|
"versionSource": "package.json#version"
|
|
42
42
|
},
|
|
43
43
|
"source": {
|
|
@@ -255,7 +255,7 @@
|
|
|
255
255
|
"specifier": "@kungfu-tech/buildchain/release-passport",
|
|
256
256
|
"export": "./release-passport",
|
|
257
257
|
"target": "./packages/core/release-passport.js",
|
|
258
|
-
"digest": "sha256:
|
|
258
|
+
"digest": "sha256:188279a8b94e9e9de331936881329720deee6788c2e052ae9208e811945d4122",
|
|
259
259
|
"summary": "Release passport collection, verification, explanation, and evidence APIs.",
|
|
260
260
|
"capabilityGroup": "release-passport-trust",
|
|
261
261
|
"audience": [
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"contract": "kungfu-buildchain-publication-release-registry",
|
|
4
|
-
"generatedAt": "2026-07-10T00:
|
|
5
|
-
"publishedAt": "2026-07-10T00:
|
|
4
|
+
"generatedAt": "2026-07-10T00:46:23.553Z",
|
|
5
|
+
"publishedAt": "2026-07-10T00:46:23.553Z",
|
|
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": "fee907db41bd64ca1523db86adcc241e51ffd507",
|
|
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.11.8
|
|
35
|
+
"version": "2.11.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-10T00:
|
|
5
|
-
"publishedAt": "2026-07-10T00:
|
|
4
|
+
"generatedAt": "2026-07-10T00:46:23.553Z",
|
|
5
|
+
"publishedAt": "2026-07-10T00:46:23.553Z",
|
|
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": "fee907db41bd64ca1523db86adcc241e51ffd507",
|
|
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.11.8
|
|
40
|
+
"version": "2.11.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.11.8
|
|
3
|
+
"version": "2.11.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",
|
|
@@ -134,6 +134,26 @@ function readJsonFile(filePath) {
|
|
|
134
134
|
return JSON.parse(fs.readFileSync(filePath, "utf8"));
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
+
function resolveJsonInputPath(input, { cwd = process.cwd() } = {}) {
|
|
138
|
+
const normalized = String(input || "").trim();
|
|
139
|
+
if (!normalized) {
|
|
140
|
+
return "";
|
|
141
|
+
}
|
|
142
|
+
if (path.isAbsolute(normalized)) {
|
|
143
|
+
return fs.existsSync(normalized) ? normalized : "";
|
|
144
|
+
}
|
|
145
|
+
const cwdCandidate = cwd ? path.resolve(cwd, normalized) : "";
|
|
146
|
+
if (cwdCandidate && fs.existsSync(cwdCandidate)) {
|
|
147
|
+
return cwdCandidate;
|
|
148
|
+
}
|
|
149
|
+
return fs.existsSync(normalized) ? path.resolve(normalized) : "";
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function jsonInputError({ input, label, cwd, cause }) {
|
|
153
|
+
const suffix = cwd ? ` or an existing JSON file path relative to ${cwd}` : " or an existing JSON file path";
|
|
154
|
+
return new Error(`${label} must be valid JSON${suffix}; received ${JSON.stringify(input)}`, { cause });
|
|
155
|
+
}
|
|
156
|
+
|
|
137
157
|
function writeJsonFile(filePath, value) {
|
|
138
158
|
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
139
159
|
fs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`);
|
|
@@ -252,30 +272,41 @@ function defaultLlmsText({ tag = "", passportPath = "buildchain.release.json" }
|
|
|
252
272
|
].join("\n");
|
|
253
273
|
}
|
|
254
274
|
|
|
255
|
-
function parseJsonInput(value, fallback = undefined) {
|
|
275
|
+
function parseJsonInput(value, fallback = undefined, { cwd = process.cwd(), label = "JSON input" } = {}) {
|
|
256
276
|
const input = String(value || "").trim();
|
|
257
277
|
if (!input) {
|
|
258
278
|
return fallback;
|
|
259
279
|
}
|
|
260
|
-
|
|
261
|
-
|
|
280
|
+
const filePath = resolveJsonInputPath(input, { cwd });
|
|
281
|
+
if (filePath) {
|
|
282
|
+
return readJsonFile(filePath);
|
|
283
|
+
}
|
|
284
|
+
try {
|
|
285
|
+
return JSON.parse(input);
|
|
286
|
+
} catch (error) {
|
|
287
|
+
throw jsonInputError({ input, label, cwd, cause: error });
|
|
262
288
|
}
|
|
263
|
-
return JSON.parse(input);
|
|
264
289
|
}
|
|
265
290
|
|
|
266
|
-
function parseJsonInputWithMeta(value, fallback = undefined) {
|
|
291
|
+
function parseJsonInputWithMeta(value, fallback = undefined, { cwd = process.cwd(), label = "JSON input" } = {}) {
|
|
267
292
|
const input = String(value || "").trim();
|
|
268
293
|
if (!input) {
|
|
269
294
|
return { value: fallback, path: "", sha256: "" };
|
|
270
295
|
}
|
|
271
|
-
|
|
296
|
+
const filePath = resolveJsonInputPath(input, { cwd });
|
|
297
|
+
if (filePath) {
|
|
272
298
|
return {
|
|
273
|
-
value: readJsonFile(
|
|
299
|
+
value: readJsonFile(filePath),
|
|
274
300
|
path: input,
|
|
275
|
-
sha256: sha256File(
|
|
301
|
+
sha256: sha256File(filePath),
|
|
276
302
|
};
|
|
277
303
|
}
|
|
278
|
-
|
|
304
|
+
let parsed;
|
|
305
|
+
try {
|
|
306
|
+
parsed = JSON.parse(input);
|
|
307
|
+
} catch (error) {
|
|
308
|
+
throw jsonInputError({ input, label, cwd, cause: error });
|
|
309
|
+
}
|
|
279
310
|
return {
|
|
280
311
|
value: parsed,
|
|
281
312
|
path: "",
|
|
@@ -1179,41 +1210,41 @@ export function collectGitHubReleasePassport({
|
|
|
1179
1210
|
publishJson = "",
|
|
1180
1211
|
workflow = {},
|
|
1181
1212
|
} = {}) {
|
|
1182
|
-
const release = parseJsonInput(releaseJson, {});
|
|
1183
|
-
const releaseExtra = parseJsonInput(releaseJsonExtra, {});
|
|
1184
|
-
const assetsFromJson = parseJsonInput(assetsJson, []);
|
|
1185
|
-
const packageSet = parseJsonInput(packageSetJson, undefined);
|
|
1186
|
-
const publishEvidenceMeta = parseJsonInputWithMeta(publishEvidenceJson, undefined);
|
|
1187
|
-
const trustedPublishing = parseJsonInput(trustedPublishingJson, undefined);
|
|
1188
|
-
const transactionMeta = parseJsonInputWithMeta(transactionJson, undefined);
|
|
1189
|
-
const anchorManifest = normalizeAnchorManifest(parseJsonInputWithMeta(anchorManifestJson, undefined));
|
|
1190
|
-
const impactMeta = parseJsonInputWithMeta(impactJson, undefined);
|
|
1191
|
-
const buildSummaryMeta = parseJsonInputWithMeta(buildSummaryJson, undefined);
|
|
1213
|
+
const release = parseJsonInput(releaseJson, {}, { cwd, label: "releaseJson" });
|
|
1214
|
+
const releaseExtra = parseJsonInput(releaseJsonExtra, {}, { cwd, label: "releaseJsonExtra" });
|
|
1215
|
+
const assetsFromJson = parseJsonInput(assetsJson, [], { cwd, label: "assetsJson" });
|
|
1216
|
+
const packageSet = parseJsonInput(packageSetJson, undefined, { cwd, label: "packageSetJson" });
|
|
1217
|
+
const publishEvidenceMeta = parseJsonInputWithMeta(publishEvidenceJson, undefined, { cwd, label: "publishEvidenceJson" });
|
|
1218
|
+
const trustedPublishing = parseJsonInput(trustedPublishingJson, undefined, { cwd, label: "trustedPublishingJson" });
|
|
1219
|
+
const transactionMeta = parseJsonInputWithMeta(transactionJson, undefined, { cwd, label: "transactionJson" });
|
|
1220
|
+
const anchorManifest = normalizeAnchorManifest(parseJsonInputWithMeta(anchorManifestJson, undefined, { cwd, label: "anchorManifestJson" }));
|
|
1221
|
+
const impactMeta = parseJsonInputWithMeta(impactJson, undefined, { cwd, label: "impactJson" });
|
|
1222
|
+
const buildSummaryMeta = parseJsonInputWithMeta(buildSummaryJson, undefined, { cwd, label: "buildSummaryJson" });
|
|
1192
1223
|
const buildFactMetas = (buildFactsJsons || [])
|
|
1193
1224
|
.filter(Boolean)
|
|
1194
|
-
.map((buildFactsJson) => parseJsonInputWithMeta(buildFactsJson, undefined))
|
|
1225
|
+
.map((buildFactsJson) => parseJsonInputWithMeta(buildFactsJson, undefined, { cwd, label: "buildFactsJsons entry" }))
|
|
1195
1226
|
.filter((meta) => meta.value);
|
|
1196
1227
|
const platformManifestMetas = (platformManifestJsons || [])
|
|
1197
1228
|
.filter(Boolean)
|
|
1198
|
-
.map((manifestJson) => parseJsonInputWithMeta(manifestJson, undefined));
|
|
1199
|
-
const distTagEvidenceMeta = parseJsonInputWithMeta(distTagEvidenceJson, undefined);
|
|
1229
|
+
.map((manifestJson) => parseJsonInputWithMeta(manifestJson, undefined, { cwd, label: "platformManifestJsons entry" }));
|
|
1230
|
+
const distTagEvidenceMeta = parseJsonInputWithMeta(distTagEvidenceJson, undefined, { cwd, label: "distTagEvidenceJson" });
|
|
1200
1231
|
const kfd1WitnessMetas = (kfd1WitnessJsons || [])
|
|
1201
1232
|
.filter(Boolean)
|
|
1202
|
-
.map((witnessJson) => parseJsonInputWithMeta(witnessJson, undefined))
|
|
1233
|
+
.map((witnessJson) => parseJsonInputWithMeta(witnessJson, undefined, { cwd, label: "kfd1WitnessJsons entry" }))
|
|
1203
1234
|
.filter((meta) => meta.value);
|
|
1204
1235
|
const kfd2ClaimMetas = (kfd2ClaimJsons || [])
|
|
1205
1236
|
.filter(Boolean)
|
|
1206
|
-
.map((claimJson) => parseJsonInputWithMeta(claimJson, undefined))
|
|
1237
|
+
.map((claimJson) => parseJsonInputWithMeta(claimJson, undefined, { cwd, label: "kfd2ClaimJsons entry" }))
|
|
1207
1238
|
.filter((meta) => meta.value);
|
|
1208
1239
|
const kfd3PrebuildWitnessMetas = (kfd3PrebuildWitnessJsons || [])
|
|
1209
1240
|
.filter(Boolean)
|
|
1210
|
-
.map((witnessJson) => parseJsonInputWithMeta(witnessJson, undefined))
|
|
1241
|
+
.map((witnessJson) => parseJsonInputWithMeta(witnessJson, undefined, { cwd, label: "kfd3PrebuildWitnessJsons entry" }))
|
|
1211
1242
|
.filter((meta) => meta.value);
|
|
1212
1243
|
const kfd3ArtifactWitnessMetas = (kfd3ArtifactWitnessJsons || [])
|
|
1213
1244
|
.filter(Boolean)
|
|
1214
|
-
.map((witnessJson) => parseJsonInputWithMeta(witnessJson, undefined))
|
|
1245
|
+
.map((witnessJson) => parseJsonInputWithMeta(witnessJson, undefined, { cwd, label: "kfd3ArtifactWitnessJsons entry" }))
|
|
1215
1246
|
.filter((meta) => meta.value);
|
|
1216
|
-
const basePassportMeta = parseJsonInputWithMeta(basePassportJson, undefined);
|
|
1247
|
+
const basePassportMeta = parseJsonInputWithMeta(basePassportJson, undefined, { cwd, label: "basePassportJson" });
|
|
1217
1248
|
const kfd3ArtifactCommandMeta = parseJsonCommandOutput({
|
|
1218
1249
|
command: kfd3ArtifactVerifyCommand,
|
|
1219
1250
|
cwd,
|
|
@@ -1223,7 +1254,7 @@ export function collectGitHubReleasePassport({
|
|
|
1223
1254
|
...kfd3ArtifactWitnessMetas.map((meta) => meta.value),
|
|
1224
1255
|
...(kfd3ArtifactCommandMeta.value ? [kfd3ArtifactCommandMeta.value] : []),
|
|
1225
1256
|
];
|
|
1226
|
-
const publish = parseJsonInput(publishJson, {});
|
|
1257
|
+
const publish = parseJsonInput(publishJson, {}, { cwd, label: "publishJson" });
|
|
1227
1258
|
const assets = [
|
|
1228
1259
|
...(Array.isArray(release.assets) ? release.assets : []),
|
|
1229
1260
|
...(Array.isArray(assetsFromJson) ? assetsFromJson : []),
|