@kungfu-tech/buildchain 2.13.0-alpha.0 → 2.13.0-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/actions/promote-buildchain-ref/README.md +13 -0
- package/dist/site/buildchain-contract.json +32 -17
- package/dist/site/buildchain-site.json +28 -23
- 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 +5 -5
- package/dist/site/node-api-registry.json +3 -3
- package/dist/site/page-registry.json +19 -14
- package/dist/site/public-surface-audit.json +20 -7
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/site-manifest.json +9 -9
- package/dist/site/workflow-registry.json +18 -5
- package/docs/install.md +3 -1
- package/docs/publication-authority.md +26 -0
- package/docs/publish-transaction.md +1 -1
- package/docs/release-candidate.md +19 -0
- package/docs/release-governance.md +10 -1
- package/docs/stable-candidate-patrol.md +9 -0
- 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
- package/scripts/stable-candidate-qualification.mjs +12 -3
|
@@ -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": "5df8fd620c13f894a00ecc7159b7a53f518692d3d2ab3ad0b78687582efa406a"
|
|
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-16T02:29:49.950Z",
|
|
5
|
+
"publishedAt": "2026-07-16T02:29:49.950Z",
|
|
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": "87491685ffc7b6522176f8e7519f6c595e9bf5a7",
|
|
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.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-16T02:29:49.950Z",
|
|
5
|
+
"publishedAt": "2026-07-16T02:29:49.950Z",
|
|
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": "87491685ffc7b6522176f8e7519f6c595e9bf5a7",
|
|
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.2",
|
|
41
41
|
"versionSource": "package.json#version"
|
|
42
42
|
},
|
|
43
43
|
"entrypoint": "buildchain-site.json",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"path": "docs/install.md",
|
|
62
62
|
"plane": "use",
|
|
63
63
|
"exists": true,
|
|
64
|
-
"digest": "sha256:
|
|
64
|
+
"digest": "sha256:1879849c01f82b8820f2d9aeb09faed0931954cb7fe6939176a5eb69110cee59"
|
|
65
65
|
},
|
|
66
66
|
{
|
|
67
67
|
"id": "release-passport",
|
|
@@ -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",
|
|
@@ -229,7 +229,7 @@
|
|
|
229
229
|
"path": "docs/publish-transaction.md",
|
|
230
230
|
"plane": "verify",
|
|
231
231
|
"exists": true,
|
|
232
|
-
"digest": "sha256:
|
|
232
|
+
"digest": "sha256:9e77030dbd69e27c2402d855980f7560a465270cac1f3225c0470523ab4a8ddf"
|
|
233
233
|
},
|
|
234
234
|
{
|
|
235
235
|
"id": "release-governance",
|
|
@@ -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:cb6aafc3410c0e72da3d9c3ba330421005af27c3c67665a2f3356603f02da84a"
|
|
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
|
},
|
package/docs/install.md
CHANGED
|
@@ -51,7 +51,9 @@ npx buildchain version
|
|
|
51
51
|
npx buildchain doctor --json
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
The highest alpha minor publishes to the `alpha` npm dist-tag; older maintenance
|
|
55
|
+
minor alphas use `vX.Y-alpha` so they cannot roll the global alpha channel back.
|
|
56
|
+
Stable releases publish to
|
|
55
57
|
`latest`. Both are created by the protected Buildchain promotion transaction.
|
|
56
58
|
|
|
57
59
|
Stable consumers should pin the exact Buildchain version they have validated,
|
|
@@ -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:
|
|
@@ -210,7 +210,7 @@ Buildchain distinguishes two npm release modes:
|
|
|
210
210
|
|
|
211
211
|
| Mode | Use | Auth | npm operation |
|
|
212
212
|
| --- | --- | --- | --- |
|
|
213
|
-
| `publish-final-version` | normal alpha or stable publication | `trusted-publishing` | `npm publish --tag <alpha|latest>` |
|
|
213
|
+
| `publish-final-version` | normal alpha or stable publication | `trusted-publishing` | `npm publish --tag <alpha|vX.Y-alpha|latest>` |
|
|
214
214
|
| `promote-existing-version` | same-version alpha-to-latest recovery | `npm-token` | `npm dist-tag add <pkg>@<version> latest` |
|
|
215
215
|
|
|
216
216
|
The normal libnode path is `publish-final-version`: publish an alpha package set
|
|
@@ -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.
|
|
@@ -169,6 +169,11 @@ Buildchain then:
|
|
|
169
169
|
7. Moves `vX.Y-alpha` to the same generated alpha commit.
|
|
170
170
|
8. Moves `vX-alpha` only when `X.Y` is the highest minor in major `X` with a published alpha; older minor alpha work records a skip and cannot move the major channel backwards.
|
|
171
171
|
|
|
172
|
+
The npm channel follows the same ownership rule. The highest alpha minor publishes
|
|
173
|
+
with dist-tag `alpha`; maintenance alphas on an older minor publish with the
|
|
174
|
+
line-specific dist-tag `vX.Y-alpha` so they cannot roll the global `alpha`
|
|
175
|
+
channel backward. Exact prerelease versions remain installable directly.
|
|
176
|
+
|
|
172
177
|
This keeps the test channel self-describing. If a consumer checks out
|
|
173
178
|
`v2.0-alpha` or `v2-alpha`, the manifests and exact alpha tag agree. The major
|
|
174
179
|
alpha ref removes routine consumer edits when Buildchain opens a newer minor,
|
|
@@ -590,7 +595,11 @@ Buildchain's own promotion workflow reads `BUILDCHAIN_PROMOTION_BYPASS_APPS`,
|
|
|
590
595
|
`BUILDCHAIN_PROMOTION_BYPASS_TEAMS` repository variables so the declared bypass
|
|
591
596
|
identity can match the actual `BUILDCHAIN_PROMOTION_TOKEN` actor, but consumers
|
|
592
597
|
do not need to duplicate that actor manually when the token identity is
|
|
593
|
-
discoverable.
|
|
598
|
+
discoverable. Buildchain's release-line bootstrap applies the same declared
|
|
599
|
+
allowances when it creates new `dev`, `alpha`, and `release` branch protection,
|
|
600
|
+
and fails closed before changing protection when no promotion authority is
|
|
601
|
+
declared. This keeps a new minor line publishable without weakening its normal
|
|
602
|
+
human review gate.
|
|
594
603
|
|
|
595
604
|
## What This Guarantees
|
|
596
605
|
|
|
@@ -59,6 +59,15 @@ after the producer has observed the successful authoritative workflow run. The
|
|
|
59
59
|
stable gate still verifies the workflow identity, exact runtime SHA, target URL,
|
|
60
60
|
and allowed attestor before accepting that status.
|
|
61
61
|
|
|
62
|
+
When a candidate changes the outer reusable-workflow YAML itself, the stable
|
|
63
|
+
shell cannot exercise that change through a runtime override. A maintainer may
|
|
64
|
+
manually qualify it with `canary-ref` set to an exact 40-character commit in the
|
|
65
|
+
consumer repository whose canary workflow pins the candidate's exact Buildchain
|
|
66
|
+
SHA. The qualification producer still dispatches and observes the authoritative
|
|
67
|
+
consumer workflow before writing the normal candidate-bound status. Floating
|
|
68
|
+
consumer branches are rejected, and the automatic path continues to use the
|
|
69
|
+
consumer default branch.
|
|
70
|
+
|
|
62
71
|
## Repository policy
|
|
63
72
|
|
|
64
73
|
Declare the default once in `.buildchain/buildchain.toml`:
|
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.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",
|
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 {
|