@kungfu-tech/buildchain 3.0.9-alpha.7 → 3.0.9-alpha.9

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 (43) hide show
  1. package/bin/buildchain.mjs +5 -1
  2. package/contracts/dev-delivery-authority-v2.schema.json +253 -0
  3. package/dist/site/agent-index.json +1 -0
  4. package/dist/site/artifact-schemas.json +2 -0
  5. package/dist/site/buildchain-contract.json +7 -7
  6. package/dist/site/buildchain-site.json +135 -19
  7. package/dist/site/capability-registry.json +2 -2
  8. package/dist/site/cli-registry.json +23 -0
  9. package/dist/site/kfd-claims.json +33 -8
  10. package/dist/site/kfd-upstream-aggregate.json +1 -1
  11. package/dist/site/manual-registry.json +4 -4
  12. package/dist/site/node-api-registry.json +907 -143
  13. package/dist/site/page-registry.json +127 -11
  14. package/dist/site/public-surface-audit.json +228 -7
  15. package/dist/site/publication-registry.json +4 -4
  16. package/dist/site/release-provenance.json +2 -0
  17. package/dist/site/schemas/dev-delivery-authority-v2.schema.json +442 -0
  18. package/dist/site/site-manifest.json +8 -8
  19. package/dist/site/workflow-registry.json +8 -6
  20. package/docs/MAP.md +1 -0
  21. package/docs/cli-reference.md +121 -0
  22. package/docs/dev-delivery-qualification-landing-adr.md +137 -0
  23. package/docs/dev-delivery-warrant.md +106 -13
  24. package/docs/node-api-reference.md +51 -20
  25. package/docs/versioning.md +2 -0
  26. package/package.json +4 -2
  27. package/packages/core/buildchain-channel-identity.js +2 -3
  28. package/packages/core/dev-delivery-authority.js +996 -0
  29. package/packages/core/dev-delivery-native-proof.js +89 -4
  30. package/packages/core/dev-delivery-warrant-settlement.js +65 -22
  31. package/packages/core/dev-delivery-warrant.js +92 -44
  32. package/scripts/buildchain-cli-help.mjs +3 -0
  33. package/scripts/check-inventory.mjs +1 -1
  34. package/scripts/dev-delivery-authority.mjs +368 -0
  35. package/scripts/dev-delivery-native-run.mjs +52 -4
  36. package/scripts/dev-delivery-proof.mjs +10 -0
  37. package/scripts/dev-delivery-two-phase-resume.mjs +90 -0
  38. package/scripts/dev-delivery-two-phase.mjs +31 -52
  39. package/scripts/dev-delivery-warrant.mjs +9 -2
  40. package/scripts/generate-site-bundle.mjs +6 -3
  41. package/scripts/site-capability-metadata.mjs +13 -1
  42. package/scripts/workflow-call-contract.mjs +1 -1
  43. package/templates/native-dev-delivery.yml +17 -13
@@ -4,11 +4,15 @@ import fs from "node:fs";
4
4
  import path from "node:path";
5
5
 
6
6
  import {
7
- createNativeProofReuseDecision,
8
7
  createNativeQualificationProof,
9
8
  devDeliveryContentRoot,
10
9
  } from "../packages/core/dev-delivery-warrant.js";
11
10
  import { runNativeWithHeartbeat } from "./dev-delivery-native-run.mjs";
11
+ import {
12
+ attributedGitHubBaseDelta,
13
+ classifyNativeProofAgainstCurrent,
14
+ replayQualifiedNativeWarrant,
15
+ } from "./dev-delivery-two-phase-resume.mjs";
12
16
  import { runDevDeliveryCommand } from "./dev-delivery-warrant.mjs";
13
17
 
14
18
  function flag(args, name, fallback = "") {
@@ -111,31 +115,17 @@ export class GitHubTwoPhaseClient {
111
115
 
112
116
  async baseDelta(previousBase, currentBase) {
113
117
  if (previousBase === currentBase) {
114
- return { graphKnown: true, changedPaths: [] };
118
+ return {
119
+ graphKnown: true,
120
+ attributionComplete: true,
121
+ changedPaths: [],
122
+ renames: [],
123
+ };
115
124
  }
116
125
  const data = await this.request(
117
126
  `/repos/${this.repository}/compare/${previousBase}...${currentBase}`,
118
127
  );
119
- const files = Array.isArray(data.files) ? data.files : [];
120
- const graphKnown =
121
- data.status === "ahead" &&
122
- data.merge_base_commit?.sha === previousBase &&
123
- files.length < 300;
124
- return {
125
- graphKnown,
126
- changedPaths: graphKnown
127
- ? [
128
- ...new Set(
129
- files
130
- .flatMap((entry) => [
131
- String(entry.filename || ""),
132
- String(entry.previous_filename || ""),
133
- ])
134
- .filter(Boolean),
135
- ),
136
- ].sort()
137
- : [],
138
- };
128
+ return attributedGitHubBaseDelta(data, previousBase);
139
129
  }
140
130
 
141
131
  async wake(eventType, candidate) {
@@ -143,26 +133,13 @@ export class GitHubTwoPhaseClient {
143
133
  method: "POST",
144
134
  body: {
145
135
  event_type: eventType,
146
- client_payload: candidate,
136
+ // Preserve every binding in one property under GitHub's ten-property limit.
137
+ client_payload: { candidate },
147
138
  },
148
139
  });
149
140
  }
150
141
  }
151
142
 
152
- function semanticCurrent(options, currentBase, delta) {
153
- return {
154
- sourceIdentityRoot: options.sourceIdentityRoot,
155
- sourcePatchRoot: options.sourcePatchRoot,
156
- planRoot: options.planRoot,
157
- closureRoot: options.closureRoot,
158
- dependencyRoot: options.dependencyRoot,
159
- toolchainRoot: options.toolchainRoot,
160
- currentBase,
161
- graphKnown: delta.graphKnown,
162
- changedPaths: delta.changedPaths,
163
- };
164
- }
165
-
166
143
  export function composeCandidate(candidateDirectory, expectedHead, baseSha) {
167
144
  try {
168
145
  execFileSync("git", ["-C", candidateDirectory, "merge", "--abort"], {
@@ -193,16 +170,6 @@ export function composeCandidate(candidateDirectory, expectedHead, baseSha) {
193
170
  );
194
171
  }
195
172
 
196
- async function classifyAgainstCurrent(proof, options, client) {
197
- const currentBase = await client.baseSha(options.branch);
198
- const delta = await client.baseDelta(proof.qualifiedBase, currentBase);
199
- const current = semanticCurrent(options, currentBase, delta);
200
- return {
201
- current,
202
- decision: createNativeProofReuseDecision({ proof, current }),
203
- };
204
- }
205
-
206
173
  async function releaseFailedAttempt({
207
174
  error,
208
175
  options,
@@ -290,9 +257,9 @@ export async function runTwoPhaseDelivery(options, dependencies = {}) {
290
257
  const warrantResult = readJson(options.warrantResultPath, "Warrant result");
291
258
  const warrant =
292
259
  warrantResult.observation?.activeWarrant || warrantResult.warrant;
293
- if (!warrant || warrant.phase !== "provisional") {
260
+ if (!warrant || !["provisional", "qualified"].includes(warrant.phase)) {
294
261
  throw new Error(
295
- "two-phase delivery requires an active provisional Warrant",
262
+ "two-phase delivery requires an active provisional or qualified Warrant",
296
263
  );
297
264
  }
298
265
  if (
@@ -303,11 +270,13 @@ export async function runTwoPhaseDelivery(options, dependencies = {}) {
303
270
  }
304
271
  const evidenceDirectory = path.resolve(options.evidenceDirectory);
305
272
  fs.mkdirSync(evidenceDirectory, { recursive: true });
273
+ const qualifiedReplay = await replayQualifiedNativeWarrant({ warrant, pullRequestNumber: options.pullRequestNumber, expectedHead: options.expectedHead, exactPullRequestHead: (...args) => client.exactPullRequestHead(...args) });
274
+ if (qualifiedReplay) return qualifiedReplay;
306
275
  let proof = options.nativeProofPath
307
276
  ? readJson(options.nativeProofPath, "native proof")
308
277
  : null;
309
278
  let classified = proof
310
- ? await classifyAgainstCurrent(proof, options, client)
279
+ ? await classifyNativeProofAgainstCurrent(proof, options, client)
311
280
  : null;
312
281
  let nativeAttempts = 0;
313
282
 
@@ -318,7 +287,7 @@ export async function runTwoPhaseDelivery(options, dependencies = {}) {
318
287
  options.pullRequestNumber,
319
288
  options.expectedHead,
320
289
  );
321
- classified = await classifyAgainstCurrent(proof, options, client);
290
+ classified = await classifyNativeProofAgainstCurrent(proof, options, client);
322
291
  if (classified.decision.reusable) break;
323
292
  }
324
293
  if (nativeAttempts >= 2) break;
@@ -383,6 +352,7 @@ export async function runTwoPhaseDelivery(options, dependencies = {}) {
383
352
  closureRoot: options.closureRoot,
384
353
  dependencyRoot: options.dependencyRoot,
385
354
  toolchainRoot: options.toolchainRoot,
355
+ environmentRoot: options.environmentRoot,
386
356
  qualifiedBase,
387
357
  affectedPaths: options.affectedPaths,
388
358
  shardEvidenceRoots: [
@@ -391,7 +361,8 @@ export async function runTwoPhaseDelivery(options, dependencies = {}) {
391
361
  ],
392
362
  qualifiedAt: new Date().toISOString(),
393
363
  });
394
- classified = await classifyAgainstCurrent(proof, options, client);
364
+ writeJson(path.join(evidenceDirectory, "native-proof.json"), proof);
365
+ classified = await classifyNativeProofAgainstCurrent(proof, options, client);
395
366
  }
396
367
 
397
368
  if (!classified?.decision.reusable) {
@@ -417,7 +388,9 @@ export async function runTwoPhaseDelivery(options, dependencies = {}) {
417
388
  ),
418
389
  currentBase: classified.current.currentBase,
419
390
  graphKnown: classified.current.graphKnown,
391
+ attributionComplete: classified.current.attributionComplete,
420
392
  changedPaths: JSON.stringify(classified.current.changedPaths),
393
+ renames: JSON.stringify(classified.current.renames),
421
394
  execute: true,
422
395
  token: options.token,
423
396
  apiUrl: options.apiUrl,
@@ -434,6 +407,7 @@ export async function runTwoPhaseDelivery(options, dependencies = {}) {
434
407
  nativeProofRoot: proof.proofRoot,
435
408
  nativeReuseDecisionRoot: classified.decision.decisionRoot,
436
409
  qualificationReceiptRoot: qualified.receiptRoot,
410
+ landingAuthority: false,
437
411
  qualifiedWarrant: qualified.observation.activeWarrant,
438
412
  };
439
413
  } catch (error) {
@@ -521,6 +495,11 @@ function cliOptions(args, environment = process.env) {
521
495
  "toolchain-root",
522
496
  environment.BUILDCHAIN_DEV_DELIVERY_TOOLCHAIN_ROOT,
523
497
  ),
498
+ environmentRoot: flag(
499
+ args,
500
+ "environment-root",
501
+ environment.BUILDCHAIN_DEV_DELIVERY_ENVIRONMENT_ROOT,
502
+ ),
524
503
  affectedPaths: jsonList(
525
504
  flag(
526
505
  args,
@@ -73,13 +73,14 @@ function decodeBlob(blob) {
73
73
  }
74
74
 
75
75
  export class GitHubDevDeliveryStore {
76
- constructor({ repository, token, apiUrl = "https://api.github.com", fetchImpl = globalThis.fetch } = {}) {
76
+ constructor({ repository, token, apiUrl = "https://api.github.com", fetchImpl = globalThis.fetch, createInitialState = createDevDeliveryQueue } = {}) {
77
77
  this.repository = normalizeRepository(repository);
78
78
  if (!fetchImpl) throw new Error("fetch is required");
79
79
  if (!token) throw new Error("GITHUB_TOKEN is required for the GitHub dev delivery store");
80
80
  this.token = token;
81
81
  this.apiUrl = apiUrl.replace(/\/+$/, "");
82
82
  this.fetch = fetchImpl;
83
+ this.createInitialState = createInitialState;
83
84
  }
84
85
 
85
86
  async request(method, requestPath, body) {
@@ -113,7 +114,7 @@ export class GitHubDevDeliveryStore {
113
114
  return {
114
115
  exists: false,
115
116
  commitSha: "",
116
- queue: createDevDeliveryQueue({
117
+ queue: this.createInitialState({
117
118
  repository: this.repository.fullName,
118
119
  protectedBase,
119
120
  now,
@@ -206,6 +207,7 @@ function transitionFor(command, queue, options) {
206
207
  closureRoot: exactRoot(options.closureRoot, "closureRoot"),
207
208
  dependencyRoot: exactRoot(options.dependencyRoot, "dependencyRoot"),
208
209
  toolchainRoot: exactRoot(options.toolchainRoot, "toolchainRoot"),
210
+ ...(options.environmentRoot ? { environmentRoot: exactRoot(options.environmentRoot, "environmentRoot") } : {}),
209
211
  affectedPaths: jsonList(options.affectedPaths, "affected paths"),
210
212
  sourceWorkflowRunId: options.sourceWorkflowRunId ? positiveInteger(options.sourceWorkflowRunId, "sourceWorkflowRunId") : 0,
211
213
  deliveryClass: options.deliveryClass,
@@ -233,7 +235,9 @@ function transitionFor(command, queue, options) {
233
235
  current: {
234
236
  currentBase: options.currentBase,
235
237
  graphKnown: options.graphKnown,
238
+ attributionComplete: options.attributionComplete,
236
239
  changedPaths: jsonList(options.changedPaths, "changed paths"),
240
+ renames: jsonList(options.renames, "renames"),
237
241
  },
238
242
  now: options.now,
239
243
  });
@@ -426,10 +430,13 @@ export function devDeliveryCliOptions(args = [], environment = process.env) {
426
430
  currentBase: flag(rest, "current-base", environment.BUILDCHAIN_DEV_DELIVERY_CURRENT_BASE),
427
431
  changedPaths: flag(rest, "changed-paths-json", environment.BUILDCHAIN_DEV_DELIVERY_CHANGED_PATHS || "[]"),
428
432
  graphKnown: ["1", "true", "yes", "on"].includes(flag(rest, "graph-known", environment.BUILDCHAIN_DEV_DELIVERY_GRAPH_KNOWN).trim().toLowerCase()),
433
+ attributionComplete: ["1", "true", "yes", "on"].includes(flag(rest, "attribution-complete", environment.BUILDCHAIN_DEV_DELIVERY_ATTRIBUTION_COMPLETE).trim().toLowerCase()),
434
+ renames: flag(rest, "renames-json", environment.BUILDCHAIN_DEV_DELIVERY_RENAMES || "[]"),
429
435
  planRoot: flag(rest, "plan-root", environment.BUILDCHAIN_DEV_DELIVERY_PLAN_ROOT),
430
436
  closureRoot: flag(rest, "closure-root", environment.BUILDCHAIN_DEV_DELIVERY_CLOSURE_ROOT),
431
437
  dependencyRoot: flag(rest, "dependency-root", environment.BUILDCHAIN_DEV_DELIVERY_DEPENDENCY_ROOT),
432
438
  toolchainRoot: flag(rest, "toolchain-root", environment.BUILDCHAIN_DEV_DELIVERY_TOOLCHAIN_ROOT),
439
+ environmentRoot: flag(rest, "environment-root", environment.BUILDCHAIN_DEV_DELIVERY_ENVIRONMENT_ROOT),
433
440
  deliveryClass: flag(rest, "delivery-class", environment.BUILDCHAIN_DEV_DELIVERY_CLASS),
434
441
  priority: flag(rest, "priority", environment.BUILDCHAIN_DEV_DELIVERY_PRIORITY || "ordinary"),
435
442
  fencingToken: flag(rest, "fencing-token", environment.BUILDCHAIN_DEV_DELIVERY_FENCING_TOKEN),
@@ -931,7 +931,7 @@ function buildSiteBundle() {
931
931
  "schemas/release-tail-capabilities-v1.schema.json",
932
932
  "schemas/release-tail-provider-bindings-v1.schema.json",
933
933
  "schemas/kfd-agent-hub-adoption.schema.json",
934
- "schemas/kfd-product-gate-input-v1.schema.json",
934
+ "schemas/kfd-product-gate-input-v1.schema.json", "schemas/dev-delivery-authority-v2.schema.json",
935
935
  "kfd-support.json",
936
936
  "artifact-evidence.json",
937
937
  "product-mechanism.json",
@@ -968,7 +968,7 @@ function buildSiteBundle() {
968
968
  "schemas/release-tail-capabilities-v1.schema.json",
969
969
  "schemas/release-tail-provider-bindings-v1.schema.json",
970
970
  "schemas/kfd-agent-hub-adoption.schema.json",
971
- "schemas/kfd-product-gate-input-v1.schema.json",
971
+ "schemas/kfd-product-gate-input-v1.schema.json", "schemas/dev-delivery-authority-v2.schema.json",
972
972
  "buildchain-contract.json",
973
973
  "kfd-claims.json",
974
974
  "product-mechanism.json",
@@ -1101,7 +1101,7 @@ function buildSiteBundle() {
1101
1101
  "schemas/release-tail-capabilities-v1.schema.json",
1102
1102
  "schemas/release-tail-provider-bindings-v1.schema.json",
1103
1103
  "schemas/kfd-agent-hub-adoption.schema.json",
1104
- "schemas/kfd-product-gate-input-v1.schema.json",
1104
+ "schemas/kfd-product-gate-input-v1.schema.json", "schemas/dev-delivery-authority-v2.schema.json",
1105
1105
  "buildchain-contract.json",
1106
1106
  "kfd-upstream-aggregate.json",
1107
1107
  "kfd-claims.json",
@@ -1285,6 +1285,9 @@ function buildSiteBundle() {
1285
1285
  ),
1286
1286
  "schemas/kfd-agent-hub-adoption.schema.json": KFD_AGENT_HUB_ADOPTION_SCHEMA,
1287
1287
  "schemas/kfd-product-gate-input-v1.schema.json": KFD_PRODUCT_GATE_INPUT_SCHEMA,
1288
+ "schemas/dev-delivery-authority-v2.schema.json": readJson(
1289
+ "contracts/dev-delivery-authority-v2.schema.json",
1290
+ ),
1288
1291
  "badge-endpoint-registry.json": badgeEndpointRegistry,
1289
1292
  "publication-registry.json": publicationRegistry,
1290
1293
  "buildchain-contract.json": createBuildchainContractWorld({ root, controllerRegistry }),
@@ -92,6 +92,17 @@ export function cliCommandMeta(id) {
92
92
  "kfd-upstream-roles": { group: "kfd-trust", purpose: "List Buildchain-managed KFD upstream role values and inference policy." },
93
93
  lifecycle: { group: "reusable-build", purpose: "Run configured lifecycle commands and write deterministic artifact manifests." },
94
94
  dev: { group: "governance-versioning", purpose: "Inspect protected development-channel governance command families." },
95
+ "dev-authority-admit-merge-group": { group: "governance-versioning", purpose: "Verify that one exact candidate holds the exclusive Landing Warrant before merge_group admission." },
96
+ "dev-authority-complete-qualification": { group: "governance-versioning", purpose: "Bind qualification evidence and release one bounded Qualification Lease without granting landing authority." },
97
+ "dev-authority-heartbeat-landing": { group: "governance-versioning", purpose: "Extend the exact fenced Landing Warrant while final landing work remains live." },
98
+ "dev-authority-heartbeat-qualification": { group: "governance-versioning", purpose: "Extend one exact fenced Qualification Lease while qualification work remains live." },
99
+ "dev-authority-lease-landing": { group: "governance-versioning", purpose: "Issue or retain the single exclusive Landing Warrant for a qualified candidate." },
100
+ "dev-authority-lease-qualification": { group: "governance-versioning", purpose: "Issue one qualification-only lease within the configured bounded lane count." },
101
+ "dev-authority-migrate": { group: "governance-versioning", purpose: "Migrate one exact v1 Warrant state into v2 without rewriting candidate or fencing evidence." },
102
+ "dev-authority-observe": { group: "governance-versioning", purpose: "Read bounded Qualification Leases and the exclusive Landing Warrant without mutating authority." },
103
+ "dev-authority-recover": { group: "governance-versioning", purpose: "Recover expired qualification or Landing authority and emit one rooted wake instruction." },
104
+ "dev-authority-settle": { group: "governance-versioning", purpose: "Settle terminal candidate evidence idempotently and release held qualification or Landing authority immediately." },
105
+ "dev-authority-submit": { group: "governance-versioning", purpose: "Submit an exact candidate to the opt-in bounded-qualification authority state." },
95
106
  "dev-proof-classify": { group: "governance-versioning", purpose: "Classify source-qualified candidate changes against a current integration base." },
96
107
  "dev-proof-integration": { group: "governance-versioning", purpose: "Seal final exact integration delivery proof for a warranted candidate." },
97
108
  "dev-proof-replay": { group: "governance-versioning", purpose: "Replay source qualification against a Project Cut without rewriting candidate source." },
@@ -174,7 +185,8 @@ export function nodeApiMeta(exportName) {
174
185
  "./build-facts": { group: "observability-diagnostics", summary: "Git source, version, module output, product artifact, and legacy Kungfu build fact APIs." },
175
186
  "./candidate-timeline": { group: "observability-diagnostics", summary: "Source-bound candidate event normalization, per-attempt critical-path-safe aggregation, and compact reporting APIs." },
176
187
  "./channel-candidate": { group: "governance-versioning", summary: "Exact-source channel candidate decisions, same-SHA workflow evidence validation, and deterministic source-lock reference APIs." },
177
- "./dev-delivery-warrant": { group: "governance-versioning", summary: "Durable fair Dev Delivery Warrant queue, fenced lease, and split source and integration proof APIs." },
188
+ "./dev-delivery-authority": { group: "governance-versioning", summary: "Opt-in bounded Qualification Lease, exclusive Landing Warrant, exact v1 migration, admission, and terminal settlement APIs." },
189
+ "./dev-delivery-warrant": { group: "governance-versioning", summary: "Durable single-flight Warrant queue, fenced lease, and split source and integration proof APIs." },
178
190
  "./cache-evidence": { group: "observability-diagnostics", summary: "Content-addressed cache operation receipts and source/platform-bound evidence-set verification APIs." },
179
191
  "./diagnostics": { group: "observability-diagnostics", summary: "Native diagnostics collection, summarization, cache, compiler, and process-sampler APIs." },
180
192
  "./logging": { group: "observability-diagnostics", summary: "Buildchain JSONL logging, span, summary, and verification APIs." },
@@ -6,7 +6,7 @@ import { pathToFileURL } from "node:url";
6
6
  import { evaluateWorkflowCallContract } from "../packages/core/workflow-call-contract.js";
7
7
  import { parseWorkflowDocument } from "../packages/core/workflow-yaml-contract.js";
8
8
 
9
- export const SELF_RELEASE_REF = "769b221bad7a6b9104afad4c2628d9dca396ab0f";
9
+ export const SELF_RELEASE_REF = "cc6c32845ab5779009aeb48cc34efe65e229fe30";
10
10
  export const SELF_RELEASE_PUBLIC_WORKFLOW = `kungfu-systems/buildchain/.github/workflows/release-candidate-promote.yml@${SELF_RELEASE_REF}`;
11
11
 
12
12
  function parityFailure(message) {
@@ -39,6 +39,9 @@ on:
39
39
  toolchain-root:
40
40
  description: "Native toolchain root"
41
41
  required: true
42
+ environment-root:
43
+ description: "Native execution environment contract root"
44
+ required: true
42
45
  affected-paths-json:
43
46
  description: "JSON array representing the affected closure"
44
47
  required: true
@@ -58,20 +61,21 @@ jobs:
58
61
  deliver:
59
62
  uses: kungfu-systems/buildchain/.github/workflows/dev-pr-auto-merge.yml@v3
60
63
  with:
61
- target-branch: ${{ github.event.client_payload.targetBranch || inputs.target-branch }}
62
- expected-pr-number: ${{ github.event.client_payload.pullRequestNumber || inputs.expected-pr-number }}
63
- expected-head-sha: ${{ github.event.client_payload.sourceHead || inputs.expected-head-sha }}
64
- source-workflow-run-id: ${{ github.event.client_payload.sourceWorkflowRunId || github.run_id }}
64
+ target-branch: ${{ github.event.client_payload.candidate.targetBranch || inputs.target-branch }}
65
+ expected-pr-number: ${{ github.event.client_payload.candidate.pullRequestNumber || inputs.expected-pr-number }}
66
+ expected-head-sha: ${{ github.event.client_payload.candidate.sourceHead || inputs.expected-head-sha }}
67
+ source-workflow-run-id: ${{ github.event.client_payload.candidate.sourceWorkflowRunId || github.run_id }}
65
68
  delivery-warrant-mode: required
66
- assignment-root: ${{ github.event.client_payload.assignmentRoot || inputs.assignment-root }}
67
- initiative-root: ${{ github.event.client_payload.initiativeRoot || inputs.initiative-root }}
68
- source-identity-root: ${{ github.event.client_payload.sourceIdentityRoot || inputs.source-identity-root }}
69
- source-patch-root: ${{ github.event.client_payload.sourcePatchRoot || inputs.source-patch-root }}
70
- plan-root: ${{ github.event.client_payload.planRoot || inputs.plan-root }}
71
- closure-root: ${{ github.event.client_payload.closureRoot || inputs.closure-root }}
72
- dependency-root: ${{ github.event.client_payload.dependencyRoot || inputs.dependency-root }}
73
- toolchain-root: ${{ github.event.client_payload.toolchainRoot || inputs.toolchain-root }}
74
- affected-paths-json: ${{ github.event_name == 'repository_dispatch' && toJSON(github.event.client_payload.affectedPaths) || inputs.affected-paths-json }}
69
+ assignment-root: ${{ github.event.client_payload.candidate.assignmentRoot || inputs.assignment-root }}
70
+ initiative-root: ${{ github.event.client_payload.candidate.initiativeRoot || inputs.initiative-root }}
71
+ source-identity-root: ${{ github.event.client_payload.candidate.sourceIdentityRoot || inputs.source-identity-root }}
72
+ source-patch-root: ${{ github.event.client_payload.candidate.sourcePatchRoot || inputs.source-patch-root }}
73
+ plan-root: ${{ github.event.client_payload.candidate.planRoot || inputs.plan-root }}
74
+ closure-root: ${{ github.event.client_payload.candidate.closureRoot || inputs.closure-root }}
75
+ dependency-root: ${{ github.event.client_payload.candidate.dependencyRoot || inputs.dependency-root }}
76
+ toolchain-root: ${{ github.event.client_payload.candidate.toolchainRoot || inputs.toolchain-root }}
77
+ environment-root: ${{ github.event.client_payload.candidate.environmentRoot || inputs.environment-root }}
78
+ affected-paths-json: ${{ github.event_name == 'repository_dispatch' && toJSON(github.event.client_payload.candidate.affectedPaths) || inputs.affected-paths-json }}
75
79
  native-proof-json: ${{ inputs.native-proof-json || '' }}
76
80
  native-command: cmake -S . -B build && cmake --build build --parallel && ctest --test-dir build --output-on-failure
77
81
  native-heartbeat-seconds: 300