@kungfu-tech/buildchain 2.14.19-alpha.0 → 2.14.19-alpha.2

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.
@@ -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": 55,
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",
@@ -1309,6 +1343,7 @@
1309
1343
  ],
1310
1344
  "secretCount": 8,
1311
1345
  "outputs": [
1346
+ "artifact-coordinates-json",
1312
1347
  "build-diagnostics-summary-artifact",
1313
1348
  "build-diagnostics-summary-json",
1314
1349
  "build-summary-artifact",
@@ -1354,7 +1389,7 @@
1354
1389
  "runner-preset",
1355
1390
  "trusted-event"
1356
1391
  ],
1357
- "outputCount": 44
1392
+ "outputCount": 45
1358
1393
  },
1359
1394
  {
1360
1395
  "id": "buildchain-alpha-self-dogfood",
@@ -2392,6 +2427,10 @@
2392
2427
  "id": "manual:artifact-verification-envelope",
2393
2428
  "category": "manual"
2394
2429
  },
2430
+ {
2431
+ "id": "manual:auditable-demo",
2432
+ "category": "manual"
2433
+ },
2395
2434
  {
2396
2435
  "id": "manual:binary-distribution",
2397
2436
  "category": "manual"
@@ -3925,8 +3964,8 @@
3925
3964
  "workflowRegistryPath": "dist/site/workflow-registry.json",
3926
3965
  "pageRegistryPath": "dist/site/page-registry.json",
3927
3966
  "cliRegistryDigest": "5ba7fd93a13993b05767b6f02d0626a7347f25c3d7cd4589ed4f70028c1f1bd1",
3928
- "workflowRegistryDigest": "4289e5a54fd0ef2f683636bb24337fec6456fb9fa8fb50155fa3b35c323e7c70",
3929
- "pageRegistryDigest": "23aacdefa707c4b4c0a0911741c44294411f0508d36695e7c717cfd77a4c8fb5"
3967
+ "workflowRegistryDigest": "4a627dcf07131d07095d5e6bf0a3373e55c62cf325b3f81bb156c43d31367d62",
3968
+ "pageRegistryDigest": "76226870160a4e17ebde9e166bb9d3ffe4ce4aa6f6276e992778ffee52ab9a55"
3930
3969
  },
3931
3970
  "comparison": {
3932
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-25T09:03:07.729Z",
5
- "publishedAt": "2026-07-25T09:03:07.729Z",
4
+ "generatedAt": "2026-07-25T15:55:27.133Z",
5
+ "publishedAt": "2026-07-25T15:55:27.133Z",
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": "22974861f653c475febd15dd67dcc5cc01fb6f83",
22
+ "sourceRevision": "1af0d85e3b72750f2e38107573d4e16c1dc6fcb5",
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.19-alpha.0",
35
+ "version": "2.14.19-alpha.2",
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-07-25T09:03:07.729Z",
5
- "publishedAt": "2026-07-25T09:03:07.729Z",
4
+ "generatedAt": "2026-07-25T15:55:27.133Z",
5
+ "publishedAt": "2026-07-25T15:55:27.133Z",
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": "22974861f653c475febd15dd67dcc5cc01fb6f83",
22
+ "sourceRevision": "1af0d85e3b72750f2e38107573d4e16c1dc6fcb5",
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.19-alpha.0",
40
+ "version": "2.14.19-alpha.2",
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",
@@ -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:0e79392cebea5a19c2bca5d6b3b36738a41ed61d2f61c1f09f09a5c8a28e9540"
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"
@@ -923,6 +960,7 @@
923
960
  ],
924
961
  "secretCount": 8,
925
962
  "outputs": [
963
+ "artifact-coordinates-json",
926
964
  "build-diagnostics-summary-artifact",
927
965
  "build-diagnostics-summary-json",
928
966
  "build-summary-artifact",
@@ -968,7 +1006,7 @@
968
1006
  "runner-preset",
969
1007
  "trusted-event"
970
1008
  ],
971
- "outputCount": 44,
1009
+ "outputCount": 45,
972
1010
  "surface": "channel-build-router",
973
1011
  "capabilityGroup": "reusable-build",
974
1012
  "status": "active"
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.
@@ -61,6 +61,7 @@ repository changes are patch".
61
61
 
62
62
  | Date | Action | Line | Faces | Class | Rationale | PR |
63
63
  | --- | --- | --- | --- | --- | --- | --- |
64
+ | 2026-07-25 | extend-minor | `v2.14` | auditable-demo-workflow, auditable-demo-evidence | additive | Add a consumer-neutral reusable Gate that binds exact same-run GitHub Artifacts to checked-in adapters and immutable renderer evidence, with optional media rendering only from the exact passing Gate bundle. | [#1841](https://github.com/kungfu-systems/buildchain/pull/1841) |
64
65
  | 2026-07-23 | extend-minor | `v2.14` | credential-island-macos-input, protected-signer-job, macos-signing-evidence, action-subpaths | additive | The reusable build surface can seal an exact source-bound macOS app and hand it to a protected caller environment, where an immutable Buildchain action signs, notarizes, staples, Gatekeeper-assesses, and returns an auditable additional release-candidate platform without exposing credentials to consumer lifecycle jobs. | |
65
66
  | 2026-07-20 | extend-minor | `v2.14` | anchored-derived-version-material, build-controller-evidence, release-passport, package-subpaths, release-propagation-controller | additive | Anchored/manual consumers can declare derived version witnesses that Buildchain regenerates and verifies before heavy builds, binds to exact alpha/release trees and passports, and admits during protected promotion; propagation receipts now model their existing optional consumer stages. | |
66
67
  | 2026-07-17 | extend-minor | `v2.14` | merge-queue-config, release-line-governance-inheritance | additive | Buildchain config can explicitly enable, inherit, or disable exact dev-channel merge queues, and release-line bootstrap reconciles the declared or inherited policy before moving the repository default branch. | |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kungfu-tech/buildchain",
3
- "version": "2.14.19-alpha.0",
3
+ "version": "2.14.19-alpha.2",
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",
@@ -301,6 +301,51 @@ export function createBuildchainContractWorld({
301
301
  "channel-aware artifact host facts are checked against the deploy plan before adapter side effects",
302
302
  ],
303
303
  }),
304
+ surface(root, {
305
+ id: "auditable-demo",
306
+ kind: "workflow",
307
+ path: ".github/workflows/.auditable-demo.yml",
308
+ publicRef: `${pkg.repository ? "kungfu-systems/buildchain" : "buildchain"}/.github/workflows/.auditable-demo.yml@${majorLine}`,
309
+ requiredInputs: [
310
+ "source-artifact-name",
311
+ "source-artifact-digest",
312
+ "adapter-path",
313
+ "renderer-image",
314
+ ],
315
+ requiredOutputs: [
316
+ "source-sha",
317
+ "gate-artifact-name",
318
+ "gate-artifact-id",
319
+ "gate-artifact-digest",
320
+ "gate-artifact-url",
321
+ "gate-root",
322
+ "media-artifact-name",
323
+ "media-artifact-id",
324
+ "media-artifact-digest",
325
+ "media-artifact-url",
326
+ "media-root",
327
+ ],
328
+ breakingDefaults: {
329
+ trustedEventRequired: true,
330
+ renderMediaDefault: false,
331
+ artifactRetentionDaysDefault: 14,
332
+ gatePolicy: "required-before-selective-render",
333
+ },
334
+ optionalInputs: [
335
+ "buildchain-repository",
336
+ "source-ref",
337
+ "render-media",
338
+ "artifact-retention-days",
339
+ "require-trusted-event",
340
+ ],
341
+ guarantees: [
342
+ "the source GitHub Artifact is admitted by exact same-run name and archive digest",
343
+ "the checked-in consumer adapter runs from the exact consumer source with a disposable home and reduced environment",
344
+ "every invocation runs an immutable network-disabled renderer smoke before emitting a qualified Gate bundle",
345
+ "complete media rendering is optional and consumes only an exact passing Gate bundle",
346
+ "Gate and media bundles expose both GitHub Artifact archive coordinates and deterministic member roots",
347
+ ],
348
+ }),
304
349
  surface(root, {
305
350
  id: "promote-buildchain-ref-action",
306
351
  kind: "action",
@@ -13,6 +13,7 @@ export const BUILDCHAIN_KFD_COLLABORATION_INTERFACE_CONTRACT = "kungfu-buildchai
13
13
 
14
14
  export const BUILDCHAIN_AGENT_MANUALS = Object.freeze([
15
15
  { id: "map", title: "Buildchain documentation map", path: "docs/MAP.md", plane: "use" },
16
+ { id: "auditable-demo", title: "Auditable demo artifact pipeline", path: "docs/auditable-demo.md", plane: "verify" },
16
17
  { id: "install", title: "Install and verify Buildchain", path: "docs/install.md", plane: "use" },
17
18
  { id: "release-passport", title: "Release Passport protocol", path: "docs/release-passport.md", plane: "verify" },
18
19
  { id: "controller-evidence", title: "Controller evidence contract", path: "docs/controller-evidence.md", plane: "verify" },
@@ -4,6 +4,7 @@ import path from "node:path";
4
4
  import { createPublicationAuthorityRegistry } from "./publication-authority.js";
5
5
 
6
6
  const DESCRIPTORS = Object.freeze([
7
+ [".github/workflows/.auditable-demo.yml", "non-publication-oidc"],
7
8
  [".github/workflows/.build.yml", "non-publication-oidc"],
8
9
  [".github/workflows/.release-candidate-promote.yml", "product-publication", true, ["npm-publish", "github-release", "channel-ref"], "trusted-publishing", "none", "fixed", "caller-bound"],
9
10
  [".github/workflows/.publication-authority.yml", "evidence-publication"],