@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.
- package/actions/promote-buildchain-ref/README.md +13 -0
- package/actions/run-lifecycle/README.md +5 -0
- package/bin/buildchain.mjs +62 -0
- package/dist/site/buildchain-contract.json +50 -25
- package/dist/site/buildchain-site.json +82 -41
- package/dist/site/capability-registry.json +3 -3
- package/dist/site/cli-registry.json +24 -0
- package/dist/site/controller-registry.json +24 -4
- package/dist/site/kfd-claims.json +78 -16
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +10 -10
- package/dist/site/node-api-registry.json +20 -7
- package/dist/site/page-registry.json +68 -27
- package/dist/site/public-surface-audit.json +65 -15
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/release-provenance.json +1 -0
- package/dist/site/site-manifest.json +14 -14
- package/dist/site/workflow-registry.json +25 -9
- package/docs/MAP.md +1 -0
- package/docs/artifact-verification-envelope.md +113 -0
- package/docs/cli.md +22 -0
- package/docs/install.md +1 -3
- package/docs/publication-authority.md +26 -0
- package/docs/publish-transaction.md +1 -1
- package/docs/release-candidate.md +24 -0
- package/docs/release-governance.md +12 -6
- package/docs/release-propagation.md +3 -0
- package/docs/reusable-build-surface.md +13 -0
- package/docs/versioning.md +1 -0
- package/package.json +2 -1
- package/packages/core/README.md +13 -0
- package/packages/core/artifact-passport.js +6 -1
- package/packages/core/artifact-verification-envelope.js +386 -0
- package/packages/core/buildchain-config.js +6 -2
- package/packages/core/controller-evidence.js +2 -3
- package/packages/core/index.js +16 -0
- package/packages/core/publication-authority.js +281 -12
- package/packages/core/release-line-bootstrap.js +24 -0
- package/scripts/assemble-publication-artifact-admission.mjs +10 -0
- package/scripts/assemble-self-publication-admission.mjs +10 -1
- package/scripts/check-inventory.mjs +5 -0
- package/scripts/generate-site-bundle.mjs +4 -0
- package/scripts/release-candidate-resolver.mjs +52 -29
- 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":
|
|
6
|
+
"cliCommandCount": 81,
|
|
7
7
|
"workflowCount": 47,
|
|
8
8
|
"actionCount": 4,
|
|
9
|
-
"sitePageCount":
|
|
10
|
-
"docCommandRefCount":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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": "
|
|
3394
|
-
"workflowRegistryDigest": "
|
|
3395
|
-
"pageRegistryDigest": "
|
|
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-
|
|
5
|
-
"publishedAt": "2026-07-
|
|
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": "
|
|
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.
|
|
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-
|
|
5
|
-
"publishedAt": "2026-07-
|
|
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": "
|
|
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.
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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
|
-
|
|
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,
|