@kungfu-tech/buildchain 3.0.0 → 3.0.1-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/README.md +3 -0
- package/dist/site/buildchain-contract.json +101 -26
- package/dist/site/buildchain-site.json +93 -17
- package/dist/site/capability-registry.json +6 -5
- package/dist/site/controller-registry.json +23 -3
- package/dist/site/kfd-claims.json +92 -11
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +17 -3
- package/dist/site/node-api-registry.json +19 -6
- package/dist/site/page-registry.json +77 -9
- package/dist/site/public-surface-audit.json +61 -9
- package/dist/site/publication-authority-registry.json +19 -1
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/release-provenance.json +1 -0
- package/dist/site/site-manifest.json +15 -7
- package/dist/site/workflow-registry.json +52 -5
- package/docs/MAP.md +1 -0
- package/docs/auditable-demo.md +155 -0
- package/docs/github-governance-authority.md +2 -2
- package/docs/release-activation-transaction.md +38 -0
- package/docs/versioning.md +1 -0
- package/package.json +2 -1
- package/packages/core/buildchain-config.js +14 -0
- package/packages/core/buildchain-contract.js +45 -0
- package/packages/core/buildchain-kfd-claims.js +1 -0
- package/packages/core/buildchain-publication-authority.js +1 -0
- package/packages/core/github-governance-authority.js +3 -3
- package/packages/core/index.js +14 -0
- package/packages/core/release-activation-transaction.js +421 -0
- package/scripts/auditable-demo.mjs +576 -0
- package/scripts/check-inventory.mjs +4 -0
- package/scripts/generate-site-bundle.mjs +5 -0
- package/scripts/installer-publication.mjs +15 -5
- package/scripts/publication-commit-evidence.mjs +298 -12
- package/scripts/resolve-artifact-coordinates.mjs +174 -0
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
"status": "passed",
|
|
5
5
|
"summary": {
|
|
6
6
|
"cliCommandCount": 87,
|
|
7
|
-
"workflowCount":
|
|
7
|
+
"workflowCount": 53,
|
|
8
8
|
"actionCount": 5,
|
|
9
|
-
"sitePageCount":
|
|
9
|
+
"sitePageCount": 56,
|
|
10
10
|
"docCommandRefCount": 276,
|
|
11
11
|
"failureCount": 0
|
|
12
12
|
},
|
|
@@ -449,6 +449,39 @@
|
|
|
449
449
|
}
|
|
450
450
|
],
|
|
451
451
|
"workflowInputs": [
|
|
452
|
+
{
|
|
453
|
+
"id": ".auditable-demo",
|
|
454
|
+
"path": ".github/workflows/.auditable-demo.yml",
|
|
455
|
+
"reusable": true,
|
|
456
|
+
"inputs": [
|
|
457
|
+
"adapter-path",
|
|
458
|
+
"artifact-retention-days",
|
|
459
|
+
"buildchain-repository",
|
|
460
|
+
"render-media",
|
|
461
|
+
"renderer-image",
|
|
462
|
+
"require-trusted-event",
|
|
463
|
+
"source-artifact-digest",
|
|
464
|
+
"source-artifact-name",
|
|
465
|
+
"source-ref"
|
|
466
|
+
],
|
|
467
|
+
"inputCount": 9,
|
|
468
|
+
"secrets": [],
|
|
469
|
+
"secretCount": 0,
|
|
470
|
+
"outputs": [
|
|
471
|
+
"gate-artifact-digest",
|
|
472
|
+
"gate-artifact-id",
|
|
473
|
+
"gate-artifact-name",
|
|
474
|
+
"gate-artifact-url",
|
|
475
|
+
"gate-root",
|
|
476
|
+
"media-artifact-digest",
|
|
477
|
+
"media-artifact-id",
|
|
478
|
+
"media-artifact-name",
|
|
479
|
+
"media-artifact-url",
|
|
480
|
+
"media-root",
|
|
481
|
+
"source-sha"
|
|
482
|
+
],
|
|
483
|
+
"outputCount": 11
|
|
484
|
+
},
|
|
452
485
|
{
|
|
453
486
|
"id": ".binary-release-assets",
|
|
454
487
|
"path": ".github/workflows/.binary-release-assets.yml",
|
|
@@ -560,6 +593,7 @@
|
|
|
560
593
|
],
|
|
561
594
|
"secretCount": 8,
|
|
562
595
|
"outputs": [
|
|
596
|
+
"artifact-coordinates-json",
|
|
563
597
|
"build-diagnostics-summary-artifact",
|
|
564
598
|
"build-diagnostics-summary-json",
|
|
565
599
|
"build-summary-artifact",
|
|
@@ -602,7 +636,7 @@
|
|
|
602
636
|
"runner-preset",
|
|
603
637
|
"trusted-event"
|
|
604
638
|
],
|
|
605
|
-
"outputCount":
|
|
639
|
+
"outputCount": 42
|
|
606
640
|
},
|
|
607
641
|
{
|
|
608
642
|
"id": ".bump-minor-version",
|
|
@@ -778,10 +812,14 @@
|
|
|
778
812
|
"publish-required-artifacts-json",
|
|
779
813
|
"publish-target",
|
|
780
814
|
"publish-transaction-override",
|
|
815
|
+
"release-activation-command",
|
|
816
|
+
"release-activation-receipt-set-path",
|
|
781
817
|
"release-candidate-workflow-file",
|
|
782
818
|
"release-candidate-workflow-name",
|
|
783
819
|
"release-passport",
|
|
784
820
|
"release-passport-buildchain-self-kfd",
|
|
821
|
+
"release-passport-evidence-command",
|
|
822
|
+
"release-passport-evidence-path",
|
|
785
823
|
"release-passport-impact-json",
|
|
786
824
|
"release-passport-invariant-passport-command",
|
|
787
825
|
"release-passport-invariant-passport-jsons",
|
|
@@ -801,7 +839,7 @@
|
|
|
801
839
|
"target-sha",
|
|
802
840
|
"trusted-publishing"
|
|
803
841
|
],
|
|
804
|
-
"inputCount":
|
|
842
|
+
"inputCount": 83,
|
|
805
843
|
"secrets": [
|
|
806
844
|
"BUILDCHAIN_ISSUE_APP_ID",
|
|
807
845
|
"BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
|
|
@@ -1100,6 +1138,7 @@
|
|
|
1100
1138
|
"production-release-on-main",
|
|
1101
1139
|
"production-release-pr-mode",
|
|
1102
1140
|
"production-release-pr-token",
|
|
1141
|
+
"production-source-sha",
|
|
1103
1142
|
"publication-admission-json",
|
|
1104
1143
|
"publication-control-plane-audit-json",
|
|
1105
1144
|
"publication-expected-json",
|
|
@@ -1113,7 +1152,7 @@
|
|
|
1113
1152
|
"verify-command",
|
|
1114
1153
|
"working-directory"
|
|
1115
1154
|
],
|
|
1116
|
-
"inputCount":
|
|
1155
|
+
"inputCount": 41,
|
|
1117
1156
|
"secrets": [
|
|
1118
1157
|
"production-release-app-private-key"
|
|
1119
1158
|
],
|
|
@@ -1304,6 +1343,7 @@
|
|
|
1304
1343
|
],
|
|
1305
1344
|
"secretCount": 8,
|
|
1306
1345
|
"outputs": [
|
|
1346
|
+
"artifact-coordinates-json",
|
|
1307
1347
|
"build-diagnostics-summary-artifact",
|
|
1308
1348
|
"build-diagnostics-summary-json",
|
|
1309
1349
|
"build-summary-artifact",
|
|
@@ -1349,7 +1389,7 @@
|
|
|
1349
1389
|
"runner-preset",
|
|
1350
1390
|
"trusted-event"
|
|
1351
1391
|
],
|
|
1352
|
-
"outputCount":
|
|
1392
|
+
"outputCount": 45
|
|
1353
1393
|
},
|
|
1354
1394
|
{
|
|
1355
1395
|
"id": "buildchain-alpha-self-dogfood",
|
|
@@ -1889,10 +1929,14 @@
|
|
|
1889
1929
|
"publish-required-artifacts-json",
|
|
1890
1930
|
"publish-target",
|
|
1891
1931
|
"publish-transaction-override",
|
|
1932
|
+
"release-activation-command",
|
|
1933
|
+
"release-activation-receipt-set-path",
|
|
1892
1934
|
"release-candidate-workflow-file",
|
|
1893
1935
|
"release-candidate-workflow-name",
|
|
1894
1936
|
"release-passport",
|
|
1895
1937
|
"release-passport-buildchain-self-kfd",
|
|
1938
|
+
"release-passport-evidence-command",
|
|
1939
|
+
"release-passport-evidence-path",
|
|
1896
1940
|
"release-passport-impact-json",
|
|
1897
1941
|
"release-passport-invariant-passport-command",
|
|
1898
1942
|
"release-passport-invariant-passport-jsons",
|
|
@@ -1912,7 +1956,7 @@
|
|
|
1912
1956
|
"target-sha",
|
|
1913
1957
|
"trusted-publishing"
|
|
1914
1958
|
],
|
|
1915
|
-
"inputCount":
|
|
1959
|
+
"inputCount": 75,
|
|
1916
1960
|
"secrets": [
|
|
1917
1961
|
"BUILDCHAIN_ISSUE_APP_ID",
|
|
1918
1962
|
"BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
|
|
@@ -2383,6 +2427,10 @@
|
|
|
2383
2427
|
"id": "manual:artifact-verification-envelope",
|
|
2384
2428
|
"category": "manual"
|
|
2385
2429
|
},
|
|
2430
|
+
{
|
|
2431
|
+
"id": "manual:auditable-demo",
|
|
2432
|
+
"category": "manual"
|
|
2433
|
+
},
|
|
2386
2434
|
{
|
|
2387
2435
|
"id": "manual:binary-distribution",
|
|
2388
2436
|
"category": "manual"
|
|
@@ -2467,6 +2515,10 @@
|
|
|
2467
2515
|
"id": "manual:readme-badges",
|
|
2468
2516
|
"category": "manual"
|
|
2469
2517
|
},
|
|
2518
|
+
{
|
|
2519
|
+
"id": "manual:release-activation-transaction",
|
|
2520
|
+
"category": "manual"
|
|
2521
|
+
},
|
|
2470
2522
|
{
|
|
2471
2523
|
"id": "manual:release-candidate",
|
|
2472
2524
|
"category": "manual"
|
|
@@ -3912,8 +3964,8 @@
|
|
|
3912
3964
|
"workflowRegistryPath": "dist/site/workflow-registry.json",
|
|
3913
3965
|
"pageRegistryPath": "dist/site/page-registry.json",
|
|
3914
3966
|
"cliRegistryDigest": "5ba7fd93a13993b05767b6f02d0626a7347f25c3d7cd4589ed4f70028c1f1bd1",
|
|
3915
|
-
"workflowRegistryDigest": "
|
|
3916
|
-
"pageRegistryDigest": "
|
|
3967
|
+
"workflowRegistryDigest": "4a627dcf07131d07095d5e6bf0a3373e55c62cf325b3f81bb156c43d31367d62",
|
|
3968
|
+
"pageRegistryDigest": "835b03c155e87749a3d43a9e9af284601b863698592e401c6d183625cbf6ef63"
|
|
3917
3969
|
},
|
|
3918
3970
|
"comparison": {
|
|
3919
3971
|
"missingCliRegistry": [],
|
|
@@ -3,6 +3,19 @@
|
|
|
3
3
|
"contract": "kungfu-buildchain-publication-authority-registry",
|
|
4
4
|
"defaultDecision": "deny",
|
|
5
5
|
"entries": [
|
|
6
|
+
{
|
|
7
|
+
"workflowPath": ".github/workflows/.auditable-demo.yml",
|
|
8
|
+
"authorityClass": "non-publication-oidc",
|
|
9
|
+
"publicationCapable": false,
|
|
10
|
+
"capabilityIds": [],
|
|
11
|
+
"credentialMode": "none",
|
|
12
|
+
"publisherWorkflowMode": "fixed",
|
|
13
|
+
"publisherWorkflowPath": ".github/workflows/.auditable-demo.yml",
|
|
14
|
+
"environment": "",
|
|
15
|
+
"environmentMode": "fixed",
|
|
16
|
+
"runnerPolicy": "unqualified",
|
|
17
|
+
"notes": ""
|
|
18
|
+
},
|
|
6
19
|
{
|
|
7
20
|
"workflowPath": ".github/workflows/.binary-release-assets.yml",
|
|
8
21
|
"authorityClass": "product-publication",
|
|
@@ -519,6 +532,11 @@
|
|
|
519
532
|
}
|
|
520
533
|
],
|
|
521
534
|
"workflowFacts": [
|
|
535
|
+
{
|
|
536
|
+
"path": ".github/workflows/.auditable-demo.yml",
|
|
537
|
+
"signals": [],
|
|
538
|
+
"classified": true
|
|
539
|
+
},
|
|
522
540
|
{
|
|
523
541
|
"path": ".github/workflows/.binary-release-assets.yml",
|
|
524
542
|
"signals": [
|
|
@@ -870,5 +888,5 @@
|
|
|
870
888
|
"classified": false
|
|
871
889
|
}
|
|
872
890
|
],
|
|
873
|
-
"registryDigest": "
|
|
891
|
+
"registryDigest": "cb18522c1957f0cb2e03c525847602a6163d3b276c106a8bce5b8028d8b9a011"
|
|
874
892
|
}
|
|
@@ -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-26T00:14:36.577Z",
|
|
5
|
+
"publishedAt": "2026-07-26T00:14:36.577Z",
|
|
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": "a0cda81b67a212b3555e10d041c8d39b4c1b8dce",
|
|
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": "3.0.
|
|
35
|
+
"version": "3.0.1-alpha.1",
|
|
36
36
|
"versionSource": "package.json#version"
|
|
37
37
|
},
|
|
38
38
|
"sourceKind": "package-site-bundle",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"./release-passport": "./packages/core/release-passport.js",
|
|
42
42
|
"./release-passport-contract": "./packages/core/release-passport-contract.js",
|
|
43
43
|
"./release-propagation": "./packages/core/release-propagation.js",
|
|
44
|
+
"./release-activation-transaction": "./packages/core/release-activation-transaction.js",
|
|
44
45
|
"./surface-manifest": "./packages/core/surface-manifest.js",
|
|
45
46
|
"./buildchain-kfd-claims": "./packages/core/buildchain-kfd-claims.js",
|
|
46
47
|
"./site/buildchain-site.json": "./dist/site/buildchain-site.json",
|
|
@@ -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-26T00:14:36.577Z",
|
|
5
|
+
"publishedAt": "2026-07-26T00:14:36.577Z",
|
|
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": "a0cda81b67a212b3555e10d041c8d39b4c1b8dce",
|
|
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": "3.0.
|
|
40
|
+
"version": "3.0.1-alpha.1",
|
|
41
41
|
"versionSource": "package.json#version"
|
|
42
42
|
},
|
|
43
43
|
"entrypoint": "buildchain-site.json",
|
|
@@ -53,7 +53,15 @@
|
|
|
53
53
|
"path": "docs/MAP.md",
|
|
54
54
|
"plane": "use",
|
|
55
55
|
"exists": true,
|
|
56
|
-
"digest": "sha256:
|
|
56
|
+
"digest": "sha256:11ccb0a90cc0583a1a67da36609a8b07207f259815ac9ac0926c2ec8d7a8764a"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "auditable-demo",
|
|
60
|
+
"title": "Auditable demo artifact pipeline",
|
|
61
|
+
"path": "docs/auditable-demo.md",
|
|
62
|
+
"plane": "verify",
|
|
63
|
+
"exists": true,
|
|
64
|
+
"digest": "sha256:cff9786d4de098c84ea7e494b523627d6431909f15c82940e2193dbda1ef10e9"
|
|
57
65
|
},
|
|
58
66
|
{
|
|
59
67
|
"id": "install",
|
|
@@ -93,7 +101,7 @@
|
|
|
93
101
|
"path": "docs/github-governance-authority.md",
|
|
94
102
|
"plane": "verify",
|
|
95
103
|
"exists": true,
|
|
96
|
-
"digest": "sha256:
|
|
104
|
+
"digest": "sha256:b8c3d9ad53c2509bbd95804ccc31f6aa89989c3aadf3a2b75d9c73aef168b7e8"
|
|
97
105
|
},
|
|
98
106
|
{
|
|
99
107
|
"id": "release-candidate",
|
|
@@ -277,7 +285,7 @@
|
|
|
277
285
|
"path": "docs/versioning.md",
|
|
278
286
|
"plane": "why",
|
|
279
287
|
"exists": true,
|
|
280
|
-
"digest": "sha256:
|
|
288
|
+
"digest": "sha256:f3665f2f173bdcb287cf8aa509035164e818b20088849f4a2bce098951c84ea3"
|
|
281
289
|
},
|
|
282
290
|
{
|
|
283
291
|
"id": "web-surface-deployments",
|
|
@@ -3,6 +3,42 @@
|
|
|
3
3
|
"contract": "kungfu-buildchain-workflow-registry",
|
|
4
4
|
"workflowSource": ".github/workflows reverse input enumeration",
|
|
5
5
|
"workflows": [
|
|
6
|
+
{
|
|
7
|
+
"id": ".auditable-demo",
|
|
8
|
+
"path": ".github/workflows/.auditable-demo.yml",
|
|
9
|
+
"reusable": true,
|
|
10
|
+
"inputs": [
|
|
11
|
+
"adapter-path",
|
|
12
|
+
"artifact-retention-days",
|
|
13
|
+
"buildchain-repository",
|
|
14
|
+
"render-media",
|
|
15
|
+
"renderer-image",
|
|
16
|
+
"require-trusted-event",
|
|
17
|
+
"source-artifact-digest",
|
|
18
|
+
"source-artifact-name",
|
|
19
|
+
"source-ref"
|
|
20
|
+
],
|
|
21
|
+
"inputCount": 9,
|
|
22
|
+
"secrets": [],
|
|
23
|
+
"secretCount": 0,
|
|
24
|
+
"outputs": [
|
|
25
|
+
"gate-artifact-digest",
|
|
26
|
+
"gate-artifact-id",
|
|
27
|
+
"gate-artifact-name",
|
|
28
|
+
"gate-artifact-url",
|
|
29
|
+
"gate-root",
|
|
30
|
+
"media-artifact-digest",
|
|
31
|
+
"media-artifact-id",
|
|
32
|
+
"media-artifact-name",
|
|
33
|
+
"media-artifact-url",
|
|
34
|
+
"media-root",
|
|
35
|
+
"source-sha"
|
|
36
|
+
],
|
|
37
|
+
"outputCount": 11,
|
|
38
|
+
"surface": "auditable-demo",
|
|
39
|
+
"capabilityGroup": "api-cli-reference",
|
|
40
|
+
"status": "preview"
|
|
41
|
+
},
|
|
6
42
|
{
|
|
7
43
|
"id": ".binary-release-assets",
|
|
8
44
|
"path": ".github/workflows/.binary-release-assets.yml",
|
|
@@ -117,6 +153,7 @@
|
|
|
117
153
|
],
|
|
118
154
|
"secretCount": 8,
|
|
119
155
|
"outputs": [
|
|
156
|
+
"artifact-coordinates-json",
|
|
120
157
|
"build-diagnostics-summary-artifact",
|
|
121
158
|
"build-diagnostics-summary-json",
|
|
122
159
|
"build-summary-artifact",
|
|
@@ -159,7 +196,7 @@
|
|
|
159
196
|
"runner-preset",
|
|
160
197
|
"trusted-event"
|
|
161
198
|
],
|
|
162
|
-
"outputCount":
|
|
199
|
+
"outputCount": 42,
|
|
163
200
|
"surface": "reusable-build",
|
|
164
201
|
"capabilityGroup": "api-cli-reference",
|
|
165
202
|
"status": "active"
|
|
@@ -347,10 +384,14 @@
|
|
|
347
384
|
"publish-required-artifacts-json",
|
|
348
385
|
"publish-target",
|
|
349
386
|
"publish-transaction-override",
|
|
387
|
+
"release-activation-command",
|
|
388
|
+
"release-activation-receipt-set-path",
|
|
350
389
|
"release-candidate-workflow-file",
|
|
351
390
|
"release-candidate-workflow-name",
|
|
352
391
|
"release-passport",
|
|
353
392
|
"release-passport-buildchain-self-kfd",
|
|
393
|
+
"release-passport-evidence-command",
|
|
394
|
+
"release-passport-evidence-path",
|
|
354
395
|
"release-passport-impact-json",
|
|
355
396
|
"release-passport-invariant-passport-command",
|
|
356
397
|
"release-passport-invariant-passport-jsons",
|
|
@@ -370,7 +411,7 @@
|
|
|
370
411
|
"target-sha",
|
|
371
412
|
"trusted-publishing"
|
|
372
413
|
],
|
|
373
|
-
"inputCount":
|
|
414
|
+
"inputCount": 83,
|
|
374
415
|
"secrets": [
|
|
375
416
|
"BUILDCHAIN_ISSUE_APP_ID",
|
|
376
417
|
"BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
|
|
@@ -696,6 +737,7 @@
|
|
|
696
737
|
"production-release-on-main",
|
|
697
738
|
"production-release-pr-mode",
|
|
698
739
|
"production-release-pr-token",
|
|
740
|
+
"production-source-sha",
|
|
699
741
|
"publication-admission-json",
|
|
700
742
|
"publication-control-plane-audit-json",
|
|
701
743
|
"publication-expected-json",
|
|
@@ -709,7 +751,7 @@
|
|
|
709
751
|
"verify-command",
|
|
710
752
|
"working-directory"
|
|
711
753
|
],
|
|
712
|
-
"inputCount":
|
|
754
|
+
"inputCount": 41,
|
|
713
755
|
"secrets": [
|
|
714
756
|
"production-release-app-private-key"
|
|
715
757
|
],
|
|
@@ -918,6 +960,7 @@
|
|
|
918
960
|
],
|
|
919
961
|
"secretCount": 8,
|
|
920
962
|
"outputs": [
|
|
963
|
+
"artifact-coordinates-json",
|
|
921
964
|
"build-diagnostics-summary-artifact",
|
|
922
965
|
"build-diagnostics-summary-json",
|
|
923
966
|
"build-summary-artifact",
|
|
@@ -963,7 +1006,7 @@
|
|
|
963
1006
|
"runner-preset",
|
|
964
1007
|
"trusted-event"
|
|
965
1008
|
],
|
|
966
|
-
"outputCount":
|
|
1009
|
+
"outputCount": 45,
|
|
967
1010
|
"surface": "channel-build-router",
|
|
968
1011
|
"capabilityGroup": "reusable-build",
|
|
969
1012
|
"status": "active"
|
|
@@ -1569,10 +1612,14 @@
|
|
|
1569
1612
|
"publish-required-artifacts-json",
|
|
1570
1613
|
"publish-target",
|
|
1571
1614
|
"publish-transaction-override",
|
|
1615
|
+
"release-activation-command",
|
|
1616
|
+
"release-activation-receipt-set-path",
|
|
1572
1617
|
"release-candidate-workflow-file",
|
|
1573
1618
|
"release-candidate-workflow-name",
|
|
1574
1619
|
"release-passport",
|
|
1575
1620
|
"release-passport-buildchain-self-kfd",
|
|
1621
|
+
"release-passport-evidence-command",
|
|
1622
|
+
"release-passport-evidence-path",
|
|
1576
1623
|
"release-passport-impact-json",
|
|
1577
1624
|
"release-passport-invariant-passport-command",
|
|
1578
1625
|
"release-passport-invariant-passport-jsons",
|
|
@@ -1592,7 +1639,7 @@
|
|
|
1592
1639
|
"target-sha",
|
|
1593
1640
|
"trusted-publishing"
|
|
1594
1641
|
],
|
|
1595
|
-
"inputCount":
|
|
1642
|
+
"inputCount": 75,
|
|
1596
1643
|
"secrets": [
|
|
1597
1644
|
"BUILDCHAIN_ISSUE_APP_ID",
|
|
1598
1645
|
"BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
|
package/docs/MAP.md
CHANGED
|
@@ -105,6 +105,7 @@ replace them.
|
|
|
105
105
|
| What package-owned facts should buildchain.libkungfu.dev render? | [`site-bundle-contract.md`](site-bundle-contract.md) | use | stable |
|
|
106
106
|
| How do I call the reusable build workflow? | [`reusable-build-surface.md`](reusable-build-surface.md) | use | stable |
|
|
107
107
|
| How does Buildchain schedule and aggregate a project-owned Shifu Gate profile? | [`shifu-gate-profiles.md`](shifu-gate-profiles.md) | use/verify | draft |
|
|
108
|
+
| How do exact build artifacts become qualified, transcript-traceable demo media? | [`auditable-demo.md`](auditable-demo.md) | use/verify | draft |
|
|
108
109
|
| How do I use one build job that follows alpha during development and stable for releases? | [`reusable-build-surface.md`](reusable-build-surface.md#automatic-channel-router) | use | preview |
|
|
109
110
|
| How do self-hosted runners relay large artifacts through S3 before GitHub artifacts? | [`reusable-build-surface.md`](reusable-build-surface.md#artifact-transfer-relay) | use | stable |
|
|
110
111
|
| How do self-hosted runners reuse local Git checkout caches without weakening source locks? | [`reusable-build-surface.md`](reusable-build-surface.md#locked-source-checkout-cache) | use | stable |
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: draft
|
|
3
|
+
period: 2026-07
|
|
4
|
+
theme: auditable-demo-pipeline
|
|
5
|
+
doc_type: technical-contract
|
|
6
|
+
source_level: local-files
|
|
7
|
+
confidence: high
|
|
8
|
+
sensitivity: public
|
|
9
|
+
evidence_grade: A
|
|
10
|
+
review_state: self-reviewed
|
|
11
|
+
last_reviewed: 2026-07-25
|
|
12
|
+
ai_provenance:
|
|
13
|
+
model_family: GPT-5
|
|
14
|
+
product: Codex
|
|
15
|
+
generated_at: 2026-07-25
|
|
16
|
+
invisible_context_boundary: No hidden model build, parameter count, or private corpus is asserted.
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# Auditable Demo Pipeline
|
|
20
|
+
|
|
21
|
+
Buildchain's auditable demo workflow turns an exact GitHub build artifact into
|
|
22
|
+
two distinct evidence products:
|
|
23
|
+
|
|
24
|
+
1. a required qualified Gate bundle; and
|
|
25
|
+
2. an optional rendered media bundle that can exist only after that exact Gate
|
|
26
|
+
bundle passes.
|
|
27
|
+
|
|
28
|
+
The public reusable workflow is
|
|
29
|
+
`.github/workflows/.auditable-demo.yml`. It is consumer-neutral: Buildchain
|
|
30
|
+
does not know how a Kungfu, library, service, or application artifact should be
|
|
31
|
+
interpreted. The consumer owns a small checked-in executable adapter.
|
|
32
|
+
|
|
33
|
+
## Authority Boundary
|
|
34
|
+
|
|
35
|
+
The retained build output is authoritative. The adapter reads that exact
|
|
36
|
+
artifact and projects three files:
|
|
37
|
+
|
|
38
|
+
```text
|
|
39
|
+
complete-transcript.txt
|
|
40
|
+
public-projection.json
|
|
41
|
+
scene.json
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The adapter must not rebuild or rerun the product. It receives:
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
--artifact-root PATH
|
|
48
|
+
--output PATH
|
|
49
|
+
--source-coordinate PATH
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
`--source-coordinate` identifies the caller repository, run, artifact id,
|
|
53
|
+
artifact name, upload digest, expiry, and exact source SHA. The workflow finds
|
|
54
|
+
exactly one live artifact with the requested name in the current caller run and
|
|
55
|
+
rejects a digest mismatch before invoking the adapter. Callers must pass the
|
|
56
|
+
digest emitted by their own `upload-artifact` step; a name resolved later from
|
|
57
|
+
the Actions API is discovery evidence, not a substitute for that producer
|
|
58
|
+
output.
|
|
59
|
+
|
|
60
|
+
Buildchain's reusable build workflow exposes `artifact-coordinates-json` after
|
|
61
|
+
all resolved platform uploads complete. That producer-owned output binds every
|
|
62
|
+
platform id to its same-run artifact id, name, upload digest, URL, and expiry,
|
|
63
|
+
so a consumer that delegates its build to Buildchain can pass an exact
|
|
64
|
+
coordinate without rediscovering authority in a downstream job. The build
|
|
65
|
+
aggregate fails closed if any declared platform lacks one live, digest-bearing
|
|
66
|
+
artifact coordinate. The compact coordinate set is sorted by platform id so
|
|
67
|
+
downstream machine consumers do not depend on matrix completion order.
|
|
68
|
+
|
|
69
|
+
The adapter runs with a disposable Home/XDG/npm prefix, a minimal environment,
|
|
70
|
+
and no GitHub, npm, or cloud credential injection. It must be a regular,
|
|
71
|
+
non-symlink, executable file inside the exact checked-out consumer source.
|
|
72
|
+
|
|
73
|
+
## Required Gate
|
|
74
|
+
|
|
75
|
+
The Gate:
|
|
76
|
+
|
|
77
|
+
- checks out the exact consumer source and exact called-workflow SHA;
|
|
78
|
+
- resolves and downloads one exact same-run GitHub Artifact;
|
|
79
|
+
- invokes the checked-in adapter by argv, never as an evaluated shell string;
|
|
80
|
+
- rejects undeclared adapter outputs, symlinks, invalid UTF-8, invalid scene or
|
|
81
|
+
projection schemas, out-of-range transcript references, and oversized input;
|
|
82
|
+
- derives a one-second compatibility scene from the consumer projection;
|
|
83
|
+
- anonymously pulls an immutable `image@sha256:digest` renderer;
|
|
84
|
+
- runs it as non-root with `--network none`, a read-only root filesystem, and a
|
|
85
|
+
bounded tmpfs;
|
|
86
|
+
- verifies the renderer manifest, media probe, exact input roots, exact output
|
|
87
|
+
member set, and complete checksums;
|
|
88
|
+
- uploads a content-addressed qualified bundle plus an independent GitHub
|
|
89
|
+
Artifact id, URL, archive digest, and expiry-bearing source coordinate.
|
|
90
|
+
|
|
91
|
+
The Gate bundle contains the complete consumer transcript/projection/scene,
|
|
92
|
+
source artifact coordinate, adapter identity, bounded renderer evidence, a
|
|
93
|
+
passed gate receipt, and checksums covering every member exactly once.
|
|
94
|
+
|
|
95
|
+
## Selective Render
|
|
96
|
+
|
|
97
|
+
`render-media: true` enables the second job. It downloads the just-uploaded Gate
|
|
98
|
+
bundle by its content-addressed name, recomputes the Gate member root, verifies
|
|
99
|
+
the exact source SHA and renderer digest, and only then renders the complete
|
|
100
|
+
qualified scene.
|
|
101
|
+
|
|
102
|
+
The media bundle contains MP4, WebM, GIF, poster, probe, renderer manifest,
|
|
103
|
+
renderer checksums, passed Gate receipt, media receipt, and distribution
|
|
104
|
+
checksums. `render-media: false` does not weaken or skip the Gate.
|
|
105
|
+
|
|
106
|
+
## Consumer Example
|
|
107
|
+
|
|
108
|
+
The build job must expose both the exact artifact name and the digest returned
|
|
109
|
+
by `upload-artifact`:
|
|
110
|
+
|
|
111
|
+
```yaml
|
|
112
|
+
jobs:
|
|
113
|
+
build:
|
|
114
|
+
runs-on: ubuntu-24.04
|
|
115
|
+
outputs:
|
|
116
|
+
artifact-name: product-linux-${{ github.sha }}
|
|
117
|
+
artifact-digest: ${{ steps.upload.outputs.artifact-digest }}
|
|
118
|
+
steps:
|
|
119
|
+
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09
|
|
120
|
+
- run: ./scripts/build-product
|
|
121
|
+
- id: upload
|
|
122
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
|
|
123
|
+
with:
|
|
124
|
+
name: product-linux-${{ github.sha }}
|
|
125
|
+
path: dist
|
|
126
|
+
if-no-files-found: error
|
|
127
|
+
retention-days: 14
|
|
128
|
+
compression-level: 0
|
|
129
|
+
|
|
130
|
+
auditable-demo:
|
|
131
|
+
needs: build
|
|
132
|
+
permissions:
|
|
133
|
+
actions: read
|
|
134
|
+
contents: read
|
|
135
|
+
uses: kungfu-systems/buildchain/.github/workflows/.auditable-demo.yml@BUILDCHAIN_EXACT_SHA
|
|
136
|
+
with:
|
|
137
|
+
source-ref: ${{ github.sha }}
|
|
138
|
+
source-artifact-name: ${{ needs.build.outputs.artifact-name }}
|
|
139
|
+
source-artifact-digest: ${{ needs.build.outputs.artifact-digest }}
|
|
140
|
+
adapter-path: scripts/auditable-demo-adapter
|
|
141
|
+
renderer-image: ghcr.io/kungfu-systems/build-images/demo-renderer@sha256:RENDERER_DIGEST
|
|
142
|
+
render-media: false
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Replace both placeholders with reviewed immutable SHAs or digests. An eligible
|
|
146
|
+
build should always call the reusable workflow. Selection policy changes only
|
|
147
|
+
`render-media`; it must never condition away the Gate job.
|
|
148
|
+
|
|
149
|
+
## Failure Evidence
|
|
150
|
+
|
|
151
|
+
Gate and render jobs use bounded timeouts and non-cancelling concurrency.
|
|
152
|
+
Diagnostics artifacts are attempted with `always()` so adapter stdout/stderr
|
|
153
|
+
and the resolved source coordinate remain available when qualification fails.
|
|
154
|
+
No production deployment, publication authority, token, or provider mutation
|
|
155
|
+
is part of this workflow.
|
|
@@ -124,7 +124,7 @@ Limit a canary to one repository:
|
|
|
124
124
|
```bash
|
|
125
125
|
buildchain audit github-governance \
|
|
126
126
|
--repository kungfu-systems/buildchain \
|
|
127
|
-
--target-ref dev/
|
|
127
|
+
--target-ref dev/v3/v3.0 \
|
|
128
128
|
--require-qualifying \
|
|
129
129
|
--json
|
|
130
130
|
```
|
|
@@ -169,7 +169,7 @@ Plan one exact branch without mutation:
|
|
|
169
169
|
```bash
|
|
170
170
|
buildchain github-governance plan \
|
|
171
171
|
--repository kungfu-systems/buildchain \
|
|
172
|
-
--branch dev/
|
|
172
|
+
--branch dev/v3/v3.0 \
|
|
173
173
|
--required-check check \
|
|
174
174
|
--required-check-app-id check=15368 \
|
|
175
175
|
--required-approvals 1 \
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Release activation transaction
|
|
2
|
+
|
|
3
|
+
Buildchain exposes `release-activation-transaction` as the final cross-repository
|
|
4
|
+
contract between a qualified product release, its public web surface, and the
|
|
5
|
+
product-owned released-evidence projection.
|
|
6
|
+
|
|
7
|
+
The canonical order is:
|
|
8
|
+
|
|
9
|
+
1. `candidate-qualified`
|
|
10
|
+
2. `artifacts-published`
|
|
11
|
+
3. `passport-sealed`
|
|
12
|
+
4. `site-published`
|
|
13
|
+
5. `public-readback`
|
|
14
|
+
6. `evidence-synthesized`
|
|
15
|
+
|
|
16
|
+
`packages/core/release-activation-transaction.js` is the executable authority.
|
|
17
|
+
Every transaction binds an exact product source SHA, exact reviewed site source
|
|
18
|
+
SHA, tag, channel, version, environment, artifact-set root, and the three
|
|
19
|
+
repository owners. A later phase cannot pass while an earlier phase is
|
|
20
|
+
incomplete. Replaying a passed phase is idempotent only when its retained
|
|
21
|
+
receipt roots are unchanged.
|
|
22
|
+
|
|
23
|
+
Released evidence must be synthesized from a canonical receipt set containing
|
|
24
|
+
exactly one artifact-publication, release-passport, site-publication,
|
|
25
|
+
public-readback, and product-qualification receipt. Every receipt repeats the
|
|
26
|
+
same binding root. Missing, duplicated, stale, or substituted roots fail
|
|
27
|
+
closed.
|
|
28
|
+
|
|
29
|
+
Shadow rehearsal uses `mode=shadow`, `environment=shadow`, and always emits
|
|
30
|
+
`releasedUseClaim=false`. It is suitable for protected PR qualification and
|
|
31
|
+
must never be published as real release evidence. Activation mode requires the
|
|
32
|
+
production environment; actual channel mutation remains the caller's protected
|
|
33
|
+
publication responsibility.
|
|
34
|
+
|
|
35
|
+
The web-surface workflow accepts `production-source-sha` only for an explicitly
|
|
36
|
+
approved `workflow_dispatch`. It checks out and plans the exact reviewed
|
|
37
|
+
consumer commit, while the production environment and normal publication
|
|
38
|
+
authority gates remain intact.
|