@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 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`, and `promote-buildchain-ref`.
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.9",
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:188279a8b94e9e9de331936881329720deee6788c2e052ae9208e811945d4122"
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:188279a8b94e9e9de331936881329720deee6788c2e052ae9208e811945d4122"
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:db2738592b80be42f0ff3d2be1161fd09467cf45e9dc4bba7d039aea0808880b"
459
+ "auditDigest": "sha256:1cda1562ba9b386200aa9ae5b5c349ee921e4dbff9419c868b8af33754a7e424"
460
460
  }
461
461
  ],
462
462
  "compatibilityDigest": "sha256:967df7e854fdf582294ddfb6403eff25c00db9518a24051e7d47cbd75527c785",
463
- "contractDigest": "sha256:4c33a8ac39ab220d95f02a65a0eb53f649aeaff013ab0ee7befc175e42ba21c8"
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-10T01:02:49.840Z",
5
- "publishedAt": "2026-07-10T01:02:49.840Z",
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": "02ca0700220ae7ce59b9824bf8a231fb90026e39",
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.9",
40
+ "version": "2.11.10-alpha.2",
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.9",
7
+ "version": "2.11.10-alpha.2",
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:188279a8b94e9e9de331936881329720deee6788c2e052ae9208e811945d4122",
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-10T01:02:49.840Z",
5
- "publishedAt": "2026-07-10T01:02:49.840Z",
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": "02ca0700220ae7ce59b9824bf8a231fb90026e39",
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.9",
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-10T01:02:49.840Z",
5
- "publishedAt": "2026-07-10T01:02:49.840Z",
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": "02ca0700220ae7ce59b9824bf8a231fb90026e39",
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.9",
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.9",
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}`);