@kungfu-tech/buildchain 2.14.2 → 2.14.3-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/site/agent-index.json +2 -0
- package/dist/site/artifact-schemas.json +4 -0
- package/dist/site/badge-endpoint-registry.json +320 -0
- package/dist/site/badges/v1/kfd-5/aligned.json +14 -0
- package/dist/site/badges/v1/kfd-5/declared.json +14 -0
- package/dist/site/badges/v1/kfd-5/downgraded.json +14 -0
- package/dist/site/badges/v1/kfd-5/draft.json +14 -0
- package/dist/site/badges/v1/kfd-5/failed.json +14 -0
- package/dist/site/badges/v1/kfd-5/missing.json +14 -0
- package/dist/site/badges/v1/kfd-5/passed.json +14 -0
- package/dist/site/badges/v1/kfd-5/planned.json +14 -0
- package/dist/site/badges/v1/kfd-6/aligned.json +14 -0
- package/dist/site/badges/v1/kfd-6/declared.json +14 -0
- package/dist/site/badges/v1/kfd-6/downgraded.json +14 -0
- package/dist/site/badges/v1/kfd-6/draft.json +14 -0
- package/dist/site/badges/v1/kfd-6/failed.json +14 -0
- package/dist/site/badges/v1/kfd-6/missing.json +14 -0
- package/dist/site/badges/v1/kfd-6/passed.json +14 -0
- package/dist/site/badges/v1/kfd-6/planned.json +14 -0
- package/dist/site/buildchain-contract.json +34 -19
- package/dist/site/buildchain-site.json +13 -11
- package/dist/site/capability-registry.json +1 -1
- package/dist/site/controller-registry.json +14 -2
- package/dist/site/kfd-claims.json +21 -6
- package/dist/site/kfd-upstream-aggregate.json +12 -12
- package/dist/site/manual-registry.json +2 -2
- package/dist/site/node-api-registry.json +15 -2
- package/dist/site/page-registry.json +4 -4
- package/dist/site/public-surface-audit.json +12 -4
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/release-model.json +3 -1
- package/dist/site/release-passport-check-manifest.json +167 -0
- package/dist/site/release-provenance.json +3 -0
- package/dist/site/schemas/release-passport-v1.schema.json +198 -0
- package/dist/site/site-manifest.json +6 -6
- package/dist/site/workflow-registry.json +4 -1
- package/docs/release-passport.md +19 -0
- package/docs/release-propagation.md +19 -7
- package/package.json +5 -2
- package/packages/core/index.js +9 -0
- package/packages/core/package-manager.js +32 -0
- package/packages/core/release-passport-contract.js +249 -0
- package/scripts/check-inventory.mjs +7 -1
- package/scripts/generate-site-bundle.mjs +15 -0
- package/scripts/validate-package-manager-contract.mjs +24 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"product": {
|
|
5
5
|
"id": "kungfu-tech-buildchain",
|
|
6
6
|
"name": "@kungfu-tech/buildchain",
|
|
7
|
-
"version": "2.14.
|
|
7
|
+
"version": "2.14.3-alpha.0",
|
|
8
8
|
"repository": "https://github.com/kungfu-systems/buildchain"
|
|
9
9
|
},
|
|
10
10
|
"source": {
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"roleValid": true,
|
|
22
22
|
"package": {
|
|
23
23
|
"name": "@kungfu-tech/kfd",
|
|
24
|
-
"version": "1.0.0-alpha.
|
|
24
|
+
"version": "1.0.0-alpha.29"
|
|
25
25
|
},
|
|
26
26
|
"repository": "kungfu-systems/kfd",
|
|
27
27
|
"kfd": {
|
|
@@ -37,19 +37,19 @@
|
|
|
37
37
|
"line": "v1.0",
|
|
38
38
|
"channel": "alpha",
|
|
39
39
|
"npmPackage": "@kungfu-tech/kfd",
|
|
40
|
-
"npmVersion": "1.0.0-alpha.
|
|
40
|
+
"npmVersion": "1.0.0-alpha.29",
|
|
41
41
|
"source": {
|
|
42
42
|
"repository": "kungfu-systems/kfd",
|
|
43
43
|
"branch": "alpha/v1/v1.0"
|
|
44
44
|
},
|
|
45
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
46
|
},
|
|
47
|
-
"kfd3SurfaceCount":
|
|
47
|
+
"kfd3SurfaceCount": 24,
|
|
48
48
|
"assets": [
|
|
49
49
|
{
|
|
50
50
|
"path": "kfd.release.json",
|
|
51
51
|
"kind": "package",
|
|
52
|
-
"sha256": "sha256:
|
|
52
|
+
"sha256": "sha256:5fc018c587ba2e2d04932cf46ebb51cf617768e36f4af50e38fcdaa2fcdc39e1",
|
|
53
53
|
"contract": "kfd-release-anchor",
|
|
54
54
|
"role": "",
|
|
55
55
|
"directory": false
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
{
|
|
58
58
|
"path": ".buildchain/kfd-1/contract-world.witness.json",
|
|
59
59
|
"kind": "package",
|
|
60
|
-
"sha256": "sha256:
|
|
60
|
+
"sha256": "sha256:f1b3faf10ac37a8b69482cf4b0e996972a736ffcb441be898ef6f548a871e034",
|
|
61
61
|
"contract": "",
|
|
62
62
|
"role": "",
|
|
63
63
|
"directory": false
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
{
|
|
66
66
|
"path": ".buildchain/kfd-2/public-release-trust.claim.json",
|
|
67
67
|
"kind": "package",
|
|
68
|
-
"sha256": "sha256:
|
|
68
|
+
"sha256": "sha256:eb157cad7d0b711f81dfb0fca4f46b7f9dd531860dc43c6f95e86c12d366e5b7",
|
|
69
69
|
"contract": "",
|
|
70
70
|
"role": "",
|
|
71
71
|
"directory": false
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
{
|
|
74
74
|
"path": ".buildchain/kfd-2/kfd-foundation.trust-claims.json",
|
|
75
75
|
"kind": "package",
|
|
76
|
-
"sha256": "sha256:
|
|
76
|
+
"sha256": "sha256:da6625c1fda4102704b4320f99276c6118d201e064d58266ca5426f6e71ef26e",
|
|
77
77
|
"contract": "kfd-2-trust-claims",
|
|
78
78
|
"role": "",
|
|
79
79
|
"directory": false
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
{
|
|
82
82
|
"path": ".buildchain/kfd-2/kfd-foundation.trust-assessment.json",
|
|
83
83
|
"kind": "package",
|
|
84
|
-
"sha256": "sha256:
|
|
84
|
+
"sha256": "sha256:dad8415898516b571e86f2c9671f81a31f9c1af055b1f76f237184062181ba03",
|
|
85
85
|
"contract": "kfd-2-trust-assessment",
|
|
86
86
|
"role": "",
|
|
87
87
|
"directory": false
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
{
|
|
90
90
|
"path": ".buildchain/kfd-3/collaboration-interface.json",
|
|
91
91
|
"kind": "package",
|
|
92
|
-
"sha256": "sha256:
|
|
92
|
+
"sha256": "sha256:5641f78086384fa7288c05a373cb8f0d90a5496c368b014e33f3873527c5b8ce",
|
|
93
93
|
"contract": "kfd-3-collaboration-interface",
|
|
94
94
|
"role": "",
|
|
95
95
|
"directory": false
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
{
|
|
98
98
|
"path": "standards.json",
|
|
99
99
|
"kind": "package",
|
|
100
|
-
"sha256": "sha256:
|
|
100
|
+
"sha256": "sha256:e19cb764adf739b9eb5627e83e32e00e35613af0a7c0968d1cf51cd8635c891e",
|
|
101
101
|
"contract": "kfd-standards-metadata",
|
|
102
102
|
"role": "",
|
|
103
103
|
"directory": false
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
"kfd"
|
|
114
114
|
],
|
|
115
115
|
"packageVersions": {
|
|
116
|
-
"kfd": "1.0.0-alpha.
|
|
116
|
+
"kfd": "1.0.0-alpha.29"
|
|
117
117
|
},
|
|
118
118
|
"status": "collected"
|
|
119
119
|
}
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"title": "Release Passport protocol",
|
|
37
37
|
"path": "docs/release-passport.md",
|
|
38
38
|
"plane": "verify",
|
|
39
|
-
"digest": "sha256:
|
|
39
|
+
"digest": "sha256:0029014ffab7d7228a12d8b92326b78cf6757a41f481b661c5997e2cef06d3cc",
|
|
40
40
|
"capabilityGroup": "release-passport-trust",
|
|
41
41
|
"audience": [
|
|
42
42
|
"release-operator",
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
"title": "Release propagation",
|
|
94
94
|
"path": "docs/release-propagation.md",
|
|
95
95
|
"plane": "use",
|
|
96
|
-
"digest": "sha256:
|
|
96
|
+
"digest": "sha256:fc2b743e3d76c4f90cdd8c6560cf9d619ad25d74c15c074be96db7bcb6cc2a29",
|
|
97
97
|
"capabilityGroup": "site-and-propagation",
|
|
98
98
|
"audience": [
|
|
99
99
|
"release-operator",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"specifier": "@kungfu-tech/buildchain",
|
|
9
9
|
"export": ".",
|
|
10
10
|
"target": "./packages/core/index.js",
|
|
11
|
-
"digest": "sha256:
|
|
11
|
+
"digest": "sha256:1863f8af4327bf4d77b46d0646043b6675c0094656edb6ba69f221c7b1b8da82",
|
|
12
12
|
"summary": "Root toolkit export for Buildchain's public Node API.",
|
|
13
13
|
"capabilityGroup": "api-cli-reference",
|
|
14
14
|
"audience": [
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"specifier": "@kungfu-tech/buildchain/core",
|
|
48
48
|
"export": "./core",
|
|
49
49
|
"target": "./packages/core/index.js",
|
|
50
|
-
"digest": "sha256:
|
|
50
|
+
"digest": "sha256:1863f8af4327bf4d77b46d0646043b6675c0094656edb6ba69f221c7b1b8da82",
|
|
51
51
|
"summary": "Alias for the root public toolkit export.",
|
|
52
52
|
"capabilityGroup": "api-cli-reference",
|
|
53
53
|
"audience": [
|
|
@@ -355,6 +355,19 @@
|
|
|
355
355
|
],
|
|
356
356
|
"maturity": "stable"
|
|
357
357
|
},
|
|
358
|
+
{
|
|
359
|
+
"specifier": "@kungfu-tech/buildchain/release-passport-contract",
|
|
360
|
+
"export": "./release-passport-contract",
|
|
361
|
+
"target": "./packages/core/release-passport-contract.js",
|
|
362
|
+
"digest": "sha256:230863e62b63bce897f8ea51859c958a3c8aacf38b87ed9640bdada3c9383da6",
|
|
363
|
+
"summary": "Standalone release passport JSON Schema, ownership/check manifest, and structural validation APIs.",
|
|
364
|
+
"capabilityGroup": "release-passport-trust",
|
|
365
|
+
"audience": [
|
|
366
|
+
"developer",
|
|
367
|
+
"agent"
|
|
368
|
+
],
|
|
369
|
+
"maturity": "stable"
|
|
370
|
+
},
|
|
358
371
|
{
|
|
359
372
|
"specifier": "@kungfu-tech/buildchain/release-propagation",
|
|
360
373
|
"export": "./release-propagation",
|
|
@@ -1424,7 +1424,7 @@
|
|
|
1424
1424
|
],
|
|
1425
1425
|
"maturity": "stable",
|
|
1426
1426
|
"sourcePath": "docs/release-passport.md",
|
|
1427
|
-
"digest": "sha256:
|
|
1427
|
+
"digest": "sha256:0029014ffab7d7228a12d8b92326b78cf6757a41f481b661c5997e2cef06d3cc",
|
|
1428
1428
|
"headings": [
|
|
1429
1429
|
{
|
|
1430
1430
|
"level": 1,
|
|
@@ -1472,7 +1472,7 @@
|
|
|
1472
1472
|
"anchor": "binary-distribution"
|
|
1473
1473
|
}
|
|
1474
1474
|
],
|
|
1475
|
-
"markdown": "# Release Passport\n\nBuildchain Release Passport is the core product mechanism: a mature product\nrelease record for artifacts that users or agents depend on.\n\nThe protocol is GitHub-native because it uses protected refs, reviewed\npromotion PRs, exact tags, GitHub Releases, npm Trusted Publishing, and\nmachine-readable evidence. A project can keep its existing build system and use\nBuildchain to make the release record auditable.\n\nRelease-candidate and final passports may also include compact\n`controllerReceipts[]` references. These bind a real reusable-workflow receipt\nto its plan digest, consumer source SHA, and exact Buildchain runtime SHA; they\ndo not infer execution evidence from a green job. See\n[`controller-evidence.md`](controller-evidence.md).\n\n## Contract\n\nThe release passport surface is a welded contract. Additive fields are allowed;\nbreaking semantic changes require a new major line.\n\nP0 protocol artifacts:\n\n- `product-mechanism.json`\n- `buildchain.release.json`\n- `artifact-evidence.json`\n- `impact.json`\n- `agent-index.json`\n- `check-report.json`\n- `llms.txt`\n- `buildchain-release-bundle.json`\n- `buildchain-release-bundle.tar.gz`\n\n`buildchain.release.json` is the first file an agent should read. It points to\nartifact evidence, impact, recovery, product mechanism, and agent index facts.\nIt is also the unified release responsibility summary: when publish\ntransactions are used, the same passport records the package set, npm dist-tags,\nrelease source refs, release-state ref, anchor manifest, registry artifact\ndigests, trusted publishing evidence, and transaction result.\n\nAdditive passport sections:\n\n- `release`: public release tag, internal transaction tag, line, channel,\n source SHA, target ref, release SHA, release material SHA, publish tooling\n SHA, and durable release-state ref. Anchored/manual package releases use the\n published package version for the public tag while preserving the internal\n exact transaction tag for Buildchain recovery.\n- `versionImpact`: final patch/minor/major classification, source, and\n rationale.\n- `surfaceImpacts`: per registered surface classification. The final impact is\n the highest entry in this list.\n- `packageSet`: main package, platform packages, package-set order, registry,\n versions, dist-tags, and package digests.\n- `anchorManifest`: anchored/manual version manifest path, digest, and fields.\n- `trustedPublishing`: provider, auth mode, workflow run evidence, and whether\n trusted publishing was enabled.\n- `transaction`: durable Buildchain release transaction id, state, exact tag,\n release SHA, state ref, and state SHA.\n- `surfaceTimestampPolicy`: the common Buildchain surface manifest timestamp\n policy. It records real CI/release generation and publication times,\n reproducibility inputs, source revision or source-date-epoch, and whether\n timestamp fields participate in the release artifact digest.\n- `buildFacts`: module/product build facts that bind Git source digests,\n version sources, lifecycle invocations, platforms, outputs, product\n artifacts, and verification results to the release.\n- `artifacts`: release assets and registry artifacts in one list, each pointing\n back to the evidence file that proves its digest. Registry artifacts retain\n optional built/reused action, content and current-release coordinates,\n platform/contract/parent metadata, and fail-closed verification evidence.\n\nBuildchain's own binary lane also publishes observability artifacts generated by\nthe Buildchain logging API and CLI:\n\n- `buildchain-log-events-<platform>.jsonl`\n- `buildchain-log-summary-<platform>.json`\n- `buildchain-log-events-passport.jsonl`\n- `buildchain-log-summary-passport.json`\n\n`buildchain-release-bundle.tar.gz` is the single evidence bundle for consumers\nthat want one file for offline inspection, mirroring, or site ingestion.\n`buildchain-release-bundle.json` records its digest and the digest of every\nincluded file.\n\n## Runner Policy\n\nProduction binary distribution should use GitHub-hosted runners by default:\n\n- `ubuntu-24.04`\n- `macos-latest`\n- `windows-2022`\n\nThis keeps the public release path easy for other projects to reproduce.\nSelf-hosted runners remain compatibility fixtures: they prove that the protocol\ndoes not depend on GitHub-hosted images, but they are not the default public\ndistribution lane.\n\nThe protocol records runner facts in `artifact-evidence.json`; it does not\nrequire a specific runner class.\n\n## CLI\n\nGenerate a local release passport bundle from release assets:\n\n```bash\nbuildchain collect github-release \\\n --tag v2.2.0 \\\n --repository kungfu-systems/buildchain \\\n --assets-dir dist \\\n --publish-evidence-json .buildchain/release-evidence/v2.2.0/evidence.json \\\n --transaction-json .buildchain/release-state/v2.2.0/state.json \\\n --package-set-json package-set.json \\\n --anchor-manifest-json libnode.release.json \\\n --build-summary-json .buildchain/artifacts/build-summary.json \\\n --build-facts-json .buildchain/facts/native-core.json \\\n --build-facts-json .buildchain/facts/product.json \\\n --platform-manifest-json .buildchain/artifacts/linux-x64/manifest.json \\\n --platform-manifest-json .buildchain/artifacts/darwin-arm64/manifest.json \\\n --platform-manifest-json .buildchain/artifacts/win32-x64/manifest.json \\\n --dist-tag-evidence-json .buildchain/release-evidence/v2.2.0/dist-tag-evidence.json \\\n --kfd-1-witness-json .buildchain/kfd/kfd-1/contract-world.witness.json \\\n --kfd-2-claim-json .buildchain/kfd/kfd-2/release-claims.json \\\n --output-dir .buildchain/release-passport\n```\n\n`packageSet` records the ordered main-plus-platform package set.\n`publish.packages[]` summarizes each published npm package with its version,\ndist-tag, registry, role, platform, and digest, so agents do not need to stitch\nnpm facts back together from the lower-level evidence files.\n`buildSummary`, `platformArtifactManifests`, and `distTagPromotion` preserve the\nbuild and npm dist-tag evidence chain in the same passport. `buildFacts[]`\nrecords first-class module/product build facts, while\n`evidence.buildFacts[]` gives agents compact paths, SHA-256 hashes, contracts,\nids, and digests for quick audit traversal. See\n[`build-facts.md`](build-facts.md) for the fact collection and verification\ncontract.\n\n### KFD-1 contract-world release gate\n\nBuildchain can gate release artifacts with KFD-1 contract-world witnesses. This\nis a structured evidence protocol, not a request for consumers to shell out to\nthe Kungfu SDK. The authority chain is:\n\n1. KFD owns the standard metadata and schema ids in `@kungfu-tech/kfd`.\n2. Buildchain imports that metadata, owns the JSON formatting policy, freezes\n the pre-build witness, and independently verifies post-build artifact bytes.\n3. Consumers only pass declarative witness JSON plus the artifact payloads their\n build already produced.\n\nThis gives agents a concrete answer to \"what changed and can I trust it?\" A\nrelease can include both normal release passport evidence and KFD-1 evidence:\nthe passport proves the release transaction and artifacts are complete, while\nKFD-1 proves selected contract-world surfaces inside those artifacts are the\nbyte-for-byte surfaces the release intended to ship.\n\nThe witness JSON names the contract world, the canonical serialization policy,\nand the release surfaces that must be byte-for-byte verified:\n\n```json\n{\n \"id\": \"kungfu-config\",\n \"standard\": \"kfd-1\",\n \"source\": \"kfd\",\n \"contractWorld\": {\n \"id\": \"kungfu-config\",\n \"kind\": \"schema\",\n \"name\": \"Kungfu config schema\"\n },\n \"canonicalPolicy\": {\n \"format\": \"json\",\n \"encoding\": \"utf-8\",\n \"indent\": 2,\n \"trailingNewline\": true\n },\n \"surfaces\": [\n {\n \"id\": \"kungfu-config-schema\",\n \"artifactPath\": \"Contents/Resources/core/config.schema.json\",\n \"expectedSha256\": \"...\"\n }\n ]\n}\n```\n\n`collect github-release` writes the result under the KFD-provided top-level key\ncurrently named `kfd-1`. Each contract world records the frozen witness digest,\nthe KFD package version, KFD schema ids, the Buildchain formatting policy, and\nthe actual artifact digest observed after the build. Verification fails closed\nwhen the witness is missing required facts, an artifact cannot be found, or a\npost-build digest does not match the frozen witness.\n\nFor the KFD repository itself, the KFD-1 witness can be a self-hosted standard\ncontract witness. In that mode KFD owns the standard-contract facts and\nBuildchain verifies declared source standard metadata, schemas, package\nexports, and site-consumption entrypoints against the packaged artifact. The\npassport records source and artifact hash summaries, schema ids, the\nself-hosting boundary, result, residual risk, and responsibility state for\nsource ownership, artifact verification, and release-passport proof ownership.\n\nGood KFD-1 witnesses should point at release payload surfaces, not at private\nbuild-machine state. For Buildchain itself, the natural witness set is the\nrelease passport schema and implementation, KFD-1 gate implementation,\n`dist/site/buildchain-contract.json`, and the npm package payload files that\nexpose the public CLI, reusable workflow/action contracts, and site facts.\nThe final `buildchain.release.json` file should not be used as an ordinary\nbyte-for-byte KFD surface because it contains KFD evidence; instead, the\npassport is audited through release-state SHA, `check-report.json`, and the\ncontract files that generate and verify it.\n\n### KFD-2 release trust passport audit\n\nBuildchain can write a KFD-2 release trust passport audit under the top-level\n`kfd-2` section. The section is generated automatically from KFD-1 and KFD-3\nrelease-gate evidence, and callers may add explicit public release claims with\n`--kfd-2-claim-json`.\n\nEvery public claim must bind:\n\n- declared sources;\n- machine-readable evidence;\n- source/evidence/artifact hashes;\n- artifact coordinates;\n- verification results;\n- audit boundary;\n- responsibility state;\n- residual risk, even when the array is empty.\n\nUnbound public claims fail release passport verification. Claims that are\nmachine-bound but only supported by prose downgrade the KFD-2 audit and produce\na warning, so agents can distinguish \"verified\", \"needs review\", and \"not\nbound to evidence\" without reading release notes.\n\nFor Buildchain's own releases, public release claims are not authored in prose\ninside the workflow. The source registry is\n`packages/core/buildchain-kfd-claims.js`, published as\n`dist/site/kfd-claims.json` and exported as\n`@kungfu-tech/buildchain/buildchain-kfd-claims`. That registry is the\nversion-invariant source of public claims and collaboration surfaces: it does\nnot store the exact release version, promotion SHA, or exact runtime contract\ndigest. Those run-specific facts belong in the release passport and generated\nwitnesses. During Buildchain promotion,\n`scripts/generate-buildchain-kfd-witnesses.mjs` binds the source registry to the\ncurrent source/artifact hashes and generates:\n\n- a KFD-1 self contract-world witness for the packaged docs, schemas, workflows,\n actions, Node exports, and site-consumption facts;\n- one KFD-2 claim JSON per public Buildchain release claim;\n- KFD-3 pre-build and artifact witnesses for the same public collaboration\n surfaces.\n\nThe generated claim set covers Buildchain's KFD release passport support,\nagent-first single source of truth, floating `@v2` contract drift protection,\nsemver GitHub Release evidence publication, channel-preserving release\npropagation, and npm publish evidence/finalization. Buildchain self promotion\npasses those files into `promote-buildchain-ref`; `verifyReleasePassport()` then\nfails closed if any claim is missing source bindings, machine evidence, hashes,\nartifact coordinates, verification result, audit boundary, responsibility, or\nresidual risk.\n\n### KFD-3 collaboration-interface release gate\n\nKFD-3 asks a different release question than KFD-1. KFD-1 proves that named\npayload bytes match one contract world. KFD-3 proves that a product's shipped\nparticipant-facing collaboration/control surface is closed over its declared\ninterface.\n\nFor Buildchain itself, the declared interface starts in\n`packages/core/buildchain-kfd-claims.js`, not in this Markdown file. The\nregistry enumerates public human/agent surfaces across manuals, schema and\nstandard metadata, package exports, site-consumption contracts, workflows, and\nactions. `dist/site/kfd-claims.json` is the packaged machine-readable form used\nby downstream sites and by Buildchain's own release passport. Exact release\nversion/SHA binding is deliberately deferred to the promotion witness, so the\nsource registry can remain stable across semver version-state bumps.\n\nBuildchain also performs a reverse audit before that witness is used. The\ngenerated `dist/site/public-surface-audit.json` enumerates real CLI commands\nfrom `bin/buildchain.mjs`, workflow inputs, action inputs, site pages, and docs\ncommand references, then compares them with the generated registries. Buildchain\nself KFD witnesses include that audit result and classify the collaboration\ninterface as closed-world only when the reverse audit passes. If a public\ncommand, workflow input, action input, or site page is exposed without a\nregistry entry, `pnpm run check` fails before release promotion can produce a\npassport.\n\nThe product remains the fact source. Before build/publish, the product writes a\npre-build witness:\n\n```bash\nkungfu sdk collaboration-interface witness --json \\\n > .buildchain/kfd/kfd-3/collaboration-interface.prebuild.json\n```\n\nThat witness must contain, or point to, the product-owned KFD-3 collaboration\ninterface, registry digest, participants, and declared public shipped surfaces.\nKFD repository self-verification can declare the same facts as grouped machine\nsurfaces: docs, schemas, standards metadata, package exports, and\nsite-consumption contracts.\nAfter the artifact is built, the product also provides artifact-side evidence,\neither as a JSON file or a command:\n\n```bash\nbuildchain collect github-release \\\n --kfd-3-prebuild-witness-json .buildchain/kfd/kfd-3/collaboration-interface.prebuild.json \\\n --kfd-3-artifact-verify-cmd \"kungfu agent verify --json\"\n```\n\nBuildchain imports the KFD-3 metadata from `@kungfu-tech/kfd`, freezes the\npre-build witness digest, ingests the artifact witness, and compares the two\nsets:\n\n- every declared `shipped` public participant-facing surface must appear in the\n artifact witness;\n- every artifact-exposed public participant-facing surface must be declared by\n the pre-build witness;\n- if both witnesses record `collaborationInterface.digest`, the digests must\n match;\n- contradictory, missing, stale, or schema-incomplete evidence fails closed.\n\nThe generated release passport records the result under the KFD-provided\ntop-level key currently named `kfd-3`. The section includes the KFD package\nversion, schema ids/paths, pre-build witness digest, artifact witness digest,\ndeclared/exposed surface counts, missing declared shipped surfaces, and\nunclassified artifact public surfaces. Buildchain also projects the same\ncollaboration-interface evidence into the top-level `kfd-2` audit as a\nmachine-readable `trustProof` object on the generated `kfd-3:*` public claim.\nThat proof carries `releaseStatus`, witness file hashes and canonical hashes,\ndeclared capability verification, reverse audit result and boundary, residual\nrisk, and responsibility state.\n\nThe trust proof makes the strongest claim only when the witnesses justify it:\n`No unclassified reachable surface within the declared audit boundary.` If the\nproduct declares non-exhaustive surfaces, Buildchain keeps the passport\nverifiable but marks the interface `audited` instead of `enforced` and records\nthe residual risk explicitly. Draft or partial KFD-3 declarations are\ndowngraded; missing declared capabilities, undeclared public artifact surfaces,\nor stale collaboration-interface digests fail the proof.\n\nThis makes KFD-3 support usable by readers and agents immediately: they can\ninspect `buildchain.release.json` and know whether the released package\nactually exposes no more and no less than the declared collaboration interface,\ninstead of trusting docs or release notes.\n\n### Floating Buildchain contract lock\n\nKFD-1 protects release payload surfaces. Floating ref contract locks protect the\nconsumer's relationship to Buildchain itself. A consumer can keep\n`.buildchain/contract-lock.json` with the Buildchain floating ref it accepted,\nthe resolved SHA, the contract digest, and the compatibility policy. Each\nBuildchain run reads the actual contract from the checked-out Buildchain ref\nand compares it before heavy build or publish work begins.\n\nCompatible drift, such as optional inputs or extra diagnostics, continues and\ncreates a consumer-local issue for review. Breaking drift fails fast. This means\nconsumers can use `@v2` without silently accepting incompatible changes, while\nBuildchain maintainers can still ship compatible improvements under the same\nmajor floating tag.\n\n`impact.json` can be supplied with `--impact-json`. Production release\npassports (`release/*`) and major publish-gate passports require\n`surfaceImpacts[]`; alpha, local, and legacy passport contexts keep the field\noptional. When `surfaceImpacts[]` is required or supplied, verification fails\nclosed unless each entry has an id, impact, and rationale, and\n`versionImpact.final` matches the highest surface impact. For example, KFD-2\ncontent can remain patch while an additive `registry.kind` field on the\nmachine-consumed KFD registry schema records a minor `kfd-registry-schema`\nsurface impact.\n\nVerify a release passport:\n\n```bash\nbuildchain verify release-passport .buildchain/release-passport/buildchain.release.json\n```\n\nVerify a specific artifact by discovering its detached passport:\n\n```bash\nbuildchain verify artifact ./Kungfu-2.8.0-windows-x64.exe\n```\n\nArtifact verification is subject-centric. Buildchain identifies the subject,\ncomputes or obtains its digest, discovers a detached `buildchain.release.json`,\nverifies that release passport and its evidence, then proves the subject digest\nappears in the passport's artifacts, package set, publish evidence, or artifact\nevidence. The command returns `pass`, `fail`, or `unverifiable`; missing\npassports and digest mismatches fail closed.\n\nFor npm subjects, Buildchain treats the registry as the package digest source:\n`npm:<name>@<version>` resolves `dist.integrity` and matches it against\n`packageSet.main.digest`, `packageSet.platforms[].digest`, and publish evidence.\nUse `--npm-registry <url>` when the package comes from a non-default registry.\n\nDiscovery is ordered and auditable:\n\n1. explicit `--passport`;\n2. sidecar pointer;\n3. embedded/package pointer;\n4. local config or org index;\n5. GitHub Release default from artifact naming/repository/tag hints;\n6. custom locator;\n7. unverifiable with retry guidance.\n\nFor Buildchain-managed GitHub Release lanes, release passport files are\npublished as release assets by default when the upload backend is enabled, so a\nGitHub Release asset URL can discover the sibling `buildchain.release.json`\nwithout a consumer copying YAML resolver logic.\n\nExplain a release to an agent:\n\n```bash\nbuildchain explain release \\\n --passport .buildchain/release-passport/buildchain.release.json \\\n --for agent \\\n --json\n```\n\nThe verifier fails closed when a passport omits artifacts, omits evidence, has\ndigest mismatches, or misses required protocol files.\n\n## Binary Distribution\n\nInitial binary distribution stays lightweight:\n\n- GitHub Release assets.\n- `checksums.txt`.\n- release passport artifacts.\n- a single release evidence bundle.\n- install scripts and Homebrew tap fixtures after the passport path is reliable.\n\nBuildchain publishes platform-specific archives, not loose top-level\nexecutables:\n\n- `buildchain-x86_64-unknown-linux-gnu.tar.gz`\n- `buildchain-aarch64-apple-darwin.tar.gz`\n- `buildchain-x86_64-pc-windows-msvc.zip`\n\nThe executable name inside each archive stays natural for the platform\n(`buildchain` or `buildchain.exe`). Top-level loose executable assets are not\nuploaded, because Linux and macOS would otherwise collide when GitHub Actions\nmatrix artifacts are merged.\n\nHeavy package manager channels such as apt, yum, winget, choco, Scoop, mise, or\nasdf are out of the P0/P1 scope until there is real external demand.\n\nStandalone binaries are a distribution shape, not a second implementation. The\nsource of truth remains the Node/ESM CLI and core library.\n\nThe standalone binary builder imports `@kungfu-tech/buildchain/logging` directly\nand records setup, SEA blob generation, injection, signing, archiving, manifest,\nand evidence phases. The GitHub workflow wraps the same build and passport\nsteps with `buildchain mark`, `buildchain span`,\n`buildchain verify observability-log`, and `buildchain log summary`. Logging is\na hard release gate: missing events, error events, or missing required phases\nfail the job before assets are uploaded. The verified logs are release assets\nand are covered by the release passport digest checks.\n\nSee also [`binary-distribution.md`](binary-distribution.md) for asset naming and\nbundle details, and [`install.md`](install.md) for consumer commands."
|
|
1475
|
+
"markdown": "# Release Passport\n\nBuildchain Release Passport is the core product mechanism: a mature product\nrelease record for artifacts that users or agents depend on.\n\nThe protocol is GitHub-native because it uses protected refs, reviewed\npromotion PRs, exact tags, GitHub Releases, npm Trusted Publishing, and\nmachine-readable evidence. A project can keep its existing build system and use\nBuildchain to make the release record auditable.\n\nRelease-candidate and final passports may also include compact\n`controllerReceipts[]` references. These bind a real reusable-workflow receipt\nto its plan digest, consumer source SHA, and exact Buildchain runtime SHA; they\ndo not infer execution evidence from a green job. See\n[`controller-evidence.md`](controller-evidence.md).\n\n## Contract\n\nThe release passport surface is a welded contract. Additive fields are allowed;\nbreaking semantic changes require a new major line.\n\nIndependent verifiers can pin two package-owned, standalone files without\nscraping this implementation:\n\n- `dist/site/schemas/release-passport-v1.schema.json` is the self-contained\n JSON Schema for the Buildchain-owned envelope;\n- `dist/site/release-passport-check-manifest.json` names the normative checker,\n required and conditional sibling evidence, local-resolution rules,\n Buildchain aggregation fields, canonical KFD subsection schema authorities,\n and forward-compatibility policy.\n\nThe same files are exported as\n`@kungfu-tech/buildchain/site/schemas/release-passport-v1.schema.json` and\n`@kungfu-tech/buildchain/site/release-passport-check-manifest.json`. The schema\nchecks the envelope shape. `buildchain verify release-passport` remains the\nnormative semantic checker: it resolves sibling evidence relative to the\npassport and fails closed on missing evidence, digest drift, or inconsistent\nrelease facts. Buildchain owns envelope aggregation; KFD retains schema and\ncompatibility authority for the `kfd-1`, `kfd-2`, and `kfd-3` subsections.\n\nP0 protocol artifacts:\n\n- `product-mechanism.json`\n- `buildchain.release.json`\n- `artifact-evidence.json`\n- `impact.json`\n- `agent-index.json`\n- `check-report.json`\n- `llms.txt`\n- `buildchain-release-bundle.json`\n- `buildchain-release-bundle.tar.gz`\n\n`buildchain.release.json` is the first file an agent should read. It points to\nartifact evidence, impact, recovery, product mechanism, and agent index facts.\nIt is also the unified release responsibility summary: when publish\ntransactions are used, the same passport records the package set, npm dist-tags,\nrelease source refs, release-state ref, anchor manifest, registry artifact\ndigests, trusted publishing evidence, and transaction result.\n\nAdditive passport sections:\n\n- `release`: public release tag, internal transaction tag, line, channel,\n source SHA, target ref, release SHA, release material SHA, publish tooling\n SHA, and durable release-state ref. Anchored/manual package releases use the\n published package version for the public tag while preserving the internal\n exact transaction tag for Buildchain recovery.\n- `versionImpact`: final patch/minor/major classification, source, and\n rationale.\n- `surfaceImpacts`: per registered surface classification. The final impact is\n the highest entry in this list.\n- `packageSet`: main package, platform packages, package-set order, registry,\n versions, dist-tags, and package digests.\n- `anchorManifest`: anchored/manual version manifest path, digest, and fields.\n- `trustedPublishing`: provider, auth mode, workflow run evidence, and whether\n trusted publishing was enabled.\n- `transaction`: durable Buildchain release transaction id, state, exact tag,\n release SHA, state ref, and state SHA.\n- `surfaceTimestampPolicy`: the common Buildchain surface manifest timestamp\n policy. It records real CI/release generation and publication times,\n reproducibility inputs, source revision or source-date-epoch, and whether\n timestamp fields participate in the release artifact digest.\n- `buildFacts`: module/product build facts that bind Git source digests,\n version sources, lifecycle invocations, platforms, outputs, product\n artifacts, and verification results to the release.\n- `artifacts`: release assets and registry artifacts in one list, each pointing\n back to the evidence file that proves its digest. Registry artifacts retain\n optional built/reused action, content and current-release coordinates,\n platform/contract/parent metadata, and fail-closed verification evidence.\n\nBuildchain's own binary lane also publishes observability artifacts generated by\nthe Buildchain logging API and CLI:\n\n- `buildchain-log-events-<platform>.jsonl`\n- `buildchain-log-summary-<platform>.json`\n- `buildchain-log-events-passport.jsonl`\n- `buildchain-log-summary-passport.json`\n\n`buildchain-release-bundle.tar.gz` is the single evidence bundle for consumers\nthat want one file for offline inspection, mirroring, or site ingestion.\n`buildchain-release-bundle.json` records its digest and the digest of every\nincluded file.\n\n## Runner Policy\n\nProduction binary distribution should use GitHub-hosted runners by default:\n\n- `ubuntu-24.04`\n- `macos-latest`\n- `windows-2022`\n\nThis keeps the public release path easy for other projects to reproduce.\nSelf-hosted runners remain compatibility fixtures: they prove that the protocol\ndoes not depend on GitHub-hosted images, but they are not the default public\ndistribution lane.\n\nThe protocol records runner facts in `artifact-evidence.json`; it does not\nrequire a specific runner class.\n\n## CLI\n\nGenerate a local release passport bundle from release assets:\n\n```bash\nbuildchain collect github-release \\\n --tag v2.2.0 \\\n --repository kungfu-systems/buildchain \\\n --assets-dir dist \\\n --publish-evidence-json .buildchain/release-evidence/v2.2.0/evidence.json \\\n --transaction-json .buildchain/release-state/v2.2.0/state.json \\\n --package-set-json package-set.json \\\n --anchor-manifest-json libnode.release.json \\\n --build-summary-json .buildchain/artifacts/build-summary.json \\\n --build-facts-json .buildchain/facts/native-core.json \\\n --build-facts-json .buildchain/facts/product.json \\\n --platform-manifest-json .buildchain/artifacts/linux-x64/manifest.json \\\n --platform-manifest-json .buildchain/artifacts/darwin-arm64/manifest.json \\\n --platform-manifest-json .buildchain/artifacts/win32-x64/manifest.json \\\n --dist-tag-evidence-json .buildchain/release-evidence/v2.2.0/dist-tag-evidence.json \\\n --kfd-1-witness-json .buildchain/kfd/kfd-1/contract-world.witness.json \\\n --kfd-2-claim-json .buildchain/kfd/kfd-2/release-claims.json \\\n --output-dir .buildchain/release-passport\n```\n\n`packageSet` records the ordered main-plus-platform package set.\n`publish.packages[]` summarizes each published npm package with its version,\ndist-tag, registry, role, platform, and digest, so agents do not need to stitch\nnpm facts back together from the lower-level evidence files.\n`buildSummary`, `platformArtifactManifests`, and `distTagPromotion` preserve the\nbuild and npm dist-tag evidence chain in the same passport. `buildFacts[]`\nrecords first-class module/product build facts, while\n`evidence.buildFacts[]` gives agents compact paths, SHA-256 hashes, contracts,\nids, and digests for quick audit traversal. See\n[`build-facts.md`](build-facts.md) for the fact collection and verification\ncontract.\n\n### KFD-1 contract-world release gate\n\nBuildchain can gate release artifacts with KFD-1 contract-world witnesses. This\nis a structured evidence protocol, not a request for consumers to shell out to\nthe Kungfu SDK. The authority chain is:\n\n1. KFD owns the standard metadata and schema ids in `@kungfu-tech/kfd`.\n2. Buildchain imports that metadata, owns the JSON formatting policy, freezes\n the pre-build witness, and independently verifies post-build artifact bytes.\n3. Consumers only pass declarative witness JSON plus the artifact payloads their\n build already produced.\n\nThis gives agents a concrete answer to \"what changed and can I trust it?\" A\nrelease can include both normal release passport evidence and KFD-1 evidence:\nthe passport proves the release transaction and artifacts are complete, while\nKFD-1 proves selected contract-world surfaces inside those artifacts are the\nbyte-for-byte surfaces the release intended to ship.\n\nThe witness JSON names the contract world, the canonical serialization policy,\nand the release surfaces that must be byte-for-byte verified:\n\n```json\n{\n \"id\": \"kungfu-config\",\n \"standard\": \"kfd-1\",\n \"source\": \"kfd\",\n \"contractWorld\": {\n \"id\": \"kungfu-config\",\n \"kind\": \"schema\",\n \"name\": \"Kungfu config schema\"\n },\n \"canonicalPolicy\": {\n \"format\": \"json\",\n \"encoding\": \"utf-8\",\n \"indent\": 2,\n \"trailingNewline\": true\n },\n \"surfaces\": [\n {\n \"id\": \"kungfu-config-schema\",\n \"artifactPath\": \"Contents/Resources/core/config.schema.json\",\n \"expectedSha256\": \"...\"\n }\n ]\n}\n```\n\n`collect github-release` writes the result under the KFD-provided top-level key\ncurrently named `kfd-1`. Each contract world records the frozen witness digest,\nthe KFD package version, KFD schema ids, the Buildchain formatting policy, and\nthe actual artifact digest observed after the build. Verification fails closed\nwhen the witness is missing required facts, an artifact cannot be found, or a\npost-build digest does not match the frozen witness.\n\nFor the KFD repository itself, the KFD-1 witness can be a self-hosted standard\ncontract witness. In that mode KFD owns the standard-contract facts and\nBuildchain verifies declared source standard metadata, schemas, package\nexports, and site-consumption entrypoints against the packaged artifact. The\npassport records source and artifact hash summaries, schema ids, the\nself-hosting boundary, result, residual risk, and responsibility state for\nsource ownership, artifact verification, and release-passport proof ownership.\n\nGood KFD-1 witnesses should point at release payload surfaces, not at private\nbuild-machine state. For Buildchain itself, the natural witness set is the\nrelease passport schema and implementation, KFD-1 gate implementation,\n`dist/site/buildchain-contract.json`, and the npm package payload files that\nexpose the public CLI, reusable workflow/action contracts, and site facts.\nThe final `buildchain.release.json` file should not be used as an ordinary\nbyte-for-byte KFD surface because it contains KFD evidence; instead, the\npassport is audited through release-state SHA, `check-report.json`, and the\ncontract files that generate and verify it.\n\n### KFD-2 release trust passport audit\n\nBuildchain can write a KFD-2 release trust passport audit under the top-level\n`kfd-2` section. The section is generated automatically from KFD-1 and KFD-3\nrelease-gate evidence, and callers may add explicit public release claims with\n`--kfd-2-claim-json`.\n\nEvery public claim must bind:\n\n- declared sources;\n- machine-readable evidence;\n- source/evidence/artifact hashes;\n- artifact coordinates;\n- verification results;\n- audit boundary;\n- responsibility state;\n- residual risk, even when the array is empty.\n\nUnbound public claims fail release passport verification. Claims that are\nmachine-bound but only supported by prose downgrade the KFD-2 audit and produce\na warning, so agents can distinguish \"verified\", \"needs review\", and \"not\nbound to evidence\" without reading release notes.\n\nFor Buildchain's own releases, public release claims are not authored in prose\ninside the workflow. The source registry is\n`packages/core/buildchain-kfd-claims.js`, published as\n`dist/site/kfd-claims.json` and exported as\n`@kungfu-tech/buildchain/buildchain-kfd-claims`. That registry is the\nversion-invariant source of public claims and collaboration surfaces: it does\nnot store the exact release version, promotion SHA, or exact runtime contract\ndigest. Those run-specific facts belong in the release passport and generated\nwitnesses. During Buildchain promotion,\n`scripts/generate-buildchain-kfd-witnesses.mjs` binds the source registry to the\ncurrent source/artifact hashes and generates:\n\n- a KFD-1 self contract-world witness for the packaged docs, schemas, workflows,\n actions, Node exports, and site-consumption facts;\n- one KFD-2 claim JSON per public Buildchain release claim;\n- KFD-3 pre-build and artifact witnesses for the same public collaboration\n surfaces.\n\nThe generated claim set covers Buildchain's KFD release passport support,\nagent-first single source of truth, floating `@v2` contract drift protection,\nsemver GitHub Release evidence publication, channel-preserving release\npropagation, and npm publish evidence/finalization. Buildchain self promotion\npasses those files into `promote-buildchain-ref`; `verifyReleasePassport()` then\nfails closed if any claim is missing source bindings, machine evidence, hashes,\nartifact coordinates, verification result, audit boundary, responsibility, or\nresidual risk.\n\n### KFD-3 collaboration-interface release gate\n\nKFD-3 asks a different release question than KFD-1. KFD-1 proves that named\npayload bytes match one contract world. KFD-3 proves that a product's shipped\nparticipant-facing collaboration/control surface is closed over its declared\ninterface.\n\nFor Buildchain itself, the declared interface starts in\n`packages/core/buildchain-kfd-claims.js`, not in this Markdown file. The\nregistry enumerates public human/agent surfaces across manuals, schema and\nstandard metadata, package exports, site-consumption contracts, workflows, and\nactions. `dist/site/kfd-claims.json` is the packaged machine-readable form used\nby downstream sites and by Buildchain's own release passport. Exact release\nversion/SHA binding is deliberately deferred to the promotion witness, so the\nsource registry can remain stable across semver version-state bumps.\n\nBuildchain also performs a reverse audit before that witness is used. The\ngenerated `dist/site/public-surface-audit.json` enumerates real CLI commands\nfrom `bin/buildchain.mjs`, workflow inputs, action inputs, site pages, and docs\ncommand references, then compares them with the generated registries. Buildchain\nself KFD witnesses include that audit result and classify the collaboration\ninterface as closed-world only when the reverse audit passes. If a public\ncommand, workflow input, action input, or site page is exposed without a\nregistry entry, `pnpm run check` fails before release promotion can produce a\npassport.\n\nThe product remains the fact source. Before build/publish, the product writes a\npre-build witness:\n\n```bash\nkungfu sdk collaboration-interface witness --json \\\n > .buildchain/kfd/kfd-3/collaboration-interface.prebuild.json\n```\n\nThat witness must contain, or point to, the product-owned KFD-3 collaboration\ninterface, registry digest, participants, and declared public shipped surfaces.\nKFD repository self-verification can declare the same facts as grouped machine\nsurfaces: docs, schemas, standards metadata, package exports, and\nsite-consumption contracts.\nAfter the artifact is built, the product also provides artifact-side evidence,\neither as a JSON file or a command:\n\n```bash\nbuildchain collect github-release \\\n --kfd-3-prebuild-witness-json .buildchain/kfd/kfd-3/collaboration-interface.prebuild.json \\\n --kfd-3-artifact-verify-cmd \"kungfu agent verify --json\"\n```\n\nBuildchain imports the KFD-3 metadata from `@kungfu-tech/kfd`, freezes the\npre-build witness digest, ingests the artifact witness, and compares the two\nsets:\n\n- every declared `shipped` public participant-facing surface must appear in the\n artifact witness;\n- every artifact-exposed public participant-facing surface must be declared by\n the pre-build witness;\n- if both witnesses record `collaborationInterface.digest`, the digests must\n match;\n- contradictory, missing, stale, or schema-incomplete evidence fails closed.\n\nThe generated release passport records the result under the KFD-provided\ntop-level key currently named `kfd-3`. The section includes the KFD package\nversion, schema ids/paths, pre-build witness digest, artifact witness digest,\ndeclared/exposed surface counts, missing declared shipped surfaces, and\nunclassified artifact public surfaces. Buildchain also projects the same\ncollaboration-interface evidence into the top-level `kfd-2` audit as a\nmachine-readable `trustProof` object on the generated `kfd-3:*` public claim.\nThat proof carries `releaseStatus`, witness file hashes and canonical hashes,\ndeclared capability verification, reverse audit result and boundary, residual\nrisk, and responsibility state.\n\nThe trust proof makes the strongest claim only when the witnesses justify it:\n`No unclassified reachable surface within the declared audit boundary.` If the\nproduct declares non-exhaustive surfaces, Buildchain keeps the passport\nverifiable but marks the interface `audited` instead of `enforced` and records\nthe residual risk explicitly. Draft or partial KFD-3 declarations are\ndowngraded; missing declared capabilities, undeclared public artifact surfaces,\nor stale collaboration-interface digests fail the proof.\n\nThis makes KFD-3 support usable by readers and agents immediately: they can\ninspect `buildchain.release.json` and know whether the released package\nactually exposes no more and no less than the declared collaboration interface,\ninstead of trusting docs or release notes.\n\n### Floating Buildchain contract lock\n\nKFD-1 protects release payload surfaces. Floating ref contract locks protect the\nconsumer's relationship to Buildchain itself. A consumer can keep\n`.buildchain/contract-lock.json` with the Buildchain floating ref it accepted,\nthe resolved SHA, the contract digest, and the compatibility policy. Each\nBuildchain run reads the actual contract from the checked-out Buildchain ref\nand compares it before heavy build or publish work begins.\n\nCompatible drift, such as optional inputs or extra diagnostics, continues and\ncreates a consumer-local issue for review. Breaking drift fails fast. This means\nconsumers can use `@v2` without silently accepting incompatible changes, while\nBuildchain maintainers can still ship compatible improvements under the same\nmajor floating tag.\n\n`impact.json` can be supplied with `--impact-json`. Production release\npassports (`release/*`) and major publish-gate passports require\n`surfaceImpacts[]`; alpha, local, and legacy passport contexts keep the field\noptional. When `surfaceImpacts[]` is required or supplied, verification fails\nclosed unless each entry has an id, impact, and rationale, and\n`versionImpact.final` matches the highest surface impact. For example, KFD-2\ncontent can remain patch while an additive `registry.kind` field on the\nmachine-consumed KFD registry schema records a minor `kfd-registry-schema`\nsurface impact.\n\nVerify a release passport:\n\n```bash\nbuildchain verify release-passport .buildchain/release-passport/buildchain.release.json\n```\n\nVerify a specific artifact by discovering its detached passport:\n\n```bash\nbuildchain verify artifact ./Kungfu-2.8.0-windows-x64.exe\n```\n\nArtifact verification is subject-centric. Buildchain identifies the subject,\ncomputes or obtains its digest, discovers a detached `buildchain.release.json`,\nverifies that release passport and its evidence, then proves the subject digest\nappears in the passport's artifacts, package set, publish evidence, or artifact\nevidence. The command returns `pass`, `fail`, or `unverifiable`; missing\npassports and digest mismatches fail closed.\n\nFor npm subjects, Buildchain treats the registry as the package digest source:\n`npm:<name>@<version>` resolves `dist.integrity` and matches it against\n`packageSet.main.digest`, `packageSet.platforms[].digest`, and publish evidence.\nUse `--npm-registry <url>` when the package comes from a non-default registry.\n\nDiscovery is ordered and auditable:\n\n1. explicit `--passport`;\n2. sidecar pointer;\n3. embedded/package pointer;\n4. local config or org index;\n5. GitHub Release default from artifact naming/repository/tag hints;\n6. custom locator;\n7. unverifiable with retry guidance.\n\nFor Buildchain-managed GitHub Release lanes, release passport files are\npublished as release assets by default when the upload backend is enabled, so a\nGitHub Release asset URL can discover the sibling `buildchain.release.json`\nwithout a consumer copying YAML resolver logic.\n\nExplain a release to an agent:\n\n```bash\nbuildchain explain release \\\n --passport .buildchain/release-passport/buildchain.release.json \\\n --for agent \\\n --json\n```\n\nThe verifier fails closed when a passport omits artifacts, omits evidence, has\ndigest mismatches, or misses required protocol files.\n\n## Binary Distribution\n\nInitial binary distribution stays lightweight:\n\n- GitHub Release assets.\n- `checksums.txt`.\n- release passport artifacts.\n- a single release evidence bundle.\n- install scripts and Homebrew tap fixtures after the passport path is reliable.\n\nBuildchain publishes platform-specific archives, not loose top-level\nexecutables:\n\n- `buildchain-x86_64-unknown-linux-gnu.tar.gz`\n- `buildchain-aarch64-apple-darwin.tar.gz`\n- `buildchain-x86_64-pc-windows-msvc.zip`\n\nThe executable name inside each archive stays natural for the platform\n(`buildchain` or `buildchain.exe`). Top-level loose executable assets are not\nuploaded, because Linux and macOS would otherwise collide when GitHub Actions\nmatrix artifacts are merged.\n\nHeavy package manager channels such as apt, yum, winget, choco, Scoop, mise, or\nasdf are out of the P0/P1 scope until there is real external demand.\n\nStandalone binaries are a distribution shape, not a second implementation. The\nsource of truth remains the Node/ESM CLI and core library.\n\nThe standalone binary builder imports `@kungfu-tech/buildchain/logging` directly\nand records setup, SEA blob generation, injection, signing, archiving, manifest,\nand evidence phases. The GitHub workflow wraps the same build and passport\nsteps with `buildchain mark`, `buildchain span`,\n`buildchain verify observability-log`, and `buildchain log summary`. Logging is\na hard release gate: missing events, error events, or missing required phases\nfail the job before assets are uploaded. The verified logs are release assets\nand are covered by the release passport digest checks.\n\nSee also [`binary-distribution.md`](binary-distribution.md) for asset naming and\nbundle details, and [`install.md`](install.md) for consumer commands."
|
|
1476
1476
|
},
|
|
1477
1477
|
{
|
|
1478
1478
|
"id": "manual:release-propagation",
|
|
@@ -1486,7 +1486,7 @@
|
|
|
1486
1486
|
],
|
|
1487
1487
|
"maturity": "preview",
|
|
1488
1488
|
"sourcePath": "docs/release-propagation.md",
|
|
1489
|
-
"digest": "sha256:
|
|
1489
|
+
"digest": "sha256:fc2b743e3d76c4f90cdd8c6560cf9d619ad25d74c15c074be96db7bcb6cc2a29",
|
|
1490
1490
|
"headings": [
|
|
1491
1491
|
{
|
|
1492
1492
|
"level": 1,
|
|
@@ -1519,7 +1519,7 @@
|
|
|
1519
1519
|
"anchor": "kfd-to-site-libkungfu-dev"
|
|
1520
1520
|
}
|
|
1521
1521
|
],
|
|
1522
|
-
"markdown": "# Release Propagation\n\nRelease propagation lets a finalized upstream release open a downstream update\nPR using the upstream release passport as the audit source. It is for product\nchains such as:\n\n```text\nkfd -> site-libkungfu-dev\nA -> B -> C\n```\n\nThe downstream repository receives an exact lock, not a floating dist-tag. A\nsite or app can then consume the upstream package, site bundle, or release\npassport as its single source of truth without hand-copying release facts.\n\n## Contract\n\nThe propagation graph is declarative JSON:\n\n```json\n{\n \"schemaVersion\": 1,\n \"contract\": \"kungfu-buildchain-release-propagation-graph\",\n \"nodes\": [\n {\n \"id\": \"kfd\",\n \"repository\": \"kungfu-systems/kfd\",\n \"package\": \"@kungfu-tech/kfd\"\n },\n {\n \"id\": \"site-libkungfu-dev\",\n \"repository\": \"kungfu-systems/site-libkungfu-dev\",\n \"lockPath\": \"buildchain.upstreams/kfd.release.json\",\n \"baseRef\": \"dev/v2/v2.7\"\n }\n ],\n \"edges\": [\n {\n \"id\": \"kfd-to-site\",\n \"from\": \"kfd\",\n \"to\": \"site-libkungfu-dev\",\n \"channelPolicy\": \"preserve\"\n }\n ]\n}\n```\n\n`channelPolicy: \"preserve\"` is the default and maps:\n\n```text\nalpha -> alpha\nrelease -> release\n```\n\nCross-channel mapping is allowed only when an edge declares\n`channelPolicy: \"explicit\"` and a `channelMap`. Buildchain rejects cycles so a\nchain can fan out or continue as `A -> B -> C`, but cannot loop back into an\nalready visited release line.\n\n## Upstream Release Envelope\n\nThe upstream release envelope is the post-finalization fact set:\n\n```json\n{\n \"repository\": \"kungfu-systems/kfd\",\n \"channel\": \"alpha\",\n \"tag\": \"v1.4.0-alpha.3\",\n \"sourceSha\": \"1111111111111111111111111111111111111111\",\n \"package\": {\n \"name\": \"@kungfu-tech/kfd\",\n \"version\": \"1.4.0-alpha.3\",\n \"integrity\": \"sha512-...\"\n },\n \"releasePassport\": {\n \"url\": \"https://github.com/kungfu-systems/kfd/releases/download/v1.4.0-alpha.3/buildchain.release.json\",\n \"sha256\": \"2222222222222222222222222222222222222222222222222222222222222222\"\n },\n \"siteBundle\": {\n \"manifestSha256\": \"3333333333333333333333333333333333333333333333333333333333333333\"\n }\n}\n```\n\nThe package version and integrity must be exact. Downstream build logic should\ninstall that version directly, not resolve `alpha` or `latest` again.\n\nPublication repositories can propagate immutable publication archive evidence\nwithout npm package facts. The upstream envelope then includes\n`publicationArtifact`:\n\n```json\n{\n \"repository\": \"kungfu-systems/paper-observer-declared-timelines\",\n \"channel\": \"alpha\",\n \"tag\": \"v0.1.0-alpha.1\",\n \"sourceSha\": \"4444444444444444444444444444444444444444\",\n \"releasePassport\": {\n \"url\": \"https://github.com/kungfu-systems/paper-observer-declared-timelines/releases/download/v0.1.0-alpha.1/buildchain.release.json\",\n \"sha256\": \"5555555555555555555555555555555555555555555555555555555555555555\"\n },\n \"publicationArtifact\": {\n \"id\": \"observer-declared-timelines\",\n \"kind\": \"paper\",\n \"version\": \"0.1.0-alpha.1\",\n \"canonicalUrl\": \"https://papers.libkungfu.dev/observer-declared-timelines/\",\n \"latestUrl\": \"https://papers.libkungfu.dev/observer-declared-timelines/latest/\",\n \"latestEvidenceUrl\": \"https://papers.libkungfu.dev/observer-declared-timelines/latest/buildchain.release.json\",\n \"immutableVersionUrl\": \"https://papers.libkungfu.dev/archive/observer-declared-timelines/v0.1.0-alpha.1/\",\n \"registry\": {\n \"url\": \"https://github.com/kungfu-systems/paper-observer-declared-timelines/releases/download/v0.1.0-alpha.1/publication-registry.json\",\n \"sha256\": \"6666666666666666666666666666666666666666666666666666666666666666\"\n },\n \"manifest\": {\n \"url\": \"https://github.com/kungfu-systems/paper-observer-declared-timelines/releases/download/v0.1.0-alpha.1/publication-artifact.json\",\n \"sha256\": \"7777777777777777777777777777777777777777777777777777777777777777\"\n },\n \"passport\": {\n \"url\": \"https://github.com/kungfu-systems/paper-observer-declared-timelines/releases/download/v0.1.0-alpha.1/publication-artifact-passport.json\",\n \"sha256\": \"8888888888888888888888888888888888888888888888888888888888888888\"\n },\n \"primaryArtifact\": {\n \"path\": \"_build/main.pdf\",\n \"url\": \"https://papers.libkungfu.dev/archive/observer-declared-timelines/v0.1.0-alpha.1/main.pdf\",\n \"sha256\": \"9999999999999999999999999999999999999999999999999999999999999999\"\n }\n }\n}\n```\n\nThis lets a site repository render the latest reader page and historical\nversion index from release facts while keeping old PDFs, source bundles,\nmanifests, and passports immutable.\n\n## CLI\n\nGenerate a propagation plan:\n\n```bash\nbuildchain release-propagation plan \\\n --graph buildchain.release-propagation.json \\\n --upstream-release .buildchain/upstream-release.json \\\n --output .buildchain/release-propagation-plan.json \\\n --json\n```\n\nWrite the downstream lock:\n\n```bash\nbuildchain release-propagation write-lock \\\n --plan .buildchain/release-propagation-plan.json \\\n --target site-libkungfu-dev \\\n --cwd downstream-checkout \\\n --json\n```\n\nThe written lock has contract\n`kungfu-buildchain-release-propagation-lock` and records:\n\n- upstream repository, channel, exact tag, source SHA;\n- optional npm package name, exact version, and sha512 integrity;\n- optional publication artifact canonical/latest/immutable URLs, registry,\n manifest, passport, source bundle, and primary artifact digests;\n- release passport URL and SHA-256;\n- optional site bundle manifest SHA-256;\n- downstream repository, channel, base ref, lock path;\n- edge id and channel policy.\n\n## Reusable Workflow\n\nUpstream repositories can call\n`.github/workflows/release-propagation.yml@v2` after release finalization:\n\n```yaml\njobs:\n propagate-site:\n uses: kungfu-systems/buildchain/.github/workflows/release-propagation.yml@v2\n with:\n buildchain-ref: v2\n graph-json: ${{ needs.release.outputs.propagation-graph-json }}\n upstream-release-json: ${{ needs.release.outputs.upstream-release-json }}\n downstream-target: site-libkungfu-dev\n downstream-repository: kungfu-systems/site-libkungfu-dev\n downstream-base-ref: dev/v2/v2.7\n dry-run: false\n secrets:\n propagation-token: ${{ secrets.BUILDCHAIN_PROMOTION_TOKEN }}\n```\n\nThe downstream branch name may be reused across upstream releases. Before\nreplacing an existing managed branch, the workflow reads its exact remote SHA\nand pushes with an explicit `--force-with-lease=<ref>:<sha>`. A surviving branch\nfrom a merged PR is therefore reconciled without manual deletion, while a\nconcurrent writer makes the lease fail closed. The controller receipt includes a\n`propagation-branch-reconciliation` evidence file recording the branch, observed\nremote SHA, pushed SHA, lease mode, and the deterministically created or updated\nopen PR.\n\nThe workflow checks out the Buildchain runtime selected by\n`buildchain-repository` and `buildchain-ref` into `.buildchain/runtime`, invokes\nthat runtime for the propagation plan and lock write, then checks out the\ndownstream repository
|
|
1522
|
+
"markdown": "# Release Propagation\n\nRelease propagation lets a finalized upstream release open a downstream update\nPR using the upstream release passport as the audit source. It is for product\nchains such as:\n\n```text\nkfd -> site-libkungfu-dev\nA -> B -> C\n```\n\nThe downstream repository receives an exact lock, not a floating dist-tag. A\nsite or app can then consume the upstream package, site bundle, or release\npassport as its single source of truth without hand-copying release facts.\n\n## Contract\n\nThe propagation graph is declarative JSON:\n\n```json\n{\n \"schemaVersion\": 1,\n \"contract\": \"kungfu-buildchain-release-propagation-graph\",\n \"nodes\": [\n {\n \"id\": \"kfd\",\n \"repository\": \"kungfu-systems/kfd\",\n \"package\": \"@kungfu-tech/kfd\"\n },\n {\n \"id\": \"site-libkungfu-dev\",\n \"repository\": \"kungfu-systems/site-libkungfu-dev\",\n \"lockPath\": \"buildchain.upstreams/kfd.release.json\",\n \"baseRef\": \"dev/v2/v2.7\"\n }\n ],\n \"edges\": [\n {\n \"id\": \"kfd-to-site\",\n \"from\": \"kfd\",\n \"to\": \"site-libkungfu-dev\",\n \"channelPolicy\": \"preserve\"\n }\n ]\n}\n```\n\n`channelPolicy: \"preserve\"` is the default and maps:\n\n```text\nalpha -> alpha\nrelease -> release\n```\n\nCross-channel mapping is allowed only when an edge declares\n`channelPolicy: \"explicit\"` and a `channelMap`. Buildchain rejects cycles so a\nchain can fan out or continue as `A -> B -> C`, but cannot loop back into an\nalready visited release line.\n\n## Upstream Release Envelope\n\nThe upstream release envelope is the post-finalization fact set:\n\n```json\n{\n \"repository\": \"kungfu-systems/kfd\",\n \"channel\": \"alpha\",\n \"tag\": \"v1.4.0-alpha.3\",\n \"sourceSha\": \"1111111111111111111111111111111111111111\",\n \"package\": {\n \"name\": \"@kungfu-tech/kfd\",\n \"version\": \"1.4.0-alpha.3\",\n \"integrity\": \"sha512-...\"\n },\n \"releasePassport\": {\n \"url\": \"https://github.com/kungfu-systems/kfd/releases/download/v1.4.0-alpha.3/buildchain.release.json\",\n \"sha256\": \"2222222222222222222222222222222222222222222222222222222222222222\"\n },\n \"siteBundle\": {\n \"manifestSha256\": \"3333333333333333333333333333333333333333333333333333333333333333\"\n }\n}\n```\n\nThe package version and integrity must be exact. Downstream build logic should\ninstall that version directly, not resolve `alpha` or `latest` again.\n\nPublication repositories can propagate immutable publication archive evidence\nwithout npm package facts. The upstream envelope then includes\n`publicationArtifact`:\n\n```json\n{\n \"repository\": \"kungfu-systems/paper-observer-declared-timelines\",\n \"channel\": \"alpha\",\n \"tag\": \"v0.1.0-alpha.1\",\n \"sourceSha\": \"4444444444444444444444444444444444444444\",\n \"releasePassport\": {\n \"url\": \"https://github.com/kungfu-systems/paper-observer-declared-timelines/releases/download/v0.1.0-alpha.1/buildchain.release.json\",\n \"sha256\": \"5555555555555555555555555555555555555555555555555555555555555555\"\n },\n \"publicationArtifact\": {\n \"id\": \"observer-declared-timelines\",\n \"kind\": \"paper\",\n \"version\": \"0.1.0-alpha.1\",\n \"canonicalUrl\": \"https://papers.libkungfu.dev/observer-declared-timelines/\",\n \"latestUrl\": \"https://papers.libkungfu.dev/observer-declared-timelines/latest/\",\n \"latestEvidenceUrl\": \"https://papers.libkungfu.dev/observer-declared-timelines/latest/buildchain.release.json\",\n \"immutableVersionUrl\": \"https://papers.libkungfu.dev/archive/observer-declared-timelines/v0.1.0-alpha.1/\",\n \"registry\": {\n \"url\": \"https://github.com/kungfu-systems/paper-observer-declared-timelines/releases/download/v0.1.0-alpha.1/publication-registry.json\",\n \"sha256\": \"6666666666666666666666666666666666666666666666666666666666666666\"\n },\n \"manifest\": {\n \"url\": \"https://github.com/kungfu-systems/paper-observer-declared-timelines/releases/download/v0.1.0-alpha.1/publication-artifact.json\",\n \"sha256\": \"7777777777777777777777777777777777777777777777777777777777777777\"\n },\n \"passport\": {\n \"url\": \"https://github.com/kungfu-systems/paper-observer-declared-timelines/releases/download/v0.1.0-alpha.1/publication-artifact-passport.json\",\n \"sha256\": \"8888888888888888888888888888888888888888888888888888888888888888\"\n },\n \"primaryArtifact\": {\n \"path\": \"_build/main.pdf\",\n \"url\": \"https://papers.libkungfu.dev/archive/observer-declared-timelines/v0.1.0-alpha.1/main.pdf\",\n \"sha256\": \"9999999999999999999999999999999999999999999999999999999999999999\"\n }\n }\n}\n```\n\nThis lets a site repository render the latest reader page and historical\nversion index from release facts while keeping old PDFs, source bundles,\nmanifests, and passports immutable.\n\n## CLI\n\nGenerate a propagation plan:\n\n```bash\nbuildchain release-propagation plan \\\n --graph buildchain.release-propagation.json \\\n --upstream-release .buildchain/upstream-release.json \\\n --output .buildchain/release-propagation-plan.json \\\n --json\n```\n\nWrite the downstream lock:\n\n```bash\nbuildchain release-propagation write-lock \\\n --plan .buildchain/release-propagation-plan.json \\\n --target site-libkungfu-dev \\\n --cwd downstream-checkout \\\n --json\n```\n\nThe written lock has contract\n`kungfu-buildchain-release-propagation-lock` and records:\n\n- upstream repository, channel, exact tag, source SHA;\n- optional npm package name, exact version, and sha512 integrity;\n- optional publication artifact canonical/latest/immutable URLs, registry,\n manifest, passport, source bundle, and primary artifact digests;\n- release passport URL and SHA-256;\n- optional site bundle manifest SHA-256;\n- downstream repository, channel, base ref, lock path;\n- edge id and channel policy.\n\n## Reusable Workflow\n\nUpstream repositories can call\n`.github/workflows/release-propagation.yml@v2` after release finalization:\n\n```yaml\njobs:\n propagate-site:\n uses: kungfu-systems/buildchain/.github/workflows/release-propagation.yml@v2\n with:\n buildchain-ref: v2\n graph-json: ${{ needs.release.outputs.propagation-graph-json }}\n upstream-release-json: ${{ needs.release.outputs.upstream-release-json }}\n downstream-target: site-libkungfu-dev\n downstream-repository: kungfu-systems/site-libkungfu-dev\n downstream-base-ref: dev/v2/v2.7\n downstream-prepare-command: pnpm install --frozen-lockfile --ignore-scripts\n downstream-verify-command: pnpm run check\n dry-run: false\n secrets:\n propagation-token: ${{ secrets.BUILDCHAIN_PROMOTION_TOKEN }}\n```\n\nThe downstream branch name may be reused across upstream releases. Before\nreplacing an existing managed branch, the workflow reads its exact remote SHA\nand pushes with an explicit `--force-with-lease=<ref>:<sha>`. A surviving branch\nfrom a merged PR is therefore reconciled without manual deletion, while a\nconcurrent writer makes the lease fail closed. The controller receipt includes a\n`propagation-branch-reconciliation` evidence file recording the branch, observed\nremote SHA, pushed SHA, lease mode, and the deterministically created or updated\nopen PR.\n\nThe workflow checks out the Buildchain runtime selected by\n`buildchain-repository` and `buildchain-ref` into `.buildchain/runtime`, invokes\nthat runtime for the propagation plan and lock write, then checks out the\ndownstream repository and writes the exact lock. A consumer that must pin the\nexact upstream package or regenerate deterministic files declares\n`downstream-prepare-command`. The command receives\n`BUILDCHAIN_UPSTREAM_PACKAGE_NAME`, `BUILDCHAIN_UPSTREAM_PACKAGE_VERSION`, and\n`BUILDCHAIN_UPSTREAM_RELEASE_LOCK`. After preparation, Buildchain refreshes an\nexisting `<!-- buildchain:badges:start -->` README block by default. Consumers\ncan disable that step with `refresh-managed-readme-badges: false`.\n\n`downstream-verify-command` runs against the final tree before any commit or\npush, so consumers can use the same check as their PR workflow. Preparation,\nbadge refresh, and verification failures all fail closed. The workflow stages\nthe complete deterministic result, signs the propagation commit with DCO, and\nthen opens or updates the PR. It does not publish the downstream release\ndirectly. The downstream repository keeps its normal Buildchain governance: the\nPR updates source-of-truth facts, then downstream alpha or release publication\nruns through its own protected channel. A byte-identical rerun is an explicit\nsuccessful no-op.\nFor unreleased runtime validation, keep the caller's reusable workflow reference\non `@v2` and pass a temporary train ref through `buildchain-ref`.\n\n## kfd to site-libkungfu-dev\n\nFor `kfd -> site-libkungfu-dev`, the graph should preserve channels:\n\n- a `kfd` alpha release produces a downstream alpha lock and downstream alpha\n publication consumes the exact `@kungfu-tech/kfd@...-alpha.N` package;\n- a `kfd` stable release produces a downstream release lock and downstream\n stable publication consumes the exact stable package.\n\nThis keeps the site synchronized to the package truth without allowing the site\nto drift onto a floating npm dist-tag."
|
|
1523
1523
|
},
|
|
1524
1524
|
{
|
|
1525
1525
|
"id": "manual:reusable-build-surface",
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"workflowCount": 48,
|
|
8
8
|
"actionCount": 4,
|
|
9
9
|
"sitePageCount": 50,
|
|
10
|
-
"docCommandRefCount":
|
|
10
|
+
"docCommandRefCount": 258,
|
|
11
11
|
"failureCount": 0
|
|
12
12
|
},
|
|
13
13
|
"enumerated": {
|
|
@@ -1744,17 +1744,20 @@
|
|
|
1744
1744
|
"buildchain-repository",
|
|
1745
1745
|
"downstream-base-ref",
|
|
1746
1746
|
"downstream-branch",
|
|
1747
|
+
"downstream-prepare-command",
|
|
1747
1748
|
"downstream-repository",
|
|
1748
1749
|
"downstream-target",
|
|
1750
|
+
"downstream-verify-command",
|
|
1749
1751
|
"dry-run",
|
|
1750
1752
|
"graph-json",
|
|
1751
1753
|
"lock-path",
|
|
1752
1754
|
"pr-body",
|
|
1753
1755
|
"pr-title",
|
|
1756
|
+
"refresh-managed-readme-badges",
|
|
1754
1757
|
"source-node",
|
|
1755
1758
|
"upstream-release-json"
|
|
1756
1759
|
],
|
|
1757
|
-
"inputCount":
|
|
1760
|
+
"inputCount": 16,
|
|
1758
1761
|
"secrets": [
|
|
1759
1762
|
"propagation-token"
|
|
1760
1763
|
],
|
|
@@ -3476,6 +3479,11 @@
|
|
|
3476
3479
|
"path": "docs/release-passport.md",
|
|
3477
3480
|
"command": "buildchain verify release-passport"
|
|
3478
3481
|
},
|
|
3482
|
+
{
|
|
3483
|
+
"id": "verify-release-passport",
|
|
3484
|
+
"path": "docs/release-passport.md",
|
|
3485
|
+
"command": "buildchain verify release-passport"
|
|
3486
|
+
},
|
|
3479
3487
|
{
|
|
3480
3488
|
"id": "verify-release-passport",
|
|
3481
3489
|
"path": "README.md",
|
|
@@ -3503,8 +3511,8 @@
|
|
|
3503
3511
|
"workflowRegistryPath": "dist/site/workflow-registry.json",
|
|
3504
3512
|
"pageRegistryPath": "dist/site/page-registry.json",
|
|
3505
3513
|
"cliRegistryDigest": "b469949f77ed7777f23fe68c54daf6d2c20d3afc97f3bbd5a178a91202a068d0",
|
|
3506
|
-
"workflowRegistryDigest": "
|
|
3507
|
-
"pageRegistryDigest": "
|
|
3514
|
+
"workflowRegistryDigest": "822624c70c801b19f537335a451b240f4e82cc4435ad89f0298621d3a817a710",
|
|
3515
|
+
"pageRegistryDigest": "4598f3d80d638f6aa5ed8541b9ddd47b2052408c1245fcc4b776e36a297ef99f"
|
|
3508
3516
|
},
|
|
3509
3517
|
"comparison": {
|
|
3510
3518
|
"missingCliRegistry": [],
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"contract": "kungfu-buildchain-publication-release-registry",
|
|
4
|
-
"generatedAt": "2026-07-
|
|
5
|
-
"publishedAt": "2026-07-
|
|
4
|
+
"generatedAt": "2026-07-18T22:57:23.219Z",
|
|
5
|
+
"publishedAt": "2026-07-18T22:57:23.219Z",
|
|
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": "8b0423396f09f29e2ea05c38896228751767ab21",
|
|
23
23
|
"timestampPolicyDetails": {
|
|
24
24
|
"contract": "kungfu-buildchain-surface-timestamp-policy",
|
|
25
25
|
"timestampFields": [
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
"package": {
|
|
34
34
|
"name": "@kungfu-tech/buildchain",
|
|
35
|
-
"version": "2.14.
|
|
35
|
+
"version": "2.14.3-alpha.0",
|
|
36
36
|
"versionSource": "package.json#version"
|
|
37
37
|
},
|
|
38
38
|
"sourceKind": "package-site-bundle",
|
|
@@ -15,7 +15,9 @@
|
|
|
15
15
|
"releasePassport": {
|
|
16
16
|
"entrypoint": "buildchain.release.json",
|
|
17
17
|
"bundle": "buildchain-release-bundle.tar.gz",
|
|
18
|
-
"contract": "kungfu-buildchain-release-passport"
|
|
18
|
+
"contract": "kungfu-buildchain-release-passport",
|
|
19
|
+
"schema": "schemas/release-passport-v1.schema.json",
|
|
20
|
+
"checkManifest": "release-passport-check-manifest.json"
|
|
19
21
|
},
|
|
20
22
|
"releasePropagation": {
|
|
21
23
|
"graphContract": "kungfu-buildchain-release-propagation-graph",
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"contract": "kungfu-buildchain-release-passport-check-manifest",
|
|
4
|
+
"passport": {
|
|
5
|
+
"contract": "kungfu-buildchain-release-passport",
|
|
6
|
+
"schemaVersion": 1,
|
|
7
|
+
"schema": {
|
|
8
|
+
"id": "https://buildchain.libkungfu.dev/schemas/release-passport-v1.schema.json",
|
|
9
|
+
"path": "schemas/release-passport-v1.schema.json",
|
|
10
|
+
"npmExport": "@kungfu-tech/buildchain/site/schemas/release-passport-v1.schema.json"
|
|
11
|
+
},
|
|
12
|
+
"checker": {
|
|
13
|
+
"contract": "kungfu-buildchain-release-check-report",
|
|
14
|
+
"command": "buildchain verify release-passport <buildchain.release.json>",
|
|
15
|
+
"nodeApi": "@kungfu-tech/buildchain/release-passport#verifyReleasePassport",
|
|
16
|
+
"result": "check-report.json"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"ownership": {
|
|
20
|
+
"envelopeOwner": "Buildchain",
|
|
21
|
+
"aggregationFields": [
|
|
22
|
+
"product",
|
|
23
|
+
"release",
|
|
24
|
+
"workflow",
|
|
25
|
+
"runnerPolicy",
|
|
26
|
+
"versionImpact",
|
|
27
|
+
"surfaceImpacts",
|
|
28
|
+
"packageSet",
|
|
29
|
+
"anchorManifest",
|
|
30
|
+
"trustedPublishing",
|
|
31
|
+
"transaction",
|
|
32
|
+
"surfaceTimestampPolicy",
|
|
33
|
+
"buildFacts",
|
|
34
|
+
"buildSummary",
|
|
35
|
+
"platformArtifactManifests",
|
|
36
|
+
"distTagPromotion",
|
|
37
|
+
"controllerReceipts",
|
|
38
|
+
"artifacts",
|
|
39
|
+
"evidence",
|
|
40
|
+
"recovery"
|
|
41
|
+
],
|
|
42
|
+
"kfdSections": [
|
|
43
|
+
{
|
|
44
|
+
"section": "kfd-1",
|
|
45
|
+
"owner": "KFD",
|
|
46
|
+
"package": "@kungfu-tech/kfd",
|
|
47
|
+
"metadataSchema": {
|
|
48
|
+
"id": "https://kfd.libkungfu.dev/schemas/kfd-standards.schema.json",
|
|
49
|
+
"path": "schemas/kfd-standards.schema.json",
|
|
50
|
+
"version": "2"
|
|
51
|
+
},
|
|
52
|
+
"schemaIds": {
|
|
53
|
+
"metadata": "https://kfd.libkungfu.dev/schemas/kfd-standards.schema.json",
|
|
54
|
+
"contractWorld": "https://kfd.libkungfu.dev/schemas/kfd-1/contract-world.schema.json",
|
|
55
|
+
"witness": "https://kfd.libkungfu.dev/schemas/kfd-1/witness.schema.json",
|
|
56
|
+
"publicationUrlSemantics": "https://kfd.libkungfu.dev/schemas/kfd-1/publication-url-semantics.schema.json",
|
|
57
|
+
"candidateRegistry": "https://kfd.libkungfu.dev/schemas/kfd-candidate-registry.schema.json",
|
|
58
|
+
"verificationBundle": "https://kfd.libkungfu.dev/schemas/kfd-verification-bundle.schema.json",
|
|
59
|
+
"verificationReport": "https://kfd.libkungfu.dev/schemas/kfd-verification-report.schema.json"
|
|
60
|
+
},
|
|
61
|
+
"schemaPaths": {
|
|
62
|
+
"metadata": "schemas/kfd-standards.schema.json",
|
|
63
|
+
"contractWorld": "schemas/kfd-1/contract-world.schema.json",
|
|
64
|
+
"witness": "schemas/kfd-1/witness.schema.json",
|
|
65
|
+
"publicationUrlSemantics": "schemas/kfd-1/publication-url-semantics.schema.json",
|
|
66
|
+
"candidateRegistry": "schemas/kfd-candidate-registry.schema.json",
|
|
67
|
+
"verificationBundle": "schemas/kfd-verification-bundle.schema.json",
|
|
68
|
+
"verificationReport": "schemas/kfd-verification-report.schema.json"
|
|
69
|
+
},
|
|
70
|
+
"compatibility": {
|
|
71
|
+
"packageLine": "v1.0",
|
|
72
|
+
"registrySchemaVersion": 1,
|
|
73
|
+
"metadataSchemaVersion": "2",
|
|
74
|
+
"rule": "Before the first stable release, fully evidenced Foundation Revision may correct the latest numbered structure while preserving published coordinates and lineage; Foundation Freeze then requires later substantive change to mint a new KFD."
|
|
75
|
+
},
|
|
76
|
+
"rule": "Buildchain aggregates and checks kfd-1 evidence but does not redefine its schema semantics."
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"section": "kfd-2",
|
|
80
|
+
"owner": "KFD",
|
|
81
|
+
"package": "@kungfu-tech/kfd",
|
|
82
|
+
"metadataSchema": {
|
|
83
|
+
"id": "https://kfd.libkungfu.dev/schemas/kfd-standards.schema.json",
|
|
84
|
+
"path": "schemas/kfd-standards.schema.json",
|
|
85
|
+
"version": "2"
|
|
86
|
+
},
|
|
87
|
+
"schemaIds": {
|
|
88
|
+
"metadata": "https://kfd.libkungfu.dev/schemas/kfd-standards.schema.json",
|
|
89
|
+
"trustTaxonomy": "https://kfd.libkungfu.dev/schemas/kfd-2/trust-taxonomy.schema.json",
|
|
90
|
+
"releaseClaims": "https://kfd.libkungfu.dev/schemas/kfd-2/release-claims.schema.json",
|
|
91
|
+
"releaseTrustPassport": "https://kfd.libkungfu.dev/schemas/kfd-2/release-trust-passport.schema.json",
|
|
92
|
+
"trustClaims": "https://kfd.libkungfu.dev/schemas/kfd-2/trust-claims.schema.json",
|
|
93
|
+
"trustAssessment": "https://kfd.libkungfu.dev/schemas/kfd-2/trust-assessment.schema.json"
|
|
94
|
+
},
|
|
95
|
+
"schemaPaths": {
|
|
96
|
+
"metadata": "schemas/kfd-standards.schema.json",
|
|
97
|
+
"trustTaxonomy": "schemas/kfd-2/trust-taxonomy.schema.json",
|
|
98
|
+
"releaseClaims": "schemas/kfd-2/release-claims.schema.json",
|
|
99
|
+
"releaseTrustPassport": "schemas/kfd-2/release-trust-passport.schema.json",
|
|
100
|
+
"trustClaims": "schemas/kfd-2/trust-claims.schema.json",
|
|
101
|
+
"trustAssessment": "schemas/kfd-2/trust-assessment.schema.json"
|
|
102
|
+
},
|
|
103
|
+
"compatibility": {
|
|
104
|
+
"packageLine": "v1.0",
|
|
105
|
+
"registrySchemaVersion": 1,
|
|
106
|
+
"metadataSchemaVersion": "2",
|
|
107
|
+
"rule": "Before the first stable release, maintainer-authorized semantic refinement must declare breaking decision-surface impact; after stable, substantive change mints a new KFD."
|
|
108
|
+
},
|
|
109
|
+
"rule": "Buildchain aggregates and checks kfd-2 evidence but does not redefine its schema semantics."
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"section": "kfd-3",
|
|
113
|
+
"owner": "KFD",
|
|
114
|
+
"package": "@kungfu-tech/kfd",
|
|
115
|
+
"metadataSchema": {
|
|
116
|
+
"id": "https://kfd.libkungfu.dev/schemas/kfd-standards.schema.json",
|
|
117
|
+
"path": "schemas/kfd-standards.schema.json",
|
|
118
|
+
"version": "2"
|
|
119
|
+
},
|
|
120
|
+
"schemaIds": {
|
|
121
|
+
"metadata": "https://kfd.libkungfu.dev/schemas/kfd-standards.schema.json",
|
|
122
|
+
"collaborationInterface": "https://kfd.libkungfu.dev/schemas/kfd-3/collaboration-interface.schema.json",
|
|
123
|
+
"witness": "https://kfd.libkungfu.dev/schemas/kfd-3/witness.schema.json"
|
|
124
|
+
},
|
|
125
|
+
"schemaPaths": {
|
|
126
|
+
"metadata": "schemas/kfd-standards.schema.json",
|
|
127
|
+
"collaborationInterface": "schemas/kfd-3/collaboration-interface.schema.json",
|
|
128
|
+
"witness": "schemas/kfd-3/witness.schema.json"
|
|
129
|
+
},
|
|
130
|
+
"compatibility": {
|
|
131
|
+
"packageLine": "v1.0",
|
|
132
|
+
"registrySchemaVersion": 1,
|
|
133
|
+
"metadataSchemaVersion": "2",
|
|
134
|
+
"rule": "Before the first stable release, maintainer-authorized semantic refinement must declare breaking decision-surface impact; after stable, substantive change mints a new KFD."
|
|
135
|
+
},
|
|
136
|
+
"rule": "Buildchain aggregates and checks kfd-3 evidence but does not redefine its schema semantics."
|
|
137
|
+
}
|
|
138
|
+
]
|
|
139
|
+
},
|
|
140
|
+
"localClosure": {
|
|
141
|
+
"entrypoint": "buildchain.release.json",
|
|
142
|
+
"resolutionBase": "directory containing the passport",
|
|
143
|
+
"requiredSiblings": [
|
|
144
|
+
"product.mechanism",
|
|
145
|
+
"evidence.artifactEvidence",
|
|
146
|
+
"evidence.impact",
|
|
147
|
+
"evidence.agentIndex"
|
|
148
|
+
],
|
|
149
|
+
"conditionalSiblings": [
|
|
150
|
+
{
|
|
151
|
+
"when": "evidence.publishEvidence is present or packageSet is present",
|
|
152
|
+
"pointer": "evidence.publishEvidence"
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"when": "evidence.transactionState is present",
|
|
156
|
+
"pointer": "evidence.transactionState"
|
|
157
|
+
}
|
|
158
|
+
],
|
|
159
|
+
"rule": "The normative checker resolves every declared sibling relative to the passport and fails closed on missing required evidence, digest drift, or semantic mismatch."
|
|
160
|
+
},
|
|
161
|
+
"compatibility": {
|
|
162
|
+
"envelope": "Compatible optional fields may be added while schemaVersion remains 1; removing or changing required-field semantics requires a new schema id or contract version.",
|
|
163
|
+
"siblings": "New optional siblings may be added in v1; making a sibling required requires a new schema id or contract version.",
|
|
164
|
+
"kfdSections": "Each KFD subsection follows the compatibility metadata published by @kungfu-tech/kfd; Buildchain must not silently reinterpret a KFD schema version.",
|
|
165
|
+
"unknownFields": "Independent readers must preserve or ignore unknown additive fields."
|
|
166
|
+
}
|
|
167
|
+
}
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"./release-candidate": "./packages/core/release-candidate.js",
|
|
36
36
|
"./stable-candidate-ledger": "./packages/core/stable-candidate-ledger.js",
|
|
37
37
|
"./release-passport": "./packages/core/release-passport.js",
|
|
38
|
+
"./release-passport-contract": "./packages/core/release-passport-contract.js",
|
|
38
39
|
"./release-propagation": "./packages/core/release-propagation.js",
|
|
39
40
|
"./surface-manifest": "./packages/core/surface-manifest.js",
|
|
40
41
|
"./buildchain-kfd-claims": "./packages/core/buildchain-kfd-claims.js",
|
|
@@ -54,6 +55,8 @@
|
|
|
54
55
|
"./site/kfd-upstream-aggregate.json": "./dist/site/kfd-upstream-aggregate.json",
|
|
55
56
|
"./site/release-model.json": "./dist/site/release-model.json",
|
|
56
57
|
"./site/artifact-schemas.json": "./dist/site/artifact-schemas.json",
|
|
58
|
+
"./site/release-passport-check-manifest.json": "./dist/site/release-passport-check-manifest.json",
|
|
59
|
+
"./site/schemas/release-passport-v1.schema.json": "./dist/site/schemas/release-passport-v1.schema.json",
|
|
57
60
|
"./site/buildchain-contract.json": "./dist/site/buildchain-contract.json",
|
|
58
61
|
"./site/product-mechanism.json": "./dist/site/product-mechanism.json",
|
|
59
62
|
"./site/release-provenance.json": "./dist/site/release-provenance.json",
|