@kungfu-tech/buildchain 2.11.9 → 2.11.10-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/AGENTS.md +4 -0
- package/CONTRIBUTING.md +7 -1
- 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 +45 -0
- package/scripts/check-inventory.mjs +18 -6
package/AGENTS.md
CHANGED
|
@@ -53,6 +53,10 @@ pnpm run check
|
|
|
53
53
|
`pnpm run check` validates inventory data, lints root workflows, runs unit tests,
|
|
54
54
|
and rebuilds every action bundle.
|
|
55
55
|
|
|
56
|
+
Before broad maintenance or consolidation work, read the current engineering
|
|
57
|
+
handoff in
|
|
58
|
+
[`2026-07-10-buildchain-consolidation.md`](.github/retrospectives/2026-07-10-buildchain-consolidation.md).
|
|
59
|
+
|
|
56
60
|
## Proposing changes
|
|
57
61
|
|
|
58
62
|
- Open pull requests against the relevant `dev/*` channel branch.
|
package/CONTRIBUTING.md
CHANGED
|
@@ -30,8 +30,11 @@ repository itself is a Node/pnpm workspace.
|
|
|
30
30
|
|
|
31
31
|
- `.github/workflows` - repository checks, reusable workflows, and Buildchain
|
|
32
32
|
self-promotion.
|
|
33
|
+
- `.github/retrospectives` - time-bounded engineering reviews and maintenance
|
|
34
|
+
handoff records. Start with the latest record before broad consolidation work.
|
|
33
35
|
- `actions` - the active GitHub Actions surface:
|
|
34
|
-
`validate-config`, `run-lifecycle`,
|
|
36
|
+
`validate-config`, `run-lifecycle`, `promote-buildchain-ref`, and
|
|
37
|
+
`report-buildchain-issue`.
|
|
35
38
|
- `bin` - the published `buildchain` command-line entrypoint.
|
|
36
39
|
- `docs` - release governance, lifecycle, reusable workflow, web-surface, and
|
|
37
40
|
CLI documentation.
|
|
@@ -43,6 +46,9 @@ repository itself is a Node/pnpm workspace.
|
|
|
43
46
|
Standalone historical `action-*` repositories are not mirrored here as active
|
|
44
47
|
actions. See [`docs/migration-inventory.md`](docs/migration-inventory.md).
|
|
45
48
|
|
|
49
|
+
The current consolidation handoff is
|
|
50
|
+
[`2026-07-10-buildchain-consolidation.md`](.github/retrospectives/2026-07-10-buildchain-consolidation.md).
|
|
51
|
+
|
|
46
52
|
## Build and verification
|
|
47
53
|
|
|
48
54
|
```sh
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"product": {
|
|
5
5
|
"name": "Buildchain",
|
|
6
6
|
"package": "@kungfu-tech/buildchain",
|
|
7
|
-
"version": "2.11.
|
|
7
|
+
"version": "2.11.10-alpha.2",
|
|
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:f458470154bed291a4adcd703f0fe810897d95d4e939793da676cc526a5a80bb"
|
|
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:f458470154bed291a4adcd703f0fe810897d95d4e939793da676cc526a5a80bb"
|
|
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:1cda1562ba9b386200aa9ae5b5c349ee921e4dbff9419c868b8af33754a7e424"
|
|
460
460
|
}
|
|
461
461
|
],
|
|
462
462
|
"compatibilityDigest": "sha256:967df7e854fdf582294ddfb6403eff25c00db9518a24051e7d47cbd75527c785",
|
|
463
|
-
"contractDigest": "sha256:
|
|
463
|
+
"contractDigest": "sha256:a9adfc334cddc5d381899106923795432212c28e0a12d46133bf2cfa00d01b27"
|
|
464
464
|
}
|
|
@@ -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-10T03:16:35.087Z",
|
|
5
|
+
"publishedAt": "2026-07-10T03:16:35.087Z",
|
|
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": "8925c651e39677f5366e5bca1b2755d51ef76bca",
|
|
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.
|
|
40
|
+
"version": "2.11.10-alpha.2",
|
|
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:f458470154bed291a4adcd703f0fe810897d95d4e939793da676cc526a5a80bb",
|
|
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-
|
|
5
|
-
"publishedAt": "2026-07-
|
|
4
|
+
"generatedAt": "2026-07-10T03:16:35.087Z",
|
|
5
|
+
"publishedAt": "2026-07-10T03:16:35.087Z",
|
|
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": "8925c651e39677f5366e5bca1b2755d51ef76bca",
|
|
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.
|
|
35
|
+
"version": "2.11.10-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-10T03:16:35.087Z",
|
|
5
|
+
"publishedAt": "2026-07-10T03:16:35.087Z",
|
|
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": "8925c651e39677f5366e5bca1b2755d51ef76bca",
|
|
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.
|
|
40
|
+
"version": "2.11.10-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.11.
|
|
3
|
+
"version": "2.11.10-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",
|
|
@@ -1768,6 +1768,19 @@ export function createReleaseCheckReport({
|
|
|
1768
1768
|
}
|
|
1769
1769
|
const surfaceImpacts = Array.isArray(impact?.surfaceImpacts) ? impact.surfaceImpacts : [];
|
|
1770
1770
|
const passportSurfaceImpacts = Array.isArray(passport?.surfaceImpacts) ? passport.surfaceImpacts : [];
|
|
1771
|
+
const impactRelease = impact?.release && typeof impact.release === "object" && !Array.isArray(impact.release)
|
|
1772
|
+
? impact.release
|
|
1773
|
+
: {};
|
|
1774
|
+
const impactVersion = optionalString(impactRelease.version);
|
|
1775
|
+
const impactLine = optionalString(impactRelease.line);
|
|
1776
|
+
const passportVersion = optionalString(passport?.release?.publishedVersion || passport?.release?.package?.version);
|
|
1777
|
+
const passportTargetRef = optionalString(passport?.release?.targetRef || passport?.release?.target_ref);
|
|
1778
|
+
const passportTargetLineMatch = passportTargetRef.match(/^(?:alpha|release)\/v(\d+)\/v\1\.(\d+)$/);
|
|
1779
|
+
const passportLine = optionalString(
|
|
1780
|
+
passport?.release?.line ||
|
|
1781
|
+
(passportTargetLineMatch ? `v${passportTargetLineMatch[1]}.${passportTargetLineMatch[2]}` : ""),
|
|
1782
|
+
);
|
|
1783
|
+
const impactClassification = normalizeImpactLevel(impact?.classification);
|
|
1771
1784
|
const declaredFinalImpact = normalizeImpactLevel(impact?.versionImpact?.final || impact?.classification);
|
|
1772
1785
|
const computedFinalImpact = highestImpactLevel(surfaceImpacts.map((entry) => entry.impact));
|
|
1773
1786
|
const requiredSurfaceImpacts = surfaceImpactRequirement({ passport, impact });
|
|
@@ -1786,6 +1799,38 @@ export function createReleaseCheckReport({
|
|
|
1786
1799
|
issues.push(issue("error", "kfd-3.metadata", error.message));
|
|
1787
1800
|
}
|
|
1788
1801
|
}
|
|
1802
|
+
if (impactVersion) {
|
|
1803
|
+
if (!impactLine) {
|
|
1804
|
+
issues.push(issue("error", "impact.release.line", "version-bound impact requires release.line"));
|
|
1805
|
+
} else if (passportLine && impactLine !== passportLine) {
|
|
1806
|
+
issues.push(issue("error", "impact.release.line", "impact release line must match the release passport line", {
|
|
1807
|
+
impactLine,
|
|
1808
|
+
passportLine,
|
|
1809
|
+
}));
|
|
1810
|
+
}
|
|
1811
|
+
if (passportVersion && impactVersion !== passportVersion) {
|
|
1812
|
+
issues.push(issue("error", "impact.release.version", "impact release version must match the published release version", {
|
|
1813
|
+
impactVersion,
|
|
1814
|
+
passportVersion,
|
|
1815
|
+
}));
|
|
1816
|
+
}
|
|
1817
|
+
if (!["patch", "minor", "major"].includes(impactClassification)) {
|
|
1818
|
+
issues.push(issue("error", "impact.classification", "version-bound impact classification must be patch, minor, or major"));
|
|
1819
|
+
} else if (impactClassification !== declaredFinalImpact) {
|
|
1820
|
+
issues.push(issue("error", "impact.classification", "version-bound impact classification must match versionImpact.final", {
|
|
1821
|
+
classification: impactClassification,
|
|
1822
|
+
versionImpact: declaredFinalImpact,
|
|
1823
|
+
}));
|
|
1824
|
+
}
|
|
1825
|
+
if (!optionalString(impact?.summary).trim()) {
|
|
1826
|
+
issues.push(issue("error", "impact.summary", "version-bound impact summary is required"));
|
|
1827
|
+
}
|
|
1828
|
+
if (surfaceImpacts.length === 0) {
|
|
1829
|
+
issues.push(issue("error", "impact.surfaceImpacts.required", "version-bound impact requires surfaceImpacts[]", {
|
|
1830
|
+
type: "version-bound-release-impact",
|
|
1831
|
+
}));
|
|
1832
|
+
}
|
|
1833
|
+
}
|
|
1789
1834
|
if (requiredSurfaceImpacts.required && surfaceImpacts.length === 0) {
|
|
1790
1835
|
issues.push(issue("error", "impact.surfaceImpacts.required", "surfaceImpacts[] is required for this release passport type", requiredSurfaceImpacts));
|
|
1791
1836
|
}
|
|
@@ -58,6 +58,7 @@ const requiredPaths = [
|
|
|
58
58
|
"tests/buildchain-inventory.json",
|
|
59
59
|
".buildchain/buildchain.toml",
|
|
60
60
|
".buildchain/contract-lock.json",
|
|
61
|
+
".buildchain/release-impact.json",
|
|
61
62
|
".github/actionlint.yaml",
|
|
62
63
|
".github/workflows/self-hosted-runner-smoke.yml",
|
|
63
64
|
".github/workflows/buildchain-ref-promotion.yml",
|
|
@@ -651,6 +652,22 @@ const binaryDistributionWorkflow = fs.readFileSync(path.join(root, ".github/work
|
|
|
651
652
|
const selfHostedRunnerSmokeWorkflow = fs.readFileSync(path.join(root, ".github/workflows/self-hosted-runner-smoke.yml"), "utf8");
|
|
652
653
|
const npmDryRunScript = fs.readFileSync(path.join(root, "scripts/npm-publish-dry-run.mjs"), "utf8");
|
|
653
654
|
const npmPublishTransactionScript = fs.readFileSync(path.join(root, "scripts/npm-publish-transaction.mjs"), "utf8");
|
|
655
|
+
const rootPackageJson = JSON.parse(fs.readFileSync(path.join(root, "package.json"), "utf8"));
|
|
656
|
+
const selfReleaseImpact = JSON.parse(fs.readFileSync(path.join(root, ".buildchain/release-impact.json"), "utf8"));
|
|
657
|
+
const selfReleaseLineMatch = String(rootPackageJson.version || "").match(/^(\d+)\.(\d+)\./);
|
|
658
|
+
const expectedSelfReleaseLine = selfReleaseLineMatch ? `v${selfReleaseLineMatch[1]}.${selfReleaseLineMatch[2]}` : "";
|
|
659
|
+
if (selfReleaseImpact.release?.version !== rootPackageJson.version) {
|
|
660
|
+
throw new Error("Buildchain self release impact version must match package.json version");
|
|
661
|
+
}
|
|
662
|
+
if (!expectedSelfReleaseLine || selfReleaseImpact.release?.line !== expectedSelfReleaseLine) {
|
|
663
|
+
throw new Error("Buildchain self release impact line must match package.json major/minor line");
|
|
664
|
+
}
|
|
665
|
+
if (!["patch", "minor", "major"].includes(selfReleaseImpact.classification)) {
|
|
666
|
+
throw new Error("Buildchain self release impact classification must be patch, minor, or major");
|
|
667
|
+
}
|
|
668
|
+
if (!String(selfReleaseImpact.summary || "").trim() || !Array.isArray(selfReleaseImpact.surfaceImpacts) || selfReleaseImpact.surfaceImpacts.length === 0) {
|
|
669
|
+
throw new Error("Buildchain self release impact requires a summary and surfaceImpacts[]");
|
|
670
|
+
}
|
|
654
671
|
for (const requiredSnippet of [
|
|
655
672
|
"runs-on: ubuntu-24.04",
|
|
656
673
|
"workflow_dispatch:",
|
|
@@ -680,12 +697,7 @@ for (const requiredSnippet of [
|
|
|
680
697
|
"github-release: true",
|
|
681
698
|
"release-passport-buildchain-self-kfd: true",
|
|
682
699
|
"publish-required-artifacts-json: \"[]\"",
|
|
683
|
-
"release-passport-impact-json:
|
|
684
|
-
"Buildchain v2.10 patch release accepts strict publish-gate channel-lineage PRs",
|
|
685
|
-
"directory_index_rewrite = external",
|
|
686
|
-
"publish-gate-channel-lineage",
|
|
687
|
-
"web-surface-external-directory-index-rewrite",
|
|
688
|
-
"\"surfaceImpacts\":[",
|
|
700
|
+
"release-passport-impact-json: .buildchain/release-impact.json",
|
|
689
701
|
]) {
|
|
690
702
|
if (!buildchainRefPromotionWorkflow.includes(requiredSnippet)) {
|
|
691
703
|
throw new Error(`buildchain ref promotion workflow missing npm transaction snippet: ${requiredSnippet}`);
|