@kungfu-tech/buildchain 3.0.2-alpha.0 → 3.0.2-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/README.md +4 -2
- package/actions/github-artifact-attestation/README.md +10 -0
- package/actions/promote-buildchain-ref/README.md +7 -0
- package/bin/buildchain.mjs +5 -0
- package/bin/internal/trust-release-cli.mjs +74 -3
- package/contracts/auditable-demo-media-profiles-v1.json +168 -0
- package/contracts/evidence/auditable-demo-web-delivery-v1.json +103 -0
- package/contracts/fixtures/auditable-demo-web-delivery-v1/complete-transcript.txt +2 -0
- package/contracts/fixtures/auditable-demo-web-delivery-v1/public-projection.json +16 -0
- package/contracts/fixtures/auditable-demo-web-delivery-v1/scene.json +12 -0
- package/dist/site/artifact-schemas.json +5 -1
- package/dist/site/buildchain-contract.json +133 -34
- package/dist/site/buildchain-site.json +159 -40
- package/dist/site/capability-registry.json +14 -13
- package/dist/site/cli-registry.json +12 -0
- package/dist/site/controller-registry.json +72 -4
- package/dist/site/kfd-claims.json +338 -20
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +24 -9
- package/dist/site/node-api-registry.json +89 -11
- package/dist/site/page-registry.json +135 -25
- package/dist/site/public-surface-audit.json +203 -21
- package/dist/site/publication-authority-registry.json +72 -2
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/release-model.json +2 -1
- package/dist/site/release-passport-check-manifest.json +1 -0
- package/dist/site/release-provenance.json +6 -0
- package/dist/site/schemas/release-passport-v1.schema.json +6 -0
- package/dist/site/site-manifest.json +21 -13
- package/dist/site/workflow-registry.json +167 -13
- package/docs/MAP.md +5 -1
- package/docs/auditable-demo.md +55 -3
- package/docs/binary-distribution.md +7 -0
- package/docs/cli.md +9 -0
- package/docs/dev-alpha-candidate-patrol.md +111 -0
- package/docs/github-artifact-attestation.md +219 -0
- package/docs/release-governance.md +32 -0
- package/docs/release-passport.md +13 -0
- package/docs/reusable-build-surface.md +83 -61
- package/docs/runtime-train-validation.md +21 -0
- package/docs/versioning.md +1 -0
- package/package.json +8 -1
- package/packages/core/artifact-signing-result.js +228 -0
- package/packages/core/artifact-signing.js +412 -0
- package/packages/core/buildchain-config.js +58 -0
- package/packages/core/buildchain-contract.js +14 -0
- package/packages/core/buildchain-kfd-claims.js +5 -0
- package/packages/core/buildchain-publication-authority.js +3 -0
- package/packages/core/cache-evidence.js +288 -0
- package/packages/core/channel-candidate.js +186 -0
- package/packages/core/detached-artifact-signature.js +121 -0
- package/packages/core/diagnostics.js +276 -10
- package/packages/core/github-artifact-attestation.js +642 -0
- package/packages/core/github-governance-authority.js +77 -16
- package/packages/core/index.js +62 -0
- package/packages/core/publication-authority.js +1 -1
- package/packages/core/release-passport-contract.js +2 -0
- package/packages/core/release-passport.js +60 -3
- package/scripts/auditable-demo.mjs +520 -28
- package/scripts/build-contract-core.mjs +31 -0
- package/scripts/buildchain-channel-router.mjs +8 -2
- package/scripts/check-inventory.mjs +9 -0
- package/scripts/create-github-artifact-attestation-policy.mjs +62 -0
- package/scripts/dev-alpha-candidate-patrol.mjs +864 -0
- package/scripts/dispatch-artifact-signing-authority.mjs +152 -0
- package/scripts/finalize-native-artifact-signing-result.mjs +96 -0
- package/scripts/generate-channel-promotion-workflow.mjs +6 -0
- package/scripts/generate-site-bundle.mjs +20 -0
- package/scripts/import-artifact-signing-results.mjs +76 -0
- package/scripts/inspect-artifact-signing-requests.mjs +101 -0
- package/scripts/locked-source-checkout.mjs +48 -0
- package/scripts/materialize-artifact-signing-request.mjs +66 -0
- package/scripts/merge-artifact-signing-results.mjs +76 -0
- package/scripts/publish-github-artifact-attestation-evidence.mjs +201 -0
- package/scripts/reconcile-github-governance.mjs +158 -25
- package/scripts/release-candidate-resolver.mjs +12 -0
- package/scripts/release-line-policy.mjs +27 -0
- package/scripts/runtime-ref-core.mjs +10 -6
- package/scripts/seal-artifact-signing-requests.mjs +368 -0
- package/scripts/shifu-gate-profile.mjs +26 -20
- package/scripts/sign-detached-artifact-requests.mjs +237 -0
- package/scripts/stage-github-artifact-attestation-inputs.mjs +65 -0
- package/scripts/verify-artifact-signing-results.mjs +99 -0
|
@@ -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-28T18:18:43.092Z",
|
|
5
|
+
"publishedAt": "2026-07-28T18:18:43.092Z",
|
|
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": "6d22340e3c2ab0202ce8d830cf1f85400ada5ae7",
|
|
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.2-alpha.
|
|
40
|
+
"version": "3.0.2-alpha.10",
|
|
41
41
|
"versionSource": "package.json#version"
|
|
42
42
|
},
|
|
43
43
|
"entrypoint": "buildchain-site.json",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"path": "docs/MAP.md",
|
|
54
54
|
"plane": "use",
|
|
55
55
|
"exists": true,
|
|
56
|
-
"digest": "sha256:
|
|
56
|
+
"digest": "sha256:cc32692e8d04816e8de94f208e43c2d5c5c7a8425cec8b32edc73ab78591fbbf"
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
59
|
"id": "auditable-demo",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"path": "docs/auditable-demo.md",
|
|
62
62
|
"plane": "verify",
|
|
63
63
|
"exists": true,
|
|
64
|
-
"digest": "sha256:
|
|
64
|
+
"digest": "sha256:0e8cf2162c2e1f83cfe3a6171e3055f494cab5f03fdcbec3854e1793678e6908"
|
|
65
65
|
},
|
|
66
66
|
{
|
|
67
67
|
"id": "install",
|
|
@@ -77,7 +77,15 @@
|
|
|
77
77
|
"path": "docs/release-passport.md",
|
|
78
78
|
"plane": "verify",
|
|
79
79
|
"exists": true,
|
|
80
|
-
"digest": "sha256:
|
|
80
|
+
"digest": "sha256:d698078075700e60bafb9677bc4c35d49970136b98caaecfc51d38344285cdd5"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"id": "github-artifact-attestation",
|
|
84
|
+
"title": "GitHub-native Linux artifact attestation",
|
|
85
|
+
"path": "docs/github-artifact-attestation.md",
|
|
86
|
+
"plane": "verify",
|
|
87
|
+
"exists": true,
|
|
88
|
+
"digest": "sha256:51f28b0b01fae4e3f80a7433f6c491d0c795bd091bff64ca1264c5cc0819c545"
|
|
81
89
|
},
|
|
82
90
|
{
|
|
83
91
|
"id": "controller-evidence",
|
|
@@ -141,7 +149,7 @@
|
|
|
141
149
|
"path": "docs/binary-distribution.md",
|
|
142
150
|
"plane": "verify",
|
|
143
151
|
"exists": true,
|
|
144
|
-
"digest": "sha256:
|
|
152
|
+
"digest": "sha256:b1611dcf0e6825e53921e4c9d31d1afe16fca81e6868360bfad1902587cd52ef"
|
|
145
153
|
},
|
|
146
154
|
{
|
|
147
155
|
"id": "consumer-issue-reporting",
|
|
@@ -205,7 +213,7 @@
|
|
|
205
213
|
"path": "docs/cli.md",
|
|
206
214
|
"plane": "use",
|
|
207
215
|
"exists": true,
|
|
208
|
-
"digest": "sha256:
|
|
216
|
+
"digest": "sha256:49da688f9f8b726a9169a3e4b246cb6ef07c6c626ea15c22f0b26ba1a37a58b4"
|
|
209
217
|
},
|
|
210
218
|
{
|
|
211
219
|
"id": "build-facts",
|
|
@@ -245,7 +253,7 @@
|
|
|
245
253
|
"path": "docs/reusable-build-surface.md",
|
|
246
254
|
"plane": "use",
|
|
247
255
|
"exists": true,
|
|
248
|
-
"digest": "sha256:
|
|
256
|
+
"digest": "sha256:ea36ec722f811f5156735aa7471ed080cdc7e87d71c20c300243b226e233e675"
|
|
249
257
|
},
|
|
250
258
|
{
|
|
251
259
|
"id": "publish-transaction",
|
|
@@ -261,7 +269,7 @@
|
|
|
261
269
|
"path": "docs/release-governance.md",
|
|
262
270
|
"plane": "why",
|
|
263
271
|
"exists": true,
|
|
264
|
-
"digest": "sha256:
|
|
272
|
+
"digest": "sha256:42a45f51db7ea11658431718835e1a430959db2a5cc80fc4651681502fe6fb7c"
|
|
265
273
|
},
|
|
266
274
|
{
|
|
267
275
|
"id": "release-flow",
|
|
@@ -277,7 +285,7 @@
|
|
|
277
285
|
"path": "docs/runtime-train-validation.md",
|
|
278
286
|
"plane": "verify",
|
|
279
287
|
"exists": true,
|
|
280
|
-
"digest": "sha256:
|
|
288
|
+
"digest": "sha256:c9ebf451294f92a2be3aa2ac4b2ec7afb3cc17bbeae2ece7879b800c0f274a40"
|
|
281
289
|
},
|
|
282
290
|
{
|
|
283
291
|
"id": "versioning",
|
|
@@ -285,7 +293,7 @@
|
|
|
285
293
|
"path": "docs/versioning.md",
|
|
286
294
|
"plane": "why",
|
|
287
295
|
"exists": true,
|
|
288
|
-
"digest": "sha256:
|
|
296
|
+
"digest": "sha256:4b40cb8675c111b7588297102a61cb241630f2b707a67a0384a6df7527b2c64c"
|
|
289
297
|
},
|
|
290
298
|
{
|
|
291
299
|
"id": "web-surface-deployments",
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"adapter-path",
|
|
12
12
|
"artifact-retention-days",
|
|
13
13
|
"buildchain-repository",
|
|
14
|
+
"media-profile",
|
|
14
15
|
"render-media",
|
|
15
16
|
"renderer-image",
|
|
16
17
|
"require-trusted-event",
|
|
@@ -18,7 +19,7 @@
|
|
|
18
19
|
"source-artifact-name",
|
|
19
20
|
"source-ref"
|
|
20
21
|
],
|
|
21
|
-
"inputCount":
|
|
22
|
+
"inputCount": 10,
|
|
22
23
|
"secrets": [],
|
|
23
24
|
"secretCount": 0,
|
|
24
25
|
"outputs": [
|
|
@@ -31,10 +32,12 @@
|
|
|
31
32
|
"media-artifact-id",
|
|
32
33
|
"media-artifact-name",
|
|
33
34
|
"media-artifact-url",
|
|
35
|
+
"media-profile",
|
|
36
|
+
"media-qualification-root",
|
|
34
37
|
"media-root",
|
|
35
38
|
"source-sha"
|
|
36
39
|
],
|
|
37
|
-
"outputCount":
|
|
40
|
+
"outputCount": 13,
|
|
38
41
|
"surface": "auditable-demo",
|
|
39
42
|
"capabilityGroup": "api-cli-reference",
|
|
40
43
|
"status": "preview"
|
|
@@ -92,6 +95,9 @@
|
|
|
92
95
|
"buildchain-contract-lock-path",
|
|
93
96
|
"buildchain-ref",
|
|
94
97
|
"buildchain-repository",
|
|
98
|
+
"cache-dependency-lock-root",
|
|
99
|
+
"cache-policy-root",
|
|
100
|
+
"cache-toolchain-root",
|
|
95
101
|
"cargo-registry-index",
|
|
96
102
|
"checkout-cache-fallback",
|
|
97
103
|
"checkout-cache-fetch-attempts",
|
|
@@ -108,6 +114,9 @@
|
|
|
108
114
|
"expected-artifacts-json",
|
|
109
115
|
"fail-fast",
|
|
110
116
|
"gate-profile-aggregate-json",
|
|
117
|
+
"github-artifact-attestation-platform-id",
|
|
118
|
+
"github-artifact-attestation-signer-sha",
|
|
119
|
+
"github-artifact-attestation-subject-path",
|
|
111
120
|
"install-command",
|
|
112
121
|
"kfd-agent-hub",
|
|
113
122
|
"lifecycle-timeout-minutes",
|
|
@@ -141,7 +150,7 @@
|
|
|
141
150
|
"verify-command",
|
|
142
151
|
"working-directory"
|
|
143
152
|
],
|
|
144
|
-
"inputCount":
|
|
153
|
+
"inputCount": 72,
|
|
145
154
|
"secrets": [
|
|
146
155
|
"BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN",
|
|
147
156
|
"BUILDCHAIN_ARTIFACT_RELAY_S3_ROLE_ARN",
|
|
@@ -150,9 +159,10 @@
|
|
|
150
159
|
"BUILDCHAIN_MACOS_CERTIFICATE_PASSWORD",
|
|
151
160
|
"BUILDCHAIN_MACOS_NOTARY_API_ISSUER",
|
|
152
161
|
"BUILDCHAIN_MACOS_NOTARY_API_KEY_ID",
|
|
153
|
-
"BUILDCHAIN_MACOS_NOTARY_API_KEY_P8_BASE64"
|
|
162
|
+
"BUILDCHAIN_MACOS_NOTARY_API_KEY_P8_BASE64",
|
|
163
|
+
"BUILDCHAIN_PROMOTION_TOKEN"
|
|
154
164
|
],
|
|
155
|
-
"secretCount":
|
|
165
|
+
"secretCount": 9,
|
|
156
166
|
"outputs": [
|
|
157
167
|
"artifact-coordinates-json",
|
|
158
168
|
"build-diagnostics-summary-artifact",
|
|
@@ -352,6 +362,9 @@
|
|
|
352
362
|
"buildchain-repository",
|
|
353
363
|
"channel",
|
|
354
364
|
"dry-run",
|
|
365
|
+
"github-artifact-attestation-environment",
|
|
366
|
+
"github-artifact-attestation-policy-json",
|
|
367
|
+
"github-artifact-attestation-retention-days",
|
|
355
368
|
"github-governance-receipt-json",
|
|
356
369
|
"github-release",
|
|
357
370
|
"github-release-notes",
|
|
@@ -425,7 +438,7 @@
|
|
|
425
438
|
"target-sha",
|
|
426
439
|
"trusted-publishing"
|
|
427
440
|
],
|
|
428
|
-
"inputCount":
|
|
441
|
+
"inputCount": 88,
|
|
429
442
|
"secrets": [
|
|
430
443
|
"BUILDCHAIN_ISSUE_APP_ID",
|
|
431
444
|
"BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
|
|
@@ -448,6 +461,10 @@
|
|
|
448
461
|
"controller-receipt-digest",
|
|
449
462
|
"controller-receipt-json",
|
|
450
463
|
"controller-receipt-status",
|
|
464
|
+
"github-artifact-attestation-evidence-root",
|
|
465
|
+
"github-artifact-attestation-id",
|
|
466
|
+
"github-artifact-attestation-publication-receipt-digest",
|
|
467
|
+
"github-artifact-attestation-url",
|
|
451
468
|
"promoted-sha",
|
|
452
469
|
"publication-capability-digest",
|
|
453
470
|
"publication-commit-evidence-digest",
|
|
@@ -456,7 +473,7 @@
|
|
|
456
473
|
"publication-commit-url",
|
|
457
474
|
"release-candidate-artifact"
|
|
458
475
|
],
|
|
459
|
-
"outputCount":
|
|
476
|
+
"outputCount": 19,
|
|
460
477
|
"surface": "reusable-workflow",
|
|
461
478
|
"capabilityGroup": "api-cli-reference",
|
|
462
479
|
"status": "active"
|
|
@@ -845,6 +862,34 @@
|
|
|
845
862
|
"capabilityGroup": "api-cli-reference",
|
|
846
863
|
"status": "active"
|
|
847
864
|
},
|
|
865
|
+
{
|
|
866
|
+
"id": "artifact-signing-authority",
|
|
867
|
+
"path": ".github/workflows/artifact-signing-authority.yml",
|
|
868
|
+
"reusable": false,
|
|
869
|
+
"inputs": [],
|
|
870
|
+
"inputCount": 0,
|
|
871
|
+
"secrets": [],
|
|
872
|
+
"secretCount": 0,
|
|
873
|
+
"outputs": [],
|
|
874
|
+
"outputCount": 0,
|
|
875
|
+
"surface": "repository-workflow",
|
|
876
|
+
"capabilityGroup": "api-cli-reference",
|
|
877
|
+
"status": "active"
|
|
878
|
+
},
|
|
879
|
+
{
|
|
880
|
+
"id": "auditable-demo-media-profile-qualification",
|
|
881
|
+
"path": ".github/workflows/auditable-demo-media-profile-qualification.yml",
|
|
882
|
+
"reusable": false,
|
|
883
|
+
"inputs": [],
|
|
884
|
+
"inputCount": 0,
|
|
885
|
+
"secrets": [],
|
|
886
|
+
"secretCount": 0,
|
|
887
|
+
"outputs": [],
|
|
888
|
+
"outputCount": 0,
|
|
889
|
+
"surface": "repository-workflow",
|
|
890
|
+
"capabilityGroup": "api-cli-reference",
|
|
891
|
+
"status": "active"
|
|
892
|
+
},
|
|
848
893
|
{
|
|
849
894
|
"id": "binary-distribution",
|
|
850
895
|
"path": ".github/workflows/binary-distribution.yml",
|
|
@@ -913,6 +958,9 @@
|
|
|
913
958
|
"buildchain-ref",
|
|
914
959
|
"buildchain-repository",
|
|
915
960
|
"buildchain-stable-contract-lock-path",
|
|
961
|
+
"cache-dependency-lock-root",
|
|
962
|
+
"cache-policy-root",
|
|
963
|
+
"cache-toolchain-root",
|
|
916
964
|
"cargo-registry-index",
|
|
917
965
|
"checkout-cache-fallback",
|
|
918
966
|
"checkout-cache-fetch-attempts",
|
|
@@ -929,6 +977,9 @@
|
|
|
929
977
|
"expected-artifacts-json",
|
|
930
978
|
"fail-fast",
|
|
931
979
|
"gate-profile-aggregate-json",
|
|
980
|
+
"github-artifact-attestation-platform-id",
|
|
981
|
+
"github-artifact-attestation-signer-sha",
|
|
982
|
+
"github-artifact-attestation-subject-path",
|
|
932
983
|
"install-command",
|
|
933
984
|
"kfd-agent-hub",
|
|
934
985
|
"lifecycle-timeout-minutes",
|
|
@@ -962,7 +1013,7 @@
|
|
|
962
1013
|
"verify-command",
|
|
963
1014
|
"working-directory"
|
|
964
1015
|
],
|
|
965
|
-
"inputCount":
|
|
1016
|
+
"inputCount": 75,
|
|
966
1017
|
"secrets": [
|
|
967
1018
|
"BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN",
|
|
968
1019
|
"BUILDCHAIN_ARTIFACT_RELAY_S3_ROLE_ARN",
|
|
@@ -971,9 +1022,10 @@
|
|
|
971
1022
|
"BUILDCHAIN_MACOS_CERTIFICATE_PASSWORD",
|
|
972
1023
|
"BUILDCHAIN_MACOS_NOTARY_API_ISSUER",
|
|
973
1024
|
"BUILDCHAIN_MACOS_NOTARY_API_KEY_ID",
|
|
974
|
-
"BUILDCHAIN_MACOS_NOTARY_API_KEY_P8_BASE64"
|
|
1025
|
+
"BUILDCHAIN_MACOS_NOTARY_API_KEY_P8_BASE64",
|
|
1026
|
+
"BUILDCHAIN_PROMOTION_TOKEN"
|
|
975
1027
|
],
|
|
976
|
-
"secretCount":
|
|
1028
|
+
"secretCount": 9,
|
|
977
1029
|
"outputs": [
|
|
978
1030
|
"artifact-coordinates-json",
|
|
979
1031
|
"build-diagnostics-summary-artifact",
|
|
@@ -1207,6 +1259,44 @@
|
|
|
1207
1259
|
"capabilityGroup": "api-cli-reference",
|
|
1208
1260
|
"status": "active"
|
|
1209
1261
|
},
|
|
1262
|
+
{
|
|
1263
|
+
"id": "dev-alpha-candidate-patrol",
|
|
1264
|
+
"path": ".github/workflows/dev-alpha-candidate-patrol.yml",
|
|
1265
|
+
"reusable": true,
|
|
1266
|
+
"inputs": [
|
|
1267
|
+
"alpha-workflow-path",
|
|
1268
|
+
"buildchain-ref",
|
|
1269
|
+
"buildchain-repository",
|
|
1270
|
+
"create-pull-request",
|
|
1271
|
+
"dev-workflow-path",
|
|
1272
|
+
"dry-run",
|
|
1273
|
+
"max-age-seconds",
|
|
1274
|
+
"pull-request-body-prefix",
|
|
1275
|
+
"settlement-authorized",
|
|
1276
|
+
"source-branch",
|
|
1277
|
+
"target-branch"
|
|
1278
|
+
],
|
|
1279
|
+
"inputCount": 11,
|
|
1280
|
+
"secrets": [
|
|
1281
|
+
"promotion-token"
|
|
1282
|
+
],
|
|
1283
|
+
"secretCount": 1,
|
|
1284
|
+
"outputs": [
|
|
1285
|
+
"active-candidate-pr",
|
|
1286
|
+
"controller-state",
|
|
1287
|
+
"eligible",
|
|
1288
|
+
"next-candidate-sha",
|
|
1289
|
+
"promotion-pr",
|
|
1290
|
+
"result-path",
|
|
1291
|
+
"selected-sha",
|
|
1292
|
+
"settlement-action",
|
|
1293
|
+
"source-lock-ref"
|
|
1294
|
+
],
|
|
1295
|
+
"outputCount": 9,
|
|
1296
|
+
"surface": "repository-patrol",
|
|
1297
|
+
"capabilityGroup": "governance-versioning",
|
|
1298
|
+
"status": "active"
|
|
1299
|
+
},
|
|
1210
1300
|
{
|
|
1211
1301
|
"id": "dev-merge-queue-governance",
|
|
1212
1302
|
"path": ".github/workflows/dev-merge-queue-governance.yml",
|
|
@@ -1258,6 +1348,40 @@
|
|
|
1258
1348
|
"capabilityGroup": "governance-versioning",
|
|
1259
1349
|
"status": "active"
|
|
1260
1350
|
},
|
|
1351
|
+
{
|
|
1352
|
+
"id": "github-artifact-attestation",
|
|
1353
|
+
"path": ".github/workflows/github-artifact-attestation.yml",
|
|
1354
|
+
"reusable": true,
|
|
1355
|
+
"inputs": [
|
|
1356
|
+
"buildchain-ref",
|
|
1357
|
+
"environment",
|
|
1358
|
+
"evidence-artifact-name",
|
|
1359
|
+
"evidence-run-id",
|
|
1360
|
+
"platform-manifest-artifact-name",
|
|
1361
|
+
"platform-manifest-relative-path",
|
|
1362
|
+
"policy-json",
|
|
1363
|
+
"release-passport-artifact-name",
|
|
1364
|
+
"release-passport-relative-path",
|
|
1365
|
+
"retention-days",
|
|
1366
|
+
"source-sha",
|
|
1367
|
+
"subject-artifact-name",
|
|
1368
|
+
"subject-relative-path"
|
|
1369
|
+
],
|
|
1370
|
+
"inputCount": 13,
|
|
1371
|
+
"secrets": [],
|
|
1372
|
+
"secretCount": 0,
|
|
1373
|
+
"outputs": [
|
|
1374
|
+
"attestation-id",
|
|
1375
|
+
"attestation-url",
|
|
1376
|
+
"bundle-digest",
|
|
1377
|
+
"evidence-artifact-name",
|
|
1378
|
+
"evidence-root"
|
|
1379
|
+
],
|
|
1380
|
+
"outputCount": 5,
|
|
1381
|
+
"surface": "release-passport",
|
|
1382
|
+
"capabilityGroup": "release-passport-trust",
|
|
1383
|
+
"status": "active"
|
|
1384
|
+
},
|
|
1261
1385
|
{
|
|
1262
1386
|
"id": "github-governance-audit",
|
|
1263
1387
|
"path": ".github/workflows/github-governance-audit.yml",
|
|
@@ -1594,6 +1718,9 @@
|
|
|
1594
1718
|
"buildchain-stable-contract-lock-path",
|
|
1595
1719
|
"channel",
|
|
1596
1720
|
"dry-run",
|
|
1721
|
+
"github-artifact-attestation-environment",
|
|
1722
|
+
"github-artifact-attestation-policy-json",
|
|
1723
|
+
"github-artifact-attestation-retention-days",
|
|
1597
1724
|
"github-governance-receipt-json",
|
|
1598
1725
|
"github-release",
|
|
1599
1726
|
"github-release-notes",
|
|
@@ -1656,7 +1783,7 @@
|
|
|
1656
1783
|
"target-sha",
|
|
1657
1784
|
"trusted-publishing"
|
|
1658
1785
|
],
|
|
1659
|
-
"inputCount":
|
|
1786
|
+
"inputCount": 80,
|
|
1660
1787
|
"secrets": [
|
|
1661
1788
|
"BUILDCHAIN_ISSUE_APP_ID",
|
|
1662
1789
|
"BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
|
|
@@ -1680,6 +1807,10 @@
|
|
|
1680
1807
|
"controller-receipt-digest",
|
|
1681
1808
|
"controller-receipt-json",
|
|
1682
1809
|
"controller-receipt-status",
|
|
1810
|
+
"github-artifact-attestation-evidence-root",
|
|
1811
|
+
"github-artifact-attestation-id",
|
|
1812
|
+
"github-artifact-attestation-publication-receipt-digest",
|
|
1813
|
+
"github-artifact-attestation-url",
|
|
1683
1814
|
"promoted-sha",
|
|
1684
1815
|
"promotion-contract-lock-digest",
|
|
1685
1816
|
"promotion-contract-lock-path",
|
|
@@ -1699,7 +1830,7 @@
|
|
|
1699
1830
|
"publication-commit-url",
|
|
1700
1831
|
"release-candidate-artifact"
|
|
1701
1832
|
],
|
|
1702
|
-
"outputCount":
|
|
1833
|
+
"outputCount": 31,
|
|
1703
1834
|
"surface": "release-governance",
|
|
1704
1835
|
"capabilityGroup": "reusable-build",
|
|
1705
1836
|
"status": "active"
|
|
@@ -1894,6 +2025,28 @@
|
|
|
1894
2025
|
],
|
|
1895
2026
|
"actionSource": "actions/*/action.yml reverse input enumeration",
|
|
1896
2027
|
"actions": [
|
|
2028
|
+
{
|
|
2029
|
+
"id": "github-artifact-attestation",
|
|
2030
|
+
"path": "actions/github-artifact-attestation/action.yml",
|
|
2031
|
+
"inputs": [
|
|
2032
|
+
"attestation-id",
|
|
2033
|
+
"attestation-url",
|
|
2034
|
+
"bundle-path",
|
|
2035
|
+
"expected-buildchain-ref",
|
|
2036
|
+
"expected-caller-repository",
|
|
2037
|
+
"expected-source-sha",
|
|
2038
|
+
"mode",
|
|
2039
|
+
"output-dir",
|
|
2040
|
+
"platform-manifest-path",
|
|
2041
|
+
"policy-json",
|
|
2042
|
+
"preparation-json",
|
|
2043
|
+
"release-passport-path",
|
|
2044
|
+
"subject-path"
|
|
2045
|
+
],
|
|
2046
|
+
"inputCount": 13,
|
|
2047
|
+
"capabilityGroup": "release-passport-trust",
|
|
2048
|
+
"status": "active"
|
|
2049
|
+
},
|
|
1897
2050
|
{
|
|
1898
2051
|
"id": "macos-credential-island",
|
|
1899
2052
|
"path": "actions/macos-credential-island/action.yml",
|
|
@@ -1968,6 +2121,7 @@
|
|
|
1968
2121
|
"release-passport",
|
|
1969
2122
|
"release-passport-build-summary-path",
|
|
1970
2123
|
"release-passport-buildchain-self-kfd",
|
|
2124
|
+
"release-passport-github-artifact-attestation-policy-jsons",
|
|
1971
2125
|
"release-passport-impact-json",
|
|
1972
2126
|
"release-passport-invariant-passport-command",
|
|
1973
2127
|
"release-passport-invariant-passport-jsons",
|
|
@@ -1994,7 +2148,7 @@
|
|
|
1994
2148
|
"transaction-state-path",
|
|
1995
2149
|
"verification-command"
|
|
1996
2150
|
],
|
|
1997
|
-
"inputCount":
|
|
2151
|
+
"inputCount": 67,
|
|
1998
2152
|
"capabilityGroup": "release-passport-trust",
|
|
1999
2153
|
"status": "active"
|
|
2000
2154
|
},
|
package/docs/MAP.md
CHANGED
|
@@ -27,7 +27,7 @@ workflow, action, and Node API export also carries a `capabilityGroup`,
|
|
|
27
27
|
| Capability group | Primary facts | Primary manuals |
|
|
28
28
|
| --- | --- | --- |
|
|
29
29
|
| Getting Started | `capability-registry.json`, `product-mechanism.json` | [`install.md`](install.md), [`product-mechanism.md`](product-mechanism.md), [`cli.md`](cli.md) |
|
|
30
|
-
| Release Passport and Trust | `release-model.json`, `artifact-schemas.json`, `publication-authority-registry.json`, `kfd-claims.json` | [`release-passport.md`](release-passport.md), [`publication-authority.md`](publication-authority.md), [`release-candidate.md`](release-candidate.md), [`publish-transaction.md`](publish-transaction.md), [`binary-distribution.md`](binary-distribution.md) |
|
|
30
|
+
| Release Passport and Trust | `release-model.json`, `artifact-schemas.json`, `publication-authority-registry.json`, `kfd-claims.json` | [`release-passport.md`](release-passport.md), [`github-artifact-attestation.md`](github-artifact-attestation.md), [`publication-authority.md`](publication-authority.md), [`release-candidate.md`](release-candidate.md), [`publish-transaction.md`](publish-transaction.md), [`binary-distribution.md`](binary-distribution.md) |
|
|
31
31
|
| Reusable Build and Lifecycle | `workflow-registry.json`, `controller-registry.json`, `release-model.json` | [`reusable-build-surface.md`](reusable-build-surface.md), [`controller-evidence.md`](controller-evidence.md), [`shifu-gate-profiles.md`](shifu-gate-profiles.md), [`lifecycle-protocol.md`](lifecycle-protocol.md) |
|
|
32
32
|
| KFD Trust and Surface Closure | `kfd-claims.json`, `public-surface-audit.json`, `cli-registry.json`, `node-api-registry.json` | [`kfd-support.md`](kfd-support.md), [`release-passport.md`](release-passport.md) |
|
|
33
33
|
| Site Bundle, Web Surfaces, and Propagation | `buildchain-site.json`, `site-manifest.json`, `page-registry.json`, `release-model.json` | [`site-bundle-contract.md`](site-bundle-contract.md), [`web-surface-deployments.md`](web-surface-deployments.md), [`release-propagation.md`](release-propagation.md) |
|
|
@@ -42,6 +42,8 @@ workflow, action, and Node API export also carries a `capabilityGroup`,
|
|
|
42
42
|
| Capability-grouped KFD navigation | `dist/site/capability-registry.json`, `dist/site/page-registry.json`, `dist/site/manual-registry.json`, `dist/site/cli-registry.json`, `dist/site/node-api-registry.json` | this map, [`site-bundle-contract.md`](site-bundle-contract.md), [`kfd-support.md`](kfd-support.md) |
|
|
43
43
|
| KFD-1 / KFD-2 / KFD-3 release-passport gates | `dist/site/kfd-claims.json`, `dist/site/buildchain-contract.json`, `dist/site/artifact-schemas.json` | [`release-passport.md`](release-passport.md) |
|
|
44
44
|
| Product invariant Passport release gate | `buildchain.release.json#invariantPassports`, `dist/site/buildchain-contract.json` | [`release-passport.md`](release-passport.md) |
|
|
45
|
+
| GitHub keyless Linux artifact attestation | `buildchain.release.json#githubArtifactAttestations`, `dist/site/workflow-registry.json`, `dist/site/artifact-schemas.json` | [`github-artifact-attestation.md`](github-artifact-attestation.md) |
|
|
46
|
+
| Declarative cross-platform artifact signing | `kungfu-buildchain-artifact-signing-request/v1`, `kungfu-buildchain-artifact-signing-result/v1` | [`reusable-build-surface.md`](reusable-build-surface.md#artifact-signing-authority) |
|
|
45
47
|
| KFD-3 public surface reverse audit | `dist/site/public-surface-audit.json`, `dist/site/cli-registry.json`, `dist/site/workflow-registry.json`, `dist/site/page-registry.json` | [`cli.md`](cli.md), [`site-bundle-contract.md`](site-bundle-contract.md) |
|
|
46
48
|
| KFD-1 / KFD-2 / KFD-3 first-class CLI and Node API | `.buildchain/kfd/kfd-3/surfaces.json`, `dist/site/kfd-claims.json`, `buildchain.release.json`, KFD schemas from `@kungfu-tech/kfd` | [`kfd-support.md`](kfd-support.md), [`cli.md`](cli.md#commands) |
|
|
47
49
|
| Declarative KFD Agent Hub adapter conformance and Passport evidence | `.buildchain/kfd/agent-hub.json`, `.buildchain/artifacts/kfd-agent-hub/evidence.json`, `buildchain.release.json#kfdAgentHub` | [`kfd-agent-hub.md`](kfd-agent-hub.md) |
|
|
@@ -85,6 +87,8 @@ replace them.
|
|
|
85
87
|
| How does publish evidence, recovery, and finalization work? | [`publish-transaction.md`](publish-transaction.md) | verify | stable |
|
|
86
88
|
| How do I collect and verify module/product build facts from Git source, version files, and outputs? | [`build-facts.md`](build-facts.md) + [`cli.md`](cli.md) | use/verify | stable |
|
|
87
89
|
| How do I publish or verify release passport artifacts? | [`release-passport.md`](release-passport.md) | use | stable |
|
|
90
|
+
| How do I keylessly attest Linux release artifacts with GitHub and bind them to a Release Passport? | [`github-artifact-attestation.md`](github-artifact-attestation.md) | verify/use | preview |
|
|
91
|
+
| How do I request detached, Developer ID, or Authenticode signing without consumer credentials? | [`reusable-build-surface.md`](reusable-build-surface.md#artifact-signing-authority) | verify/use | preview |
|
|
88
92
|
| How do I seal exact artifact, identity, lifecycle, and KFD assessment roots for KFX admission? | [`artifact-verification-envelope.md`](artifact-verification-envelope.md) | verify/use | preview |
|
|
89
93
|
| How is product publication authority sealed to an exact workflow, runner, control plane, nonce, and artifact? | [`publication-authority.md`](publication-authority.md) | verify | preview |
|
|
90
94
|
| How are GitHub ownership, independent review, effective protection, and plan capability audited fail-closed? | [`github-governance-authority.md`](github-governance-authority.md) | verify | preview |
|
package/docs/auditable-demo.md
CHANGED
|
@@ -8,7 +8,7 @@ confidence: high
|
|
|
8
8
|
sensitivity: public
|
|
9
9
|
evidence_grade: A
|
|
10
10
|
review_state: self-reviewed
|
|
11
|
-
last_reviewed: 2026-07-
|
|
11
|
+
last_reviewed: 2026-07-28
|
|
12
12
|
ai_provenance:
|
|
13
13
|
model_family: GPT-5
|
|
14
14
|
product: Codex
|
|
@@ -100,8 +100,53 @@ the exact source SHA and renderer digest, and only then renders the complete
|
|
|
100
100
|
qualified scene.
|
|
101
101
|
|
|
102
102
|
The media bundle contains MP4, WebM, GIF, poster, probe, renderer manifest,
|
|
103
|
-
renderer checksums, passed Gate receipt, media receipt, and
|
|
104
|
-
checksums.
|
|
103
|
+
renderer checksums, passed Gate receipt, a versioned media receipt, and
|
|
104
|
+
distribution checksums. A web-delivery profile also retains
|
|
105
|
+
`media-inspection.json`, whose content root is bound into the receipt.
|
|
106
|
+
`render-media: false` does not weaken or skip the Gate.
|
|
107
|
+
|
|
108
|
+
## Media Qualification Profiles
|
|
109
|
+
|
|
110
|
+
The single machine-readable source is
|
|
111
|
+
`contracts/auditable-demo-media-profiles-v1.json`. Callers select one reviewed
|
|
112
|
+
profile through `media-profile`; they cannot pass ffmpeg commands, codec flags,
|
|
113
|
+
shell fragments, arbitrary profile paths, or transcoding instructions.
|
|
114
|
+
|
|
115
|
+
| Profile | Meaning |
|
|
116
|
+
| --- | --- |
|
|
117
|
+
| `archive-v1` | Default compatibility contract. Retains the exact renderer outputs and classifies GIF as README compatibility evidence without making a browser-delivery claim. |
|
|
118
|
+
| `web-delivery-v1` | Independently qualifies H.264 MP4 and VP9 WebM playback sources, forbids audio, requires exact scene dimensions and bounded duration/frame-rate drift, checks per-rendition byte ceilings, and proves MP4 `moov` precedes `mdat`. PNG remains the lossless evidence poster. |
|
|
119
|
+
| `site-hero-v1` | Extends `web-delivery-v1` and additionally requires a qualified WebP browser poster. The current Build Images v1 renderer does not emit that member, so selecting this profile fails closed until the producer adds it. |
|
|
120
|
+
|
|
121
|
+
For web-delivery profiles, Buildchain runs its own fixed `ffprobe` invocation
|
|
122
|
+
inside the same immutable, network-disabled renderer image. That command is
|
|
123
|
+
Buildchain-controlled; the producer cannot inject flags. The resulting witness
|
|
124
|
+
records exact roots and byte counts plus container, codec, pixel format,
|
|
125
|
+
dimensions, duration, frame rate, audio stream count, and progressive-download
|
|
126
|
+
evidence. Finalization re-hashes the retained bytes, rechecks the witness root,
|
|
127
|
+
and parses MP4 top-level boxes itself. The producer's `media-probe.json.passed`
|
|
128
|
+
field remains supporting evidence, never sufficient authority.
|
|
129
|
+
|
|
130
|
+
The default `archive-v1` path preserves the existing v1 media receipt exactly.
|
|
131
|
+
An explicitly selected web-delivery profile emits a v2 media receipt with a
|
|
132
|
+
content-addressed rendition list and explicit roles and MIME types. Agents and
|
|
133
|
+
site builds select `primary-video`,
|
|
134
|
+
`alternate-video`, `browser-poster`, or evidence-only roles from that receipt;
|
|
135
|
+
they do not infer semantics from extensions or filenames. Additional responsive
|
|
136
|
+
renditions are accepted only when the immutable renderer manifest declares the
|
|
137
|
+
bounded `build-images.auditable-demo-web-delivery/v1` role and MIME metadata and
|
|
138
|
+
the selected Buildchain profile supplies the byte ceiling; producer metadata
|
|
139
|
+
cannot raise that ceiling. Unbound outputs,
|
|
140
|
+
duplicate singleton roles, unknown profiles, or unsupported required versions
|
|
141
|
+
fail closed.
|
|
142
|
+
|
|
143
|
+
Initial byte ceilings are derived from the checked-in
|
|
144
|
+
`auditable-demo-web-delivery-v1` fixture rendered by Build Images
|
|
145
|
+
`v1.3.0-alpha.16` at its exact source SHA and image digest. GIF, MP4, WebM, and
|
|
146
|
+
PNG ceilings are the next power of two above sixteen times the measured member
|
|
147
|
+
bytes. The not-yet-produced WebP poster uses eight times the measured lossless
|
|
148
|
+
PNG as its conservative proxy. The path-scoped qualification workflow
|
|
149
|
+
regenerates the content-addressed evidence and fails on any byte or fact drift.
|
|
105
150
|
|
|
106
151
|
## Consumer Example
|
|
107
152
|
|
|
@@ -140,12 +185,19 @@ jobs:
|
|
|
140
185
|
adapter-path: scripts/auditable-demo-adapter
|
|
141
186
|
renderer-image: ghcr.io/kungfu-systems/build-images/demo-renderer@sha256:RENDERER_DIGEST
|
|
142
187
|
render-media: false
|
|
188
|
+
media-profile: archive-v1
|
|
143
189
|
```
|
|
144
190
|
|
|
145
191
|
Replace both placeholders with reviewed immutable SHAs or digests. An eligible
|
|
146
192
|
build should always call the reusable workflow. Selection policy changes only
|
|
147
193
|
`render-media`; it must never condition away the Gate job.
|
|
148
194
|
|
|
195
|
+
Use `web-delivery-v1` only when the rendered bundle is intended to become a
|
|
196
|
+
qualified web-delivery source. Use `site-hero-v1` when an optimized browser
|
|
197
|
+
poster is also required. Profile qualification does not prove browser playback,
|
|
198
|
+
responsive layout, reduced-motion behavior, accessibility, or production
|
|
199
|
+
deployment; those remain site responsibilities.
|
|
200
|
+
|
|
149
201
|
## Failure Evidence
|
|
150
202
|
|
|
151
203
|
Gate and render jobs use bounded timeouts and non-cancelling concurrency.
|
|
@@ -47,6 +47,13 @@ Each archive is accompanied by:
|
|
|
47
47
|
- `buildchain-release-bundle.tar.gz`;
|
|
48
48
|
- `buildchain-release-bundle.json`.
|
|
49
49
|
|
|
50
|
+
Linux archives may also be accompanied by a GitHub/Sigstore bundle and
|
|
51
|
+
`buildchain.github-artifact-attestation-evidence/v1`. These prove the exact
|
|
52
|
+
GitHub signer workflow and source digest while preserving the original compiler
|
|
53
|
+
runner in the platform manifest. The GitHub-hosted signer does not rebuild or
|
|
54
|
+
execute consumer source. See
|
|
55
|
+
[`github-artifact-attestation.md`](github-artifact-attestation.md).
|
|
56
|
+
|
|
50
57
|
## KFD-3 Distribution Declaration
|
|
51
58
|
|
|
52
59
|
Buildchain self-describes this release lane in `dist/site/kfd-claims.json` as
|
package/docs/cli.md
CHANGED
|
@@ -74,6 +74,7 @@ import { verifyKfd1ReleaseGate } from "@kungfu-tech/buildchain/kfd-gate";
|
|
|
74
74
|
import { collectBadgeBundleFacts } from "@kungfu-tech/buildchain/badges";
|
|
75
75
|
import { collectReadmeBadgeFacts } from "@kungfu-tech/buildchain/readme-badges";
|
|
76
76
|
import { verifyReleasePassport } from "@kungfu-tech/buildchain/release-passport";
|
|
77
|
+
import { verifyGitHubArtifactAttestationEvidence } from "@kungfu-tech/buildchain/github-artifact-attestation";
|
|
77
78
|
import { createReleasePropagationPlan } from "@kungfu-tech/buildchain/release-propagation";
|
|
78
79
|
import { planReleaseLineBootstrap } from "@kungfu-tech/buildchain/release-line-bootstrap";
|
|
79
80
|
import { collectPublicSurfaceReverseAudit } from "@kungfu-tech/buildchain/public-surface-audit";
|
|
@@ -92,6 +93,14 @@ floating-ref contract world for a runtime such as `@v3`.
|
|
|
92
93
|
|
|
93
94
|
## Commands
|
|
94
95
|
|
|
96
|
+
`buildchain create github-artifact-attestation-policy` seals the expected
|
|
97
|
+
artifact, caller source, original Linux build, immutable Buildchain signer, and
|
|
98
|
+
GitHub permission set before the Release Passport is collected.
|
|
99
|
+
`buildchain verify github-artifact-attestation` invokes `gh attestation verify`
|
|
100
|
+
with the exact signer/source policy and then verifies the retained bundle,
|
|
101
|
+
predicate, platform manifest, Passport, and Buildchain evidence locally. See
|
|
102
|
+
[`github-artifact-attestation.md`](github-artifact-attestation.md).
|
|
103
|
+
|
|
95
104
|
`buildchain layout` is the stable machine question for repository layout. Tools
|
|
96
105
|
such as Shifu should call it instead of copying `.buildchain/` path constants:
|
|
97
106
|
|