@kungfu-tech/buildchain 3.0.0 → 3.0.1-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.
Files changed (35) hide show
  1. package/README.md +3 -0
  2. package/dist/site/buildchain-contract.json +101 -26
  3. package/dist/site/buildchain-site.json +93 -17
  4. package/dist/site/capability-registry.json +6 -5
  5. package/dist/site/controller-registry.json +23 -3
  6. package/dist/site/kfd-claims.json +92 -11
  7. package/dist/site/kfd-upstream-aggregate.json +1 -1
  8. package/dist/site/manual-registry.json +17 -3
  9. package/dist/site/node-api-registry.json +19 -6
  10. package/dist/site/page-registry.json +77 -9
  11. package/dist/site/public-surface-audit.json +61 -9
  12. package/dist/site/publication-authority-registry.json +19 -1
  13. package/dist/site/publication-registry.json +4 -4
  14. package/dist/site/release-provenance.json +1 -0
  15. package/dist/site/site-manifest.json +15 -7
  16. package/dist/site/workflow-registry.json +52 -5
  17. package/docs/MAP.md +1 -0
  18. package/docs/auditable-demo.md +155 -0
  19. package/docs/github-governance-authority.md +2 -2
  20. package/docs/release-activation-transaction.md +38 -0
  21. package/docs/versioning.md +1 -0
  22. package/package.json +2 -1
  23. package/packages/core/buildchain-config.js +14 -0
  24. package/packages/core/buildchain-contract.js +45 -0
  25. package/packages/core/buildchain-kfd-claims.js +1 -0
  26. package/packages/core/buildchain-publication-authority.js +1 -0
  27. package/packages/core/github-governance-authority.js +3 -3
  28. package/packages/core/index.js +14 -0
  29. package/packages/core/release-activation-transaction.js +421 -0
  30. package/scripts/auditable-demo.mjs +576 -0
  31. package/scripts/check-inventory.mjs +4 -0
  32. package/scripts/generate-site-bundle.mjs +5 -0
  33. package/scripts/installer-publication.mjs +15 -5
  34. package/scripts/publication-commit-evidence.mjs +298 -12
  35. package/scripts/resolve-artifact-coordinates.mjs +174 -0
@@ -4,9 +4,9 @@
4
4
  "status": "passed",
5
5
  "summary": {
6
6
  "cliCommandCount": 87,
7
- "workflowCount": 52,
7
+ "workflowCount": 53,
8
8
  "actionCount": 5,
9
- "sitePageCount": 54,
9
+ "sitePageCount": 56,
10
10
  "docCommandRefCount": 276,
11
11
  "failureCount": 0
12
12
  },
@@ -449,6 +449,39 @@
449
449
  }
450
450
  ],
451
451
  "workflowInputs": [
452
+ {
453
+ "id": ".auditable-demo",
454
+ "path": ".github/workflows/.auditable-demo.yml",
455
+ "reusable": true,
456
+ "inputs": [
457
+ "adapter-path",
458
+ "artifact-retention-days",
459
+ "buildchain-repository",
460
+ "render-media",
461
+ "renderer-image",
462
+ "require-trusted-event",
463
+ "source-artifact-digest",
464
+ "source-artifact-name",
465
+ "source-ref"
466
+ ],
467
+ "inputCount": 9,
468
+ "secrets": [],
469
+ "secretCount": 0,
470
+ "outputs": [
471
+ "gate-artifact-digest",
472
+ "gate-artifact-id",
473
+ "gate-artifact-name",
474
+ "gate-artifact-url",
475
+ "gate-root",
476
+ "media-artifact-digest",
477
+ "media-artifact-id",
478
+ "media-artifact-name",
479
+ "media-artifact-url",
480
+ "media-root",
481
+ "source-sha"
482
+ ],
483
+ "outputCount": 11
484
+ },
452
485
  {
453
486
  "id": ".binary-release-assets",
454
487
  "path": ".github/workflows/.binary-release-assets.yml",
@@ -560,6 +593,7 @@
560
593
  ],
561
594
  "secretCount": 8,
562
595
  "outputs": [
596
+ "artifact-coordinates-json",
563
597
  "build-diagnostics-summary-artifact",
564
598
  "build-diagnostics-summary-json",
565
599
  "build-summary-artifact",
@@ -602,7 +636,7 @@
602
636
  "runner-preset",
603
637
  "trusted-event"
604
638
  ],
605
- "outputCount": 41
639
+ "outputCount": 42
606
640
  },
607
641
  {
608
642
  "id": ".bump-minor-version",
@@ -778,10 +812,14 @@
778
812
  "publish-required-artifacts-json",
779
813
  "publish-target",
780
814
  "publish-transaction-override",
815
+ "release-activation-command",
816
+ "release-activation-receipt-set-path",
781
817
  "release-candidate-workflow-file",
782
818
  "release-candidate-workflow-name",
783
819
  "release-passport",
784
820
  "release-passport-buildchain-self-kfd",
821
+ "release-passport-evidence-command",
822
+ "release-passport-evidence-path",
785
823
  "release-passport-impact-json",
786
824
  "release-passport-invariant-passport-command",
787
825
  "release-passport-invariant-passport-jsons",
@@ -801,7 +839,7 @@
801
839
  "target-sha",
802
840
  "trusted-publishing"
803
841
  ],
804
- "inputCount": 79,
842
+ "inputCount": 83,
805
843
  "secrets": [
806
844
  "BUILDCHAIN_ISSUE_APP_ID",
807
845
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
@@ -1100,6 +1138,7 @@
1100
1138
  "production-release-on-main",
1101
1139
  "production-release-pr-mode",
1102
1140
  "production-release-pr-token",
1141
+ "production-source-sha",
1103
1142
  "publication-admission-json",
1104
1143
  "publication-control-plane-audit-json",
1105
1144
  "publication-expected-json",
@@ -1113,7 +1152,7 @@
1113
1152
  "verify-command",
1114
1153
  "working-directory"
1115
1154
  ],
1116
- "inputCount": 40,
1155
+ "inputCount": 41,
1117
1156
  "secrets": [
1118
1157
  "production-release-app-private-key"
1119
1158
  ],
@@ -1304,6 +1343,7 @@
1304
1343
  ],
1305
1344
  "secretCount": 8,
1306
1345
  "outputs": [
1346
+ "artifact-coordinates-json",
1307
1347
  "build-diagnostics-summary-artifact",
1308
1348
  "build-diagnostics-summary-json",
1309
1349
  "build-summary-artifact",
@@ -1349,7 +1389,7 @@
1349
1389
  "runner-preset",
1350
1390
  "trusted-event"
1351
1391
  ],
1352
- "outputCount": 44
1392
+ "outputCount": 45
1353
1393
  },
1354
1394
  {
1355
1395
  "id": "buildchain-alpha-self-dogfood",
@@ -1889,10 +1929,14 @@
1889
1929
  "publish-required-artifacts-json",
1890
1930
  "publish-target",
1891
1931
  "publish-transaction-override",
1932
+ "release-activation-command",
1933
+ "release-activation-receipt-set-path",
1892
1934
  "release-candidate-workflow-file",
1893
1935
  "release-candidate-workflow-name",
1894
1936
  "release-passport",
1895
1937
  "release-passport-buildchain-self-kfd",
1938
+ "release-passport-evidence-command",
1939
+ "release-passport-evidence-path",
1896
1940
  "release-passport-impact-json",
1897
1941
  "release-passport-invariant-passport-command",
1898
1942
  "release-passport-invariant-passport-jsons",
@@ -1912,7 +1956,7 @@
1912
1956
  "target-sha",
1913
1957
  "trusted-publishing"
1914
1958
  ],
1915
- "inputCount": 71,
1959
+ "inputCount": 75,
1916
1960
  "secrets": [
1917
1961
  "BUILDCHAIN_ISSUE_APP_ID",
1918
1962
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
@@ -2383,6 +2427,10 @@
2383
2427
  "id": "manual:artifact-verification-envelope",
2384
2428
  "category": "manual"
2385
2429
  },
2430
+ {
2431
+ "id": "manual:auditable-demo",
2432
+ "category": "manual"
2433
+ },
2386
2434
  {
2387
2435
  "id": "manual:binary-distribution",
2388
2436
  "category": "manual"
@@ -2467,6 +2515,10 @@
2467
2515
  "id": "manual:readme-badges",
2468
2516
  "category": "manual"
2469
2517
  },
2518
+ {
2519
+ "id": "manual:release-activation-transaction",
2520
+ "category": "manual"
2521
+ },
2470
2522
  {
2471
2523
  "id": "manual:release-candidate",
2472
2524
  "category": "manual"
@@ -3912,8 +3964,8 @@
3912
3964
  "workflowRegistryPath": "dist/site/workflow-registry.json",
3913
3965
  "pageRegistryPath": "dist/site/page-registry.json",
3914
3966
  "cliRegistryDigest": "5ba7fd93a13993b05767b6f02d0626a7347f25c3d7cd4589ed4f70028c1f1bd1",
3915
- "workflowRegistryDigest": "aab70864785c4b8f2089dd833732dbbb26b1b29cf20063a2fcdeeee3f36d2780",
3916
- "pageRegistryDigest": "16a40ed6f3848fcb6a743f9d0369b04e956dfb7b8548b1a7a79266f76b928c80"
3967
+ "workflowRegistryDigest": "4a627dcf07131d07095d5e6bf0a3373e55c62cf325b3f81bb156c43d31367d62",
3968
+ "pageRegistryDigest": "835b03c155e87749a3d43a9e9af284601b863698592e401c6d183625cbf6ef63"
3917
3969
  },
3918
3970
  "comparison": {
3919
3971
  "missingCliRegistry": [],
@@ -3,6 +3,19 @@
3
3
  "contract": "kungfu-buildchain-publication-authority-registry",
4
4
  "defaultDecision": "deny",
5
5
  "entries": [
6
+ {
7
+ "workflowPath": ".github/workflows/.auditable-demo.yml",
8
+ "authorityClass": "non-publication-oidc",
9
+ "publicationCapable": false,
10
+ "capabilityIds": [],
11
+ "credentialMode": "none",
12
+ "publisherWorkflowMode": "fixed",
13
+ "publisherWorkflowPath": ".github/workflows/.auditable-demo.yml",
14
+ "environment": "",
15
+ "environmentMode": "fixed",
16
+ "runnerPolicy": "unqualified",
17
+ "notes": ""
18
+ },
6
19
  {
7
20
  "workflowPath": ".github/workflows/.binary-release-assets.yml",
8
21
  "authorityClass": "product-publication",
@@ -519,6 +532,11 @@
519
532
  }
520
533
  ],
521
534
  "workflowFacts": [
535
+ {
536
+ "path": ".github/workflows/.auditable-demo.yml",
537
+ "signals": [],
538
+ "classified": true
539
+ },
522
540
  {
523
541
  "path": ".github/workflows/.binary-release-assets.yml",
524
542
  "signals": [
@@ -870,5 +888,5 @@
870
888
  "classified": false
871
889
  }
872
890
  ],
873
- "registryDigest": "5487944a7dcac3931faeec5cde33a00254b9fdd8023ef0d21e1569c43d65e1bf"
891
+ "registryDigest": "cb18522c1957f0cb2e03c525847602a6163d3b276c106a8bce5b8028d8b9a011"
874
892
  }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "contract": "kungfu-buildchain-publication-release-registry",
4
- "generatedAt": "2026-07-25T02:29:54.202Z",
5
- "publishedAt": "2026-07-25T02:29:54.202Z",
4
+ "generatedAt": "2026-07-26T00:14:36.577Z",
5
+ "publishedAt": "2026-07-26T00:14:36.577Z",
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": "173df79be292987e76383a1955c8a9d31b0cb499",
22
+ "sourceRevision": "a0cda81b67a212b3555e10d041c8d39b4c1b8dce",
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.0",
35
+ "version": "3.0.1-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-25T02:29:54.202Z",
5
- "publishedAt": "2026-07-25T02:29:54.202Z",
4
+ "generatedAt": "2026-07-26T00:14:36.577Z",
5
+ "publishedAt": "2026-07-26T00:14:36.577Z",
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": "173df79be292987e76383a1955c8a9d31b0cb499",
22
+ "sourceRevision": "a0cda81b67a212b3555e10d041c8d39b4c1b8dce",
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.0",
40
+ "version": "3.0.1-alpha.1",
41
41
  "versionSource": "package.json#version"
42
42
  },
43
43
  "entrypoint": "buildchain-site.json",
@@ -53,7 +53,15 @@
53
53
  "path": "docs/MAP.md",
54
54
  "plane": "use",
55
55
  "exists": true,
56
- "digest": "sha256:c9eb92eb02601e1e36cb38d7df93097c582dec2b8dc34f769f58c30fc5190bbe"
56
+ "digest": "sha256:11ccb0a90cc0583a1a67da36609a8b07207f259815ac9ac0926c2ec8d7a8764a"
57
+ },
58
+ {
59
+ "id": "auditable-demo",
60
+ "title": "Auditable demo artifact pipeline",
61
+ "path": "docs/auditable-demo.md",
62
+ "plane": "verify",
63
+ "exists": true,
64
+ "digest": "sha256:cff9786d4de098c84ea7e494b523627d6431909f15c82940e2193dbda1ef10e9"
57
65
  },
58
66
  {
59
67
  "id": "install",
@@ -93,7 +101,7 @@
93
101
  "path": "docs/github-governance-authority.md",
94
102
  "plane": "verify",
95
103
  "exists": true,
96
- "digest": "sha256:8484b18d5b0fe6d61d102d6b9cb9e18beac9f47ecb516d430fb5427518e2931f"
104
+ "digest": "sha256:b8c3d9ad53c2509bbd95804ccc31f6aa89989c3aadf3a2b75d9c73aef168b7e8"
97
105
  },
98
106
  {
99
107
  "id": "release-candidate",
@@ -277,7 +285,7 @@
277
285
  "path": "docs/versioning.md",
278
286
  "plane": "why",
279
287
  "exists": true,
280
- "digest": "sha256:199ed8e83c988836f757c9a16b58ec441e0bd04a4f3465f21cc73ed7f530e610"
288
+ "digest": "sha256:f3665f2f173bdcb287cf8aa509035164e818b20088849f4a2bce098951c84ea3"
281
289
  },
282
290
  {
283
291
  "id": "web-surface-deployments",
@@ -3,6 +3,42 @@
3
3
  "contract": "kungfu-buildchain-workflow-registry",
4
4
  "workflowSource": ".github/workflows reverse input enumeration",
5
5
  "workflows": [
6
+ {
7
+ "id": ".auditable-demo",
8
+ "path": ".github/workflows/.auditable-demo.yml",
9
+ "reusable": true,
10
+ "inputs": [
11
+ "adapter-path",
12
+ "artifact-retention-days",
13
+ "buildchain-repository",
14
+ "render-media",
15
+ "renderer-image",
16
+ "require-trusted-event",
17
+ "source-artifact-digest",
18
+ "source-artifact-name",
19
+ "source-ref"
20
+ ],
21
+ "inputCount": 9,
22
+ "secrets": [],
23
+ "secretCount": 0,
24
+ "outputs": [
25
+ "gate-artifact-digest",
26
+ "gate-artifact-id",
27
+ "gate-artifact-name",
28
+ "gate-artifact-url",
29
+ "gate-root",
30
+ "media-artifact-digest",
31
+ "media-artifact-id",
32
+ "media-artifact-name",
33
+ "media-artifact-url",
34
+ "media-root",
35
+ "source-sha"
36
+ ],
37
+ "outputCount": 11,
38
+ "surface": "auditable-demo",
39
+ "capabilityGroup": "api-cli-reference",
40
+ "status": "preview"
41
+ },
6
42
  {
7
43
  "id": ".binary-release-assets",
8
44
  "path": ".github/workflows/.binary-release-assets.yml",
@@ -117,6 +153,7 @@
117
153
  ],
118
154
  "secretCount": 8,
119
155
  "outputs": [
156
+ "artifact-coordinates-json",
120
157
  "build-diagnostics-summary-artifact",
121
158
  "build-diagnostics-summary-json",
122
159
  "build-summary-artifact",
@@ -159,7 +196,7 @@
159
196
  "runner-preset",
160
197
  "trusted-event"
161
198
  ],
162
- "outputCount": 41,
199
+ "outputCount": 42,
163
200
  "surface": "reusable-build",
164
201
  "capabilityGroup": "api-cli-reference",
165
202
  "status": "active"
@@ -347,10 +384,14 @@
347
384
  "publish-required-artifacts-json",
348
385
  "publish-target",
349
386
  "publish-transaction-override",
387
+ "release-activation-command",
388
+ "release-activation-receipt-set-path",
350
389
  "release-candidate-workflow-file",
351
390
  "release-candidate-workflow-name",
352
391
  "release-passport",
353
392
  "release-passport-buildchain-self-kfd",
393
+ "release-passport-evidence-command",
394
+ "release-passport-evidence-path",
354
395
  "release-passport-impact-json",
355
396
  "release-passport-invariant-passport-command",
356
397
  "release-passport-invariant-passport-jsons",
@@ -370,7 +411,7 @@
370
411
  "target-sha",
371
412
  "trusted-publishing"
372
413
  ],
373
- "inputCount": 79,
414
+ "inputCount": 83,
374
415
  "secrets": [
375
416
  "BUILDCHAIN_ISSUE_APP_ID",
376
417
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
@@ -696,6 +737,7 @@
696
737
  "production-release-on-main",
697
738
  "production-release-pr-mode",
698
739
  "production-release-pr-token",
740
+ "production-source-sha",
699
741
  "publication-admission-json",
700
742
  "publication-control-plane-audit-json",
701
743
  "publication-expected-json",
@@ -709,7 +751,7 @@
709
751
  "verify-command",
710
752
  "working-directory"
711
753
  ],
712
- "inputCount": 40,
754
+ "inputCount": 41,
713
755
  "secrets": [
714
756
  "production-release-app-private-key"
715
757
  ],
@@ -918,6 +960,7 @@
918
960
  ],
919
961
  "secretCount": 8,
920
962
  "outputs": [
963
+ "artifact-coordinates-json",
921
964
  "build-diagnostics-summary-artifact",
922
965
  "build-diagnostics-summary-json",
923
966
  "build-summary-artifact",
@@ -963,7 +1006,7 @@
963
1006
  "runner-preset",
964
1007
  "trusted-event"
965
1008
  ],
966
- "outputCount": 44,
1009
+ "outputCount": 45,
967
1010
  "surface": "channel-build-router",
968
1011
  "capabilityGroup": "reusable-build",
969
1012
  "status": "active"
@@ -1569,10 +1612,14 @@
1569
1612
  "publish-required-artifacts-json",
1570
1613
  "publish-target",
1571
1614
  "publish-transaction-override",
1615
+ "release-activation-command",
1616
+ "release-activation-receipt-set-path",
1572
1617
  "release-candidate-workflow-file",
1573
1618
  "release-candidate-workflow-name",
1574
1619
  "release-passport",
1575
1620
  "release-passport-buildchain-self-kfd",
1621
+ "release-passport-evidence-command",
1622
+ "release-passport-evidence-path",
1576
1623
  "release-passport-impact-json",
1577
1624
  "release-passport-invariant-passport-command",
1578
1625
  "release-passport-invariant-passport-jsons",
@@ -1592,7 +1639,7 @@
1592
1639
  "target-sha",
1593
1640
  "trusted-publishing"
1594
1641
  ],
1595
- "inputCount": 71,
1642
+ "inputCount": 75,
1596
1643
  "secrets": [
1597
1644
  "BUILDCHAIN_ISSUE_APP_ID",
1598
1645
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
package/docs/MAP.md CHANGED
@@ -105,6 +105,7 @@ replace them.
105
105
  | What package-owned facts should buildchain.libkungfu.dev render? | [`site-bundle-contract.md`](site-bundle-contract.md) | use | stable |
106
106
  | How do I call the reusable build workflow? | [`reusable-build-surface.md`](reusable-build-surface.md) | use | stable |
107
107
  | How does Buildchain schedule and aggregate a project-owned Shifu Gate profile? | [`shifu-gate-profiles.md`](shifu-gate-profiles.md) | use/verify | draft |
108
+ | How do exact build artifacts become qualified, transcript-traceable demo media? | [`auditable-demo.md`](auditable-demo.md) | use/verify | draft |
108
109
  | How do I use one build job that follows alpha during development and stable for releases? | [`reusable-build-surface.md`](reusable-build-surface.md#automatic-channel-router) | use | preview |
109
110
  | How do self-hosted runners relay large artifacts through S3 before GitHub artifacts? | [`reusable-build-surface.md`](reusable-build-surface.md#artifact-transfer-relay) | use | stable |
110
111
  | How do self-hosted runners reuse local Git checkout caches without weakening source locks? | [`reusable-build-surface.md`](reusable-build-surface.md#locked-source-checkout-cache) | use | stable |
@@ -0,0 +1,155 @@
1
+ ---
2
+ status: draft
3
+ period: 2026-07
4
+ theme: auditable-demo-pipeline
5
+ doc_type: technical-contract
6
+ source_level: local-files
7
+ confidence: high
8
+ sensitivity: public
9
+ evidence_grade: A
10
+ review_state: self-reviewed
11
+ last_reviewed: 2026-07-25
12
+ ai_provenance:
13
+ model_family: GPT-5
14
+ product: Codex
15
+ generated_at: 2026-07-25
16
+ invisible_context_boundary: No hidden model build, parameter count, or private corpus is asserted.
17
+ ---
18
+
19
+ # Auditable Demo Pipeline
20
+
21
+ Buildchain's auditable demo workflow turns an exact GitHub build artifact into
22
+ two distinct evidence products:
23
+
24
+ 1. a required qualified Gate bundle; and
25
+ 2. an optional rendered media bundle that can exist only after that exact Gate
26
+ bundle passes.
27
+
28
+ The public reusable workflow is
29
+ `.github/workflows/.auditable-demo.yml`. It is consumer-neutral: Buildchain
30
+ does not know how a Kungfu, library, service, or application artifact should be
31
+ interpreted. The consumer owns a small checked-in executable adapter.
32
+
33
+ ## Authority Boundary
34
+
35
+ The retained build output is authoritative. The adapter reads that exact
36
+ artifact and projects three files:
37
+
38
+ ```text
39
+ complete-transcript.txt
40
+ public-projection.json
41
+ scene.json
42
+ ```
43
+
44
+ The adapter must not rebuild or rerun the product. It receives:
45
+
46
+ ```text
47
+ --artifact-root PATH
48
+ --output PATH
49
+ --source-coordinate PATH
50
+ ```
51
+
52
+ `--source-coordinate` identifies the caller repository, run, artifact id,
53
+ artifact name, upload digest, expiry, and exact source SHA. The workflow finds
54
+ exactly one live artifact with the requested name in the current caller run and
55
+ rejects a digest mismatch before invoking the adapter. Callers must pass the
56
+ digest emitted by their own `upload-artifact` step; a name resolved later from
57
+ the Actions API is discovery evidence, not a substitute for that producer
58
+ output.
59
+
60
+ Buildchain's reusable build workflow exposes `artifact-coordinates-json` after
61
+ all resolved platform uploads complete. That producer-owned output binds every
62
+ platform id to its same-run artifact id, name, upload digest, URL, and expiry,
63
+ so a consumer that delegates its build to Buildchain can pass an exact
64
+ coordinate without rediscovering authority in a downstream job. The build
65
+ aggregate fails closed if any declared platform lacks one live, digest-bearing
66
+ artifact coordinate. The compact coordinate set is sorted by platform id so
67
+ downstream machine consumers do not depend on matrix completion order.
68
+
69
+ The adapter runs with a disposable Home/XDG/npm prefix, a minimal environment,
70
+ and no GitHub, npm, or cloud credential injection. It must be a regular,
71
+ non-symlink, executable file inside the exact checked-out consumer source.
72
+
73
+ ## Required Gate
74
+
75
+ The Gate:
76
+
77
+ - checks out the exact consumer source and exact called-workflow SHA;
78
+ - resolves and downloads one exact same-run GitHub Artifact;
79
+ - invokes the checked-in adapter by argv, never as an evaluated shell string;
80
+ - rejects undeclared adapter outputs, symlinks, invalid UTF-8, invalid scene or
81
+ projection schemas, out-of-range transcript references, and oversized input;
82
+ - derives a one-second compatibility scene from the consumer projection;
83
+ - anonymously pulls an immutable `image@sha256:digest` renderer;
84
+ - runs it as non-root with `--network none`, a read-only root filesystem, and a
85
+ bounded tmpfs;
86
+ - verifies the renderer manifest, media probe, exact input roots, exact output
87
+ member set, and complete checksums;
88
+ - uploads a content-addressed qualified bundle plus an independent GitHub
89
+ Artifact id, URL, archive digest, and expiry-bearing source coordinate.
90
+
91
+ The Gate bundle contains the complete consumer transcript/projection/scene,
92
+ source artifact coordinate, adapter identity, bounded renderer evidence, a
93
+ passed gate receipt, and checksums covering every member exactly once.
94
+
95
+ ## Selective Render
96
+
97
+ `render-media: true` enables the second job. It downloads the just-uploaded Gate
98
+ bundle by its content-addressed name, recomputes the Gate member root, verifies
99
+ the exact source SHA and renderer digest, and only then renders the complete
100
+ qualified scene.
101
+
102
+ The media bundle contains MP4, WebM, GIF, poster, probe, renderer manifest,
103
+ renderer checksums, passed Gate receipt, media receipt, and distribution
104
+ checksums. `render-media: false` does not weaken or skip the Gate.
105
+
106
+ ## Consumer Example
107
+
108
+ The build job must expose both the exact artifact name and the digest returned
109
+ by `upload-artifact`:
110
+
111
+ ```yaml
112
+ jobs:
113
+ build:
114
+ runs-on: ubuntu-24.04
115
+ outputs:
116
+ artifact-name: product-linux-${{ github.sha }}
117
+ artifact-digest: ${{ steps.upload.outputs.artifact-digest }}
118
+ steps:
119
+ - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09
120
+ - run: ./scripts/build-product
121
+ - id: upload
122
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
123
+ with:
124
+ name: product-linux-${{ github.sha }}
125
+ path: dist
126
+ if-no-files-found: error
127
+ retention-days: 14
128
+ compression-level: 0
129
+
130
+ auditable-demo:
131
+ needs: build
132
+ permissions:
133
+ actions: read
134
+ contents: read
135
+ uses: kungfu-systems/buildchain/.github/workflows/.auditable-demo.yml@BUILDCHAIN_EXACT_SHA
136
+ with:
137
+ source-ref: ${{ github.sha }}
138
+ source-artifact-name: ${{ needs.build.outputs.artifact-name }}
139
+ source-artifact-digest: ${{ needs.build.outputs.artifact-digest }}
140
+ adapter-path: scripts/auditable-demo-adapter
141
+ renderer-image: ghcr.io/kungfu-systems/build-images/demo-renderer@sha256:RENDERER_DIGEST
142
+ render-media: false
143
+ ```
144
+
145
+ Replace both placeholders with reviewed immutable SHAs or digests. An eligible
146
+ build should always call the reusable workflow. Selection policy changes only
147
+ `render-media`; it must never condition away the Gate job.
148
+
149
+ ## Failure Evidence
150
+
151
+ Gate and render jobs use bounded timeouts and non-cancelling concurrency.
152
+ Diagnostics artifacts are attempted with `always()` so adapter stdout/stderr
153
+ and the resolved source coordinate remain available when qualification fails.
154
+ No production deployment, publication authority, token, or provider mutation
155
+ is part of this workflow.
@@ -124,7 +124,7 @@ Limit a canary to one repository:
124
124
  ```bash
125
125
  buildchain audit github-governance \
126
126
  --repository kungfu-systems/buildchain \
127
- --target-ref dev/v2/v2.14 \
127
+ --target-ref dev/v3/v3.0 \
128
128
  --require-qualifying \
129
129
  --json
130
130
  ```
@@ -169,7 +169,7 @@ Plan one exact branch without mutation:
169
169
  ```bash
170
170
  buildchain github-governance plan \
171
171
  --repository kungfu-systems/buildchain \
172
- --branch dev/v2/v2.14 \
172
+ --branch dev/v3/v3.0 \
173
173
  --required-check check \
174
174
  --required-check-app-id check=15368 \
175
175
  --required-approvals 1 \
@@ -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.