@kungfu-tech/buildchain 3.0.2-alpha.1 → 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 (78) 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 +103 -34
  13. package/dist/site/buildchain-site.json +159 -40
  14. package/dist/site/capability-registry.json +13 -12
  15. package/dist/site/cli-registry.json +12 -0
  16. package/dist/site/controller-registry.json +48 -4
  17. package/dist/site/kfd-claims.json +320 -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 +75 -10
  21. package/dist/site/page-registry.json +135 -25
  22. package/dist/site/public-surface-audit.json +197 -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 +5 -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 +161 -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 +7 -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/channel-candidate.js +186 -0
  50. package/packages/core/detached-artifact-signature.js +121 -0
  51. package/packages/core/github-artifact-attestation.js +642 -0
  52. package/packages/core/github-governance-authority.js +6 -0
  53. package/packages/core/index.js +52 -0
  54. package/packages/core/publication-authority.js +1 -1
  55. package/packages/core/release-passport-contract.js +2 -0
  56. package/packages/core/release-passport.js +60 -3
  57. package/scripts/auditable-demo.mjs +520 -28
  58. package/scripts/build-contract-core.mjs +31 -0
  59. package/scripts/buildchain-channel-router.mjs +8 -2
  60. package/scripts/check-inventory.mjs +9 -0
  61. package/scripts/create-github-artifact-attestation-policy.mjs +62 -0
  62. package/scripts/dev-alpha-candidate-patrol.mjs +864 -0
  63. package/scripts/dispatch-artifact-signing-authority.mjs +152 -0
  64. package/scripts/finalize-native-artifact-signing-result.mjs +96 -0
  65. package/scripts/generate-channel-promotion-workflow.mjs +6 -0
  66. package/scripts/generate-site-bundle.mjs +19 -0
  67. package/scripts/import-artifact-signing-results.mjs +76 -0
  68. package/scripts/inspect-artifact-signing-requests.mjs +101 -0
  69. package/scripts/materialize-artifact-signing-request.mjs +66 -0
  70. package/scripts/merge-artifact-signing-results.mjs +76 -0
  71. package/scripts/publish-github-artifact-attestation-evidence.mjs +201 -0
  72. package/scripts/release-candidate-resolver.mjs +12 -0
  73. package/scripts/release-line-policy.mjs +27 -0
  74. package/scripts/runtime-ref-core.mjs +10 -6
  75. package/scripts/seal-artifact-signing-requests.mjs +368 -0
  76. package/scripts/sign-detached-artifact-requests.mjs +237 -0
  77. package/scripts/stage-github-artifact-attestation-inputs.mjs +65 -0
  78. 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-26T17:45:16.663Z",
5
- "publishedAt": "2026-07-26T17:45:16.663Z",
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": "e2907057b177af48316db8d85549539c61432a4f",
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.1",
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"
@@ -111,6 +114,9 @@
111
114
  "expected-artifacts-json",
112
115
  "fail-fast",
113
116
  "gate-profile-aggregate-json",
117
+ "github-artifact-attestation-platform-id",
118
+ "github-artifact-attestation-signer-sha",
119
+ "github-artifact-attestation-subject-path",
114
120
  "install-command",
115
121
  "kfd-agent-hub",
116
122
  "lifecycle-timeout-minutes",
@@ -144,7 +150,7 @@
144
150
  "verify-command",
145
151
  "working-directory"
146
152
  ],
147
- "inputCount": 69,
153
+ "inputCount": 72,
148
154
  "secrets": [
149
155
  "BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN",
150
156
  "BUILDCHAIN_ARTIFACT_RELAY_S3_ROLE_ARN",
@@ -153,9 +159,10 @@
153
159
  "BUILDCHAIN_MACOS_CERTIFICATE_PASSWORD",
154
160
  "BUILDCHAIN_MACOS_NOTARY_API_ISSUER",
155
161
  "BUILDCHAIN_MACOS_NOTARY_API_KEY_ID",
156
- "BUILDCHAIN_MACOS_NOTARY_API_KEY_P8_BASE64"
162
+ "BUILDCHAIN_MACOS_NOTARY_API_KEY_P8_BASE64",
163
+ "BUILDCHAIN_PROMOTION_TOKEN"
157
164
  ],
158
- "secretCount": 8,
165
+ "secretCount": 9,
159
166
  "outputs": [
160
167
  "artifact-coordinates-json",
161
168
  "build-diagnostics-summary-artifact",
@@ -355,6 +362,9 @@
355
362
  "buildchain-repository",
356
363
  "channel",
357
364
  "dry-run",
365
+ "github-artifact-attestation-environment",
366
+ "github-artifact-attestation-policy-json",
367
+ "github-artifact-attestation-retention-days",
358
368
  "github-governance-receipt-json",
359
369
  "github-release",
360
370
  "github-release-notes",
@@ -428,7 +438,7 @@
428
438
  "target-sha",
429
439
  "trusted-publishing"
430
440
  ],
431
- "inputCount": 85,
441
+ "inputCount": 88,
432
442
  "secrets": [
433
443
  "BUILDCHAIN_ISSUE_APP_ID",
434
444
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
@@ -451,6 +461,10 @@
451
461
  "controller-receipt-digest",
452
462
  "controller-receipt-json",
453
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",
454
468
  "promoted-sha",
455
469
  "publication-capability-digest",
456
470
  "publication-commit-evidence-digest",
@@ -459,7 +473,7 @@
459
473
  "publication-commit-url",
460
474
  "release-candidate-artifact"
461
475
  ],
462
- "outputCount": 15,
476
+ "outputCount": 19,
463
477
  "surface": "reusable-workflow",
464
478
  "capabilityGroup": "api-cli-reference",
465
479
  "status": "active"
@@ -848,6 +862,34 @@
848
862
  "capabilityGroup": "api-cli-reference",
849
863
  "status": "active"
850
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
+ },
851
893
  {
852
894
  "id": "binary-distribution",
853
895
  "path": ".github/workflows/binary-distribution.yml",
@@ -935,6 +977,9 @@
935
977
  "expected-artifacts-json",
936
978
  "fail-fast",
937
979
  "gate-profile-aggregate-json",
980
+ "github-artifact-attestation-platform-id",
981
+ "github-artifact-attestation-signer-sha",
982
+ "github-artifact-attestation-subject-path",
938
983
  "install-command",
939
984
  "kfd-agent-hub",
940
985
  "lifecycle-timeout-minutes",
@@ -968,7 +1013,7 @@
968
1013
  "verify-command",
969
1014
  "working-directory"
970
1015
  ],
971
- "inputCount": 72,
1016
+ "inputCount": 75,
972
1017
  "secrets": [
973
1018
  "BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN",
974
1019
  "BUILDCHAIN_ARTIFACT_RELAY_S3_ROLE_ARN",
@@ -977,9 +1022,10 @@
977
1022
  "BUILDCHAIN_MACOS_CERTIFICATE_PASSWORD",
978
1023
  "BUILDCHAIN_MACOS_NOTARY_API_ISSUER",
979
1024
  "BUILDCHAIN_MACOS_NOTARY_API_KEY_ID",
980
- "BUILDCHAIN_MACOS_NOTARY_API_KEY_P8_BASE64"
1025
+ "BUILDCHAIN_MACOS_NOTARY_API_KEY_P8_BASE64",
1026
+ "BUILDCHAIN_PROMOTION_TOKEN"
981
1027
  ],
982
- "secretCount": 8,
1028
+ "secretCount": 9,
983
1029
  "outputs": [
984
1030
  "artifact-coordinates-json",
985
1031
  "build-diagnostics-summary-artifact",
@@ -1213,6 +1259,44 @@
1213
1259
  "capabilityGroup": "api-cli-reference",
1214
1260
  "status": "active"
1215
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
+ },
1216
1300
  {
1217
1301
  "id": "dev-merge-queue-governance",
1218
1302
  "path": ".github/workflows/dev-merge-queue-governance.yml",
@@ -1264,6 +1348,40 @@
1264
1348
  "capabilityGroup": "governance-versioning",
1265
1349
  "status": "active"
1266
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
+ },
1267
1385
  {
1268
1386
  "id": "github-governance-audit",
1269
1387
  "path": ".github/workflows/github-governance-audit.yml",
@@ -1600,6 +1718,9 @@
1600
1718
  "buildchain-stable-contract-lock-path",
1601
1719
  "channel",
1602
1720
  "dry-run",
1721
+ "github-artifact-attestation-environment",
1722
+ "github-artifact-attestation-policy-json",
1723
+ "github-artifact-attestation-retention-days",
1603
1724
  "github-governance-receipt-json",
1604
1725
  "github-release",
1605
1726
  "github-release-notes",
@@ -1662,7 +1783,7 @@
1662
1783
  "target-sha",
1663
1784
  "trusted-publishing"
1664
1785
  ],
1665
- "inputCount": 77,
1786
+ "inputCount": 80,
1666
1787
  "secrets": [
1667
1788
  "BUILDCHAIN_ISSUE_APP_ID",
1668
1789
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
@@ -1686,6 +1807,10 @@
1686
1807
  "controller-receipt-digest",
1687
1808
  "controller-receipt-json",
1688
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",
1689
1814
  "promoted-sha",
1690
1815
  "promotion-contract-lock-digest",
1691
1816
  "promotion-contract-lock-path",
@@ -1705,7 +1830,7 @@
1705
1830
  "publication-commit-url",
1706
1831
  "release-candidate-artifact"
1707
1832
  ],
1708
- "outputCount": 27,
1833
+ "outputCount": 31,
1709
1834
  "surface": "release-governance",
1710
1835
  "capabilityGroup": "reusable-build",
1711
1836
  "status": "active"
@@ -1900,6 +2025,28 @@
1900
2025
  ],
1901
2026
  "actionSource": "actions/*/action.yml reverse input enumeration",
1902
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
+ },
1903
2050
  {
1904
2051
  "id": "macos-credential-island",
1905
2052
  "path": "actions/macos-credential-island/action.yml",
@@ -1974,6 +2121,7 @@
1974
2121
  "release-passport",
1975
2122
  "release-passport-build-summary-path",
1976
2123
  "release-passport-buildchain-self-kfd",
2124
+ "release-passport-github-artifact-attestation-policy-jsons",
1977
2125
  "release-passport-impact-json",
1978
2126
  "release-passport-invariant-passport-command",
1979
2127
  "release-passport-invariant-passport-jsons",
@@ -2000,7 +2148,7 @@
2000
2148
  "transaction-state-path",
2001
2149
  "verification-command"
2002
2150
  ],
2003
- "inputCount": 66,
2151
+ "inputCount": 67,
2004
2152
  "capabilityGroup": "release-passport-trust",
2005
2153
  "status": "active"
2006
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