@kungfu-tech/buildchain 3.0.6-alpha.1 → 3.0.6-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 (75) hide show
  1. package/README.md +4 -4
  2. package/actions/promote-buildchain-ref/README.md +8 -0
  3. package/bin/buildchain.mjs +13 -1
  4. package/contracts/auditable-demo-scenario-v1.schema.json +52 -0
  5. package/contracts/release-candidate-recovery-v1.schema.json +102 -0
  6. package/dist/site/buildchain-contract.json +129 -34
  7. package/dist/site/buildchain-site.json +171 -45
  8. package/dist/site/capability-registry.json +5 -5
  9. package/dist/site/cli-registry.json +40 -4
  10. package/dist/site/controller-registry.json +56 -4
  11. package/dist/site/kfd-claims.json +184 -20
  12. package/dist/site/kfd-upstream-aggregate.json +1 -1
  13. package/dist/site/manual-registry.json +10 -10
  14. package/dist/site/node-api-registry.json +1242 -121
  15. package/dist/site/page-registry.json +157 -31
  16. package/dist/site/public-surface-audit.json +422 -21
  17. package/dist/site/publication-authority-registry.json +66 -1
  18. package/dist/site/publication-registry.json +4 -4
  19. package/dist/site/release-provenance.json +2 -0
  20. package/dist/site/site-manifest.json +14 -14
  21. package/dist/site/workflow-registry.json +197 -15
  22. package/docs/MAP.md +1 -0
  23. package/docs/auditable-demo.md +58 -11
  24. package/docs/aws-us-elastic-runner-burst-plane.md +23 -19
  25. package/docs/cli-reference.md +154 -0
  26. package/docs/dev-alpha-candidate-patrol.md +13 -5
  27. package/docs/dev-delivery-warrant.md +158 -0
  28. package/docs/node-api-reference.md +96 -38
  29. package/docs/publication-authority.md +11 -0
  30. package/docs/publish-transaction.md +10 -1
  31. package/docs/release-candidate.md +106 -12
  32. package/docs/release-governance.md +52 -0
  33. package/docs/reusable-build-surface.md +11 -1
  34. package/docs/shifu-gate-profiles.md +12 -1
  35. package/docs/versioning.md +2 -0
  36. package/package.json +3 -1
  37. package/packages/core/buildchain-contract.js +30 -2
  38. package/packages/core/buildchain-publication-authority.js +3 -1
  39. package/packages/core/channel-candidate.js +2 -21
  40. package/packages/core/channel-promotion-baseline.js +199 -0
  41. package/packages/core/dev-delivery-candidate-identity.js +94 -0
  42. package/packages/core/dev-delivery-common.js +73 -0
  43. package/packages/core/dev-delivery-proof.js +252 -0
  44. package/packages/core/dev-delivery-warrant-cancellation.js +94 -0
  45. package/packages/core/dev-delivery-warrant-settlement.js +73 -0
  46. package/packages/core/dev-delivery-warrant.js +591 -0
  47. package/packages/core/index.js +7 -0
  48. package/packages/core/release-candidate-recovery.js +386 -0
  49. package/scripts/auditable-demo-bundle-verification.mjs +148 -0
  50. package/scripts/auditable-demo-platform.mjs +86 -50
  51. package/scripts/auditable-demo-presentation.mjs +83 -0
  52. package/scripts/auditable-demo-renditions.mjs +264 -0
  53. package/scripts/auditable-demo.mjs +24 -30
  54. package/scripts/build-contract-core.mjs +58 -3
  55. package/scripts/buildchain-cli-help.mjs +8 -0
  56. package/scripts/buildchain-patrol.mjs +9 -0
  57. package/scripts/check-inventory.mjs +13 -2
  58. package/scripts/dev-alpha-candidate-patrol.mjs +45 -48
  59. package/scripts/dev-delivery-proof.mjs +193 -0
  60. package/scripts/dev-delivery-warrant.mjs +426 -0
  61. package/scripts/dev-pr-auto-merge.mjs +488 -46
  62. package/scripts/dev-pr-delivery-warrant.mjs +209 -0
  63. package/scripts/gate-profile-core.mjs +24 -0
  64. package/scripts/generate-site-bundle.mjs +2 -2
  65. package/scripts/git-fetch-process-tree.mjs +142 -0
  66. package/scripts/lifecycle-substage-evidence.mjs +274 -0
  67. package/scripts/locked-source-checkout.mjs +6 -3
  68. package/scripts/release-candidate-resolver.mjs +35 -3
  69. package/scripts/resolve-artifact-transfer-mode.mjs +9 -0
  70. package/scripts/resolve-build-contract.mjs +7 -0
  71. package/scripts/resume-from-candidate-run.mjs +498 -0
  72. package/scripts/route-offline-runners.mjs +1 -0
  73. package/scripts/run-lifecycle-core.mjs +9 -9
  74. package/scripts/shifu-gate-profile.mjs +10 -16
  75. package/scripts/site-capability-metadata.mjs +15 -0
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  <!-- buildchain-auditable-demo:start -->
4
4
  ## Buildchain beginner bootstrap
5
5
 
6
- [![Buildchain beginner bootstrap](docs/evidence/auditable-demo/f0413dc57e2b658fb75e82c4b7736ef87f4a573f6d6cbc1d690b52b723006492/beginner-bootstrap/demo.gif)](docs/evidence/auditable-demo/f0413dc57e2b658fb75e82c4b7736ef87f4a573f6d6cbc1d690b52b723006492/beginner-bootstrap/public-evidence.json)
6
+ [![Buildchain beginner bootstrap](docs/evidence/auditable-demo/aa5cc40f4a62ed516e163e7e2c9dae0bcf32b3c77143a17105dfc4e5eaf9f01a/beginner-bootstrap/demo.gif)](docs/evidence/auditable-demo/aa5cc40f4a62ed516e163e7e2c9dae0bcf32b3c77143a17105dfc4e5eaf9f01a/beginner-bootstrap/public-evidence.json)
7
7
 
8
8
  Animation scenario:
9
9
 
@@ -13,16 +13,16 @@ $ buildchain layout --cwd ./starter --json
13
13
  $ buildchain version
14
14
  ```
15
15
 
16
- Native renditions: [1080p MP4](docs/evidence/auditable-demo/f0413dc57e2b658fb75e82c4b7736ef87f4a573f6d6cbc1d690b52b723006492/beginner-bootstrap/demo.mp4) · [1080p WebM](docs/evidence/auditable-demo/f0413dc57e2b658fb75e82c4b7736ef87f4a573f6d6cbc1d690b52b723006492/beginner-bootstrap/demo.webm) · [720p MP4](docs/evidence/auditable-demo/f0413dc57e2b658fb75e82c4b7736ef87f4a573f6d6cbc1d690b52b723006492/beginner-bootstrap/demo-720p.mp4) · [720p WebM](docs/evidence/auditable-demo/f0413dc57e2b658fb75e82c4b7736ef87f4a573f6d6cbc1d690b52b723006492/beginner-bootstrap/demo-720p.webm)
16
+ Native renditions: [1080p MP4](docs/evidence/auditable-demo/aa5cc40f4a62ed516e163e7e2c9dae0bcf32b3c77143a17105dfc4e5eaf9f01a/beginner-bootstrap/demo.mp4) · [1080p WebM](docs/evidence/auditable-demo/aa5cc40f4a62ed516e163e7e2c9dae0bcf32b3c77143a17105dfc4e5eaf9f01a/beginner-bootstrap/demo.webm) · [720p MP4](docs/evidence/auditable-demo/aa5cc40f4a62ed516e163e7e2c9dae0bcf32b3c77143a17105dfc4e5eaf9f01a/beginner-bootstrap/demo-720p.mp4) · [720p WebM](docs/evidence/auditable-demo/aa5cc40f4a62ed516e163e7e2c9dae0bcf32b3c77143a17105dfc4e5eaf9f01a/beginner-bootstrap/demo-720p.webm)
17
17
 
18
- [Static poster / reduced-motion fallback](docs/evidence/auditable-demo/f0413dc57e2b658fb75e82c4b7736ef87f4a573f6d6cbc1d690b52b723006492/beginner-bootstrap/poster.png)
18
+ [Static poster / reduced-motion fallback](docs/evidence/auditable-demo/aa5cc40f4a62ed516e163e7e2c9dae0bcf32b3c77143a17105dfc4e5eaf9f01a/beginner-bootstrap/poster.png)
19
19
 
20
20
  <details>
21
21
  <summary>Evidence and claim boundary</summary>
22
22
 
23
23
  This exact standalone-binary scenario proves deterministic local bootstrap behavior only; it does not grant release, repository, network, or production authority.
24
24
 
25
- [Release Passport](docs/evidence/auditable-demo/f0413dc57e2b658fb75e82c4b7736ef87f4a573f6d6cbc1d690b52b723006492/beginner-bootstrap/release-passport.json) · [auditable evidence](docs/evidence/auditable-demo/f0413dc57e2b658fb75e82c4b7736ef87f4a573f6d6cbc1d690b52b723006492/beginner-bootstrap/public-evidence.json)
25
+ [Release Passport](docs/evidence/auditable-demo/aa5cc40f4a62ed516e163e7e2c9dae0bcf32b3c77143a17105dfc4e5eaf9f01a/beginner-bootstrap/release-passport.json) · [auditable evidence](docs/evidence/auditable-demo/aa5cc40f4a62ed516e163e7e2c9dae0bcf32b3c77143a17105dfc4e5eaf9f01a/beginner-bootstrap/public-evidence.json)
26
26
 
27
27
  </details>
28
28
  <!-- buildchain-auditable-demo:end -->
@@ -80,6 +80,14 @@ publish npm packages. The GitHub action dry-run still calls GitHub APIs to
80
80
  resolve the current target SHA and concrete pending ref updates, but every
81
81
  write is reported as a dry-run update.
82
82
 
83
+ When the requested version already matches every declared version-state file,
84
+ dry-run planning still runs `lifecycle.version-state` and any explicit
85
+ `verification-command` so it can discover declared derived material. It does
86
+ not fall back to the repository-wide `lifecycle.verify` in that no-op case;
87
+ full product verification can require candidate artifacts that are deliberately
88
+ not present until the later admission phase. Non-dry-run version-state writes
89
+ continue to require the configured verification lifecycle before any ref moves.
90
+
83
91
  Repositories whose package version is anchored to an explicitly selected
84
92
  upstream release can opt into manual next-anchor behavior:
85
93
 
@@ -1368,8 +1368,20 @@ async function handleDoctorCommand(args) {
1368
1368
 
1369
1369
  async function handleDevCommand(args) {
1370
1370
  const [subcommand = "", ...devArgs] = args;
1371
+ if (subcommand === "pr-admit") {
1372
+ runScript("dev-pr-auto-merge.mjs", devArgs);
1373
+ return;
1374
+ }
1375
+ if (subcommand === "warrant") {
1376
+ runScript("dev-delivery-warrant.mjs", devArgs);
1377
+ return;
1378
+ }
1379
+ if (subcommand === "proof") {
1380
+ runScript("dev-delivery-proof.mjs", devArgs);
1381
+ return;
1382
+ }
1371
1383
  if (subcommand !== "merge-queue") {
1372
- throw new Error("usage: buildchain dev merge-queue --repository <owner/repo> --branch <dev/vN/vN.M> [--from-config | --workflow <path>...]");
1384
+ throw new Error("usage: buildchain dev <pr-admit|merge-queue|warrant|proof> [options]");
1373
1385
  }
1374
1386
  runScript("dev-merge-queue.mjs", devArgs);
1375
1387
  return;
@@ -7,6 +7,22 @@
7
7
  "required": ["schema", "product", "artifact", "execution", "renditions", "demos", "publication", "authority"],
8
8
  "properties": {
9
9
  "schema": {"const": "buildchain.declarative-binary-demo/v1"},
10
+ "compositionMode": {
11
+ "type": "string",
12
+ "enum": ["presentation-framed", "terminal-fill"],
13
+ "default": "presentation-framed"
14
+ },
15
+ "playback": {
16
+ "type": "object",
17
+ "additionalProperties": false,
18
+ "required": ["schema", "mode", "activeDurationMs", "finalHoldMs"],
19
+ "properties": {
20
+ "schema": {"const": "buildchain.declarative-demo-playback/v1"},
21
+ "mode": {"const": "deterministic-readable"},
22
+ "activeDurationMs": {"type": "integer", "minimum": 1000, "maximum": 179750},
23
+ "finalHoldMs": {"type": "integer", "minimum": 250, "maximum": 5000}
24
+ }
25
+ },
10
26
  "product": {
11
27
  "type": "object",
12
28
  "additionalProperties": false,
@@ -57,6 +73,42 @@
57
73
  "stdoutIncludes": {"type": "array", "maxItems": 32, "items": {"type": "string", "minLength": 1, "maxLength": 256}}
58
74
  }
59
75
  },
76
+ "presentation": {
77
+ "type": "object",
78
+ "additionalProperties": false,
79
+ "required": ["schema", "proofs", "materialization"],
80
+ "properties": {
81
+ "schema": {"const": "buildchain.declarative-demo-presentation/v1"},
82
+ "proofs": {
83
+ "type": "array",
84
+ "minItems": 1,
85
+ "maxItems": 8,
86
+ "items": {
87
+ "type": "object",
88
+ "additionalProperties": false,
89
+ "required": ["demoId", "label", "question", "summary"],
90
+ "properties": {
91
+ "demoId": {"type": "string", "pattern": "^[a-z0-9][a-z0-9._-]{0,63}$"},
92
+ "label": {"type": "string", "minLength": 1, "maxLength": 80},
93
+ "question": {"type": "string", "minLength": 1, "maxLength": 120},
94
+ "summary": {"type": "string", "minLength": 1, "maxLength": 500},
95
+ "transitionAfter": {"type": "string", "minLength": 1, "maxLength": 500}
96
+ }
97
+ }
98
+ },
99
+ "materialization": {
100
+ "type": "object",
101
+ "additionalProperties": false,
102
+ "required": ["readmeMode", "technicalSpecPath", "technicalSpecTitle", "technicalMarker"],
103
+ "properties": {
104
+ "readmeMode": {"type": "string", "enum": ["full", "media-only"]},
105
+ "technicalSpecPath": {"type": "string", "minLength": 1},
106
+ "technicalSpecTitle": {"type": "string", "minLength": 1, "maxLength": 120},
107
+ "technicalMarker": {"type": "string", "pattern": "^[a-z0-9][a-z0-9._:-]{0,79}$"}
108
+ }
109
+ }
110
+ }
111
+ },
60
112
  "renditions": {
61
113
  "const": [
62
114
  {"id": "1080p", "role": "primary", "columns": 150, "rows": 36, "width": 1920, "height": 1080},
@@ -0,0 +1,102 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://buildchain.libkungfu.dev/schemas/release-candidate-recovery-v1.schema.json",
4
+ "title": "Buildchain Release Candidate Recovery Receipt v1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schemaVersion",
9
+ "contract",
10
+ "action",
11
+ "createdAt",
12
+ "repository",
13
+ "recoveryRunId",
14
+ "originalCandidate",
15
+ "target",
16
+ "recovered",
17
+ "skippedBuildStages",
18
+ "payloadBytes",
19
+ "buildchainToolingSha",
20
+ "transaction",
21
+ "root"
22
+ ],
23
+ "properties": {
24
+ "schemaVersion": { "const": 1 },
25
+ "contract": { "const": "kungfu-buildchain-release-candidate-recovery/v1" },
26
+ "action": { "const": "reused" },
27
+ "createdAt": { "type": "string", "format": "date-time" },
28
+ "repository": { "type": "string", "pattern": "^[^/\\s]+/[^/\\s]+$" },
29
+ "recoveryRunId": { "type": "string" },
30
+ "originalCandidate": {
31
+ "type": "object",
32
+ "additionalProperties": false,
33
+ "required": ["runId", "workflowFile", "workflowName", "pullRequest", "sourceSha", "mergeSha", "tree"],
34
+ "properties": {
35
+ "runId": { "type": "string", "pattern": "^[0-9]+$" },
36
+ "workflowFile": { "type": "string" },
37
+ "workflowName": { "type": "string" },
38
+ "pullRequest": { "type": "integer", "minimum": 1 },
39
+ "sourceSha": { "$ref": "#/$defs/gitSha" },
40
+ "mergeSha": { "type": "string", "pattern": "^(?:[0-9a-f]{40})?$" },
41
+ "tree": { "$ref": "#/$defs/gitSha" }
42
+ }
43
+ },
44
+ "target": {
45
+ "type": "object",
46
+ "additionalProperties": false,
47
+ "required": ["channel", "ref", "sha", "tree"],
48
+ "properties": {
49
+ "channel": { "enum": ["alpha", "release", "major"] },
50
+ "ref": { "type": "string" },
51
+ "sha": { "$ref": "#/$defs/gitSha" },
52
+ "tree": { "$ref": "#/$defs/gitSha" }
53
+ }
54
+ },
55
+ "recovered": {
56
+ "type": "object",
57
+ "additionalProperties": false,
58
+ "required": ["candidateRoot", "buildSummaryRoot", "artifactRoot", "artifactArchiveRoot", "artifactCount", "artifacts"],
59
+ "properties": {
60
+ "candidateRoot": { "$ref": "#/$defs/sha256" },
61
+ "buildSummaryRoot": { "$ref": "#/$defs/sha256" },
62
+ "artifactRoot": { "$ref": "#/$defs/sha256" },
63
+ "artifactArchiveRoot": { "$ref": "#/$defs/sha256" },
64
+ "artifactCount": { "type": "integer", "minimum": 1 },
65
+ "artifacts": {
66
+ "type": "array",
67
+ "minItems": 1,
68
+ "items": {
69
+ "type": "object",
70
+ "additionalProperties": false,
71
+ "required": ["name", "size", "digest"],
72
+ "properties": {
73
+ "name": { "type": "string", "minLength": 1 },
74
+ "size": { "type": "integer", "minimum": 0 },
75
+ "digest": { "$ref": "#/$defs/sha256" }
76
+ }
77
+ }
78
+ }
79
+ }
80
+ },
81
+ "skippedBuildStages": {
82
+ "const": ["install", "build", "verify", "platform-matrix"]
83
+ },
84
+ "payloadBytes": { "const": "unchanged" },
85
+ "buildchainToolingSha": { "$ref": "#/$defs/gitSha" },
86
+ "transaction": {
87
+ "type": "object",
88
+ "additionalProperties": false,
89
+ "required": ["identity", "state", "publicationState"],
90
+ "properties": {
91
+ "identity": { "type": "string" },
92
+ "state": { "enum": ["absent", "prepared", "sealed", "publishing", "publish_failed", "published", "finalizing", "complete", "repair_required", "abandoned", "failed_permanently"] },
93
+ "publicationState": { "type": "string", "minLength": 1 }
94
+ }
95
+ },
96
+ "root": { "$ref": "#/$defs/sha256" }
97
+ },
98
+ "$defs": {
99
+ "gitSha": { "type": "string", "pattern": "^[0-9a-f]{40}$" },
100
+ "sha256": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }
101
+ }
102
+ }
@@ -4,7 +4,7 @@
4
4
  "product": {
5
5
  "name": "Buildchain",
6
6
  "package": "@kungfu-tech/buildchain",
7
- "version": "3.0.6-alpha.1",
7
+ "version": "3.0.6-alpha.3",
8
8
  "repository": "https://github.com/kungfu-systems/buildchain"
9
9
  },
10
10
  "majorLine": "v3",
@@ -52,7 +52,7 @@
52
52
  "retryable GitHub fallback fetches use a bounded attempt budget before exact source SHA and tree verification"
53
53
  ],
54
54
  "breakingDigest": "sha256:dfbedd543ae0c067982b5c8c02d98dd2f7f7df88752be97fb330da6b0ba30faa",
55
- "auditDigest": "sha256:0c8c6f781e8c2490f10d70def2c16e753298c15d05e6ead916e67d2714cd5583"
55
+ "auditDigest": "sha256:ee92538b49ee91606c21f54f2ae1e5165228ff4dc7c64d8b8a6e073b8e033365"
56
56
  },
57
57
  {
58
58
  "contractVersion": 1,
@@ -91,7 +91,7 @@
91
91
  "alpha and stable channel selections use separate consumer contract locks by default"
92
92
  ],
93
93
  "breakingDigest": "sha256:c4597dfa89e1a58f1023905092b849644f5c080abf150aeba9c7e1cd5ed43962",
94
- "auditDigest": "sha256:e67bec5b6e49f69a79f652ea7d7452d0dbd1a59f53ab1e9603e929ecf1a305f4"
94
+ "auditDigest": "sha256:af415d283c9f7706d93c2c3df0b330c59487097364aa2ebc6e139a7275bcb635"
95
95
  },
96
96
  {
97
97
  "contractVersion": 1,
@@ -107,7 +107,8 @@
107
107
  "requiredOutputs": [
108
108
  "promoted-sha",
109
109
  "built-source-sha",
110
- "release-candidate-artifact"
110
+ "release-candidate-artifact",
111
+ "release-candidate-action"
111
112
  ],
112
113
  "breakingDefaults": {
113
114
  "channelDefault": "auto",
@@ -123,6 +124,15 @@
123
124
  "buildchain-stable-contract-lock-path",
124
125
  "release-candidate-workflow-file",
125
126
  "release-candidate-workflow-name",
127
+ "resume-candidate-repository",
128
+ "resume-candidate-run-id",
129
+ "resume-expected-workflow-file",
130
+ "resume-expected-workflow-name",
131
+ "resume-expected-source-tree",
132
+ "resume-expected-candidate-root",
133
+ "resume-expected-candidate-runtime-sha",
134
+ "resume-buildchain-runtime-sha",
135
+ "resume-transaction-id",
126
136
  "publish-required-artifacts-json",
127
137
  "release-passport-kfd-1-witness-jsons",
128
138
  "release-passport-kfd-2-claim-jsons",
@@ -171,13 +181,19 @@
171
181
  "train and exact-SHA runtime overrides remain limited to trusted workflow_dispatch actors",
172
182
  "promotion reuses PR-stage release-candidate artifacts",
173
183
  "promotion does not run the heavy native build matrix",
184
+ "a fresh workflow event can recover an exact successful candidate run after startup or router failure",
185
+ "recovery validates repository, workflow, PR, ancestry, tree, candidate roots, controller evidence, manifests, archive digests, and payload bytes before mutation",
186
+ "recovery emits action reused and never silently falls back to a full build",
174
187
  "built source and promotion channel SHA are recorded separately",
175
188
  "contract drift is checked before release-candidate resolution and publish",
176
189
  "publish-gate source locks are created by the wrapper and enforced by promote-buildchain-ref before publish side effects",
177
190
  "GitHub Release passport and evidence publication is delegated to promote-buildchain-ref after the semver release transaction completes"
178
191
  ],
179
- "breakingDigest": "sha256:acd401cfc46450115a3763fd4b679d85f185e8757ebd52510d6262e1533df4cf",
180
- "auditDigest": "sha256:45f72dc26b1620b0f79558922b44449bda28b25ebc051a737137b5b01c220995"
192
+ "compatibleBreakingDigests": [
193
+ "sha256:acd401cfc46450115a3763fd4b679d85f185e8757ebd52510d6262e1533df4cf"
194
+ ],
195
+ "breakingDigest": "sha256:e60642aa298933d2c103284794921a6c340a50aa91ee528b06e58892a2a006bf",
196
+ "auditDigest": "sha256:952ff4870c1e682ea62141b0c848c33825767212111ef26110617dbdaeacac5b"
181
197
  },
182
198
  {
183
199
  "contractVersion": 1,
@@ -193,7 +209,8 @@
193
209
  "requiredOutputs": [
194
210
  "promoted-sha",
195
211
  "built-source-sha",
196
- "release-candidate-artifact"
212
+ "release-candidate-artifact",
213
+ "release-candidate-action"
197
214
  ],
198
215
  "breakingDefaults": {
199
216
  "promoteOnlyReleaseCandidate": true,
@@ -212,14 +229,27 @@
212
229
  "promotion-contract-lock-digest",
213
230
  "promotion-publication-channel",
214
231
  "promotion-target-ref",
215
- "promotion-override-used"
232
+ "promotion-override-used",
233
+ "resume-candidate-repository",
234
+ "resume-candidate-run-id",
235
+ "resume-expected-workflow-file",
236
+ "resume-expected-workflow-name",
237
+ "resume-expected-source-tree",
238
+ "resume-expected-candidate-root",
239
+ "resume-expected-candidate-runtime-sha",
240
+ "resume-buildchain-runtime-sha",
241
+ "resume-transaction-id"
216
242
  ],
217
243
  "guarantees": [
218
244
  "advanced promotion verifies routed shell, runtime, lock, publication channel, and target bindings before candidate resolution",
219
- "promotion reuses PR-stage release-candidate artifacts and does not run the heavy native build matrix"
245
+ "promotion reuses PR-stage release-candidate artifacts and does not run the heavy native build matrix",
246
+ "resume-from-candidate-run is fail-closed and uses a fresh caller event instead of rerunning a frozen startup graph"
247
+ ],
248
+ "compatibleBreakingDigests": [
249
+ "sha256:aa30f22e3af0a89841310bdbdc900844dd95a66974db173fa140a71bbd7e82c0"
220
250
  ],
221
- "breakingDigest": "sha256:aa30f22e3af0a89841310bdbdc900844dd95a66974db173fa140a71bbd7e82c0",
222
- "auditDigest": "sha256:727d8fe9b0cce68e4808cc3b31b6cf95876a96bad4b5afc8fd441c669d71a1b1"
251
+ "breakingDigest": "sha256:9db8dd07152855d03ff30f9c571438593c689d3e8139fa45431d000f548242f5",
252
+ "auditDigest": "sha256:2bc947b42da3c5b06cf75c498658c76d58b0205e7ad408011c3d1ecb4ecfa415"
223
253
  },
224
254
  {
225
255
  "contractVersion": 1,
@@ -372,7 +402,7 @@
372
402
  "identity, compliance, Product System metadata, package metadata, registry history, scans, and generation grant no authority"
373
403
  ],
374
404
  "breakingDigest": "sha256:0bcba689ab5060e12230db4118895242ecb48677ff581ea0360b1833bdac558c",
375
- "auditDigest": "sha256:e7e67b9d7bf9cee6103d3cf65686fa428f1d364109c95342cd20c4801a646e02"
405
+ "auditDigest": "sha256:da366842e8943c88a4f12520faf2d19c555b7530d8f6d44cf75a37b94200960d"
376
406
  },
377
407
  {
378
408
  "contractVersion": 1,
@@ -670,7 +700,7 @@
670
700
  "README badge block checks and writes are generated from machine-readable repository facts"
671
701
  ],
672
702
  "breakingDigest": "sha256:90a73892b2d6c214048448d5f45df75639bdf7b7e8fefd9c596e04b087407bcc",
673
- "auditDigest": "sha256:9f5a8549d5d7cb42af5720a05ad3d64b6b06f6415013d62e93fcf7d404978495"
703
+ "auditDigest": "sha256:327d268736cb8d474ad0a5e43d14c62575ed95a3dbc9651f3b31a5e176f8775e"
674
704
  },
675
705
  {
676
706
  "contractVersion": 1,
@@ -760,7 +790,7 @@
760
790
  "manual entries carry source file digests so downstream sites and agents can detect stale hand-written documentation"
761
791
  ],
762
792
  "breakingDigest": "sha256:7d0d2819e3a3e72989d9c57b5efe9d0bc0a79bc0f2c82a0c7b9d6c5a211a91f2",
763
- "auditDigest": "sha256:5024e0362ee5b652967984cc49232bac6f2d882972f7c6acccdf8bf2e665ff39"
793
+ "auditDigest": "sha256:583fd7b1f584669efe06d6148d0bfe40d6c00dfefd98fd7b6737373f75adedce"
764
794
  },
765
795
  {
766
796
  "contractVersion": 1,
@@ -782,7 +812,7 @@
782
812
  "agents can discover supported Node APIs without importing internal file paths"
783
813
  ],
784
814
  "breakingDigest": "sha256:48f925608d3e2131d90936b07dc2a30341204cae3e6e785c0f77d61ad755c945",
785
- "auditDigest": "sha256:2a9cedc7a6cceacb5a9864c97b87b825329ffe5115bb580c90b3e2127f813ad1"
815
+ "auditDigest": "sha256:b8d7bf9d0cb43c55924b93bb20bf3b500f98c6b1f486f10c174cc8420783b4f6"
786
816
  },
787
817
  {
788
818
  "contractVersion": 1,
@@ -833,7 +863,7 @@
833
863
  "controllerDescriptor": {
834
864
  "contract": "buildchain.controller-descriptor/v1",
835
865
  "digest": "sha256:373723a73d188194d389dee04c394d3b79cb0c016a370f2f5d0f60979a02ed48",
836
- "registryDigest": "sha256:bbe99942ee5b4f333470525bf9ae7c4c9c66875ab384ba6a05700dac139bf5b1",
866
+ "registryDigest": "sha256:cc205cd0abe4ba5023d8afc38dea9d3f17c06f4a3622a6b8ccd3fc90b10e3fb7",
837
867
  "inputClassifications": {
838
868
  "buildchain-ref": {
839
869
  "classification": "included",
@@ -1010,12 +1040,13 @@
1010
1040
  "shifu-cache-profile-ref",
1011
1041
  "untrusted-policy",
1012
1042
  "verify-command",
1043
+ "verify-substage-evidence-path",
1013
1044
  "working-directory"
1014
1045
  ],
1015
1046
  "controllerDescriptor": {
1016
1047
  "contract": "buildchain.controller-descriptor/v1",
1017
- "digest": "sha256:ba530907e57984abd47974cf3a9bab124f04629563676a4e37cfa302549789d6",
1018
- "registryDigest": "sha256:bbe99942ee5b4f333470525bf9ae7c4c9c66875ab384ba6a05700dac139bf5b1",
1048
+ "digest": "sha256:9c0aacca910cef4619a797898ff5c24027c1583f84431a93a5efc854925326e7",
1049
+ "registryDigest": "sha256:cc205cd0abe4ba5023d8afc38dea9d3f17c06f4a3622a6b8ccd3fc90b10e3fb7",
1019
1050
  "inputClassifications": {
1020
1051
  "BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN": {
1021
1052
  "classification": "redacted",
@@ -1389,6 +1420,10 @@
1389
1420
  "classification": "digest-only",
1390
1421
  "source": "workflow-call-input"
1391
1422
  },
1423
+ "verify-substage-evidence-path": {
1424
+ "classification": "digest-only",
1425
+ "source": "workflow-call-input"
1426
+ },
1392
1427
  "working-directory": {
1393
1428
  "classification": "digest-only",
1394
1429
  "source": "workflow-call-input"
@@ -1406,7 +1441,7 @@
1406
1441
  "missing receipts are non-qualifying and must not be represented as a successful controller run"
1407
1442
  ],
1408
1443
  "breakingDigest": "sha256:6b8d38e92b2c67b5bc83fae0a3fd95bfa47582fbc176e6cdeebe7630a57534cb",
1409
- "auditDigest": "sha256:0c8c6f781e8c2490f10d70def2c16e753298c15d05e6ead916e67d2714cd5583"
1444
+ "auditDigest": "sha256:ee92538b49ee91606c21f54f2ae1e5165228ff4dc7c64d8b8a6e073b8e033365"
1410
1445
  },
1411
1446
  {
1412
1447
  "contractVersion": 1,
@@ -1540,12 +1575,13 @@
1540
1575
  "shifu-cache-profile-ref",
1541
1576
  "untrusted-policy",
1542
1577
  "verify-command",
1578
+ "verify-substage-evidence-path",
1543
1579
  "working-directory"
1544
1580
  ],
1545
1581
  "controllerDescriptor": {
1546
1582
  "contract": "buildchain.controller-descriptor/v1",
1547
- "digest": "sha256:0e0888527d7319a7603620520cdd76eb3e4434f80dbc92fffa0eb0d90f88b3e4",
1548
- "registryDigest": "sha256:bbe99942ee5b4f333470525bf9ae7c4c9c66875ab384ba6a05700dac139bf5b1",
1583
+ "digest": "sha256:48545554883888862984cdf1b6b4b56341531cdd6192600782a76b92ad22fd36",
1584
+ "registryDigest": "sha256:cc205cd0abe4ba5023d8afc38dea9d3f17c06f4a3622a6b8ccd3fc90b10e3fb7",
1549
1585
  "inputClassifications": {
1550
1586
  "BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN": {
1551
1587
  "classification": "redacted",
@@ -1931,6 +1967,10 @@
1931
1967
  "classification": "digest-only",
1932
1968
  "source": "workflow-call-input"
1933
1969
  },
1970
+ "verify-substage-evidence-path": {
1971
+ "classification": "digest-only",
1972
+ "source": "workflow-call-input"
1973
+ },
1934
1974
  "working-directory": {
1935
1975
  "classification": "digest-only",
1936
1976
  "source": "workflow-call-input"
@@ -1944,7 +1984,7 @@
1944
1984
  "missing receipts are non-qualifying and must not be represented as a successful controller run"
1945
1985
  ],
1946
1986
  "breakingDigest": "sha256:d40dd05d7e07473d4b2dc1b62fbb0ed6f06449b4d3a7c44a2e8014313e3c0273",
1947
- "auditDigest": "sha256:e67bec5b6e49f69a79f652ea7d7452d0dbd1a59f53ab1e9603e929ecf1a305f4"
1987
+ "auditDigest": "sha256:af415d283c9f7706d93c2c3df0b330c59487097364aa2ebc6e139a7275bcb635"
1948
1988
  },
1949
1989
  {
1950
1990
  "contractVersion": 1,
@@ -2014,7 +2054,7 @@
2014
2054
  "controllerDescriptor": {
2015
2055
  "contract": "buildchain.controller-descriptor/v1",
2016
2056
  "digest": "sha256:8e42956a2c10fa109500e72b97994f06b3d22a19cc63a46f66410b2e81706e9d",
2017
- "registryDigest": "sha256:bbe99942ee5b4f333470525bf9ae7c4c9c66875ab384ba6a05700dac139bf5b1",
2057
+ "registryDigest": "sha256:cc205cd0abe4ba5023d8afc38dea9d3f17c06f4a3622a6b8ccd3fc90b10e3fb7",
2018
2058
  "inputClassifications": {
2019
2059
  "artifact-name": {
2020
2060
  "classification": "included",
@@ -2145,7 +2185,7 @@
2145
2185
  "missing receipts are non-qualifying and must not be represented as a successful controller run"
2146
2186
  ],
2147
2187
  "breakingDigest": "sha256:5f1868478b7ccd9fb79aea76bc771289d2ca6bd2dccd1abf57575426f1eae5fb",
2148
- "auditDigest": "sha256:81ecbba803625efc00fba9aadd98c0baa3f6477a105db29f1db366853a464028"
2188
+ "auditDigest": "sha256:9c22dc647886a67250485185810978775f4eaa2efdbfdc4f959b918e3ec1e312"
2149
2189
  },
2150
2190
  {
2151
2191
  "contractVersion": 1,
@@ -2231,7 +2271,7 @@
2231
2271
  "controllerDescriptor": {
2232
2272
  "contract": "buildchain.controller-descriptor/v1",
2233
2273
  "digest": "sha256:c5274b37f04d0054559fdc8698c51bd0f0d8ae470baf163e9caa7699aa970575",
2234
- "registryDigest": "sha256:bbe99942ee5b4f333470525bf9ae7c4c9c66875ab384ba6a05700dac139bf5b1",
2274
+ "registryDigest": "sha256:cc205cd0abe4ba5023d8afc38dea9d3f17c06f4a3622a6b8ccd3fc90b10e3fb7",
2235
2275
  "inputClassifications": {
2236
2276
  "artifact-path": {
2237
2277
  "classification": "digest-only",
@@ -2475,7 +2515,7 @@
2475
2515
  "controllerDescriptor": {
2476
2516
  "contract": "buildchain.controller-descriptor/v1",
2477
2517
  "digest": "sha256:6b132790b9798e8a5dfbe095701d8e024c160a08bc7c4bd477ee79feef7a9cfd",
2478
- "registryDigest": "sha256:bbe99942ee5b4f333470525bf9ae7c4c9c66875ab384ba6a05700dac139bf5b1",
2518
+ "registryDigest": "sha256:cc205cd0abe4ba5023d8afc38dea9d3f17c06f4a3622a6b8ccd3fc90b10e3fb7",
2479
2519
  "inputClassifications": {
2480
2520
  "artifact-name": {
2481
2521
  "classification": "included",
@@ -2657,7 +2697,7 @@
2657
2697
  "controllerDescriptor": {
2658
2698
  "contract": "buildchain.controller-descriptor/v1",
2659
2699
  "digest": "sha256:6d71409659fbf8543c7e520b0c493d8afe86bdf60286b860bb917f0041ebc173",
2660
- "registryDigest": "sha256:bbe99942ee5b4f333470525bf9ae7c4c9c66875ab384ba6a05700dac139bf5b1",
2700
+ "registryDigest": "sha256:cc205cd0abe4ba5023d8afc38dea9d3f17c06f4a3622a6b8ccd3fc90b10e3fb7",
2661
2701
  "inputClassifications": {
2662
2702
  "artifact-name": {
2663
2703
  "classification": "included",
@@ -2918,6 +2958,7 @@
2918
2958
  "publication-control-plane-audit-json",
2919
2959
  "publication-expected-json",
2920
2960
  "publication-gate-aggregate-json",
2961
+ "publication-gate-command",
2921
2962
  "publication-package-name",
2922
2963
  "publication-product",
2923
2964
  "publication-publisher-workflow-path",
@@ -2941,6 +2982,7 @@
2941
2982
  "release-candidate-family-evidence-required",
2942
2983
  "release-candidate-family-evidence-root",
2943
2984
  "release-candidate-family-initiative-id",
2985
+ "release-candidate-wait-seconds",
2944
2986
  "release-candidate-workflow-file",
2945
2987
  "release-candidate-workflow-name",
2946
2988
  "release-passport",
@@ -2965,6 +3007,15 @@
2965
3007
  "release-propagation-config-path",
2966
3008
  "required-artifact-count",
2967
3009
  "required-status-check",
3010
+ "resume-buildchain-runtime-sha",
3011
+ "resume-candidate-repository",
3012
+ "resume-candidate-run-id",
3013
+ "resume-expected-candidate-root",
3014
+ "resume-expected-candidate-runtime-sha",
3015
+ "resume-expected-source-tree",
3016
+ "resume-expected-workflow-file",
3017
+ "resume-expected-workflow-name",
3018
+ "resume-transaction-id",
2968
3019
  "runner-preset",
2969
3020
  "standalone-binary-distribution",
2970
3021
  "target-ref",
@@ -2973,8 +3024,8 @@
2973
3024
  ],
2974
3025
  "controllerDescriptor": {
2975
3026
  "contract": "buildchain.controller-descriptor/v1",
2976
- "digest": "sha256:220710d81a41b50edb4dc65cea3e1e5d20805406eaaced65bc006718700696b9",
2977
- "registryDigest": "sha256:bbe99942ee5b4f333470525bf9ae7c4c9c66875ab384ba6a05700dac139bf5b1",
3027
+ "digest": "sha256:bc03b3ac295e33b738fe5168e14ebf4d0fabf2325b4ae4a3d2b3c12afe816068",
3028
+ "registryDigest": "sha256:cc205cd0abe4ba5023d8afc38dea9d3f17c06f4a3622a6b8ccd3fc90b10e3fb7",
2978
3029
  "inputClassifications": {
2979
3030
  "BUILDCHAIN_ISSUE_APP_ID": {
2980
3031
  "classification": "redacted",
@@ -3188,6 +3239,10 @@
3188
3239
  "classification": "digest-only",
3189
3240
  "source": "workflow-call-input"
3190
3241
  },
3242
+ "publication-gate-command": {
3243
+ "classification": "digest-only",
3244
+ "source": "workflow-call-input"
3245
+ },
3191
3246
  "publication-package-name": {
3192
3247
  "classification": "included",
3193
3248
  "source": "workflow-call-input"
@@ -3280,6 +3335,10 @@
3280
3335
  "classification": "included",
3281
3336
  "source": "workflow-call-input"
3282
3337
  },
3338
+ "release-candidate-wait-seconds": {
3339
+ "classification": "included",
3340
+ "source": "workflow-call-input"
3341
+ },
3283
3342
  "release-candidate-workflow-file": {
3284
3343
  "classification": "included",
3285
3344
  "source": "workflow-call-input"
@@ -3376,6 +3435,42 @@
3376
3435
  "classification": "included",
3377
3436
  "source": "workflow-call-input"
3378
3437
  },
3438
+ "resume-buildchain-runtime-sha": {
3439
+ "classification": "included",
3440
+ "source": "workflow-call-input"
3441
+ },
3442
+ "resume-candidate-repository": {
3443
+ "classification": "included",
3444
+ "source": "workflow-call-input"
3445
+ },
3446
+ "resume-candidate-run-id": {
3447
+ "classification": "included",
3448
+ "source": "workflow-call-input"
3449
+ },
3450
+ "resume-expected-candidate-root": {
3451
+ "classification": "included",
3452
+ "source": "workflow-call-input"
3453
+ },
3454
+ "resume-expected-candidate-runtime-sha": {
3455
+ "classification": "included",
3456
+ "source": "workflow-call-input"
3457
+ },
3458
+ "resume-expected-source-tree": {
3459
+ "classification": "included",
3460
+ "source": "workflow-call-input"
3461
+ },
3462
+ "resume-expected-workflow-file": {
3463
+ "classification": "included",
3464
+ "source": "workflow-call-input"
3465
+ },
3466
+ "resume-expected-workflow-name": {
3467
+ "classification": "included",
3468
+ "source": "workflow-call-input"
3469
+ },
3470
+ "resume-transaction-id": {
3471
+ "classification": "included",
3472
+ "source": "workflow-call-input"
3473
+ },
3379
3474
  "runner-preset": {
3380
3475
  "classification": "digest-only",
3381
3476
  "source": "workflow-call-input"
@@ -3405,7 +3500,7 @@
3405
3500
  "missing receipts are non-qualifying and must not be represented as a successful controller run"
3406
3501
  ],
3407
3502
  "breakingDigest": "sha256:015d8de793adbd4c539416be7d7512e18cc92097e629b0203fa06d2c183e98bd",
3408
- "auditDigest": "sha256:727d8fe9b0cce68e4808cc3b31b6cf95876a96bad4b5afc8fd441c669d71a1b1"
3503
+ "auditDigest": "sha256:2bc947b42da3c5b06cf75c498658c76d58b0205e7ad408011c3d1ecb4ecfa415"
3409
3504
  },
3410
3505
  {
3411
3506
  "contractVersion": 1,
@@ -3470,7 +3565,7 @@
3470
3565
  "controllerDescriptor": {
3471
3566
  "contract": "buildchain.controller-descriptor/v1",
3472
3567
  "digest": "sha256:660579b5561e8e33375a3f3b1fefbb8a5bd8241a55ba43374d786fb772c24a12",
3473
- "registryDigest": "sha256:bbe99942ee5b4f333470525bf9ae7c4c9c66875ab384ba6a05700dac139bf5b1",
3568
+ "registryDigest": "sha256:cc205cd0abe4ba5023d8afc38dea9d3f17c06f4a3622a6b8ccd3fc90b10e3fb7",
3474
3569
  "inputClassifications": {
3475
3570
  "agent-work-context-json": {
3476
3571
  "classification": "digest-only",
@@ -3605,7 +3700,7 @@
3605
3700
  "controllerDescriptor": {
3606
3701
  "contract": "buildchain.controller-descriptor/v1",
3607
3702
  "digest": "sha256:b6f53563c0adc859bc586c05fce560a5094d7d9666438d63c5fd3e1fc4774555",
3608
- "registryDigest": "sha256:bbe99942ee5b4f333470525bf9ae7c4c9c66875ab384ba6a05700dac139bf5b1",
3703
+ "registryDigest": "sha256:cc205cd0abe4ba5023d8afc38dea9d3f17c06f4a3622a6b8ccd3fc90b10e3fb7",
3609
3704
  "inputClassifications": {}
3610
3705
  },
3611
3706
  "guarantees": [
@@ -3618,6 +3713,6 @@
3618
3713
  "auditDigest": "sha256:d07482cd66413a2fb3781a3b76f960b8151b6231841799647fe237820de2fde6"
3619
3714
  }
3620
3715
  ],
3621
- "compatibilityDigest": "sha256:76c3dd58a02887ecd6af33d63e749fef0a988a820fea99bdf4cb078cc48caa83",
3622
- "contractDigest": "sha256:3e34234237c55bc2908fca99e06598888cc2804a150d42c9551e428265c58a8f"
3716
+ "compatibilityDigest": "sha256:80cfdf1786019217c439810f1a80d2866bf8f7ef35a6fa569e1a687fb2bf4cbe",
3717
+ "contractDigest": "sha256:6a5dbfb2beaa4600c0979e33a8e756230f20c690ca63a873314eb496dd9ee9db"
3623
3718
  }