@kungfu-tech/buildchain 4.0.3 → 4.0.4
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/buildchain-contract.json +2 -2
- package/dist/site/buildchain-site.json +6 -6
- package/dist/site/kfd-claims.json +2 -2
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/page-registry.json +2 -2
- package/dist/site/public-surface-audit.json +2 -2
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/site-manifest.json +4 -4
- package/dist/site/workflow-registry.json +5 -5
- package/docs/v4-production-release.md +19 -2
- package/package.json +1 -1
- package/scripts/publication-settlement.mjs +21 -15
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"product": {
|
|
5
5
|
"name": "Buildchain",
|
|
6
6
|
"package": "@kungfu-tech/buildchain",
|
|
7
|
-
"version": "4.0.
|
|
7
|
+
"version": "4.0.4",
|
|
8
8
|
"repository": "https://github.com/kungfu-systems/buildchain"
|
|
9
9
|
},
|
|
10
10
|
"majorLine": "v4",
|
|
@@ -5444,5 +5444,5 @@
|
|
|
5444
5444
|
"compatibilityFactCutRoot": "sha256:f61b975d4a96c921cc4bd37fb3ed9a0596b47004fe34dc7219979d697e3707f9",
|
|
5445
5445
|
"compatibilityProofRegistryRoot": "sha256:b7194b811e4d3af2df4390bc4d1731e16a86215bd64ee18cb630dd5492f4fb63",
|
|
5446
5446
|
"compatibilityDigest": "sha256:a0d4f48bb6236f6932466cfb2802b866035c5be5861a9d41c2975307a640fb18",
|
|
5447
|
-
"contractDigest": "sha256:
|
|
5447
|
+
"contractDigest": "sha256:c98bbc9fc63f47d55711c7414081174236d94514d916b10f7394ec3d7a9a6fe6"
|
|
5448
5448
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"contract": "kungfu-buildchain-site-bundle",
|
|
4
|
-
"generatedAt": "2026-09-
|
|
5
|
-
"publishedAt": "2026-09-
|
|
4
|
+
"generatedAt": "2026-09-07T17:31:44.000Z",
|
|
5
|
+
"publishedAt": "2026-09-07T17:31:44.000Z",
|
|
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": "29a053e8547b7b1d12c3244f18f69b7ee1eb8a33",
|
|
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": "4.0.
|
|
40
|
+
"version": "4.0.4",
|
|
41
41
|
"versionSource": "package.json#version"
|
|
42
42
|
},
|
|
43
43
|
"source": {
|
|
@@ -5128,7 +5128,7 @@
|
|
|
5128
5128
|
],
|
|
5129
5129
|
"maturity": "stable",
|
|
5130
5130
|
"sourcePath": "docs/v4-production-release.md",
|
|
5131
|
-
"digest": "sha256:
|
|
5131
|
+
"digest": "sha256:d17548de50809cbd4e9113477593a00f5b6c15c2f82c091da1ce08d0102349ac",
|
|
5132
5132
|
"headings": [
|
|
5133
5133
|
{
|
|
5134
5134
|
"level": 1,
|
|
@@ -5156,7 +5156,7 @@
|
|
|
5156
5156
|
"anchor": "automatic-next-development-review"
|
|
5157
5157
|
}
|
|
5158
5158
|
],
|
|
5159
|
-
"markdown": "---\nstatus: active\nperiod: ongoing\ntheme: buildchain-v4-production-release\ndoc_type: runbook\nsource_level: repository-contracts + protected-provider-readback\nconfidence: high\nsensitivity: public\nevidence_grade: A\nreview_state: unreviewed\nlast_reviewed: 2026-09-
|
|
5159
|
+
"markdown": "---\nstatus: active\nperiod: ongoing\ntheme: buildchain-v4-production-release\ndoc_type: runbook\nsource_level: repository-contracts + protected-provider-readback\nconfidence: high\nsensitivity: public\nevidence_grade: A\nreview_state: unreviewed\nlast_reviewed: 2026-09-08\nai_provenance:\n model_family: GPT-6\n product: Codex\n generated_at: 2026-09-08\n invisible_context: Provider credentials and private provider state were not read.\n---\n\n# Buildchain v4 production release\n\nBuildchain v4 is the production release authority for the `v4.0` line. The\nprotected source path is:\n\n```text\ndev/v4/v4.0 -> alpha/v4/v4.0 -> release/v4/v4.0\n```\n\nPublic consumers use `v4-alpha` for the current prerelease channel and `v4`\nfor stable, with matching stable and alpha contract locks. Exact commits and\nimmutable release tags identify retained evidence and explicitly admitted runtime\ninputs; tracked v4 reusable-workflow selectors remain `@v4` or `@v4-alpha`.\n\nBefore qualifying a new release, run `node scripts/check-universal-workflow-bootstrap.mjs`.\nThe required repository check rejects an expired or not-yet-valid candidate admission\npolicy before publication. Renew the bounded validity window through protected review;\nkeep its capability, permission, reviewer and exact-source requirements unchanged.\nHistorical publication receipts remain immutable when a later admission window expires.\n\nThe release transaction is fail-closed. The v4 provider-operation journal,\nactivation plan, stable publication fence, and partial-mutation recovery plan\nbind the exact source, qualification, policy, provider readback, protected\nancestry, and target roots. Confirmed operations are never replayed; uncertain\noperations require provider readback before retry; stable publication requires\nan N-1 or independently sealed qualification.\n\n## Provider readback\n\nA stable release is complete only when all of these coordinates agree:\n\n- `release/v4/v4.0`, `v4`, `v4.0`, and the exact `v4.0.x` tag;\n- the GitHub Release tag and attached Release Passport evidence;\n- npm `@kungfu-tech/buildchain@4.0.x`, its `gitHead`, and the `latest` tag;\n- the protected source and release transaction roots.\n\nThe alpha channel applies the same rule to `alpha/v4/v4.0`, `v4-alpha`, the\nexact alpha tag, and npm's `alpha` tag.\n\n## Non-destructive rollback\n\nRollback never rewrites an exact tag, release, package version, Passport, or\nprovider journal. Stop forward promotion and select the last verified exact\nv4 runtime through an admitted, non-persistent recovery input; keep tracked v4\nworkflow selectors on their locked floating channel. Use `release/v3/v3.0`\ncoordinate only as an explicit compatibility rollback reference. Restoring v3\nas production authority requires a new reviewed cutover; it is not an implicit\nfallback.\n\nBefore any retry, compare the current provider state with the retained\ntransaction and operation roots. Resume only missing eligible operations.\nConflicting state remains `repair-required` or terminal and must not be\nconverted into success by moving a floating ref.\n\n## Publication settlement and binary recovery\n\nPublication, next-development advancement, and binary distribution have separate\nresults. A completed native ReleaseReceipt remains publication evidence when the\nlater generated Dev PR is still pending or its enqueue call fails. SETTLE verifies\nthe immutable invocation, transaction, both provider states, receipt and Passport\nroots even when APPLY fails after publication. It has no provider write permission.\n\nAPPLY retains that exact chain before waiting for next-development in the existing GitHub Release as\n`buildchain-publication-settlement.json`; it reads the exact tag and original\n`buildchain.release.json` before adding the packet. The APPLY artifact also retains\n`delivery-summary.json`, which reports publication and next-development separately.\nA green workflow label cannot substitute for this receipt verification.\n\nRecovery verifies both its current execution chain and any already published\nsettlement against the exact tag, source and original Passport. It preserves\nthe existing settlement bytes and uses that original receipt for development\nadvancement. A corrected runtime may produce different recovery observations;\nthey do not authorize replacing the completed publication packet. Ambiguous,\ntampered or mismatched retained evidence still blocks recovery.\n\nBinary Distribution reads this settlement and the original publication Passport.\nTag creation can precede settlement, so it waits at most 40 observations, 15 seconds\napart, for missing evidence. A mismatched source, tag, Passport or receipt fails\nimmediately. It no longer requires a legacy `buildchain/release-state/*` ref for v4.\n\nThe sealed binary publisher retains the publication Passport and writes its own\nPassport as `buildchain.binary.release.json`. All v4 asset collisions are checked\nbefore uploads: identical bytes are preserved, absent assets are added, and\nconflicting bytes are rejected. Each publication authorization is retained as\n`buildchain.binary.capability-<sha256>.json`, so a fresh recovery capability does\nnot overwrite an earlier grant. Existing assets are never clobbered. Recovery uses\nthe same exact successful Binary Distribution evidence run through\n`self-release-binary-assets.yml`; it does not rebuild already admitted archives or\ncreate another npm version. Read back all three platform archives, checksums,\nboth Passports and the settlement packet before declaring distribution complete.\n\nThe native publication receipt authorizes no stable promotion and makes no claim\nthat a pending next-development PR has merged. Inspect the exact PR head, protected\nbase and merge result independently. A retry of the publication phase must first\nread retained provider facts and resume only missing operations.\n\n## Automatic next-development review\n\nAfter stable completion, the producer generates the next patch at `alpha.0`\nfrom an isolated Git checkout of the exact current protected Dev commit. The\ncheckout explicitly fetches the exact Dev commit into its own object database;\nshallow local clones alone may omit commits fetched only into `FETCH_HEAD`.\nIt retains its own index so version verification can inspect the actual\ngenerated delta, and uses the admitted runtime dependency bridge. A source\narchive without Git metadata cannot perform that verification. The publication\nreceipt remains complete if development preparation fails; recover the original\ntransaction with corrected, reviewed tooling before publishing the next version.\n\n`self-release-next-development.yml` observes a successful exact `Verify` PR run\nfor a same-repository `chore/next-development/*` branch. It executes only the\nprotected default branch runtime. The PR must have one parent equal to the\ncurrent protected Dev head. The protected generator reconstructs every tracked\nbyte, permits only the declared immediate alpha version increment, and verifies\nthe completed alpha settlement against the exact tag and original Passport.\nThe published source tree must equal the protected development base tree.\n\nThe verification step receives no approval credential and never executes PR\ncode. A separate step uses `BUILDCHAIN_APPROVAL_TOKEN`, verifies that its identity\nis the independent `kungfu-origin` CODEOWNER, rereads the exact PR/run/base, and\napproves only that commit. Existing requests for changes stop automation.\nThe exact approval is read back before queue admission with the separate\n`BUILDCHAIN_PROMOTION_TOKEN`. Required checks, CODEOWNER protection and native\nmerge-group verification remain enforced. Missing credentials or evidence,\nforks, source changes and base/head drift fail closed.\n\nThe producer waits for pending independent review and required checks with a\nbounded retry budget. Publication evidence is already durable during this wait,\nso binaries can proceed independently. The reviewer also enqueues the verified\nhead idempotently, allowing a producer interruption to leave a recoverable PR.\nAn interrupted producer run remains failed; a successful later release is needed\nto establish an uninterrupted end-to-end publication."
|
|
5160
5160
|
},
|
|
5161
5161
|
{
|
|
5162
5162
|
"id": "manual:v4-publication-rehearsal",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"contract": "kungfu-buildchain-public-surface-reverse-audit",
|
|
22
22
|
"path": "dist/site/public-surface-audit.json",
|
|
23
23
|
"status": "passed",
|
|
24
|
-
"sha256": "
|
|
24
|
+
"sha256": "2a4ae3826c24eb556bee87b11e642b18a86876ff53bd7de1a25d96a101100ec2",
|
|
25
25
|
"summary": {
|
|
26
26
|
"cliCommandCount": 117,
|
|
27
27
|
"workflowCount": 115,
|
|
@@ -246,7 +246,7 @@
|
|
|
246
246
|
"contract": "kungfu-buildchain-public-surface-reverse-audit",
|
|
247
247
|
"path": "dist/site/public-surface-audit.json",
|
|
248
248
|
"status": "passed",
|
|
249
|
-
"sha256": "
|
|
249
|
+
"sha256": "2a4ae3826c24eb556bee87b11e642b18a86876ff53bd7de1a25d96a101100ec2",
|
|
250
250
|
"summary": {
|
|
251
251
|
"cliCommandCount": 117,
|
|
252
252
|
"workflowCount": 115,
|
|
@@ -5062,7 +5062,7 @@
|
|
|
5062
5062
|
],
|
|
5063
5063
|
"maturity": "stable",
|
|
5064
5064
|
"sourcePath": "docs/v4-production-release.md",
|
|
5065
|
-
"digest": "sha256:
|
|
5065
|
+
"digest": "sha256:d17548de50809cbd4e9113477593a00f5b6c15c2f82c091da1ce08d0102349ac",
|
|
5066
5066
|
"headings": [
|
|
5067
5067
|
{
|
|
5068
5068
|
"level": 1,
|
|
@@ -5090,7 +5090,7 @@
|
|
|
5090
5090
|
"anchor": "automatic-next-development-review"
|
|
5091
5091
|
}
|
|
5092
5092
|
],
|
|
5093
|
-
"markdown": "---\nstatus: active\nperiod: ongoing\ntheme: buildchain-v4-production-release\ndoc_type: runbook\nsource_level: repository-contracts + protected-provider-readback\nconfidence: high\nsensitivity: public\nevidence_grade: A\nreview_state: unreviewed\nlast_reviewed: 2026-09-
|
|
5093
|
+
"markdown": "---\nstatus: active\nperiod: ongoing\ntheme: buildchain-v4-production-release\ndoc_type: runbook\nsource_level: repository-contracts + protected-provider-readback\nconfidence: high\nsensitivity: public\nevidence_grade: A\nreview_state: unreviewed\nlast_reviewed: 2026-09-08\nai_provenance:\n model_family: GPT-6\n product: Codex\n generated_at: 2026-09-08\n invisible_context: Provider credentials and private provider state were not read.\n---\n\n# Buildchain v4 production release\n\nBuildchain v4 is the production release authority for the `v4.0` line. The\nprotected source path is:\n\n```text\ndev/v4/v4.0 -> alpha/v4/v4.0 -> release/v4/v4.0\n```\n\nPublic consumers use `v4-alpha` for the current prerelease channel and `v4`\nfor stable, with matching stable and alpha contract locks. Exact commits and\nimmutable release tags identify retained evidence and explicitly admitted runtime\ninputs; tracked v4 reusable-workflow selectors remain `@v4` or `@v4-alpha`.\n\nBefore qualifying a new release, run `node scripts/check-universal-workflow-bootstrap.mjs`.\nThe required repository check rejects an expired or not-yet-valid candidate admission\npolicy before publication. Renew the bounded validity window through protected review;\nkeep its capability, permission, reviewer and exact-source requirements unchanged.\nHistorical publication receipts remain immutable when a later admission window expires.\n\nThe release transaction is fail-closed. The v4 provider-operation journal,\nactivation plan, stable publication fence, and partial-mutation recovery plan\nbind the exact source, qualification, policy, provider readback, protected\nancestry, and target roots. Confirmed operations are never replayed; uncertain\noperations require provider readback before retry; stable publication requires\nan N-1 or independently sealed qualification.\n\n## Provider readback\n\nA stable release is complete only when all of these coordinates agree:\n\n- `release/v4/v4.0`, `v4`, `v4.0`, and the exact `v4.0.x` tag;\n- the GitHub Release tag and attached Release Passport evidence;\n- npm `@kungfu-tech/buildchain@4.0.x`, its `gitHead`, and the `latest` tag;\n- the protected source and release transaction roots.\n\nThe alpha channel applies the same rule to `alpha/v4/v4.0`, `v4-alpha`, the\nexact alpha tag, and npm's `alpha` tag.\n\n## Non-destructive rollback\n\nRollback never rewrites an exact tag, release, package version, Passport, or\nprovider journal. Stop forward promotion and select the last verified exact\nv4 runtime through an admitted, non-persistent recovery input; keep tracked v4\nworkflow selectors on their locked floating channel. Use `release/v3/v3.0`\ncoordinate only as an explicit compatibility rollback reference. Restoring v3\nas production authority requires a new reviewed cutover; it is not an implicit\nfallback.\n\nBefore any retry, compare the current provider state with the retained\ntransaction and operation roots. Resume only missing eligible operations.\nConflicting state remains `repair-required` or terminal and must not be\nconverted into success by moving a floating ref.\n\n## Publication settlement and binary recovery\n\nPublication, next-development advancement, and binary distribution have separate\nresults. A completed native ReleaseReceipt remains publication evidence when the\nlater generated Dev PR is still pending or its enqueue call fails. SETTLE verifies\nthe immutable invocation, transaction, both provider states, receipt and Passport\nroots even when APPLY fails after publication. It has no provider write permission.\n\nAPPLY retains that exact chain before waiting for next-development in the existing GitHub Release as\n`buildchain-publication-settlement.json`; it reads the exact tag and original\n`buildchain.release.json` before adding the packet. The APPLY artifact also retains\n`delivery-summary.json`, which reports publication and next-development separately.\nA green workflow label cannot substitute for this receipt verification.\n\nRecovery verifies both its current execution chain and any already published\nsettlement against the exact tag, source and original Passport. It preserves\nthe existing settlement bytes and uses that original receipt for development\nadvancement. A corrected runtime may produce different recovery observations;\nthey do not authorize replacing the completed publication packet. Ambiguous,\ntampered or mismatched retained evidence still blocks recovery.\n\nBinary Distribution reads this settlement and the original publication Passport.\nTag creation can precede settlement, so it waits at most 40 observations, 15 seconds\napart, for missing evidence. A mismatched source, tag, Passport or receipt fails\nimmediately. It no longer requires a legacy `buildchain/release-state/*` ref for v4.\n\nThe sealed binary publisher retains the publication Passport and writes its own\nPassport as `buildchain.binary.release.json`. All v4 asset collisions are checked\nbefore uploads: identical bytes are preserved, absent assets are added, and\nconflicting bytes are rejected. Each publication authorization is retained as\n`buildchain.binary.capability-<sha256>.json`, so a fresh recovery capability does\nnot overwrite an earlier grant. Existing assets are never clobbered. Recovery uses\nthe same exact successful Binary Distribution evidence run through\n`self-release-binary-assets.yml`; it does not rebuild already admitted archives or\ncreate another npm version. Read back all three platform archives, checksums,\nboth Passports and the settlement packet before declaring distribution complete.\n\nThe native publication receipt authorizes no stable promotion and makes no claim\nthat a pending next-development PR has merged. Inspect the exact PR head, protected\nbase and merge result independently. A retry of the publication phase must first\nread retained provider facts and resume only missing operations.\n\n## Automatic next-development review\n\nAfter stable completion, the producer generates the next patch at `alpha.0`\nfrom an isolated Git checkout of the exact current protected Dev commit. The\ncheckout explicitly fetches the exact Dev commit into its own object database;\nshallow local clones alone may omit commits fetched only into `FETCH_HEAD`.\nIt retains its own index so version verification can inspect the actual\ngenerated delta, and uses the admitted runtime dependency bridge. A source\narchive without Git metadata cannot perform that verification. The publication\nreceipt remains complete if development preparation fails; recover the original\ntransaction with corrected, reviewed tooling before publishing the next version.\n\n`self-release-next-development.yml` observes a successful exact `Verify` PR run\nfor a same-repository `chore/next-development/*` branch. It executes only the\nprotected default branch runtime. The PR must have one parent equal to the\ncurrent protected Dev head. The protected generator reconstructs every tracked\nbyte, permits only the declared immediate alpha version increment, and verifies\nthe completed alpha settlement against the exact tag and original Passport.\nThe published source tree must equal the protected development base tree.\n\nThe verification step receives no approval credential and never executes PR\ncode. A separate step uses `BUILDCHAIN_APPROVAL_TOKEN`, verifies that its identity\nis the independent `kungfu-origin` CODEOWNER, rereads the exact PR/run/base, and\napproves only that commit. Existing requests for changes stop automation.\nThe exact approval is read back before queue admission with the separate\n`BUILDCHAIN_PROMOTION_TOKEN`. Required checks, CODEOWNER protection and native\nmerge-group verification remain enforced. Missing credentials or evidence,\nforks, source changes and base/head drift fail closed.\n\nThe producer waits for pending independent review and required checks with a\nbounded retry budget. Publication evidence is already durable during this wait,\nso binaries can proceed independently. The reviewer also enqueues the verified\nhead idempotently, allowing a producer interruption to leave a recoverable PR.\nAn interrupted producer run remains failed; a successful later release is needed\nto establish an uninterrupted end-to-end publication."
|
|
5094
5094
|
},
|
|
5095
5095
|
{
|
|
5096
5096
|
"id": "manual:v4-publication-rehearsal",
|
|
@@ -10948,8 +10948,8 @@
|
|
|
10948
10948
|
"workflowRegistryPath": "dist/site/workflow-registry.json",
|
|
10949
10949
|
"pageRegistryPath": "dist/site/page-registry.json",
|
|
10950
10950
|
"cliRegistryDigest": "fbc23073bbae240489a2f826b2c26daadc58e704050c5f8df366509f5c5a1c3e",
|
|
10951
|
-
"workflowRegistryDigest": "
|
|
10952
|
-
"pageRegistryDigest": "
|
|
10951
|
+
"workflowRegistryDigest": "46a2b2c9c8be40bd3221a8f1a29522ec65a67cd61777806c3b02e55251b03267",
|
|
10952
|
+
"pageRegistryDigest": "876cf4df5144c253cc3f6b06593d2a0d0b033c231b9552743064609148183469"
|
|
10953
10953
|
},
|
|
10954
10954
|
"comparison": {
|
|
10955
10955
|
"missingCliRegistry": [],
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"contract": "kungfu-buildchain-publication-release-registry",
|
|
4
|
-
"generatedAt": "2026-09-
|
|
5
|
-
"publishedAt": "2026-09-
|
|
4
|
+
"generatedAt": "2026-09-07T17:31:44.000Z",
|
|
5
|
+
"publishedAt": "2026-09-07T17:31:44.000Z",
|
|
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": "29a053e8547b7b1d12c3244f18f69b7ee1eb8a33",
|
|
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": "4.0.
|
|
35
|
+
"version": "4.0.4",
|
|
36
36
|
"versionSource": "package.json#version"
|
|
37
37
|
},
|
|
38
38
|
"sourceKind": "package-site-bundle",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"contract": "kungfu-buildchain-site-manifest",
|
|
4
|
-
"generatedAt": "2026-09-
|
|
5
|
-
"publishedAt": "2026-09-
|
|
4
|
+
"generatedAt": "2026-09-07T17:31:44.000Z",
|
|
5
|
+
"publishedAt": "2026-09-07T17:31:44.000Z",
|
|
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": "29a053e8547b7b1d12c3244f18f69b7ee1eb8a33",
|
|
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": "4.0.
|
|
40
|
+
"version": "4.0.4",
|
|
41
41
|
"versionSource": "package.json#version"
|
|
42
42
|
},
|
|
43
43
|
"entrypoint": "buildchain-site.json",
|
|
@@ -2746,7 +2746,7 @@
|
|
|
2746
2746
|
"status": "preview",
|
|
2747
2747
|
"owner": "buildchain-workflows",
|
|
2748
2748
|
"maturity": "preview",
|
|
2749
|
-
"introducedVersion": "4.0.
|
|
2749
|
+
"introducedVersion": "4.0.4",
|
|
2750
2750
|
"compatibilityPromise": "preserved-through-the-v3-major-line",
|
|
2751
2751
|
"deprecationReplacement": "",
|
|
2752
2752
|
"sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
|
|
@@ -3943,7 +3943,7 @@
|
|
|
3943
3943
|
"status": "preview",
|
|
3944
3944
|
"owner": "buildchain-workflows",
|
|
3945
3945
|
"maturity": "preview",
|
|
3946
|
-
"introducedVersion": "4.0.
|
|
3946
|
+
"introducedVersion": "4.0.4",
|
|
3947
3947
|
"compatibilityPromise": "preserved-through-the-v3-major-line",
|
|
3948
3948
|
"deprecationReplacement": "",
|
|
3949
3949
|
"sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
|
|
@@ -6004,7 +6004,7 @@
|
|
|
6004
6004
|
"status": "preview",
|
|
6005
6005
|
"owner": "buildchain-workflows",
|
|
6006
6006
|
"maturity": "preview",
|
|
6007
|
-
"introducedVersion": "4.0.
|
|
6007
|
+
"introducedVersion": "4.0.4",
|
|
6008
6008
|
"compatibilityPromise": "preserved-through-the-v3-major-line",
|
|
6009
6009
|
"deprecationReplacement": "",
|
|
6010
6010
|
"sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
|
|
@@ -6035,7 +6035,7 @@
|
|
|
6035
6035
|
"status": "preview",
|
|
6036
6036
|
"owner": "buildchain-workflows",
|
|
6037
6037
|
"maturity": "preview",
|
|
6038
|
-
"introducedVersion": "4.0.
|
|
6038
|
+
"introducedVersion": "4.0.4",
|
|
6039
6039
|
"compatibilityPromise": "preserved-through-the-v3-major-line",
|
|
6040
6040
|
"deprecationReplacement": "",
|
|
6041
6041
|
"sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
|
|
@@ -6066,7 +6066,7 @@
|
|
|
6066
6066
|
"status": "preview",
|
|
6067
6067
|
"owner": "buildchain-workflows",
|
|
6068
6068
|
"maturity": "preview",
|
|
6069
|
-
"introducedVersion": "4.0.
|
|
6069
|
+
"introducedVersion": "4.0.4",
|
|
6070
6070
|
"compatibilityPromise": "preserved-through-the-v3-major-line",
|
|
6071
6071
|
"deprecationReplacement": "",
|
|
6072
6072
|
"sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
|
|
@@ -8,11 +8,11 @@ confidence: high
|
|
|
8
8
|
sensitivity: public
|
|
9
9
|
evidence_grade: A
|
|
10
10
|
review_state: unreviewed
|
|
11
|
-
last_reviewed: 2026-09-
|
|
11
|
+
last_reviewed: 2026-09-08
|
|
12
12
|
ai_provenance:
|
|
13
13
|
model_family: GPT-6
|
|
14
14
|
product: Codex
|
|
15
|
-
generated_at: 2026-09-
|
|
15
|
+
generated_at: 2026-09-08
|
|
16
16
|
invisible_context: Provider credentials and private provider state were not read.
|
|
17
17
|
---
|
|
18
18
|
|
|
@@ -84,6 +84,13 @@ APPLY retains that exact chain before waiting for next-development in the existi
|
|
|
84
84
|
`delivery-summary.json`, which reports publication and next-development separately.
|
|
85
85
|
A green workflow label cannot substitute for this receipt verification.
|
|
86
86
|
|
|
87
|
+
Recovery verifies both its current execution chain and any already published
|
|
88
|
+
settlement against the exact tag, source and original Passport. It preserves
|
|
89
|
+
the existing settlement bytes and uses that original receipt for development
|
|
90
|
+
advancement. A corrected runtime may produce different recovery observations;
|
|
91
|
+
they do not authorize replacing the completed publication packet. Ambiguous,
|
|
92
|
+
tampered or mismatched retained evidence still blocks recovery.
|
|
93
|
+
|
|
87
94
|
Binary Distribution reads this settlement and the original publication Passport.
|
|
88
95
|
Tag creation can precede settlement, so it waits at most 40 observations, 15 seconds
|
|
89
96
|
apart, for missing evidence. A mismatched source, tag, Passport or receipt fails
|
|
@@ -107,6 +114,16 @@ read retained provider facts and resume only missing operations.
|
|
|
107
114
|
|
|
108
115
|
## Automatic next-development review
|
|
109
116
|
|
|
117
|
+
After stable completion, the producer generates the next patch at `alpha.0`
|
|
118
|
+
from an isolated Git checkout of the exact current protected Dev commit. The
|
|
119
|
+
checkout explicitly fetches the exact Dev commit into its own object database;
|
|
120
|
+
shallow local clones alone may omit commits fetched only into `FETCH_HEAD`.
|
|
121
|
+
It retains its own index so version verification can inspect the actual
|
|
122
|
+
generated delta, and uses the admitted runtime dependency bridge. A source
|
|
123
|
+
archive without Git metadata cannot perform that verification. The publication
|
|
124
|
+
receipt remains complete if development preparation fails; recover the original
|
|
125
|
+
transaction with corrected, reviewed tooling before publishing the next version.
|
|
126
|
+
|
|
110
127
|
`self-release-next-development.yml` observes a successful exact `Verify` PR run
|
|
111
128
|
for a same-repository `chore/next-development/*` branch. It executes only the
|
|
112
129
|
protected default branch runtime. The PR must have one parent equal to the
|
package/package.json
CHANGED
|
@@ -138,44 +138,50 @@ export async function settlePublication({
|
|
|
138
138
|
);
|
|
139
139
|
const tag = documents.invocation.target.tag;
|
|
140
140
|
const release = client.release(tag);
|
|
141
|
-
const sourceSha = client.json(
|
|
142
|
-
|
|
143
|
-
).sha;
|
|
144
|
-
const matches = release.assets.filter(
|
|
145
|
-
({ name }) => name === "buildchain.release.json",
|
|
146
|
-
);
|
|
141
|
+
const sourceSha = client.json(`repos/${repository}/commits/${encodeURIComponent(tag)}`).sha;
|
|
142
|
+
const matches = release.assets.filter(({ name }) => name === "buildchain.release.json");
|
|
147
143
|
if (matches.length !== 1)
|
|
148
144
|
throw new Error(
|
|
149
145
|
"exact public publication passport is missing or ambiguous",
|
|
150
146
|
);
|
|
151
147
|
const publicPassport = JSON.parse(client.assetBytes(matches[0]));
|
|
152
|
-
const
|
|
148
|
+
const expected = {
|
|
153
149
|
repository,
|
|
154
150
|
tag,
|
|
155
151
|
sourceSha,
|
|
156
152
|
publicPassport,
|
|
157
|
-
|
|
153
|
+
candidateSha,
|
|
154
|
+
};
|
|
155
|
+
let status = verifyPublicationSettlement(documents, expected);
|
|
158
156
|
// Publication completion is immutable; next-development and distribution progress stay separate.
|
|
159
|
-
|
|
157
|
+
let settlement = {
|
|
160
158
|
schemaVersion: 1,
|
|
161
159
|
contract: "buildchain-v4-publication-settlement/v1",
|
|
162
160
|
id: "v4-publication",
|
|
163
161
|
release: { sourceSha, tag, channel: documents.invocation.target.channel },
|
|
164
162
|
documents,
|
|
165
163
|
};
|
|
164
|
+
const retained = release.assets.filter(({ name }) => name === SETTLEMENT_ASSET);
|
|
165
|
+
if (retained.length > 1) throw new Error("ambiguous immutable publication settlement");
|
|
166
|
+
if (retained.length === 1) {
|
|
167
|
+
const original = JSON.parse(client.assetBytes(retained[0]));
|
|
168
|
+
if (original.contract !== settlement.contract ||
|
|
169
|
+
original.release?.sourceSha !== sourceSha || original.release?.tag !== tag ||
|
|
170
|
+
original.release?.channel !== documents.invocation.target.channel)
|
|
171
|
+
throw new Error("retained publication settlement identity mismatch");
|
|
172
|
+
status = verifyPublicationSettlement(original.documents, expected);
|
|
173
|
+
settlement = original;
|
|
174
|
+
}
|
|
166
175
|
const file = path.join(base, "release-tail", SETTLEMENT_ASSET);
|
|
167
176
|
client.write(file, settlement);
|
|
168
|
-
await client.publish(release, [file]);
|
|
177
|
+
if (retained.length === 0) await client.publish(release, [file]);
|
|
169
178
|
const summary = {
|
|
170
179
|
...status,
|
|
171
180
|
nextDevelopment: applyOutcome === "success" ? "advanced" : "incomplete",
|
|
172
181
|
binaryDistribution: "pending-provider-readback",
|
|
173
182
|
};
|
|
174
|
-
client.write(
|
|
175
|
-
|
|
176
|
-
summary,
|
|
177
|
-
);
|
|
178
|
-
return { summary, receipt: documents.receipt };
|
|
183
|
+
client.write(path.join(base, "release-tail", "delivery-summary.json"), summary);
|
|
184
|
+
return { summary, receipt: settlement.documents.receipt };
|
|
179
185
|
}
|
|
180
186
|
|
|
181
187
|
async function main() {
|