@kungfu-tech/buildchain 4.1.6-alpha.0 → 4.1.7-alpha.0

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 (101) hide show
  1. package/AGENTS.md +7 -5
  2. package/CONTRIBUTING.md +12 -6
  3. package/README.md +9 -5
  4. package/architecture/action-taxonomy.json +2 -0
  5. package/architecture/agent-change-map.md +6 -1
  6. package/architecture/build-orchestration.json +7 -1
  7. package/architecture/ci-lane-change-budget.json +1836 -0
  8. package/architecture/consumer-upgrade.json +6482 -0
  9. package/architecture/internal-capabilities.json +5 -2
  10. package/architecture/maintainability-debt.json +18 -10
  11. package/architecture/maintainability-policy.json +9 -9
  12. package/architecture/release-topology.json +10 -1
  13. package/architecture/universal-workflow-bootstrap.json +88 -18
  14. package/architecture/universal-workflow-capability-policy.json +2 -2
  15. package/architecture/workflow-taxonomy.json +2 -1
  16. package/contracts/dev-delivery-authority-v2.schema.json +29 -3
  17. package/contracts/fixtures/consumer-upgrade/build-v4.0.0.json +764 -0
  18. package/contracts/fixtures/consumer-upgrade/consumer-calls.json +447 -0
  19. package/contracts/fixtures/consumer-upgrade/dev-delivery-identity-v4.0.0.json +27 -0
  20. package/contracts/fixtures/consumer-upgrade/dev-pr-auto-merge-v4.0.0.json +256 -0
  21. package/contracts/fixtures/consumer-upgrade/dev-pr-auto-merge-v4.0.9.json +358 -0
  22. package/contracts/fixtures/consumer-upgrade/release-v4.0.0.json +815 -0
  23. package/contracts/promotion-invocation-v1.schema.json +5 -0
  24. package/dist/site/buildchain-contract.json +40 -23
  25. package/dist/site/buildchain-site.json +20 -20
  26. package/dist/site/capability-registry.json +5 -5
  27. package/dist/site/controller-registry.json +17 -5
  28. package/dist/site/kfd-claims.json +1376 -143
  29. package/dist/site/kfd-upstream-aggregate.json +1 -1
  30. package/dist/site/manual-registry.json +4 -4
  31. package/dist/site/node-api-registry.json +22 -22
  32. package/dist/site/page-registry.json +14 -14
  33. package/dist/site/public-surface-audit.json +1733 -101
  34. package/dist/site/publication-authority-registry.json +651 -32
  35. package/dist/site/publication-registry.json +1 -1
  36. package/dist/site/schemas/dev-delivery-authority-v2.schema.json +29 -3
  37. package/dist/site/site-manifest.json +5 -5
  38. package/dist/site/workflow-registry.json +2501 -149
  39. package/docs/MAP.md +5 -4
  40. package/docs/code-organization.md +11 -8
  41. package/docs/getting-started.md +31 -2
  42. package/docs/migration-inventory.md +8 -6
  43. package/docs/node-api-reference.md +36 -36
  44. package/docs/workflow-path-migration.md +8 -7
  45. package/package.json +1 -1
  46. package/packages/core/build/artifact/contracts.js +10 -2
  47. package/packages/core/build/artifact/transport.js +1 -1
  48. package/packages/core/build/artifact/upload.js +2 -2
  49. package/packages/core/build/plan/action.js +2 -0
  50. package/packages/core/build/plan/admission.js +9 -3
  51. package/packages/core/build/plan/compatibility-artifacts.js +47 -0
  52. package/packages/core/build/plan/compatibility-plan.js +121 -0
  53. package/packages/core/build/plan/compatibility.js +162 -0
  54. package/packages/core/build/plan/configuration.js +10 -37
  55. package/packages/core/build/plan/identity.js +42 -0
  56. package/packages/core/build/plan/lifecycle.js +1 -0
  57. package/packages/core/build/plan/resolve.js +2 -0
  58. package/packages/core/build/summary/aggregation.js +4 -2
  59. package/packages/core/build/summary/compatibility.js +24 -0
  60. package/packages/core/build/summary/finalization.js +18 -0
  61. package/packages/core/build/summary/historical-outputs.js +88 -0
  62. package/packages/core/contracts/runtime-contract-inspection.js +8 -0
  63. package/packages/core/dev-delivery/candidate/submission.js +2 -1
  64. package/packages/core/dev-delivery/commands/dev-delivery-authority-command-adapters.mjs +2 -1
  65. package/packages/core/dev-delivery/commands/dev-delivery-authority.mjs +6 -5
  66. package/packages/core/dev-delivery/commands/dev-delivery-warrant-options.mjs +22 -3
  67. package/packages/core/dev-delivery/dev-delivery-candidate-identity.js +13 -4
  68. package/packages/core/dev-delivery/dev-delivery-warrant.js +4 -1
  69. package/packages/core/dev-delivery/warrant/handoff.js +2 -1
  70. package/packages/core/dev-delivery/warrant/transitions.js +2 -2
  71. package/packages/core/governance/buildchain-publication-authority.js +5 -9
  72. package/packages/core/release/github-release-metadata.js +58 -0
  73. package/packages/core/release/promote-candidate/action.js +4 -2
  74. package/packages/core/release/promote-candidate/preparation.js +6 -0
  75. package/packages/core/release/promote-candidate/publication.js +36 -0
  76. package/packages/core/release/promote-candidate/release-documents.js +1 -1
  77. package/packages/core/release/promotion/candidate.js +4 -2
  78. package/packages/core/release/promotion/compatibility-context.js +93 -0
  79. package/packages/core/release/promotion/compatibility-qualification.js +48 -0
  80. package/packages/core/release/promotion/compatibility.js +141 -0
  81. package/packages/core/release/promotion/historical-evidence-action.js +17 -0
  82. package/packages/core/release/promotion/historical-evidence-files.js +112 -0
  83. package/packages/core/release/promotion/historical-evidence.js +231 -0
  84. package/packages/core/release/promotion/qualification.js +12 -1
  85. package/packages/core/release/promotion/routing.js +3 -2
  86. package/packages/core/release/promotion-request.js +31 -2
  87. package/packages/core/release/release-tail-provider-adapters.js +18 -0
  88. package/packages/core/runtime/entry/actions.js +4 -1
  89. package/packages/core/runtime/entry/compatibility.js +53 -0
  90. package/packages/core/workflow/engine/conformance.js +7 -3
  91. package/packages/core/workflow/pipeline/controller.js +26 -26
  92. package/scripts/check-dev-delivery-actions.mjs +12 -0
  93. package/scripts/check-inventory.mjs +1 -1
  94. package/scripts/check-public-dogfood-contract.mjs +2 -0
  95. package/scripts/check-release-topology.mjs +5 -1
  96. package/scripts/check-self-consumer-contract.mjs +5 -1
  97. package/scripts/generate-bootstrap-admission.mjs +20 -0
  98. package/scripts/generate-site-bundle.mjs +5 -5
  99. package/scripts/generate-workflow-taxonomy.mjs +17 -0
  100. package/scripts/maintainability-metrics.mjs +30 -2
  101. package/scripts/maintainability-public-surface.mjs +5 -3
@@ -0,0 +1,764 @@
1
+ {
2
+ "inputs": {
3
+ "buildchain-channel": {
4
+ "description": "Buildchain runtime channel: auto, alpha, or stable",
5
+ "default": "auto",
6
+ "type": "string",
7
+ "required": false
8
+ },
9
+ "buildchain-alpha-contract-lock-path": {
10
+ "description": "Consumer-owned contract lock selected for the alpha channel",
11
+ "default": ".buildchain/alpha-contract-lock.json",
12
+ "type": "string",
13
+ "required": false
14
+ },
15
+ "buildchain-stable-contract-lock-path": {
16
+ "description": "Consumer-owned contract lock selected for the stable channel",
17
+ "default": ".buildchain/contract-lock.json",
18
+ "type": "string",
19
+ "required": false
20
+ },
21
+ "buildchain-repository": {
22
+ "default": "kungfu-systems/buildchain",
23
+ "type": "string",
24
+ "required": false
25
+ },
26
+ "buildchain-ref": {
27
+ "description": "Official floating Buildchain channel, protected authority, or a temporary train/SHA for trusted manual validation.",
28
+ "default": "",
29
+ "type": "string",
30
+ "required": false
31
+ },
32
+ "buildchain-expected-channel": {
33
+ "description": "Explicit stable or alpha lane expected by a trusted channel router when the workflow shell ref is opaque",
34
+ "default": "",
35
+ "type": "string",
36
+ "required": false
37
+ },
38
+ "buildchain-expected-major": {
39
+ "description": "Explicit Buildchain major expected by a trusted channel router when the workflow shell ref is opaque",
40
+ "default": "",
41
+ "type": "string",
42
+ "required": false
43
+ },
44
+ "buildchain-contract-lock-path": {
45
+ "description": "Consumer-owned Buildchain contract lock path",
46
+ "default": "",
47
+ "type": "string",
48
+ "required": false
49
+ },
50
+ "buildchain-contract-compatibility-policy": {
51
+ "description": "Contract compatibility policy: major-compatible, allow-additive, or exact",
52
+ "default": "major-compatible",
53
+ "type": "string",
54
+ "required": false
55
+ },
56
+ "buildchain-contract-drift-issue-mode": {
57
+ "description": "Consumer issue behavior for Buildchain floating-ref contract drift: off, breaking-only, or compatible-and-breaking",
58
+ "default": "compatible-and-breaking",
59
+ "type": "string",
60
+ "required": false
61
+ },
62
+ "working-directory": {
63
+ "default": ".",
64
+ "type": "string",
65
+ "required": false
66
+ },
67
+ "runner-preset": {
68
+ "description": "Runner preset: github-hosted, kungfu-v4-self-hosted, aws-us-codebuild-linux, aws-us-ec2-windows-jit, aws-us-ec2-macos-jit, or custom with platforms-json",
69
+ "default": "github-hosted",
70
+ "type": "string",
71
+ "required": false
72
+ },
73
+ "aws-codebuild-project": {
74
+ "description": "Required CodeBuild project name for the explicit aws-us-codebuild-linux burst preset",
75
+ "default": "",
76
+ "type": "string",
77
+ "required": false
78
+ },
79
+ "aws-ec2-windows-runner-label": {
80
+ "description": "Required unique card-scoped JIT label for the explicit aws-us-ec2-windows-jit burst preset",
81
+ "default": "",
82
+ "type": "string",
83
+ "required": false
84
+ },
85
+ "aws-ec2-macos-runner-label": {
86
+ "description": "Required unique campaign-scoped JIT label for the explicit aws-us-ec2-macos-jit burst preset",
87
+ "default": "",
88
+ "type": "string",
89
+ "required": false
90
+ },
91
+ "platforms-json": {
92
+ "description": "Optional custom JSON array of platform objects: id, name, runner JSON string, and optional githubHosted boolean",
93
+ "default": "",
94
+ "type": "string",
95
+ "required": false
96
+ },
97
+ "self-hosted-offline-fallback": {
98
+ "description": "Route each supported exact-label self-hosted lane to its GitHub-hosted runner when no matching runner is online",
99
+ "default": false,
100
+ "type": "boolean",
101
+ "required": false
102
+ },
103
+ "control-runner-json": {
104
+ "description": "JSON runner-label array for trusted control-plane jobs",
105
+ "default": "[\"ubuntu-24.04\"]",
106
+ "type": "string",
107
+ "required": false
108
+ },
109
+ "artifact-finalization-command": {
110
+ "description": "Optional consumer verification command over final artifact bytes before manifest resealing",
111
+ "default": "",
112
+ "type": "string",
113
+ "required": false
114
+ },
115
+ "artifact-finalization-on-platform": {
116
+ "description": "Run trusted artifact finalization on each GitHub-hosted platform runner instead of the control runner",
117
+ "default": false,
118
+ "type": "boolean",
119
+ "required": false
120
+ },
121
+ "fail-fast": {
122
+ "description": "Cancel sibling platform lanes after a required matrix failure; false retains all-platform diagnostics",
123
+ "default": false,
124
+ "type": "boolean",
125
+ "required": false
126
+ },
127
+ "linux-container-preset": {
128
+ "description": "Optional Linux job container preset: kungfu-verify, none, or custom with linux-container-image",
129
+ "default": "",
130
+ "type": "string",
131
+ "required": false
132
+ },
133
+ "linux-container-image": {
134
+ "description": "Optional explicit Linux job container image, preferably pinned by digest",
135
+ "default": "",
136
+ "type": "string",
137
+ "required": false
138
+ },
139
+ "require-trusted-event": {
140
+ "default": true,
141
+ "type": "boolean",
142
+ "required": false
143
+ },
144
+ "untrusted-policy": {
145
+ "description": "fail or skip when an untrusted fork event asks for build execution",
146
+ "default": "fail",
147
+ "type": "string",
148
+ "required": false
149
+ },
150
+ "publish-channel": {
151
+ "description": "Publish channel requested by the caller: none, alpha, release, major, or a custom channel from publish-refs-json",
152
+ "default": "none",
153
+ "type": "string",
154
+ "required": false
155
+ },
156
+ "publish-refs-json": {
157
+ "description": "Optional JSON object mapping publish channels to allowed Git ref regular expressions",
158
+ "default": "",
159
+ "type": "string",
160
+ "required": false
161
+ },
162
+ "publish-source-ref": {
163
+ "description": "Optional source branch such as publish-gate/alpha/<line>/<version> to resolve and lock before build",
164
+ "default": "",
165
+ "type": "string",
166
+ "required": false
167
+ },
168
+ "publish-anchor-request-json": {
169
+ "description": "Required JSON request when publish-source-ref resolves to publish-gate/anchor",
170
+ "default": "",
171
+ "type": "string",
172
+ "required": false
173
+ },
174
+ "publish-registry": {
175
+ "description": "Registry recorded in the resolved publish source manifest",
176
+ "default": "https://registry.npmjs.org/",
177
+ "type": "string",
178
+ "required": false
179
+ },
180
+ "setup-node": {
181
+ "default": true,
182
+ "type": "boolean",
183
+ "required": false
184
+ },
185
+ "node-version": {
186
+ "default": "24",
187
+ "type": "string",
188
+ "required": false
189
+ },
190
+ "setup-rust": {
191
+ "description": "Install a Rust toolchain for native lifecycle jobs",
192
+ "default": false,
193
+ "type": "boolean",
194
+ "required": false
195
+ },
196
+ "rust-toolchain": {
197
+ "description": "Rust toolchain installed when setup-rust is enabled",
198
+ "default": "stable",
199
+ "type": "string",
200
+ "required": false
201
+ },
202
+ "rustup-dist-server": {
203
+ "description": "Optional rustup distribution mirror; empty uses the official Rust server",
204
+ "default": "",
205
+ "type": "string",
206
+ "required": false
207
+ },
208
+ "rustup-update-root": {
209
+ "description": "Optional rustup self-update mirror; empty uses the official Rust server",
210
+ "default": "",
211
+ "type": "string",
212
+ "required": false
213
+ },
214
+ "cargo-registry-index": {
215
+ "description": "Optional crates.io-compatible Cargo registry index; empty uses the Cargo default",
216
+ "default": "",
217
+ "type": "string",
218
+ "required": false
219
+ },
220
+ "install-command": {
221
+ "default": "",
222
+ "type": "string",
223
+ "required": false
224
+ },
225
+ "build-command": {
226
+ "default": "",
227
+ "type": "string",
228
+ "required": false
229
+ },
230
+ "verify-command": {
231
+ "default": "",
232
+ "type": "string",
233
+ "required": false
234
+ },
235
+ "verify-substage-evidence-path": {
236
+ "description": "Optional lifecycle verify substage evidence path produced by the consumer command",
237
+ "default": "",
238
+ "type": "string",
239
+ "required": false
240
+ },
241
+ "kfd-agent-hub": {
242
+ "description": "Agent Hub conformance mode: off or auto. Auto reads .buildchain/kfd/agent-hub.json and runs the fixed KFD suite.",
243
+ "default": "off",
244
+ "type": "string",
245
+ "required": false
246
+ },
247
+ "lifecycle-timeout-minutes": {
248
+ "description": "Maximum minutes for the build matrix job and fallback timeout for each lifecycle stage",
249
+ "default": 120,
250
+ "type": "number",
251
+ "required": false
252
+ },
253
+ "require-install": {
254
+ "default": false,
255
+ "type": "boolean",
256
+ "required": false
257
+ },
258
+ "require-build": {
259
+ "default": true,
260
+ "type": "boolean",
261
+ "required": false
262
+ },
263
+ "require-verify": {
264
+ "default": false,
265
+ "type": "boolean",
266
+ "required": false
267
+ },
268
+ "artifact-name": {
269
+ "default": "buildchain-artifact",
270
+ "type": "string",
271
+ "required": false
272
+ },
273
+ "artifact-name-template": {
274
+ "description": "Artifact name template with placeholders: {artifact}, {platform}, {sha}, {shortSha}, {runId}, {runAttempt}",
275
+ "default": "{artifact}-{platform}-{sha}",
276
+ "type": "string",
277
+ "required": false
278
+ },
279
+ "artifact-paths": {
280
+ "default": "dist\nbuild/stage\n",
281
+ "type": "string",
282
+ "required": false
283
+ },
284
+ "pre-upload-transport-smoke-scenario-path": {
285
+ "description": "Optional declarative demo scenario, relative to working-directory, whose transport smoke must pass before Linux artifact upload",
286
+ "default": "",
287
+ "type": "string",
288
+ "required": false
289
+ },
290
+ "pre-upload-transport-smoke-artifact-root": {
291
+ "description": "Artifact root, relative to working-directory, used by the pre-upload transport simulation",
292
+ "default": ".",
293
+ "type": "string",
294
+ "required": false
295
+ },
296
+ "credential-island-macos-app-path": {
297
+ "description": "Optional exact .app path to seal for a protected macOS credential-island job",
298
+ "default": "",
299
+ "type": "string",
300
+ "required": false
301
+ },
302
+ "credential-island-environment": {
303
+ "description": "Protected environment used by the built-in signer; leave empty for caller-owned signing",
304
+ "default": "",
305
+ "type": "string",
306
+ "required": false
307
+ },
308
+ "credential-island-caller-owned": {
309
+ "description": "Seal and export the macOS input/runtime for a caller-owned protected signing job instead of running the built-in signer",
310
+ "default": false,
311
+ "type": "boolean",
312
+ "required": false
313
+ },
314
+ "credential-island-macos-platform-id": {
315
+ "description": "macOS build platform whose sealed app is admitted to the credential island",
316
+ "default": "macos-arm64",
317
+ "type": "string",
318
+ "required": false
319
+ },
320
+ "github-artifact-attestation-subject-path": {
321
+ "description": "Optional exact artifact path to bind to a GitHub keyless attestation policy after the final platform manifest is sealed",
322
+ "default": "",
323
+ "type": "string",
324
+ "required": false
325
+ },
326
+ "github-artifact-attestation-signer-sha": {
327
+ "description": "Exact 40-hex Buildchain commit containing the trusted reusable signer workflow",
328
+ "default": "",
329
+ "type": "string",
330
+ "required": false
331
+ },
332
+ "github-artifact-attestation-platform-id": {
333
+ "description": "Linux platform id that owns github-artifact-attestation-subject-path",
334
+ "default": "linux-x64",
335
+ "type": "string",
336
+ "required": false
337
+ },
338
+ "release-candidate": {
339
+ "description": "Generate and upload a PR-stage release-candidate passport after the full platform matrix succeeds",
340
+ "default": false,
341
+ "type": "boolean",
342
+ "required": false
343
+ },
344
+ "expected-artifacts-json": {
345
+ "description": "Optional JSON expectation contract for final artifact files",
346
+ "default": "",
347
+ "type": "string",
348
+ "required": false
349
+ },
350
+ "process-summary-path": {
351
+ "description": "Optional process sampler summary JSON path, relative to workspace, to embed in final diagnostics",
352
+ "default": "",
353
+ "type": "string",
354
+ "required": false
355
+ },
356
+ "sample-process-tree": {
357
+ "description": "Wrap the build lifecycle with the process tree sampler",
358
+ "default": true,
359
+ "type": "boolean",
360
+ "required": false
361
+ },
362
+ "process-sample-interval-ms": {
363
+ "description": "Process sampler interval in milliseconds",
364
+ "default": 15000,
365
+ "type": "number",
366
+ "required": false
367
+ },
368
+ "requested-parallelism": {
369
+ "description": "Optional expected build parallelism recorded in process diagnostics",
370
+ "default": 0,
371
+ "type": "number",
372
+ "required": false
373
+ },
374
+ "artifact-retention-days": {
375
+ "default": 14,
376
+ "type": "number",
377
+ "required": false
378
+ },
379
+ "artifact-compression-level": {
380
+ "description": "GitHub Artifact payload compression level (0-9); zero avoids recompressing release archives and reduces signed-URL exposure",
381
+ "default": 0,
382
+ "type": "number",
383
+ "required": false
384
+ },
385
+ "artifact-signing-request-upload-no-proxy": {
386
+ "description": "Optional NO_PROXY value scoped only to Buildchain-owned signing request uploads; signed-result downloads retain the runner route",
387
+ "default": "",
388
+ "type": "string",
389
+ "required": false
390
+ },
391
+ "artifact-transfer-mode": {
392
+ "description": "Artifact transfer policy: GitHub-hosted platforms always upload natively; other platforms use github-artifacts or s3-to-github-artifacts",
393
+ "default": "github-artifacts",
394
+ "type": "string",
395
+ "required": false
396
+ },
397
+ "artifact-relay-s3-bucket": {
398
+ "description": "Optional S3 bucket for artifact relay. Empty may use BUILDCHAIN_ARTIFACT_RELAY_S3_BUCKET repo/org variable.",
399
+ "default": "",
400
+ "type": "string",
401
+ "required": false
402
+ },
403
+ "artifact-relay-s3-region": {
404
+ "description": "Optional S3 region for artifact relay. Empty may use BUILDCHAIN_ARTIFACT_RELAY_S3_REGION repo/org variable.",
405
+ "default": "",
406
+ "type": "string",
407
+ "required": false
408
+ },
409
+ "artifact-relay-s3-prefix": {
410
+ "description": "Optional S3 key prefix for artifact relay. Empty may use BUILDCHAIN_ARTIFACT_RELAY_S3_PREFIX repo/org variable.",
411
+ "default": "",
412
+ "type": "string",
413
+ "required": false
414
+ },
415
+ "artifact-relay-s3-role-arn": {
416
+ "description": "Optional shared OIDC role ARN for S3 relay upload/download. Prefer repo/org variables or secrets.",
417
+ "default": "",
418
+ "type": "string",
419
+ "required": false
420
+ },
421
+ "artifact-relay-s3-upload-role-arn": {
422
+ "description": "Optional upload OIDC role ARN for self-hosted build runners.",
423
+ "default": "",
424
+ "type": "string",
425
+ "required": false
426
+ },
427
+ "artifact-relay-s3-download-role-arn": {
428
+ "description": "Optional download OIDC role ARN for the GitHub-hosted relay runner.",
429
+ "default": "",
430
+ "type": "string",
431
+ "required": false
432
+ },
433
+ "artifact-relay-s3-oidc-audience": {
434
+ "description": "Optional OIDC audience for S3 relay roles. Defaults to sts.amazonaws.com.cn for cn-* regions, otherwise sts.amazonaws.com.",
435
+ "default": "",
436
+ "type": "string",
437
+ "required": false
438
+ },
439
+ "checkout-cache-mode": {
440
+ "description": "Locked source checkout cache mode: off, auto, or require",
441
+ "default": "off",
442
+ "type": "string",
443
+ "required": false
444
+ },
445
+ "checkout-cache-mirror-url-template": {
446
+ "description": "Trusted local/LAN Git mirror URL template. Supports {owner}, {repo}, {repository}, {repositorySlug}, and {sha}.",
447
+ "default": "",
448
+ "type": "string",
449
+ "required": false
450
+ },
451
+ "checkout-cache-reference-repository-template": {
452
+ "description": "Trusted runner-local bare reference repository template. Supports {owner}, {repo}, {repository}, {repositorySlug}, and {sha}.",
453
+ "default": "",
454
+ "type": "string",
455
+ "required": false
456
+ },
457
+ "checkout-cache-fallback": {
458
+ "description": "Fallback when checkout cache misses: github or fail",
459
+ "default": "github",
460
+ "type": "string",
461
+ "required": false
462
+ },
463
+ "checkout-cache-timeout-seconds": {
464
+ "description": "Timeout for each trusted cache transport attempt",
465
+ "default": 60,
466
+ "type": "number",
467
+ "required": false
468
+ },
469
+ "checkout-cache-github-timeout-seconds": {
470
+ "description": "Timeout for each GitHub fallback fetch attempt",
471
+ "default": 600,
472
+ "type": "number",
473
+ "required": false
474
+ },
475
+ "checkout-cache-fetch-attempts": {
476
+ "description": "Maximum bounded attempts for retryable GitHub fallback fetch failures",
477
+ "default": 3,
478
+ "type": "number",
479
+ "required": false
480
+ },
481
+ "checkout-history-mode": {
482
+ "description": "Locked consumer source history: shallow or full. Full retains ancestry required by source-history gates.",
483
+ "default": "shallow",
484
+ "type": "string",
485
+ "required": false
486
+ },
487
+ "shifu-cache-profile-ref": {
488
+ "description": "Opaque trusted Shifu cache profile reference passed to lifecycle commands without interpretation",
489
+ "default": "",
490
+ "type": "string",
491
+ "required": false
492
+ },
493
+ "shifu-cache-profile-digest": {
494
+ "description": "Opaque expected Shifu cache profile digest passed to lifecycle commands without interpretation",
495
+ "default": "",
496
+ "type": "string",
497
+ "required": false
498
+ },
499
+ "cache-dependency-lock-root": {
500
+ "description": "Optional consumer-owned exact dependency-lock root bound into structured cache evidence",
501
+ "default": "",
502
+ "type": "string",
503
+ "required": false
504
+ },
505
+ "cache-toolchain-root": {
506
+ "description": "Optional consumer-owned exact toolchain root bound into structured cache evidence",
507
+ "default": "",
508
+ "type": "string",
509
+ "required": false
510
+ },
511
+ "cache-policy-root": {
512
+ "description": "Optional consumer-owned exact qualification policy root bound into structured cache evidence",
513
+ "default": "",
514
+ "type": "string",
515
+ "required": false
516
+ },
517
+ "compiler-cache-provider": {
518
+ "description": "Audited compiler cache provider prepared before build: none or sccache",
519
+ "default": "none",
520
+ "type": "string",
521
+ "required": false
522
+ },
523
+ "compiler-cache-platforms-json": {
524
+ "description": "JSON array of platform ids on which compiler-cache preparation is enabled",
525
+ "default": "[]",
526
+ "type": "string",
527
+ "required": false
528
+ },
529
+ "compiler-cache-required": {
530
+ "description": "Fail the selected platform before build when the compiler cache cannot be prepared",
531
+ "default": false,
532
+ "type": "boolean",
533
+ "required": false
534
+ },
535
+ "gate-profile-aggregate-json": {
536
+ "description": "Optional qualifying buildchain.shifu-gate-aggregate/v1 JSON from the reusable Gate workflow",
537
+ "default": "",
538
+ "type": "string",
539
+ "required": false
540
+ },
541
+ "release-candidate-family-evidence-json": {
542
+ "description": "Optional exact Initiative-family release evidence JSON embedded in the release-candidate passport",
543
+ "default": "",
544
+ "type": "string",
545
+ "required": false
546
+ }
547
+ },
548
+ "secrets": {
549
+ "BUILDCHAIN_ARTIFACT_RELAY_S3_ROLE_ARN": {
550
+ "required": false
551
+ },
552
+ "BUILDCHAIN_ARTIFACT_RELAY_S3_UPLOAD_ROLE_ARN": {
553
+ "required": false
554
+ },
555
+ "BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN": {
556
+ "required": false
557
+ },
558
+ "BUILDCHAIN_MACOS_CERTIFICATE_P12_BASE64": {
559
+ "required": false
560
+ },
561
+ "BUILDCHAIN_MACOS_CERTIFICATE_PASSWORD": {
562
+ "required": false
563
+ },
564
+ "BUILDCHAIN_MACOS_NOTARY_API_KEY_P8_BASE64": {
565
+ "required": false
566
+ },
567
+ "BUILDCHAIN_MACOS_NOTARY_API_KEY_ID": {
568
+ "required": false
569
+ },
570
+ "BUILDCHAIN_MACOS_NOTARY_API_ISSUER": {
571
+ "required": false
572
+ },
573
+ "BUILDCHAIN_PROMOTION_TOKEN": {
574
+ "description": "Standard Buildchain control-plane token used only for protected runner inventory, dispatch, and central authority retrieval",
575
+ "required": false
576
+ }
577
+ },
578
+ "outputs": {
579
+ "buildchain-channel": {
580
+ "description": "Resolved Buildchain channel: alpha or stable",
581
+ "value": "${{ jobs.resolve-channel.outputs.channel }}"
582
+ },
583
+ "buildchain-channel-selection-source": {
584
+ "description": "Evidence source used to select the Buildchain channel",
585
+ "value": "${{ jobs.resolve-channel.outputs.selection-source }}"
586
+ },
587
+ "buildchain-channel-reason": {
588
+ "description": "Human-readable Buildchain channel selection reason",
589
+ "value": "${{ jobs.resolve-channel.outputs.reason }}"
590
+ },
591
+ "runner-preset": {
592
+ "description": "Resolved runner preset name",
593
+ "value": "${{ jobs.override.outputs.runner-preset || jobs.alpha.outputs.runner-preset || jobs.stable.outputs.runner-preset }}"
594
+ },
595
+ "platforms-json": {
596
+ "description": "Resolved platform matrix JSON",
597
+ "value": "${{ jobs.override.outputs.platforms-json || jobs.alpha.outputs.platforms-json || jobs.stable.outputs.platforms-json }}"
598
+ },
599
+ "runner-routing-json": {
600
+ "description": "De-identified self-hosted availability and offline fallback decision",
601
+ "value": "${{ jobs.override.outputs.runner-routing-json || jobs.alpha.outputs.runner-routing-json || jobs.stable.outputs.runner-routing-json }}"
602
+ },
603
+ "platform-count": {
604
+ "description": "Resolved platform count",
605
+ "value": "${{ jobs.override.outputs.platform-count || jobs.alpha.outputs.platform-count || jobs.stable.outputs.platform-count }}"
606
+ },
607
+ "linux-container-enabled": {
608
+ "description": "Whether Linux build platforms are routed through a job container",
609
+ "value": "${{ jobs.override.outputs.linux-container-enabled || jobs.alpha.outputs.linux-container-enabled || jobs.stable.outputs.linux-container-enabled }}"
610
+ },
611
+ "linux-container-image": {
612
+ "description": "Resolved Linux job container image",
613
+ "value": "${{ jobs.override.outputs.linux-container-image || jobs.alpha.outputs.linux-container-image || jobs.stable.outputs.linux-container-image }}"
614
+ },
615
+ "build-summary-artifact": {
616
+ "description": "Uploaded aggregate build summary artifact name",
617
+ "value": "${{ jobs.override.outputs.summary-artifact-name || jobs.alpha.outputs.summary-artifact-name || jobs.stable.outputs.summary-artifact-name }}"
618
+ },
619
+ "credential-island-macos-artifact": {
620
+ "description": "Uploaded signed macOS payload artifact name when the credential island is enabled",
621
+ "value": "${{ jobs.override.outputs.credential-island-macos-artifact || jobs.alpha.outputs.credential-island-macos-artifact || jobs.stable.outputs.credential-island-macos-artifact }}"
622
+ },
623
+ "credential-island-macos-manifest-artifact": {
624
+ "description": "Uploaded signed macOS manifest artifact name when the credential island is enabled",
625
+ "value": "${{ jobs.override.outputs.credential-island-macos-manifest-artifact || jobs.alpha.outputs.credential-island-macos-manifest-artifact || jobs.stable.outputs.credential-island-macos-manifest-artifact }}"
626
+ },
627
+ "build-diagnostics-summary-artifact": {
628
+ "description": "Uploaded aggregate diagnostics summary artifact name",
629
+ "value": "${{ jobs.override.outputs.diagnostics-summary-artifact-name || jobs.alpha.outputs.diagnostics-summary-artifact-name || jobs.stable.outputs.diagnostics-summary-artifact-name }}"
630
+ },
631
+ "release-candidate-passport-artifact": {
632
+ "description": "Uploaded release-candidate passport artifact name when release-candidate is enabled",
633
+ "value": "${{ jobs.override.outputs.release-candidate-passport-artifact-name || jobs.alpha.outputs.release-candidate-passport-artifact-name || jobs.stable.outputs.release-candidate-passport-artifact-name }}"
634
+ },
635
+ "release-candidate-artifact": {
636
+ "description": "Uploaded release-candidate passport artifact name when release-candidate is enabled",
637
+ "value": "${{ jobs.override.outputs.release-candidate-passport-artifact-name || jobs.alpha.outputs.release-candidate-passport-artifact-name || jobs.stable.outputs.release-candidate-passport-artifact-name }}"
638
+ },
639
+ "release-candidate-passport-json": {
640
+ "description": "Compact release-candidate passport JSON when release-candidate is enabled",
641
+ "value": "${{ jobs.override.outputs.release-candidate-passport-json || jobs.alpha.outputs.release-candidate-passport-json || jobs.stable.outputs.release-candidate-passport-json }}"
642
+ },
643
+ "build-summary-json": {
644
+ "description": "Compact aggregate build summary JSON",
645
+ "value": "${{ jobs.override.outputs.artifact-summary-json || jobs.alpha.outputs.artifact-summary-json || jobs.stable.outputs.artifact-summary-json }}"
646
+ },
647
+ "artifact-coordinates-json": {
648
+ "description": "Producer-owned exact GitHub Artifact coordinates for every resolved build platform",
649
+ "value": "${{ jobs.override.outputs.artifact-coordinates-json || jobs.alpha.outputs.artifact-coordinates-json || jobs.stable.outputs.artifact-coordinates-json }}"
650
+ },
651
+ "build-diagnostics-summary-json": {
652
+ "description": "Compact aggregate diagnostics summary JSON with lifecycle, diagnostics contract warning, and sidecar manifest warning totals",
653
+ "value": "${{ jobs.override.outputs.diagnostics-summary-json || jobs.alpha.outputs.diagnostics-summary-json || jobs.stable.outputs.diagnostics-summary-json }}"
654
+ },
655
+ "trusted-event": {
656
+ "description": "Whether the event is trusted enough to run build jobs",
657
+ "value": "${{ jobs.override.outputs.trusted-event || jobs.alpha.outputs.trusted-event || jobs.stable.outputs.trusted-event }}"
658
+ },
659
+ "buildchain-runtime-ref": {
660
+ "description": "Resolved Buildchain runtime ref",
661
+ "value": "${{ jobs.override.outputs.buildchain-runtime-ref || jobs.alpha.outputs.buildchain-runtime-ref || jobs.stable.outputs.buildchain-runtime-ref }}"
662
+ },
663
+ "buildchain-runtime-sha": {
664
+ "description": "Resolved immutable Buildchain runtime SHA",
665
+ "value": "${{ jobs.override.outputs.buildchain-runtime-sha || jobs.alpha.outputs.buildchain-runtime-sha || jobs.stable.outputs.buildchain-runtime-sha }}"
666
+ },
667
+ "buildchain-runtime-class": {
668
+ "description": "Runtime stability class: stable, alpha, authority, train, exact-sha, or development",
669
+ "value": "${{ jobs.override.outputs.buildchain-runtime-class || jobs.alpha.outputs.buildchain-runtime-class || jobs.stable.outputs.buildchain-runtime-class }}"
670
+ },
671
+ "buildchain-runtime-override": {
672
+ "description": "Whether an authority, train, or exact-SHA buildchain-ref override was used",
673
+ "value": "${{ jobs.override.outputs.buildchain-runtime-override || jobs.alpha.outputs.buildchain-runtime-override || jobs.stable.outputs.buildchain-runtime-override }}"
674
+ },
675
+ "buildchain-runtime-trust-decision": {
676
+ "description": "Runtime override trust decision",
677
+ "value": "${{ jobs.override.outputs.buildchain-runtime-trust-decision || jobs.alpha.outputs.buildchain-runtime-trust-decision || jobs.stable.outputs.buildchain-runtime-trust-decision }}"
678
+ },
679
+ "buildchain-contract-lock-status": {
680
+ "description": "Floating Buildchain runtime contract lock status",
681
+ "value": "${{ jobs.override.outputs.buildchain-contract-lock-status || jobs.alpha.outputs.buildchain-contract-lock-status || jobs.stable.outputs.buildchain-contract-lock-status }}"
682
+ },
683
+ "buildchain-contract-lock-drift": {
684
+ "description": "Whether the floating Buildchain runtime SHA or contract digest drifted from the consumer lock",
685
+ "value": "${{ jobs.override.outputs.buildchain-contract-lock-drift || jobs.alpha.outputs.buildchain-contract-lock-drift || jobs.stable.outputs.buildchain-contract-lock-drift }}"
686
+ },
687
+ "buildchain-contract-digest": {
688
+ "description": "Current Buildchain runtime contract digest",
689
+ "value": "${{ jobs.override.outputs.buildchain-contract-digest || jobs.alpha.outputs.buildchain-contract-digest || jobs.stable.outputs.buildchain-contract-digest }}"
690
+ },
691
+ "publish-channel": {
692
+ "description": "Resolved publish channel",
693
+ "value": "${{ jobs.override.outputs.publish-channel || jobs.alpha.outputs.publish-channel || jobs.stable.outputs.publish-channel }}"
694
+ },
695
+ "publish-allowed": {
696
+ "description": "Whether this event/ref may publish after successful verification",
697
+ "value": "${{ jobs.override.outputs.publish-allowed || jobs.alpha.outputs.publish-allowed || jobs.stable.outputs.publish-allowed }}"
698
+ },
699
+ "publish-reason": {
700
+ "description": "Human-readable publish gate reason",
701
+ "value": "${{ jobs.override.outputs.publish-reason || jobs.alpha.outputs.publish-reason || jobs.stable.outputs.publish-reason }}"
702
+ },
703
+ "publish-source-ref": {
704
+ "description": "Resolved publish source ref",
705
+ "value": "${{ jobs.override.outputs.publish-source-ref || jobs.alpha.outputs.publish-source-ref || jobs.stable.outputs.publish-source-ref }}"
706
+ },
707
+ "publish-source-sha": {
708
+ "description": "Locked source SHA used for checkout/build/summary",
709
+ "value": "${{ jobs.override.outputs.publish-source-sha || jobs.alpha.outputs.publish-source-sha || jobs.stable.outputs.publish-source-sha }}"
710
+ },
711
+ "publish-source-tree-sha": {
712
+ "description": "Git tree SHA for the locked source commit used by release-candidate promotion equivalence checks",
713
+ "value": "${{ jobs.override.outputs.publish-source-tree-sha || jobs.alpha.outputs.publish-source-tree-sha || jobs.stable.outputs.publish-source-tree-sha }}"
714
+ },
715
+ "publish-source-locked": {
716
+ "description": "Whether a publish-gate source ref was explicitly locked",
717
+ "value": "${{ jobs.override.outputs.publish-source-locked || jobs.alpha.outputs.publish-source-locked || jobs.stable.outputs.publish-source-locked }}"
718
+ },
719
+ "publish-source-channel": {
720
+ "description": "Channel parsed from the publish-gate source ref",
721
+ "value": "${{ jobs.override.outputs.publish-source-channel || jobs.alpha.outputs.publish-source-channel || jobs.stable.outputs.publish-source-channel }}"
722
+ },
723
+ "publish-source-line": {
724
+ "description": "Line parsed from the publish-gate source ref",
725
+ "value": "${{ jobs.override.outputs.publish-source-line || jobs.alpha.outputs.publish-source-line || jobs.stable.outputs.publish-source-line }}"
726
+ },
727
+ "publish-source-consumer-version": {
728
+ "description": "Consumer version parsed from the publish-gate source ref",
729
+ "value": "${{ jobs.override.outputs.publish-source-consumer-version || jobs.alpha.outputs.publish-source-consumer-version || jobs.stable.outputs.publish-source-consumer-version }}"
730
+ },
731
+ "release-manifest-json": {
732
+ "description": "Resolved release manifest JSON",
733
+ "value": "${{ jobs.override.outputs.release-manifest-json || jobs.alpha.outputs.release-manifest-json || jobs.stable.outputs.release-manifest-json }}"
734
+ },
735
+ "controller-plan-artifact": {
736
+ "description": "Uploaded build-channel-router controller plan artifact name",
737
+ "value": "${{ jobs.controller-plan.outputs.controller-plan-artifact }}"
738
+ },
739
+ "controller-plan-json": {
740
+ "description": "Compact source/runtime-bound build-channel-router controller plan",
741
+ "value": "${{ jobs.controller-plan.outputs.controller-plan-json }}"
742
+ },
743
+ "controller-plan-digest": {
744
+ "description": "Digest of the build-channel-router controller plan",
745
+ "value": "${{ jobs.controller-plan.outputs.controller-plan-digest }}"
746
+ },
747
+ "controller-receipt-artifact": {
748
+ "description": "Uploaded build-channel-router controller receipt artifact name",
749
+ "value": "${{ jobs.controller-receipt.outputs.controller-receipt-artifact }}"
750
+ },
751
+ "controller-receipt-json": {
752
+ "description": "Compact build-channel-router controller receipt",
753
+ "value": "${{ jobs.controller-receipt.outputs.controller-receipt-json }}"
754
+ },
755
+ "controller-receipt-digest": {
756
+ "description": "Digest of the build-channel-router controller receipt",
757
+ "value": "${{ jobs.controller-receipt.outputs.controller-receipt-digest }}"
758
+ },
759
+ "controller-receipt-status": {
760
+ "description": "Final build-channel-router controller status",
761
+ "value": "${{ jobs.controller-receipt.outputs.controller-receipt-status }}"
762
+ }
763
+ }
764
+ }