@kungfu-tech/buildchain 4.0.1-alpha.0 → 4.0.1-alpha.3

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 (121) hide show
  1. package/AGENTS.md +13 -5
  2. package/actions/promote-buildchain-ref/README.md +11 -6
  3. package/architecture/decisions/0003-two-phase-delivery-warrant.md +152 -0
  4. package/architecture/internal-capabilities.json +105 -2
  5. package/architecture/maintainability-policy.json +218 -19
  6. package/architecture/v3-core-mechanism-inventory.json +2 -0
  7. package/architecture/v4-delivery-authority-parity.json +250 -0
  8. package/architecture/v4-delivery-warrant-shadow-fixtures.json +29 -6
  9. package/architecture/v4-floating-consumer-policy.json +75 -0
  10. package/architecture/v4-floating-consumer-policy.md +32 -0
  11. package/architecture/v4-runtime-ref-resume-authority.json +64 -0
  12. package/architecture/v4-stage-capsule-qualification.json +2 -2
  13. package/bin/buildchain.mjs +9 -1
  14. package/bin/internal/trust-release-release-handlers.mjs +5 -0
  15. package/contracts/dev-delivery-authority-v2.schema.json +662 -0
  16. package/contracts/fixtures/v4-floating-consumer-policy-v1/cases.json +53 -0
  17. package/contracts/fixtures/v4-runtime-ref-resume-authority-v1/scenario.json +15 -0
  18. package/contracts/v4-floating-consumer-policy-receipt-v1.schema.json +105 -0
  19. package/contracts/v4-runtime-ref-resume-authority-v1.schema.json +235 -0
  20. package/dist/site/agent-index.json +1 -0
  21. package/dist/site/artifact-schemas.json +2 -0
  22. package/dist/site/buildchain-contract.json +186 -33
  23. package/dist/site/buildchain-site.json +229 -32
  24. package/dist/site/capability-registry.json +3 -3
  25. package/dist/site/cli-registry.json +46 -2
  26. package/dist/site/controller-registry.json +62 -6
  27. package/dist/site/kfd-claims.json +105 -16
  28. package/dist/site/kfd-upstream-aggregate.json +1 -1
  29. package/dist/site/manual-registry.json +7 -7
  30. package/dist/site/node-api-registry.json +7491 -5290
  31. package/dist/site/page-registry.json +218 -21
  32. package/dist/site/public-surface-audit.json +412 -20
  33. package/dist/site/publication-registry.json +4 -4
  34. package/dist/site/release-provenance.json +4 -0
  35. package/dist/site/schemas/dev-delivery-authority-v2.schema.json +662 -0
  36. package/dist/site/site-manifest.json +11 -11
  37. package/dist/site/workflow-registry.json +63 -19
  38. package/docs/MAP.md +3 -0
  39. package/docs/cli-reference.md +211 -13
  40. package/docs/dev-delivery-qualification-landing-adr.md +251 -0
  41. package/docs/dev-delivery-warrant.md +336 -30
  42. package/docs/lifecycle-protocol.md +41 -0
  43. package/docs/node-api-reference.md +319 -186
  44. package/docs/reusable-build-surface.md +41 -0
  45. package/docs/runtime-train-validation.md +10 -0
  46. package/docs/v4-runtime-ref-resume-authority.md +69 -0
  47. package/docs/versioning.md +1 -0
  48. package/package.json +10 -4
  49. package/packages/core/artifact-signing.js +61 -0
  50. package/packages/core/buildchain-config.js +66 -1
  51. package/packages/core/buildchain-contract.js +3 -2
  52. package/packages/core/dev-delivery-authority-candidate.js +270 -0
  53. package/packages/core/dev-delivery-authority-evidence.js +146 -0
  54. package/packages/core/dev-delivery-authority-landing.js +461 -0
  55. package/packages/core/dev-delivery-authority-observation.js +48 -0
  56. package/packages/core/dev-delivery-authority-qualification.js +591 -0
  57. package/packages/core/dev-delivery-authority-settlement.js +213 -0
  58. package/packages/core/dev-delivery-authority-state.js +583 -0
  59. package/packages/core/dev-delivery-candidate-identity.js +13 -0
  60. package/packages/core/dev-delivery-contract-surface.js +76 -0
  61. package/packages/core/dev-delivery-execution-failure.js +133 -0
  62. package/packages/core/dev-delivery-execution-transfer.js +572 -0
  63. package/packages/core/dev-delivery-landing-admission-core.js +119 -0
  64. package/packages/core/dev-delivery-landing-readback.js +598 -0
  65. package/packages/core/dev-delivery-landing-terminal-evidence.js +271 -0
  66. package/packages/core/dev-delivery-landing-testing-port.js +6 -0
  67. package/packages/core/dev-delivery-native-execution.js +110 -0
  68. package/packages/core/dev-delivery-native-proof.js +546 -0
  69. package/packages/core/dev-delivery-process-boundary.js +551 -0
  70. package/packages/core/dev-delivery-proof.js +37 -3
  71. package/packages/core/dev-delivery-provider-attempt.js +127 -0
  72. package/packages/core/dev-delivery-provider-heartbeat.js +370 -0
  73. package/packages/core/dev-delivery-warrant-cancellation.js +1 -0
  74. package/packages/core/dev-delivery-warrant-qualification.js +145 -0
  75. package/packages/core/dev-delivery-warrant-settlement.js +237 -36
  76. package/packages/core/dev-delivery-warrant-state.js +565 -0
  77. package/packages/core/dev-delivery-warrant.js +320 -368
  78. package/packages/core/index.js +2 -0
  79. package/packages/core/publication-authority.js +5 -5
  80. package/packages/core/release-candidate.js +79 -19
  81. package/packages/core/release-passport.js +239 -33
  82. package/packages/core/v4-floating-consumer-evidence.js +324 -0
  83. package/packages/core/v4-floating-consumer-policy.js +446 -0
  84. package/packages/core/v4-floating-consumer-release-passport.js +126 -0
  85. package/packages/core/v4-runtime-ref-resume-authority.js +625 -0
  86. package/packages/core/v4-runtime-selector-persistence.js +228 -0
  87. package/packages/core/workflow-yaml-contract.js +48 -0
  88. package/scripts/audit-publication-control-plane.mjs +31 -31
  89. package/scripts/buildchain-cli-help.mjs +11 -2
  90. package/scripts/check-inventory.mjs +1 -1
  91. package/scripts/check-v4-floating-consumer-policy-contract.mjs +198 -0
  92. package/scripts/check-v4-public-dogfood-contract.mjs +6 -11
  93. package/scripts/dev-delivery-authority-command-adapters.mjs +206 -0
  94. package/scripts/dev-delivery-authority-provider.mjs +28 -0
  95. package/scripts/dev-delivery-authority.mjs +490 -0
  96. package/scripts/dev-delivery-native-run.mjs +177 -0
  97. package/scripts/dev-delivery-process-boundary.mjs +260 -0
  98. package/scripts/dev-delivery-proof.mjs +67 -2
  99. package/scripts/dev-delivery-provider-heartbeat.mjs +215 -0
  100. package/scripts/dev-delivery-source-proof-reuse.mjs +631 -0
  101. package/scripts/dev-delivery-two-phase-resume.mjs +345 -0
  102. package/scripts/dev-delivery-two-phase.mjs +573 -0
  103. package/scripts/dev-delivery-warrant-options.mjs +266 -0
  104. package/scripts/dev-delivery-warrant-store.mjs +227 -0
  105. package/scripts/dev-delivery-warrant.mjs +227 -193
  106. package/scripts/dev-pr-auto-merge.mjs +37 -48
  107. package/scripts/dev-pr-delivery-warrant.mjs +215 -2
  108. package/scripts/dev-pr-prequeue-guard.mjs +399 -0
  109. package/scripts/ensure-github-release.mjs +3 -3
  110. package/scripts/generate-channel-build-workflow.mjs +3 -0
  111. package/scripts/generate-channel-promotion-workflow.mjs +112 -12
  112. package/scripts/generate-release-candidate-passport.mjs +41 -33
  113. package/scripts/generate-site-bundle.mjs +26 -4
  114. package/scripts/init-repo.mjs +5 -1
  115. package/scripts/inspect-artifact-signing-requests.mjs +6 -0
  116. package/scripts/npm-publish-transaction.mjs +103 -91
  117. package/scripts/resume-from-candidate-run.mjs +11 -14
  118. package/scripts/seal-artifact-signing-requests.mjs +6 -0
  119. package/scripts/site-capability-metadata.mjs +14 -0
  120. package/scripts/v4-consumer-policy.mjs +231 -0
  121. package/templates/native-dev-delivery.yml +141 -0
@@ -0,0 +1,231 @@
1
+ #!/usr/bin/env node
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { pathToFileURL } from "node:url";
5
+ import {
6
+ certifyV4FloatingConsumerPolicyReceipt,
7
+ resolveV4FloatingConsumerPolicyAuthority,
8
+ scanV4FloatingConsumerPolicy,
9
+ v4ConsumerPolicyScannerRoot,
10
+ } from "../packages/core/v4-floating-consumer-policy.js";
11
+ import { writeGitHubOutputs } from "./build-contract-core.mjs";
12
+ const RUNTIME_ROOT = path.resolve(import.meta.dirname, "..");
13
+ function parseArgs(argv) {
14
+ const options = {};
15
+ for (let index = 0; index < argv.length; index += 1) {
16
+ const arg = argv[index];
17
+ if (!arg.startsWith("--") || !argv[index + 1])
18
+ throw new Error(`invalid argument: ${arg}`);
19
+ options[
20
+ arg
21
+ .slice(2)
22
+ .replace(/-([a-z])/gu, (_, character) => character.toUpperCase())
23
+ ] = argv[index + 1];
24
+ index += 1;
25
+ }
26
+ return options;
27
+ }
28
+
29
+ function env(name, fallback = "") {
30
+ return process.env[name] || fallback;
31
+ }
32
+ function readJson(file) {
33
+ return JSON.parse(fs.readFileSync(file, "utf8"));
34
+ }
35
+ function writeJson(file, value) {
36
+ fs.mkdirSync(path.dirname(file), { recursive: true });
37
+ fs.writeFileSync(file, `${JSON.stringify(value, null, 2)}\n`);
38
+ }
39
+ export { v4ConsumerPolicyScannerRoot };
40
+ export function scanCommand(options = {}) {
41
+ const root = path.resolve(
42
+ options.root || env("BUILDCHAIN_CONSUMER_ROOT", process.cwd()),
43
+ );
44
+ const output = path.resolve(
45
+ root,
46
+ options.output ||
47
+ env(
48
+ "BUILDCHAIN_V4_POLICY_RECEIPT_PATH",
49
+ ".buildchain/evidence/v4-consumer-policy-receipt.json",
50
+ ),
51
+ );
52
+ const policy = readJson(
53
+ path.join(RUNTIME_ROOT, "architecture/v4-floating-consumer-policy.json"),
54
+ );
55
+ const result = scanV4FloatingConsumerPolicy({
56
+ root,
57
+ repository: options.repository || env("GITHUB_REPOSITORY"),
58
+ sourceSha: options.sourceSha || env("GITHUB_SHA"),
59
+ invokedWorkflow:
60
+ options.invokedWorkflow || env("BUILDCHAIN_INVOKED_WORKFLOW"),
61
+ invocationSourcePath:
62
+ options.invocationSourcePath ||
63
+ env("BUILDCHAIN_INVOCATION_SOURCE_PATH", env("GITHUB_WORKFLOW_REF")),
64
+ expectedInvocationChannel:
65
+ options.expectedInvocationChannel ||
66
+ env("BUILDCHAIN_EXPECTED_INVOCATION_CHANNEL"),
67
+ resolvedWorkflowSha:
68
+ options.resolvedWorkflowSha || env("BUILDCHAIN_WORKFLOW_SHA"),
69
+ resolvedRuntimeSha:
70
+ options.resolvedRuntimeSha ||
71
+ env("BUILDCHAIN_RUNTIME_SHA", env("BUILDCHAIN_WORKFLOW_SHA")),
72
+ stableLockPath:
73
+ options.stableLock ||
74
+ env(
75
+ "BUILDCHAIN_STABLE_CONTRACT_LOCK_PATH",
76
+ ".buildchain/contract-lock.json",
77
+ ),
78
+ alphaLockPath:
79
+ options.alphaLock ||
80
+ env(
81
+ "BUILDCHAIN_ALPHA_CONTRACT_LOCK_PATH",
82
+ ".buildchain/alpha-contract-lock.json",
83
+ ),
84
+ policy,
85
+ scannerRoot: v4ConsumerPolicyScannerRoot(),
86
+ });
87
+ writeJson(output, result);
88
+ writeGitHubOutputs({
89
+ "v4-consumer-policy-status": result.ok ? "passed" : "failed",
90
+ "v4-consumer-policy-receipt-path": output,
91
+ "v4-consumer-policy-receipt-root": result.receiptRoot,
92
+ "v4-consumer-policy-receipt-json": JSON.stringify(result.receipt),
93
+ "v4-consumer-policy-channel": result.receipt.invocation.channel,
94
+ "v4-consumer-policy-selector": result.receipt.invocation.visibleSelector,
95
+ "v4-consumer-policy-scanner-root": result.receipt.policy.scannerRoot,
96
+ });
97
+ return result;
98
+ }
99
+
100
+ export function certifyCommand(options = {}) {
101
+ const inputValue = options.input || env("BUILDCHAIN_V4_POLICY_RECEIPT_PATH");
102
+ if (!inputValue) throw new Error("certify requires --input");
103
+ const document = readJson(path.resolve(inputValue));
104
+ const evidence = document.consumerPolicy || document;
105
+ const receipt = evidence.receipt || evidence;
106
+ const receiptRoot =
107
+ options.receiptRoot ||
108
+ evidence.receiptRoot ||
109
+ document.receiptRoot ||
110
+ env("BUILDCHAIN_V4_POLICY_RECEIPT_ROOT");
111
+ const callerRoot = path.resolve(
112
+ options.callerRoot || env("BUILDCHAIN_EXPECTED_CALLER_ROOT", process.cwd()),
113
+ );
114
+ const stableLockPath =
115
+ options.stableLock ||
116
+ env(
117
+ "BUILDCHAIN_STABLE_CONTRACT_LOCK_PATH",
118
+ ".buildchain/contract-lock.json",
119
+ );
120
+ const alphaLockPath =
121
+ options.alphaLock ||
122
+ env(
123
+ "BUILDCHAIN_ALPHA_CONTRACT_LOCK_PATH",
124
+ ".buildchain/alpha-contract-lock.json",
125
+ );
126
+ const repository =
127
+ options.repository || env("BUILDCHAIN_EXPECTED_CALLER_REPOSITORY");
128
+ const sourceSha =
129
+ options.sourceSha || env("BUILDCHAIN_EXPECTED_CALLER_SOURCE_SHA");
130
+ const invokedWorkflow =
131
+ options.invokedWorkflow ||
132
+ env("BUILDCHAIN_EXPECTED_INVOKED_WORKFLOW") ||
133
+ receipt?.invocation?.workflow;
134
+ const resolvedRuntimeSha =
135
+ options.resolvedRuntimeSha || env("BUILDCHAIN_EXPECTED_RUNTIME_SHA");
136
+ const authority = resolveV4FloatingConsumerPolicyAuthority({
137
+ runtimeRoot: RUNTIME_ROOT,
138
+ callerRoot,
139
+ stableLockPath,
140
+ alphaLockPath,
141
+ });
142
+ const selectedLock =
143
+ receipt?.invocation?.visibleSelector === "v4-alpha"
144
+ ? readJson(path.join(callerRoot, alphaLockPath))
145
+ : readJson(path.join(callerRoot, stableLockPath));
146
+ const authorityScan = scanV4FloatingConsumerPolicy({
147
+ root: callerRoot,
148
+ repository,
149
+ sourceSha,
150
+ invokedWorkflow,
151
+ invocationSourcePath: receipt?.invocation?.sourcePath,
152
+ expectedInvocationChannel: receipt?.invocation?.channel,
153
+ resolvedWorkflowSha: selectedLock.buildchain?.resolvedSha,
154
+ resolvedRuntimeSha,
155
+ stableLockPath,
156
+ alphaLockPath,
157
+ policy: authority.policy,
158
+ scannerRoot: authority.scannerRoot,
159
+ });
160
+ const certificationAuthority = {
161
+ receiptRoot: authorityScan.receiptRoot,
162
+ policyRoot: authority.policyRoot,
163
+ scannerRoot: authority.scannerRoot,
164
+ contractLocks: authority.contractLocks,
165
+ };
166
+ const result = certifyV4FloatingConsumerPolicyReceipt({
167
+ receipt,
168
+ receiptRoot,
169
+ expectedReceiptRoot: authorityScan.receiptRoot,
170
+ repository,
171
+ sourceSha,
172
+ invokedWorkflow,
173
+ resolvedRuntimeSha,
174
+ policyRoot: authority.policyRoot,
175
+ scannerRoot: authority.scannerRoot,
176
+ stableLockRoot: authority.contractLocks.stable.root,
177
+ alphaLockRoot: authority.contractLocks.alpha.root,
178
+ stableLockPath,
179
+ alphaLockPath,
180
+ authority: certificationAuthority,
181
+ });
182
+ const output = path.resolve(
183
+ options.output ||
184
+ env(
185
+ "BUILDCHAIN_V4_POLICY_CERTIFICATION_PATH",
186
+ ".buildchain/evidence/v4-consumer-policy-certification.json",
187
+ ),
188
+ );
189
+ const documentWithAuthority = {
190
+ ...result,
191
+ authority: certificationAuthority,
192
+ };
193
+ writeJson(output, documentWithAuthority);
194
+ writeGitHubOutputs({
195
+ "v4-consumer-policy-certification-status": result.ok
196
+ ? "certified"
197
+ : "rejected",
198
+ "v4-consumer-policy-certification-path": output,
199
+ "v4-consumer-policy-certification-root": result.certificationRoot,
200
+ });
201
+ return documentWithAuthority;
202
+ }
203
+
204
+ function main(argv = process.argv.slice(2)) {
205
+ const command = argv.shift();
206
+ const options = parseArgs(argv);
207
+ const result =
208
+ command === "scan"
209
+ ? scanCommand(options)
210
+ : command === "certify"
211
+ ? certifyCommand(options)
212
+ : (() => {
213
+ throw new Error(
214
+ "usage: v4-consumer-policy.mjs <scan|certify> [--option value]",
215
+ );
216
+ })();
217
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
218
+ if (!result.ok) process.exitCode = 1;
219
+ }
220
+
221
+ if (
222
+ process.argv[1] &&
223
+ import.meta.url === pathToFileURL(process.argv[1]).href
224
+ ) {
225
+ try {
226
+ main();
227
+ } catch (error) {
228
+ console.error(`v4 consumer policy: ${error.message}`);
229
+ process.exitCode = 1;
230
+ }
231
+ }
@@ -0,0 +1,141 @@
1
+ name: Protected Dev Delivery
2
+
3
+ on:
4
+ repository_dispatch:
5
+ types: [buildchain-dev-delivery-wake]
6
+ workflow_dispatch:
7
+ inputs:
8
+ buildchain-ref:
9
+ description: "Buildchain runtime selector: v4, v4-alpha, or a trusted train/v4/v4.0/<capability>"
10
+ required: false
11
+ default: "v4-alpha"
12
+ target-branch:
13
+ description: "Protected dev/vN/vN.M branch"
14
+ required: true
15
+ expected-pr-number:
16
+ description: "Exact ready and approved PR number"
17
+ required: true
18
+ type: number
19
+ expected-head-sha:
20
+ description: "Exact immutable PR head"
21
+ required: true
22
+ source-workflow-run-id:
23
+ description: "Exact successful source workflow run"
24
+ required: false
25
+ type: number
26
+ default: 0
27
+ legacy-active-owner-binding-json:
28
+ description: "Explicit legacy-safe phase-less owner binding JSON"
29
+ required: false
30
+ default: ""
31
+ source-workflow-id:
32
+ description: "Pull-request workflow used only to recover a historical active owner with no recorded run"
33
+ required: false
34
+ default: ""
35
+ source-identity-root:
36
+ description: "Semantic source identity root"
37
+ required: true
38
+ source-patch-root:
39
+ description: "Semantic patch root"
40
+ required: true
41
+ assignment-root:
42
+ description: "Native Assignment root"
43
+ required: true
44
+ initiative-root:
45
+ description: "Parent Initiative root"
46
+ required: true
47
+ plan-root:
48
+ description: "Native qualification plan root"
49
+ required: true
50
+ closure-root:
51
+ description: "Affected closure root"
52
+ required: true
53
+ dependency-root:
54
+ description: "Dependency graph root"
55
+ required: true
56
+ toolchain-root:
57
+ description: "Native toolchain root"
58
+ required: true
59
+ environment-root:
60
+ description: "Exact native execution environment contract root bound before native spawn"
61
+ required: false
62
+ default: ""
63
+ affected-paths-json:
64
+ description: "JSON array representing the affected closure"
65
+ required: true
66
+ shard-evidence-roots-json:
67
+ description: "JSON array of exact native shard evidence roots"
68
+ required: false
69
+ default: "[]"
70
+ release-blocker-priority-json:
71
+ description: "Optional exact rooted release-blocker priority claim"
72
+ required: false
73
+ default: ""
74
+ native-proof-json:
75
+ description: "Optional reusable native proof"
76
+ required: false
77
+ default: ""
78
+ native-command:
79
+ description: "Slow native qualification command"
80
+ required: false
81
+ default: ""
82
+ native-command-root:
83
+ description: "Optional exact native command contract root"
84
+ required: false
85
+ default: ""
86
+ native-heartbeat-seconds:
87
+ description: "Heartbeat cadence while native qualification runs"
88
+ required: false
89
+ type: number
90
+ default: 300
91
+ delivery-class:
92
+ description: "Bounded delivery class"
93
+ required: false
94
+ default: "native-proof-required"
95
+ delivery-priority:
96
+ description: "Reviewed delivery priority"
97
+ required: false
98
+ default: "ordinary"
99
+
100
+ permissions:
101
+ actions: write
102
+ contents: write
103
+ pull-requests: write
104
+ checks: read
105
+ statuses: write
106
+
107
+ jobs:
108
+ deliver:
109
+ uses: kungfu-systems/buildchain/.github/workflows/dev-pr-auto-merge.yml@v4-alpha
110
+ with:
111
+ buildchain-ref: ${{ inputs.buildchain-ref || 'v4-alpha' }}
112
+ target-branch: ${{ github.event.client_payload.candidate.targetBranch || inputs.target-branch }}
113
+ expected-pr-number: ${{ github.event.client_payload.candidate.pullRequestNumber || inputs.expected-pr-number }}
114
+ expected-head-sha: ${{ github.event.client_payload.candidate.sourceHead || inputs.expected-head-sha }}
115
+ source-workflow-run-id: ${{ github.event.client_payload.candidate.sourceWorkflowRunId || inputs.source-workflow-run-id || github.run_id }}
116
+ legacy-active-owner-binding-json: ${{ inputs.legacy-active-owner-binding-json || '' }}
117
+ delivery-warrant-mode: required
118
+ handoff-workflow-id: native-dev-delivery.yml
119
+ source-workflow-id: ${{ inputs.source-workflow-id || '' }}
120
+ assignment-root: ${{ github.event.client_payload.candidate.assignmentRoot || inputs.assignment-root }}
121
+ initiative-root: ${{ github.event.client_payload.candidate.initiativeRoot || inputs.initiative-root }}
122
+ source-identity-root: ${{ github.event.client_payload.candidate.sourceIdentityRoot || inputs.source-identity-root }}
123
+ source-patch-root: ${{ github.event.client_payload.candidate.sourcePatchRoot || inputs.source-patch-root }}
124
+ plan-root: ${{ github.event.client_payload.candidate.planRoot || inputs.plan-root }}
125
+ closure-root: ${{ github.event.client_payload.candidate.closureRoot || inputs.closure-root }}
126
+ dependency-root: ${{ github.event.client_payload.candidate.dependencyRoot || inputs.dependency-root }}
127
+ toolchain-root: ${{ github.event.client_payload.candidate.toolchainRoot || inputs.toolchain-root }}
128
+ environment-root: ${{ github.event.client_payload.candidate.environmentRoot || inputs.environment-root }}
129
+ affected-paths-json: ${{ github.event_name == 'repository_dispatch' && toJSON(github.event.client_payload.candidate.affectedPaths) || inputs.affected-paths-json }}
130
+ shard-evidence-roots-json: ${{ github.event_name == 'repository_dispatch' && toJSON(github.event.client_payload.candidate.shardEvidenceRoots) || inputs.shard-evidence-roots-json || '[]' }}
131
+ release-blocker-priority-json: ${{ github.event_name == 'repository_dispatch' && toJSON(github.event.client_payload.candidate.releaseBlockerPriority) || inputs.release-blocker-priority-json || '' }}
132
+ native-proof-json: ${{ inputs.native-proof-json || '' }}
133
+ native-command: ${{ github.event.client_payload.candidate.nativeCommandContract.command || inputs.native-command || '' }}
134
+ native-command-root: ${{ github.event.client_payload.candidate.nativeCommandContract.commandRoot || inputs.native-command-root || '' }}
135
+ native-heartbeat-seconds: ${{ inputs.native-heartbeat-seconds || 300 }}
136
+ delivery-class: ${{ github.event.client_payload.candidate.deliveryClass || inputs.delivery-class || 'native-proof-required' }}
137
+ delivery-priority: ${{ github.event.client_payload.candidate.priority || inputs.delivery-priority || 'ordinary' }}
138
+ landing-mode: queue
139
+ dry-run: false
140
+ secrets:
141
+ github-token: ${{ secrets.BUILDCHAIN_PROMOTION_TOKEN }}