@kungfu-tech/buildchain 2.12.9-alpha.1 → 2.13.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/actions/promote-buildchain-ref/README.md +13 -0
  2. package/actions/run-lifecycle/README.md +5 -0
  3. package/bin/buildchain.mjs +62 -0
  4. package/dist/site/buildchain-contract.json +50 -25
  5. package/dist/site/buildchain-site.json +82 -41
  6. package/dist/site/capability-registry.json +3 -3
  7. package/dist/site/cli-registry.json +24 -0
  8. package/dist/site/controller-registry.json +24 -4
  9. package/dist/site/kfd-claims.json +78 -16
  10. package/dist/site/kfd-upstream-aggregate.json +1 -1
  11. package/dist/site/manual-registry.json +10 -10
  12. package/dist/site/node-api-registry.json +20 -7
  13. package/dist/site/page-registry.json +68 -27
  14. package/dist/site/public-surface-audit.json +65 -15
  15. package/dist/site/publication-registry.json +4 -4
  16. package/dist/site/release-provenance.json +1 -0
  17. package/dist/site/site-manifest.json +14 -14
  18. package/dist/site/workflow-registry.json +25 -9
  19. package/docs/MAP.md +1 -0
  20. package/docs/artifact-verification-envelope.md +113 -0
  21. package/docs/cli.md +22 -0
  22. package/docs/install.md +1 -3
  23. package/docs/publication-authority.md +26 -0
  24. package/docs/publish-transaction.md +1 -1
  25. package/docs/release-candidate.md +24 -0
  26. package/docs/release-governance.md +12 -6
  27. package/docs/release-propagation.md +3 -0
  28. package/docs/reusable-build-surface.md +13 -0
  29. package/docs/versioning.md +1 -0
  30. package/package.json +2 -1
  31. package/packages/core/README.md +13 -0
  32. package/packages/core/artifact-passport.js +6 -1
  33. package/packages/core/artifact-verification-envelope.js +386 -0
  34. package/packages/core/buildchain-config.js +6 -2
  35. package/packages/core/controller-evidence.js +2 -3
  36. package/packages/core/index.js +16 -0
  37. package/packages/core/publication-authority.js +281 -12
  38. package/packages/core/release-line-bootstrap.js +24 -0
  39. package/scripts/assemble-publication-artifact-admission.mjs +10 -0
  40. package/scripts/assemble-self-publication-admission.mjs +10 -1
  41. package/scripts/check-inventory.mjs +5 -0
  42. package/scripts/generate-site-bundle.mjs +4 -0
  43. package/scripts/release-candidate-resolver.mjs +52 -29
  44. package/scripts/run-lifecycle-core.mjs +50 -6
@@ -3,11 +3,11 @@
3
3
  "contract": "kungfu-buildchain-public-surface-reverse-audit",
4
4
  "status": "passed",
5
5
  "summary": {
6
- "cliCommandCount": 79,
6
+ "cliCommandCount": 81,
7
7
  "workflowCount": 47,
8
8
  "actionCount": 4,
9
- "sitePageCount": 49,
10
- "docCommandRefCount": 246,
9
+ "sitePageCount": 50,
10
+ "docCommandRefCount": 250,
11
11
  "failureCount": 0
12
12
  },
13
13
  "enumerated": {
@@ -302,6 +302,11 @@
302
302
  "source": "bin/buildchain.mjs",
303
303
  "usage": "buildchain npm dry-run [--cwd <dir>] [--expected-tag <tag>] [--registry <url>]"
304
304
  },
305
+ {
306
+ "id": "project",
307
+ "source": "bin/buildchain.mjs",
308
+ "usage": "buildchain project kfx-admission <file-or-json> [--assessment-time <epoch>]"
309
+ },
305
310
  {
306
311
  "id": "publication-artifact",
307
312
  "source": "bin/buildchain.mjs",
@@ -377,6 +382,11 @@
377
382
  "source": "bin/buildchain.mjs",
378
383
  "usage": "buildchain verify artifact <file|dir|url|npm:...|oci:...|github-release:...>"
379
384
  },
385
+ {
386
+ "id": "verify-artifact-envelope",
387
+ "source": "bin/buildchain.mjs",
388
+ "usage": "buildchain verify artifact-envelope <file-or-json> [--assessment-time <epoch>]"
389
+ },
380
390
  {
381
391
  "id": "verify-infra-contract-evidence-bundle",
382
392
  "source": "bin/buildchain.mjs",
@@ -464,6 +474,7 @@
464
474
  "expected-artifacts-json",
465
475
  "gate-profile-aggregate-json",
466
476
  "install-command",
477
+ "lifecycle-timeout-minutes",
467
478
  "linux-container-image",
468
479
  "linux-container-preset",
469
480
  "node-version",
@@ -494,7 +505,7 @@
494
505
  "verify-command",
495
506
  "working-directory"
496
507
  ],
497
- "inputCount": 58,
508
+ "inputCount": 59,
498
509
  "secrets": [
499
510
  "BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN",
500
511
  "BUILDCHAIN_ARTIFACT_RELAY_S3_ROLE_ARN",
@@ -615,6 +626,9 @@
615
626
  "auto-no-gate",
616
627
  "buildchain-ref",
617
628
  "buildchain-repository",
629
+ "consumer-predicate-digest",
630
+ "consumer-predicate-id",
631
+ "consumer-qualification-required",
618
632
  "control-plane-audit-json",
619
633
  "dry-run",
620
634
  "evidence-controller-artifact",
@@ -638,15 +652,17 @@
638
652
  "target-ref",
639
653
  "used-nonces-json"
640
654
  ],
641
- "inputCount": 29,
655
+ "inputCount": 32,
642
656
  "secrets": [],
643
657
  "secretCount": 0,
644
658
  "outputs": [
645
659
  "capability-artifact",
646
660
  "capability-digest",
647
- "capability-json"
661
+ "capability-json",
662
+ "gate-aggregate-digest",
663
+ "gate-aggregate-json"
648
664
  ],
649
- "outputCount": 3
665
+ "outputCount": 5
650
666
  },
651
667
  {
652
668
  "id": ".release-docker",
@@ -1066,6 +1082,7 @@
1066
1082
  "expected-artifacts-json",
1067
1083
  "gate-profile-aggregate-json",
1068
1084
  "install-command",
1085
+ "lifecycle-timeout-minutes",
1069
1086
  "linux-container-image",
1070
1087
  "linux-container-preset",
1071
1088
  "node-version",
@@ -1096,7 +1113,7 @@
1096
1113
  "verify-command",
1097
1114
  "working-directory"
1098
1115
  ],
1099
- "inputCount": 61,
1116
+ "inputCount": 62,
1100
1117
  "secrets": [
1101
1118
  "BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN",
1102
1119
  "BUILDCHAIN_ARTIFACT_RELAY_S3_ROLE_ARN",
@@ -1603,6 +1620,8 @@
1603
1620
  "publication-admission-json",
1604
1621
  "publication-auto-admission",
1605
1622
  "publication-auto-no-gate",
1623
+ "publication-consumer-predicate-id",
1624
+ "publication-consumer-qualification-command",
1606
1625
  "publication-control-plane-audit-json",
1607
1626
  "publication-expected-json",
1608
1627
  "publication-gate-aggregate-json",
@@ -1612,6 +1631,7 @@
1612
1631
  "publication-runner-provenance-json",
1613
1632
  "publication-target",
1614
1633
  "publication-used-nonces-json",
1634
+ "publication-used-qualification-nonces-json",
1615
1635
  "publish-artifact-kind",
1616
1636
  "publish-command",
1617
1637
  "publish-dist-tag",
@@ -1640,7 +1660,7 @@
1640
1660
  "target-sha",
1641
1661
  "trusted-publishing"
1642
1662
  ],
1643
- "inputCount": 56,
1663
+ "inputCount": 59,
1644
1664
  "secrets": [
1645
1665
  "BUILDCHAIN_ISSUE_APP_ID",
1646
1666
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
@@ -1823,6 +1843,10 @@
1823
1843
  "github-release-notes",
1824
1844
  "github-release-title",
1825
1845
  "promote-only-release-candidate",
1846
+ "publication-capability-json",
1847
+ "publication-gate-aggregate-json",
1848
+ "publication-qualification-receipt-json",
1849
+ "publication-used-qualification-nonces-json",
1826
1850
  "publish-auth",
1827
1851
  "publish-command",
1828
1852
  "publish-dist-tag",
@@ -1855,6 +1879,7 @@
1855
1879
  "release-passport-platform-manifest-paths",
1856
1880
  "release-passport-product-name",
1857
1881
  "require-governance",
1882
+ "require-publication-qualification",
1858
1883
  "require-publish-source-lock",
1859
1884
  "require-version-state",
1860
1885
  "required-status-check",
@@ -1865,7 +1890,7 @@
1865
1890
  "transaction-state-path",
1866
1891
  "verification-command"
1867
1892
  ],
1868
- "inputCount": 54
1893
+ "inputCount": 59
1869
1894
  },
1870
1895
  {
1871
1896
  "id": "report-buildchain-issue",
@@ -1940,9 +1965,10 @@
1940
1965
  "required",
1941
1966
  "sample-process-tree",
1942
1967
  "stage",
1943
- "summary-path"
1968
+ "summary-path",
1969
+ "timeout-minutes"
1944
1970
  ],
1945
- "inputCount": 20
1971
+ "inputCount": 21
1946
1972
  },
1947
1973
  {
1948
1974
  "id": "validate-config",
@@ -2024,6 +2050,10 @@
2024
2050
  "id": "fixture:web-surface-shaped",
2025
2051
  "category": "fixture"
2026
2052
  },
2053
+ {
2054
+ "id": "manual:artifact-verification-envelope",
2055
+ "category": "manual"
2056
+ },
2027
2057
  {
2028
2058
  "id": "manual:binary-distribution",
2029
2059
  "category": "manual"
@@ -3059,6 +3089,16 @@
3059
3089
  "path": "docs/cli.md",
3060
3090
  "command": "buildchain npm dry-run"
3061
3091
  },
3092
+ {
3093
+ "id": "project",
3094
+ "path": "docs/artifact-verification-envelope.md",
3095
+ "command": "buildchain project kfx-admission envelope"
3096
+ },
3097
+ {
3098
+ "id": "project",
3099
+ "path": "docs/cli.md",
3100
+ "command": "buildchain project kfx-admission envelope"
3101
+ },
3062
3102
  {
3063
3103
  "id": "publication-artifact-manifest",
3064
3104
  "path": "docs/cli.md",
@@ -3269,6 +3309,16 @@
3269
3309
  "path": "README.md",
3270
3310
  "command": "buildchain validate --require-version-state npx"
3271
3311
  },
3312
+ {
3313
+ "id": "verify-artifact-envelope",
3314
+ "path": "docs/artifact-verification-envelope.md",
3315
+ "command": "buildchain verify artifact-envelope envelope"
3316
+ },
3317
+ {
3318
+ "id": "verify-artifact-envelope",
3319
+ "path": "docs/cli.md",
3320
+ "command": "buildchain verify artifact-envelope envelope"
3321
+ },
3272
3322
  {
3273
3323
  "id": "verify-artifact",
3274
3324
  "path": "docs/cli.md",
@@ -3390,9 +3440,9 @@
3390
3440
  "cliRegistryPath": "dist/site/cli-registry.json",
3391
3441
  "workflowRegistryPath": "dist/site/workflow-registry.json",
3392
3442
  "pageRegistryPath": "dist/site/page-registry.json",
3393
- "cliRegistryDigest": "a6daf4822365bf576425777230246046ebca67b3f8dcfea61fc7a61773776185",
3394
- "workflowRegistryDigest": "f7906cff65097a4dc0a7e3eb8a13a52415fadae6b6d019646a52867d94903998",
3395
- "pageRegistryDigest": "9bc28515f1e756237c167e9343eed56f6c21823611bd91ebf411630ff4b7c9f3"
3443
+ "cliRegistryDigest": "ff1772371ec74271c21b6723dad0745a080347be8feef36a37e3948ebd19993d",
3444
+ "workflowRegistryDigest": "f4dc70cba95a30b79eadbffc3a4ba5f8d382aae220a7bc13965365c2bbd5e674",
3445
+ "pageRegistryDigest": "f06ce732622727942f855a2e7e9639fb274722fb4bd2ca8e24fc677ffcdf7d5d"
3396
3446
  },
3397
3447
  "comparison": {
3398
3448
  "missingCliRegistry": [],
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "contract": "kungfu-buildchain-publication-release-registry",
4
- "generatedAt": "2026-07-16T02:23:01.656Z",
5
- "publishedAt": "2026-07-16T02:23:01.656Z",
4
+ "generatedAt": "2026-07-16T00:47:22.222Z",
5
+ "publishedAt": "2026-07-16T00:47:22.222Z",
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": "7ab8004aa2c6f99118710b81525f86d38615035b",
22
+ "sourceRevision": "b4ee7448f7de3f9dce8f390db06c26569d3ddefe",
23
23
  "timestampPolicyDetails": {
24
24
  "contract": "kungfu-buildchain-surface-timestamp-policy",
25
25
  "timestampFields": [
@@ -32,7 +32,7 @@
32
32
  },
33
33
  "package": {
34
34
  "name": "@kungfu-tech/buildchain",
35
- "version": "2.12.9-alpha.1",
35
+ "version": "2.13.0-alpha.1",
36
36
  "versionSource": "package.json#version"
37
37
  },
38
38
  "sourceKind": "package-site-bundle",
@@ -13,6 +13,7 @@
13
13
  "./build-facts": "./packages/core/build-facts.js",
14
14
  "./core": "./packages/core/index.js",
15
15
  "./artifact-passport": "./packages/core/artifact-passport.js",
16
+ "./artifact-verification-envelope": "./packages/core/artifact-verification-envelope.js",
16
17
  "./buildchain-contract": "./packages/core/buildchain-contract.js",
17
18
  "./controller-evidence": "./packages/core/controller-evidence.js",
18
19
  "./diagnostics": "./packages/core/diagnostics.js",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "contract": "kungfu-buildchain-site-manifest",
4
- "generatedAt": "2026-07-16T02:23:01.656Z",
5
- "publishedAt": "2026-07-16T02:23:01.656Z",
4
+ "generatedAt": "2026-07-16T00:47:22.222Z",
5
+ "publishedAt": "2026-07-16T00:47:22.222Z",
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": "7ab8004aa2c6f99118710b81525f86d38615035b",
22
+ "sourceRevision": "b4ee7448f7de3f9dce8f390db06c26569d3ddefe",
23
23
  "timestampPolicyDetails": {
24
24
  "contract": "kungfu-buildchain-surface-timestamp-policy",
25
25
  "timestampFields": [
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "package": {
39
39
  "name": "@kungfu-tech/buildchain",
40
- "version": "2.12.9-alpha.1",
40
+ "version": "2.13.0-alpha.1",
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:91dc800bafc31bc149680c86272827936c94e0f025d547bbabc10d58fe5f128e"
56
+ "digest": "sha256:ce439062d4ed9d8213499e607825afdcf8a65f825343a657d0438f3e229a0af0"
57
57
  },
58
58
  {
59
59
  "id": "install",
@@ -61,7 +61,7 @@
61
61
  "path": "docs/install.md",
62
62
  "plane": "use",
63
63
  "exists": true,
64
- "digest": "sha256:1879849c01f82b8820f2d9aeb09faed0931954cb7fe6939176a5eb69110cee59"
64
+ "digest": "sha256:2600738a92b5853bc26d4e01211f0c07b8b36a21d4d72ca809bc6032dff5dc5f"
65
65
  },
66
66
  {
67
67
  "id": "release-passport",
@@ -85,7 +85,7 @@
85
85
  "path": "docs/publication-authority.md",
86
86
  "plane": "verify",
87
87
  "exists": true,
88
- "digest": "sha256:05bc22c7e5885e591bc121fc43f588e5d49ccf0a8de6a642811c1d0d03dcee1e"
88
+ "digest": "sha256:920d4f14902ded1999f46d39f6d02db8cb5be6f22e376f6f2d456b3a1cc0c674"
89
89
  },
90
90
  {
91
91
  "id": "release-candidate",
@@ -93,7 +93,7 @@
93
93
  "path": "docs/release-candidate.md",
94
94
  "plane": "verify",
95
95
  "exists": true,
96
- "digest": "sha256:6a20c6e3e483327d5ccbe70271f7fb4752731bd0523eeddb96f27b2b6ebf1cf8"
96
+ "digest": "sha256:1fc581cf1b4e4a202464c8d6671b3bff12d0b349760246a951e88ef524f99e6b"
97
97
  },
98
98
  {
99
99
  "id": "release-propagation",
@@ -101,7 +101,7 @@
101
101
  "path": "docs/release-propagation.md",
102
102
  "plane": "use",
103
103
  "exists": true,
104
- "digest": "sha256:c8085445fcd0ffd6a55197ac2db1e34fa4aaa94df9107e8e7b216b925fc3bddc"
104
+ "digest": "sha256:55895694a32b76dfaf5ed0eb9e32f1e10bd859fb590d6f4504d36692ebe61ea9"
105
105
  },
106
106
  {
107
107
  "id": "readme-badges",
@@ -189,7 +189,7 @@
189
189
  "path": "docs/cli.md",
190
190
  "plane": "use",
191
191
  "exists": true,
192
- "digest": "sha256:3b3ac97c353f7549229f1102cca38236e734ec8d08c219d4a6e5ef2a48fc0e16"
192
+ "digest": "sha256:ef5be4484da8628b9e027f00fe0fdb5b295665ed23eeceefac48e63581f12c0c"
193
193
  },
194
194
  {
195
195
  "id": "build-facts",
@@ -221,7 +221,7 @@
221
221
  "path": "docs/reusable-build-surface.md",
222
222
  "plane": "use",
223
223
  "exists": true,
224
- "digest": "sha256:6916d88ae0f25fa129308354b04d339552b72796d4d7d7938015e0e2f4dcaa6a"
224
+ "digest": "sha256:a2092c8064332cec9a4be852b24d94f90625cb45f885c4c3208f7068a643a3f0"
225
225
  },
226
226
  {
227
227
  "id": "publish-transaction",
@@ -229,7 +229,7 @@
229
229
  "path": "docs/publish-transaction.md",
230
230
  "plane": "verify",
231
231
  "exists": true,
232
- "digest": "sha256:9e77030dbd69e27c2402d855980f7560a465270cac1f3225c0470523ab4a8ddf"
232
+ "digest": "sha256:8d5d7075cf8b4280a4c5097726f5c51ae40db83e2652eafefe4fa5e487794f57"
233
233
  },
234
234
  {
235
235
  "id": "release-governance",
@@ -237,7 +237,7 @@
237
237
  "path": "docs/release-governance.md",
238
238
  "plane": "why",
239
239
  "exists": true,
240
- "digest": "sha256:d85ac78b7c73b85b0a59a4a39131230522ae65225fa1b52f9dfe6939f1bb839c"
240
+ "digest": "sha256:82160f0fd9e45f08dbfbaf8037e0895cbeecf251feca8bdaff607dcc030b3e28"
241
241
  },
242
242
  {
243
243
  "id": "release-flow",
@@ -261,7 +261,7 @@
261
261
  "path": "docs/versioning.md",
262
262
  "plane": "why",
263
263
  "exists": true,
264
- "digest": "sha256:400027d5e34d5c22752f7664bb9ca9ce99c04e7be298183d0303f3fb04fa7747"
264
+ "digest": "sha256:280d30e15552ab6a362cb121a7a1cafc3b907913cdc7d4d8a9e8e1930d856f7e"
265
265
  },
266
266
  {
267
267
  "id": "web-surface-deployments",
@@ -61,6 +61,7 @@
61
61
  "expected-artifacts-json",
62
62
  "gate-profile-aggregate-json",
63
63
  "install-command",
64
+ "lifecycle-timeout-minutes",
64
65
  "linux-container-image",
65
66
  "linux-container-preset",
66
67
  "node-version",
@@ -91,7 +92,7 @@
91
92
  "verify-command",
92
93
  "working-directory"
93
94
  ],
94
- "inputCount": 58,
95
+ "inputCount": 59,
95
96
  "secrets": [
96
97
  "BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN",
97
98
  "BUILDCHAIN_ARTIFACT_RELAY_S3_ROLE_ARN",
@@ -221,6 +222,9 @@
221
222
  "auto-no-gate",
222
223
  "buildchain-ref",
223
224
  "buildchain-repository",
225
+ "consumer-predicate-digest",
226
+ "consumer-predicate-id",
227
+ "consumer-qualification-required",
224
228
  "control-plane-audit-json",
225
229
  "dry-run",
226
230
  "evidence-controller-artifact",
@@ -244,15 +248,17 @@
244
248
  "target-ref",
245
249
  "used-nonces-json"
246
250
  ],
247
- "inputCount": 29,
251
+ "inputCount": 32,
248
252
  "secrets": [],
249
253
  "secretCount": 0,
250
254
  "outputs": [
251
255
  "capability-artifact",
252
256
  "capability-digest",
253
- "capability-json"
257
+ "capability-json",
258
+ "gate-aggregate-digest",
259
+ "gate-aggregate-json"
254
260
  ],
255
- "outputCount": 3,
261
+ "outputCount": 5,
256
262
  "surface": "reusable-workflow",
257
263
  "capabilityGroup": "api-cli-reference",
258
264
  "status": "active"
@@ -717,6 +723,7 @@
717
723
  "expected-artifacts-json",
718
724
  "gate-profile-aggregate-json",
719
725
  "install-command",
726
+ "lifecycle-timeout-minutes",
720
727
  "linux-container-image",
721
728
  "linux-container-preset",
722
729
  "node-version",
@@ -747,7 +754,7 @@
747
754
  "verify-command",
748
755
  "working-directory"
749
756
  ],
750
- "inputCount": 61,
757
+ "inputCount": 62,
751
758
  "secrets": [
752
759
  "BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN",
753
760
  "BUILDCHAIN_ARTIFACT_RELAY_S3_ROLE_ARN",
@@ -1311,6 +1318,8 @@
1311
1318
  "publication-admission-json",
1312
1319
  "publication-auto-admission",
1313
1320
  "publication-auto-no-gate",
1321
+ "publication-consumer-predicate-id",
1322
+ "publication-consumer-qualification-command",
1314
1323
  "publication-control-plane-audit-json",
1315
1324
  "publication-expected-json",
1316
1325
  "publication-gate-aggregate-json",
@@ -1320,6 +1329,7 @@
1320
1329
  "publication-runner-provenance-json",
1321
1330
  "publication-target",
1322
1331
  "publication-used-nonces-json",
1332
+ "publication-used-qualification-nonces-json",
1323
1333
  "publish-artifact-kind",
1324
1334
  "publish-command",
1325
1335
  "publish-dist-tag",
@@ -1348,7 +1358,7 @@
1348
1358
  "target-sha",
1349
1359
  "trusted-publishing"
1350
1360
  ],
1351
- "inputCount": 56,
1361
+ "inputCount": 59,
1352
1362
  "secrets": [
1353
1363
  "BUILDCHAIN_ISSUE_APP_ID",
1354
1364
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
@@ -1559,6 +1569,10 @@
1559
1569
  "github-release-notes",
1560
1570
  "github-release-title",
1561
1571
  "promote-only-release-candidate",
1572
+ "publication-capability-json",
1573
+ "publication-gate-aggregate-json",
1574
+ "publication-qualification-receipt-json",
1575
+ "publication-used-qualification-nonces-json",
1562
1576
  "publish-auth",
1563
1577
  "publish-command",
1564
1578
  "publish-dist-tag",
@@ -1591,6 +1605,7 @@
1591
1605
  "release-passport-platform-manifest-paths",
1592
1606
  "release-passport-product-name",
1593
1607
  "require-governance",
1608
+ "require-publication-qualification",
1594
1609
  "require-publish-source-lock",
1595
1610
  "require-version-state",
1596
1611
  "required-status-check",
@@ -1601,7 +1616,7 @@
1601
1616
  "transaction-state-path",
1602
1617
  "verification-command"
1603
1618
  ],
1604
- "inputCount": 54,
1619
+ "inputCount": 59,
1605
1620
  "capabilityGroup": "release-passport-trust",
1606
1621
  "status": "active"
1607
1622
  },
@@ -1680,9 +1695,10 @@
1680
1695
  "required",
1681
1696
  "sample-process-tree",
1682
1697
  "stage",
1683
- "summary-path"
1698
+ "summary-path",
1699
+ "timeout-minutes"
1684
1700
  ],
1685
- "inputCount": 20,
1701
+ "inputCount": 21,
1686
1702
  "capabilityGroup": "reusable-build",
1687
1703
  "status": "active"
1688
1704
  },
package/docs/MAP.md CHANGED
@@ -81,6 +81,7 @@ replace them.
81
81
  | How does publish evidence, recovery, and finalization work? | [`publish-transaction.md`](publish-transaction.md) | verify | stable |
82
82
  | 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 |
83
83
  | How do I publish or verify release passport artifacts? | [`release-passport.md`](release-passport.md) | use | stable |
84
+ | 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 |
84
85
  | How is product publication authority sealed to an exact workflow, runner, control plane, nonce, and artifact? | [`publication-authority.md`](publication-authority.md) | verify | preview |
85
86
  | How do I gate release artifacts with KFD-1 contract-world witnesses? | [`release-passport.md`](release-passport.md#kfd-1-contract-world-release-gate) | verify/use | stable |
86
87
  | How do I declare, render, and audit product KFD-2 release trust claims? | [`kfd-support.md`](kfd-support.md#kfd-2) + [`release-passport.md`](release-passport.md#kfd-2-release-trust-passport-audit) + [`cli.md`](cli.md) | verify/use | stable |
@@ -0,0 +1,113 @@
1
+ # Artifact Verification Envelope
2
+
3
+ Buildchain can turn a passing exact-artifact passport verification into one
4
+ sealed, versioned input for Kungfu KFX admission. The envelope carries the
5
+ public verification result together with exact package, source, dependency,
6
+ build-plan, toolchain, artifact, qualification, and verifier roots; issuer and
7
+ publisher identity; lifecycle and revocation facts; and an existing ADR-0052
8
+ KFD assessment.
9
+
10
+ The envelope does not create a second KFD evaluator. It validates and binds an
11
+ assessment produced by the Kungfu KFD lifecycle. It also does not claim that an
12
+ artifact is malware-free, universally safe, fit for every workspace, or
13
+ authorized as a Product System component.
14
+
15
+ ## Public API
16
+
17
+ Import the dedicated package subpath:
18
+
19
+ ```js
20
+ import {
21
+ projectArtifactVerificationEnvelopeToKfx,
22
+ sealArtifactVerificationReport,
23
+ verifyArtifactVerificationEnvelope,
24
+ } from "@kungfu-tech/buildchain/artifact-verification-envelope";
25
+ ```
26
+
27
+ `verifyArtifactPassport` also accepts an optional `verificationEnvelope`
28
+ object. Existing callers that omit it receive the unchanged
29
+ `kungfu-buildchain-artifact-verification` v1 result.
30
+
31
+ ```js
32
+ const attestation = await verifyArtifactPassport({
33
+ subject: "dist/example.kfx",
34
+ passportLocation: "dist/buildchain.release.json",
35
+ verificationEnvelope: {
36
+ bindings,
37
+ kfdAssessment,
38
+ issuedAt,
39
+ expiresAt,
40
+ revocation,
41
+ },
42
+ });
43
+ ```
44
+
45
+ The result keeps the artifact-verification v1 fields that existing consumers
46
+ understand and adds:
47
+
48
+ - `bindings`: the schema-closed `kungfu.kfx-trust-inputs/v1` exact roots and
49
+ identities;
50
+ - `issuedAt`, `expiresAt`, `revoked`, and a root-bound `revocation` fact;
51
+ - `kfdAssessment`: the pinned fresh `kungfu.trust.assessment/v1` lifecycle
52
+ result;
53
+ - `envelope`: the envelope contract, canonicalization version, and exact
54
+ content root.
55
+
56
+ `projectArtifactVerificationEnvelopeToKfx` returns the same sealed report as
57
+ `attestation`, its exact `bindings` as `trustInputs`, and its existing
58
+ `kfdAssessment`. A consumer does not reconstruct fields, recompute the KFD
59
+ decision, or inspect private Buildchain structures.
60
+
61
+ The read-only CLI uses those same functions for portable verification and
62
+ projection:
63
+
64
+ ```bash
65
+ buildchain verify artifact-envelope envelope.json \
66
+ --assessment-time 150 \
67
+ --expected-root sha256:... \
68
+ --expected-issuer buildchain.libkungfu.dev \
69
+ --expected-publisher kungfu-systems \
70
+ --expected-contract buildchain.release/v1 \
71
+ --json
72
+
73
+ buildchain project kfx-admission envelope.json \
74
+ --assessment-time 150 \
75
+ --json
76
+ ```
77
+
78
+ The projection's `envelopeRoot` is the same root returned by the Node verifier.
79
+ The CLI never adds consumer-side bindings or KFD conclusions.
80
+
81
+ ## Canonicalization and roots
82
+
83
+ The v1 envelope uses `buildchain-stable-json/v1`: object keys are sorted
84
+ recursively, array order is retained, and the root is lowercase SHA-256 with a
85
+ `sha256:` prefix. `envelope.root` is excluded from its own root basis.
86
+
87
+ The KFD report hash is independently recomputed over the report with
88
+ `report_hash` removed. The envelope is accepted only when:
89
+
90
+ - the base artifact passport verification passes;
91
+ - `bindings.artifactRoot` equals both the exact subject digest and the matched
92
+ passport artifact digest;
93
+ - every binding root is canonical lowercase SHA-256;
94
+ - `bindings.qualificationRoot` equals the recomputed KFD `report_hash`;
95
+ - the assessment key matches the report and its lifecycle state is `fresh`;
96
+ - the report binds purpose, query proof, contract world, policy, and at least
97
+ one fact-surface root;
98
+ - lifecycle bounds are active and revocation facts are internally consistent;
99
+ - any caller-pinned envelope root, issuer, publisher, or contract version
100
+ matches exactly.
101
+
102
+ ## Fail-closed behavior
103
+
104
+ `verifyArtifactVerificationEnvelope` returns a machine-readable check report.
105
+ It rejects sibling artifacts, root tampering, identity drift, invalid contract
106
+ versions, expired or revoked envelopes, stale assessments, altered KFD report
107
+ content, and missing fact-surface bindings. Callers may pin expected authority
108
+ fields without changing the envelope.
109
+
110
+ The canonical root detects changed serialized content; authenticity still
111
+ depends on the pinned Buildchain verifier and release passport authority. The
112
+ envelope is supply-chain and evidence input. Kungfu Product and Workspace
113
+ policy retain operation, capability, and System-role authority.
package/docs/cli.md CHANGED
@@ -674,6 +674,28 @@ files, directories, and URLs are digestable directly; remote package, OCI,
674
674
  object storage, and deployment subjects should provide a digest or resolve to a
675
675
  locator that records one.
676
676
 
677
+ Seal an exact artifact verification with the Node API, then verify or project
678
+ the resulting KFX admission envelope without reconstructing its roots:
679
+
680
+ ```bash
681
+ buildchain verify artifact-envelope envelope.json \
682
+ --assessment-time 150 \
683
+ --expected-root sha256:... \
684
+ --expected-issuer buildchain.libkungfu.dev \
685
+ --expected-publisher kungfu-systems \
686
+ --expected-contract buildchain.release/v1 \
687
+ --json
688
+
689
+ buildchain project kfx-admission envelope.json \
690
+ --assessment-time 150 \
691
+ --json
692
+ ```
693
+
694
+ Both commands call the public artifact-verification-envelope verifier. The
695
+ projected `attestation`, `trustInputs`, and `kfdAssessment` are direct copies of
696
+ the sealed envelope, and `envelopeRoot` stays identical across Node and CLI.
697
+ See [`artifact-verification-envelope.md`](artifact-verification-envelope.md).
698
+
677
699
  Verify infra-contract lifecycle evidence bundles:
678
700
 
679
701
  ```bash
package/docs/install.md CHANGED
@@ -51,9 +51,7 @@ npx buildchain version
51
51
  npx buildchain doctor --json
52
52
  ```
53
53
 
54
- The highest alpha minor publishes to the `alpha` npm dist-tag; older maintenance
55
- minor alphas use `vX.Y-alpha` so they cannot roll the global alpha channel back.
56
- Stable releases publish to
54
+ Alpha releases publish to the `alpha` npm dist-tag. Stable releases publish to
57
55
  `latest`. Both are created by the protected Buildchain promotion transaction.
58
56
 
59
57
  Stable consumers should pin the exact Buildchain version they have validated,