@kungfu-tech/buildchain 2.12.7-alpha.1 → 2.12.7-alpha.10
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 +4 -0
- package/dist/site/buildchain-contract.json +48 -23
- package/dist/site/buildchain-site.json +16 -16
- package/dist/site/capability-registry.json +1 -1
- package/dist/site/controller-registry.json +23 -3
- package/dist/site/kfd-claims.json +60 -8
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +2 -2
- package/dist/site/node-api-registry.json +6 -6
- package/dist/site/page-registry.json +10 -10
- package/dist/site/public-surface-audit.json +69 -9
- package/dist/site/publication-authority-registry.json +25 -1
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/site-manifest.json +6 -6
- package/dist/site/workflow-registry.json +69 -6
- package/docs/publication-artifacts.md +25 -20
- package/docs/publication-authority.md +11 -2
- package/docs/release-governance.md +3 -1
- package/docs/shifu-gate-profiles.md +6 -0
- package/package.json +1 -1
- package/packages/core/buildchain-publication-authority.js +1 -0
- package/packages/core/controller-evidence.js +1 -1
- package/packages/core/index.js +7 -0
- package/packages/core/publication-artifact-candidate.js +128 -0
- package/packages/core/publication-authority.js +41 -2
- package/packages/core/publication-control-plane-audit.js +3 -1
- package/scripts/assemble-publication-artifact-admission.mjs +190 -0
- package/scripts/assemble-self-publication-admission.mjs +2 -1
- package/scripts/audit-publication-control-plane.mjs +5 -2
- package/scripts/check-inventory.mjs +5 -0
- package/scripts/publication-artifact-candidate.mjs +130 -0
- package/scripts/workflow-friction-report.mjs +13 -2
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"status": "passed",
|
|
5
5
|
"summary": {
|
|
6
6
|
"cliCommandCount": 79,
|
|
7
|
-
"workflowCount":
|
|
7
|
+
"workflowCount": 47,
|
|
8
8
|
"actionCount": 4,
|
|
9
9
|
"sitePageCount": 49,
|
|
10
10
|
"docCommandRefCount": 246,
|
|
@@ -609,14 +609,18 @@
|
|
|
609
609
|
"reusable": true,
|
|
610
610
|
"inputs": [
|
|
611
611
|
"admission-json",
|
|
612
|
+
"authority-workflow-path",
|
|
612
613
|
"auto-admission",
|
|
614
|
+
"auto-admission-kind",
|
|
613
615
|
"buildchain-ref",
|
|
614
616
|
"buildchain-repository",
|
|
615
617
|
"control-plane-audit-json",
|
|
616
618
|
"dry-run",
|
|
619
|
+
"evidence-controller-artifact",
|
|
617
620
|
"evidence-manifest-pattern",
|
|
618
621
|
"evidence-passport-artifact",
|
|
619
622
|
"evidence-payload-pattern",
|
|
623
|
+
"evidence-publication-artifact",
|
|
620
624
|
"evidence-repository",
|
|
621
625
|
"evidence-run-id",
|
|
622
626
|
"evidence-summary-artifact",
|
|
@@ -625,13 +629,15 @@
|
|
|
625
629
|
"package-name",
|
|
626
630
|
"product",
|
|
627
631
|
"publication-target",
|
|
632
|
+
"publication-version",
|
|
628
633
|
"publisher-workflow-path",
|
|
634
|
+
"required-status-check",
|
|
629
635
|
"runner-provenance-json",
|
|
630
636
|
"source-sha",
|
|
631
637
|
"target-ref",
|
|
632
638
|
"used-nonces-json"
|
|
633
639
|
],
|
|
634
|
-
"inputCount":
|
|
640
|
+
"inputCount": 28,
|
|
635
641
|
"secrets": [],
|
|
636
642
|
"secretCount": 0,
|
|
637
643
|
"outputs": [
|
|
@@ -1334,6 +1340,49 @@
|
|
|
1334
1340
|
"outputs": [],
|
|
1335
1341
|
"outputCount": 0
|
|
1336
1342
|
},
|
|
1343
|
+
{
|
|
1344
|
+
"id": "paper-release-sealed",
|
|
1345
|
+
"path": ".github/workflows/paper-release-sealed.yml",
|
|
1346
|
+
"reusable": true,
|
|
1347
|
+
"inputs": [
|
|
1348
|
+
"artifact-name",
|
|
1349
|
+
"artifact-paths",
|
|
1350
|
+
"artifact-retention-days",
|
|
1351
|
+
"branch-protection-bypass-apps",
|
|
1352
|
+
"branch-protection-bypass-teams",
|
|
1353
|
+
"branch-protection-bypass-users",
|
|
1354
|
+
"buildchain-contract-lock-path",
|
|
1355
|
+
"buildchain-ref",
|
|
1356
|
+
"buildchain-repository",
|
|
1357
|
+
"dry-run",
|
|
1358
|
+
"github-release",
|
|
1359
|
+
"github-release-notes",
|
|
1360
|
+
"github-release-title",
|
|
1361
|
+
"package-name",
|
|
1362
|
+
"publish-dist-tag",
|
|
1363
|
+
"publisher-workflow-path",
|
|
1364
|
+
"release-passport-impact-json",
|
|
1365
|
+
"release-passport-output-dir",
|
|
1366
|
+
"release-passport-product-name",
|
|
1367
|
+
"required-status-check",
|
|
1368
|
+
"target-ref",
|
|
1369
|
+
"target-sha",
|
|
1370
|
+
"toolchain-type",
|
|
1371
|
+
"verify-command",
|
|
1372
|
+
"working-directory"
|
|
1373
|
+
],
|
|
1374
|
+
"inputCount": 25,
|
|
1375
|
+
"secrets": [],
|
|
1376
|
+
"secretCount": 0,
|
|
1377
|
+
"outputs": [
|
|
1378
|
+
"github-release-url",
|
|
1379
|
+
"package-name",
|
|
1380
|
+
"package-version",
|
|
1381
|
+
"public-release-tag",
|
|
1382
|
+
"release-passport-path"
|
|
1383
|
+
],
|
|
1384
|
+
"outputCount": 5
|
|
1385
|
+
},
|
|
1337
1386
|
{
|
|
1338
1387
|
"id": "paper-release",
|
|
1339
1388
|
"path": ".github/workflows/paper-release.yml",
|
|
@@ -1491,7 +1540,11 @@
|
|
|
1491
1540
|
"buildchain-ref",
|
|
1492
1541
|
"buildchain-repository",
|
|
1493
1542
|
"node-version",
|
|
1543
|
+
"package-name",
|
|
1544
|
+
"prepare-paper-package",
|
|
1545
|
+
"publish-dist-tag",
|
|
1494
1546
|
"setup-node",
|
|
1547
|
+
"target-ref",
|
|
1495
1548
|
"toolchain-command",
|
|
1496
1549
|
"toolchain-digest",
|
|
1497
1550
|
"toolchain-image",
|
|
@@ -1499,7 +1552,7 @@
|
|
|
1499
1552
|
"verify-command",
|
|
1500
1553
|
"working-directory"
|
|
1501
1554
|
],
|
|
1502
|
-
"inputCount":
|
|
1555
|
+
"inputCount": 21,
|
|
1503
1556
|
"secrets": [],
|
|
1504
1557
|
"secretCount": 0,
|
|
1505
1558
|
"outputs": [
|
|
@@ -1510,13 +1563,17 @@
|
|
|
1510
1563
|
"controller-receipt-digest",
|
|
1511
1564
|
"controller-receipt-json",
|
|
1512
1565
|
"controller-receipt-status",
|
|
1566
|
+
"package-name",
|
|
1567
|
+
"package-version",
|
|
1513
1568
|
"publication-artifact-name",
|
|
1514
1569
|
"publication-manifest-json",
|
|
1515
1570
|
"publication-manifest-path",
|
|
1516
1571
|
"publication-passport-path",
|
|
1517
|
-
"publication-registry-path"
|
|
1572
|
+
"publication-registry-path",
|
|
1573
|
+
"publish-dist-tag",
|
|
1574
|
+
"runtime-sha"
|
|
1518
1575
|
],
|
|
1519
|
-
"outputCount":
|
|
1576
|
+
"outputCount": 16
|
|
1520
1577
|
},
|
|
1521
1578
|
{
|
|
1522
1579
|
"id": "release-candidate-promote",
|
|
@@ -1584,11 +1641,12 @@
|
|
|
1584
1641
|
"BUILDCHAIN_ISSUE_APP_ID",
|
|
1585
1642
|
"BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
|
|
1586
1643
|
"BUILDCHAIN_ISSUE_TOKEN",
|
|
1644
|
+
"BUILDCHAIN_PROMOTION_TOKEN",
|
|
1587
1645
|
"buildchain-issue-app-id",
|
|
1588
1646
|
"buildchain-issue-app-private-key",
|
|
1589
1647
|
"buildchain-issue-token"
|
|
1590
1648
|
],
|
|
1591
|
-
"secretCount":
|
|
1649
|
+
"secretCount": 7,
|
|
1592
1650
|
"outputs": [
|
|
1593
1651
|
"built-source-sha",
|
|
1594
1652
|
"controller-plan-artifact",
|
|
@@ -1753,9 +1811,11 @@
|
|
|
1753
1811
|
"branch-protection-bypass-teams",
|
|
1754
1812
|
"branch-protection-bypass-users",
|
|
1755
1813
|
"dry-run",
|
|
1814
|
+
"expected-publication-version",
|
|
1756
1815
|
"generated-ref-update-token",
|
|
1757
1816
|
"generated-status-check-token",
|
|
1758
1817
|
"github-release",
|
|
1818
|
+
"github-release-artifact-paths",
|
|
1759
1819
|
"github-release-notes",
|
|
1760
1820
|
"github-release-title",
|
|
1761
1821
|
"promote-only-release-candidate",
|
|
@@ -1801,7 +1861,7 @@
|
|
|
1801
1861
|
"transaction-state-path",
|
|
1802
1862
|
"verification-command"
|
|
1803
1863
|
],
|
|
1804
|
-
"inputCount":
|
|
1864
|
+
"inputCount": 54
|
|
1805
1865
|
},
|
|
1806
1866
|
{
|
|
1807
1867
|
"id": "report-buildchain-issue",
|
|
@@ -3327,8 +3387,8 @@
|
|
|
3327
3387
|
"workflowRegistryPath": "dist/site/workflow-registry.json",
|
|
3328
3388
|
"pageRegistryPath": "dist/site/page-registry.json",
|
|
3329
3389
|
"cliRegistryDigest": "a6daf4822365bf576425777230246046ebca67b3f8dcfea61fc7a61773776185",
|
|
3330
|
-
"workflowRegistryDigest": "
|
|
3331
|
-
"pageRegistryDigest": "
|
|
3390
|
+
"workflowRegistryDigest": "a61b85b07185e02e340c27d50f77a6710968db87dd42d1b1f4dd81260779a0ed",
|
|
3391
|
+
"pageRegistryDigest": "3a4779e3d85d0a175e33c7d2a8bee30ede3931cc721a7d8c422ab321f0dec723"
|
|
3332
3392
|
},
|
|
3333
3393
|
"comparison": {
|
|
3334
3394
|
"missingCliRegistry": [],
|
|
@@ -306,6 +306,22 @@
|
|
|
306
306
|
"runnerPolicy": "unqualified",
|
|
307
307
|
"notes": ""
|
|
308
308
|
},
|
|
309
|
+
{
|
|
310
|
+
"workflowPath": ".github/workflows/paper-release-sealed.yml",
|
|
311
|
+
"authorityClass": "product-publication",
|
|
312
|
+
"publicationCapable": true,
|
|
313
|
+
"capabilityIds": [
|
|
314
|
+
"github-release",
|
|
315
|
+
"npm-publish"
|
|
316
|
+
],
|
|
317
|
+
"credentialMode": "trusted-publishing",
|
|
318
|
+
"publisherWorkflowMode": "caller-bound",
|
|
319
|
+
"publisherWorkflowPath": ".github/workflows/paper-release-sealed.yml",
|
|
320
|
+
"environment": "none",
|
|
321
|
+
"environmentMode": "fixed",
|
|
322
|
+
"runnerPolicy": "qualified-measured",
|
|
323
|
+
"notes": ""
|
|
324
|
+
},
|
|
309
325
|
{
|
|
310
326
|
"workflowPath": ".github/workflows/paper-release.yml",
|
|
311
327
|
"authorityClass": "product-publication",
|
|
@@ -655,6 +671,14 @@
|
|
|
655
671
|
],
|
|
656
672
|
"classified": true
|
|
657
673
|
},
|
|
674
|
+
{
|
|
675
|
+
"path": ".github/workflows/paper-release-sealed.yml",
|
|
676
|
+
"signals": [
|
|
677
|
+
"write-permission",
|
|
678
|
+
"oidc"
|
|
679
|
+
],
|
|
680
|
+
"classified": true
|
|
681
|
+
},
|
|
658
682
|
{
|
|
659
683
|
"path": ".github/workflows/paper-release.yml",
|
|
660
684
|
"signals": [
|
|
@@ -750,5 +774,5 @@
|
|
|
750
774
|
"classified": false
|
|
751
775
|
}
|
|
752
776
|
],
|
|
753
|
-
"registryDigest": "
|
|
777
|
+
"registryDigest": "760215fb39e6c85890c925e924c538a766d78abd6319794c8799fb47c23dec3d"
|
|
754
778
|
}
|
|
@@ -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-15T02:23:03.502Z",
|
|
5
|
+
"publishedAt": "2026-07-15T02:23:03.502Z",
|
|
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": "5f17ef81ba524233331ffcd0c15b1fb800b3fa82",
|
|
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.12.7-alpha.
|
|
35
|
+
"version": "2.12.7-alpha.10",
|
|
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-15T02:23:03.502Z",
|
|
5
|
+
"publishedAt": "2026-07-15T02:23:03.502Z",
|
|
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": "5f17ef81ba524233331ffcd0c15b1fb800b3fa82",
|
|
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.12.7-alpha.
|
|
40
|
+
"version": "2.12.7-alpha.10",
|
|
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:06ba05f9d8a2685a0896334b6013a97c45b7d71163cf6898e5a6274baf7f0296"
|
|
89
89
|
},
|
|
90
90
|
{
|
|
91
91
|
"id": "release-candidate",
|
|
@@ -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:cce9f80add3c746fe28d8ebf5afb809348694741cb75d19154ed3057a9374c0d"
|
|
241
241
|
},
|
|
242
242
|
{
|
|
243
243
|
"id": "release-flow",
|
|
@@ -215,14 +215,18 @@
|
|
|
215
215
|
"reusable": true,
|
|
216
216
|
"inputs": [
|
|
217
217
|
"admission-json",
|
|
218
|
+
"authority-workflow-path",
|
|
218
219
|
"auto-admission",
|
|
220
|
+
"auto-admission-kind",
|
|
219
221
|
"buildchain-ref",
|
|
220
222
|
"buildchain-repository",
|
|
221
223
|
"control-plane-audit-json",
|
|
222
224
|
"dry-run",
|
|
225
|
+
"evidence-controller-artifact",
|
|
223
226
|
"evidence-manifest-pattern",
|
|
224
227
|
"evidence-passport-artifact",
|
|
225
228
|
"evidence-payload-pattern",
|
|
229
|
+
"evidence-publication-artifact",
|
|
226
230
|
"evidence-repository",
|
|
227
231
|
"evidence-run-id",
|
|
228
232
|
"evidence-summary-artifact",
|
|
@@ -231,13 +235,15 @@
|
|
|
231
235
|
"package-name",
|
|
232
236
|
"product",
|
|
233
237
|
"publication-target",
|
|
238
|
+
"publication-version",
|
|
234
239
|
"publisher-workflow-path",
|
|
240
|
+
"required-status-check",
|
|
235
241
|
"runner-provenance-json",
|
|
236
242
|
"source-sha",
|
|
237
243
|
"target-ref",
|
|
238
244
|
"used-nonces-json"
|
|
239
245
|
],
|
|
240
|
-
"inputCount":
|
|
246
|
+
"inputCount": 28,
|
|
241
247
|
"secrets": [],
|
|
242
248
|
"secretCount": 0,
|
|
243
249
|
"outputs": [
|
|
@@ -1024,6 +1030,52 @@
|
|
|
1024
1030
|
"capabilityGroup": "api-cli-reference",
|
|
1025
1031
|
"status": "active"
|
|
1026
1032
|
},
|
|
1033
|
+
{
|
|
1034
|
+
"id": "paper-release-sealed",
|
|
1035
|
+
"path": ".github/workflows/paper-release-sealed.yml",
|
|
1036
|
+
"reusable": true,
|
|
1037
|
+
"inputs": [
|
|
1038
|
+
"artifact-name",
|
|
1039
|
+
"artifact-paths",
|
|
1040
|
+
"artifact-retention-days",
|
|
1041
|
+
"branch-protection-bypass-apps",
|
|
1042
|
+
"branch-protection-bypass-teams",
|
|
1043
|
+
"branch-protection-bypass-users",
|
|
1044
|
+
"buildchain-contract-lock-path",
|
|
1045
|
+
"buildchain-ref",
|
|
1046
|
+
"buildchain-repository",
|
|
1047
|
+
"dry-run",
|
|
1048
|
+
"github-release",
|
|
1049
|
+
"github-release-notes",
|
|
1050
|
+
"github-release-title",
|
|
1051
|
+
"package-name",
|
|
1052
|
+
"publish-dist-tag",
|
|
1053
|
+
"publisher-workflow-path",
|
|
1054
|
+
"release-passport-impact-json",
|
|
1055
|
+
"release-passport-output-dir",
|
|
1056
|
+
"release-passport-product-name",
|
|
1057
|
+
"required-status-check",
|
|
1058
|
+
"target-ref",
|
|
1059
|
+
"target-sha",
|
|
1060
|
+
"toolchain-type",
|
|
1061
|
+
"verify-command",
|
|
1062
|
+
"working-directory"
|
|
1063
|
+
],
|
|
1064
|
+
"inputCount": 25,
|
|
1065
|
+
"secrets": [],
|
|
1066
|
+
"secretCount": 0,
|
|
1067
|
+
"outputs": [
|
|
1068
|
+
"github-release-url",
|
|
1069
|
+
"package-name",
|
|
1070
|
+
"package-version",
|
|
1071
|
+
"public-release-tag",
|
|
1072
|
+
"release-passport-path"
|
|
1073
|
+
],
|
|
1074
|
+
"outputCount": 5,
|
|
1075
|
+
"surface": "repository-workflow",
|
|
1076
|
+
"capabilityGroup": "api-cli-reference",
|
|
1077
|
+
"status": "active"
|
|
1078
|
+
},
|
|
1027
1079
|
{
|
|
1028
1080
|
"id": "paper-release",
|
|
1029
1081
|
"path": ".github/workflows/paper-release.yml",
|
|
@@ -1193,7 +1245,11 @@
|
|
|
1193
1245
|
"buildchain-ref",
|
|
1194
1246
|
"buildchain-repository",
|
|
1195
1247
|
"node-version",
|
|
1248
|
+
"package-name",
|
|
1249
|
+
"prepare-paper-package",
|
|
1250
|
+
"publish-dist-tag",
|
|
1196
1251
|
"setup-node",
|
|
1252
|
+
"target-ref",
|
|
1197
1253
|
"toolchain-command",
|
|
1198
1254
|
"toolchain-digest",
|
|
1199
1255
|
"toolchain-image",
|
|
@@ -1201,7 +1257,7 @@
|
|
|
1201
1257
|
"verify-command",
|
|
1202
1258
|
"working-directory"
|
|
1203
1259
|
],
|
|
1204
|
-
"inputCount":
|
|
1260
|
+
"inputCount": 21,
|
|
1205
1261
|
"secrets": [],
|
|
1206
1262
|
"secretCount": 0,
|
|
1207
1263
|
"outputs": [
|
|
@@ -1212,13 +1268,17 @@
|
|
|
1212
1268
|
"controller-receipt-digest",
|
|
1213
1269
|
"controller-receipt-json",
|
|
1214
1270
|
"controller-receipt-status",
|
|
1271
|
+
"package-name",
|
|
1272
|
+
"package-version",
|
|
1215
1273
|
"publication-artifact-name",
|
|
1216
1274
|
"publication-manifest-json",
|
|
1217
1275
|
"publication-manifest-path",
|
|
1218
1276
|
"publication-passport-path",
|
|
1219
|
-
"publication-registry-path"
|
|
1277
|
+
"publication-registry-path",
|
|
1278
|
+
"publish-dist-tag",
|
|
1279
|
+
"runtime-sha"
|
|
1220
1280
|
],
|
|
1221
|
-
"outputCount":
|
|
1281
|
+
"outputCount": 16,
|
|
1222
1282
|
"surface": "repository-workflow",
|
|
1223
1283
|
"capabilityGroup": "reusable-build",
|
|
1224
1284
|
"status": "active"
|
|
@@ -1289,11 +1349,12 @@
|
|
|
1289
1349
|
"BUILDCHAIN_ISSUE_APP_ID",
|
|
1290
1350
|
"BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
|
|
1291
1351
|
"BUILDCHAIN_ISSUE_TOKEN",
|
|
1352
|
+
"BUILDCHAIN_PROMOTION_TOKEN",
|
|
1292
1353
|
"buildchain-issue-app-id",
|
|
1293
1354
|
"buildchain-issue-app-private-key",
|
|
1294
1355
|
"buildchain-issue-token"
|
|
1295
1356
|
],
|
|
1296
|
-
"secretCount":
|
|
1357
|
+
"secretCount": 7,
|
|
1297
1358
|
"outputs": [
|
|
1298
1359
|
"built-source-sha",
|
|
1299
1360
|
"controller-plan-artifact",
|
|
@@ -1486,9 +1547,11 @@
|
|
|
1486
1547
|
"branch-protection-bypass-teams",
|
|
1487
1548
|
"branch-protection-bypass-users",
|
|
1488
1549
|
"dry-run",
|
|
1550
|
+
"expected-publication-version",
|
|
1489
1551
|
"generated-ref-update-token",
|
|
1490
1552
|
"generated-status-check-token",
|
|
1491
1553
|
"github-release",
|
|
1554
|
+
"github-release-artifact-paths",
|
|
1492
1555
|
"github-release-notes",
|
|
1493
1556
|
"github-release-title",
|
|
1494
1557
|
"promote-only-release-candidate",
|
|
@@ -1534,7 +1597,7 @@
|
|
|
1534
1597
|
"transaction-state-path",
|
|
1535
1598
|
"verification-command"
|
|
1536
1599
|
],
|
|
1537
|
-
"inputCount":
|
|
1600
|
+
"inputCount": 54,
|
|
1538
1601
|
"capabilityGroup": "release-passport-trust",
|
|
1539
1602
|
"status": "active"
|
|
1540
1603
|
},
|
|
@@ -182,40 +182,37 @@ on:
|
|
|
182
182
|
|
|
183
183
|
jobs:
|
|
184
184
|
paper-release:
|
|
185
|
-
uses: kungfu-systems/buildchain/.github/workflows/paper-release.yml@v2
|
|
185
|
+
uses: kungfu-systems/buildchain/.github/workflows/paper-release-sealed.yml@v2
|
|
186
186
|
permissions:
|
|
187
|
+
actions: read
|
|
187
188
|
checks: write
|
|
188
189
|
contents: write
|
|
189
190
|
id-token: write
|
|
190
191
|
issues: write
|
|
191
192
|
with:
|
|
192
193
|
buildchain-ref: ${{ inputs.buildchain-ref || '' }}
|
|
193
|
-
|
|
194
|
-
publication-runner-provenance-json: ${{ needs.authority.outputs.runner-provenance-json }}
|
|
195
|
-
publication-control-plane-audit-json: ${{ needs.authority.outputs.control-plane-audit-json }}
|
|
196
|
-
publication-expected-json: ${{ needs.authority.outputs.expected-json }}
|
|
194
|
+
publisher-workflow-path: .github/workflows/paper-release.yml
|
|
197
195
|
toolchain-type: config
|
|
198
196
|
verify-command: make check
|
|
197
|
+
artifact-paths: _build/paper-name.pdf
|
|
199
198
|
buildchain-contract-lock-path: .buildchain/contract-lock.json
|
|
200
199
|
```
|
|
201
200
|
|
|
202
|
-
The
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
201
|
+
The sealed preset does not accept a long-lived promotion token. It builds and
|
|
202
|
+
packages the paper in a read-only job, then a credential-free authority job
|
|
203
|
+
downloads that exact candidate, audits the external control plane, and seals a
|
|
204
|
+
capability over the source tree, Buildchain runtime, controller receipt, PDF,
|
|
205
|
+
and npm package bytes. Only the final job receives write and OIDC permissions;
|
|
206
|
+
it downloads the admitted candidate, recomputes the capability binding, and
|
|
207
|
+
publishes without executing consumer build commands. npm binds the OIDC identity
|
|
208
|
+
to the consumer workflow named by `publisher-workflow-path`.
|
|
210
209
|
|
|
211
210
|
The preset:
|
|
212
211
|
|
|
213
|
-
- resolves the
|
|
214
|
-
|
|
215
|
-
- verifies that the declared promotion authority can read the protected target
|
|
216
|
-
channel before starting the publication build;
|
|
212
|
+
- resolves the floating Buildchain runtime once and binds the exact SHA into the
|
|
213
|
+
publication candidate and authority capability;
|
|
217
214
|
- builds the PDF through the declared pinned LaTeX Docker toolchain or custom
|
|
218
|
-
command;
|
|
215
|
+
command in a read-only job;
|
|
219
216
|
- verifies the paper repository;
|
|
220
217
|
- writes the publication manifest, publication passport, optional archive
|
|
221
218
|
registry, and source bundle;
|
|
@@ -226,14 +223,22 @@ The preset:
|
|
|
226
223
|
- creates a `publish-gate/<alpha|release>/.../<version>` source lock for the
|
|
227
224
|
channel commit and requires `promote-buildchain-ref` to verify that lock
|
|
228
225
|
before any publish side effect;
|
|
229
|
-
-
|
|
226
|
+
- verifies the complete candidate again after authority and publishes the
|
|
227
|
+
package through npm Trusted Publishing without rebuilding it;
|
|
230
228
|
- writes Buildchain release/passport evidence; and
|
|
231
|
-
- creates or updates the exact-version GitHub Release by default
|
|
229
|
+
- creates or updates the exact-version GitHub Release by default, uploading
|
|
230
|
+
every file declared by `publication.primary_artifact` and
|
|
231
|
+
`publication.artifact_paths` alongside the release evidence.
|
|
232
232
|
|
|
233
233
|
Consumers can opt out of the GitHub Release with `github-release: false`, but
|
|
234
234
|
the default is on so downstream release propagation can observe
|
|
235
235
|
`release.published` without hand-written `gh release` steps.
|
|
236
236
|
|
|
237
|
+
Declared publication artifacts are resolved from the generated publication
|
|
238
|
+
manifest rather than repeated in consumer workflow YAML. Publication fails
|
|
239
|
+
before upload if a declared artifact is missing or if its basename would
|
|
240
|
+
collide with another GitHub Release asset.
|
|
241
|
+
|
|
237
242
|
For npm Trusted Publishing, register the consumer workflow file that calls this
|
|
238
243
|
preset, for example `.github/workflows/paper-release.yml`, against the declared
|
|
239
244
|
package in npm. The trusted publisher is the consumer repository and workflow
|
|
@@ -8,11 +8,11 @@ confidence: high
|
|
|
8
8
|
sensitivity: public
|
|
9
9
|
evidence_grade: B
|
|
10
10
|
review_state: unreviewed
|
|
11
|
-
last_reviewed: 2026-07-
|
|
11
|
+
last_reviewed: 2026-07-15
|
|
12
12
|
ai_provenance:
|
|
13
13
|
model_family: GPT-5
|
|
14
14
|
product: Codex
|
|
15
|
-
generated_at: 2026-07-
|
|
15
|
+
generated_at: 2026-07-15
|
|
16
16
|
limits: Live provider configuration must be re-audited; no credential values are represented.
|
|
17
17
|
---
|
|
18
18
|
|
|
@@ -121,6 +121,15 @@ repositories, unknown refs, non-exact source SHAs, and any caller other than
|
|
|
121
121
|
`.github/workflows/buildchain-ref-promotion.yml`. Manual apply and external
|
|
122
122
|
consumer workflows still require their own explicit admission inputs.
|
|
123
123
|
|
|
124
|
+
Before authority verification, the reusable promotion controller runs the same
|
|
125
|
+
release transaction selector in read-only mode. That plan supplies one exact
|
|
126
|
+
publication version and tag to the admission verifier, the publish-gate source
|
|
127
|
+
lock, and the real promotion action. The verifier rejects a capability for a
|
|
128
|
+
different version, and the promotion action rechecks the planned version before
|
|
129
|
+
any publish transaction side effect. Release-candidate fixture versions are
|
|
130
|
+
artifact evidence only; they never name Buildchain's own source-lock or
|
|
131
|
+
publication capability.
|
|
132
|
+
|
|
124
133
|
Evidence publication is a separate authority class and never grants product
|
|
125
134
|
publication.
|
|
126
135
|
|
|
@@ -627,7 +627,9 @@ passes `require-publish-source-lock`, `publish-source-ref`,
|
|
|
627
627
|
`promote-buildchain-ref`. Direct action callers must pass the same four inputs
|
|
628
628
|
from the reusable build outputs. Workflows that only collect passports or run
|
|
629
629
|
dry-run package checks do not move publish refs and are not publish-gate
|
|
630
|
-
publication models.
|
|
630
|
+
publication models. A dry-run of `release-candidate-promote.yml` computes and
|
|
631
|
+
reports the exact `publish-gate/*` source lock that a real promotion would use,
|
|
632
|
+
but does not read, create, or move that ref.
|
|
631
633
|
|
|
632
634
|
Semver GitHub Release publication is owned by `promote-buildchain-ref`, not by
|
|
633
635
|
consumer shell glue. Consumers normally use the `release-candidate-promote.yml`
|
|
@@ -78,6 +78,12 @@ Every matrix job checks out the exact source SHA planned by Buildchain, invokes
|
|
|
78
78
|
then invokes `shifu gate receipt validate`. Buildchain uploads the original
|
|
79
79
|
receipt and validation result even when the run fails.
|
|
80
80
|
|
|
81
|
+
Before invoking the project-owned command, the workflow adds the runner
|
|
82
|
+
account's `~/.local/bin` directory to `PATH` on Windows, Linux, and macOS. This
|
|
83
|
+
keeps user-scoped tools such as `uv` available to strict Shifu cache profiles
|
|
84
|
+
without assuming an administrator-managed system installation. The consumer or
|
|
85
|
+
runner owner remains responsible for provisioning the declared tools.
|
|
86
|
+
|
|
81
87
|
The fixed `Gate profile / aggregate` job fails closed for missing receipts,
|
|
82
88
|
invalid or stale Shifu validation, dirty or mismatched source SHA, registry or
|
|
83
89
|
plan drift, missing required results, required failures/skips, or gate action
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kungfu-tech/buildchain",
|
|
3
|
-
"version": "2.12.7-alpha.
|
|
3
|
+
"version": "2.12.7-alpha.10",
|
|
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",
|
|
@@ -27,6 +27,7 @@ const DESCRIPTORS = Object.freeze([
|
|
|
27
27
|
[".github/workflows/buildchain-stable-candidate-patrol.yml", "governance-write"],
|
|
28
28
|
[".github/workflows/dev-pr-auto-merge.yml", "governance-write"],
|
|
29
29
|
[".github/workflows/npm-publish.yml", "dry-run-only"],
|
|
30
|
+
[".github/workflows/paper-release-sealed.yml", "product-publication", true, ["npm-publish", "github-release"], "trusted-publishing", "none", "fixed", "caller-bound"],
|
|
30
31
|
[".github/workflows/paper-release.yml", "product-publication", true, ["npm-publish", "github-release"], "trusted-publishing", "none", "fixed", "caller-bound"],
|
|
31
32
|
[".github/workflows/patrol-daily.yml", "governance-write"],
|
|
32
33
|
[".github/workflows/patrol-monthly.yml", "governance-write"],
|
|
@@ -303,7 +303,7 @@ function normalizeEvidence(entries = []) {
|
|
|
303
303
|
function receiptStatus(plan, stages) {
|
|
304
304
|
if (stages.some((stage) => stage.status === "failed")) return "failed";
|
|
305
305
|
if (stages.length > 0 && stages.every((stage) => stage.status === "skipped")) return "skipped";
|
|
306
|
-
if (stages.some((stage) => stage.status === "cancelled" || stage.status === "missing")) return "partial";
|
|
306
|
+
if (stages.some((stage) => stage.status === "cancelled" || (stage.required && stage.status === "missing"))) return "partial";
|
|
307
307
|
const required = new Set(plan.expected.stages.filter((stage) => stage.required).map((stage) => stage.id));
|
|
308
308
|
if (stages.filter((stage) => required.has(stage.id)).every((stage) => stage.status === "passed")) return "passed";
|
|
309
309
|
return "partial";
|
package/packages/core/index.js
CHANGED
|
@@ -153,6 +153,13 @@ export {
|
|
|
153
153
|
verifyPublicationAdmission,
|
|
154
154
|
} from "./publication-authority.js";
|
|
155
155
|
|
|
156
|
+
export {
|
|
157
|
+
PUBLICATION_ARTIFACT_CANDIDATE_CONTRACT,
|
|
158
|
+
createPublicationArtifactCandidate,
|
|
159
|
+
publicationArtifactCandidateDigest,
|
|
160
|
+
resolvePublicationCandidateFile,
|
|
161
|
+
} from "./publication-artifact-candidate.js";
|
|
162
|
+
|
|
156
163
|
export {
|
|
157
164
|
buildchainPublicationAuthorityDescriptors,
|
|
158
165
|
createBuildchainPublicationAuthorityRegistry,
|