@kungfu-tech/buildchain 2.14.18 → 2.14.19-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.
@@ -8,7 +8,7 @@
8
8
  "rendererOwner": "site repository",
9
9
  "rule": "Site repositories render these markdown pages and metadata; they do not maintain separate Buildchain product copy."
10
10
  },
11
- "pageCount": 54,
11
+ "pageCount": 55,
12
12
  "categories": [
13
13
  "action",
14
14
  "api",
@@ -1370,6 +1370,27 @@
1370
1370
  ],
1371
1371
  "markdown": "# README Badge Blocks\n\nBuildchain can generate a managed README badge block from repository-owned\nfacts. The README keeps only a projection; the source facts remain in\n`.buildchain/buildchain.toml`, package metadata, workflow files, KFD standards metadata,\nand the repository's own release passport.\n\nThe managed block is delimited by:\n\n```markdown\n<!-- buildchain:badges:start -->\n...\n<!-- buildchain:badges:end -->\n```\n\nBuildchain owns only that block. Everything outside the markers remains normal\nREADME content.\n\n## Node API\n\nUse the public package export:\n\n```js\nimport {\n collectBadgeBundleFacts,\n collectReadmeBadgeFacts,\n createKfdBadgeSpecsFromStandards,\n renderBadgeBundleBlock,\n renderReadmeBadgeBlock,\n checkBadgeBundleBlock,\n checkReadmeBadgeBlock,\n updateBadgeBundleBlock,\n updateReadmeBadgeBlock,\n} from \"@kungfu-tech/buildchain/badges\";\n```\n\n`@kungfu-tech/buildchain/readme-badges` remains available for compatibility,\nbut new integrations should use `@kungfu-tech/buildchain/badges`.\n\n`collectReadmeBadgeFacts({ cwd })` returns a machine-readable object with\ncontract `kungfu-buildchain-readme-badge-facts`. It collects repository\nidentity, package name/version/license, configured platforms, configured\nworkflow status badges, the repository's own Buildchain Release Passport\nlocation and verification result, and KFD badge state. KFD badge labels,\nhuman-facing concept text, standard document links, schema IDs, and interface\ncontracts are read from\n`@kungfu-tech/kfd/standards.json` when the package is installed, or from an\nexplicit `kfd_standards` path/URL. When present, it also summarizes local KFD\nclaim registry and product-mechanism facts from the package-owned site bundle,\nso downstream agents can connect README badges back to Buildchain's\nKFD/source-of-truth surfaces.\n\n`renderReadmeBadgeBlock(facts)` renders deterministic Markdown from that facts\nobject. `checkReadmeBadgeBlock({ readmeText, facts })` compares the current\nREADME marker block against the expected block and reports missing or stale\ndrift. `updateReadmeBadgeBlock({ readmeText, facts })` inserts or replaces the\nmanaged block.\n\nThe Node API is the implementation source. The CLI delegates to it.\n\n`collectBadgeBundleFacts({ cwd, claims })` is the trust-badge bundle API. It\nuses the same repository facts, but returns contract\n`kungfu-buildchain-badge-bundle-facts` and only renders the Buildchain trust\nclaims: every active `kfd-*` standard discovered from KFD standards metadata,\nplus `release-passport`. KFD-1, KFD-2, KFD-3, KFD-4, and release passport are\nenabled by default with current KFD metadata. Callers can pass\n`claims: \"kfd-1,release-passport\"` or an array to narrow the bundle without\nhand-writing badge Markdown.\n\n## CLI\n\nGenerate facts as JSON:\n\n```bash\nbuildchain badges readme --json\n```\n\nFail closed when the README block is missing or stale:\n\n```bash\nbuildchain badges readme --check\n```\n\nInsert or replace the block:\n\n```bash\nbuildchain badges readme --write\n```\n\nGenerate only the Buildchain trust badge bundle:\n\n```bash\nbuildchain badges bundle --json\nbuildchain badges bundle --check\nbuildchain badges bundle --write\n```\n\nNarrow the bundle to specific claims:\n\n```bash\nbuildchain badges bundle --claims kfd-1,release-passport --write\n```\n\nAll commands accept `--cwd <dir>` and `--readme <path>`. Repositories can add\n`buildchain badges bundle --check` or `buildchain badges readme --check` to CI\nso badge drift is detected like any other generated release-facing surface.\n\n## Configuration\n\nThe optional `[badges]` table in `.buildchain/buildchain.toml` declares local facts that\ncannot be inferred safely:\n\n```toml\n[badges]\nrelease_passport = \"https://github.com/example/project/releases/latest/download/buildchain.release.json\"\nkfd_standards = \"node_modules/@kungfu-tech/kfd/standards.json\"\nkfd_1 = \"declared\"\nkfd_2 = \"planned\"\nkfd_3 = \"aligned\"\nkfd_4 = \"declared\"\nplatforms = [\"macOS\", \"Linux\", \"Windows\"]\nworkflows = [\"verify.yml\", \"build.yml\"]\n\n[badges.bundle]\nclaims = [\"kfd-1\", \"kfd-2\", \"kfd-3\", \"kfd-4\", \"release-passport\"]\n```\n\n`release_passport` may be a local path or URL. If omitted, Buildchain tries\n`buildchain.release.json`, then `.buildchain/release-passport/buildchain.release.json`,\nthen the repository's latest GitHub Release asset when the GitHub repository\ncan be discovered.\n\nThe generated `Buildchain Release Passport` badge is a repository capability\nbadge: it says whether the current repository has a Buildchain release passport\nthat can be verified. It does not report the upstream `kungfu-systems/buildchain`\nrepository status. Buildchain's own README dogfoods the same rule because its\nconfigured `release_passport` points at Buildchain's own release passport.\n\nBuildchain-owned badges use stable hosted image URLs by default:\n\n```text\nhttps://buildchain.libkungfu.dev/badges/v1/{badge}/{state}.svg\n```\n\nThe URL is part of the Buildchain badge contract. Consumers do not need to\nregenerate README files when Buildchain replaces the placeholder badge logo\nwith a formal logo; the hosted endpoint owns logo rendering. The package-owned\nsite bundle publishes `badge-endpoint-registry.json` plus Shields-compatible\nJSON payloads under `badges/v1/**` so the site repository can serve or render\nthe exact SVG endpoints without inventing badge facts.\n\nForks or private deployments can override the image host with:\n\n```toml\n[badges]\nbadge_endpoint_base_url = \"https://example.com/buildchain-badges/v1\"\n```\n\n`kfd_standards` is optional. If omitted, Buildchain tries the installed\n`@kungfu-tech/kfd/standards.json` package export. Use the explicit path or URL\nonly when a repository deliberately vendors KFD standards metadata or validates\nagainst a local KFD development checkout. The KFD standards metadata controls\nthe badge vocabulary; the release passport still controls whether a repository\nmay display a KFD state as `passed`.\n\n## KFD Badge Rules\n\nKFD passed is evidence-backed. A repository may display `KFD-N passed` only when\nits own release passport verifies successfully and the corresponding passport\nsection has `status: \"passed\"`. The KFD badge vocabulary comes from KFD\nstandards metadata, not Buildchain private strings: for example KFD-2 uses the\n`releaseTrustPassport` concept and KFD-4 uses the `observerPerspective` concept\nfrom `@kungfu-tech/kfd/standards.json`.\n\nWhen no release passport exists yet, or when the passport cannot be verified,\nBuildchain downgrades each KFD badge to the explicit local declaration such as\n`declared`, `aligned`, or `planned`. A local `passed` declaration is treated as\n`declared`; unknown local states are normalized to a non-passed fallback.\n\nBuildchain's own README may link to Buildchain's own release passport. Other\nrepositories must not claim Buildchain's KFD status as their own; their badge\nlinks must point to their own release passport or evidence page.\n\n## CI Contract\n\nRecommended CI gate:\n\n```bash\nbuildchain badges readme --check\n```\n\nor, when the repository only wants the Buildchain trust bundle:\n\n```bash\nbuildchain badges bundle --check\n```\n\nThe check fails when:\n\n- the marker block is missing;\n- generated Markdown differs from repository facts;\n- a previously hand-written KFD passed claim is not backed by the repository's\n verified release passport facts.\n\nThe machine-readable facts object should be used by downstream site renderers\nor audit tools when Markdown badges are not enough."
1372
1372
  },
1373
+ {
1374
+ "id": "manual:release-activation-transaction",
1375
+ "title": "Release activation transaction",
1376
+ "route": "/docs/release-activation-transaction",
1377
+ "category": "manual",
1378
+ "capabilityGroup": "getting-started",
1379
+ "audience": [
1380
+ "agent"
1381
+ ],
1382
+ "maturity": "stable",
1383
+ "sourcePath": "docs/release-activation-transaction.md",
1384
+ "digest": "sha256:c3de5838603d3e6dd3ea03c599e67aafa1d1fc184498fb779cb703f8796424cf",
1385
+ "headings": [
1386
+ {
1387
+ "level": 1,
1388
+ "title": "Release activation transaction",
1389
+ "anchor": "release-activation-transaction"
1390
+ }
1391
+ ],
1392
+ "markdown": "# Release activation transaction\n\nBuildchain exposes `release-activation-transaction` as the final cross-repository\ncontract between a qualified product release, its public web surface, and the\nproduct-owned released-evidence projection.\n\nThe canonical order is:\n\n1. `candidate-qualified`\n2. `artifacts-published`\n3. `passport-sealed`\n4. `site-published`\n5. `public-readback`\n6. `evidence-synthesized`\n\n`packages/core/release-activation-transaction.js` is the executable authority.\nEvery transaction binds an exact product source SHA, exact reviewed site source\nSHA, tag, channel, version, environment, artifact-set root, and the three\nrepository owners. A later phase cannot pass while an earlier phase is\nincomplete. Replaying a passed phase is idempotent only when its retained\nreceipt roots are unchanged.\n\nReleased evidence must be synthesized from a canonical receipt set containing\nexactly one artifact-publication, release-passport, site-publication,\npublic-readback, and product-qualification receipt. Every receipt repeats the\nsame binding root. Missing, duplicated, stale, or substituted roots fail\nclosed.\n\nShadow rehearsal uses `mode=shadow`, `environment=shadow`, and always emits\n`releasedUseClaim=false`. It is suitable for protected PR qualification and\nmust never be published as real release evidence. Activation mode requires the\nproduction environment; actual channel mutation remains the caller's protected\npublication responsibility.\n\nThe web-surface workflow accepts `production-source-sha` only for an explicitly\napproved `workflow_dispatch`. It checks out and plans the exact reviewed\nconsumer commit, while the production environment and normal publication\nauthority gates remain intact."
1393
+ },
1373
1394
  {
1374
1395
  "id": "manual:release-candidate",
1375
1396
  "title": "Release Candidate Passport",
@@ -6,7 +6,7 @@
6
6
  "cliCommandCount": 87,
7
7
  "workflowCount": 52,
8
8
  "actionCount": 5,
9
- "sitePageCount": 54,
9
+ "sitePageCount": 55,
10
10
  "docCommandRefCount": 276,
11
11
  "failureCount": 0
12
12
  },
@@ -777,10 +777,15 @@
777
777
  "publish-rematerialize-on-resume",
778
778
  "publish-required-artifacts-json",
779
779
  "publish-target",
780
+ "publish-transaction-override",
781
+ "release-activation-command",
782
+ "release-activation-receipt-set-path",
780
783
  "release-candidate-workflow-file",
781
784
  "release-candidate-workflow-name",
782
785
  "release-passport",
783
786
  "release-passport-buildchain-self-kfd",
787
+ "release-passport-evidence-command",
788
+ "release-passport-evidence-path",
784
789
  "release-passport-impact-json",
785
790
  "release-passport-invariant-passport-command",
786
791
  "release-passport-invariant-passport-jsons",
@@ -800,7 +805,7 @@
800
805
  "target-sha",
801
806
  "trusted-publishing"
802
807
  ],
803
- "inputCount": 78,
808
+ "inputCount": 83,
804
809
  "secrets": [
805
810
  "BUILDCHAIN_ISSUE_APP_ID",
806
811
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
@@ -1099,6 +1104,7 @@
1099
1104
  "production-release-on-main",
1100
1105
  "production-release-pr-mode",
1101
1106
  "production-release-pr-token",
1107
+ "production-source-sha",
1102
1108
  "publication-admission-json",
1103
1109
  "publication-control-plane-audit-json",
1104
1110
  "publication-expected-json",
@@ -1112,7 +1118,7 @@
1112
1118
  "verify-command",
1113
1119
  "working-directory"
1114
1120
  ],
1115
- "inputCount": 40,
1121
+ "inputCount": 41,
1116
1122
  "secrets": [
1117
1123
  "production-release-app-private-key"
1118
1124
  ],
@@ -1887,10 +1893,15 @@
1887
1893
  "publish-rematerialize-on-resume",
1888
1894
  "publish-required-artifacts-json",
1889
1895
  "publish-target",
1896
+ "publish-transaction-override",
1897
+ "release-activation-command",
1898
+ "release-activation-receipt-set-path",
1890
1899
  "release-candidate-workflow-file",
1891
1900
  "release-candidate-workflow-name",
1892
1901
  "release-passport",
1893
1902
  "release-passport-buildchain-self-kfd",
1903
+ "release-passport-evidence-command",
1904
+ "release-passport-evidence-path",
1894
1905
  "release-passport-impact-json",
1895
1906
  "release-passport-invariant-passport-command",
1896
1907
  "release-passport-invariant-passport-jsons",
@@ -1910,7 +1921,7 @@
1910
1921
  "target-sha",
1911
1922
  "trusted-publishing"
1912
1923
  ],
1913
- "inputCount": 70,
1924
+ "inputCount": 75,
1914
1925
  "secrets": [
1915
1926
  "BUILDCHAIN_ISSUE_APP_ID",
1916
1927
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
@@ -2465,6 +2476,10 @@
2465
2476
  "id": "manual:readme-badges",
2466
2477
  "category": "manual"
2467
2478
  },
2479
+ {
2480
+ "id": "manual:release-activation-transaction",
2481
+ "category": "manual"
2482
+ },
2468
2483
  {
2469
2484
  "id": "manual:release-candidate",
2470
2485
  "category": "manual"
@@ -3910,8 +3925,8 @@
3910
3925
  "workflowRegistryPath": "dist/site/workflow-registry.json",
3911
3926
  "pageRegistryPath": "dist/site/page-registry.json",
3912
3927
  "cliRegistryDigest": "5ba7fd93a13993b05767b6f02d0626a7347f25c3d7cd4589ed4f70028c1f1bd1",
3913
- "workflowRegistryDigest": "c2abf629b205a96f536e8758c3d9cdb3eade6945294fe278774877ef41d90b60",
3914
- "pageRegistryDigest": "16a40ed6f3848fcb6a743f9d0369b04e956dfb7b8548b1a7a79266f76b928c80"
3928
+ "workflowRegistryDigest": "4289e5a54fd0ef2f683636bb24337fec6456fb9fa8fb50155fa3b35c323e7c70",
3929
+ "pageRegistryDigest": "23aacdefa707c4b4c0a0911741c44294411f0508d36695e7c717cfd77a4c8fb5"
3915
3930
  },
3916
3931
  "comparison": {
3917
3932
  "missingCliRegistry": [],
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "contract": "kungfu-buildchain-publication-release-registry",
4
- "generatedAt": "2026-07-24T16:50:01.298Z",
5
- "publishedAt": "2026-07-24T16:50:01.298Z",
4
+ "generatedAt": "2026-07-25T11:17:06.067Z",
5
+ "publishedAt": "2026-07-25T11:17:06.067Z",
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": "aa1bea6f12a7a815793fb223cfaea9db691c1908",
22
+ "sourceRevision": "315ef133384ca3e6d8f086213c3f893ca1882917",
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.18",
35
+ "version": "2.14.19-alpha.1",
36
36
  "versionSource": "package.json#version"
37
37
  },
38
38
  "sourceKind": "package-site-bundle",
@@ -41,6 +41,7 @@
41
41
  "./release-passport": "./packages/core/release-passport.js",
42
42
  "./release-passport-contract": "./packages/core/release-passport-contract.js",
43
43
  "./release-propagation": "./packages/core/release-propagation.js",
44
+ "./release-activation-transaction": "./packages/core/release-activation-transaction.js",
44
45
  "./surface-manifest": "./packages/core/surface-manifest.js",
45
46
  "./buildchain-kfd-claims": "./packages/core/buildchain-kfd-claims.js",
46
47
  "./site/buildchain-site.json": "./dist/site/buildchain-site.json",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "contract": "kungfu-buildchain-site-manifest",
4
- "generatedAt": "2026-07-24T16:50:01.298Z",
5
- "publishedAt": "2026-07-24T16:50:01.298Z",
4
+ "generatedAt": "2026-07-25T11:17:06.067Z",
5
+ "publishedAt": "2026-07-25T11:17:06.067Z",
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": "aa1bea6f12a7a815793fb223cfaea9db691c1908",
22
+ "sourceRevision": "315ef133384ca3e6d8f086213c3f893ca1882917",
23
23
  "timestampPolicyDetails": {
24
24
  "contract": "kungfu-buildchain-surface-timestamp-policy",
25
25
  "timestampFields": [
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "package": {
39
39
  "name": "@kungfu-tech/buildchain",
40
- "version": "2.14.18",
40
+ "version": "2.14.19-alpha.1",
41
41
  "versionSource": "package.json#version"
42
42
  },
43
43
  "entrypoint": "buildchain-site.json",
@@ -346,10 +346,15 @@
346
346
  "publish-rematerialize-on-resume",
347
347
  "publish-required-artifacts-json",
348
348
  "publish-target",
349
+ "publish-transaction-override",
350
+ "release-activation-command",
351
+ "release-activation-receipt-set-path",
349
352
  "release-candidate-workflow-file",
350
353
  "release-candidate-workflow-name",
351
354
  "release-passport",
352
355
  "release-passport-buildchain-self-kfd",
356
+ "release-passport-evidence-command",
357
+ "release-passport-evidence-path",
353
358
  "release-passport-impact-json",
354
359
  "release-passport-invariant-passport-command",
355
360
  "release-passport-invariant-passport-jsons",
@@ -369,7 +374,7 @@
369
374
  "target-sha",
370
375
  "trusted-publishing"
371
376
  ],
372
- "inputCount": 78,
377
+ "inputCount": 83,
373
378
  "secrets": [
374
379
  "BUILDCHAIN_ISSUE_APP_ID",
375
380
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
@@ -695,6 +700,7 @@
695
700
  "production-release-on-main",
696
701
  "production-release-pr-mode",
697
702
  "production-release-pr-token",
703
+ "production-source-sha",
698
704
  "publication-admission-json",
699
705
  "publication-control-plane-audit-json",
700
706
  "publication-expected-json",
@@ -708,7 +714,7 @@
708
714
  "verify-command",
709
715
  "working-directory"
710
716
  ],
711
- "inputCount": 40,
717
+ "inputCount": 41,
712
718
  "secrets": [
713
719
  "production-release-app-private-key"
714
720
  ],
@@ -1567,10 +1573,15 @@
1567
1573
  "publish-rematerialize-on-resume",
1568
1574
  "publish-required-artifacts-json",
1569
1575
  "publish-target",
1576
+ "publish-transaction-override",
1577
+ "release-activation-command",
1578
+ "release-activation-receipt-set-path",
1570
1579
  "release-candidate-workflow-file",
1571
1580
  "release-candidate-workflow-name",
1572
1581
  "release-passport",
1573
1582
  "release-passport-buildchain-self-kfd",
1583
+ "release-passport-evidence-command",
1584
+ "release-passport-evidence-path",
1574
1585
  "release-passport-impact-json",
1575
1586
  "release-passport-invariant-passport-command",
1576
1587
  "release-passport-invariant-passport-jsons",
@@ -1590,7 +1601,7 @@
1590
1601
  "target-sha",
1591
1602
  "trusted-publishing"
1592
1603
  ],
1593
- "inputCount": 70,
1604
+ "inputCount": 75,
1594
1605
  "secrets": [
1595
1606
  "BUILDCHAIN_ISSUE_APP_ID",
1596
1607
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
@@ -0,0 +1,38 @@
1
+ # Release activation transaction
2
+
3
+ Buildchain exposes `release-activation-transaction` as the final cross-repository
4
+ contract between a qualified product release, its public web surface, and the
5
+ product-owned released-evidence projection.
6
+
7
+ The canonical order is:
8
+
9
+ 1. `candidate-qualified`
10
+ 2. `artifacts-published`
11
+ 3. `passport-sealed`
12
+ 4. `site-published`
13
+ 5. `public-readback`
14
+ 6. `evidence-synthesized`
15
+
16
+ `packages/core/release-activation-transaction.js` is the executable authority.
17
+ Every transaction binds an exact product source SHA, exact reviewed site source
18
+ SHA, tag, channel, version, environment, artifact-set root, and the three
19
+ repository owners. A later phase cannot pass while an earlier phase is
20
+ incomplete. Replaying a passed phase is idempotent only when its retained
21
+ receipt roots are unchanged.
22
+
23
+ Released evidence must be synthesized from a canonical receipt set containing
24
+ exactly one artifact-publication, release-passport, site-publication,
25
+ public-readback, and product-qualification receipt. Every receipt repeats the
26
+ same binding root. Missing, duplicated, stale, or substituted roots fail
27
+ closed.
28
+
29
+ Shadow rehearsal uses `mode=shadow`, `environment=shadow`, and always emits
30
+ `releasedUseClaim=false`. It is suitable for protected PR qualification and
31
+ must never be published as real release evidence. Activation mode requires the
32
+ production environment; actual channel mutation remains the caller's protected
33
+ publication responsibility.
34
+
35
+ The web-surface workflow accepts `production-source-sha` only for an explicitly
36
+ approved `workflow_dispatch`. It checks out and plans the exact reviewed
37
+ consumer commit, while the production environment and normal publication
38
+ authority gates remain intact.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kungfu-tech/buildchain",
3
- "version": "2.14.18",
3
+ "version": "2.14.19-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",
@@ -44,6 +44,7 @@
44
44
  "./release-passport": "./packages/core/release-passport.js",
45
45
  "./release-passport-contract": "./packages/core/release-passport-contract.js",
46
46
  "./release-propagation": "./packages/core/release-propagation.js",
47
+ "./release-activation-transaction": "./packages/core/release-activation-transaction.js",
47
48
  "./surface-manifest": "./packages/core/surface-manifest.js",
48
49
  "./buildchain-kfd-claims": "./packages/core/buildchain-kfd-claims.js",
49
50
  "./site/buildchain-site.json": "./dist/site/buildchain-site.json",
@@ -521,6 +521,20 @@ export {
521
521
  writeReleasePropagationLock,
522
522
  } from "./release-propagation.js";
523
523
 
524
+ export {
525
+ RELEASE_ACTIVATION_CONTRACT,
526
+ RELEASE_ACTIVATION_PHASES,
527
+ RELEASE_ACTIVATION_RECEIPT_SET_CONTRACT,
528
+ abortReleaseActivationTransaction,
529
+ createReleaseActivationReceiptSet,
530
+ createReleaseActivationTransaction,
531
+ recordReleaseActivationPhase,
532
+ releaseActivationRoot,
533
+ rollbackReleaseActivationTransaction,
534
+ validateReleaseActivationReceiptSet,
535
+ validateReleaseActivationTransaction,
536
+ } from "./release-activation-transaction.js";
537
+
524
538
  export {
525
539
  SURFACE_TIMESTAMP_POLICY_CONTRACT,
526
540
  applySurfaceTimestampPolicy,
@@ -54,6 +54,10 @@ const REQUIRED_CONTROL_PLANE_FACTS = Object.freeze([
54
54
  "runner-policy",
55
55
  ]);
56
56
 
57
+ function releaseCandidateEvidenceChannel(publicationChannel) {
58
+ return publicationChannel === "major" ? "release" : publicationChannel;
59
+ }
60
+
57
61
  function stableJson(value) {
58
62
  if (Array.isArray(value)) return `[${value.map(stableJson).join(",")}]`;
59
63
  if (value && typeof value === "object") {
@@ -633,7 +637,7 @@ function validatePublicationEvidence(publicationEvidence, admission) {
633
637
  passport,
634
638
  buildSummary,
635
639
  repository: admission.repository,
636
- targetChannel: admission.channel,
640
+ targetChannel: releaseCandidateEvidenceChannel(admission.channel),
637
641
  });
638
642
  if (!passportValidation.ok) {
639
643
  throw new Error(`release-candidate passport did not qualify: ${passportValidation.errors.join("; ")}`);