@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.
- package/actions/promote-buildchain-ref/README.md +13 -0
- package/dist/site/buildchain-contract.json +32 -17
- package/dist/site/buildchain-site.json +20 -15
- package/dist/site/controller-registry.json +14 -2
- package/dist/site/kfd-claims.json +16 -5
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +3 -3
- package/dist/site/node-api-registry.json +3 -3
- package/dist/site/page-registry.json +13 -8
- package/dist/site/public-surface-audit.json +20 -7
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/site-manifest.json +7 -7
- package/dist/site/workflow-registry.json +18 -5
- package/docs/publication-authority.md +26 -0
- package/docs/release-candidate.md +19 -0
- package/docs/release-governance.md +5 -1
- package/package.json +1 -1
- package/packages/core/index.js +6 -0
- package/packages/core/publication-authority.js +281 -12
- package/scripts/assemble-publication-artifact-admission.mjs +10 -0
- package/scripts/assemble-self-publication-admission.mjs +10 -1
|
@@ -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":
|
|
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":
|
|
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":
|
|
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":
|
|
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": "
|
|
3432
|
-
"pageRegistryDigest": "
|
|
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-
|
|
5
|
-
"publishedAt": "2026-07-
|
|
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": "
|
|
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.
|
|
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-
|
|
5
|
-
"publishedAt": "2026-07-
|
|
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": "
|
|
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.
|
|
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:
|
|
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:
|
|
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:
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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.
|
|
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",
|
package/packages/core/index.js
CHANGED
|
@@ -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 {
|