@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,815 @@
1
+ {
2
+ "inputs": {
3
+ "buildchain-channel": {
4
+ "description": "Promotion workflow-shell/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 alpha promotion",
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 stable promotion",
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": "Optional Buildchain runtime ref. Empty uses the workflow shell ref.",
28
+ "default": "",
29
+ "type": "string",
30
+ "required": false
31
+ },
32
+ "buildchain-contract-lock-path": {
33
+ "description": "Consumer-owned Buildchain contract lock path",
34
+ "default": "",
35
+ "type": "string",
36
+ "required": false
37
+ },
38
+ "buildchain-contract-compatibility-policy": {
39
+ "description": "Contract compatibility policy: major-compatible, allow-additive, or exact",
40
+ "default": "major-compatible",
41
+ "type": "string",
42
+ "required": false
43
+ },
44
+ "buildchain-contract-drift-issue-mode": {
45
+ "description": "Consumer issue behavior for Buildchain floating-ref contract drift: off, breaking-only, or compatible-and-breaking",
46
+ "default": "compatible-and-breaking",
47
+ "type": "string",
48
+ "required": false
49
+ },
50
+ "allow-repository": {
51
+ "description": "Repository allowed to promote. Empty defaults to the caller repository.",
52
+ "default": "",
53
+ "type": "string",
54
+ "required": false
55
+ },
56
+ "channel": {
57
+ "description": "Promotion channel: alpha, release, or major. Empty derives from target-ref.",
58
+ "default": "",
59
+ "type": "string",
60
+ "required": false
61
+ },
62
+ "target-ref": {
63
+ "description": "Channel ref to promote. Defaults to the current ref name.",
64
+ "default": "",
65
+ "type": "string",
66
+ "required": false
67
+ },
68
+ "target-sha": {
69
+ "description": "Channel commit SHA to promote. Defaults to the current workflow SHA.",
70
+ "default": "",
71
+ "type": "string",
72
+ "required": false
73
+ },
74
+ "package-manager": {
75
+ "description": "Package manager recorded for audit: npm, pnpm, yarn, or custom",
76
+ "default": "npm",
77
+ "type": "string",
78
+ "required": false
79
+ },
80
+ "artifact-name": {
81
+ "description": "Base artifact name used by the PR-stage reusable build",
82
+ "default": "buildchain-artifact",
83
+ "type": "string",
84
+ "required": false
85
+ },
86
+ "release-candidate-workflow-file": {
87
+ "description": "PR-stage release-candidate workflow file name",
88
+ "default": "build.yml",
89
+ "type": "string",
90
+ "required": false
91
+ },
92
+ "release-candidate-workflow-name": {
93
+ "description": "PR-stage release-candidate workflow display name",
94
+ "default": "Build",
95
+ "type": "string",
96
+ "required": false
97
+ },
98
+ "release-candidate-wait-seconds": {
99
+ "description": "Bounded wait for the complete PR-stage release-candidate workflow, including post-required-check evidence tails",
100
+ "default": 10800,
101
+ "type": "number",
102
+ "required": false
103
+ },
104
+ "resume-candidate-repository": {
105
+ "description": "Repository that owns the sealed candidate run; empty selects normal candidate discovery",
106
+ "default": "",
107
+ "type": "string",
108
+ "required": false
109
+ },
110
+ "resume-candidate-run-id": {
111
+ "description": "Exact successful candidate workflow run ID to recover through this fresh workflow event",
112
+ "default": "",
113
+ "type": "string",
114
+ "required": false
115
+ },
116
+ "resume-expected-workflow-file": {
117
+ "description": "Exact trusted Build workflow file that produced the candidate",
118
+ "default": "",
119
+ "type": "string",
120
+ "required": false
121
+ },
122
+ "resume-expected-workflow-name": {
123
+ "description": "Exact trusted Build workflow display name that produced the candidate",
124
+ "default": "",
125
+ "type": "string",
126
+ "required": false
127
+ },
128
+ "resume-expected-source-tree": {
129
+ "description": "Optional exact candidate Git tree; required when expected candidate root is empty",
130
+ "default": "",
131
+ "type": "string",
132
+ "required": false
133
+ },
134
+ "resume-expected-candidate-root": {
135
+ "description": "Optional exact sha256 Release Candidate root; required when expected source tree is empty",
136
+ "default": "",
137
+ "type": "string",
138
+ "required": false
139
+ },
140
+ "resume-expected-candidate-runtime-sha": {
141
+ "description": "Exact Buildchain runtime SHA recorded by the original candidate",
142
+ "default": "",
143
+ "type": "string",
144
+ "required": false
145
+ },
146
+ "resume-buildchain-runtime-sha": {
147
+ "description": "Exact current Buildchain tooling SHA authorized to perform recovery",
148
+ "default": "",
149
+ "type": "string",
150
+ "required": false
151
+ },
152
+ "resume-transaction-id": {
153
+ "description": "Optional exact durable publication transaction identity to resume",
154
+ "default": "",
155
+ "type": "string",
156
+ "required": false
157
+ },
158
+ "release-candidate-family-evidence-required": {
159
+ "description": "Require exact Initiative-family evidence before protected promotion",
160
+ "default": false,
161
+ "type": "boolean",
162
+ "required": false
163
+ },
164
+ "release-candidate-family-evidence-root": {
165
+ "description": "Optional expected Initiative-family evidence content root",
166
+ "default": "",
167
+ "type": "string",
168
+ "required": false
169
+ },
170
+ "release-candidate-family-initiative-id": {
171
+ "description": "Optional expected Initiative identity",
172
+ "default": "",
173
+ "type": "string",
174
+ "required": false
175
+ },
176
+ "release-candidate-family-assignment-id": {
177
+ "description": "Optional expected child Assignment identity",
178
+ "default": "",
179
+ "type": "string",
180
+ "required": false
181
+ },
182
+ "artifact-patterns": {
183
+ "description": "Newline-separated payload artifact patterns expected from the RC bundle",
184
+ "default": "",
185
+ "type": "string",
186
+ "required": false
187
+ },
188
+ "required-status-check": {
189
+ "description": "Exact required protected-branch status check context",
190
+ "default": "check / check",
191
+ "type": "string",
192
+ "required": false
193
+ },
194
+ "branch-protection-bypass-apps": {
195
+ "description": "GitHub App slugs allowed to bypass pull-request review for Buildchain-managed generated channel ref updates",
196
+ "default": "github-actions",
197
+ "type": "string",
198
+ "required": false
199
+ },
200
+ "branch-protection-bypass-users": {
201
+ "description": "Reserved compatibility input; managed channel protection rejects user bypass actors",
202
+ "default": "",
203
+ "type": "string",
204
+ "required": false
205
+ },
206
+ "branch-protection-bypass-teams": {
207
+ "description": "Reserved compatibility input; managed channel protection rejects team bypass actors",
208
+ "default": "",
209
+ "type": "string",
210
+ "required": false
211
+ },
212
+ "publish-target": {
213
+ "description": "Publish target recorded for audit: npm, github-release, custom",
214
+ "default": "npm",
215
+ "type": "string",
216
+ "required": false
217
+ },
218
+ "github-release": {
219
+ "description": "Create/update the public GitHub Release and upload Buildchain release passport/evidence assets after a complete release transaction",
220
+ "default": true,
221
+ "type": "boolean",
222
+ "required": false
223
+ },
224
+ "declarative-release-tail": {
225
+ "description": "Publish and read back GitHub Release assets through the Buildchain declarative release-tail provider plane",
226
+ "default": false,
227
+ "type": "boolean",
228
+ "required": false
229
+ },
230
+ "github-release-title": {
231
+ "description": "Optional GitHub Release title. Empty defaults to the public release tag.",
232
+ "default": "",
233
+ "type": "string",
234
+ "required": false
235
+ },
236
+ "github-release-notes": {
237
+ "description": "Optional GitHub Release notes. Empty uses a Buildchain release-passport asset note.",
238
+ "default": "",
239
+ "type": "string",
240
+ "required": false
241
+ },
242
+ "github-release-payload-patterns": {
243
+ "description": "Newline-separated basename patterns selecting PR-stage payload files for the immutable public GitHub Release",
244
+ "default": "",
245
+ "type": "string",
246
+ "required": false
247
+ },
248
+ "publication-commit-command": {
249
+ "description": "Optional consumer command that commits the well-known publication authority after every artifact, passport, and public read-back prerequisite succeeds",
250
+ "default": "",
251
+ "type": "string",
252
+ "required": false
253
+ },
254
+ "publication-commit-evidence-path": {
255
+ "description": "Consumer evidence JSON written by publication-commit-command under .buildchain/",
256
+ "default": ".buildchain/publication-commit/evidence.json",
257
+ "type": "string",
258
+ "required": false
259
+ },
260
+ "release-activation-command": {
261
+ "description": "Optional consumer command that completes exact site publication/readback and writes the authoritative activation receipt set",
262
+ "default": "",
263
+ "type": "string",
264
+ "required": false
265
+ },
266
+ "release-activation-receipt-set-path": {
267
+ "description": "Consumer activation receipt set written under .buildchain/",
268
+ "default": ".buildchain/release-activation/receipt-set.json",
269
+ "type": "string",
270
+ "required": false
271
+ },
272
+ "release-passport-evidence-command": {
273
+ "description": "Optional consumer command that synthesizes released evidence only from the validated activation receipt set",
274
+ "default": "",
275
+ "type": "string",
276
+ "required": false
277
+ },
278
+ "release-passport-evidence-path": {
279
+ "description": "Released evidence JSON written by release-passport-evidence-command under .buildchain/",
280
+ "default": ".buildchain/release-evidence/product-released-evidence.json",
281
+ "type": "string",
282
+ "required": false
283
+ },
284
+ "standalone-binary-distribution": {
285
+ "description": "Dispatch binary-distribution.yml after promotion; enable only when the caller repository provides that workflow",
286
+ "default": false,
287
+ "type": "boolean",
288
+ "required": false
289
+ },
290
+ "runner-preset": {
291
+ "description": "Runner preset recorded for audit",
292
+ "default": "github-hosted",
293
+ "type": "string",
294
+ "required": false
295
+ },
296
+ "trusted-publishing": {
297
+ "description": "Whether the publish target uses GitHub OIDC trusted publishing",
298
+ "default": true,
299
+ "type": "boolean",
300
+ "required": false
301
+ },
302
+ "publish-command": {
303
+ "description": "Optional publish command. Defaults to lifecycle.publish from buildchain.toml.",
304
+ "default": "",
305
+ "type": "string",
306
+ "required": false
307
+ },
308
+ "publish-rematerialize-on-resume": {
309
+ "description": "Replay the consumer publish materialization step after valid durable evidence is restored; use only when the command is idempotent and recreates ephemeral Passport inputs or release assets",
310
+ "default": false,
311
+ "type": "boolean",
312
+ "required": false
313
+ },
314
+ "publish-transaction-override": {
315
+ "description": "Explicitly allow ancestry-bound finalization recovery for an already published durable transaction",
316
+ "default": false,
317
+ "type": "boolean",
318
+ "required": false
319
+ },
320
+ "publish-required-artifacts-json": {
321
+ "description": "Required publish artifacts JSON passed to the promotion action; ref_template may contain one {version} placeholder",
322
+ "default": "",
323
+ "type": "string",
324
+ "required": false
325
+ },
326
+ "publish-artifact-kind": {
327
+ "description": "Artifact kind used when generating publish-required-artifacts-json from downloaded payloads",
328
+ "default": "npm",
329
+ "type": "string",
330
+ "required": false
331
+ },
332
+ "publish-mode": {
333
+ "description": "Publish mode passed to promote-buildchain-ref",
334
+ "default": "",
335
+ "type": "string",
336
+ "required": false
337
+ },
338
+ "publish-dist-tag": {
339
+ "description": "Expected dist-tag passed to promote-buildchain-ref",
340
+ "default": "",
341
+ "type": "string",
342
+ "required": false
343
+ },
344
+ "publish-package-set-order": {
345
+ "description": "Package-set ordering passed to promote-buildchain-ref",
346
+ "default": "as-provided",
347
+ "type": "string",
348
+ "required": false
349
+ },
350
+ "publish-package-main": {
351
+ "description": "Main package name for package-set ordering",
352
+ "default": "",
353
+ "type": "string",
354
+ "required": false
355
+ },
356
+ "release-passport": {
357
+ "description": "Generate and persist the release passport after publish finalization",
358
+ "default": true,
359
+ "type": "boolean",
360
+ "required": false
361
+ },
362
+ "release-propagation-config-path": {
363
+ "description": "Optional source-controlled package propagation capture config read from the exact finalized release SHA",
364
+ "default": "",
365
+ "type": "string",
366
+ "required": false
367
+ },
368
+ "release-passport-output-dir": {
369
+ "description": "Release passport output directory",
370
+ "default": ".buildchain/release-passport",
371
+ "type": "string",
372
+ "required": false
373
+ },
374
+ "release-passport-product-name": {
375
+ "description": "Product name recorded in buildchain.release.json",
376
+ "default": "",
377
+ "type": "string",
378
+ "required": false
379
+ },
380
+ "release-passport-impact-json": {
381
+ "description": "Surface-aware release impact JSON or path passed to the release passport collector",
382
+ "default": "",
383
+ "type": "string",
384
+ "required": false
385
+ },
386
+ "release-passport-kfd-1-witness-jsons": {
387
+ "description": "Newline- or comma-separated KFD-1 contract-world witness JSON paths passed to the release passport collector",
388
+ "default": "",
389
+ "type": "string",
390
+ "required": false
391
+ },
392
+ "release-passport-kfd-2-claim-jsons": {
393
+ "description": "Newline- or comma-separated KFD-2 public release trust claim JSON paths passed to the release passport collector",
394
+ "default": "",
395
+ "type": "string",
396
+ "required": false
397
+ },
398
+ "release-passport-kfd-3-prebuild-witness-jsons": {
399
+ "description": "Newline- or comma-separated KFD-3 collaboration-interface pre-build witness JSON paths passed to the release passport collector",
400
+ "default": "",
401
+ "type": "string",
402
+ "required": false
403
+ },
404
+ "release-passport-kfd-3-artifact-witness-jsons": {
405
+ "description": "Newline- or comma-separated KFD-3 artifact-side collaboration-interface witness JSON paths passed to the release passport collector",
406
+ "default": "",
407
+ "type": "string",
408
+ "required": false
409
+ },
410
+ "release-passport-kfd-3-artifact-verify-command": {
411
+ "description": "Product-owned command that emits KFD-3 artifact-side collaboration-interface witness JSON",
412
+ "default": "",
413
+ "type": "string"
414
+ },
415
+ "release-passport-kfd-adopter-manifest-json": {
416
+ "description": "Standard full-cut adopter conformance manifest JSON path",
417
+ "default": "",
418
+ "type": "string",
419
+ "required": false
420
+ },
421
+ "release-passport-kfd-support-matrix-json": {
422
+ "description": "Legacy KFD support projection JSON path accepted only for exact manifest comparison",
423
+ "default": "",
424
+ "type": "string",
425
+ "required": false
426
+ },
427
+ "release-passport-kfd-product-gate-jsons": {
428
+ "description": "Newline- or comma-separated KFD-4/5/7 product gate result JSON paths",
429
+ "default": "",
430
+ "type": "string",
431
+ "required": false
432
+ },
433
+ "release-passport-invariant-passport-jsons": {
434
+ "description": "Newline- or comma-separated invariant Passport JSON paths passed to the release gate",
435
+ "default": "",
436
+ "type": "string",
437
+ "required": false
438
+ },
439
+ "release-passport-invariant-passport-command": {
440
+ "description": "Product-owned command that emits a canonical invariant Passport JSON document",
441
+ "default": "",
442
+ "type": "string",
443
+ "required": false
444
+ },
445
+ "release-passport-evidence-jsons": {
446
+ "description": "Newline- or comma-separated product-owned release evidence attachment paths bound to the exact release coordinates",
447
+ "default": "",
448
+ "type": "string",
449
+ "required": false
450
+ },
451
+ "release-passport-attachment-command": {
452
+ "description": "Product-owned command that emits generated release evidence attachment paths as JSON",
453
+ "default": "",
454
+ "type": "string",
455
+ "required": false
456
+ },
457
+ "release-passport-buildchain-self-kfd": {
458
+ "description": "Generate Buildchain-owned KFD-1/2/3 self witnesses and claims from the checked-out package source before release passport finalization",
459
+ "default": false,
460
+ "type": "boolean",
461
+ "required": false
462
+ },
463
+ "github-artifact-attestation-policy-json": {
464
+ "description": "One GitHub artifact attestation policy JSON path from the sealed release candidate; empty disables attestation",
465
+ "default": "",
466
+ "type": "string",
467
+ "required": false
468
+ },
469
+ "github-artifact-attestation-environment": {
470
+ "description": "Caller-repository protected environment governing the keyless attestation",
471
+ "default": "buildchain-artifact-attestation",
472
+ "type": "string",
473
+ "required": false
474
+ },
475
+ "github-artifact-attestation-retention-days": {
476
+ "description": "Retention for offline GitHub/Sigstore evidence artifacts",
477
+ "default": 90,
478
+ "type": "number",
479
+ "required": false
480
+ },
481
+ "release-passport-platform-manifest-paths": {
482
+ "description": "Optional platform manifest paths for release passport; defaults to downloaded PR-stage payload manifests",
483
+ "default": "",
484
+ "type": "string",
485
+ "required": false
486
+ },
487
+ "required-artifact-count": {
488
+ "description": "Minimum downloaded payload count required before publish; npm counts package tarballs",
489
+ "default": 3,
490
+ "type": "number",
491
+ "required": false
492
+ },
493
+ "publication-admission-json": {
494
+ "description": "Fresh sealed publication admission JSON; required for non-dry-run publication",
495
+ "default": "",
496
+ "type": "string",
497
+ "required": false
498
+ },
499
+ "publication-runner-provenance-json": {
500
+ "description": "Runner provenance receipt bound by the admission",
501
+ "default": "",
502
+ "type": "string",
503
+ "required": false
504
+ },
505
+ "publication-control-plane-audit-json": {
506
+ "description": "Fresh external control-plane audit receipt bound by the admission",
507
+ "default": "",
508
+ "type": "string",
509
+ "required": false
510
+ },
511
+ "github-governance-receipt-json": {
512
+ "description": "Fresh qualifying governance receipt for the exact publication repository and target ref",
513
+ "default": "",
514
+ "type": "string",
515
+ "required": false
516
+ },
517
+ "publication-gate-aggregate-json": {
518
+ "description": "Qualifying Shifu Gate aggregate or explicit consumer-owned no-Gate decision",
519
+ "default": "",
520
+ "type": "string",
521
+ "required": false
522
+ },
523
+ "publication-gate-command": {
524
+ "description": "Consumer-owned read-only command that assembles a qualifying Gate aggregate from the exact downloaded release-candidate evidence",
525
+ "default": "",
526
+ "type": "string",
527
+ "required": false
528
+ },
529
+ "publication-gate-controller-sha": {
530
+ "description": "Exact caller-repository commit that owns the consumer Gate command; empty uses the publication source SHA",
531
+ "default": "",
532
+ "type": "string",
533
+ "required": false
534
+ },
535
+ "publication-expected-json": {
536
+ "description": "Independent exact source/runtime/product/channel/artifact bindings",
537
+ "default": "",
538
+ "type": "string",
539
+ "required": false
540
+ },
541
+ "publication-used-nonces-json": {
542
+ "description": "JSON array of already consumed admission nonces",
543
+ "default": "[]",
544
+ "type": "string",
545
+ "required": false
546
+ },
547
+ "publication-consumer-qualification-command": {
548
+ "description": "Opt-in consumer-owned predicate command; writes its decision to BUILDCHAIN_PUBLICATION_QUALIFICATION_RESULT_PATH",
549
+ "default": "",
550
+ "type": "string",
551
+ "required": false
552
+ },
553
+ "publication-consumer-qualification-controller-sha": {
554
+ "description": "Exact caller-repository commit that owns the consumer qualification command; empty uses the Gate controller SHA, then the publication source SHA",
555
+ "default": "",
556
+ "type": "string",
557
+ "required": false
558
+ },
559
+ "publication-consumer-predicate-id": {
560
+ "description": "Stable identifier for the opt-in consumer-owned publication predicate",
561
+ "default": "",
562
+ "type": "string",
563
+ "required": false
564
+ },
565
+ "publication-used-qualification-nonces-json": {
566
+ "description": "JSON array of already consumed qualification nonces",
567
+ "default": "[]",
568
+ "type": "string",
569
+ "required": false
570
+ },
571
+ "publication-auto-admission": {
572
+ "description": "Assemble sealed evidence from the caller repository's exact managed release candidate",
573
+ "default": false,
574
+ "type": "boolean",
575
+ "required": false
576
+ },
577
+ "publication-auto-no-gate": {
578
+ "description": "Explicitly declare that this managed publication has no consumer-owned Shifu Gate registry",
579
+ "default": false,
580
+ "type": "boolean",
581
+ "required": false
582
+ },
583
+ "publication-publisher-workflow-path": {
584
+ "description": "Caller workflow path bound by the provider trusted-publisher policy",
585
+ "default": "",
586
+ "type": "string",
587
+ "required": false
588
+ },
589
+ "publication-product": {
590
+ "default": "Buildchain",
591
+ "type": "string",
592
+ "required": false
593
+ },
594
+ "publication-target": {
595
+ "default": "npm:@kungfu-tech/buildchain",
596
+ "type": "string",
597
+ "required": false
598
+ },
599
+ "publication-package-name": {
600
+ "default": "@kungfu-tech/buildchain",
601
+ "type": "string",
602
+ "required": false
603
+ },
604
+ "dry-run": {
605
+ "description": "Plan only; do not publish or move refs",
606
+ "default": false,
607
+ "type": "boolean",
608
+ "required": false
609
+ }
610
+ },
611
+ "secrets": {
612
+ "BUILDCHAIN_PROMOTION_TOKEN": {
613
+ "description": "Optional bypass-capable token used only for generated protected ref updates",
614
+ "required": false
615
+ },
616
+ "BUILDCHAIN_PUBLICATION_COMMIT_TOKEN": {
617
+ "description": "Optional consumer-owned credential exposed only to the final publication commit command",
618
+ "required": false
619
+ },
620
+ "BUILDCHAIN_PUBLICATION_COMMIT_SIGNING_KEY": {
621
+ "description": "Optional consumer-owned private signing material exposed only to the final publication commit command",
622
+ "required": false
623
+ },
624
+ "KUNGFU_GOVERNANCE_AUDITOR_APP_PRIVATE_KEY": {
625
+ "description": "Private key for the dedicated read-only GitHub governance auditor App",
626
+ "required": false
627
+ },
628
+ "buildchain-issue-token": {
629
+ "description": "Optional token with issues:write on the Buildchain repository for workflow-friction reports",
630
+ "required": false
631
+ },
632
+ "BUILDCHAIN_ISSUE_TOKEN": {
633
+ "description": "Optional token with issues:write on the Buildchain repository for workflow-friction reports",
634
+ "required": false
635
+ },
636
+ "buildchain-issue-app-id": {
637
+ "description": "Optional GitHub App ID used to mint a Buildchain issue-report token",
638
+ "required": false
639
+ },
640
+ "BUILDCHAIN_ISSUE_APP_ID": {
641
+ "description": "Optional GitHub App ID used to mint a Buildchain issue-report token",
642
+ "required": false
643
+ },
644
+ "buildchain-issue-app-private-key": {
645
+ "description": "Optional GitHub App private key used to mint a Buildchain issue-report token",
646
+ "required": false
647
+ },
648
+ "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY": {
649
+ "description": "Optional GitHub App private key used to mint a Buildchain issue-report token",
650
+ "required": false
651
+ }
652
+ },
653
+ "outputs": {
654
+ "buildchain-channel": {
655
+ "description": "Selected promotion workflow-shell channel",
656
+ "value": "${{ jobs.resolve-promotion.outputs.channel }}"
657
+ },
658
+ "promotion-router-ref": {
659
+ "description": "Router workflow ref",
660
+ "value": "${{ jobs.resolve-promotion.outputs.router-ref }}"
661
+ },
662
+ "promotion-router-sha": {
663
+ "description": "Resolved router workflow SHA",
664
+ "value": "${{ jobs.resolve-promotion.outputs.router-sha }}"
665
+ },
666
+ "promotion-shell-ref": {
667
+ "description": "Selected advanced promotion workflow-shell ref",
668
+ "value": "${{ jobs.resolve-promotion.outputs.shell-ref }}"
669
+ },
670
+ "promotion-shell-sha": {
671
+ "description": "Resolved advanced promotion workflow-shell SHA",
672
+ "value": "${{ jobs.resolve-promotion.outputs.shell-sha }}"
673
+ },
674
+ "promotion-runtime-ref": {
675
+ "description": "Selected Buildchain runtime ref",
676
+ "value": "${{ jobs.resolve-promotion.outputs.runtime-ref }}"
677
+ },
678
+ "promotion-runtime-sha": {
679
+ "description": "Resolved Buildchain runtime SHA",
680
+ "value": "${{ jobs.resolve-promotion.outputs.runtime-sha }}"
681
+ },
682
+ "promotion-contract-lock-path": {
683
+ "description": "Selected consumer contract-lock path",
684
+ "value": "${{ jobs.resolve-promotion.outputs.contract-lock-path }}"
685
+ },
686
+ "promotion-contract-lock-digest": {
687
+ "description": "Selected consumer contract-lock sha256 digest",
688
+ "value": "${{ jobs.resolve-promotion.outputs.contract-lock-digest }}"
689
+ },
690
+ "promotion-publication-channel": {
691
+ "description": "Derived publication channel",
692
+ "value": "${{ jobs.resolve-promotion.outputs.publication-channel }}"
693
+ },
694
+ "promotion-target-ref": {
695
+ "description": "Derived promotion target ref",
696
+ "value": "${{ jobs.resolve-promotion.outputs.target-ref }}"
697
+ },
698
+ "promotion-override-used": {
699
+ "description": "Whether a trusted runtime override was used",
700
+ "value": "${{ jobs.resolve-promotion.outputs.override-used }}"
701
+ },
702
+ "promoted-sha": {
703
+ "description": "Promoted channel SHA",
704
+ "value": "${{ jobs.alpha.outputs.promoted-sha || jobs.stable.outputs.promoted-sha }}"
705
+ },
706
+ "built-source-sha": {
707
+ "description": "PR-stage built source SHA",
708
+ "value": "${{ jobs.alpha.outputs.built-source-sha || jobs.stable.outputs.built-source-sha }}"
709
+ },
710
+ "release-candidate-artifact": {
711
+ "description": "Resolved release-candidate artifact name",
712
+ "value": "${{ jobs.alpha.outputs.release-candidate-artifact || jobs.stable.outputs.release-candidate-artifact }}"
713
+ },
714
+ "release-candidate-action": {
715
+ "description": "Candidate admission action: discovered or reused",
716
+ "value": "${{ jobs.alpha.outputs.release-candidate-action || jobs.stable.outputs.release-candidate-action }}"
717
+ },
718
+ "release-candidate-recovery-root": {
719
+ "description": "Exact sha256 recovery receipt root",
720
+ "value": "${{ jobs.alpha.outputs.release-candidate-recovery-root || jobs.stable.outputs.release-candidate-recovery-root }}"
721
+ },
722
+ "release-candidate-recovery-receipt-artifact": {
723
+ "description": "Immutable recovery receipt Actions artifact name",
724
+ "value": "${{ jobs.alpha.outputs.release-candidate-recovery-receipt-artifact || jobs.stable.outputs.release-candidate-recovery-receipt-artifact }}"
725
+ },
726
+ "release-propagation-work-artifact": {
727
+ "description": "Captured package release propagation Work artifact",
728
+ "value": "${{ jobs.alpha.outputs.release-propagation-work-artifact || jobs.stable.outputs.release-propagation-work-artifact }}"
729
+ },
730
+ "publication-commit-evidence-path": {
731
+ "description": "Validated consumer publication commit evidence path",
732
+ "value": "${{ jobs.alpha.outputs.publication-commit-evidence-path || jobs.stable.outputs.publication-commit-evidence-path }}"
733
+ },
734
+ "publication-commit-evidence-digest": {
735
+ "description": "sha256 digest of validated consumer publication commit evidence",
736
+ "value": "${{ jobs.alpha.outputs.publication-commit-evidence-digest || jobs.stable.outputs.publication-commit-evidence-digest }}"
737
+ },
738
+ "publication-commit-url": {
739
+ "description": "Canonical public authority URL validated after the final commit",
740
+ "value": "${{ jobs.alpha.outputs.publication-commit-url || jobs.stable.outputs.publication-commit-url }}"
741
+ },
742
+ "publication-commit-payload-root": {
743
+ "description": "Exact public authority payload root validated after the final commit",
744
+ "value": "${{ jobs.alpha.outputs.publication-commit-payload-root || jobs.stable.outputs.publication-commit-payload-root }}"
745
+ },
746
+ "controller-plan-artifact": {
747
+ "description": "Controller plan artifact name",
748
+ "value": "${{ jobs.alpha.outputs.controller-plan-artifact || jobs.stable.outputs.controller-plan-artifact }}"
749
+ },
750
+ "controller-plan-json": {
751
+ "description": "Compact controller plan JSON",
752
+ "value": "${{ jobs.alpha.outputs.controller-plan-json || jobs.stable.outputs.controller-plan-json }}"
753
+ },
754
+ "controller-plan-digest": {
755
+ "description": "Controller plan digest",
756
+ "value": "${{ jobs.alpha.outputs.controller-plan-digest || jobs.stable.outputs.controller-plan-digest }}"
757
+ },
758
+ "publication-capability-digest": {
759
+ "description": "Sealed publication capability receipt digest",
760
+ "value": "${{ jobs.alpha.outputs.publication-capability-digest || jobs.stable.outputs.publication-capability-digest }}"
761
+ },
762
+ "github-artifact-attestation-id": {
763
+ "description": "GitHub keyless attestation id for the declared Linux release artifact",
764
+ "value": "${{ jobs.alpha.outputs.github-artifact-attestation-id || jobs.stable.outputs.github-artifact-attestation-id }}"
765
+ },
766
+ "github-artifact-attestation-url": {
767
+ "description": "GitHub keyless attestation URL",
768
+ "value": "${{ jobs.alpha.outputs.github-artifact-attestation-url || jobs.stable.outputs.github-artifact-attestation-url }}"
769
+ },
770
+ "github-artifact-attestation-evidence-root": {
771
+ "description": "Verified Buildchain attestation evidence root published with the GitHub Release",
772
+ "value": "${{ jobs.alpha.outputs.github-artifact-attestation-evidence-root || jobs.stable.outputs.github-artifact-attestation-evidence-root }}"
773
+ },
774
+ "github-artifact-attestation-publication-receipt-digest": {
775
+ "description": "Read-back verified GitHub Release evidence publication receipt digest",
776
+ "value": "${{ jobs.alpha.outputs.github-artifact-attestation-publication-receipt-digest || jobs.stable.outputs.github-artifact-attestation-publication-receipt-digest }}"
777
+ },
778
+ "release-tail-declaration-root": {
779
+ "description": "Root of the declarative release-tail contract",
780
+ "value": "${{ jobs.alpha.outputs.release-tail-declaration-root || jobs.stable.outputs.release-tail-declaration-root }}"
781
+ },
782
+ "release-tail-transaction-state": {
783
+ "description": "Final declarative release-tail transaction state",
784
+ "value": "${{ jobs.alpha.outputs.release-tail-transaction-state || jobs.stable.outputs.release-tail-transaction-state }}"
785
+ },
786
+ "release-tail-transaction-root": {
787
+ "description": "Stable declarative release-tail transaction root",
788
+ "value": "${{ jobs.alpha.outputs.release-tail-transaction-root || jobs.stable.outputs.release-tail-transaction-root }}"
789
+ },
790
+ "release-tail-state-root": {
791
+ "description": "Root of the final declarative release-tail transaction state",
792
+ "value": "${{ jobs.alpha.outputs.release-tail-state-root || jobs.stable.outputs.release-tail-state-root }}"
793
+ },
794
+ "release-tail-receipt-roots-json": {
795
+ "description": "JSON array of standardized declarative release-tail receipt roots",
796
+ "value": "${{ jobs.alpha.outputs.release-tail-receipt-roots-json || jobs.stable.outputs.release-tail-receipt-roots-json }}"
797
+ },
798
+ "controller-receipt-artifact": {
799
+ "description": "Controller receipt artifact name",
800
+ "value": "${{ jobs.alpha.outputs.controller-receipt-artifact || jobs.stable.outputs.controller-receipt-artifact }}"
801
+ },
802
+ "controller-receipt-json": {
803
+ "description": "Compact controller receipt JSON",
804
+ "value": "${{ jobs.alpha.outputs.controller-receipt-json || jobs.stable.outputs.controller-receipt-json }}"
805
+ },
806
+ "controller-receipt-digest": {
807
+ "description": "Controller receipt digest",
808
+ "value": "${{ jobs.alpha.outputs.controller-receipt-digest || jobs.stable.outputs.controller-receipt-digest }}"
809
+ },
810
+ "controller-receipt-status": {
811
+ "description": "Controller receipt status",
812
+ "value": "${{ jobs.alpha.outputs.controller-receipt-status || jobs.stable.outputs.controller-receipt-status }}"
813
+ }
814
+ }
815
+ }