@kungfu-tech/buildchain 3.0.4 → 3.0.5-alpha.1

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.
@@ -1001,6 +1001,7 @@
1001
1001
  "release-passport-output-dir",
1002
1002
  "release-passport-platform-manifest-paths",
1003
1003
  "release-passport-product-name",
1004
+ "release-propagation-config-path",
1004
1005
  "required-artifact-count",
1005
1006
  "required-status-check",
1006
1007
  "runner-preset",
@@ -1009,7 +1010,7 @@
1009
1010
  "target-sha",
1010
1011
  "trusted-publishing"
1011
1012
  ],
1012
- "inputCount": 94,
1013
+ "inputCount": 95,
1013
1014
  "secrets": [
1014
1015
  "BUILDCHAIN_ISSUE_APP_ID",
1015
1016
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
@@ -1042,9 +1043,10 @@
1042
1043
  "publication-commit-evidence-path",
1043
1044
  "publication-commit-payload-root",
1044
1045
  "publication-commit-url",
1045
- "release-candidate-artifact"
1046
+ "release-candidate-artifact",
1047
+ "release-propagation-work-artifact"
1046
1048
  ],
1047
- "outputCount": 19
1049
+ "outputCount": 20
1048
1050
  },
1049
1051
  {
1050
1052
  "id": ".release-docker",
@@ -2249,6 +2251,7 @@
2249
2251
  "release-passport-output-dir",
2250
2252
  "release-passport-platform-manifest-paths",
2251
2253
  "release-passport-product-name",
2254
+ "release-propagation-config-path",
2252
2255
  "required-artifact-count",
2253
2256
  "required-status-check",
2254
2257
  "runner-preset",
@@ -2257,7 +2260,7 @@
2257
2260
  "target-sha",
2258
2261
  "trusted-publishing"
2259
2262
  ],
2260
- "inputCount": 86,
2263
+ "inputCount": 87,
2261
2264
  "secrets": [
2262
2265
  "BUILDCHAIN_ISSUE_APP_ID",
2263
2266
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
@@ -2302,9 +2305,10 @@
2302
2305
  "publication-commit-evidence-path",
2303
2306
  "publication-commit-payload-root",
2304
2307
  "publication-commit-url",
2305
- "release-candidate-artifact"
2308
+ "release-candidate-artifact",
2309
+ "release-propagation-work-artifact"
2306
2310
  ],
2307
- "outputCount": 31
2311
+ "outputCount": 32
2308
2312
  },
2309
2313
  {
2310
2314
  "id": "release-governance-reconcile",
@@ -7024,8 +7028,8 @@
7024
7028
  "workflowRegistryPath": "dist/site/workflow-registry.json",
7025
7029
  "pageRegistryPath": "dist/site/page-registry.json",
7026
7030
  "cliRegistryDigest": "0db010925d1c60209c3dac8bc2797537f307ab21bc68084263e79004c5c16ff7",
7027
- "workflowRegistryDigest": "745714c3f1dcb82ad075038b6fbe3989fd2d12780dc36d04f55c12fb0836bd99",
7028
- "pageRegistryDigest": "99f79e716c21d622880f50dae6dc81e5aad48cb9568ace1b711009c5f0f22e0f"
7031
+ "workflowRegistryDigest": "b5b860965abf645e1618d7840db544d638fd8ea3d0ee04ed00ccd4c8f8ccaabb",
7032
+ "pageRegistryDigest": "13e408bcfe519ed58f0723980506c522bf124921883c880ac89258db28b06ce5"
7029
7033
  },
7030
7034
  "comparison": {
7031
7035
  "missingCliRegistry": [],
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "contract": "kungfu-buildchain-publication-release-registry",
4
- "generatedAt": "2026-08-01T20:14:21.853Z",
5
- "publishedAt": "2026-08-01T20:14:21.853Z",
4
+ "generatedAt": "2026-08-02T02:26:15.287Z",
5
+ "publishedAt": "2026-08-02T02:26:15.287Z",
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": "60df93f1e632388806bd1249daa392ec7c18cdbd",
22
+ "sourceRevision": "8b96fb02e587124bad0f9055f9de6eb7c6b8081c",
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": "3.0.4",
35
+ "version": "3.0.5-alpha.1",
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-08-01T20:14:21.853Z",
5
- "publishedAt": "2026-08-01T20:14:21.853Z",
4
+ "generatedAt": "2026-08-02T02:26:15.287Z",
5
+ "publishedAt": "2026-08-02T02:26:15.287Z",
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": "60df93f1e632388806bd1249daa392ec7c18cdbd",
22
+ "sourceRevision": "8b96fb02e587124bad0f9055f9de6eb7c6b8081c",
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": "3.0.4",
40
+ "version": "3.0.5-alpha.1",
41
41
  "versionSource": "package.json#version"
42
42
  },
43
43
  "entrypoint": "buildchain-site.json",
@@ -69,7 +69,7 @@
69
69
  "path": "docs/auditable-demo.md",
70
70
  "plane": "verify",
71
71
  "exists": true,
72
- "digest": "sha256:4b3e529060ba54a439a86159a4dc0fc7fb43c8456a90e4b32579c86b20bc6bab"
72
+ "digest": "sha256:4d32c82b652decfbb26b441c203fe34e70daa86022bb4baed9da02a5d6cf5831"
73
73
  },
74
74
  {
75
75
  "id": "install",
@@ -133,7 +133,7 @@
133
133
  "path": "docs/release-propagation.md",
134
134
  "plane": "use",
135
135
  "exists": true,
136
- "digest": "sha256:d9c9b4ba9dff6ed336b1ff31e5a02fcdf68dd013278caa86510e5fd0b50c4267"
136
+ "digest": "sha256:3b7a2a0437f8a3a4e5cff7e05a2a8c427be597d85e93d49d5e35ba2a2b089afc"
137
137
  },
138
138
  {
139
139
  "id": "readme-badges",
@@ -237,7 +237,7 @@
237
237
  "path": "docs/node-api-reference.md",
238
238
  "plane": "use",
239
239
  "exists": true,
240
- "digest": "sha256:ce9b018e6b1cfd98d8faa0ccadd6570585f2812b4828d610810f984f9810df5d"
240
+ "digest": "sha256:38f051f579fb93dc7d8b4f2c70acd622c020e867394344b5e932568cd8d2ad83"
241
241
  },
242
242
  {
243
243
  "id": "build-facts",
@@ -285,7 +285,7 @@
285
285
  "path": "docs/publish-transaction.md",
286
286
  "plane": "verify",
287
287
  "exists": true,
288
- "digest": "sha256:9b830727e5b0d2192c937f19106c11ea5064dde77e30d290825f343df47f291b"
288
+ "digest": "sha256:3a9ef099d5d93d9b558c7b6a0aa4403dfcce1479ce5d6fc36ecb3e34cdd5bb6d"
289
289
  },
290
290
  {
291
291
  "id": "release-governance",
@@ -293,7 +293,7 @@
293
293
  "path": "docs/release-governance.md",
294
294
  "plane": "why",
295
295
  "exists": true,
296
- "digest": "sha256:60ec90d3294818d3c53e403312801a8ab47be7c0f34810002676fbfcdbceaa60"
296
+ "digest": "sha256:96d78f800cd7d43d3a47a11863d4813711e360418ba33a4284688389c7e4b70c"
297
297
  },
298
298
  {
299
299
  "id": "release-flow",
@@ -301,7 +301,7 @@
301
301
  "path": "docs/release-flow.md",
302
302
  "plane": "verify",
303
303
  "exists": true,
304
- "digest": "sha256:bac959565c36cf39c3cd30dfce00dbbb59b73ed21b852a8f24a6cae281cb5f05"
304
+ "digest": "sha256:dc54b8a264489341984ca6157b07d1956e934366f937b7412a21df7f025d2d8d"
305
305
  },
306
306
  {
307
307
  "id": "runtime-train-validation",
@@ -490,6 +490,7 @@
490
490
  "release-passport-output-dir",
491
491
  "release-passport-platform-manifest-paths",
492
492
  "release-passport-product-name",
493
+ "release-propagation-config-path",
493
494
  "required-artifact-count",
494
495
  "required-status-check",
495
496
  "runner-preset",
@@ -498,7 +499,7 @@
498
499
  "target-sha",
499
500
  "trusted-publishing"
500
501
  ],
501
- "inputCount": 94,
502
+ "inputCount": 95,
502
503
  "secrets": [
503
504
  "BUILDCHAIN_ISSUE_APP_ID",
504
505
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
@@ -531,9 +532,10 @@
531
532
  "publication-commit-evidence-path",
532
533
  "publication-commit-payload-root",
533
534
  "publication-commit-url",
534
- "release-candidate-artifact"
535
+ "release-candidate-artifact",
536
+ "release-propagation-work-artifact"
535
537
  ],
536
- "outputCount": 19,
538
+ "outputCount": 20,
537
539
  "surface": "reusable-workflow",
538
540
  "capabilityGroup": "api-cli-reference",
539
541
  "status": "active",
@@ -2148,6 +2150,7 @@
2148
2150
  "release-passport-output-dir",
2149
2151
  "release-passport-platform-manifest-paths",
2150
2152
  "release-passport-product-name",
2153
+ "release-propagation-config-path",
2151
2154
  "required-artifact-count",
2152
2155
  "required-status-check",
2153
2156
  "runner-preset",
@@ -2156,7 +2159,7 @@
2156
2159
  "target-sha",
2157
2160
  "trusted-publishing"
2158
2161
  ],
2159
- "inputCount": 86,
2162
+ "inputCount": 87,
2160
2163
  "secrets": [
2161
2164
  "BUILDCHAIN_ISSUE_APP_ID",
2162
2165
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
@@ -2201,9 +2204,10 @@
2201
2204
  "publication-commit-evidence-path",
2202
2205
  "publication-commit-payload-root",
2203
2206
  "publication-commit-url",
2204
- "release-candidate-artifact"
2207
+ "release-candidate-artifact",
2208
+ "release-propagation-work-artifact"
2205
2209
  ],
2206
- "outputCount": 31,
2210
+ "outputCount": 32,
2207
2211
  "surface": "release-governance",
2208
2212
  "capabilityGroup": "reusable-build",
2209
2213
  "status": "active",
@@ -47,6 +47,13 @@ fixed 80-200 by 24-80 terminal cells, 10,000 events, and 4 MiB of canonical
47
47
  base64 bytes. It must contain a passed completion sentinel and an explicitly
48
48
  empty authority-grant list. Existing three-file adapters remain valid.
49
49
 
50
+ The completion sentinel names a consumer-owned versioned schema, the exact
51
+ `qualified` status, a content root, and an event count. Buildchain validates
52
+ that envelope generically; it does not reinterpret a command-specific result
53
+ as Agent Work Lab evidence or grant authority from the schema name. The
54
+ consumer projection and its retained source artifact remain responsible for
55
+ the exact claim boundary.
56
+
50
57
  Terminal bytes are volatile observations, not Work, Warrant, capability, or
51
58
  publication authority. First-party or System identity, KFD compliance, Product
52
59
  System metadata, package metadata, scan output, registry history, and
@@ -8,7 +8,12 @@ confidence: high
8
8
  sensitivity: public
9
9
  evidence_grade: A
10
10
  review_state: unreviewed
11
- last_reviewed: 2026-07-30
11
+ last_reviewed: 2026-08-01
12
+ ai_provenance:
13
+ model_family: GPT-5
14
+ product: Codex
15
+ generated_at: 2026-08-01
16
+ invisible_information: No hidden model checkpoint, parameters, or private training data were available.
12
17
  ---
13
18
 
14
19
  # AWS US elastic runner burst plane
@@ -226,6 +231,32 @@ host, including at least one full run, plus proof that:
226
231
  - AWS has no active campaign instance or allocated campaign host;
227
232
  - actual incremental spend remained below USD 25.
228
233
 
234
+ ### Phase 3 lifecycle controller
235
+
236
+ `scripts/aws-macos-jit-controller.mjs` is the operator boundary for the paid
237
+ campaign. It has three explicit mutation modes:
238
+
239
+ - `launch-campaign` binds the exact repository source, AMI, availability zone,
240
+ tagged Dedicated Host, and reusable instance. It rejects pre-existing Mac
241
+ capacity and requires successful `AllocateHosts` and `RunInstances` DryRuns
242
+ before either real call.
243
+ - `run-job` binds one queued exact-source GitHub job to the existing campaign
244
+ host and instance. It writes the repository JIT configuration through a
245
+ mode-0600 temporary file into a distinct SSM SecureString, sends only the
246
+ credential-free bootstrap through SSM, and removes the parameter plus runner
247
+ registration if command delivery fails.
248
+ - `close-campaign` refuses execution before the provider's 24-hour minimum,
249
+ verifies the encrypted delete-on-termination root volume, removes scoped JIT
250
+ residue, terminates the exact instance, and requires a `ReleaseHosts` DryRun
251
+ before release. If Apple host scrubbing is still in progress, it reports
252
+ `release-pending`; the ten-minute card-scoped reaper remains the bounded
253
+ retry path.
254
+
255
+ Every execute mode requires the exact source SHA and campaign id to be repeated
256
+ through `--confirm-source-sha` and `--confirm-campaign-id`. `run-job` also
257
+ requires `--confirm-run-id`. Omitting `--execute` emits a deterministic plan
258
+ without changing AWS or GitHub state.
259
+
229
260
  ## Provider lifecycle
230
261
 
231
262
  The three infrastructure templates live under
@@ -24,7 +24,7 @@ Signatures and source locations are mechanical. JavaScript return types remain c
24
24
 
25
25
  ## `@kungfu-tech/buildchain`
26
26
 
27
- Target: `./packages/core/index.js`. Public symbols: 538.
27
+ Target: `./packages/core/index.js`. Public symbols: 541.
28
28
 
29
29
  | Symbol | Kind and signature | Parameters | Return | Errors | Side effects | Example | Source |
30
30
  | --- | --- | --- | --- | --- | --- | --- | --- |
@@ -199,6 +199,7 @@ Target: `./packages/core/index.js`. Public symbols: 538.
199
199
  | `createKfdBadgeSpecsFromStandards` | function: function createKfdBadgeSpecsFromStandards(standardsMetadata) | standardsMetadata | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | none-detected-by-static-source-scan | `import { createKfdBadgeSpecsFromStandards } from "@kungfu-tech/buildchain";` | `packages/core/readme-badges.js:126` |
200
200
  | `createKfdSupportProjection` | function: function createKfdSupportProjection({ matrix, matrixRoot = "", gateResults = [], authorityPath = ".buildchain/kfd/support-matrix.json", expectedSourceSha = "", checkedAt = new Date().toISOString(), } = {}) | { matrix, matrixRoot = "", gateResults = [], authorityPath = ".buildchain/kfd/support-matrix.json", expectedSourceSha = "", checkedAt = new Date().toISOString(), } = {} | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | none-detected-by-static-source-scan | `import { createKfdSupportProjection } from "@kungfu-tech/buildchain";` | `packages/core/kfd-product-gates.js:716` |
201
201
  | `createKungfuBuildInfoProjection` | function: function createKungfuBuildInfoProjection({ moduleFact, cwd = process.cwd(), now = nowIso() } = {}) | { moduleFact, cwd = process.cwd(), now = nowIso() } = {} | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | none-detected-by-static-source-scan | `import { createKungfuBuildInfoProjection } from "@kungfu-tech/buildchain";` | `packages/core/build-facts.js:520` |
202
+ | `createPackageReleasePropagationCapture` | function: function createPackageReleasePropagationCapture({ config: configInput, upstreamRelease: upstreamReleaseInput, expectedBaseShas = {}, } = {}) | { config: configInput, upstreamRelease: upstreamReleaseInput, expectedBaseShas = {}, } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { createPackageReleasePropagationCapture } from "@kungfu-tech/buildchain";` | `packages/core/release-propagation-capture.js:101` |
202
203
  | `createPaperAlphaPlan` | function: function createPaperAlphaPlan({ cwd = process.cwd(), sourceRef = "", targetRef = "", } = {}) | { cwd = process.cwd(), sourceRef = "", targetRef = "", } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { createPaperAlphaPlan } from "@kungfu-tech/buildchain";` | `packages/core/paper.js:2655` |
203
204
  | `createPaperBuildPlan` | function: function createPaperBuildPlan({ cwd = process.cwd(), sourceSha = "", pullToolchain = true, } = {}) | { cwd = process.cwd(), sourceSha = "", pullToolchain = true, } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { createPaperBuildPlan } from "@kungfu-tech/buildchain";` | `packages/core/paper.js:2592` |
204
205
  | `createPaperResumePlan` | function: function createPaperResumePlan({ cwd = process.cwd(), buildchainRef = "", } = {}) | { cwd = process.cwd(), buildchainRef = "", } = {} | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | local-filesystem-write | `import { createPaperResumePlan } from "@kungfu-tech/buildchain";` | `packages/core/paper.js:2713` |
@@ -362,8 +363,10 @@ Target: `./packages/core/index.js`. Public symbols: 538.
362
363
  | `normalizeKfd3DistributionDeclaration` | function: function normalizeKfd3DistributionDeclaration(distribution, { surfaceId = "surface" } = {}) | distribution, { surfaceId = "surface" } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { normalizeKfd3DistributionDeclaration } from "@kungfu-tech/buildchain";` | `packages/core/kfd3-surface-register.js:73` |
363
364
  | `normalizeKfdStandardId` | function: function normalizeKfdStandardId(value) | value | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { normalizeKfdStandardId } from "@kungfu-tech/buildchain";` | `packages/core/kfd.js:455` |
364
365
  | `normalizeLifecycleStage` | function: function normalizeLifecycleStage(stage, label = "lifecycle stage", lifecycle = {}) | stage, label = "lifecycle stage", lifecycle = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { normalizeLifecycleStage } from "@kungfu-tech/buildchain";` | `packages/core/buildchain-config.js:1333` |
366
+ | `normalizePackageReleasePropagationConfig` | function: function normalizePackageReleasePropagationConfig(input) | input | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { normalizePackageReleasePropagationConfig } from "@kungfu-tech/buildchain";` | `packages/core/release-propagation-capture.js:63` |
365
367
  | `normalizeReleasePropagationGraph` | function: function normalizeReleasePropagationGraph(input) | input | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { normalizeReleasePropagationGraph } from "@kungfu-tech/buildchain";` | `packages/core/release-propagation.js:163` |
366
368
  | `normalizeStableCandidateLedger` | function: function normalizeStableCandidateLedger(input, expected = {}) | input, expected = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { normalizeStableCandidateLedger } from "@kungfu-tech/buildchain";` | `packages/core/stable-candidate-ledger.js:76` |
369
+ | `PACKAGE_RELEASE_PROPAGATION_CONFIG_CONTRACT` | constant: const PACKAGE_RELEASE_PROPAGATION_CONFIG_CONTRACT | none | value | Import does not declare a throw contract. | none-on-import | `import { PACKAGE_RELEASE_PROPAGATION_CONFIG_CONTRACT } from "@kungfu-tech/buildchain";` | `packages/core/release-propagation-capture.js:17` |
367
370
  | `PAPER_ALPHA_PLAN_CONTRACT` | constant: const PAPER_ALPHA_PLAN_CONTRACT | none | value | Import does not declare a throw contract. | none-on-import | `import { PAPER_ALPHA_PLAN_CONTRACT } from "@kungfu-tech/buildchain";` | `packages/core/paper.js:90` |
368
371
  | `PAPER_BUILD_PLAN_CONTRACT` | constant: const PAPER_BUILD_PLAN_CONTRACT | none | value | Import does not declare a throw contract. | none-on-import | `import { PAPER_BUILD_PLAN_CONTRACT } from "@kungfu-tech/buildchain";` | `packages/core/paper.js:89` |
369
372
  | `PAPER_FLEET_AUDIT_CONTRACT` | constant: const PAPER_FLEET_AUDIT_CONTRACT | none | value | Import does not declare a throw contract. | none-on-import | `import { PAPER_FLEET_AUDIT_CONTRACT } from "@kungfu-tech/buildchain";` | `packages/core/paper-fleet.js:19` |
@@ -615,7 +618,7 @@ Target: `./packages/core/build-facts.js`. Public symbols: 15.
615
618
 
616
619
  ## `@kungfu-tech/buildchain/core`
617
620
 
618
- Target: `./packages/core/index.js`. Public symbols: 538.
621
+ Target: `./packages/core/index.js`. Public symbols: 541.
619
622
 
620
623
  | Symbol | Kind and signature | Parameters | Return | Errors | Side effects | Example | Source |
621
624
  | --- | --- | --- | --- | --- | --- | --- | --- |
@@ -790,6 +793,7 @@ Target: `./packages/core/index.js`. Public symbols: 538.
790
793
  | `createKfdBadgeSpecsFromStandards` | function: function createKfdBadgeSpecsFromStandards(standardsMetadata) | standardsMetadata | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | none-detected-by-static-source-scan | `import { createKfdBadgeSpecsFromStandards } from "@kungfu-tech/buildchain/core";` | `packages/core/readme-badges.js:126` |
791
794
  | `createKfdSupportProjection` | function: function createKfdSupportProjection({ matrix, matrixRoot = "", gateResults = [], authorityPath = ".buildchain/kfd/support-matrix.json", expectedSourceSha = "", checkedAt = new Date().toISOString(), } = {}) | { matrix, matrixRoot = "", gateResults = [], authorityPath = ".buildchain/kfd/support-matrix.json", expectedSourceSha = "", checkedAt = new Date().toISOString(), } = {} | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | none-detected-by-static-source-scan | `import { createKfdSupportProjection } from "@kungfu-tech/buildchain/core";` | `packages/core/kfd-product-gates.js:716` |
792
795
  | `createKungfuBuildInfoProjection` | function: function createKungfuBuildInfoProjection({ moduleFact, cwd = process.cwd(), now = nowIso() } = {}) | { moduleFact, cwd = process.cwd(), now = nowIso() } = {} | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | none-detected-by-static-source-scan | `import { createKungfuBuildInfoProjection } from "@kungfu-tech/buildchain/core";` | `packages/core/build-facts.js:520` |
796
+ | `createPackageReleasePropagationCapture` | function: function createPackageReleasePropagationCapture({ config: configInput, upstreamRelease: upstreamReleaseInput, expectedBaseShas = {}, } = {}) | { config: configInput, upstreamRelease: upstreamReleaseInput, expectedBaseShas = {}, } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { createPackageReleasePropagationCapture } from "@kungfu-tech/buildchain/core";` | `packages/core/release-propagation-capture.js:101` |
793
797
  | `createPaperAlphaPlan` | function: function createPaperAlphaPlan({ cwd = process.cwd(), sourceRef = "", targetRef = "", } = {}) | { cwd = process.cwd(), sourceRef = "", targetRef = "", } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { createPaperAlphaPlan } from "@kungfu-tech/buildchain/core";` | `packages/core/paper.js:2655` |
794
798
  | `createPaperBuildPlan` | function: function createPaperBuildPlan({ cwd = process.cwd(), sourceSha = "", pullToolchain = true, } = {}) | { cwd = process.cwd(), sourceSha = "", pullToolchain = true, } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { createPaperBuildPlan } from "@kungfu-tech/buildchain/core";` | `packages/core/paper.js:2592` |
795
799
  | `createPaperResumePlan` | function: function createPaperResumePlan({ cwd = process.cwd(), buildchainRef = "", } = {}) | { cwd = process.cwd(), buildchainRef = "", } = {} | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | local-filesystem-write | `import { createPaperResumePlan } from "@kungfu-tech/buildchain/core";` | `packages/core/paper.js:2713` |
@@ -953,8 +957,10 @@ Target: `./packages/core/index.js`. Public symbols: 538.
953
957
  | `normalizeKfd3DistributionDeclaration` | function: function normalizeKfd3DistributionDeclaration(distribution, { surfaceId = "surface" } = {}) | distribution, { surfaceId = "surface" } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { normalizeKfd3DistributionDeclaration } from "@kungfu-tech/buildchain/core";` | `packages/core/kfd3-surface-register.js:73` |
954
958
  | `normalizeKfdStandardId` | function: function normalizeKfdStandardId(value) | value | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { normalizeKfdStandardId } from "@kungfu-tech/buildchain/core";` | `packages/core/kfd.js:455` |
955
959
  | `normalizeLifecycleStage` | function: function normalizeLifecycleStage(stage, label = "lifecycle stage", lifecycle = {}) | stage, label = "lifecycle stage", lifecycle = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { normalizeLifecycleStage } from "@kungfu-tech/buildchain/core";` | `packages/core/buildchain-config.js:1333` |
960
+ | `normalizePackageReleasePropagationConfig` | function: function normalizePackageReleasePropagationConfig(input) | input | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { normalizePackageReleasePropagationConfig } from "@kungfu-tech/buildchain/core";` | `packages/core/release-propagation-capture.js:63` |
956
961
  | `normalizeReleasePropagationGraph` | function: function normalizeReleasePropagationGraph(input) | input | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { normalizeReleasePropagationGraph } from "@kungfu-tech/buildchain/core";` | `packages/core/release-propagation.js:163` |
957
962
  | `normalizeStableCandidateLedger` | function: function normalizeStableCandidateLedger(input, expected = {}) | input, expected = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { normalizeStableCandidateLedger } from "@kungfu-tech/buildchain/core";` | `packages/core/stable-candidate-ledger.js:76` |
963
+ | `PACKAGE_RELEASE_PROPAGATION_CONFIG_CONTRACT` | constant: const PACKAGE_RELEASE_PROPAGATION_CONFIG_CONTRACT | none | value | Import does not declare a throw contract. | none-on-import | `import { PACKAGE_RELEASE_PROPAGATION_CONFIG_CONTRACT } from "@kungfu-tech/buildchain/core";` | `packages/core/release-propagation-capture.js:17` |
958
964
  | `PAPER_ALPHA_PLAN_CONTRACT` | constant: const PAPER_ALPHA_PLAN_CONTRACT | none | value | Import does not declare a throw contract. | none-on-import | `import { PAPER_ALPHA_PLAN_CONTRACT } from "@kungfu-tech/buildchain/core";` | `packages/core/paper.js:90` |
959
965
  | `PAPER_BUILD_PLAN_CONTRACT` | constant: const PAPER_BUILD_PLAN_CONTRACT | none | value | Import does not declare a throw contract. | none-on-import | `import { PAPER_BUILD_PLAN_CONTRACT } from "@kungfu-tech/buildchain/core";` | `packages/core/paper.js:89` |
960
966
  | `PAPER_FLEET_AUDIT_CONTRACT` | constant: const PAPER_FLEET_AUDIT_CONTRACT | none | value | Import does not declare a throw contract. | none-on-import | `import { PAPER_FLEET_AUDIT_CONTRACT } from "@kungfu-tech/buildchain/core";` | `packages/core/paper-fleet.js:19` |
@@ -1879,17 +1885,20 @@ Target: `./packages/core/release-passport-contract.js`. Public symbols: 5.
1879
1885
 
1880
1886
  ## `@kungfu-tech/buildchain/release-propagation`
1881
1887
 
1882
- Target: `./packages/core/release-propagation.js`. Public symbols: 22.
1888
+ Target: `./packages/core/release-propagation.js`. Public symbols: 25.
1883
1889
 
1884
1890
  | Symbol | Kind and signature | Parameters | Return | Errors | Side effects | Example | Source |
1885
1891
  | --- | --- | --- | --- | --- | --- | --- | --- |
1886
1892
  | `claimReleasePropagationWork` | function: function claimReleasePropagationWork({ work, expectedWorkRoot, authority, familyState, } = {}) | { work, expectedWorkRoot, authority, familyState, } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { claimReleasePropagationWork } from "@kungfu-tech/buildchain/release-propagation";` | `packages/core/release-propagation-work-transitions.js:17` |
1887
1893
  | `completeReleasePropagationWork` | function: function completeReleasePropagationWork({ work, expectedWorkRoot, receipt, completionDecision, } = {}) | { work, expectedWorkRoot, receipt, completionDecision, } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { completeReleasePropagationWork } from "@kungfu-tech/buildchain/release-propagation";` | `packages/core/release-propagation-work-transitions.js:110` |
1894
+ | `createPackageReleasePropagationCapture` | function: function createPackageReleasePropagationCapture({ config: configInput, upstreamRelease: upstreamReleaseInput, expectedBaseShas = {}, } = {}) | { config: configInput, upstreamRelease: upstreamReleaseInput, expectedBaseShas = {}, } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { createPackageReleasePropagationCapture } from "@kungfu-tech/buildchain/release-propagation";` | `packages/core/release-propagation-capture.js:101` |
1888
1895
  | `createReleasePropagationLock` | function: function createReleasePropagationLock({ graph, edge, sourceNode, targetNode, upstreamRelease, downstreamChannel, } = {}) | { graph, edge, sourceNode, targetNode, upstreamRelease, downstreamChannel, } = {} | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | none-detected-by-static-source-scan | `import { createReleasePropagationLock } from "@kungfu-tech/buildchain/release-propagation";` | `packages/core/release-propagation.js:199` |
1889
1896
  | `createReleasePropagationReceipt` | function: function createReleasePropagationReceipt({ plan, target = "", lockResult, prOutcome, stagingState = "pending", productionState = "not-requested", observedAt = "", } = {}) | { plan, target = "", lockResult, prOutcome, stagingState = "pending", productionState = "not-requested", observedAt = "", } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { createReleasePropagationReceipt } from "@kungfu-tech/buildchain/release-propagation";` | `packages/core/release-propagation.js:370` |
1890
1897
  | `createReleasePropagationStageReceipt` | function: function createReleasePropagationStageReceipt({ work, stage, outcome = "success", observedAt, actor, summary, evidence, failure = null, } = {}) | { work, stage, outcome = "success", observedAt, actor, summary, evidence, failure = null, } = {} | unknown | Errors from called operations may propagate; no narrower throw contract is declared in source. | none-detected-by-static-source-scan | `import { createReleasePropagationStageReceipt } from "@kungfu-tech/buildchain/release-propagation";` | `packages/core/release-propagation-work.js:214` |
1891
1898
  | `createReleasePropagationWork` | function: function createReleasePropagationWork({ plan, target = "", workContext, expectedDownstreamBaseSha, } = {}) | { plan, target = "", workContext, expectedDownstreamBaseSha, } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { createReleasePropagationWork } from "@kungfu-tech/buildchain/release-propagation";` | `packages/core/release-propagation-work.js:111` |
1899
+ | `normalizePackageReleasePropagationConfig` | function: function normalizePackageReleasePropagationConfig(input) | input | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { normalizePackageReleasePropagationConfig } from "@kungfu-tech/buildchain/release-propagation";` | `packages/core/release-propagation-capture.js:63` |
1892
1900
  | `normalizeReleasePropagationGraph` | function: function normalizeReleasePropagationGraph(input) | input | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { normalizeReleasePropagationGraph } from "@kungfu-tech/buildchain/release-propagation";` | `packages/core/release-propagation.js:163` |
1901
+ | `PACKAGE_RELEASE_PROPAGATION_CONFIG_CONTRACT` | constant: const PACKAGE_RELEASE_PROPAGATION_CONFIG_CONTRACT | none | value | Import does not declare a throw contract. | none-on-import | `import { PACKAGE_RELEASE_PROPAGATION_CONFIG_CONTRACT } from "@kungfu-tech/buildchain/release-propagation";` | `packages/core/release-propagation-capture.js:17` |
1893
1902
  | `planReleasePropagation` | function: function planReleasePropagation({ graph: graphInput, upstreamRelease: releaseInput, sourceNode = "" } = {}) | { graph: graphInput, upstreamRelease: releaseInput, sourceNode = "" } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { planReleasePropagation } from "@kungfu-tech/buildchain/release-propagation";` | `packages/core/release-propagation.js:248` |
1894
1903
  | `readReleasePropagationJson` | function: function readReleasePropagationJson(value, { cwd = process.cwd(), label = "json" } = {}) | value, { cwd = process.cwd(), label = "json" } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | none-detected-by-static-source-scan | `import { readReleasePropagationJson } from "@kungfu-tech/buildchain/release-propagation";` | `packages/core/release-propagation.js:304` |
1895
1904
  | `recordReleasePropagationStage` | function: function recordReleasePropagationStage({ work, expectedWorkRoot, receipt } = {}) | { work, expectedWorkRoot, receipt } = {} | unknown | May throw an Error on rejected input or failed operations; follow the linked source contract. | may-write-or-invoke-external-actions | `import { recordReleasePropagationStage } from "@kungfu-tech/buildchain/release-propagation";` | `packages/core/release-propagation-work-transitions.js:45` |
@@ -415,9 +415,10 @@ first run can stop at `finalizing` after registry publication. If the reviewed
415
415
  merge commit later contains that exact transaction release material but the
416
416
  exact tag is still absent, a retry performs finalization only: it reloads the
417
417
  same durable source, release material, tooling, evidence, version, and target
418
- bindings; creates the exact and floating tags at the transaction release SHA;
419
- and completes the passport from the transaction source tree. It does not rerun
420
- the provider mutation and does not authorize the newer composite channel tree
418
+ bindings; creates the exact tag at the transaction source SHA; moves floating
419
+ refs to the transaction release SHA; and completes the passport from the
420
+ transaction source tree. It does not rerun the provider mutation and does not
421
+ authorize the newer composite channel tree
421
422
  as published material. A different source tree still requires a new version and
422
423
  a fresh release candidate.
423
424
 
@@ -536,8 +537,9 @@ inside the mutation boundary.
536
537
 
537
538
  If finalization fails after an exact Git tag is created, the next run reads the
538
539
  durable `finalizing` state, verifies the exact tag points at the recorded
539
- release SHA, and retries the remaining floating refs. An exact tag at a
540
- different SHA is a material conflict and blocks recovery.
540
+ source SHA (while accepting legacy release/material targets for recovery), and
541
+ retries the remaining floating refs. An exact tag at an unrelated SHA is a
542
+ material conflict and blocks recovery.
541
543
 
542
544
  ## CLI Recovery
543
545
 
@@ -96,6 +96,10 @@ published artifacts are already durable.
96
96
  The intended governance split is:
97
97
 
98
98
  - exact tags such as `v3.0.2` and `v3.0.3-alpha.0` are immutable audit refs;
99
+ - for publish transactions, the exact tag points to the transaction
100
+ `source_sha`, matching package-registry source metadata such as npm
101
+ `gitHead`; generated version-state commits remain on protected branches and
102
+ floating channel refs;
99
103
  - floating tags such as `v3`, `v3.0`, `v3.0-alpha`, and `v3-alpha` are mutable channel refs
100
104
  owned by the Buildchain promotion token;
101
105
  - protected branches still require reviewed channel PRs before Buildchain can
@@ -831,6 +831,13 @@ must be absent or already point at accepted release material. This preserves an
831
831
  immutable tag that represents a completed transaction while allowing a tag
832
832
  collision discovered after registry publication to recover without republishing.
833
833
 
834
+ For package publish transactions, the immutable public version tag points to
835
+ the transaction `source_sha`, so registry source metadata such as npm `gitHead`
836
+ and the Git tag identify the same source commit. Protected branches and mutable
837
+ channel tags continue to point to the generated `release_sha`. Recovery accepts
838
+ older completed transactions whose exact tags already point to recorded release
839
+ or release-material SHAs, but new tags are source-bound.
840
+
834
841
  Every Buildchain publish model that can run registry side effects must bind the
835
842
  publish entrypoint to an immutable `publish-gate/*` source lock. The reusable
836
843
  `release-candidate-promote.yml@v3` wrapper creates or updates that gate ref and
@@ -316,6 +316,40 @@ target; publication itself does not open a Site PR.
316
316
  }
317
317
  ```
318
318
 
319
+ A managed npm package uses the parallel generic contract and passes its path to
320
+ the release-candidate promotion workflow:
321
+
322
+ ```json
323
+ {
324
+ "schemaVersion": 1,
325
+ "contract": "kungfu-buildchain-package-release-propagation",
326
+ "sourceNode": "kfd",
327
+ "graph": {
328
+ "schemaVersion": 1,
329
+ "contract": "kungfu-buildchain-release-propagation-graph",
330
+ "nodes": [],
331
+ "edges": []
332
+ },
333
+ "targets": ["site-libkungfu-dev"]
334
+ }
335
+ ```
336
+
337
+ ```yaml
338
+ with:
339
+ release-propagation-config-path: .buildchain/release-propagation.json
340
+ ```
341
+
342
+ The config is read with `git show` from the exact finalized release SHA. Its
343
+ root fields, graph fields, nodes, edges, targets, and execution profiles reject
344
+ unknown fields. After npm publication and the public GitHub Release are
345
+ complete, Buildchain independently reads npm `version`, `dist.integrity`, and
346
+ `gitHead`, resolves annotated Git tags to their commit, downloads the public
347
+ `buildchain.release.json` asset, and compares its bytes with the finalized
348
+ Passport. Only an exact source SHA, tag target, npm `gitHead`, package version,
349
+ integrity, and Passport digest can produce the capture artifact. The promotion
350
+ output `release-propagation-work-artifact` names the restart-safe artifact set.
351
+ No downstream checkout, branch, or pull request is created by this step.
352
+
319
353
  Each graph target owns an exact GitHub web-surface execution profile: workflow,
320
354
  base and managed branch, lock path, consumer commands, production status URL,
321
355
  and production artifact readback URLs. The sealed workflow rejects extra config
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kungfu-tech/buildchain",
3
- "version": "3.0.4",
3
+ "version": "3.0.5-alpha.1",
4
4
  "private": false,
5
5
  "description": "Buildchain Release Passport, release governance, CLI toolkit, and site facts.",
6
6
  "repository": "https://github.com/kungfu-systems/buildchain",