@kungfu-tech/buildchain 2.10.8 → 2.10.9
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 +77 -2
- package/dist/site/agent-index.json +1 -0
- package/dist/site/buildchain-contract.json +5 -5
- package/dist/site/buildchain-site.json +19 -7
- package/dist/site/capability-registry.json +10 -1
- package/dist/site/cli-registry.json +48 -0
- package/dist/site/kfd-claims.json +66 -7
- package/dist/site/kfd-upstream-aggregate.json +120 -0
- package/dist/site/manual-registry.json +1 -1
- package/dist/site/node-api-registry.json +5 -5
- package/dist/site/page-registry.json +12 -2
- package/dist/site/public-surface-audit.json +74 -4
- package/dist/site/release-provenance.json +1 -0
- package/dist/site/site-manifest.json +6 -5
- package/docs/kfd-support.md +141 -0
- package/package.json +2 -1
- package/packages/core/buildchain-kfd-claims.js +1 -0
- package/packages/core/kfd.js +566 -2
- package/packages/core/public-surface-audit.js +1 -0
- package/scripts/generate-site-bundle.mjs +14 -1
package/bin/buildchain.mjs
CHANGED
|
@@ -65,10 +65,14 @@ import {
|
|
|
65
65
|
writeKungfuBuildInfoProjection,
|
|
66
66
|
} from "../packages/core/build-facts.js";
|
|
67
67
|
import {
|
|
68
|
+
checkKfdUpstreamFacts,
|
|
69
|
+
collectKfdAggregate,
|
|
68
70
|
collectKfdStatus,
|
|
71
|
+
collectKfdUpstreamFacts,
|
|
69
72
|
kfd1,
|
|
70
73
|
kfd2,
|
|
71
74
|
layout as buildchainLayout,
|
|
75
|
+
listKfdUpstreamRoles,
|
|
72
76
|
listKfdSchemas,
|
|
73
77
|
normalizeKfdStandardId,
|
|
74
78
|
readKfdSchema,
|
|
@@ -161,6 +165,10 @@ function usage() {
|
|
|
161
165
|
buildchain kfd migrate-layout [--cwd <dir>] [--write] [--force] [--json]
|
|
162
166
|
buildchain kfd schema list [--standard kfd-1|kfd-2|kfd-3|kfd-4] [--json]
|
|
163
167
|
buildchain kfd schema show <kfd-1|kfd-2|kfd-3|kfd-4> [--schema <name>] [--json]
|
|
168
|
+
buildchain kfd upstream roles [--json]
|
|
169
|
+
buildchain kfd upstream collect [--cwd <dir>] [--output <file>] [--json]
|
|
170
|
+
buildchain kfd upstream check [--cwd <dir>] [--aggregate-json <file-or-json>] [--json]
|
|
171
|
+
buildchain kfd aggregate [--cwd <dir>] [--json]
|
|
164
172
|
buildchain kfd 1 schema [--schema <name>] [--json]
|
|
165
173
|
buildchain kfd 1 witness [--cwd <dir>] [--source-sha <sha>] [--output <file>] [--json]
|
|
166
174
|
buildchain kfd 1 gate --witness-json <file-or-json>... [--cwd <dir>] [--artifact-root <dir>]
|
|
@@ -226,6 +234,8 @@ Examples:
|
|
|
226
234
|
buildchain kfd 1 witness --json
|
|
227
235
|
buildchain kfd 2 claims --json
|
|
228
236
|
buildchain kfd 2 trust-assessment --json
|
|
237
|
+
buildchain kfd upstream collect --json
|
|
238
|
+
buildchain kfd aggregate --json
|
|
229
239
|
buildchain kfd 3 query buildchain --json
|
|
230
240
|
`;
|
|
231
241
|
}
|
|
@@ -810,7 +820,7 @@ function runKfd2Cli(args = []) {
|
|
|
810
820
|
async function runKfdCli(args = []) {
|
|
811
821
|
const [subcommand = "", maybeStandardOrAction = "", ...rest] = args;
|
|
812
822
|
if (!subcommand) {
|
|
813
|
-
throw new Error("usage: buildchain kfd <status|migrate-layout|schema|1|2|3|4> ...");
|
|
823
|
+
throw new Error("usage: buildchain kfd <status|migrate-layout|schema|upstream|aggregate|1|2|3|4> ...");
|
|
814
824
|
}
|
|
815
825
|
|
|
816
826
|
if (subcommand === "status") {
|
|
@@ -880,6 +890,71 @@ async function runKfdCli(args = []) {
|
|
|
880
890
|
throw new Error("usage: buildchain kfd schema <list|show> ...");
|
|
881
891
|
}
|
|
882
892
|
|
|
893
|
+
if (subcommand === "upstream") {
|
|
894
|
+
const [action = "", ...upstreamArgs] = [maybeStandardOrAction, ...rest];
|
|
895
|
+
const effectiveAction = action || "collect";
|
|
896
|
+
const cwd = path.resolve(readFlag(upstreamArgs, "cwd", process.cwd()));
|
|
897
|
+
const json = readBooleanFlag(upstreamArgs, "json");
|
|
898
|
+
if (effectiveAction === "roles") {
|
|
899
|
+
const result = listKfdUpstreamRoles();
|
|
900
|
+
if (json) {
|
|
901
|
+
printJson(result);
|
|
902
|
+
} else {
|
|
903
|
+
process.stdout.write("KFD upstream roles:\n");
|
|
904
|
+
for (const entry of result.roles) {
|
|
905
|
+
process.stdout.write(`- ${entry.role}: ${entry.description}\n`);
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
return;
|
|
909
|
+
}
|
|
910
|
+
if (effectiveAction === "collect") {
|
|
911
|
+
const result = collectKfdUpstreamFacts({ cwd });
|
|
912
|
+
const output = readFlag(upstreamArgs, "output", "");
|
|
913
|
+
if (output) {
|
|
914
|
+
fs.mkdirSync(path.dirname(path.resolve(cwd, output)), { recursive: true });
|
|
915
|
+
fs.writeFileSync(path.resolve(cwd, output), `${JSON.stringify(result, null, 2)}\n`);
|
|
916
|
+
}
|
|
917
|
+
if (json || !output) {
|
|
918
|
+
printJson(result);
|
|
919
|
+
} else {
|
|
920
|
+
process.stdout.write(`kfd upstream collect: wrote ${output}\n`);
|
|
921
|
+
}
|
|
922
|
+
return;
|
|
923
|
+
}
|
|
924
|
+
if (effectiveAction === "check") {
|
|
925
|
+
const aggregateInput = readFlag(upstreamArgs, "aggregate-json", "");
|
|
926
|
+
const aggregate = aggregateInput
|
|
927
|
+
? readJsonInput(aggregateInput, { cwd, label: "kfd upstream aggregate" })
|
|
928
|
+
: collectKfdUpstreamFacts({ cwd });
|
|
929
|
+
const result = checkKfdUpstreamFacts(aggregate);
|
|
930
|
+
if (json) {
|
|
931
|
+
printJson(result);
|
|
932
|
+
} else {
|
|
933
|
+
process.stdout.write(`kfd upstream check: ${result.status} (${result.upstreamCount} upstreams)\n`);
|
|
934
|
+
for (const entry of result.issues) {
|
|
935
|
+
process.stdout.write(`- ${entry.level}: ${entry.code}: ${entry.message}\n`);
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
if (!result.ok) {
|
|
939
|
+
process.exitCode = 1;
|
|
940
|
+
}
|
|
941
|
+
return;
|
|
942
|
+
}
|
|
943
|
+
throw new Error("usage: buildchain kfd upstream <roles|collect|check> ...");
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
if (subcommand === "aggregate") {
|
|
947
|
+
const effectiveArgs = maybeStandardOrAction && maybeStandardOrAction.startsWith("--") ? [maybeStandardOrAction, ...rest] : rest;
|
|
948
|
+
const cwd = path.resolve(readFlag(effectiveArgs, "cwd", process.cwd()));
|
|
949
|
+
const result = collectKfdAggregate({ cwd });
|
|
950
|
+
if (readBooleanFlag(effectiveArgs, "json")) {
|
|
951
|
+
printJson(result);
|
|
952
|
+
} else {
|
|
953
|
+
process.stdout.write(`kfd aggregate: upstream=${result.upstream.summary.upstreamCount}, status=${result.upstreamCheck.status}\n`);
|
|
954
|
+
}
|
|
955
|
+
return;
|
|
956
|
+
}
|
|
957
|
+
|
|
883
958
|
const standard = normalizeKfdStandardId(subcommand);
|
|
884
959
|
if (standard === "kfd-1") {
|
|
885
960
|
runKfd1Cli([maybeStandardOrAction, ...rest]);
|
|
@@ -903,7 +978,7 @@ async function runKfdCli(args = []) {
|
|
|
903
978
|
}
|
|
904
979
|
throw new Error("KFD-4 is currently schema-only in Buildchain; use: buildchain kfd 4 schema");
|
|
905
980
|
}
|
|
906
|
-
throw new Error("usage: buildchain kfd <status|migrate-layout|schema|1|2|3|4> ...");
|
|
981
|
+
throw new Error("usage: buildchain kfd <status|migrate-layout|schema|upstream|aggregate|1|2|3|4> ...");
|
|
907
982
|
}
|
|
908
983
|
|
|
909
984
|
async function runBuildFactsCli(args = []) {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"product": {
|
|
5
5
|
"name": "Buildchain",
|
|
6
6
|
"package": "@kungfu-tech/buildchain",
|
|
7
|
-
"version": "2.10.
|
|
7
|
+
"version": "2.10.9",
|
|
8
8
|
"repository": "https://github.com/kungfu-systems/buildchain"
|
|
9
9
|
},
|
|
10
10
|
"majorLine": "v2",
|
|
@@ -344,7 +344,7 @@
|
|
|
344
344
|
"README badge block checks and writes are generated from machine-readable repository facts"
|
|
345
345
|
],
|
|
346
346
|
"breakingDigest": "sha256:90a73892b2d6c214048448d5f45df75639bdf7b7e8fefd9c596e04b087407bcc",
|
|
347
|
-
"auditDigest": "sha256:
|
|
347
|
+
"auditDigest": "sha256:34b5fa8a801e82667bdf2578ad64274623a4635daa5e080f51cee422a4ed0ba4"
|
|
348
348
|
},
|
|
349
349
|
{
|
|
350
350
|
"contractVersion": 1,
|
|
@@ -434,7 +434,7 @@
|
|
|
434
434
|
"manual entries carry source file digests so downstream sites and agents can detect stale hand-written documentation"
|
|
435
435
|
],
|
|
436
436
|
"breakingDigest": "sha256:7d0d2819e3a3e72989d9c57b5efe9d0bc0a79bc0f2c82a0c7b9d6c5a211a91f2",
|
|
437
|
-
"auditDigest": "sha256:
|
|
437
|
+
"auditDigest": "sha256:044cc7ec44c343b450be076db2d1604cb5f52afda6fca3eef67bc3a0960a2a06"
|
|
438
438
|
},
|
|
439
439
|
{
|
|
440
440
|
"contractVersion": 1,
|
|
@@ -456,9 +456,9 @@
|
|
|
456
456
|
"agents can discover supported Node APIs without importing internal file paths"
|
|
457
457
|
],
|
|
458
458
|
"breakingDigest": "sha256:48f925608d3e2131d90936b07dc2a30341204cae3e6e785c0f77d61ad755c945",
|
|
459
|
-
"auditDigest": "sha256:
|
|
459
|
+
"auditDigest": "sha256:896ddcc6c808d92fd757e087632bcfb069378046008d70132d7de74138f03b76"
|
|
460
460
|
}
|
|
461
461
|
],
|
|
462
462
|
"compatibilityDigest": "sha256:967df7e854fdf582294ddfb6403eff25c00db9518a24051e7d47cbd75527c785",
|
|
463
|
-
"contractDigest": "sha256:
|
|
463
|
+
"contractDigest": "sha256:511d42f392bdf81805b067079c2c436d7c13f013833215ebe93e6c5b512c10b0"
|
|
464
464
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"contract": "kungfu-buildchain-site-bundle",
|
|
4
|
-
"generatedAt": "2026-07-
|
|
5
|
-
"publishedAt": "2026-07-
|
|
4
|
+
"generatedAt": "2026-07-09T00:25:26.922Z",
|
|
5
|
+
"publishedAt": "2026-07-09T00:25:26.922Z",
|
|
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": "bdd863e4ac8fa7b502a23f7e9a8faf9d31535c19",
|
|
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.9",
|
|
41
41
|
"versionSource": "package.json#version"
|
|
42
42
|
},
|
|
43
43
|
"source": {
|
|
@@ -69,6 +69,7 @@
|
|
|
69
69
|
"badge-endpoint-registry.json",
|
|
70
70
|
"product-mechanism.json",
|
|
71
71
|
"release-provenance.json",
|
|
72
|
+
"kfd-upstream-aggregate.json",
|
|
72
73
|
"kfd-claims.json",
|
|
73
74
|
"agent-index.json",
|
|
74
75
|
"site-manifest.json"
|
|
@@ -594,7 +595,7 @@
|
|
|
594
595
|
],
|
|
595
596
|
"maturity": "stable",
|
|
596
597
|
"sourcePath": "docs/kfd-support.md",
|
|
597
|
-
"digest": "sha256:
|
|
598
|
+
"digest": "sha256:4bcf5d1ce63555072130eae90c739555b11658d1d796a3fcea770b90841c4afd",
|
|
598
599
|
"headings": [
|
|
599
600
|
{
|
|
600
601
|
"level": 1,
|
|
@@ -616,6 +617,16 @@
|
|
|
616
617
|
"title": "KFD-2",
|
|
617
618
|
"anchor": "kfd-2"
|
|
618
619
|
},
|
|
620
|
+
{
|
|
621
|
+
"level": 2,
|
|
622
|
+
"title": "Upstream KFD Aggregation",
|
|
623
|
+
"anchor": "upstream-kfd-aggregation"
|
|
624
|
+
},
|
|
625
|
+
{
|
|
626
|
+
"level": 3,
|
|
627
|
+
"title": "Upstream Roles",
|
|
628
|
+
"anchor": "upstream-roles"
|
|
629
|
+
},
|
|
619
630
|
{
|
|
620
631
|
"level": 2,
|
|
621
632
|
"title": "KFD-3",
|
|
@@ -652,7 +663,7 @@
|
|
|
652
663
|
"anchor": "known-gaps"
|
|
653
664
|
}
|
|
654
665
|
],
|
|
655
|
-
"markdown": "# KFD Support\n\nBuildchain implements KFD support as release evidence and product capability\nfacts, not as README prose. The machine-readable sources are:\n\n- `dist/site/kfd-claims.json` for Buildchain-owned public claims and KFD-3\n collaboration surfaces;\n- `dist/site/public-surface-audit.json` for reverse enumeration of exposed CLI,\n workflow, action, site, and documented command surfaces;\n- `buildchain.release.json` for release-specific KFD-1, KFD-2, and KFD-3\n passport results;\n- `.buildchain/buildchain.toml` for repository-owned Buildchain configuration;\n- `.buildchain/kfd/kfd-3-surfaces.json` for product-owned KFD-3 surface\n registration;\n- `.buildchain/contract-lock.json` for accepted floating runtime contracts.\n\nBuildchain still reads the legacy root files `buildchain.toml`,\n`buildchain.contract-lock.json`, and `buildchain.kfd3.json` so existing\nconsumers do not break, but new repositories should keep repo-owned Buildchain\nfiles under `.buildchain/`.\n\n## Unified Namespace\n\nKFD support is exposed through one first-class namespace:\n\n```bash\nbuildchain kfd status --json\nbuildchain kfd migrate-layout --write\nbuildchain kfd schema list --json\nbuildchain kfd 1 witness --json\nbuildchain kfd 2 claims --json\nbuildchain kfd 2 trust-claims --json\nbuildchain kfd 2 trust-assessment --json\nbuildchain kfd 3 query buildchain --json\nbuildchain kfd 4 schema --json\n```\n\nKFD-1, KFD-2, and KFD-3 have concrete Buildchain workflows. KFD-4 is currently\nschema-only in Buildchain: agents can discover and read the KFD-4 schema from\n`@kungfu-tech/kfd`, but Buildchain does not claim KFD-4 verification.\n\n## KFD-1\n\nKFD-1 proves that a product release is bound to one contract world. Buildchain\nuses KFD-1 for its runtime contract, release-passport schemas, packaged docs,\nNode exports, workflows, actions, and site-consumption facts.\n\nFor Buildchain itself, the source registry lives in\n`packages/core/buildchain-kfd-claims.js` and is projected to\n`dist/site/kfd-claims.json`. Release promotion binds that registry to exact\nsource and artifact hashes in the release passport.\n\nBuildchain exposes KFD-1 through:\n\n```bash\nbuildchain kfd 1 schema --json\nbuildchain kfd 1 witness --json\nbuildchain kfd 1 gate --witness-json kfd-1-witness.json --json\nbuildchain kfd 1 verify --gate-json kfd-1-gate.json --json\n```\n\n## KFD-2\n\nKFD-2 requires public trust claims to be backed by machine-readable evidence.\nBuildchain release passports fail or downgrade claims that only have prose.\n\nEvery public claim binds:\n\n- declared source files;\n- machine-readable evidence;\n- source, evidence, and artifact hashes;\n- artifact coordinates;\n- verification result;\n- audit boundary;\n- responsibility state;\n- residual risk.\n\nBuildchain exposes KFD-2 through:\n\n```bash\nbuildchain kfd 2 schema --json\nbuildchain kfd 2 taxonomy --entry-json residual-risk.json --kind residualRisk --json\nbuildchain kfd 2 claims --json\nbuildchain kfd 2 trust-claims --json\nbuildchain kfd 2 trust-assessment --json\n```\n\n`claims` generates Buildchain's release-passport public claim inputs. The\n`trust-claims` and `trust-assessment` commands expose the latest KFD package's\nfoundation KFD-2 facts from `@kungfu-tech/kfd` and validate their taxonomy\nvalues against the KFD-owned `trust-taxonomy` schema. Unknown `riskType`,\n`trustImpact`, `machineProvability`, or `agentAction` values fail validation;\nnew values must be requested upstream in `kungfu-systems/kfd`, not invented in\nBuildchain.\n\n## KFD-3\n\nKFD-3 closes participant-facing collaboration surfaces over a declared public\ninterface. Buildchain supports two complementary KFD-3 layers.\n\nThe first layer is Buildchain self-verification. Buildchain reverse-enumerates\nreal CLI commands, reusable workflow inputs, action inputs, site pages, and\ndocumented command references, then compares those facts with the generated\nregistries in `dist/site/`. A missing registry entry fails `pnpm run check`.\n\nThe second layer is product surface registration. Products can ask Buildchain to\ndetect standard public surfaces, write a small product-owned registry, audit the\nregistry against the current artifact/source tree, generate a release-passport\ncompatible witness, and query the resulting capability map.\n\n## Detected, Declared, Enforced\n\nKFD-3 surface registration uses three states.\n\n| State | Meaning |\n| --- | --- |\n| `detected` | Buildchain found a candidate public surface from package metadata, wheel metadata, CLI bins, binary artifacts, docs, or site bundle facts. |\n| `declared` | The product owner accepted that candidate into `.buildchain/kfd/kfd-3-surfaces.json`. |\n| `enforced` | The product has promoted a declared surface to a hard release boundary. Missing enforced surfaces fail release verification. |\n\nDetection does not silently become product intent. `register` is the boundary\ndecision. Existing consumers are unaffected until they opt in.\n\n## CLI\n\nInspect KFD-owned schema facts:\n\n```bash\nbuildchain kfd schema list --json\nbuildchain kfd schema show kfd-1 --json\nbuildchain kfd 4 schema --json\n```\n\nThe KFD schema namespace is discovered from `@kungfu-tech/kfd/standards.json`.\nFor KFD-2 this includes `trustClaims`, `trustAssessment`, `trustTaxonomy`,\n`releaseClaims`, and `releaseTrustPassport`. For KFD-4 Buildchain currently\nexposes the KFD-owned `observerPerspective` schema only.\n\nDetect public surface candidates:\n\n```bash\nbuildchain kfd 3 detect --json\nbuildchain kfd 3 detect --kind node-api --kind cli --json\n```\n\nRegister standard surface classes:\n\n```bash\nbuildchain kfd 3 register node-api --product Buildchain\nbuildchain kfd 3 register cli\nbuildchain kfd 3 register python-api --artifact dist/wheel-unpacked\n```\n\nAudit detected, declared, and enforced surfaces:\n\n```bash\nbuildchain kfd 3 audit --json\n```\n\nGenerate a witness for release passport collection:\n\n```bash\nbuildchain kfd 3 witness \\\n --kind prebuild \\\n --output .buildchain/kfd-3/collaboration-interface.prebuild.json\n```\n\nQuery capability facts for agents or downstream sites:\n\n```bash\nbuildchain kfd 3 query buildchain --json\nbuildchain kfd 3 query --passport .buildchain/release-passport/buildchain.release.json --json\n```\n\n## Node API\n\nThe CLI is a thin wrapper over the public Node API:\n\n```js\nimport {\n kfd1,\n kfd2,\n kfd3,\n kfd4,\n collectKfdStatus,\n listKfdSchemas,\n readKfdSchema,\n} from \"@kungfu-tech/buildchain/kfd\";\n```\n\nAgents should start with `collectKfdStatus()` to learn which standards are\nimplemented and where the repository-owned Buildchain files live. For capability\nuse decisions, prefer `kfd3.queryCapabilities()`. The query result connects each\ncapability to:\n\n- KFD-3 surface identity and state;\n- KFD-1 basis facts such as source and artifact paths or digests;\n- KFD-2 trust evidence when a release passport is attached;\n- residual risk and recommended agent action.\n\n## Standard Detectors\n\nThe initial detector set is intentionally conservative:\n\n- npm packages: `package.json` `exports`, `main`, `types`, and `bin`;\n- Python wheels: unpacked `.dist-info/METADATA`, `RECORD`,\n `entry_points.txt`, and `top_level.txt`;\n- CLI binaries: `package.json#bin` and files under `bin/`;\n- standalone binaries and archives: common binary/archive outputs under\n artifact directories such as `dist/`;\n- documentation: `README.md`, `AGENTS.md`, and `docs/*.md`;\n- site bundles: `dist/site/*.json`.\n\nPython importability alone is not considered public API. A product can extend\nthe registry over time, but the first boundary is metadata-based.\n\n## Buildchain Self Dogfood\n\nBuildchain dogfoods this model in two ways:\n\n- `buildchain kfd 1 witness --json` generates Buildchain's own KFD-1 contract\n world witness;\n- `buildchain kfd 2 claims --json` generates Buildchain's own KFD-2 public\n claim evidence;\n- `buildchain kfd 2 trust-claims --json` and\n `buildchain kfd 2 trust-assessment --json` expose and validate the KFD\n package's foundation KFD-2 trust facts against the latest KFD taxonomy;\n- `dist/site/kfd-claims.json` declares Buildchain's own KFD-3 collaboration\n interface;\n- `buildchain kfd 3 query buildchain --json` resolves the packaged\n Buildchain capability map from that site fact source.\n\nThis lets downstream agents discover Buildchain's supported CLI, Node API,\nrelease passport, workflow, and site bundle surfaces from the npm package\ninstead of scraping source files or README examples.\n\n## Known Gaps\n\nArchive unpacking for `.whl`, `.tar.gz`, `.zip`, and platform-native installers\nis intentionally not part of the first detector. Callers can point\n`--artifact` at an unpacked artifact directory. Future Buildchain versions can\nadd archive readers without changing the registry contract."
|
|
666
|
+
"markdown": "# KFD Support\n\nBuildchain implements KFD support as release evidence and product capability\nfacts, not as README prose. The machine-readable sources are:\n\n- `dist/site/kfd-claims.json` for Buildchain-owned public claims and KFD-3\n collaboration surfaces;\n- `dist/site/public-surface-audit.json` for reverse enumeration of exposed CLI,\n workflow, action, site, and documented command surfaces;\n- `buildchain.release.json` for release-specific KFD-1, KFD-2, and KFD-3\n passport results;\n- `.buildchain/buildchain.toml` for repository-owned Buildchain configuration;\n- `.buildchain/kfd/kfd-3-surfaces.json` for product-owned KFD-3 surface\n registration;\n- `.buildchain/contract-lock.json` for accepted floating runtime contracts.\n\nBuildchain still reads the legacy root files `buildchain.toml`,\n`buildchain.contract-lock.json`, and `buildchain.kfd3.json` so existing\nconsumers do not break, but new repositories should keep repo-owned Buildchain\nfiles under `.buildchain/`.\n\n## Unified Namespace\n\nKFD support is exposed through one first-class namespace:\n\n```bash\nbuildchain kfd status --json\nbuildchain kfd migrate-layout --write\nbuildchain kfd schema list --json\nbuildchain kfd 1 witness --json\nbuildchain kfd 2 claims --json\nbuildchain kfd 2 trust-claims --json\nbuildchain kfd 2 trust-assessment --json\nbuildchain kfd upstream roles --json\nbuildchain kfd upstream collect --json\nbuildchain kfd upstream check --json\nbuildchain kfd aggregate --json\nbuildchain kfd 3 query buildchain --json\nbuildchain kfd 4 schema --json\n```\n\nKFD-1, KFD-2, and KFD-3 have concrete Buildchain workflows. KFD-4 is currently\nschema-only in Buildchain: agents can discover and read the KFD-4 schema from\n`@kungfu-tech/kfd`, but Buildchain does not claim KFD-4 verification.\n\n## KFD-1\n\nKFD-1 proves that a product release is bound to one contract world. Buildchain\nuses KFD-1 for its runtime contract, release-passport schemas, packaged docs,\nNode exports, workflows, actions, and site-consumption facts.\n\nFor Buildchain itself, the source registry lives in\n`packages/core/buildchain-kfd-claims.js` and is projected to\n`dist/site/kfd-claims.json`. Release promotion binds that registry to exact\nsource and artifact hashes in the release passport.\n\nBuildchain exposes KFD-1 through:\n\n```bash\nbuildchain kfd 1 schema --json\nbuildchain kfd 1 witness --json\nbuildchain kfd 1 gate --witness-json kfd-1-witness.json --json\nbuildchain kfd 1 verify --gate-json kfd-1-gate.json --json\n```\n\n## KFD-2\n\nKFD-2 requires public trust claims to be backed by machine-readable evidence.\nBuildchain release passports fail or downgrade claims that only have prose.\n\nEvery public claim binds:\n\n- declared source files;\n- machine-readable evidence;\n- source, evidence, and artifact hashes;\n- artifact coordinates;\n- verification result;\n- audit boundary;\n- responsibility state;\n- residual risk.\n\nBuildchain exposes KFD-2 through:\n\n```bash\nbuildchain kfd 2 schema --json\nbuildchain kfd 2 taxonomy --entry-json residual-risk.json --kind residualRisk --json\nbuildchain kfd 2 claims --json\nbuildchain kfd 2 trust-claims --json\nbuildchain kfd 2 trust-assessment --json\n```\n\n`claims` generates Buildchain's release-passport public claim inputs. The\n`trust-claims` and `trust-assessment` commands expose the latest KFD package's\nfoundation KFD-2 facts from `@kungfu-tech/kfd` and validate their taxonomy\nvalues against the KFD-owned `trust-taxonomy` schema. Unknown `riskType`,\n`trustImpact`, `machineProvability`, or `agentAction` values fail validation;\nnew values must be requested upstream in `kungfu-systems/kfd`, not invented in\nBuildchain.\n\n`@kungfu-tech/kfd` is a runtime dependency of Buildchain, not a development-only\ndependency. The public `buildchain kfd ...` CLI and `@kungfu-tech/buildchain/kfd`\nNode API read KFD-owned standards metadata, schemas, foundation trust claims,\nfoundation trust assessments, and taxonomy values at runtime. Moving KFD to\n`devDependencies` would make installed Buildchain packages unable to answer KFD\nqueries in consumer repositories.\n\n## Upstream KFD Aggregation\n\nProducts often depend on multiple KFD-aware upstream components. A product's own\nKFD status is not the same thing as the status of those upstreams, but agents\nstill need one machine-readable view of the upstream trust surface.\n\nBuildchain exposes that view through:\n\n```bash\nbuildchain kfd upstream roles --json\nbuildchain kfd upstream collect --json\nbuildchain kfd upstream check --json\nbuildchain kfd aggregate --json\n```\n\n`upstream collect` reads `.buildchain/buildchain.toml`, resolves declared\npackages from the caller repository, hashes declared evidence assets, and emits\na `kungfu-buildchain-kfd-upstream-aggregate` document. `upstream check` validates\nthat aggregate. `aggregate` combines the product's own Buildchain KFD status\nwith the upstream aggregate.\n\nThis works in development before the consuming repository has published an\nalpha or release. In that state Buildchain can collect and check upstream\nfacts, versions, hashes, roles, and residual risk, but the consuming product\nmust not claim its own KFD status as `passed` until a release passport verifies\nthat product release.\n\nThe repository-owned declaration is intentionally small. Consumers normally\ndeclare the upstream package identity, not Buildchain's inferred role or a\nduplicate semver:\n\n```toml\n[kfd.upstream]\nauto_discover = false\n\n[[kfd.upstream.components]]\nid = \"kfd\"\npackage = \"@kungfu-tech/kfd\"\nrepository = \"kungfu-systems/kfd\"\nevidence = [\n \"package:kfd.release.json\",\n \"package:.buildchain/kfd-1/contract-world.witness.json\",\n \"package:.buildchain/kfd-2/public-release-trust.claim.json\",\n \"package:.buildchain/kfd-3/collaboration-interface.json\",\n \"package:standards.json\",\n]\n```\n\nThe upstream package version is a single source of truth owned by the package\nmanager. Put the dependency in `package.json` / the lockfile, then let\nBuildchain read the installed package's real `package.json`:\n\n```json\n{\n \"devDependencies\": {\n \"@kungfu-tech/kfd\": \"1.0.0-alpha.21\"\n }\n}\n```\n\nMost consumers should keep `@kungfu-tech/kfd` in `devDependencies`: Buildchain\nuses it during CI, development checks, release evidence collection, and site\ngeneration. Move it to `dependencies` only if the product's own runtime imports\nKFD directly. Buildchain itself keeps KFD in `dependencies` because its public\nCLI and Node API resolve KFD standards, schemas, taxonomy, and foundation trust\nfacts at runtime.\n\nDo not repeat upstream semver values in `.buildchain/buildchain.toml`. Repeating\nversions in both `package.json` and Buildchain config creates stale facts.\n`upstream collect` records the actual installed package version and evidence\nhashes in the aggregate output.\n\n`kfd_1`, `kfd_2`, `kfd_3`, and `kfd_4` are optional capability-state hints. When\nomitted, Buildchain treats the component as `declared`. Use explicit values only\nwhen the upstream package really exposes the corresponding machine evidence,\nfor example:\n\n```toml\nkfd_1 = \"exported-witness\"\nkfd_2 = \"exported-claim\"\nkfd_3 = \"exported-collaboration-interface\"\nkfd_4 = \"schema-metadata\"\n```\n\nAn upstream component may be `declared`, `aligned`, `exported-*`, or another\nexplicit non-passed state when the evidence is package-local. A component may\nclaim `passed` only when the aggregate also binds that component to a release\npassport. Upstream `passed` never upgrades the product's own KFD status; it only\ndescribes the upstream trust surface consumed by the product.\n\n### Upstream Roles\n\nConsumers should normally omit `role`. Buildchain owns the role vocabulary and\ninfers the role from package identity and evidence. The aggregate records:\n\n- `role` - the normalized Buildchain-managed role;\n- `roleSource` - `known-package`, `evidence`, `default`, or `explicit`;\n- `roleReason` - the machine-readable explanation for the chosen role.\n\nThe managed role registry is queryable:\n\n```bash\nbuildchain kfd upstream roles --json\n```\n\nCurrent roles are:\n\n| Role | Meaning |\n| --- | --- |\n| `standard-and-schema-provider` | Provides KFD standards, schemas, taxonomy, or standard-owned witness and claim facts. |\n| `release-passport-and-kfd-gate-provider` | Provides release passport, KFD gate, release claim, or release governance machinery consumed by the product. |\n| `kfd-aware-product-component` | A product component that exposes KFD witness, claim, collaboration-interface, or package evidence without being core KFD infrastructure. |\n| `site-consumption-provider` | Provides site-consumption facts such as site manifests, site bundles, or downstream page-content contracts. |\n| `unknown-kfd-upstream` | Fallback for a declared upstream that has not matched a Buildchain-known package or role-specific evidence. |\n\nIf a consumer explicitly writes `role`, it must be one of that registry. Unknown\nexplicit values fail closed during `upstream check`; Buildchain will not let\nrepositories invent local role spellings that later fragment aggregate reports.\n\nBuildchain dogfoods this model with `@kungfu-tech/kfd` as its upstream\nstandard-and-schema provider. The generated site bundle includes\n`dist/site/kfd-upstream-aggregate.json` so downstream sites and agents can read\nBuildchain's upstream KFD facts from the npm package instead of scraping\nrepository scripts.\n\n## KFD-3\n\nKFD-3 closes participant-facing collaboration surfaces over a declared public\ninterface. Buildchain supports two complementary KFD-3 layers.\n\nThe first layer is Buildchain self-verification. Buildchain reverse-enumerates\nreal CLI commands, reusable workflow inputs, action inputs, site pages, and\ndocumented command references, then compares those facts with the generated\nregistries in `dist/site/`. A missing registry entry fails `pnpm run check`.\n\nThe second layer is product surface registration. Products can ask Buildchain to\ndetect standard public surfaces, write a small product-owned registry, audit the\nregistry against the current artifact/source tree, generate a release-passport\ncompatible witness, and query the resulting capability map.\n\n## Detected, Declared, Enforced\n\nKFD-3 surface registration uses three states.\n\n| State | Meaning |\n| --- | --- |\n| `detected` | Buildchain found a candidate public surface from package metadata, wheel metadata, CLI bins, binary artifacts, docs, or site bundle facts. |\n| `declared` | The product owner accepted that candidate into `.buildchain/kfd/kfd-3-surfaces.json`. |\n| `enforced` | The product has promoted a declared surface to a hard release boundary. Missing enforced surfaces fail release verification. |\n\nDetection does not silently become product intent. `register` is the boundary\ndecision. Existing consumers are unaffected until they opt in.\n\n## CLI\n\nInspect KFD-owned schema facts:\n\n```bash\nbuildchain kfd schema list --json\nbuildchain kfd schema show kfd-1 --json\nbuildchain kfd 4 schema --json\n```\n\nThe KFD schema namespace is discovered from `@kungfu-tech/kfd/standards.json`.\nFor KFD-2 this includes `trustClaims`, `trustAssessment`, `trustTaxonomy`,\n`releaseClaims`, and `releaseTrustPassport`. For KFD-4 Buildchain currently\nexposes the KFD-owned `observerPerspective` schema only.\n\nDetect public surface candidates:\n\n```bash\nbuildchain kfd 3 detect --json\nbuildchain kfd 3 detect --kind node-api --kind cli --json\n```\n\nRegister standard surface classes:\n\n```bash\nbuildchain kfd 3 register node-api --product Buildchain\nbuildchain kfd 3 register cli\nbuildchain kfd 3 register python-api --artifact dist/wheel-unpacked\n```\n\nAudit detected, declared, and enforced surfaces:\n\n```bash\nbuildchain kfd 3 audit --json\n```\n\nGenerate a witness for release passport collection:\n\n```bash\nbuildchain kfd 3 witness \\\n --kind prebuild \\\n --output .buildchain/kfd-3/collaboration-interface.prebuild.json\n```\n\nQuery capability facts for agents or downstream sites:\n\n```bash\nbuildchain kfd 3 query buildchain --json\nbuildchain kfd 3 query --passport .buildchain/release-passport/buildchain.release.json --json\n```\n\n## Node API\n\nThe CLI is a thin wrapper over the public Node API:\n\n```js\nimport {\n kfd1,\n kfd2,\n kfd3,\n kfd4,\n upstream,\n collectKfdAggregate,\n collectKfdStatus,\n collectKfdUpstreamFacts,\n checkKfdUpstreamFacts,\n listKfdUpstreamRoles,\n listKfdSchemas,\n readKfdSchema,\n} from \"@kungfu-tech/buildchain/kfd\";\n```\n\nAgents should start with `collectKfdStatus()` to learn which standards are\nimplemented and where the repository-owned Buildchain files live. For capability\nuse decisions, prefer `kfd3.queryCapabilities()`. The query result connects each\ncapability to:\n\n- KFD-3 surface identity and state;\n- KFD-1 basis facts such as source and artifact paths or digests;\n- KFD-2 trust evidence when a release passport is attached;\n- residual risk and recommended agent action.\n\n## Standard Detectors\n\nThe initial detector set is intentionally conservative:\n\n- npm packages: `package.json` `exports`, `main`, `types`, and `bin`;\n- Python wheels: unpacked `.dist-info/METADATA`, `RECORD`,\n `entry_points.txt`, and `top_level.txt`;\n- CLI binaries: `package.json#bin` and files under `bin/`;\n- standalone binaries and archives: common binary/archive outputs under\n artifact directories such as `dist/`;\n- documentation: `README.md`, `AGENTS.md`, and `docs/*.md`;\n- site bundles: `dist/site/*.json`.\n\nPython importability alone is not considered public API. A product can extend\nthe registry over time, but the first boundary is metadata-based.\n\n## Buildchain Self Dogfood\n\nBuildchain dogfoods this model in two ways:\n\n- `buildchain kfd 1 witness --json` generates Buildchain's own KFD-1 contract\n world witness;\n- `buildchain kfd 2 claims --json` generates Buildchain's own KFD-2 public\n claim evidence;\n- `buildchain kfd 2 trust-claims --json` and\n `buildchain kfd 2 trust-assessment --json` expose and validate the KFD\n package's foundation KFD-2 trust facts against the latest KFD taxonomy;\n- `dist/site/kfd-claims.json` declares Buildchain's own KFD-3 collaboration\n interface;\n- `buildchain kfd 3 query buildchain --json` resolves the packaged\n Buildchain capability map from that site fact source.\n\nThis lets downstream agents discover Buildchain's supported CLI, Node API,\nrelease passport, workflow, and site bundle surfaces from the npm package\ninstead of scraping source files or README examples.\n\n## Known Gaps\n\nArchive unpacking for `.whl`, `.tar.gz`, `.zip`, and platform-native installers\nis intentionally not part of the first detector. Callers can point\n`--artifact` at an unpacked artifact directory. Future Buildchain versions can\nadd archive readers without changing the registry contract."
|
|
656
667
|
},
|
|
657
668
|
{
|
|
658
669
|
"id": "manual:lifecycle-protocol",
|
|
@@ -2238,7 +2249,7 @@
|
|
|
2238
2249
|
"path": "docs/kfd-support.md",
|
|
2239
2250
|
"plane": "verify",
|
|
2240
2251
|
"exists": true,
|
|
2241
|
-
"digest": "sha256:
|
|
2252
|
+
"digest": "sha256:4bcf5d1ce63555072130eae90c739555b11658d1d796a3fcea770b90841c4afd"
|
|
2242
2253
|
},
|
|
2243
2254
|
{
|
|
2244
2255
|
"id": "lifecycle-protocol",
|
|
@@ -2373,6 +2384,7 @@
|
|
|
2373
2384
|
"public surface reverse audit",
|
|
2374
2385
|
"manual and Node API registries",
|
|
2375
2386
|
"KFD claim registry",
|
|
2387
|
+
"KFD upstream aggregate registry",
|
|
2376
2388
|
"release-passport evidence vocabulary"
|
|
2377
2389
|
],
|
|
2378
2390
|
"ownedBySite": [
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"cli-registry.json",
|
|
33
33
|
"node-api-registry.json",
|
|
34
34
|
"workflow-registry.json",
|
|
35
|
+
"kfd-upstream-aggregate.json",
|
|
35
36
|
"kfd-claims.json"
|
|
36
37
|
]
|
|
37
38
|
},
|
|
@@ -63,6 +64,7 @@
|
|
|
63
64
|
"cli-registry.json",
|
|
64
65
|
"node-api-registry.json",
|
|
65
66
|
"workflow-registry.json",
|
|
67
|
+
"kfd-upstream-aggregate.json",
|
|
66
68
|
"kfd-claims.json"
|
|
67
69
|
]
|
|
68
70
|
},
|
|
@@ -94,6 +96,7 @@
|
|
|
94
96
|
"cli-registry.json",
|
|
95
97
|
"node-api-registry.json",
|
|
96
98
|
"workflow-registry.json",
|
|
99
|
+
"kfd-upstream-aggregate.json",
|
|
97
100
|
"kfd-claims.json"
|
|
98
101
|
]
|
|
99
102
|
},
|
|
@@ -109,7 +112,7 @@
|
|
|
109
112
|
"counts": {
|
|
110
113
|
"manualCount": 1,
|
|
111
114
|
"pageCount": 1,
|
|
112
|
-
"cliCommandCount":
|
|
115
|
+
"cliCommandCount": 25,
|
|
113
116
|
"nodeApiCount": 5,
|
|
114
117
|
"workflowCount": 0,
|
|
115
118
|
"actionCount": 0
|
|
@@ -123,6 +126,7 @@
|
|
|
123
126
|
"cli-registry.json",
|
|
124
127
|
"node-api-registry.json",
|
|
125
128
|
"workflow-registry.json",
|
|
129
|
+
"kfd-upstream-aggregate.json",
|
|
126
130
|
"kfd-claims.json"
|
|
127
131
|
]
|
|
128
132
|
},
|
|
@@ -155,6 +159,7 @@
|
|
|
155
159
|
"cli-registry.json",
|
|
156
160
|
"node-api-registry.json",
|
|
157
161
|
"workflow-registry.json",
|
|
162
|
+
"kfd-upstream-aggregate.json",
|
|
158
163
|
"kfd-claims.json"
|
|
159
164
|
]
|
|
160
165
|
},
|
|
@@ -186,6 +191,7 @@
|
|
|
186
191
|
"cli-registry.json",
|
|
187
192
|
"node-api-registry.json",
|
|
188
193
|
"workflow-registry.json",
|
|
194
|
+
"kfd-upstream-aggregate.json",
|
|
189
195
|
"kfd-claims.json"
|
|
190
196
|
]
|
|
191
197
|
},
|
|
@@ -217,6 +223,7 @@
|
|
|
217
223
|
"cli-registry.json",
|
|
218
224
|
"node-api-registry.json",
|
|
219
225
|
"workflow-registry.json",
|
|
226
|
+
"kfd-upstream-aggregate.json",
|
|
220
227
|
"kfd-claims.json"
|
|
221
228
|
]
|
|
222
229
|
},
|
|
@@ -252,6 +259,7 @@
|
|
|
252
259
|
"cli-registry.json",
|
|
253
260
|
"node-api-registry.json",
|
|
254
261
|
"workflow-registry.json",
|
|
262
|
+
"kfd-upstream-aggregate.json",
|
|
255
263
|
"kfd-claims.json"
|
|
256
264
|
]
|
|
257
265
|
},
|
|
@@ -281,6 +289,7 @@
|
|
|
281
289
|
"cli-registry.json",
|
|
282
290
|
"node-api-registry.json",
|
|
283
291
|
"workflow-registry.json",
|
|
292
|
+
"kfd-upstream-aggregate.json",
|
|
284
293
|
"kfd-claims.json"
|
|
285
294
|
]
|
|
286
295
|
}
|
|
@@ -485,6 +485,18 @@
|
|
|
485
485
|
],
|
|
486
486
|
"maturity": "stable"
|
|
487
487
|
},
|
|
488
|
+
{
|
|
489
|
+
"id": "kfd-aggregate",
|
|
490
|
+
"source": "bin/buildchain.mjs",
|
|
491
|
+
"usage": "buildchain kfd aggregate [--cwd <dir>] [--json]",
|
|
492
|
+
"purpose": "Return a product KFD view that combines own KFD status with upstream KFD aggregate facts.",
|
|
493
|
+
"capabilityGroup": "kfd-trust",
|
|
494
|
+
"audience": [
|
|
495
|
+
"agent",
|
|
496
|
+
"operator"
|
|
497
|
+
],
|
|
498
|
+
"maturity": "stable"
|
|
499
|
+
},
|
|
488
500
|
{
|
|
489
501
|
"id": "kfd-migrate-layout",
|
|
490
502
|
"source": "bin/buildchain.mjs",
|
|
@@ -533,6 +545,42 @@
|
|
|
533
545
|
],
|
|
534
546
|
"maturity": "stable"
|
|
535
547
|
},
|
|
548
|
+
{
|
|
549
|
+
"id": "kfd-upstream-check",
|
|
550
|
+
"source": "bin/buildchain.mjs",
|
|
551
|
+
"usage": "buildchain kfd upstream check [--cwd <dir>] [--aggregate-json <file-or-json>] [--json]",
|
|
552
|
+
"purpose": "Validate a KFD upstream aggregate document and fail closed on missing evidence.",
|
|
553
|
+
"capabilityGroup": "kfd-trust",
|
|
554
|
+
"audience": [
|
|
555
|
+
"agent",
|
|
556
|
+
"operator"
|
|
557
|
+
],
|
|
558
|
+
"maturity": "stable"
|
|
559
|
+
},
|
|
560
|
+
{
|
|
561
|
+
"id": "kfd-upstream-collect",
|
|
562
|
+
"source": "bin/buildchain.mjs",
|
|
563
|
+
"usage": "buildchain kfd upstream collect [--cwd <dir>] [--output <file>] [--json]",
|
|
564
|
+
"purpose": "Collect declared KFD-aware upstream package evidence and hashes from Buildchain config.",
|
|
565
|
+
"capabilityGroup": "kfd-trust",
|
|
566
|
+
"audience": [
|
|
567
|
+
"agent",
|
|
568
|
+
"operator"
|
|
569
|
+
],
|
|
570
|
+
"maturity": "stable"
|
|
571
|
+
},
|
|
572
|
+
{
|
|
573
|
+
"id": "kfd-upstream-roles",
|
|
574
|
+
"source": "bin/buildchain.mjs",
|
|
575
|
+
"usage": "buildchain kfd upstream roles [--json]",
|
|
576
|
+
"purpose": "List Buildchain-managed KFD upstream role values and inference policy.",
|
|
577
|
+
"capabilityGroup": "kfd-trust",
|
|
578
|
+
"audience": [
|
|
579
|
+
"agent",
|
|
580
|
+
"operator"
|
|
581
|
+
],
|
|
582
|
+
"maturity": "stable"
|
|
583
|
+
},
|
|
536
584
|
{
|
|
537
585
|
"id": "lifecycle",
|
|
538
586
|
"source": "bin/buildchain.mjs",
|
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
"contract": "kungfu-buildchain-public-surface-reverse-audit",
|
|
22
22
|
"path": "dist/site/public-surface-audit.json",
|
|
23
23
|
"status": "passed",
|
|
24
|
-
"sha256": "
|
|
24
|
+
"sha256": "9a3e5bce8fd3bdf9a48d76db89b7d464358db7c31d4753ac78cbbda664463565",
|
|
25
25
|
"summary": {
|
|
26
|
-
"cliCommandCount":
|
|
26
|
+
"cliCommandCount": 71,
|
|
27
27
|
"workflowCount": 35,
|
|
28
28
|
"actionCount": 4,
|
|
29
29
|
"sitePageCount": 43,
|
|
30
|
-
"docCommandRefCount":
|
|
30
|
+
"docCommandRefCount": 224,
|
|
31
31
|
"failureCount": 0
|
|
32
32
|
},
|
|
33
33
|
"auditBoundary": {
|
|
@@ -207,13 +207,13 @@
|
|
|
207
207
|
"contract": "kungfu-buildchain-public-surface-reverse-audit",
|
|
208
208
|
"path": "dist/site/public-surface-audit.json",
|
|
209
209
|
"status": "passed",
|
|
210
|
-
"sha256": "
|
|
210
|
+
"sha256": "9a3e5bce8fd3bdf9a48d76db89b7d464358db7c31d4753ac78cbbda664463565",
|
|
211
211
|
"summary": {
|
|
212
|
-
"cliCommandCount":
|
|
212
|
+
"cliCommandCount": 71,
|
|
213
213
|
"workflowCount": 35,
|
|
214
214
|
"actionCount": 4,
|
|
215
215
|
"sitePageCount": 43,
|
|
216
|
-
"docCommandRefCount":
|
|
216
|
+
"docCommandRefCount": 224,
|
|
217
217
|
"failureCount": 0
|
|
218
218
|
},
|
|
219
219
|
"auditBoundary": {
|
|
@@ -1310,6 +1310,17 @@
|
|
|
1310
1310
|
"visibility": "public",
|
|
1311
1311
|
"participantFacing": true,
|
|
1312
1312
|
"public": true
|
|
1313
|
+
},
|
|
1314
|
+
{
|
|
1315
|
+
"id": "site:dist/site/kfd-upstream-aggregate.json",
|
|
1316
|
+
"name": "site:dist/site/kfd-upstream-aggregate.json",
|
|
1317
|
+
"kind": "site-consumption-contract",
|
|
1318
|
+
"sourcePath": "dist/site/kfd-upstream-aggregate.json",
|
|
1319
|
+
"evidencePath": "dist/site/kfd-upstream-aggregate.json",
|
|
1320
|
+
"availability": "shipped",
|
|
1321
|
+
"visibility": "public",
|
|
1322
|
+
"participantFacing": true,
|
|
1323
|
+
"public": true
|
|
1313
1324
|
}
|
|
1314
1325
|
],
|
|
1315
1326
|
"reverseEnumeratedSurfaces": [
|
|
@@ -1793,6 +1804,18 @@
|
|
|
1793
1804
|
"public": true,
|
|
1794
1805
|
"reverseAuditSource": "bin/buildchain.mjs"
|
|
1795
1806
|
},
|
|
1807
|
+
{
|
|
1808
|
+
"id": "cli:kfd-aggregate",
|
|
1809
|
+
"name": "buildchain kfd aggregate [--cwd <dir>] [--json]",
|
|
1810
|
+
"kind": "cli-command",
|
|
1811
|
+
"sourcePath": "bin/buildchain.mjs",
|
|
1812
|
+
"evidencePath": "bin/buildchain.mjs",
|
|
1813
|
+
"availability": "shipped",
|
|
1814
|
+
"visibility": "public",
|
|
1815
|
+
"participantFacing": true,
|
|
1816
|
+
"public": true,
|
|
1817
|
+
"reverseAuditSource": "bin/buildchain.mjs"
|
|
1818
|
+
},
|
|
1796
1819
|
{
|
|
1797
1820
|
"id": "cli:kfd-migrate-layout",
|
|
1798
1821
|
"name": "buildchain kfd migrate-layout [--cwd <dir>] [--write] [--force] [--json]",
|
|
@@ -1841,6 +1864,42 @@
|
|
|
1841
1864
|
"public": true,
|
|
1842
1865
|
"reverseAuditSource": "bin/buildchain.mjs"
|
|
1843
1866
|
},
|
|
1867
|
+
{
|
|
1868
|
+
"id": "cli:kfd-upstream-check",
|
|
1869
|
+
"name": "buildchain kfd upstream check [--cwd <dir>] [--aggregate-json <file-or-json>] [--json]",
|
|
1870
|
+
"kind": "cli-command",
|
|
1871
|
+
"sourcePath": "bin/buildchain.mjs",
|
|
1872
|
+
"evidencePath": "bin/buildchain.mjs",
|
|
1873
|
+
"availability": "shipped",
|
|
1874
|
+
"visibility": "public",
|
|
1875
|
+
"participantFacing": true,
|
|
1876
|
+
"public": true,
|
|
1877
|
+
"reverseAuditSource": "bin/buildchain.mjs"
|
|
1878
|
+
},
|
|
1879
|
+
{
|
|
1880
|
+
"id": "cli:kfd-upstream-collect",
|
|
1881
|
+
"name": "buildchain kfd upstream collect [--cwd <dir>] [--output <file>] [--json]",
|
|
1882
|
+
"kind": "cli-command",
|
|
1883
|
+
"sourcePath": "bin/buildchain.mjs",
|
|
1884
|
+
"evidencePath": "bin/buildchain.mjs",
|
|
1885
|
+
"availability": "shipped",
|
|
1886
|
+
"visibility": "public",
|
|
1887
|
+
"participantFacing": true,
|
|
1888
|
+
"public": true,
|
|
1889
|
+
"reverseAuditSource": "bin/buildchain.mjs"
|
|
1890
|
+
},
|
|
1891
|
+
{
|
|
1892
|
+
"id": "cli:kfd-upstream-roles",
|
|
1893
|
+
"name": "buildchain kfd upstream roles [--json]",
|
|
1894
|
+
"kind": "cli-command",
|
|
1895
|
+
"sourcePath": "bin/buildchain.mjs",
|
|
1896
|
+
"evidencePath": "bin/buildchain.mjs",
|
|
1897
|
+
"availability": "shipped",
|
|
1898
|
+
"visibility": "public",
|
|
1899
|
+
"participantFacing": true,
|
|
1900
|
+
"public": true,
|
|
1901
|
+
"reverseAuditSource": "bin/buildchain.mjs"
|
|
1902
|
+
},
|
|
1844
1903
|
{
|
|
1845
1904
|
"id": "cli:lifecycle",
|
|
1846
1905
|
"name": "buildchain lifecycle run <stage> [--cwd <dir>] [--required]",
|
|
@@ -3722,6 +3781,6 @@
|
|
|
3722
3781
|
"public": true
|
|
3723
3782
|
}
|
|
3724
3783
|
],
|
|
3725
|
-
"publicSurfaceCount":
|
|
3784
|
+
"publicSurfaceCount": 252
|
|
3726
3785
|
}
|
|
3727
3786
|
}
|