@kungfu-tech/buildchain 2.10.2 → 2.10.3
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/dist/site/agent-index.json +1 -0
- package/dist/site/artifact-schemas.json +1 -0
- package/dist/site/buildchain-contract.json +4 -4
- package/dist/site/buildchain-site.json +296 -16
- package/dist/site/capability-registry.json +302 -0
- package/dist/site/cli-registry.json +364 -52
- package/dist/site/kfd-claims.json +27 -3
- package/dist/site/manual-registry.json +210 -25
- package/dist/site/node-api-registry.json +162 -22
- package/dist/site/page-registry.json +273 -8
- package/dist/site/public-surface-audit.json +3 -3
- package/dist/site/release-provenance.json +1 -0
- package/dist/site/site-manifest.json +17 -8
- package/dist/site/workflow-registry.json +39 -0
- package/docs/MAP.md +19 -0
- package/docs/cli.md +5 -0
- package/docs/site-bundle-contract.md +9 -0
- package/docs/web-surface-deployments.md +18 -0
- package/package.json +2 -1
- package/packages/core/buildchain-kfd-claims.js +3 -0
- package/scripts/check-inventory.mjs +43 -2
- package/scripts/generate-site-bundle.mjs +352 -59
- package/scripts/web-surface-core.mjs +147 -0
- package/scripts/web-surface.mjs +16 -1
|
@@ -2061,9 +2061,9 @@
|
|
|
2061
2061
|
"cliRegistryPath": "dist/site/cli-registry.json",
|
|
2062
2062
|
"workflowRegistryPath": "dist/site/workflow-registry.json",
|
|
2063
2063
|
"pageRegistryPath": "dist/site/page-registry.json",
|
|
2064
|
-
"cliRegistryDigest": "
|
|
2065
|
-
"workflowRegistryDigest": "
|
|
2066
|
-
"pageRegistryDigest": "
|
|
2064
|
+
"cliRegistryDigest": "281c186e9dbdf45e55e8afcd59cfee66518f42c146d1b79dfd8837048c00bec8",
|
|
2065
|
+
"workflowRegistryDigest": "b24b2a68ae83941cbb6a719a62b4eafbd0f5e859e5810ae766ce9a5db69ddfae",
|
|
2066
|
+
"pageRegistryDigest": "c3be81db06f3a183ce53cd0e9199b88be9c8b1d615c395f7fdbfac139796c455"
|
|
2067
2067
|
},
|
|
2068
2068
|
"comparison": {
|
|
2069
2069
|
"missingCliRegistry": [],
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"./site/buildchain-site.json": "./dist/site/buildchain-site.json",
|
|
32
32
|
"./site/site-manifest.json": "./dist/site/site-manifest.json",
|
|
33
33
|
"./site/page-registry.json": "./dist/site/page-registry.json",
|
|
34
|
+
"./site/capability-registry.json": "./dist/site/capability-registry.json",
|
|
34
35
|
"./site/cli-registry.json": "./dist/site/cli-registry.json",
|
|
35
36
|
"./site/manual-registry.json": "./dist/site/manual-registry.json",
|
|
36
37
|
"./site/node-api-registry.json": "./dist/site/node-api-registry.json",
|
|
@@ -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-08T10:30:54.924Z",
|
|
5
|
+
"publishedAt": "2026-07-08T10:30:54.924Z",
|
|
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": "c01d56a7410ded5f631a83950227873cef32c37b",
|
|
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.10.
|
|
40
|
+
"version": "2.10.3",
|
|
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:67a0e6b63a943904eacbf7d26227e3c9ad650d17e8aa937c40b3fdad8f389fdd"
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
59
|
"id": "install",
|
|
@@ -71,6 +71,14 @@
|
|
|
71
71
|
"exists": true,
|
|
72
72
|
"digest": "sha256:75d8bade4b0b96b26941b11835c2debcdada8f1723412935fb8ae6884f08f9f3"
|
|
73
73
|
},
|
|
74
|
+
{
|
|
75
|
+
"id": "release-candidate",
|
|
76
|
+
"title": "Release Candidate Passport",
|
|
77
|
+
"path": "docs/release-candidate.md",
|
|
78
|
+
"plane": "verify",
|
|
79
|
+
"exists": true,
|
|
80
|
+
"digest": "sha256:6b5107cded122925e8560a9b117ff1c96f5cf05d934caf83d7e4b2a4d777175e"
|
|
81
|
+
},
|
|
74
82
|
{
|
|
75
83
|
"id": "release-propagation",
|
|
76
84
|
"title": "Release propagation",
|
|
@@ -133,7 +141,7 @@
|
|
|
133
141
|
"path": "docs/site-bundle-contract.md",
|
|
134
142
|
"plane": "use",
|
|
135
143
|
"exists": true,
|
|
136
|
-
"digest": "sha256:
|
|
144
|
+
"digest": "sha256:6b5bc2ee0f785b16d762f140f14a9163c07caf0d424200c2ececc74f7bb2271c"
|
|
137
145
|
},
|
|
138
146
|
{
|
|
139
147
|
"id": "migration-inventory",
|
|
@@ -165,7 +173,7 @@
|
|
|
165
173
|
"path": "docs/cli.md",
|
|
166
174
|
"plane": "use",
|
|
167
175
|
"exists": true,
|
|
168
|
-
"digest": "sha256:
|
|
176
|
+
"digest": "sha256:2f55874feb9acecce1c471b96e07bb9a198a8da93efd0f859d69f353bf9c36a8"
|
|
169
177
|
},
|
|
170
178
|
{
|
|
171
179
|
"id": "build-facts",
|
|
@@ -245,11 +253,12 @@
|
|
|
245
253
|
"path": "docs/web-surface-deployments.md",
|
|
246
254
|
"plane": "use",
|
|
247
255
|
"exists": true,
|
|
248
|
-
"digest": "sha256:
|
|
256
|
+
"digest": "sha256:58673b84879a219572fe39aa8b4d01cfc34fabf664b3318753d61043821edaff"
|
|
249
257
|
}
|
|
250
258
|
],
|
|
251
259
|
"facts": [
|
|
252
260
|
"page-registry.json",
|
|
261
|
+
"capability-registry.json",
|
|
253
262
|
"cli-registry.json",
|
|
254
263
|
"manual-registry.json",
|
|
255
264
|
"node-api-registry.json",
|
|
@@ -58,6 +58,7 @@
|
|
|
58
58
|
],
|
|
59
59
|
"inputCount": 48,
|
|
60
60
|
"surface": "reusable-workflow",
|
|
61
|
+
"capabilityGroup": "api-cli-reference",
|
|
61
62
|
"status": "active"
|
|
62
63
|
},
|
|
63
64
|
{
|
|
@@ -66,6 +67,7 @@
|
|
|
66
67
|
"inputs": [],
|
|
67
68
|
"inputCount": 0,
|
|
68
69
|
"surface": "reusable-workflow",
|
|
70
|
+
"capabilityGroup": "api-cli-reference",
|
|
69
71
|
"status": "active"
|
|
70
72
|
},
|
|
71
73
|
{
|
|
@@ -76,6 +78,7 @@
|
|
|
76
78
|
],
|
|
77
79
|
"inputCount": 1,
|
|
78
80
|
"surface": "reusable-workflow",
|
|
81
|
+
"capabilityGroup": "api-cli-reference",
|
|
79
82
|
"status": "active"
|
|
80
83
|
},
|
|
81
84
|
{
|
|
@@ -88,6 +91,7 @@
|
|
|
88
91
|
],
|
|
89
92
|
"inputCount": 3,
|
|
90
93
|
"surface": "reusable-workflow",
|
|
94
|
+
"capabilityGroup": "api-cli-reference",
|
|
91
95
|
"status": "active"
|
|
92
96
|
},
|
|
93
97
|
{
|
|
@@ -124,6 +128,7 @@
|
|
|
124
128
|
],
|
|
125
129
|
"inputCount": 27,
|
|
126
130
|
"surface": "reusable-workflow",
|
|
131
|
+
"capabilityGroup": "api-cli-reference",
|
|
127
132
|
"status": "active"
|
|
128
133
|
},
|
|
129
134
|
{
|
|
@@ -174,6 +179,7 @@
|
|
|
174
179
|
],
|
|
175
180
|
"inputCount": 41,
|
|
176
181
|
"surface": "reusable-workflow",
|
|
182
|
+
"capabilityGroup": "api-cli-reference",
|
|
177
183
|
"status": "active"
|
|
178
184
|
},
|
|
179
185
|
{
|
|
@@ -187,6 +193,7 @@
|
|
|
187
193
|
],
|
|
188
194
|
"inputCount": 4,
|
|
189
195
|
"surface": "reusable-workflow",
|
|
196
|
+
"capabilityGroup": "api-cli-reference",
|
|
190
197
|
"status": "active"
|
|
191
198
|
},
|
|
192
199
|
{
|
|
@@ -200,6 +207,7 @@
|
|
|
200
207
|
],
|
|
201
208
|
"inputCount": 4,
|
|
202
209
|
"surface": "reusable-workflow",
|
|
210
|
+
"capabilityGroup": "api-cli-reference",
|
|
203
211
|
"status": "active"
|
|
204
212
|
},
|
|
205
213
|
{
|
|
@@ -222,6 +230,7 @@
|
|
|
222
230
|
],
|
|
223
231
|
"inputCount": 13,
|
|
224
232
|
"surface": "reusable-workflow",
|
|
233
|
+
"capabilityGroup": "api-cli-reference",
|
|
225
234
|
"status": "active"
|
|
226
235
|
},
|
|
227
236
|
{
|
|
@@ -235,6 +244,7 @@
|
|
|
235
244
|
],
|
|
236
245
|
"inputCount": 4,
|
|
237
246
|
"surface": "reusable-workflow",
|
|
247
|
+
"capabilityGroup": "api-cli-reference",
|
|
238
248
|
"status": "active"
|
|
239
249
|
},
|
|
240
250
|
{
|
|
@@ -272,6 +282,7 @@
|
|
|
272
282
|
],
|
|
273
283
|
"inputCount": 28,
|
|
274
284
|
"surface": "reusable-workflow",
|
|
285
|
+
"capabilityGroup": "api-cli-reference",
|
|
275
286
|
"status": "active"
|
|
276
287
|
},
|
|
277
288
|
{
|
|
@@ -284,6 +295,7 @@
|
|
|
284
295
|
],
|
|
285
296
|
"inputCount": 3,
|
|
286
297
|
"surface": "reusable-workflow",
|
|
298
|
+
"capabilityGroup": "api-cli-reference",
|
|
287
299
|
"status": "active"
|
|
288
300
|
},
|
|
289
301
|
{
|
|
@@ -298,6 +310,7 @@
|
|
|
298
310
|
],
|
|
299
311
|
"inputCount": 5,
|
|
300
312
|
"surface": "reusable-workflow",
|
|
313
|
+
"capabilityGroup": "api-cli-reference",
|
|
301
314
|
"status": "active"
|
|
302
315
|
},
|
|
303
316
|
{
|
|
@@ -309,6 +322,7 @@
|
|
|
309
322
|
],
|
|
310
323
|
"inputCount": 2,
|
|
311
324
|
"surface": "release-passport",
|
|
325
|
+
"capabilityGroup": "api-cli-reference",
|
|
312
326
|
"status": "active"
|
|
313
327
|
},
|
|
314
328
|
{
|
|
@@ -319,6 +333,7 @@
|
|
|
319
333
|
],
|
|
320
334
|
"inputCount": 1,
|
|
321
335
|
"surface": "repository-workflow",
|
|
336
|
+
"capabilityGroup": "api-cli-reference",
|
|
322
337
|
"status": "repository-internal"
|
|
323
338
|
},
|
|
324
339
|
{
|
|
@@ -330,6 +345,7 @@
|
|
|
330
345
|
],
|
|
331
346
|
"inputCount": 2,
|
|
332
347
|
"surface": "repository-patrol",
|
|
348
|
+
"capabilityGroup": "governance-versioning",
|
|
333
349
|
"status": "active"
|
|
334
350
|
},
|
|
335
351
|
{
|
|
@@ -341,6 +357,7 @@
|
|
|
341
357
|
],
|
|
342
358
|
"inputCount": 2,
|
|
343
359
|
"surface": "repository-patrol",
|
|
360
|
+
"capabilityGroup": "governance-versioning",
|
|
344
361
|
"status": "active"
|
|
345
362
|
},
|
|
346
363
|
{
|
|
@@ -352,6 +369,7 @@
|
|
|
352
369
|
],
|
|
353
370
|
"inputCount": 2,
|
|
354
371
|
"surface": "repository-patrol",
|
|
372
|
+
"capabilityGroup": "governance-versioning",
|
|
355
373
|
"status": "active"
|
|
356
374
|
},
|
|
357
375
|
{
|
|
@@ -376,6 +394,7 @@
|
|
|
376
394
|
],
|
|
377
395
|
"inputCount": 15,
|
|
378
396
|
"surface": "repository-patrol",
|
|
397
|
+
"capabilityGroup": "governance-versioning",
|
|
379
398
|
"status": "active"
|
|
380
399
|
},
|
|
381
400
|
{
|
|
@@ -388,6 +407,7 @@
|
|
|
388
407
|
],
|
|
389
408
|
"inputCount": 3,
|
|
390
409
|
"surface": "release-governance",
|
|
410
|
+
"capabilityGroup": "release-passport-trust",
|
|
391
411
|
"status": "active"
|
|
392
412
|
},
|
|
393
413
|
{
|
|
@@ -401,6 +421,7 @@
|
|
|
401
421
|
],
|
|
402
422
|
"inputCount": 4,
|
|
403
423
|
"surface": "repository-workflow",
|
|
424
|
+
"capabilityGroup": "api-cli-reference",
|
|
404
425
|
"status": "repository-internal"
|
|
405
426
|
},
|
|
406
427
|
{
|
|
@@ -416,6 +437,7 @@
|
|
|
416
437
|
],
|
|
417
438
|
"inputCount": 6,
|
|
418
439
|
"surface": "repository-workflow",
|
|
440
|
+
"capabilityGroup": "api-cli-reference",
|
|
419
441
|
"status": "active"
|
|
420
442
|
},
|
|
421
443
|
{
|
|
@@ -437,6 +459,7 @@
|
|
|
437
459
|
],
|
|
438
460
|
"inputCount": 12,
|
|
439
461
|
"surface": "dev-governance",
|
|
462
|
+
"capabilityGroup": "governance-versioning",
|
|
440
463
|
"status": "active"
|
|
441
464
|
},
|
|
442
465
|
{
|
|
@@ -448,6 +471,7 @@
|
|
|
448
471
|
],
|
|
449
472
|
"inputCount": 2,
|
|
450
473
|
"surface": "repository-workflow",
|
|
474
|
+
"capabilityGroup": "api-cli-reference",
|
|
451
475
|
"status": "active"
|
|
452
476
|
},
|
|
453
477
|
{
|
|
@@ -469,6 +493,7 @@
|
|
|
469
493
|
],
|
|
470
494
|
"inputCount": 12,
|
|
471
495
|
"surface": "repository-patrol",
|
|
496
|
+
"capabilityGroup": "governance-versioning",
|
|
472
497
|
"status": "active"
|
|
473
498
|
},
|
|
474
499
|
{
|
|
@@ -482,6 +507,7 @@
|
|
|
482
507
|
],
|
|
483
508
|
"inputCount": 4,
|
|
484
509
|
"surface": "repository-patrol",
|
|
510
|
+
"capabilityGroup": "governance-versioning",
|
|
485
511
|
"status": "active"
|
|
486
512
|
},
|
|
487
513
|
{
|
|
@@ -495,6 +521,7 @@
|
|
|
495
521
|
],
|
|
496
522
|
"inputCount": 4,
|
|
497
523
|
"surface": "repository-patrol",
|
|
524
|
+
"capabilityGroup": "governance-versioning",
|
|
498
525
|
"status": "active"
|
|
499
526
|
},
|
|
500
527
|
{
|
|
@@ -548,6 +575,7 @@
|
|
|
548
575
|
],
|
|
549
576
|
"inputCount": 44,
|
|
550
577
|
"surface": "release-governance",
|
|
578
|
+
"capabilityGroup": "reusable-build",
|
|
551
579
|
"status": "active"
|
|
552
580
|
},
|
|
553
581
|
{
|
|
@@ -565,6 +593,7 @@
|
|
|
565
593
|
],
|
|
566
594
|
"inputCount": 8,
|
|
567
595
|
"surface": "release-governance",
|
|
596
|
+
"capabilityGroup": "release-passport-trust",
|
|
568
597
|
"status": "active"
|
|
569
598
|
},
|
|
570
599
|
{
|
|
@@ -573,6 +602,7 @@
|
|
|
573
602
|
"inputs": [],
|
|
574
603
|
"inputCount": 0,
|
|
575
604
|
"surface": "repository-workflow",
|
|
605
|
+
"capabilityGroup": "api-cli-reference",
|
|
576
606
|
"status": "active"
|
|
577
607
|
},
|
|
578
608
|
{
|
|
@@ -595,6 +625,7 @@
|
|
|
595
625
|
],
|
|
596
626
|
"inputCount": 13,
|
|
597
627
|
"surface": "release-propagation",
|
|
628
|
+
"capabilityGroup": "site-and-propagation",
|
|
598
629
|
"status": "preview"
|
|
599
630
|
},
|
|
600
631
|
{
|
|
@@ -603,6 +634,7 @@
|
|
|
603
634
|
"inputs": [],
|
|
604
635
|
"inputCount": 0,
|
|
605
636
|
"surface": "repository-workflow",
|
|
637
|
+
"capabilityGroup": "api-cli-reference",
|
|
606
638
|
"status": "active"
|
|
607
639
|
},
|
|
608
640
|
{
|
|
@@ -613,6 +645,7 @@
|
|
|
613
645
|
],
|
|
614
646
|
"inputCount": 1,
|
|
615
647
|
"surface": "repository-workflow",
|
|
648
|
+
"capabilityGroup": "api-cli-reference",
|
|
616
649
|
"status": "active"
|
|
617
650
|
},
|
|
618
651
|
{
|
|
@@ -621,6 +654,7 @@
|
|
|
621
654
|
"inputs": [],
|
|
622
655
|
"inputCount": 0,
|
|
623
656
|
"surface": "repository-workflow",
|
|
657
|
+
"capabilityGroup": "api-cli-reference",
|
|
624
658
|
"status": "compatibility-fixture"
|
|
625
659
|
},
|
|
626
660
|
{
|
|
@@ -629,6 +663,7 @@
|
|
|
629
663
|
"inputs": [],
|
|
630
664
|
"inputCount": 0,
|
|
631
665
|
"surface": "repository-workflow",
|
|
666
|
+
"capabilityGroup": "api-cli-reference",
|
|
632
667
|
"status": "active"
|
|
633
668
|
}
|
|
634
669
|
],
|
|
@@ -691,6 +726,7 @@
|
|
|
691
726
|
"verification-command"
|
|
692
727
|
],
|
|
693
728
|
"inputCount": 51,
|
|
729
|
+
"capabilityGroup": "release-passport-trust",
|
|
694
730
|
"status": "active"
|
|
695
731
|
},
|
|
696
732
|
{
|
|
@@ -742,6 +778,7 @@
|
|
|
742
778
|
"workflow"
|
|
743
779
|
],
|
|
744
780
|
"inputCount": 43,
|
|
781
|
+
"capabilityGroup": "observability-diagnostics",
|
|
745
782
|
"status": "active"
|
|
746
783
|
},
|
|
747
784
|
{
|
|
@@ -770,6 +807,7 @@
|
|
|
770
807
|
"summary-path"
|
|
771
808
|
],
|
|
772
809
|
"inputCount": 20,
|
|
810
|
+
"capabilityGroup": "reusable-build",
|
|
773
811
|
"status": "active"
|
|
774
812
|
},
|
|
775
813
|
{
|
|
@@ -781,6 +819,7 @@
|
|
|
781
819
|
"require-version-state"
|
|
782
820
|
],
|
|
783
821
|
"inputCount": 3,
|
|
822
|
+
"capabilityGroup": "reusable-build",
|
|
784
823
|
"status": "active"
|
|
785
824
|
}
|
|
786
825
|
]
|
package/docs/MAP.md
CHANGED
|
@@ -18,8 +18,27 @@ This package should be usable by an agent from the npm artifact alone. The
|
|
|
18
18
|
machine-readable `dist/site/` bundle is the first fact source; the Markdown
|
|
19
19
|
manuals explain those facts and give operator examples.
|
|
20
20
|
|
|
21
|
+
`dist/site/capability-registry.json` is the capability navigation entrypoint.
|
|
22
|
+
It groups the public surface into stable product areas so sites and agents do
|
|
23
|
+
not have to infer structure from file names. Each page, manual, CLI command,
|
|
24
|
+
workflow, action, and Node API export also carries a `capabilityGroup`,
|
|
25
|
+
`audience`, and `maturity` field in its own registry.
|
|
26
|
+
|
|
27
|
+
| Capability group | Primary facts | Primary manuals |
|
|
28
|
+
| --- | --- | --- |
|
|
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`, `kfd-claims.json` | [`release-passport.md`](release-passport.md), [`release-candidate.md`](release-candidate.md), [`publish-transaction.md`](publish-transaction.md), [`binary-distribution.md`](binary-distribution.md) |
|
|
31
|
+
| Reusable Build and Lifecycle | `workflow-registry.json`, `release-model.json` | [`reusable-build-surface.md`](reusable-build-surface.md), [`lifecycle-protocol.md`](lifecycle-protocol.md) |
|
|
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
|
+
| 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) |
|
|
34
|
+
| Distribution Indexes and Badges | `badge-endpoint-registry.json`, `node-api-registry.json`, `manual-registry.json` | [`readme-badges.md`](readme-badges.md), [`homebrew.md`](homebrew.md) |
|
|
35
|
+
| Build Facts, Observability, and Diagnostics | `cli-registry.json`, `node-api-registry.json`, lifecycle artifacts | [`build-facts.md`](build-facts.md), [`toolkit-observability.md`](toolkit-observability.md), [`consumer-issue-reporting.md`](consumer-issue-reporting.md) |
|
|
36
|
+
| Governance, Versioning, and Runtime Drift | `buildchain-contract.json`, `workflow-registry.json`, `release-model.json` | [`release-governance.md`](release-governance.md), [`release-flow.md`](release-flow.md), [`versioning.md`](versioning.md), [`runtime-train-validation.md`](runtime-train-validation.md) |
|
|
37
|
+
| CLI and Node API Reference | `cli-registry.json`, `node-api-registry.json`, `workflow-registry.json`, `manual-registry.json` | [`cli.md`](cli.md), [`../packages/core/README.md`](../packages/core/README.md) |
|
|
38
|
+
|
|
21
39
|
| Capability | Machine-readable entry | Manual entry |
|
|
22
40
|
| --- | --- | --- |
|
|
41
|
+
| Capability-grouped KFD-3 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) |
|
|
23
42
|
| 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
43
|
| 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
44
|
| KFD-3 surface registration and capability query | `buildchain.kfd3.json`, `dist/site/kfd-claims.json`, `buildchain.release.json` | [`kfd-support.md`](kfd-support.md) |
|
package/docs/cli.md
CHANGED
|
@@ -58,6 +58,10 @@ internal file paths. The npm package also ships
|
|
|
58
58
|
`dist/site/node-api-registry.json` and exports it as
|
|
59
59
|
`@kungfu-tech/buildchain/site/node-api-registry.json` so agents can enumerate
|
|
60
60
|
the supported imports from the installed package.
|
|
61
|
+
For navigation, start with `dist/site/capability-registry.json`: it groups
|
|
62
|
+
manuals, CLI commands, workflow/action inputs, Node exports, site pages, and KFD
|
|
63
|
+
claim facts by product capability before an agent chooses a concrete command or
|
|
64
|
+
manual.
|
|
61
65
|
|
|
62
66
|
Current public import families include:
|
|
63
67
|
|
|
@@ -74,6 +78,7 @@ import { createReleasePropagationPlan } from "@kungfu-tech/buildchain/release-pr
|
|
|
74
78
|
import { planReleaseLineBootstrap } from "@kungfu-tech/buildchain/release-line-bootstrap";
|
|
75
79
|
import { collectPublicSurfaceReverseAudit } from "@kungfu-tech/buildchain/public-surface-audit";
|
|
76
80
|
import contractWorld from "@kungfu-tech/buildchain/site/buildchain-contract.json" with { type: "json" };
|
|
81
|
+
import capabilityRegistry from "@kungfu-tech/buildchain/site/capability-registry.json" with { type: "json" };
|
|
77
82
|
import manualRegistry from "@kungfu-tech/buildchain/site/manual-registry.json" with { type: "json" };
|
|
78
83
|
import nodeApiRegistry from "@kungfu-tech/buildchain/site/node-api-registry.json" with { type: "json" };
|
|
79
84
|
import publicSurfaceAudit from "@kungfu-tech/buildchain/site/public-surface-audit.json" with { type: "json" };
|
|
@@ -13,6 +13,7 @@ release mechanics, command registry, workflow registry, or artifact schema.
|
|
|
13
13
|
dist/site/
|
|
14
14
|
buildchain-site.json
|
|
15
15
|
site-manifest.json
|
|
16
|
+
capability-registry.json
|
|
16
17
|
cli-registry.json
|
|
17
18
|
manual-registry.json
|
|
18
19
|
node-api-registry.json
|
|
@@ -36,6 +37,12 @@ of parsing `README.md` themselves.
|
|
|
36
37
|
It also includes a `pages` collection that mirrors `page-registry.json`, so a
|
|
37
38
|
site repository can build the full Buildchain public documentation surface from
|
|
38
39
|
the npm package without scanning the source checkout.
|
|
40
|
+
`capability-registry.json` is the navigation spine for that page surface. It
|
|
41
|
+
groups manuals, pages, CLI commands, workflows, actions, Node API exports, and
|
|
42
|
+
KFD claim facts into stable product capability groups. Site repositories should
|
|
43
|
+
render navigation from this registry first, then use `page-registry.json`,
|
|
44
|
+
`manual-registry.json`, `cli-registry.json`, `node-api-registry.json`, and
|
|
45
|
+
`workflow-registry.json` for the concrete entries inside each group.
|
|
39
46
|
`page-registry.json` is the complete page fact source: README homepage content,
|
|
40
47
|
all packaged `docs/*.md` manuals, action README files, the Node API package
|
|
41
48
|
overview, and fixture guides.
|
|
@@ -126,6 +133,8 @@ this gate, so release candidates cannot publish an out-of-date site bundle.
|
|
|
126
133
|
The P0 bundle includes:
|
|
127
134
|
|
|
128
135
|
- README-derived homepage fields and display plan;
|
|
136
|
+
- capability-grouped navigation facts for docs, CLI, Node API, workflows,
|
|
137
|
+
actions, and KFD claims;
|
|
129
138
|
- complete markdown page registry for public Buildchain docs, action manuals,
|
|
130
139
|
Node API overview, and fixtures;
|
|
131
140
|
- site manifest;
|
|
@@ -513,6 +513,24 @@ preflight, and health check so a reviewer or agent can audit why the production
|
|
|
513
513
|
site changed and whether every declared host and every existing nested route was
|
|
514
514
|
actually covered.
|
|
515
515
|
|
|
516
|
+
Channels declared with `access_control = "managed-network"` use a different
|
|
517
|
+
health strategy by default. Buildchain does not require a GitHub-hosted runner
|
|
518
|
+
to fetch a URL that is intentionally reachable only from an approved network.
|
|
519
|
+
Instead, after a live apply the health check uses the deploy role to run S3
|
|
520
|
+
`head-object` checks for each surface manifest and the smoke target object, such
|
|
521
|
+
as the surface `index.html` or a nested `docs/index.html`. The check records
|
|
522
|
+
`healthStrategy = "s3-object"` and skips the public HTTP fetch. Dry-run and
|
|
523
|
+
plan-only checks fall back to deployment evidence: each surface must have a
|
|
524
|
+
manifest key, bucket, object prefix, `sync-static-artifact`, and
|
|
525
|
+
`write-deployment-manifest` evidence, recorded as
|
|
526
|
+
`healthStrategy = "deployment-evidence"`. If the workflow is running on a runner
|
|
527
|
+
that is allowed to reach the managed network, set
|
|
528
|
+
`BUILDCHAIN_WEB_SURFACE_HEALTH_ALLOWED_RUNNER=true` or pass
|
|
529
|
+
`--allowed-managed-network-runner true` to keep the normal HTTP smoke checks.
|
|
530
|
+
Set `BUILDCHAIN_WEB_SURFACE_HEALTH_S3_OBJECTS=false` or pass
|
|
531
|
+
`--managed-network-s3-object-verification false` only when an external channel
|
|
532
|
+
policy owns managed-network object verification.
|
|
533
|
+
|
|
516
534
|
## Cleanup Plans
|
|
517
535
|
|
|
518
536
|
Preview cleanup is an auditable cleanup contract. It can run as a dry-run plan,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kungfu-tech/buildchain",
|
|
3
|
-
"version": "2.10.
|
|
3
|
+
"version": "2.10.3",
|
|
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",
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"./site/buildchain-site.json": "./dist/site/buildchain-site.json",
|
|
35
35
|
"./site/site-manifest.json": "./dist/site/site-manifest.json",
|
|
36
36
|
"./site/page-registry.json": "./dist/site/page-registry.json",
|
|
37
|
+
"./site/capability-registry.json": "./dist/site/capability-registry.json",
|
|
37
38
|
"./site/cli-registry.json": "./dist/site/cli-registry.json",
|
|
38
39
|
"./site/manual-registry.json": "./dist/site/manual-registry.json",
|
|
39
40
|
"./site/node-api-registry.json": "./dist/site/node-api-registry.json",
|
|
@@ -14,6 +14,7 @@ export const BUILDCHAIN_AGENT_MANUALS = Object.freeze([
|
|
|
14
14
|
{ id: "map", title: "Buildchain documentation map", path: "docs/MAP.md", plane: "use" },
|
|
15
15
|
{ id: "install", title: "Install and verify Buildchain", path: "docs/install.md", plane: "use" },
|
|
16
16
|
{ id: "release-passport", title: "Release Passport protocol", path: "docs/release-passport.md", plane: "verify" },
|
|
17
|
+
{ id: "release-candidate", title: "Release Candidate Passport", path: "docs/release-candidate.md", plane: "verify" },
|
|
17
18
|
{ id: "release-propagation", title: "Release propagation", path: "docs/release-propagation.md", plane: "use" },
|
|
18
19
|
{ id: "readme-badges", title: "README badge blocks", path: "docs/readme-badges.md", plane: "use" },
|
|
19
20
|
{ id: "homebrew", title: "Homebrew distribution indexes", path: "docs/homebrew.md", plane: "use" },
|
|
@@ -42,6 +43,7 @@ const SITE_CONTRACT_FILES = Object.freeze([
|
|
|
42
43
|
"dist/site/buildchain-site.json",
|
|
43
44
|
"dist/site/site-manifest.json",
|
|
44
45
|
"dist/site/page-registry.json",
|
|
46
|
+
"dist/site/capability-registry.json",
|
|
45
47
|
"dist/site/cli-registry.json",
|
|
46
48
|
"dist/site/manual-registry.json",
|
|
47
49
|
"dist/site/node-api-registry.json",
|
|
@@ -264,6 +266,7 @@ export function createBuildchainPublicClaimDefinitions() {
|
|
|
264
266
|
"dist/site/manual-registry.json",
|
|
265
267
|
"dist/site/node-api-registry.json",
|
|
266
268
|
"dist/site/page-registry.json",
|
|
269
|
+
"dist/site/capability-registry.json",
|
|
267
270
|
"dist/site/buildchain-site.json",
|
|
268
271
|
"dist/site/site-manifest.json",
|
|
269
272
|
],
|
|
@@ -171,6 +171,9 @@ if (rootPackage.exports?.["./site/site-manifest.json"] !== "./dist/site/site-man
|
|
|
171
171
|
if (rootPackage.exports?.["./site/page-registry.json"] !== "./dist/site/page-registry.json") {
|
|
172
172
|
throw new Error("root package must export @kungfu-tech/buildchain/site/page-registry.json");
|
|
173
173
|
}
|
|
174
|
+
if (rootPackage.exports?.["./site/capability-registry.json"] !== "./dist/site/capability-registry.json") {
|
|
175
|
+
throw new Error("root package must export @kungfu-tech/buildchain/site/capability-registry.json");
|
|
176
|
+
}
|
|
174
177
|
if (rootPackage.exports?.["./site/manual-registry.json"] !== "./dist/site/manual-registry.json") {
|
|
175
178
|
throw new Error("root package must export @kungfu-tech/buildchain/site/manual-registry.json");
|
|
176
179
|
}
|
|
@@ -208,6 +211,7 @@ const installDoc = fs.readFileSync(path.join(root, "docs/install.md"), "utf8");
|
|
|
208
211
|
const siteBundle = JSON.parse(fs.readFileSync(path.join(root, "dist/site/buildchain-site.json"), "utf8"));
|
|
209
212
|
const siteManifest = JSON.parse(fs.readFileSync(path.join(root, "dist/site/site-manifest.json"), "utf8"));
|
|
210
213
|
const pageRegistry = JSON.parse(fs.readFileSync(path.join(root, "dist/site/page-registry.json"), "utf8"));
|
|
214
|
+
const capabilityRegistry = JSON.parse(fs.readFileSync(path.join(root, "dist/site/capability-registry.json"), "utf8"));
|
|
211
215
|
const badgeEndpointRegistry = JSON.parse(fs.readFileSync(path.join(root, "dist/site/badge-endpoint-registry.json"), "utf8"));
|
|
212
216
|
const publicSurfaceAudit = JSON.parse(fs.readFileSync(path.join(root, "dist/site/public-surface-audit.json"), "utf8"));
|
|
213
217
|
if (!cliSource.startsWith("#!/usr/bin/env node")) {
|
|
@@ -334,6 +338,15 @@ if (pageRegistry.contract !== "kungfu-buildchain-site-page-registry") {
|
|
|
334
338
|
if (siteBundle.pageRegistry?.path !== "page-registry.json" || siteBundle.pageRegistry?.pageCount !== pageRegistry.pageCount) {
|
|
335
339
|
throw new Error("buildchain-site.json must link to page-registry.json with matching page count");
|
|
336
340
|
}
|
|
341
|
+
if (capabilityRegistry.contract !== "kungfu-buildchain-capability-registry") {
|
|
342
|
+
throw new Error("capability-registry.json must expose the Buildchain capability registry contract");
|
|
343
|
+
}
|
|
344
|
+
if (siteBundle.capabilityRegistry?.path !== "capability-registry.json" || siteBundle.capabilityRegistry?.groupCount !== capabilityRegistry.groups?.length) {
|
|
345
|
+
throw new Error("buildchain-site.json must link to capability-registry.json with matching group count");
|
|
346
|
+
}
|
|
347
|
+
if (!siteManifest.facts?.includes("capability-registry.json") || !siteBundle.entrypoints?.includes("capability-registry.json")) {
|
|
348
|
+
throw new Error("site bundle entrypoints must include capability-registry.json");
|
|
349
|
+
}
|
|
337
350
|
if (!siteManifest.facts?.includes("page-registry.json") || !siteBundle.entrypoints?.includes("page-registry.json")) {
|
|
338
351
|
throw new Error("site bundle entrypoints must include page-registry.json");
|
|
339
352
|
}
|
|
@@ -388,10 +401,37 @@ if (JSON.stringify(bundlePageSources) !== JSON.stringify(expectedPageSources)) {
|
|
|
388
401
|
throw new Error(`buildchain-site.json pages must include every public markdown page: expected ${expectedPageSources.length}, got ${bundlePageSources.length}`);
|
|
389
402
|
}
|
|
390
403
|
for (const page of pageRegistry.pages || []) {
|
|
391
|
-
if (!page.id || !page.route || !page.title || !page.category || !page.sourcePath || !page.digest || !page.markdown) {
|
|
404
|
+
if (!page.id || !page.route || !page.title || !page.category || !page.capabilityGroup || !Array.isArray(page.audience) || !page.maturity || !page.sourcePath || !page.digest || !page.markdown) {
|
|
392
405
|
throw new Error(`page-registry.json page is incomplete: ${page.sourcePath || page.id || "<unknown>"}`);
|
|
393
406
|
}
|
|
394
407
|
}
|
|
408
|
+
const capabilityGroupIds = new Set((capabilityRegistry.groups || []).map((group) => group.id));
|
|
409
|
+
if (capabilityGroupIds.size < 6) {
|
|
410
|
+
throw new Error("capability-registry.json must expose grouped Buildchain capabilities");
|
|
411
|
+
}
|
|
412
|
+
for (const page of pageRegistry.pages || []) {
|
|
413
|
+
if (!capabilityGroupIds.has(page.capabilityGroup)) {
|
|
414
|
+
throw new Error(`page-registry.json page references unknown capability group: ${page.sourcePath || page.id}`);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
const manualRegistry = JSON.parse(fs.readFileSync(path.join(root, "dist/site/manual-registry.json"), "utf8"));
|
|
418
|
+
for (const manual of manualRegistry.manuals || []) {
|
|
419
|
+
if (!manual.capabilityGroup || !capabilityGroupIds.has(manual.capabilityGroup) || !Array.isArray(manual.audience) || !manual.maturity || typeof manual.order !== "number") {
|
|
420
|
+
throw new Error(`manual-registry.json manual missing capability metadata: ${manual.path || manual.id}`);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
const cliRegistry = JSON.parse(fs.readFileSync(path.join(root, "dist/site/cli-registry.json"), "utf8"));
|
|
424
|
+
for (const command of cliRegistry.commands || []) {
|
|
425
|
+
if (!command.capabilityGroup || !capabilityGroupIds.has(command.capabilityGroup) || !Array.isArray(command.audience) || !command.maturity || !command.purpose || command.purpose.includes("Add a specific purpose")) {
|
|
426
|
+
throw new Error(`cli-registry.json command missing capability metadata: ${command.id || command.usage}`);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
const nodeApiRegistry = JSON.parse(fs.readFileSync(path.join(root, "dist/site/node-api-registry.json"), "utf8"));
|
|
430
|
+
for (const exported of nodeApiRegistry.exports || []) {
|
|
431
|
+
if (!exported.capabilityGroup || !capabilityGroupIds.has(exported.capabilityGroup) || !Array.isArray(exported.audience) || !exported.maturity || !exported.summary) {
|
|
432
|
+
throw new Error(`node-api-registry.json export missing capability metadata: ${exported.export || exported.specifier}`);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
395
435
|
if (!pageRegistry.pages?.some((page) => page.sourcePath === "actions/promote-buildchain-ref/README.md")) {
|
|
396
436
|
throw new Error("page-registry.json must include action manuals");
|
|
397
437
|
}
|
|
@@ -476,6 +516,7 @@ for (const requiredSnippet of [
|
|
|
476
516
|
"GitHub Release",
|
|
477
517
|
"release propagation",
|
|
478
518
|
"Homebrew tap distribution indexes",
|
|
519
|
+
"capability-registry.json",
|
|
479
520
|
"manual-registry.json",
|
|
480
521
|
"node-api-registry.json",
|
|
481
522
|
"README badge",
|
|
@@ -865,7 +906,7 @@ if (!badgeEndpointRegistry.badges?.some((entry) => entry.id === "buildchain-rele
|
|
|
865
906
|
throw new Error("badge endpoint registry must include Buildchain Release Passport badge");
|
|
866
907
|
}
|
|
867
908
|
|
|
868
|
-
for (const siteFile of ["buildchain-site.json", "site-manifest.json", "badge-endpoint-registry.json", "cli-registry.json", "manual-registry.json", "node-api-registry.json", "workflow-registry.json", "public-surface-audit.json", "release-model.json", "buildchain-contract.json"]) {
|
|
909
|
+
for (const siteFile of ["buildchain-site.json", "site-manifest.json", "badge-endpoint-registry.json", "page-registry.json", "capability-registry.json", "cli-registry.json", "manual-registry.json", "node-api-registry.json", "workflow-registry.json", "public-surface-audit.json", "release-model.json", "buildchain-contract.json"]) {
|
|
869
910
|
if (!fs.existsSync(path.join(root, "dist", "site", siteFile))) {
|
|
870
911
|
throw new Error(`site bundle missing ${siteFile}`);
|
|
871
912
|
}
|