@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.
Files changed (83) hide show
  1. package/README.md +4 -2
  2. package/actions/github-artifact-attestation/README.md +10 -0
  3. package/actions/promote-buildchain-ref/README.md +7 -0
  4. package/bin/buildchain.mjs +5 -0
  5. package/bin/internal/trust-release-cli.mjs +74 -3
  6. package/contracts/auditable-demo-media-profiles-v1.json +168 -0
  7. package/contracts/evidence/auditable-demo-web-delivery-v1.json +103 -0
  8. package/contracts/fixtures/auditable-demo-web-delivery-v1/complete-transcript.txt +2 -0
  9. package/contracts/fixtures/auditable-demo-web-delivery-v1/public-projection.json +16 -0
  10. package/contracts/fixtures/auditable-demo-web-delivery-v1/scene.json +12 -0
  11. package/dist/site/artifact-schemas.json +5 -1
  12. package/dist/site/buildchain-contract.json +133 -34
  13. package/dist/site/buildchain-site.json +159 -40
  14. package/dist/site/capability-registry.json +14 -13
  15. package/dist/site/cli-registry.json +12 -0
  16. package/dist/site/controller-registry.json +72 -4
  17. package/dist/site/kfd-claims.json +338 -20
  18. package/dist/site/kfd-upstream-aggregate.json +1 -1
  19. package/dist/site/manual-registry.json +24 -9
  20. package/dist/site/node-api-registry.json +89 -11
  21. package/dist/site/page-registry.json +135 -25
  22. package/dist/site/public-surface-audit.json +203 -21
  23. package/dist/site/publication-authority-registry.json +72 -2
  24. package/dist/site/publication-registry.json +4 -4
  25. package/dist/site/release-model.json +2 -1
  26. package/dist/site/release-passport-check-manifest.json +1 -0
  27. package/dist/site/release-provenance.json +6 -0
  28. package/dist/site/schemas/release-passport-v1.schema.json +6 -0
  29. package/dist/site/site-manifest.json +21 -13
  30. package/dist/site/workflow-registry.json +167 -13
  31. package/docs/MAP.md +5 -1
  32. package/docs/auditable-demo.md +55 -3
  33. package/docs/binary-distribution.md +7 -0
  34. package/docs/cli.md +9 -0
  35. package/docs/dev-alpha-candidate-patrol.md +111 -0
  36. package/docs/github-artifact-attestation.md +219 -0
  37. package/docs/release-governance.md +32 -0
  38. package/docs/release-passport.md +13 -0
  39. package/docs/reusable-build-surface.md +83 -61
  40. package/docs/runtime-train-validation.md +21 -0
  41. package/docs/versioning.md +1 -0
  42. package/package.json +8 -1
  43. package/packages/core/artifact-signing-result.js +228 -0
  44. package/packages/core/artifact-signing.js +412 -0
  45. package/packages/core/buildchain-config.js +58 -0
  46. package/packages/core/buildchain-contract.js +14 -0
  47. package/packages/core/buildchain-kfd-claims.js +5 -0
  48. package/packages/core/buildchain-publication-authority.js +3 -0
  49. package/packages/core/cache-evidence.js +288 -0
  50. package/packages/core/channel-candidate.js +186 -0
  51. package/packages/core/detached-artifact-signature.js +121 -0
  52. package/packages/core/diagnostics.js +276 -10
  53. package/packages/core/github-artifact-attestation.js +642 -0
  54. package/packages/core/github-governance-authority.js +77 -16
  55. package/packages/core/index.js +62 -0
  56. package/packages/core/publication-authority.js +1 -1
  57. package/packages/core/release-passport-contract.js +2 -0
  58. package/packages/core/release-passport.js +60 -3
  59. package/scripts/auditable-demo.mjs +520 -28
  60. package/scripts/build-contract-core.mjs +31 -0
  61. package/scripts/buildchain-channel-router.mjs +8 -2
  62. package/scripts/check-inventory.mjs +9 -0
  63. package/scripts/create-github-artifact-attestation-policy.mjs +62 -0
  64. package/scripts/dev-alpha-candidate-patrol.mjs +864 -0
  65. package/scripts/dispatch-artifact-signing-authority.mjs +152 -0
  66. package/scripts/finalize-native-artifact-signing-result.mjs +96 -0
  67. package/scripts/generate-channel-promotion-workflow.mjs +6 -0
  68. package/scripts/generate-site-bundle.mjs +20 -0
  69. package/scripts/import-artifact-signing-results.mjs +76 -0
  70. package/scripts/inspect-artifact-signing-requests.mjs +101 -0
  71. package/scripts/locked-source-checkout.mjs +48 -0
  72. package/scripts/materialize-artifact-signing-request.mjs +66 -0
  73. package/scripts/merge-artifact-signing-results.mjs +76 -0
  74. package/scripts/publish-github-artifact-attestation-evidence.mjs +201 -0
  75. package/scripts/reconcile-github-governance.mjs +158 -25
  76. package/scripts/release-candidate-resolver.mjs +12 -0
  77. package/scripts/release-line-policy.mjs +27 -0
  78. package/scripts/runtime-ref-core.mjs +10 -6
  79. package/scripts/seal-artifact-signing-requests.mjs +368 -0
  80. package/scripts/shifu-gate-profile.mjs +26 -20
  81. package/scripts/sign-detached-artifact-requests.mjs +237 -0
  82. package/scripts/stage-github-artifact-attestation-inputs.mjs +65 -0
  83. 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-26T15:42:26.745Z",
5
- "publishedAt": "2026-07-26T15:42:26.745Z",
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": "ed47430f8cadfc327c52004aae9e5ef62aaa6e37",
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.0",
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:fc8f7c63b8427e513f9524b8e22e4b0dcd8981fcc724417a29b942fe237fc0a9"
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:cff9786d4de098c84ea7e494b523627d6431909f15c82940e2193dbda1ef10e9"
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:ed29d25882cbf4ec062abc21e7d069a6377eaf7e3171c24642dfe08da2e4c05b"
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:ae0f8e6cafbb4c39732e6a7252d46b523b0a69e8e05d3ce7ee0b51a916b1b027"
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:47be88f5e5fd14124d03510b807722215034d34eefcebdfe2599a310350b7697"
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:6a739755239e5592299f6f8789cf6f9091350bb945b5db5df11edff3496df026"
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:a77c2bb1d2245e1ee2318f650ad64ada6c8cdd3292a62a028e3ccc7517fb4e12"
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:1315fe264d0e22215183122fc05e287be974751a78268642076898b689e435e6"
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:f3665f2f173bdcb287cf8aa509035164e818b20088849f4a2bce098951c84ea3"
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": 9,
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": 11,
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": 66,
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": 8,
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": 85,
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": 15,
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": 69,
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": 8,
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": 77,
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": 27,
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": 66,
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 |
@@ -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-25
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 distribution
104
- checksums. `render-media: false` does not weaken or skip the Gate.
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