@kungfu-tech/buildchain 2.9.1 → 2.10.0
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/bin/buildchain.mjs +131 -0
- package/dist/site/buildchain-contract.json +6 -6
- package/dist/site/buildchain-site.json +83 -14
- package/dist/site/cli-registry.json +36 -0
- package/dist/site/kfd-claims.json +144 -9
- package/dist/site/manual-registry.json +11 -3
- package/dist/site/node-api-registry.json +16 -5
- package/dist/site/page-registry.json +68 -7
- package/dist/site/public-surface-audit.json +119 -5
- package/dist/site/release-provenance.json +1 -0
- package/dist/site/site-manifest.json +15 -7
- package/docs/MAP.md +2 -0
- package/docs/cli.md +18 -0
- package/docs/kfd-support.md +163 -0
- package/docs/web-surface-deployments.md +9 -9
- package/package.json +2 -1
- package/packages/core/buildchain-kfd-claims.js +19 -0
- package/packages/core/index.js +15 -0
- package/packages/core/kfd3-surface-register.js +705 -0
- package/packages/core/public-surface-audit.js +1 -0
- package/scripts/check-inventory.mjs +14 -0
- package/scripts/generate-site-bundle.mjs +7 -0
- package/scripts/web-surface-core.mjs +0 -71
- package/scripts/web-surface.mjs +82 -28
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
"contract": "kungfu-buildchain-public-surface-reverse-audit",
|
|
4
4
|
"status": "passed",
|
|
5
5
|
"summary": {
|
|
6
|
-
"cliCommandCount":
|
|
6
|
+
"cliCommandCount": 52,
|
|
7
7
|
"workflowCount": 35,
|
|
8
8
|
"actionCount": 4,
|
|
9
|
-
"sitePageCount":
|
|
10
|
-
"docCommandRefCount":
|
|
9
|
+
"sitePageCount": 43,
|
|
10
|
+
"docCommandRefCount": 180,
|
|
11
11
|
"failureCount": 0
|
|
12
12
|
},
|
|
13
13
|
"enumerated": {
|
|
@@ -127,6 +127,36 @@
|
|
|
127
127
|
"source": "bin/buildchain.mjs",
|
|
128
128
|
"usage": "buildchain inspect release --passport <file-or-url> [--json]"
|
|
129
129
|
},
|
|
130
|
+
{
|
|
131
|
+
"id": "kfd-3",
|
|
132
|
+
"source": "bin/buildchain.mjs",
|
|
133
|
+
"usage": "buildchain kfd-3"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"id": "kfd-3-audit",
|
|
137
|
+
"source": "bin/buildchain.mjs",
|
|
138
|
+
"usage": "buildchain kfd-3 audit [--cwd <dir>] [--registry <path>] [--artifact <path>] [--json]"
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"id": "kfd-3-detect",
|
|
142
|
+
"source": "bin/buildchain.mjs",
|
|
143
|
+
"usage": "buildchain kfd-3 detect [--cwd <dir>] [--kind <kind>]... [--artifact <path>] [--json]"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"id": "kfd-3-query",
|
|
147
|
+
"source": "bin/buildchain.mjs",
|
|
148
|
+
"usage": "buildchain kfd-3 query [<product>] [--cwd <dir>] [--registry <path>]"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"id": "kfd-3-register",
|
|
152
|
+
"source": "bin/buildchain.mjs",
|
|
153
|
+
"usage": "buildchain kfd-3 register <node-api|python-api|cli|binary|documentation|site-bundle>"
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"id": "kfd-3-witness",
|
|
157
|
+
"source": "bin/buildchain.mjs",
|
|
158
|
+
"usage": "buildchain kfd-3 witness [--cwd <dir>] [--registry <path>] [--kind prebuild|artifact]"
|
|
159
|
+
},
|
|
130
160
|
{
|
|
131
161
|
"id": "lifecycle",
|
|
132
162
|
"source": "bin/buildchain.mjs",
|
|
@@ -1043,6 +1073,10 @@
|
|
|
1043
1073
|
"id": "manual:install",
|
|
1044
1074
|
"category": "manual"
|
|
1045
1075
|
},
|
|
1076
|
+
{
|
|
1077
|
+
"id": "manual:kfd-support",
|
|
1078
|
+
"category": "manual"
|
|
1079
|
+
},
|
|
1046
1080
|
{
|
|
1047
1081
|
"id": "manual:lifecycle-protocol",
|
|
1048
1082
|
"category": "manual"
|
|
@@ -1536,6 +1570,86 @@
|
|
|
1536
1570
|
"path": "docs/cli.md",
|
|
1537
1571
|
"command": "buildchain inspect release"
|
|
1538
1572
|
},
|
|
1573
|
+
{
|
|
1574
|
+
"id": "kfd-3-audit",
|
|
1575
|
+
"path": "docs/cli.md",
|
|
1576
|
+
"command": "buildchain kfd-3 audit"
|
|
1577
|
+
},
|
|
1578
|
+
{
|
|
1579
|
+
"id": "kfd-3-audit",
|
|
1580
|
+
"path": "docs/kfd-support.md",
|
|
1581
|
+
"command": "buildchain kfd-3 audit"
|
|
1582
|
+
},
|
|
1583
|
+
{
|
|
1584
|
+
"id": "kfd-3-detect",
|
|
1585
|
+
"path": "docs/cli.md",
|
|
1586
|
+
"command": "buildchain kfd-3 detect"
|
|
1587
|
+
},
|
|
1588
|
+
{
|
|
1589
|
+
"id": "kfd-3-detect",
|
|
1590
|
+
"path": "docs/kfd-support.md",
|
|
1591
|
+
"command": "buildchain kfd-3 detect"
|
|
1592
|
+
},
|
|
1593
|
+
{
|
|
1594
|
+
"id": "kfd-3-detect",
|
|
1595
|
+
"path": "docs/kfd-support.md",
|
|
1596
|
+
"command": "buildchain kfd-3 detect"
|
|
1597
|
+
},
|
|
1598
|
+
{
|
|
1599
|
+
"id": "kfd-3-query",
|
|
1600
|
+
"path": "docs/cli.md",
|
|
1601
|
+
"command": "buildchain kfd-3 query"
|
|
1602
|
+
},
|
|
1603
|
+
{
|
|
1604
|
+
"id": "kfd-3-query",
|
|
1605
|
+
"path": "docs/kfd-support.md",
|
|
1606
|
+
"command": "buildchain kfd-3 query"
|
|
1607
|
+
},
|
|
1608
|
+
{
|
|
1609
|
+
"id": "kfd-3-query",
|
|
1610
|
+
"path": "docs/kfd-support.md",
|
|
1611
|
+
"command": "buildchain kfd-3 query"
|
|
1612
|
+
},
|
|
1613
|
+
{
|
|
1614
|
+
"id": "kfd-3-query",
|
|
1615
|
+
"path": "docs/kfd-support.md",
|
|
1616
|
+
"command": "buildchain kfd-3 query"
|
|
1617
|
+
},
|
|
1618
|
+
{
|
|
1619
|
+
"id": "kfd-3-register",
|
|
1620
|
+
"path": "docs/cli.md",
|
|
1621
|
+
"command": "buildchain kfd-3 register"
|
|
1622
|
+
},
|
|
1623
|
+
{
|
|
1624
|
+
"id": "kfd-3-register",
|
|
1625
|
+
"path": "docs/kfd-support.md",
|
|
1626
|
+
"command": "buildchain kfd-3 register"
|
|
1627
|
+
},
|
|
1628
|
+
{
|
|
1629
|
+
"id": "kfd-3-register",
|
|
1630
|
+
"path": "docs/kfd-support.md",
|
|
1631
|
+
"command": "buildchain kfd-3 register"
|
|
1632
|
+
},
|
|
1633
|
+
{
|
|
1634
|
+
"id": "kfd-3-register",
|
|
1635
|
+
"path": "docs/kfd-support.md",
|
|
1636
|
+
"command": "buildchain kfd-3 register"
|
|
1637
|
+
},
|
|
1638
|
+
{
|
|
1639
|
+
"id": "kfd-3-witness",
|
|
1640
|
+
"path": "docs/cli.md",
|
|
1641
|
+
"command": "buildchain kfd-3 witness"
|
|
1642
|
+
},
|
|
1643
|
+
{
|
|
1644
|
+
"id": "kfd-3-witness",
|
|
1645
|
+
"path": "docs/kfd-support.md",
|
|
1646
|
+
"command": "buildchain kfd-3 witness"
|
|
1647
|
+
},
|
|
1648
|
+
{
|
|
1649
|
+
"id": "kfd-3",
|
|
1650
|
+
"path": "docs/cli.md",
|
|
1651
|
+
"command": "buildchain kfd-3"
|
|
1652
|
+
},
|
|
1539
1653
|
{
|
|
1540
1654
|
"id": "lifecycle",
|
|
1541
1655
|
"path": "docs/cli.md",
|
|
@@ -1947,9 +2061,9 @@
|
|
|
1947
2061
|
"cliRegistryPath": "dist/site/cli-registry.json",
|
|
1948
2062
|
"workflowRegistryPath": "dist/site/workflow-registry.json",
|
|
1949
2063
|
"pageRegistryPath": "dist/site/page-registry.json",
|
|
1950
|
-
"cliRegistryDigest": "
|
|
2064
|
+
"cliRegistryDigest": "d86d5cc6f0ef0e711a81edc8dec6178cd3f16f0c46ec4fdadbe8133bdc69789d",
|
|
1951
2065
|
"workflowRegistryDigest": "a53dd3b746f8d697eaa79fb23efcbbeaa6018efb2c3af0d875526ab6bef939ad",
|
|
1952
|
-
"pageRegistryDigest": "
|
|
2066
|
+
"pageRegistryDigest": "9777d75469b33e843a0bd0aa814b45dbdb046ad60393b0aa54782563cb2b9bb7"
|
|
1953
2067
|
},
|
|
1954
2068
|
"comparison": {
|
|
1955
2069
|
"missingCliRegistry": [],
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"./diagnostics": "./packages/core/diagnostics.js",
|
|
18
18
|
"./homebrew": "./packages/core/homebrew.js",
|
|
19
19
|
"./issue-reporting": "./packages/core/issue-reporting.js",
|
|
20
|
+
"./kfd-3-surfaces": "./packages/core/kfd3-surface-register.js",
|
|
20
21
|
"./release-line-bootstrap": "./packages/core/release-line-bootstrap.js",
|
|
21
22
|
"./readme-badges": "./packages/core/readme-badges.js",
|
|
22
23
|
"./public-surface-audit": "./packages/core/public-surface-audit.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-08T04:41:25.510Z",
|
|
5
|
+
"publishedAt": "2026-07-08T04:41:25.510Z",
|
|
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": "95af4dcd440cec6d84a9a352e7aa6677ff580809",
|
|
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.10.0",
|
|
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:3712026dcfcf44c16bc4def2acf246caee1ec036543c0fea265fa17b19d4de31"
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
59
|
"id": "install",
|
|
@@ -165,7 +165,7 @@
|
|
|
165
165
|
"path": "docs/cli.md",
|
|
166
166
|
"plane": "use",
|
|
167
167
|
"exists": true,
|
|
168
|
-
"digest": "sha256:
|
|
168
|
+
"digest": "sha256:85e014b7e053b74b620e5b438d54453e20b22f758a33dfd5ae970403fa41d9d7"
|
|
169
169
|
},
|
|
170
170
|
{
|
|
171
171
|
"id": "build-facts",
|
|
@@ -175,6 +175,14 @@
|
|
|
175
175
|
"exists": true,
|
|
176
176
|
"digest": "sha256:75dcf7a6628dac9e982a455de9966044ae771611d4efc04e7264a2d4adb0bd3e"
|
|
177
177
|
},
|
|
178
|
+
{
|
|
179
|
+
"id": "kfd-support",
|
|
180
|
+
"title": "KFD support and KFD-3 surface registration",
|
|
181
|
+
"path": "docs/kfd-support.md",
|
|
182
|
+
"plane": "verify",
|
|
183
|
+
"exists": true,
|
|
184
|
+
"digest": "sha256:4bb33e408a2129e1534e92bea78d3cc0e4d8f986b0fbb27fe73ae6eae46b9ca3"
|
|
185
|
+
},
|
|
178
186
|
{
|
|
179
187
|
"id": "lifecycle-protocol",
|
|
180
188
|
"title": "Lifecycle protocol",
|
|
@@ -237,7 +245,7 @@
|
|
|
237
245
|
"path": "docs/web-surface-deployments.md",
|
|
238
246
|
"plane": "use",
|
|
239
247
|
"exists": true,
|
|
240
|
-
"digest": "sha256:
|
|
248
|
+
"digest": "sha256:8ba3ab4715844df2d5ca07121cde4875f89be55bb44be27d63bae404611f3112"
|
|
241
249
|
}
|
|
242
250
|
],
|
|
243
251
|
"facts": [
|
package/docs/MAP.md
CHANGED
|
@@ -22,6 +22,7 @@ manuals explain those facts and give operator examples.
|
|
|
22
22
|
| --- | --- | --- |
|
|
23
23
|
| 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) |
|
|
24
24
|
| 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) |
|
|
25
|
+
| KFD-3 surface registration and capability query | `buildchain.kfd3.json`, `dist/site/kfd-claims.json`, `buildchain.release.json` | [`kfd-support.md`](kfd-support.md) |
|
|
25
26
|
| Floating `@v2` drift detection and compatibility issues | `dist/site/buildchain-contract.json` | [`reusable-build-surface.md`](reusable-build-surface.md#floating-ref-contract-lock) |
|
|
26
27
|
| npm publish transactions, evidence, dist-tags, and recovery | `dist/site/release-model.json`, `dist/site/artifact-schemas.json` | [`publish-transaction.md`](publish-transaction.md) |
|
|
27
28
|
| Git/source/version/module/product build facts | `dist/site/node-api-registry.json`, `dist/site/cli-registry.json`, `kungfu-buildchain-module-build-facts`, `kungfu-buildchain-product-build-facts` | [`build-facts.md`](build-facts.md) |
|
|
@@ -62,6 +63,7 @@ replace them.
|
|
|
62
63
|
| 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 |
|
|
63
64
|
| How do I audit public KFD-2 release trust claims? | [`release-passport.md`](release-passport.md#kfd-2-release-trust-passport-audit) + [`cli.md`](cli.md) | verify/use | stable |
|
|
64
65
|
| How do I gate KFD-3 collaboration-interface releases? | [`release-passport.md`](release-passport.md#kfd-3-collaboration-interface-release-gate) + [`cli.md`](cli.md) | verify/use | stable |
|
|
66
|
+
| How do I detect, register, audit, witness, or query KFD-3 product surfaces? | [`kfd-support.md`](kfd-support.md) + [`cli.md`](cli.md) | verify/use | stable |
|
|
65
67
|
| How do I keep `@v2` floating refs while detecting Buildchain contract drift? | [`reusable-build-surface.md`](reusable-build-surface.md#floating-ref-contract-lock) | verify/use | stable |
|
|
66
68
|
| How do I propagate finalized upstream releases to downstream package/site PRs? | [`release-propagation.md`](release-propagation.md) | use | preview |
|
|
67
69
|
| How do I generate KFD / Release Passport badge bundles without hand-maintaining Markdown? | [`readme-badges.md`](readme-badges.md) + [`cli.md`](cli.md) | use | stable |
|
package/docs/cli.md
CHANGED
|
@@ -168,6 +168,24 @@ import {
|
|
|
168
168
|
assertPublicSurfaceReverseAudit(collectPublicSurfaceReverseAudit({ root: process.cwd() }));
|
|
169
169
|
```
|
|
170
170
|
|
|
171
|
+
`buildchain kfd-3` is the product-facing registration and query entrypoint for
|
|
172
|
+
KFD-3 surfaces. It is separate from Buildchain's self reverse audit: products
|
|
173
|
+
can detect standard public surfaces, register the accepted boundary, audit the
|
|
174
|
+
current source or artifact tree, generate a release-passport-compatible witness,
|
|
175
|
+
and expose a capability map for agents:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
buildchain kfd-3 detect --kind node-api --kind cli --json
|
|
179
|
+
buildchain kfd-3 register node-api --product Buildchain
|
|
180
|
+
buildchain kfd-3 audit --json
|
|
181
|
+
buildchain kfd-3 witness --kind prebuild --output .buildchain/kfd-3/collaboration-interface.prebuild.json
|
|
182
|
+
buildchain kfd-3 query buildchain --json
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
The public Node API is exported from
|
|
186
|
+
`@kungfu-tech/buildchain/kfd-3-surfaces`. See [`kfd-support.md`](kfd-support.md)
|
|
187
|
+
for the detected / declared / enforced model and the agent query flow.
|
|
188
|
+
|
|
171
189
|
Lifecycle runs also write a Buildchain observability JSONL log at
|
|
172
190
|
`.buildchain/logs/events.jsonl` by default. Framework events use
|
|
173
191
|
`source=buildchain`; consumer lifecycle commands use `source=user`. This lets a
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# KFD Support
|
|
2
|
+
|
|
3
|
+
Buildchain implements KFD support as release evidence and product capability
|
|
4
|
+
facts, not as README prose. The machine-readable sources are:
|
|
5
|
+
|
|
6
|
+
- `dist/site/kfd-claims.json` for Buildchain-owned public claims and KFD-3
|
|
7
|
+
collaboration surfaces;
|
|
8
|
+
- `dist/site/public-surface-audit.json` for reverse enumeration of exposed CLI,
|
|
9
|
+
workflow, action, site, and documented command surfaces;
|
|
10
|
+
- `buildchain.release.json` for release-specific KFD-1, KFD-2, and KFD-3
|
|
11
|
+
passport results;
|
|
12
|
+
- `buildchain.kfd3.json` for product-owned KFD-3 surface registration.
|
|
13
|
+
|
|
14
|
+
## KFD-1
|
|
15
|
+
|
|
16
|
+
KFD-1 proves that a product release is bound to one contract world. Buildchain
|
|
17
|
+
uses KFD-1 for its runtime contract, release-passport schemas, packaged docs,
|
|
18
|
+
Node exports, workflows, actions, and site-consumption facts.
|
|
19
|
+
|
|
20
|
+
For Buildchain itself, the source registry lives in
|
|
21
|
+
`packages/core/buildchain-kfd-claims.js` and is projected to
|
|
22
|
+
`dist/site/kfd-claims.json`. Release promotion binds that registry to exact
|
|
23
|
+
source and artifact hashes in the release passport.
|
|
24
|
+
|
|
25
|
+
## KFD-2
|
|
26
|
+
|
|
27
|
+
KFD-2 requires public trust claims to be backed by machine-readable evidence.
|
|
28
|
+
Buildchain release passports fail or downgrade claims that only have prose.
|
|
29
|
+
|
|
30
|
+
Every public claim binds:
|
|
31
|
+
|
|
32
|
+
- declared source files;
|
|
33
|
+
- machine-readable evidence;
|
|
34
|
+
- source, evidence, and artifact hashes;
|
|
35
|
+
- artifact coordinates;
|
|
36
|
+
- verification result;
|
|
37
|
+
- audit boundary;
|
|
38
|
+
- responsibility state;
|
|
39
|
+
- residual risk.
|
|
40
|
+
|
|
41
|
+
## KFD-3
|
|
42
|
+
|
|
43
|
+
KFD-3 closes participant-facing collaboration surfaces over a declared public
|
|
44
|
+
interface. Buildchain supports two complementary KFD-3 layers.
|
|
45
|
+
|
|
46
|
+
The first layer is Buildchain self-verification. Buildchain reverse-enumerates
|
|
47
|
+
real CLI commands, reusable workflow inputs, action inputs, site pages, and
|
|
48
|
+
documented command references, then compares those facts with the generated
|
|
49
|
+
registries in `dist/site/`. A missing registry entry fails `pnpm run check`.
|
|
50
|
+
|
|
51
|
+
The second layer is product surface registration. Products can ask Buildchain to
|
|
52
|
+
detect standard public surfaces, write a small product-owned registry, audit the
|
|
53
|
+
registry against the current artifact/source tree, generate a release-passport
|
|
54
|
+
compatible witness, and query the resulting capability map.
|
|
55
|
+
|
|
56
|
+
## Detected, Declared, Enforced
|
|
57
|
+
|
|
58
|
+
KFD-3 surface registration uses three states.
|
|
59
|
+
|
|
60
|
+
| State | Meaning |
|
|
61
|
+
| --- | --- |
|
|
62
|
+
| `detected` | Buildchain found a candidate public surface from package metadata, wheel metadata, CLI bins, binary artifacts, docs, or site bundle facts. |
|
|
63
|
+
| `declared` | The product owner accepted that candidate into `buildchain.kfd3.json`. |
|
|
64
|
+
| `enforced` | The product has promoted a declared surface to a hard release boundary. Missing enforced surfaces fail release verification. |
|
|
65
|
+
|
|
66
|
+
Detection does not silently become product intent. `register` is the boundary
|
|
67
|
+
decision. Existing consumers are unaffected until they opt in.
|
|
68
|
+
|
|
69
|
+
## CLI
|
|
70
|
+
|
|
71
|
+
Detect public surface candidates:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
buildchain kfd-3 detect --json
|
|
75
|
+
buildchain kfd-3 detect --kind node-api --kind cli --json
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Register standard surface classes:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
buildchain kfd-3 register node-api --product Buildchain
|
|
82
|
+
buildchain kfd-3 register cli
|
|
83
|
+
buildchain kfd-3 register python-api --artifact dist/wheel-unpacked
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Audit detected, declared, and enforced surfaces:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
buildchain kfd-3 audit --json
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Generate a witness for release passport collection:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
buildchain kfd-3 witness \
|
|
96
|
+
--kind prebuild \
|
|
97
|
+
--output .buildchain/kfd-3/collaboration-interface.prebuild.json
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Query capability facts for agents or downstream sites:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
buildchain kfd-3 query buildchain --json
|
|
104
|
+
buildchain kfd-3 query --passport buildchain.release.json --json
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Node API
|
|
108
|
+
|
|
109
|
+
The CLI is a thin wrapper over the public Node API:
|
|
110
|
+
|
|
111
|
+
```js
|
|
112
|
+
import {
|
|
113
|
+
auditKfd3Surfaces,
|
|
114
|
+
createKfd3SurfaceWitness,
|
|
115
|
+
detectKfd3Surfaces,
|
|
116
|
+
queryKfd3Capabilities,
|
|
117
|
+
registerKfd3Surfaces,
|
|
118
|
+
} from "@kungfu-tech/buildchain/kfd-3-surfaces";
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Agents should prefer `queryKfd3Capabilities()` when deciding whether a product
|
|
122
|
+
capability is usable. The query result connects each capability to:
|
|
123
|
+
|
|
124
|
+
- KFD-3 surface identity and state;
|
|
125
|
+
- KFD-1 basis facts such as source and artifact paths or digests;
|
|
126
|
+
- KFD-2 trust evidence when a release passport is attached;
|
|
127
|
+
- residual risk and recommended agent action.
|
|
128
|
+
|
|
129
|
+
## Standard Detectors
|
|
130
|
+
|
|
131
|
+
The initial detector set is intentionally conservative:
|
|
132
|
+
|
|
133
|
+
- npm packages: `package.json` `exports`, `main`, `types`, and `bin`;
|
|
134
|
+
- Python wheels: unpacked `.dist-info/METADATA`, `RECORD`,
|
|
135
|
+
`entry_points.txt`, and `top_level.txt`;
|
|
136
|
+
- CLI binaries: `package.json#bin` and files under `bin/`;
|
|
137
|
+
- standalone binaries and archives: common binary/archive outputs under
|
|
138
|
+
artifact directories such as `dist/`;
|
|
139
|
+
- documentation: `README.md`, `AGENTS.md`, and `docs/*.md`;
|
|
140
|
+
- site bundles: `dist/site/*.json`.
|
|
141
|
+
|
|
142
|
+
Python importability alone is not considered public API. A product can extend
|
|
143
|
+
the registry over time, but the first boundary is metadata-based.
|
|
144
|
+
|
|
145
|
+
## Buildchain Self Dogfood
|
|
146
|
+
|
|
147
|
+
Buildchain dogfoods this model in two ways:
|
|
148
|
+
|
|
149
|
+
- `dist/site/kfd-claims.json` declares Buildchain's own KFD-3 collaboration
|
|
150
|
+
surface;
|
|
151
|
+
- `buildchain kfd-3 query buildchain --json` resolves the packaged
|
|
152
|
+
Buildchain capability map from that site fact source.
|
|
153
|
+
|
|
154
|
+
This lets downstream agents discover Buildchain's supported CLI, Node API,
|
|
155
|
+
release passport, workflow, and site bundle surfaces from the npm package
|
|
156
|
+
instead of scraping source files or README examples.
|
|
157
|
+
|
|
158
|
+
## Known Gaps
|
|
159
|
+
|
|
160
|
+
Archive unpacking for `.whl`, `.tar.gz`, `.zip`, and platform-native installers
|
|
161
|
+
is intentionally not part of the first detector. Callers can point
|
|
162
|
+
`--artifact` at an unpacked artifact directory. Future Buildchain versions can
|
|
163
|
+
add archive readers without changing the registry contract.
|
|
@@ -384,15 +384,15 @@ and `pr-29/buildchain/docs/`. This makes surface-host requests for `/` and
|
|
|
384
384
|
`/docs/` resolve to the surface's `index.html` files even when the CloudFront
|
|
385
385
|
origin is an S3 REST origin rather than an S3 website endpoint.
|
|
386
386
|
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
387
|
+
Buildchain does not mutate the shared CloudFront distribution as part of a
|
|
388
|
+
consumer preview apply. In particular, it does not require preview roles to
|
|
389
|
+
update `DefaultRootObject`. Shared distribution and origin-request routing are
|
|
390
|
+
infrastructure prerequisites; the consumer workflow owns only its surface
|
|
391
|
+
payload, prefix alias objects, deployment manifests, invalidations, and health
|
|
392
|
+
checks. If root or nested surface routing still fails, the reusable workflow
|
|
393
|
+
uploads `buildchain-web-surface-*-diagnostics` artifacts containing the apply
|
|
394
|
+
and health JSON so the failing AWS operation or HTTP check is visible from the
|
|
395
|
+
consumer run.
|
|
396
396
|
|
|
397
397
|
It can also execute a previously saved deploy plan. In that mode Buildchain
|
|
398
398
|
recomputes the local artifact hash before running AWS commands and fails closed
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kungfu-tech/buildchain",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.10.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Buildchain Release Passport, release governance, CLI toolkit, and site facts.",
|
|
6
6
|
"repository": "https://github.com/kungfu-systems/buildchain",
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
"./diagnostics": "./packages/core/diagnostics.js",
|
|
21
21
|
"./homebrew": "./packages/core/homebrew.js",
|
|
22
22
|
"./issue-reporting": "./packages/core/issue-reporting.js",
|
|
23
|
+
"./kfd-3-surfaces": "./packages/core/kfd3-surface-register.js",
|
|
23
24
|
"./release-line-bootstrap": "./packages/core/release-line-bootstrap.js",
|
|
24
25
|
"./readme-badges": "./packages/core/readme-badges.js",
|
|
25
26
|
"./public-surface-audit": "./packages/core/public-surface-audit.js",
|
|
@@ -27,6 +27,7 @@ export const BUILDCHAIN_AGENT_MANUALS = Object.freeze([
|
|
|
27
27
|
{ id: "product-mechanism", title: "Product mechanism", path: "docs/product-mechanism.md", plane: "why" },
|
|
28
28
|
{ id: "cli", title: "CLI and npm package", path: "docs/cli.md", plane: "use" },
|
|
29
29
|
{ id: "build-facts", title: "Build Facts", path: "docs/build-facts.md", plane: "use" },
|
|
30
|
+
{ id: "kfd-support", title: "KFD support and KFD-3 surface registration", path: "docs/kfd-support.md", plane: "verify" },
|
|
30
31
|
{ id: "lifecycle-protocol", title: "Lifecycle protocol", path: "docs/lifecycle-protocol.md", plane: "use" },
|
|
31
32
|
{ id: "reusable-build-surface", title: "Reusable build surface", path: "docs/reusable-build-surface.md", plane: "use" },
|
|
32
33
|
{ id: "publish-transaction", title: "Publish transaction", path: "docs/publish-transaction.md", plane: "verify" },
|
|
@@ -60,6 +61,7 @@ const SCHEMA_AND_STANDARD_FILES = Object.freeze([
|
|
|
60
61
|
"packages/core/release-passport.js",
|
|
61
62
|
"packages/core/buildchain-contract.js",
|
|
62
63
|
"packages/core/buildchain-kfd-claims.js",
|
|
64
|
+
"packages/core/kfd3-surface-register.js",
|
|
63
65
|
"packages/core/public-surface-audit.js",
|
|
64
66
|
"dist/site/artifact-schemas.json",
|
|
65
67
|
"dist/site/buildchain-contract.json",
|
|
@@ -80,6 +82,7 @@ const EXTRA_KFD1_FILES = Object.freeze([
|
|
|
80
82
|
"packages/core/index.js",
|
|
81
83
|
"packages/core/homebrew.js",
|
|
82
84
|
"packages/core/build-facts.js",
|
|
85
|
+
"packages/core/kfd3-surface-register.js",
|
|
83
86
|
"packages/core/release-propagation.js",
|
|
84
87
|
"scripts/generate-site-bundle.mjs",
|
|
85
88
|
"scripts/ensure-github-release.mjs",
|
|
@@ -282,6 +285,22 @@ export function createBuildchainPublicClaimDefinitions() {
|
|
|
282
285
|
"dist/site/kfd-claims.json",
|
|
283
286
|
],
|
|
284
287
|
},
|
|
288
|
+
{
|
|
289
|
+
id: "claim:buildchain-kfd-3-surface-registration",
|
|
290
|
+
claim: "Buildchain provides KFD-3 surface detection, registration, audit, witness, and query APIs so products can declare agent-facing public capability surfaces without hand-writing full witness registries.",
|
|
291
|
+
sourcePaths: [
|
|
292
|
+
"packages/core/kfd3-surface-register.js",
|
|
293
|
+
"bin/buildchain.mjs",
|
|
294
|
+
"docs/kfd-support.md",
|
|
295
|
+
"docs/cli.md",
|
|
296
|
+
],
|
|
297
|
+
artifactPaths: [
|
|
298
|
+
"dist/site/cli-registry.json",
|
|
299
|
+
"dist/site/node-api-registry.json",
|
|
300
|
+
"dist/site/kfd-claims.json",
|
|
301
|
+
"dist/site/public-surface-audit.json",
|
|
302
|
+
],
|
|
303
|
+
},
|
|
285
304
|
{
|
|
286
305
|
id: "claim:buildchain-readme-badge-facts",
|
|
287
306
|
claim: "Buildchain README status badges are generated from repository-owned facts and verified release-passport evidence, not hand-maintained README prose.",
|
package/packages/core/index.js
CHANGED
|
@@ -256,6 +256,21 @@ export {
|
|
|
256
256
|
updateHomebrewTap,
|
|
257
257
|
} from "./homebrew.js";
|
|
258
258
|
|
|
259
|
+
export {
|
|
260
|
+
KFD3_CAPABILITY_QUERY_CONTRACT,
|
|
261
|
+
KFD3_DEFAULT_REGISTRY_PATH,
|
|
262
|
+
KFD3_SURFACE_AUDIT_CONTRACT,
|
|
263
|
+
KFD3_SURFACE_DETECTION_CONTRACT,
|
|
264
|
+
KFD3_SURFACE_REGISTRY_CONTRACT,
|
|
265
|
+
auditKfd3Surfaces,
|
|
266
|
+
createKfd3SurfaceWitness,
|
|
267
|
+
detectKfd3Surfaces,
|
|
268
|
+
queryKfd3Capabilities,
|
|
269
|
+
readKfd3SurfaceRegistry,
|
|
270
|
+
registerKfd3Surfaces,
|
|
271
|
+
writeKfd3SurfaceRegistry,
|
|
272
|
+
} from "./kfd3-surface-register.js";
|
|
273
|
+
|
|
259
274
|
export {
|
|
260
275
|
RELEASE_PROPAGATION_GRAPH_CONTRACT,
|
|
261
276
|
RELEASE_PROPAGATION_LOCK_CONTRACT,
|