@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.
@@ -0,0 +1,120 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "contract": "kungfu-buildchain-kfd-upstream-aggregate",
4
+ "product": {
5
+ "id": "kungfu-tech-buildchain",
6
+ "name": "@kungfu-tech/buildchain",
7
+ "version": "2.10.9",
8
+ "repository": "https://github.com/kungfu-systems/buildchain"
9
+ },
10
+ "source": {
11
+ "generator": "@kungfu-tech/buildchain/kfd.collectKfdUpstreamFacts",
12
+ "configPath": ".buildchain/buildchain.toml",
13
+ "autoDiscover": false
14
+ },
15
+ "upstreams": [
16
+ {
17
+ "id": "kfd",
18
+ "role": "standard-and-schema-provider",
19
+ "roleSource": "known-package",
20
+ "roleReason": "@kungfu-tech/kfd is a Buildchain-known KFD upstream package.",
21
+ "roleValid": true,
22
+ "package": {
23
+ "name": "@kungfu-tech/kfd",
24
+ "version": "1.0.0-alpha.21"
25
+ },
26
+ "repository": "kungfu-systems/kfd",
27
+ "kfd": {
28
+ "kfd1": "exported-witness",
29
+ "kfd2": "exported-claim",
30
+ "kfd3": "exported-collaboration-interface",
31
+ "kfd4": "schema-metadata"
32
+ },
33
+ "releasePassport": "",
34
+ "releaseAnchor": {
35
+ "schemaVersion": 1,
36
+ "contract": "kfd-release-anchor",
37
+ "line": "v1.0",
38
+ "channel": "alpha",
39
+ "npmPackage": "@kungfu-tech/kfd",
40
+ "npmVersion": "1.0.0-alpha.21",
41
+ "source": {
42
+ "repository": "kungfu-systems/kfd",
43
+ "branch": "alpha/v1/v1.0"
44
+ },
45
+ "rationale": "KFD uses an anchored/manual Buildchain mode: the public package version is an explicit release fact, while the outer KFD line remains v1.0."
46
+ },
47
+ "kfd3SurfaceCount": 18,
48
+ "assets": [
49
+ {
50
+ "path": "kfd.release.json",
51
+ "kind": "package",
52
+ "sha256": "sha256:bfb302c839b6cb45204d541b5af5b1c211568efb16fb3eebbb04dc65f7de83d2",
53
+ "contract": "kfd-release-anchor",
54
+ "role": "",
55
+ "directory": false
56
+ },
57
+ {
58
+ "path": ".buildchain/kfd-1/contract-world.witness.json",
59
+ "kind": "package",
60
+ "sha256": "sha256:542fe5b730f2e4782655d096ec04a5dd82a88d4fc9e8701ee235eb111a06dab6",
61
+ "contract": "",
62
+ "role": "",
63
+ "directory": false
64
+ },
65
+ {
66
+ "path": ".buildchain/kfd-2/public-release-trust.claim.json",
67
+ "kind": "package",
68
+ "sha256": "sha256:3780b47472762b5ce9575250da73ee800af71dd194a9b0a3f61a063569311237",
69
+ "contract": "",
70
+ "role": "",
71
+ "directory": false
72
+ },
73
+ {
74
+ "path": ".buildchain/kfd-2/kfd-foundation.trust-claims.json",
75
+ "kind": "package",
76
+ "sha256": "sha256:87757bd26c8f64465472aaafda05fe56497939a3ce66274563c142594d9d769b",
77
+ "contract": "kfd-2-trust-claims",
78
+ "role": "",
79
+ "directory": false
80
+ },
81
+ {
82
+ "path": ".buildchain/kfd-2/kfd-foundation.trust-assessment.json",
83
+ "kind": "package",
84
+ "sha256": "sha256:c3749585bb4a295bb2f0f510a4b6030f0398d9a09dc50dab0ace31248bf95b0f",
85
+ "contract": "kfd-2-trust-assessment",
86
+ "role": "",
87
+ "directory": false
88
+ },
89
+ {
90
+ "path": ".buildchain/kfd-3/collaboration-interface.json",
91
+ "kind": "package",
92
+ "sha256": "sha256:fa41128be4ee57a4a40b76d4d7a063c01d7c2e5c53aec2b9c6db819c7a27b22b",
93
+ "contract": "kfd-3-collaboration-interface",
94
+ "role": "",
95
+ "directory": false
96
+ },
97
+ {
98
+ "path": "standards.json",
99
+ "kind": "package",
100
+ "sha256": "sha256:4ee9e5fc732eef1b43c75a146125496e0dbd859ef5a11d0c637c41e9091c677f",
101
+ "contract": "kfd-standards-metadata",
102
+ "role": "",
103
+ "directory": false
104
+ }
105
+ ],
106
+ "residualRisk": [],
107
+ "status": "collected"
108
+ }
109
+ ],
110
+ "summary": {
111
+ "upstreamCount": 1,
112
+ "kfdAwareUpstreams": [
113
+ "kfd"
114
+ ],
115
+ "packageVersions": {
116
+ "kfd": "1.0.0-alpha.21"
117
+ },
118
+ "status": "collected"
119
+ }
120
+ }
@@ -245,7 +245,7 @@
245
245
  "title": "KFD support and KFD-3 surface registration",
246
246
  "path": "docs/kfd-support.md",
247
247
  "plane": "verify",
248
- "digest": "sha256:d1fdec0890884340e4e8108c17b62866c08dc95771075e3e285532b5a7b0ee5a",
248
+ "digest": "sha256:4bcf5d1ce63555072130eae90c739555b11658d1d796a3fcea770b90841c4afd",
249
249
  "capabilityGroup": "kfd-trust",
250
250
  "audience": [
251
251
  "agent",
@@ -125,8 +125,8 @@
125
125
  "specifier": "@kungfu-tech/buildchain/kfd",
126
126
  "export": "./kfd",
127
127
  "target": "./packages/core/kfd.js",
128
- "digest": "sha256:e9170c1e56d2729cf530f953df9ade21963faa9a756ba5fbd0cdd03d8b781cb3",
129
- "summary": "Unified KFD standards, schema discovery, KFD-1/KFD-2/KFD-3 grouped APIs, KFD-4 schema discovery, and Buildchain KFD claim helpers.",
128
+ "digest": "sha256:843c68350fe5cefdd94bfe49355ab60d4b52ce63c5e52d1874a3e8ec78244070",
129
+ "summary": "Unified KFD standards, schema discovery, KFD-1/KFD-2/KFD-3 grouped APIs, KFD-4 schema discovery, upstream KFD aggregate facts, and Buildchain KFD claim helpers.",
130
130
  "capabilityGroup": "kfd-trust",
131
131
  "audience": [
132
132
  "developer",
@@ -177,7 +177,7 @@
177
177
  "specifier": "@kungfu-tech/buildchain/public-surface-audit",
178
178
  "export": "./public-surface-audit",
179
179
  "target": "./packages/core/public-surface-audit.js",
180
- "digest": "sha256:22b8354a876962400f47070b5917141faace5589c2b40fe54ed004816d6735d4",
180
+ "digest": "sha256:21e866a27cf96f6385f1fe2f3f0f73526fb9bba4c409334dbf9b34a886c80450",
181
181
  "summary": "Reverse audit APIs for CLI, workflow, action, site page, and documentation command surfaces.",
182
182
  "capabilityGroup": "kfd-trust",
183
183
  "audience": [
@@ -268,7 +268,7 @@
268
268
  "specifier": "@kungfu-tech/buildchain/buildchain-kfd-claims",
269
269
  "export": "./buildchain-kfd-claims",
270
270
  "target": "./packages/core/buildchain-kfd-claims.js",
271
- "digest": "sha256:e800194bd945e6727d2e467d3dc155e0df95c656d58047590d12e5174ca84463",
271
+ "digest": "sha256:a61fd06fa065808eb6b1205b0748ae8801525dbb22cb902122b62fddde48c355",
272
272
  "summary": "Buildchain self KFD claim registry, witnesses, and public claim APIs.",
273
273
  "capabilityGroup": "kfd-trust",
274
274
  "audience": [
@@ -292,7 +292,7 @@
292
292
  {
293
293
  "id": "kfd-support",
294
294
  "path": "docs/kfd-support.md",
295
- "digest": "sha256:d1fdec0890884340e4e8108c17b62866c08dc95771075e3e285532b5a7b0ee5a"
295
+ "digest": "sha256:4bcf5d1ce63555072130eae90c739555b11658d1d796a3fcea770b90841c4afd"
296
296
  },
297
297
  {
298
298
  "id": "readme-badges",
@@ -532,7 +532,7 @@
532
532
  ],
533
533
  "maturity": "stable",
534
534
  "sourcePath": "docs/kfd-support.md",
535
- "digest": "sha256:d1fdec0890884340e4e8108c17b62866c08dc95771075e3e285532b5a7b0ee5a",
535
+ "digest": "sha256:4bcf5d1ce63555072130eae90c739555b11658d1d796a3fcea770b90841c4afd",
536
536
  "headings": [
537
537
  {
538
538
  "level": 1,
@@ -554,6 +554,16 @@
554
554
  "title": "KFD-2",
555
555
  "anchor": "kfd-2"
556
556
  },
557
+ {
558
+ "level": 2,
559
+ "title": "Upstream KFD Aggregation",
560
+ "anchor": "upstream-kfd-aggregation"
561
+ },
562
+ {
563
+ "level": 3,
564
+ "title": "Upstream Roles",
565
+ "anchor": "upstream-roles"
566
+ },
557
567
  {
558
568
  "level": 2,
559
569
  "title": "KFD-3",
@@ -590,7 +600,7 @@
590
600
  "anchor": "known-gaps"
591
601
  }
592
602
  ],
593
- "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."
603
+ "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."
594
604
  },
595
605
  {
596
606
  "id": "manual:lifecycle-protocol",
@@ -3,11 +3,11 @@
3
3
  "contract": "kungfu-buildchain-public-surface-reverse-audit",
4
4
  "status": "passed",
5
5
  "summary": {
6
- "cliCommandCount": 67,
6
+ "cliCommandCount": 71,
7
7
  "workflowCount": 35,
8
8
  "actionCount": 4,
9
9
  "sitePageCount": 43,
10
- "docCommandRefCount": 214,
10
+ "docCommandRefCount": 224,
11
11
  "failureCount": 0
12
12
  },
13
13
  "enumerated": {
@@ -212,6 +212,11 @@
212
212
  "source": "bin/buildchain.mjs",
213
213
  "usage": "buildchain kfd 4 schema [--schema <name>] [--json]"
214
214
  },
215
+ {
216
+ "id": "kfd-aggregate",
217
+ "source": "bin/buildchain.mjs",
218
+ "usage": "buildchain kfd aggregate [--cwd <dir>] [--json]"
219
+ },
215
220
  {
216
221
  "id": "kfd-migrate-layout",
217
222
  "source": "bin/buildchain.mjs",
@@ -232,6 +237,21 @@
232
237
  "source": "bin/buildchain.mjs",
233
238
  "usage": "buildchain kfd status [--cwd <dir>] [--json]"
234
239
  },
240
+ {
241
+ "id": "kfd-upstream-check",
242
+ "source": "bin/buildchain.mjs",
243
+ "usage": "buildchain kfd upstream check [--cwd <dir>] [--aggregate-json <file-or-json>] [--json]"
244
+ },
245
+ {
246
+ "id": "kfd-upstream-collect",
247
+ "source": "bin/buildchain.mjs",
248
+ "usage": "buildchain kfd upstream collect [--cwd <dir>] [--output <file>] [--json]"
249
+ },
250
+ {
251
+ "id": "kfd-upstream-roles",
252
+ "source": "bin/buildchain.mjs",
253
+ "usage": "buildchain kfd upstream roles [--json]"
254
+ },
235
255
  {
236
256
  "id": "lifecycle",
237
257
  "source": "bin/buildchain.mjs",
@@ -1854,6 +1874,16 @@
1854
1874
  "path": "docs/kfd-support.md",
1855
1875
  "command": "buildchain kfd 4 schema"
1856
1876
  },
1877
+ {
1878
+ "id": "kfd-aggregate",
1879
+ "path": "docs/kfd-support.md",
1880
+ "command": "buildchain kfd aggregate --json"
1881
+ },
1882
+ {
1883
+ "id": "kfd-aggregate",
1884
+ "path": "docs/kfd-support.md",
1885
+ "command": "buildchain kfd aggregate --json"
1886
+ },
1857
1887
  {
1858
1888
  "id": "kfd-migrate-layout",
1859
1889
  "path": "docs/cli.md",
@@ -1899,11 +1929,51 @@
1899
1929
  "path": "docs/kfd-support.md",
1900
1930
  "command": "buildchain kfd status --json"
1901
1931
  },
1932
+ {
1933
+ "id": "kfd-upstream-check",
1934
+ "path": "docs/kfd-support.md",
1935
+ "command": "buildchain kfd upstream check"
1936
+ },
1937
+ {
1938
+ "id": "kfd-upstream-check",
1939
+ "path": "docs/kfd-support.md",
1940
+ "command": "buildchain kfd upstream check"
1941
+ },
1942
+ {
1943
+ "id": "kfd-upstream-collect",
1944
+ "path": "docs/kfd-support.md",
1945
+ "command": "buildchain kfd upstream collect"
1946
+ },
1947
+ {
1948
+ "id": "kfd-upstream-collect",
1949
+ "path": "docs/kfd-support.md",
1950
+ "command": "buildchain kfd upstream collect"
1951
+ },
1952
+ {
1953
+ "id": "kfd-upstream-roles",
1954
+ "path": "docs/kfd-support.md",
1955
+ "command": "buildchain kfd upstream roles"
1956
+ },
1957
+ {
1958
+ "id": "kfd-upstream-roles",
1959
+ "path": "docs/kfd-support.md",
1960
+ "command": "buildchain kfd upstream roles"
1961
+ },
1962
+ {
1963
+ "id": "kfd-upstream-roles",
1964
+ "path": "docs/kfd-support.md",
1965
+ "command": "buildchain kfd upstream roles"
1966
+ },
1902
1967
  {
1903
1968
  "id": "kfd",
1904
1969
  "path": "docs/cli.md",
1905
1970
  "command": "buildchain kfd"
1906
1971
  },
1972
+ {
1973
+ "id": "kfd",
1974
+ "path": "docs/kfd-support.md",
1975
+ "command": "buildchain kfd"
1976
+ },
1907
1977
  {
1908
1978
  "id": "kfd",
1909
1979
  "path": "README.md",
@@ -2310,9 +2380,9 @@
2310
2380
  "cliRegistryPath": "dist/site/cli-registry.json",
2311
2381
  "workflowRegistryPath": "dist/site/workflow-registry.json",
2312
2382
  "pageRegistryPath": "dist/site/page-registry.json",
2313
- "cliRegistryDigest": "a3cec96bbde43078fa328afb51e0c0e9df87f4aab494ea4b9841a05a67261f00",
2383
+ "cliRegistryDigest": "239414b93a2165625ea54f124377ad270355ca8c0764f4ff2a8ebc9ad78f2832",
2314
2384
  "workflowRegistryDigest": "7ec4a7f4f2d81ec294a4b961f6f991c3e90bacb6f516a5138736399d461d9aee",
2315
- "pageRegistryDigest": "aa643d3ca72fb1bed26ad0f1f5c910ae49eeb6a2a57850ab0bfdc538b221308c"
2385
+ "pageRegistryDigest": "23c900280e3c30ca9886d74a5f744961f2b2c5a202743d264d423f0bb29c9eee"
2316
2386
  },
2317
2387
  "comparison": {
2318
2388
  "missingCliRegistry": [],
@@ -39,6 +39,7 @@
39
39
  "./site/kfd-claims.json": "./dist/site/kfd-claims.json",
40
40
  "./site/workflow-registry.json": "./dist/site/workflow-registry.json",
41
41
  "./site/public-surface-audit.json": "./dist/site/public-surface-audit.json",
42
+ "./site/kfd-upstream-aggregate.json": "./dist/site/kfd-upstream-aggregate.json",
42
43
  "./site/release-model.json": "./dist/site/release-model.json",
43
44
  "./site/artifact-schemas.json": "./dist/site/artifact-schemas.json",
44
45
  "./site/buildchain-contract.json": "./dist/site/buildchain-contract.json",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "contract": "kungfu-buildchain-site-manifest",
4
- "generatedAt": "2026-07-08T15:35:10.464Z",
5
- "publishedAt": "2026-07-08T15:35:10.464Z",
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": "09ef484f589c8cb3e0c053c0ab3ec2542e2eb5f1",
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.8",
40
+ "version": "2.10.9",
41
41
  "versionSource": "package.json#version"
42
42
  },
43
43
  "entrypoint": "buildchain-site.json",
@@ -189,7 +189,7 @@
189
189
  "path": "docs/kfd-support.md",
190
190
  "plane": "verify",
191
191
  "exists": true,
192
- "digest": "sha256:d1fdec0890884340e4e8108c17b62866c08dc95771075e3e285532b5a7b0ee5a"
192
+ "digest": "sha256:4bcf5d1ce63555072130eae90c739555b11658d1d796a3fcea770b90841c4afd"
193
193
  },
194
194
  {
195
195
  "id": "lifecycle-protocol",
@@ -269,6 +269,7 @@
269
269
  "badge-endpoint-registry.json",
270
270
  "product-mechanism.json",
271
271
  "release-provenance.json",
272
+ "kfd-upstream-aggregate.json",
272
273
  "kfd-claims.json",
273
274
  "agent-index.json"
274
275
  ]
@@ -31,6 +31,10 @@ buildchain kfd 1 witness --json
31
31
  buildchain kfd 2 claims --json
32
32
  buildchain kfd 2 trust-claims --json
33
33
  buildchain kfd 2 trust-assessment --json
34
+ buildchain kfd upstream roles --json
35
+ buildchain kfd upstream collect --json
36
+ buildchain kfd upstream check --json
37
+ buildchain kfd aggregate --json
34
38
  buildchain kfd 3 query buildchain --json
35
39
  buildchain kfd 4 schema --json
36
40
  ```
@@ -93,6 +97,138 @@ values against the KFD-owned `trust-taxonomy` schema. Unknown `riskType`,
93
97
  new values must be requested upstream in `kungfu-systems/kfd`, not invented in
94
98
  Buildchain.
95
99
 
100
+ `@kungfu-tech/kfd` is a runtime dependency of Buildchain, not a development-only
101
+ dependency. The public `buildchain kfd ...` CLI and `@kungfu-tech/buildchain/kfd`
102
+ Node API read KFD-owned standards metadata, schemas, foundation trust claims,
103
+ foundation trust assessments, and taxonomy values at runtime. Moving KFD to
104
+ `devDependencies` would make installed Buildchain packages unable to answer KFD
105
+ queries in consumer repositories.
106
+
107
+ ## Upstream KFD Aggregation
108
+
109
+ Products often depend on multiple KFD-aware upstream components. A product's own
110
+ KFD status is not the same thing as the status of those upstreams, but agents
111
+ still need one machine-readable view of the upstream trust surface.
112
+
113
+ Buildchain exposes that view through:
114
+
115
+ ```bash
116
+ buildchain kfd upstream roles --json
117
+ buildchain kfd upstream collect --json
118
+ buildchain kfd upstream check --json
119
+ buildchain kfd aggregate --json
120
+ ```
121
+
122
+ `upstream collect` reads `.buildchain/buildchain.toml`, resolves declared
123
+ packages from the caller repository, hashes declared evidence assets, and emits
124
+ a `kungfu-buildchain-kfd-upstream-aggregate` document. `upstream check` validates
125
+ that aggregate. `aggregate` combines the product's own Buildchain KFD status
126
+ with the upstream aggregate.
127
+
128
+ This works in development before the consuming repository has published an
129
+ alpha or release. In that state Buildchain can collect and check upstream
130
+ facts, versions, hashes, roles, and residual risk, but the consuming product
131
+ must not claim its own KFD status as `passed` until a release passport verifies
132
+ that product release.
133
+
134
+ The repository-owned declaration is intentionally small. Consumers normally
135
+ declare the upstream package identity, not Buildchain's inferred role or a
136
+ duplicate semver:
137
+
138
+ ```toml
139
+ [kfd.upstream]
140
+ auto_discover = false
141
+
142
+ [[kfd.upstream.components]]
143
+ id = "kfd"
144
+ package = "@kungfu-tech/kfd"
145
+ repository = "kungfu-systems/kfd"
146
+ evidence = [
147
+ "package:kfd.release.json",
148
+ "package:.buildchain/kfd-1/contract-world.witness.json",
149
+ "package:.buildchain/kfd-2/public-release-trust.claim.json",
150
+ "package:.buildchain/kfd-3/collaboration-interface.json",
151
+ "package:standards.json",
152
+ ]
153
+ ```
154
+
155
+ The upstream package version is a single source of truth owned by the package
156
+ manager. Put the dependency in `package.json` / the lockfile, then let
157
+ Buildchain read the installed package's real `package.json`:
158
+
159
+ ```json
160
+ {
161
+ "devDependencies": {
162
+ "@kungfu-tech/kfd": "1.0.0-alpha.21"
163
+ }
164
+ }
165
+ ```
166
+
167
+ Most consumers should keep `@kungfu-tech/kfd` in `devDependencies`: Buildchain
168
+ uses it during CI, development checks, release evidence collection, and site
169
+ generation. Move it to `dependencies` only if the product's own runtime imports
170
+ KFD directly. Buildchain itself keeps KFD in `dependencies` because its public
171
+ CLI and Node API resolve KFD standards, schemas, taxonomy, and foundation trust
172
+ facts at runtime.
173
+
174
+ Do not repeat upstream semver values in `.buildchain/buildchain.toml`. Repeating
175
+ versions in both `package.json` and Buildchain config creates stale facts.
176
+ `upstream collect` records the actual installed package version and evidence
177
+ hashes in the aggregate output.
178
+
179
+ `kfd_1`, `kfd_2`, `kfd_3`, and `kfd_4` are optional capability-state hints. When
180
+ omitted, Buildchain treats the component as `declared`. Use explicit values only
181
+ when the upstream package really exposes the corresponding machine evidence,
182
+ for example:
183
+
184
+ ```toml
185
+ kfd_1 = "exported-witness"
186
+ kfd_2 = "exported-claim"
187
+ kfd_3 = "exported-collaboration-interface"
188
+ kfd_4 = "schema-metadata"
189
+ ```
190
+
191
+ An upstream component may be `declared`, `aligned`, `exported-*`, or another
192
+ explicit non-passed state when the evidence is package-local. A component may
193
+ claim `passed` only when the aggregate also binds that component to a release
194
+ passport. Upstream `passed` never upgrades the product's own KFD status; it only
195
+ describes the upstream trust surface consumed by the product.
196
+
197
+ ### Upstream Roles
198
+
199
+ Consumers should normally omit `role`. Buildchain owns the role vocabulary and
200
+ infers the role from package identity and evidence. The aggregate records:
201
+
202
+ - `role` - the normalized Buildchain-managed role;
203
+ - `roleSource` - `known-package`, `evidence`, `default`, or `explicit`;
204
+ - `roleReason` - the machine-readable explanation for the chosen role.
205
+
206
+ The managed role registry is queryable:
207
+
208
+ ```bash
209
+ buildchain kfd upstream roles --json
210
+ ```
211
+
212
+ Current roles are:
213
+
214
+ | Role | Meaning |
215
+ | --- | --- |
216
+ | `standard-and-schema-provider` | Provides KFD standards, schemas, taxonomy, or standard-owned witness and claim facts. |
217
+ | `release-passport-and-kfd-gate-provider` | Provides release passport, KFD gate, release claim, or release governance machinery consumed by the product. |
218
+ | `kfd-aware-product-component` | A product component that exposes KFD witness, claim, collaboration-interface, or package evidence without being core KFD infrastructure. |
219
+ | `site-consumption-provider` | Provides site-consumption facts such as site manifests, site bundles, or downstream page-content contracts. |
220
+ | `unknown-kfd-upstream` | Fallback for a declared upstream that has not matched a Buildchain-known package or role-specific evidence. |
221
+
222
+ If a consumer explicitly writes `role`, it must be one of that registry. Unknown
223
+ explicit values fail closed during `upstream check`; Buildchain will not let
224
+ repositories invent local role spellings that later fragment aggregate reports.
225
+
226
+ Buildchain dogfoods this model with `@kungfu-tech/kfd` as its upstream
227
+ standard-and-schema provider. The generated site bundle includes
228
+ `dist/site/kfd-upstream-aggregate.json` so downstream sites and agents can read
229
+ Buildchain's upstream KFD facts from the npm package instead of scraping
230
+ repository scripts.
231
+
96
232
  ## KFD-3
97
233
 
98
234
  KFD-3 closes participant-facing collaboration surfaces over a declared public
@@ -182,7 +318,12 @@ import {
182
318
  kfd2,
183
319
  kfd3,
184
320
  kfd4,
321
+ upstream,
322
+ collectKfdAggregate,
185
323
  collectKfdStatus,
324
+ collectKfdUpstreamFacts,
325
+ checkKfdUpstreamFacts,
326
+ listKfdUpstreamRoles,
186
327
  listKfdSchemas,
187
328
  readKfdSchema,
188
329
  } from "@kungfu-tech/buildchain/kfd";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kungfu-tech/buildchain",
3
- "version": "2.10.8",
3
+ "version": "2.10.9",
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",
@@ -42,6 +42,7 @@
42
42
  "./site/kfd-claims.json": "./dist/site/kfd-claims.json",
43
43
  "./site/workflow-registry.json": "./dist/site/workflow-registry.json",
44
44
  "./site/public-surface-audit.json": "./dist/site/public-surface-audit.json",
45
+ "./site/kfd-upstream-aggregate.json": "./dist/site/kfd-upstream-aggregate.json",
45
46
  "./site/release-model.json": "./dist/site/release-model.json",
46
47
  "./site/artifact-schemas.json": "./dist/site/artifact-schemas.json",
47
48
  "./site/buildchain-contract.json": "./dist/site/buildchain-contract.json",
@@ -56,6 +56,7 @@ const SITE_CONTRACT_FILES = Object.freeze([
56
56
  "dist/site/release-provenance.json",
57
57
  "dist/site/agent-index.json",
58
58
  "dist/site/kfd-claims.json",
59
+ "dist/site/kfd-upstream-aggregate.json",
59
60
  ]);
60
61
 
61
62
  const SCHEMA_AND_STANDARD_FILES = Object.freeze([