@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.
@@ -4,7 +4,7 @@
4
4
  "product": {
5
5
  "name": "Buildchain",
6
6
  "package": "@kungfu-tech/buildchain",
7
- "version": "2.11.8-alpha.1",
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:e4218271c4e24ea9b4a5bab04b4d0364c92774075a07d474e05a234eaceae2b1"
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:e4218271c4e24ea9b4a5bab04b4d0364c92774075a07d474e05a234eaceae2b1"
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:7b380d62fe8844c8fbf8d9a233559bfffa1457e9d664ed1bbf46da87cf225d46"
459
+ "auditDigest": "sha256:db2738592b80be42f0ff3d2be1161fd09467cf45e9dc4bba7d039aea0808880b"
460
460
  }
461
461
  ],
462
462
  "compatibilityDigest": "sha256:967df7e854fdf582294ddfb6403eff25c00db9518a24051e7d47cbd75527c785",
463
- "contractDigest": "sha256:a55c534c589ba36e1b9acec36c39db4923bd3c3c55fcbd956d1016510af35988"
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:10:44.453Z",
5
- "publishedAt": "2026-07-10T00:10:44.453Z",
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": "ea1c5e133772c99e31eb4d68fa459608598e66da",
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-alpha.1",
40
+ "version": "2.11.8",
41
41
  "versionSource": "package.json#version"
42
42
  },
43
43
  "source": {
@@ -4,7 +4,7 @@
4
4
  "product": {
5
5
  "id": "kungfu-tech-buildchain",
6
6
  "name": "@kungfu-tech/buildchain",
7
- "version": "2.11.8-alpha.1",
7
+ "version": "2.11.8",
8
8
  "repository": "https://github.com/kungfu-systems/buildchain"
9
9
  },
10
10
  "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:e4218271c4e24ea9b4a5bab04b4d0364c92774075a07d474e05a234eaceae2b1",
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:10:44.453Z",
5
- "publishedAt": "2026-07-10T00:10:44.453Z",
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": "ea1c5e133772c99e31eb4d68fa459608598e66da",
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-alpha.1",
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:10:44.453Z",
5
- "publishedAt": "2026-07-10T00:10:44.453Z",
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": "ea1c5e133772c99e31eb4d68fa459608598e66da",
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-alpha.1",
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-alpha.1",
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
- if (fs.existsSync(input)) {
261
- return readJsonFile(input);
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
- if (fs.existsSync(input)) {
296
+ const filePath = resolveJsonInputPath(input, { cwd });
297
+ if (filePath) {
272
298
  return {
273
- value: readJsonFile(input),
299
+ value: readJsonFile(filePath),
274
300
  path: input,
275
- sha256: sha256File(input),
301
+ sha256: sha256File(filePath),
276
302
  };
277
303
  }
278
- const parsed = JSON.parse(input);
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 : []),