@kungfu-tech/buildchain 2.13.0-alpha.0 → 2.13.0-alpha.1

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.
@@ -626,6 +626,9 @@
626
626
  "auto-no-gate",
627
627
  "buildchain-ref",
628
628
  "buildchain-repository",
629
+ "consumer-predicate-digest",
630
+ "consumer-predicate-id",
631
+ "consumer-qualification-required",
629
632
  "control-plane-audit-json",
630
633
  "dry-run",
631
634
  "evidence-controller-artifact",
@@ -649,15 +652,17 @@
649
652
  "target-ref",
650
653
  "used-nonces-json"
651
654
  ],
652
- "inputCount": 29,
655
+ "inputCount": 32,
653
656
  "secrets": [],
654
657
  "secretCount": 0,
655
658
  "outputs": [
656
659
  "capability-artifact",
657
660
  "capability-digest",
658
- "capability-json"
661
+ "capability-json",
662
+ "gate-aggregate-digest",
663
+ "gate-aggregate-json"
659
664
  ],
660
- "outputCount": 3
665
+ "outputCount": 5
661
666
  },
662
667
  {
663
668
  "id": ".release-docker",
@@ -1615,6 +1620,8 @@
1615
1620
  "publication-admission-json",
1616
1621
  "publication-auto-admission",
1617
1622
  "publication-auto-no-gate",
1623
+ "publication-consumer-predicate-id",
1624
+ "publication-consumer-qualification-command",
1618
1625
  "publication-control-plane-audit-json",
1619
1626
  "publication-expected-json",
1620
1627
  "publication-gate-aggregate-json",
@@ -1624,6 +1631,7 @@
1624
1631
  "publication-runner-provenance-json",
1625
1632
  "publication-target",
1626
1633
  "publication-used-nonces-json",
1634
+ "publication-used-qualification-nonces-json",
1627
1635
  "publish-artifact-kind",
1628
1636
  "publish-command",
1629
1637
  "publish-dist-tag",
@@ -1652,7 +1660,7 @@
1652
1660
  "target-sha",
1653
1661
  "trusted-publishing"
1654
1662
  ],
1655
- "inputCount": 56,
1663
+ "inputCount": 59,
1656
1664
  "secrets": [
1657
1665
  "BUILDCHAIN_ISSUE_APP_ID",
1658
1666
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
@@ -1835,6 +1843,10 @@
1835
1843
  "github-release-notes",
1836
1844
  "github-release-title",
1837
1845
  "promote-only-release-candidate",
1846
+ "publication-capability-json",
1847
+ "publication-gate-aggregate-json",
1848
+ "publication-qualification-receipt-json",
1849
+ "publication-used-qualification-nonces-json",
1838
1850
  "publish-auth",
1839
1851
  "publish-command",
1840
1852
  "publish-dist-tag",
@@ -1867,6 +1879,7 @@
1867
1879
  "release-passport-platform-manifest-paths",
1868
1880
  "release-passport-product-name",
1869
1881
  "require-governance",
1882
+ "require-publication-qualification",
1870
1883
  "require-publish-source-lock",
1871
1884
  "require-version-state",
1872
1885
  "required-status-check",
@@ -1877,7 +1890,7 @@
1877
1890
  "transaction-state-path",
1878
1891
  "verification-command"
1879
1892
  ],
1880
- "inputCount": 54
1893
+ "inputCount": 59
1881
1894
  },
1882
1895
  {
1883
1896
  "id": "report-buildchain-issue",
@@ -3428,8 +3441,8 @@
3428
3441
  "workflowRegistryPath": "dist/site/workflow-registry.json",
3429
3442
  "pageRegistryPath": "dist/site/page-registry.json",
3430
3443
  "cliRegistryDigest": "ff1772371ec74271c21b6723dad0745a080347be8feef36a37e3948ebd19993d",
3431
- "workflowRegistryDigest": "c496f3c91b98409ecadf252ac087e620bb95c02222690ec4543013d0740190d1",
3432
- "pageRegistryDigest": "246e694c72df3166277b128d60bf18bf58c15583d0b70f5652dd4f342510fcdc"
3444
+ "workflowRegistryDigest": "f4dc70cba95a30b79eadbffc3a4ba5f8d382aae220a7bc13965365c2bbd5e674",
3445
+ "pageRegistryDigest": "f06ce732622727942f855a2e7e9639fb274722fb4bd2ca8e24fc677ffcdf7d5d"
3433
3446
  },
3434
3447
  "comparison": {
3435
3448
  "missingCliRegistry": [],
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "contract": "kungfu-buildchain-publication-release-registry",
4
- "generatedAt": "2026-07-15T16:38:35.118Z",
5
- "publishedAt": "2026-07-15T16:38:35.118Z",
4
+ "generatedAt": "2026-07-16T00:47:22.222Z",
5
+ "publishedAt": "2026-07-16T00:47:22.222Z",
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": "aa454f78402e4e89a05592f8714e2d0f55f10c86",
22
+ "sourceRevision": "b4ee7448f7de3f9dce8f390db06c26569d3ddefe",
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.13.0-alpha.0",
35
+ "version": "2.13.0-alpha.1",
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-15T16:38:35.118Z",
5
- "publishedAt": "2026-07-15T16:38:35.118Z",
4
+ "generatedAt": "2026-07-16T00:47:22.222Z",
5
+ "publishedAt": "2026-07-16T00:47:22.222Z",
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": "aa454f78402e4e89a05592f8714e2d0f55f10c86",
22
+ "sourceRevision": "b4ee7448f7de3f9dce8f390db06c26569d3ddefe",
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.13.0-alpha.0",
40
+ "version": "2.13.0-alpha.1",
41
41
  "versionSource": "package.json#version"
42
42
  },
43
43
  "entrypoint": "buildchain-site.json",
@@ -85,7 +85,7 @@
85
85
  "path": "docs/publication-authority.md",
86
86
  "plane": "verify",
87
87
  "exists": true,
88
- "digest": "sha256:05bc22c7e5885e591bc121fc43f588e5d49ccf0a8de6a642811c1d0d03dcee1e"
88
+ "digest": "sha256:920d4f14902ded1999f46d39f6d02db8cb5be6f22e376f6f2d456b3a1cc0c674"
89
89
  },
90
90
  {
91
91
  "id": "release-candidate",
@@ -93,7 +93,7 @@
93
93
  "path": "docs/release-candidate.md",
94
94
  "plane": "verify",
95
95
  "exists": true,
96
- "digest": "sha256:554613c963f57cc391acbd072bf73e1a2543d9bd1371087d4411577cccbf817c"
96
+ "digest": "sha256:1fc581cf1b4e4a202464c8d6671b3bff12d0b349760246a951e88ef524f99e6b"
97
97
  },
98
98
  {
99
99
  "id": "release-propagation",
@@ -237,7 +237,7 @@
237
237
  "path": "docs/release-governance.md",
238
238
  "plane": "why",
239
239
  "exists": true,
240
- "digest": "sha256:03108f05a608cb0849e7a668fe23671b62863907ce02a70bc6522eb8074f3e63"
240
+ "digest": "sha256:82160f0fd9e45f08dbfbaf8037e0895cbeecf251feca8bdaff607dcc030b3e28"
241
241
  },
242
242
  {
243
243
  "id": "release-flow",
@@ -222,6 +222,9 @@
222
222
  "auto-no-gate",
223
223
  "buildchain-ref",
224
224
  "buildchain-repository",
225
+ "consumer-predicate-digest",
226
+ "consumer-predicate-id",
227
+ "consumer-qualification-required",
225
228
  "control-plane-audit-json",
226
229
  "dry-run",
227
230
  "evidence-controller-artifact",
@@ -245,15 +248,17 @@
245
248
  "target-ref",
246
249
  "used-nonces-json"
247
250
  ],
248
- "inputCount": 29,
251
+ "inputCount": 32,
249
252
  "secrets": [],
250
253
  "secretCount": 0,
251
254
  "outputs": [
252
255
  "capability-artifact",
253
256
  "capability-digest",
254
- "capability-json"
257
+ "capability-json",
258
+ "gate-aggregate-digest",
259
+ "gate-aggregate-json"
255
260
  ],
256
- "outputCount": 3,
261
+ "outputCount": 5,
257
262
  "surface": "reusable-workflow",
258
263
  "capabilityGroup": "api-cli-reference",
259
264
  "status": "active"
@@ -1313,6 +1318,8 @@
1313
1318
  "publication-admission-json",
1314
1319
  "publication-auto-admission",
1315
1320
  "publication-auto-no-gate",
1321
+ "publication-consumer-predicate-id",
1322
+ "publication-consumer-qualification-command",
1316
1323
  "publication-control-plane-audit-json",
1317
1324
  "publication-expected-json",
1318
1325
  "publication-gate-aggregate-json",
@@ -1322,6 +1329,7 @@
1322
1329
  "publication-runner-provenance-json",
1323
1330
  "publication-target",
1324
1331
  "publication-used-nonces-json",
1332
+ "publication-used-qualification-nonces-json",
1325
1333
  "publish-artifact-kind",
1326
1334
  "publish-command",
1327
1335
  "publish-dist-tag",
@@ -1350,7 +1358,7 @@
1350
1358
  "target-sha",
1351
1359
  "trusted-publishing"
1352
1360
  ],
1353
- "inputCount": 56,
1361
+ "inputCount": 59,
1354
1362
  "secrets": [
1355
1363
  "BUILDCHAIN_ISSUE_APP_ID",
1356
1364
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
@@ -1561,6 +1569,10 @@
1561
1569
  "github-release-notes",
1562
1570
  "github-release-title",
1563
1571
  "promote-only-release-candidate",
1572
+ "publication-capability-json",
1573
+ "publication-gate-aggregate-json",
1574
+ "publication-qualification-receipt-json",
1575
+ "publication-used-qualification-nonces-json",
1564
1576
  "publish-auth",
1565
1577
  "publish-command",
1566
1578
  "publish-dist-tag",
@@ -1593,6 +1605,7 @@
1593
1605
  "release-passport-platform-manifest-paths",
1594
1606
  "release-passport-product-name",
1595
1607
  "require-governance",
1608
+ "require-publication-qualification",
1596
1609
  "require-publish-source-lock",
1597
1610
  "require-version-state",
1598
1611
  "required-status-check",
@@ -1603,7 +1616,7 @@
1603
1616
  "transaction-state-path",
1604
1617
  "verification-command"
1605
1618
  ],
1606
- "inputCount": 54,
1619
+ "inputCount": 59,
1607
1620
  "capabilityGroup": "release-passport-trust",
1608
1621
  "status": "active"
1609
1622
  },
@@ -136,6 +136,32 @@ publication capability.
136
136
  Evidence publication is a separate authority class and never grants product
137
137
  publication.
138
138
 
139
+ ## Consumer qualification handoff
140
+
141
+ Consumers may explicitly opt in to a final, consumer-owned qualification
142
+ predicate. Buildchain then transports the complete Gate aggregate alongside the
143
+ sealed capability instead of reducing it to a summary. The capability binds the
144
+ authority registry, consumer Gate registry and policy, exact source and runtime,
145
+ controller, runner, control-plane, artifact, provider target, channel, version,
146
+ freshness window, nonce, and exact predicate command digest.
147
+
148
+ The predicate runs in a separate job with read-only source access, no inherited
149
+ secrets, no OIDC permission, and no provider write permission. It receives only
150
+ paths to `capability.json` and `gate-aggregate.json` plus the exact predicate id
151
+ and digest. The consumer writes a
152
+ `kungfu-buildchain-consumer-publication-decision`; Buildchain seals that result
153
+ as a deterministic
154
+ `kungfu-buildchain-publication-qualification-receipt`. Buildchain does not parse
155
+ product-specific Gate meanings.
156
+
157
+ The provider action revalidates the capability, full aggregate, receipt,
158
+ predicate identity, freshness, nonce, source, version, channel, target, and all
159
+ sealed digests immediately before the publish transaction. Missing, denied,
160
+ stale, replayed, substituted, or drifted receipts fail before provider mutation.
161
+ Direct calls to the provider action cannot bypass the receipt when
162
+ `require-publication-qualification` is enabled. Consumers that do not opt in
163
+ retain the existing publication contract.
164
+
139
165
  ## API and CLI
140
166
 
141
167
  Use `@kungfu-tech/buildchain/publication-authority` or run:
@@ -140,3 +140,22 @@ consumer with a Shifu Gate registry supplies `publication-gate-aggregate-json`
140
140
  instead. Buildchain still requires caller-owned RC evidence, an exact authority
141
141
  runtime and source SHA, a repository-local publisher workflow, matching npm
142
142
  target/package identity, and a qualifying control-plane audit.
143
+
144
+ A consumer that owns additional product qualification semantics can opt in to
145
+ the sealed handoff without teaching Buildchain those semantics:
146
+
147
+ ```yaml
148
+ publication-consumer-predicate-id: kungfu.release-admission/v1
149
+ publication-consumer-qualification-command: node scripts/qualify-release.mjs
150
+ ```
151
+
152
+ The command reads `BUILDCHAIN_PUBLICATION_CAPABILITY_PATH` and
153
+ `BUILDCHAIN_PUBLICATION_GATE_AGGREGATE_PATH`, evaluates the complete aggregate,
154
+ and writes a decision JSON document to
155
+ `BUILDCHAIN_PUBLICATION_QUALIFICATION_RESULT_PATH`. It also receives
156
+ `BUILDCHAIN_PUBLICATION_PREDICATE_ID` and
157
+ `BUILDCHAIN_PUBLICATION_PREDICATE_DIGEST`. The separate qualification job has
158
+ no write or OIDC permission and does not inherit publication secrets. A
159
+ successful deterministic receipt is rechecked by the provider action
160
+ immediately before mutation. Omitting both inputs preserves the existing
161
+ consumer contract; supplying only one fails closed.
@@ -590,7 +590,11 @@ Buildchain's own promotion workflow reads `BUILDCHAIN_PROMOTION_BYPASS_APPS`,
590
590
  `BUILDCHAIN_PROMOTION_BYPASS_TEAMS` repository variables so the declared bypass
591
591
  identity can match the actual `BUILDCHAIN_PROMOTION_TOKEN` actor, but consumers
592
592
  do not need to duplicate that actor manually when the token identity is
593
- discoverable.
593
+ discoverable. Buildchain's release-line bootstrap applies the same declared
594
+ allowances when it creates new `dev`, `alpha`, and `release` branch protection,
595
+ and fails closed before changing protection when no promotion authority is
596
+ declared. This keeps a new minor line publishable without weakening its normal
597
+ human review gate.
594
598
 
595
599
  ## What This Guarantees
596
600
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kungfu-tech/buildchain",
3
- "version": "2.13.0-alpha.0",
3
+ "version": "2.13.0-alpha.1",
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",
@@ -138,19 +138,25 @@ export {
138
138
  PUBLICATION_AUTHORITY_CLASSES,
139
139
  PUBLICATION_AUTHORITY_REGISTRY_CONTRACT,
140
140
  PUBLICATION_CAPABILITY_CONTRACT,
141
+ CONSUMER_PUBLICATION_DECISION_CONTRACT,
141
142
  PUBLICATION_CONTROL_PLANE_AUDIT_CONTRACT,
142
143
  PUBLICATION_GATE_DECISION_CONTRACT,
144
+ PUBLICATION_QUALIFICATION_RECEIPT_CONTRACT,
143
145
  RUNNER_PROVENANCE_CLASSES,
144
146
  RUNNER_PROVENANCE_CONTRACT,
145
147
  createPublicationAuthorityRegistry,
146
148
  createPublicationAdmission,
147
149
  createPublicationArtifactManifestSet,
150
+ createConsumerPublicationDecision,
148
151
  createPublicationControlPlaneAudit,
149
152
  createPublicationGateDecision,
153
+ createPublicationQualificationReceipt,
150
154
  createRunnerProvenance,
151
155
  detectPublicationAuthoritySignals,
152
156
  publicationAuthorityDigest,
157
+ publicationGateAggregateBindings,
153
158
  verifyPublicationAdmission,
159
+ verifyPublicationQualificationReceipt,
154
160
  } from "./publication-authority.js";
155
161
 
156
162
  export {