@kungfu-tech/buildchain 3.0.9-alpha.9 → 4.0.0-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 (262) hide show
  1. package/AGENTS.md +39 -0
  2. package/README.md +17 -13
  3. package/actions/promote-buildchain-ref/README.md +0 -10
  4. package/actions/release-tail/README.md +6 -10
  5. package/architecture/internal-capabilities.json +502 -0
  6. package/architecture/maintainability-baseline.json +59 -0
  7. package/architecture/maintainability-policy.json +1384 -0
  8. package/architecture/release-tail-contract-inventory.json +587 -0
  9. package/architecture/v3-core-mechanism-inventory.json +1043 -0
  10. package/architecture/v3-core-mechanism-inventory.md +67 -0
  11. package/architecture/v4-adopter-delivery-parity.json +47 -0
  12. package/architecture/v4-architecture-constitution.md +210 -0
  13. package/architecture/v4-bootstrap-authority.json +56 -0
  14. package/architecture/v4-canonical-contract-fixtures.json +105 -0
  15. package/architecture/v4-capability-state-machine-manifest.json +480 -0
  16. package/architecture/v4-capability-state-machine-manifest.schema.json +202 -0
  17. package/architecture/v4-delivery-warrant-shadow-bootstrap-plan.json +830 -0
  18. package/architecture/v4-delivery-warrant-shadow-bootstrap-plan.md +223 -0
  19. package/architecture/v4-delivery-warrant-shadow-bootstrap-plan.schema.json +318 -0
  20. package/architecture/v4-delivery-warrant-shadow-fixtures.json +227 -0
  21. package/architecture/v4-delivery-warrant-shadow-fixtures.schema.json +67 -0
  22. package/architecture/v4-exception-ledger.json +5 -0
  23. package/architecture/v4-exception-ledger.schema.json +56 -0
  24. package/architecture/v4-partial-mutation-recovery-qualification.json +65 -0
  25. package/architecture/v4-platform-stage-checkpoints.json +97 -0
  26. package/architecture/v4-provider-operation-journal-contract.json +113 -0
  27. package/architecture/v4-release-activation-shadow-domain.json +61 -0
  28. package/architecture/v4-release-train-parity.json +68 -0
  29. package/architecture/v4-rust-libnode-bridge-evaluation.json +107 -0
  30. package/architecture/v4-rust-libnode-bridge-spike.md +85 -0
  31. package/architecture/v4-stable-publication-fence.json +66 -0
  32. package/architecture/v4-stage-capsule-contract.json +90 -0
  33. package/architecture/v4-stage-capsule-qualification.json +99 -0
  34. package/architecture/v4-stage-capsule-resume-planner.json +52 -0
  35. package/architecture/v4-stage-capsule-store-contract.json +72 -0
  36. package/bin/buildchain.mjs +15 -10
  37. package/contracts/auditable-demo-scenario-v1.schema.json +1 -1
  38. package/contracts/buildchain-v2-residuals-v1.json +2 -2
  39. package/contracts/fixtures/v4-delivery-warrant-trace-v1/golden.json +158 -0
  40. package/contracts/fixtures/v4-delivery-warrant-trace-v1/property.json +380 -0
  41. package/contracts/fixtures/v4-delivery-warrant-trace-v1/replay.json +163 -0
  42. package/contracts/fixtures/v4-partial-mutation-recovery-v1/shared.json +155 -0
  43. package/contracts/fixtures/v4-provider-operation-journal-v1/shared.json +457 -0
  44. package/contracts/fixtures/v4-provider-readback-idempotency-v1/shared.json +682 -0
  45. package/contracts/fixtures/v4-release-activation-shadow-v1/shared.json +53 -0
  46. package/contracts/fixtures/v4-stable-publication-fence-v1/shared.json +56 -0
  47. package/contracts/fixtures/v4-stage-capsule-resume-v1/late-platform-failure.json +176 -0
  48. package/contracts/fixtures/v4-stage-capsule-store-v1/shared.json +132 -0
  49. package/contracts/fixtures/v4-stage-capsule-v1/shared.json +111 -0
  50. package/contracts/v4-canonical-contracts-v1.schema.json +182 -0
  51. package/contracts/v4-delivery-warrant-semantic-diff-report-v1.schema.json +284 -0
  52. package/contracts/v4-delivery-warrant-trace-v1.schema.json +215 -0
  53. package/contracts/v4-host-contract-v1.schema.json +135 -0
  54. package/contracts/v4-partial-mutation-recovery-v1.schema.json +168 -0
  55. package/contracts/v4-provider-operation-journal-v1.schema.json +381 -0
  56. package/contracts/v4-release-activation-shadow-v1.schema.json +186 -0
  57. package/contracts/v4-stable-publication-fence-v1.schema.json +125 -0
  58. package/contracts/v4-stage-capsule-resume-v1.schema.json +225 -0
  59. package/contracts/v4-stage-capsule-store-v1.schema.json +154 -0
  60. package/contracts/v4-stage-capsule-v1.schema.json +178 -0
  61. package/crates/buildchain-v4-bridge/Cargo.lock +213 -0
  62. package/crates/buildchain-v4-bridge/Cargo.toml +12 -0
  63. package/crates/buildchain-v4-bridge/src/main.rs +495 -0
  64. package/dist/site/agent-index.json +0 -4
  65. package/dist/site/artifact-schemas.json +0 -8
  66. package/dist/site/buildchain-contract.json +103 -397
  67. package/dist/site/buildchain-site.json +302 -386
  68. package/dist/site/capability-registry.json +9 -11
  69. package/dist/site/cli-registry.json +8 -53
  70. package/dist/site/controller-registry.json +48 -8
  71. package/dist/site/kfd-claims.json +129 -167
  72. package/dist/site/kfd-upstream-aggregate.json +9 -9
  73. package/dist/site/manual-registry.json +18 -49
  74. package/dist/site/node-api-registry.json +4345 -7345
  75. package/dist/site/page-registry.json +278 -346
  76. package/dist/site/public-surface-audit.json +85 -404
  77. package/dist/site/publication-authority-registry.json +11 -1
  78. package/dist/site/publication-registry.json +4 -4
  79. package/dist/site/release-provenance.json +3 -9
  80. package/dist/site/schemas/kfd-support-projection-v1.schema.json +106 -0
  81. package/dist/site/site-manifest.json +22 -38
  82. package/dist/site/workflow-registry.json +78 -35
  83. package/docs/MAP.md +8 -5
  84. package/docs/auditable-demo.md +2 -2
  85. package/docs/aws-us-elastic-runner-burst-plane.md +7 -59
  86. package/docs/cli-reference.md +15 -213
  87. package/docs/cli.md +14 -14
  88. package/docs/dev-alpha-candidate-patrol.md +3 -11
  89. package/docs/dev-delivery-warrant.md +29 -194
  90. package/docs/engineering-housekeeper.md +12 -4
  91. package/docs/getting-started.md +1 -1
  92. package/docs/install.md +5 -5
  93. package/docs/kfd-support.md +2 -7
  94. package/docs/lifecycle-protocol.md +2 -4
  95. package/docs/node-api-reference.md +414 -554
  96. package/docs/release-flow.md +31 -31
  97. package/docs/release-governance.md +16 -28
  98. package/docs/release-passport.md +2 -15
  99. package/docs/release-tail-contract.md +13 -6
  100. package/docs/release-tail-provider-plane.md +13 -19
  101. package/docs/release-train.md +4 -4
  102. package/docs/reusable-build-surface.md +14 -27
  103. package/docs/site-bundle-contract.md +1 -5
  104. package/docs/stable-candidate-patrol.md +7 -7
  105. package/docs/v4-canonical-contracts.md +92 -0
  106. package/docs/v4-delivery-warrant-read-candidate.md +73 -0
  107. package/docs/v4-delivery-warrant-semantic-diff.md +75 -0
  108. package/docs/v4-production-release.md +63 -0
  109. package/docs/v4-stage-capsule.md +193 -0
  110. package/docs/versioning.md +3 -5
  111. package/package.json +19 -19
  112. package/packages/core/adopter-delivery-gate.js +576 -0
  113. package/packages/core/adopter-delivery-json.js +66 -0
  114. package/packages/core/artifact-signing.js +0 -61
  115. package/packages/core/artifact-verification-envelope.js +5 -5
  116. package/packages/core/build-facts.js +12 -4
  117. package/packages/core/buildchain-agent-manuals.js +0 -2
  118. package/packages/core/buildchain-channel-identity.js +3 -2
  119. package/packages/core/buildchain-config.js +4 -69
  120. package/packages/core/buildchain-contract.js +232 -46
  121. package/packages/core/buildchain-kfd-claims.js +1 -1
  122. package/packages/core/channel-candidate.js +0 -8
  123. package/packages/core/channel-promotion-baseline.js +0 -52
  124. package/packages/core/controller-evidence.js +3 -4
  125. package/packages/core/dev-alpha-candidate-selection.js +2 -10
  126. package/packages/core/dev-delivery-warrant-cancellation.js +0 -1
  127. package/packages/core/dev-delivery-warrant-settlement.js +20 -67
  128. package/packages/core/dev-delivery-warrant.js +50 -138
  129. package/packages/core/diagnostics.js +3 -8
  130. package/packages/core/github-governance-authority.js +3 -1
  131. package/packages/core/kfd-adopter-category-driver.js +167 -0
  132. package/packages/core/kfd-adopter-manifest.js +47 -46
  133. package/packages/core/kfd-gate.js +15 -45
  134. package/packages/core/paper-agent-entry.js +7 -16
  135. package/packages/core/paper-fleet.js +2 -2
  136. package/packages/core/paper-repository.js +2 -3
  137. package/packages/core/paper-scaffold-content.js +2 -23
  138. package/packages/core/paper.js +11 -43
  139. package/packages/core/publication-reproducibility.js +4 -4
  140. package/packages/core/release-line-bootstrap.js +21 -8
  141. package/packages/core/release-passport-contract.js +5 -5
  142. package/packages/core/release-passport.js +20 -131
  143. package/packages/core/self-dogfood-version.js +48 -35
  144. package/packages/core/spawn-command.js +232 -8
  145. package/packages/core/v4-adopter-delivery-parity.js +219 -0
  146. package/packages/core/v4-canonical-contracts.js +284 -0
  147. package/packages/core/v4-delivery-warrant-fixture-runner.js +371 -0
  148. package/packages/core/v4-delivery-warrant-read-candidate.js +279 -0
  149. package/packages/core/v4-delivery-warrant-semantic-diff-gate.js +352 -0
  150. package/packages/core/v4-delivery-warrant-shadow-adapter.js +447 -0
  151. package/packages/core/v4-partial-mutation-recovery-qualification.js +395 -0
  152. package/packages/core/v4-platform-stage-checkpoints.js +471 -0
  153. package/packages/core/v4-provider-operation-journal.js +531 -0
  154. package/packages/core/v4-provider-readback-idempotency.js +394 -0
  155. package/packages/core/v4-release-activation-shadow.js +519 -0
  156. package/packages/core/v4-stable-publication-fence.js +357 -0
  157. package/packages/core/v4-stage-capsule-local-store.js +426 -0
  158. package/packages/core/v4-stage-capsule-qualification-campaign.js +512 -0
  159. package/packages/core/v4-stage-capsule-qualification.js +456 -0
  160. package/packages/core/v4-stage-capsule-resume-planner.js +397 -0
  161. package/packages/core/v4-stage-capsule-store.js +401 -0
  162. package/packages/core/v4-stage-capsule.js +319 -0
  163. package/scripts/assemble-self-publication-admission.mjs +1 -1
  164. package/scripts/audit-publication-control-plane.mjs +5 -5
  165. package/scripts/auditable-demo-bundle-verification.mjs +3 -2
  166. package/scripts/auditable-demo-platform.mjs +2 -2
  167. package/scripts/auditable-demo-renditions.mjs +1 -1
  168. package/scripts/auditable-demo.mjs +2 -2
  169. package/scripts/aws-macos-jit-controller-core.mjs +13 -346
  170. package/scripts/aws-macos-jit-controller-runtime.mjs +2 -210
  171. package/scripts/aws-macos-jit-controller.mjs +37 -275
  172. package/scripts/aws-macos-jit-core.mjs +3 -41
  173. package/scripts/aws-macos-jit.mjs +0 -12
  174. package/scripts/aws-windows-jit-campaign.mjs +2 -2
  175. package/scripts/aws-windows-jit-controller-core.mjs +1 -1
  176. package/scripts/aws-windows-jit-controller.mjs +3 -3
  177. package/scripts/build-contract-core.mjs +3 -8
  178. package/scripts/build-standalone-binary.mjs +3 -14
  179. package/scripts/buildchain-channel-router.mjs +4 -0
  180. package/scripts/buildchain-cli-help.mjs +7 -16
  181. package/scripts/buildchain-contract-lock.mjs +0 -6
  182. package/scripts/check-action-bundles.mjs +3 -4
  183. package/scripts/check-internal-architecture.mjs +7 -6
  184. package/scripts/check-inventory.mjs +30 -25
  185. package/scripts/check-v4-public-dogfood-contract.mjs +270 -0
  186. package/scripts/create-release-bundle.mjs +8 -4
  187. package/scripts/dev-alpha-candidate-patrol.mjs +1 -22
  188. package/scripts/dev-delivery-proof.mjs +2 -64
  189. package/scripts/dev-delivery-warrant.mjs +61 -86
  190. package/scripts/dev-pr-auto-merge.mjs +4 -30
  191. package/scripts/dev-pr-delivery-warrant.mjs +0 -55
  192. package/scripts/dispatch-artifact-signing-authority.mjs +7 -4
  193. package/scripts/generate-buildchain-kfd-witnesses.mjs +94 -88
  194. package/scripts/generate-channel-build-workflow.mjs +54 -24
  195. package/scripts/generate-channel-promotion-workflow.mjs +15 -6
  196. package/scripts/generate-site-bundle.mjs +8 -27
  197. package/scripts/git-fetch-process-tree.mjs +34 -1
  198. package/scripts/init-repo.mjs +64 -159
  199. package/scripts/inspect-artifact-signing-requests.mjs +0 -6
  200. package/scripts/locked-source-checkout.mjs +3 -4
  201. package/scripts/maintainability-metrics.mjs +8 -2
  202. package/scripts/npm-publish-dry-run.mjs +2 -2
  203. package/scripts/npm-publish-transaction.mjs +2 -2
  204. package/scripts/publication-commit-evidence.mjs +23 -69
  205. package/scripts/release-candidate-resolver.mjs +11 -17
  206. package/scripts/release-tail.mjs +3 -49
  207. package/scripts/resume-from-candidate-run.mjs +9 -123
  208. package/scripts/run-lifecycle-core.mjs +12 -13
  209. package/scripts/seal-artifact-signing-requests.mjs +17 -21
  210. package/scripts/site-capability-metadata.mjs +3 -20
  211. package/scripts/stable-candidate-qualification.mjs +10 -10
  212. package/scripts/v4-architecture.mjs +12 -2
  213. package/scripts/v4-bridge-bootstrap.mjs +141 -0
  214. package/scripts/v4-bridge-evidence.mjs +141 -0
  215. package/scripts/v4-host-adapter.mjs +182 -0
  216. package/scripts/v4-platform-stage-checkpoint-rehearsal.mjs +207 -0
  217. package/scripts/v4-stage-capsule-qualification.mjs +528 -0
  218. package/scripts/v4-stage-capsule-resume-rehearsal.mjs +57 -0
  219. package/scripts/v4-warrant-shadow-plan.mjs +601 -0
  220. package/scripts/verify-golden-path.mjs +5 -5
  221. package/scripts/web-surface-cloudfront-rewrite.mjs +15 -15
  222. package/scripts/web-surface-core.mjs +2 -8
  223. package/scripts/workflow-call-contract.mjs +5 -184
  224. package/contracts/dev-delivery-authority-v2.schema.json +0 -253
  225. package/contracts/fixtures/kfd-adopter-release-v1/kfd-4-perspective.json +0 -16
  226. package/contracts/fixtures/kfd-adopter-release-v1/kfd-4-replay.json +0 -57
  227. package/contracts/fixtures/next-development-transition-v1/anchored-manual-waiting.json +0 -47
  228. package/contracts/fixtures/next-development-transition-v1/semver-auto-planned.json +0 -47
  229. package/contracts/fixtures/next-development-transition-v1/version-model-cases.json +0 -40
  230. package/contracts/next-development-request-v1.schema.json +0 -66
  231. package/contracts/next-development-transition-v1.schema.json +0 -292
  232. package/contracts/publication-rehearsal-capsule-v1.schema.json +0 -173
  233. package/dist/site/schemas/dev-delivery-authority-v2.schema.json +0 -442
  234. package/dist/site/schemas/publication-rehearsal-capsule-v1.schema.json +0 -269
  235. package/dist/site/schemas/release-tail-capabilities-v1.schema.json +0 -353
  236. package/dist/site/schemas/release-tail-provider-bindings-v1.schema.json +0 -94
  237. package/docs/dev-delivery-qualification-landing-adr.md +0 -137
  238. package/docs/next-development-transition.md +0 -119
  239. package/docs/publication-rehearsal.md +0 -94
  240. package/packages/core/buildchain-compatibility-proof.js +0 -631
  241. package/packages/core/dev-delivery-authority.js +0 -996
  242. package/packages/core/dev-delivery-native-proof.js +0 -418
  243. package/packages/core/dev-delivery-warrant-shadow.js +0 -502
  244. package/packages/core/next-development-candidate-reservation.js +0 -186
  245. package/packages/core/next-development-controller.js +0 -726
  246. package/packages/core/next-development-projection.js +0 -288
  247. package/packages/core/next-development-transition.js +0 -738
  248. package/packages/core/publication-rehearsal-projection.js +0 -173
  249. package/packages/core/publication-rehearsal-runtime.js +0 -921
  250. package/scripts/aws-macos-jit-instance-rehydrate.mjs +0 -260
  251. package/scripts/aws-macos-jit-source-rebind.mjs +0 -724
  252. package/scripts/dev-delivery-authority.mjs +0 -368
  253. package/scripts/dev-delivery-native-run.mjs +0 -235
  254. package/scripts/dev-delivery-two-phase-resume.mjs +0 -90
  255. package/scripts/dev-delivery-two-phase.mjs +0 -577
  256. package/scripts/generate-next-development-guidance.mjs +0 -49
  257. package/scripts/materialize-self-release-candidate-version.mjs +0 -137
  258. package/scripts/next-development-self-dogfood-harness.mjs +0 -409
  259. package/scripts/next-development-self-dogfood.mjs +0 -532
  260. package/scripts/next-development-transition.mjs +0 -47
  261. package/scripts/release-candidate-tail-reseal.mjs +0 -426
  262. package/templates/native-dev-delivery.yml +0 -86
@@ -93,6 +93,8 @@
93
93
  "reusable": true,
94
94
  "inputs": [
95
95
  "artifact-compression-level",
96
+ "artifact-finalization-command",
97
+ "artifact-finalization-on-platform",
96
98
  "artifact-name",
97
99
  "artifact-name-template",
98
100
  "artifact-paths",
@@ -113,6 +115,8 @@
113
115
  "buildchain-contract-compatibility-policy",
114
116
  "buildchain-contract-drift-issue-mode",
115
117
  "buildchain-contract-lock-path",
118
+ "buildchain-expected-channel",
119
+ "buildchain-expected-major",
116
120
  "buildchain-ref",
117
121
  "buildchain-repository",
118
122
  "cache-dependency-lock-root",
@@ -179,7 +183,7 @@
179
183
  "verify-substage-evidence-path",
180
184
  "working-directory"
181
185
  ],
182
- "inputCount": 86,
186
+ "inputCount": 90,
183
187
  "secrets": [
184
188
  "BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN",
185
189
  "BUILDCHAIN_ARTIFACT_RELAY_S3_ROLE_ARN",
@@ -465,6 +469,8 @@
465
469
  "buildchain-contract-compatibility-policy",
466
470
  "buildchain-contract-drift-issue-mode",
467
471
  "buildchain-contract-lock-path",
472
+ "buildchain-expected-channel",
473
+ "buildchain-expected-major",
468
474
  "buildchain-ref",
469
475
  "buildchain-repository",
470
476
  "channel",
@@ -568,7 +574,7 @@
568
574
  "target-sha",
569
575
  "trusted-publishing"
570
576
  ],
571
- "inputCount": 111,
577
+ "inputCount": 113,
572
578
  "secrets": [
573
579
  "BUILDCHAIN_ISSUE_APP_ID",
574
580
  "BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
@@ -1217,6 +1223,8 @@
1217
1223
  "reusable": true,
1218
1224
  "inputs": [
1219
1225
  "artifact-compression-level",
1226
+ "artifact-finalization-command",
1227
+ "artifact-finalization-on-platform",
1220
1228
  "artifact-name",
1221
1229
  "artifact-name-template",
1222
1230
  "artifact-paths",
@@ -1239,6 +1247,8 @@
1239
1247
  "buildchain-contract-compatibility-policy",
1240
1248
  "buildchain-contract-drift-issue-mode",
1241
1249
  "buildchain-contract-lock-path",
1250
+ "buildchain-expected-channel",
1251
+ "buildchain-expected-major",
1242
1252
  "buildchain-ref",
1243
1253
  "buildchain-repository",
1244
1254
  "buildchain-stable-contract-lock-path",
@@ -1306,7 +1316,7 @@
1306
1316
  "verify-substage-evidence-path",
1307
1317
  "working-directory"
1308
1318
  ],
1309
- "inputCount": 89,
1319
+ "inputCount": 93,
1310
1320
  "secrets": [
1311
1321
  "BUILDCHAIN_ARTIFACT_RELAY_S3_DOWNLOAD_ROLE_ARN",
1312
1322
  "BUILDCHAIN_ARTIFACT_RELAY_S3_ROLE_ARN",
@@ -1836,7 +1846,6 @@
1836
1846
  "path": ".github/workflows/dev-pr-auto-merge.yml",
1837
1847
  "reusable": true,
1838
1848
  "inputs": [
1839
- "active-lease-context",
1840
1849
  "affected-paths-json",
1841
1850
  "allowed-head-prefixes",
1842
1851
  "assignment-root",
@@ -1850,17 +1859,12 @@
1850
1859
  "dependency-root",
1851
1860
  "diagnostic-context",
1852
1861
  "dry-run",
1853
- "environment-root",
1854
1862
  "expected-head-sha",
1855
1863
  "expected-pr-number",
1856
- "handoff-workflow-id",
1857
1864
  "initiative-root",
1858
1865
  "landing-mode",
1859
1866
  "max-merges",
1860
1867
  "merge-method",
1861
- "native-command",
1862
- "native-heartbeat-seconds",
1863
- "native-proof-json",
1864
1868
  "plan-root",
1865
1869
  "project-cut-proof-json",
1866
1870
  "queue-admission-context",
@@ -1871,13 +1875,11 @@
1871
1875
  "shard-evidence-roots-json",
1872
1876
  "source-identity-root",
1873
1877
  "source-patch-root",
1874
- "source-workflow-id",
1875
- "source-workflow-run-id",
1876
1878
  "target-branch",
1877
1879
  "toolchain-root",
1878
1880
  "warrant-lease-seconds"
1879
1881
  ],
1880
- "inputCount": 40,
1882
+ "inputCount": 32,
1881
1883
  "secrets": [
1882
1884
  "github-token"
1883
1885
  ],
@@ -1890,17 +1892,14 @@
1890
1892
  "evaluated-count",
1891
1893
  "final-base-sha",
1892
1894
  "merged-count",
1893
- "native-proof-root",
1894
- "native-reuse-decision-root",
1895
1895
  "project-cut-proof-root",
1896
- "qualified-warrant-receipt-root",
1897
1896
  "skipped-count",
1898
1897
  "source-proof-root",
1899
1898
  "warrant-receipt-root",
1900
1899
  "warrant-state-commit",
1901
1900
  "warrant-state-root"
1902
1901
  ],
1903
- "outputCount": 16,
1902
+ "outputCount": 13,
1904
1903
  "surface": "dev-governance",
1905
1904
  "capabilityGroup": "governance-versioning",
1906
1905
  "status": "active",
@@ -1969,7 +1968,7 @@
1969
1968
  "status": "preview",
1970
1969
  "owner": "buildchain-workflows",
1971
1970
  "maturity": "preview",
1972
- "introducedVersion": "3.0.9-alpha.9",
1971
+ "introducedVersion": "4.0.0-alpha.0",
1973
1972
  "compatibilityPromise": "preserved-through-the-v3-major-line",
1974
1973
  "deprecationReplacement": "",
1975
1974
  "sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
@@ -1990,7 +1989,7 @@
1990
1989
  "status": "preview",
1991
1990
  "owner": "buildchain-workflows",
1992
1991
  "maturity": "preview",
1993
- "introducedVersion": "3.0.9-alpha.9",
1992
+ "introducedVersion": "4.0.0-alpha.0",
1994
1993
  "compatibilityPromise": "preserved-through-the-v3-major-line",
1995
1994
  "deprecationReplacement": "",
1996
1995
  "sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
@@ -2011,7 +2010,7 @@
2011
2010
  "status": "preview",
2012
2011
  "owner": "buildchain-workflows",
2013
2012
  "maturity": "preview",
2014
- "introducedVersion": "3.0.9-alpha.9",
2013
+ "introducedVersion": "4.0.0-alpha.0",
2015
2014
  "compatibilityPromise": "preserved-through-the-v3-major-line",
2016
2015
  "deprecationReplacement": "",
2017
2016
  "sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
@@ -2061,7 +2060,7 @@
2061
2060
  "status": "preview",
2062
2061
  "owner": "buildchain-workflows",
2063
2062
  "maturity": "preview",
2064
- "introducedVersion": "3.0.9-alpha.9",
2063
+ "introducedVersion": "4.0.0-alpha.0",
2065
2064
  "compatibilityPromise": "preserved-through-the-v3-major-line",
2066
2065
  "deprecationReplacement": "",
2067
2066
  "sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
@@ -2802,25 +2801,22 @@
2802
2801
  "reusable": true,
2803
2802
  "inputs": [
2804
2803
  "buildchain-ref",
2805
- "capsule-contract",
2806
- "capsule-path",
2807
- "capsule-root",
2808
- "evidence-path",
2804
+ "declaration-path",
2805
+ "execute",
2806
+ "provider-bindings-path",
2809
2807
  "state-path"
2810
2808
  ],
2811
- "inputCount": 6,
2809
+ "inputCount": 5,
2812
2810
  "secrets": [
2813
2811
  "http-token"
2814
2812
  ],
2815
2813
  "secretCount": 1,
2816
2814
  "outputs": [
2817
- "binding-root",
2818
- "evidence-root",
2819
2815
  "state-root",
2820
2816
  "transaction-root",
2821
2817
  "transaction-state"
2822
2818
  ],
2823
- "outputCount": 5,
2819
+ "outputCount": 3,
2824
2820
  "surface": "release-tail-provider-plane",
2825
2821
  "capabilityGroup": "release-passport-trust",
2826
2822
  "status": "active",
@@ -2943,6 +2939,55 @@
2943
2939
  "sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
2944
2940
  "nonDuplicationRationale": "Existing workflow identity retained for caller compatibility and repository orchestration."
2945
2941
  },
2942
+ {
2943
+ "id": "v4-public-consumer-dogfood",
2944
+ "path": ".github/workflows/v4-public-consumer-dogfood.yml",
2945
+ "reusable": false,
2946
+ "inputs": [],
2947
+ "inputCount": 0,
2948
+ "secrets": [],
2949
+ "secretCount": 0,
2950
+ "outputs": [],
2951
+ "outputCount": 0,
2952
+ "surface": "repository-workflow",
2953
+ "capabilityGroup": "api-cli-reference",
2954
+ "status": "active",
2955
+ "owner": "buildchain-workflows",
2956
+ "maturity": "active",
2957
+ "introducedVersion": "pre-3.0.2-alpha.4",
2958
+ "compatibilityPromise": "preserved-through-the-v3-major-line",
2959
+ "deprecationReplacement": "",
2960
+ "sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
2961
+ "nonDuplicationRationale": "Existing workflow identity retained for caller compatibility and repository orchestration."
2962
+ },
2963
+ {
2964
+ "id": "v4-stage-capsule-canary",
2965
+ "path": ".github/workflows/v4-stage-capsule-canary.yml",
2966
+ "reusable": true,
2967
+ "inputs": [
2968
+ "build-artifact-path",
2969
+ "consumer",
2970
+ "go-version",
2971
+ "install-artifact-path",
2972
+ "node-version",
2973
+ "verify-artifact-path"
2974
+ ],
2975
+ "inputCount": 6,
2976
+ "secrets": [],
2977
+ "secretCount": 0,
2978
+ "outputs": [],
2979
+ "outputCount": 0,
2980
+ "surface": "repository-workflow",
2981
+ "capabilityGroup": "api-cli-reference",
2982
+ "status": "active",
2983
+ "owner": "buildchain-workflows",
2984
+ "maturity": "active",
2985
+ "introducedVersion": "pre-3.0.2-alpha.4",
2986
+ "compatibilityPromise": "preserved-through-the-v3-major-line",
2987
+ "deprecationReplacement": "",
2988
+ "sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
2989
+ "nonDuplicationRationale": "Existing workflow identity retained for caller compatibility and repository orchestration."
2990
+ },
2946
2991
  {
2947
2992
  "id": "verify",
2948
2993
  "path": ".github/workflows/verify.yml",
@@ -3051,7 +3096,6 @@
3051
3096
  "github-release-artifact-paths",
3052
3097
  "github-release-notes",
3053
3098
  "github-release-title",
3054
- "plan-before-target-advance",
3055
3099
  "promote-only-release-candidate",
3056
3100
  "publication-capability-json",
3057
3101
  "publication-gate-aggregate-json",
@@ -3119,7 +3163,7 @@
3119
3163
  "transaction-state-path",
3120
3164
  "verification-command"
3121
3165
  ],
3122
- "inputCount": 81,
3166
+ "inputCount": 80,
3123
3167
  "capabilityGroup": "release-passport-trust",
3124
3168
  "status": "active",
3125
3169
  "owner": "buildchain-actions",
@@ -3134,15 +3178,14 @@
3134
3178
  "id": "release-tail",
3135
3179
  "path": "actions/release-tail/action.yml",
3136
3180
  "inputs": [
3137
- "capsule",
3138
- "capsule-contract",
3139
- "capsule-root",
3140
- "evidence-path",
3181
+ "declaration",
3182
+ "execute",
3141
3183
  "github-token",
3142
3184
  "http-token",
3185
+ "provider-bindings",
3143
3186
  "state-path"
3144
3187
  ],
3145
- "inputCount": 7,
3188
+ "inputCount": 6,
3146
3189
  "capabilityGroup": "release-passport-trust",
3147
3190
  "status": "active",
3148
3191
  "owner": "buildchain-actions",
package/docs/MAP.md CHANGED
@@ -59,14 +59,14 @@ workflow, action, and Node API export also carries a `capabilityGroup`,
59
59
  | Capability group | Primary facts | Primary manuals |
60
60
  | --- | --- | --- |
61
61
  | Getting Started | `capability-registry.json`, `product-mechanism.json` | [`getting-started.md`](getting-started.md), [`install.md`](install.md), [`product-mechanism.md`](product-mechanism.md), [`cli.md`](cli.md) |
62
- | Release Passport and Trust | `release-model.json`, `artifact-schemas.json`, `publication-authority-registry.json`, `kfd-claims.json` | [`release-passport.md`](release-passport.md), [`github-artifact-attestation.md`](github-artifact-attestation.md), [`publication-authority.md`](publication-authority.md), [`release-candidate.md`](release-candidate.md), [`release-train.md`](release-train.md), [`publish-transaction.md`](publish-transaction.md), [`release-tail-contract.md`](release-tail-contract.md), [`publication-rehearsal.md`](publication-rehearsal.md), [`binary-distribution.md`](binary-distribution.md) |
62
+ | Release Passport and Trust | `release-model.json`, `artifact-schemas.json`, `publication-authority-registry.json`, `kfd-claims.json` | [`release-passport.md`](release-passport.md), [`github-artifact-attestation.md`](github-artifact-attestation.md), [`publication-authority.md`](publication-authority.md), [`release-candidate.md`](release-candidate.md), [`release-train.md`](release-train.md), [`publish-transaction.md`](publish-transaction.md), [`release-tail-contract.md`](release-tail-contract.md), [`binary-distribution.md`](binary-distribution.md) |
63
63
  | Reusable Build and Lifecycle | `workflow-registry.json`, `controller-registry.json`, `release-model.json` | [`reusable-build-surface.md`](reusable-build-surface.md), [`controller-evidence.md`](controller-evidence.md), [`shifu-gate-profiles.md`](shifu-gate-profiles.md), [`lifecycle-protocol.md`](lifecycle-protocol.md) |
64
64
  | KFD Trust and Surface Closure | `kfd-claims.json`, `public-surface-audit.json`, `cli-registry.json`, `node-api-registry.json` | [`kfd-support.md`](kfd-support.md), [`release-passport.md`](release-passport.md) |
65
65
  | Site Bundle, Web Surfaces, and Propagation | `buildchain-site.json`, `site-manifest.json`, `page-registry.json`, `release-model.json` | [`site-bundle-contract.md`](site-bundle-contract.md), [`web-surface-deployments.md`](web-surface-deployments.md), [`release-propagation.md`](release-propagation.md) |
66
66
  | Publication Artifacts | `publication-registry.json`, `workflow-registry.json`, `node-api-registry.json`, `manual-registry.json`, `kungfu-buildchain-publication-artifact-registry` | [`publication-artifacts.md`](publication-artifacts.md), [`reusable-build-surface.md`](reusable-build-surface.md) |
67
67
  | Distribution Indexes and Badges | `badge-endpoint-registry.json`, `node-api-registry.json`, `manual-registry.json` | [`readme-badges.md`](readme-badges.md), [`homebrew.md`](homebrew.md) |
68
68
  | Build Facts, Observability, and Diagnostics | `cli-registry.json`, `node-api-registry.json`, lifecycle artifacts | [`build-facts.md`](build-facts.md), [`toolkit-observability.md`](toolkit-observability.md), [`consumer-issue-reporting.md`](consumer-issue-reporting.md) |
69
- | Governance, Versioning, and Runtime Drift | `buildchain-contract.json`, `workflow-registry.json`, `release-model.json` | [`github-governance-authority.md`](github-governance-authority.md), [`release-governance.md`](release-governance.md), [`release-flow.md`](release-flow.md), [`next-development-transition.md`](next-development-transition.md), [`versioning.md`](versioning.md), [`runtime-train-validation.md`](runtime-train-validation.md), [`cli.md`](cli.md) |
69
+ | Governance, Versioning, and Runtime Drift | `buildchain-contract.json`, `workflow-registry.json`, `release-model.json` | [`github-governance-authority.md`](github-governance-authority.md), [`release-governance.md`](release-governance.md), [`release-flow.md`](release-flow.md), [`versioning.md`](versioning.md), [`runtime-train-validation.md`](runtime-train-validation.md), [`cli.md`](cli.md) |
70
70
  | CLI and Node API Reference | `cli-registry.json`, `node-api-registry.json`, `workflow-registry.json`, `manual-registry.json` | [`cli-reference.md`](cli-reference.md), [`node-api-reference.md`](node-api-reference.md), [`cli.md`](cli.md), [`../packages/core/README.md`](../packages/core/README.md) |
71
71
 
72
72
  | Capability | Machine-readable entry | Manual entry |
@@ -107,10 +107,15 @@ replace them.
107
107
  | How do I install a standalone binary or npm package? | [`install.md`](install.md) | use | stable |
108
108
  | How do I run or look up the `buildchain` CLI? | [`cli-reference.md`](cli-reference.md) + [`cli.md`](cli.md) | use | stable |
109
109
  | How do I import Buildchain toolkit APIs from JavaScript build code? | [`node-api-reference.md`](node-api-reference.md) + [`../packages/core/README.md`](../packages/core/README.md) | use | stable |
110
- | How are bounded Qualification Leases separated from exclusive merge-group Landing authority? | [`dev-delivery-qualification-landing-adr.md`](dev-delivery-qualification-landing-adr.md) + [`dev-delivery-warrant.md`](dev-delivery-warrant.md) | govern | accepted |
111
110
  | How do I initialize a new repository? | [`getting-started.md`](getting-started.md) + [`lifecycle-protocol.md`](lifecycle-protocol.md) | use | stable |
112
111
  | Why does Buildchain use branch-driven release governance? | [`release-governance.md`](release-governance.md) | why | stable |
113
112
  | What freezes the v4 dependency direction, writer authority, complexity budgets, exceptions, and N-1 qualification? | [`../architecture/v4-architecture-constitution.md`](../architecture/v4-architecture-constitution.md) | why/verify | preview |
113
+ | How will Delivery Warrant move from the v3 writer through shadow, v4 read, single-writer cutover, and legacy removal? | [`../architecture/v4-delivery-warrant-shadow-bootstrap-plan.md`](../architecture/v4-delivery-warrant-shadow-bootstrap-plan.md) | why/verify | preview |
114
+ | What exact canonical bytes, roots, clocks, event, receipt, and typed-fault contracts do Rust and JavaScript share in v4? | [`v4-canonical-contracts.md`](v4-canonical-contracts.md) | use/verify | preview |
115
+ | How is one per-platform v4 build stage identified, retained, observed, and reused without provider identity or a second writer? | [`v4-stage-capsule.md`](v4-stage-capsule.md) | use/verify | preview |
116
+ | How does a late platform failure deterministically reuse qualified Stage Capsules and rebuild only invalid or missing dependencies? | [`v4-stage-capsule.md`](v4-stage-capsule.md#deterministic-resume-planning) | use/verify | preview |
117
+ | How do Rust and JavaScript read the same retained Delivery Warrant traces and emit one semantic projection? | [`v4-canonical-contracts.md`](v4-canonical-contracts.md#shared-delivery-warrant-fixture-runner) | use/verify | preview |
118
+ | How does an explicit caller try the qualified v4 read projection and roll back without moving v3 writer authority? | [`v4-delivery-warrant-read-candidate.md`](v4-delivery-warrant-read-candidate.md) | use/verify | preview |
114
119
  | How do protected dev branches and scheduled ready-PR merging work? | [`release-governance.md`](release-governance.md#protected-dev-branches) | use | stable |
115
120
  | How do slow required checks land reliably on a busy dev channel? | [`release-governance.md`](release-governance.md#protected-dev-branches) + [`cli.md`](cli.md#commands) | use | preview |
116
121
  | How does the durable fair Dev Delivery Warrant Queue prevent slow-candidate starvation? | [`dev-delivery-warrant.md`](dev-delivery-warrant.md) | use/verify | preview |
@@ -119,13 +124,11 @@ replace them.
119
124
  | How do I report or safely apply branch and pull-request engineering hygiene? | [`engineering-housekeeper.md`](engineering-housekeeper.md) | use/verify | preview |
120
125
  | How does Buildchain decide patch, minor, and major release lines? | [`versioning.md`](versioning.md) | why | stable |
121
126
  | What exact branch/tag state machine runs on alpha, release, and major gate? | [`release-flow.md`](release-flow.md) | verify | stable |
122
- | How does a completed Alpha remain successful while the following development version is prepared? | [`next-development-transition.md`](next-development-transition.md), [`../architecture/decisions/0002-next-development-transition.md`](../architecture/decisions/0002-next-development-transition.md) | verify/use | preview |
123
127
  | What did Buildchain migrate or retire from old action repositories? | [`migration-inventory.md`](migration-inventory.md) | verify | stable |
124
128
  | What is the active action and workflow source of truth? | [`ownership.md`](ownership.md) | verify | stable |
125
129
  | How do I declare version files and custom lifecycle commands? | [`lifecycle-protocol.md`](lifecycle-protocol.md) | use | stable |
126
130
  | How does publish evidence, recovery, and finalization work? | [`publish-transaction.md`](publish-transaction.md) | verify | stable |
127
131
  | How are consumer-owned release-tail commands inventoried and replaced by declarative capabilities? | [`release-tail-contract.md`](release-tail-contract.md) | verify | draft |
128
- | How do I reproduce publication semantics locally without GitHub runner state? | [`publication-rehearsal.md`](publication-rehearsal.md), [`../architecture/decisions/0001-release-local-constructibility.md`](../architecture/decisions/0001-release-local-constructibility.md) | use/verify | preview |
129
132
  | How do I collect and verify module/product build facts from Git source, version files, and outputs? | [`build-facts.md`](build-facts.md) + [`cli.md`](cli.md) | use/verify | stable |
130
133
  | How do I publish or verify release passport artifacts? | [`release-passport.md`](release-passport.md) | use | stable |
131
134
  | How do I keylessly attest Linux release artifacts with GitHub and bind them to a Release Passport? | [`github-artifact-attestation.md`](github-artifact-attestation.md) | verify/use | preview |
@@ -47,7 +47,7 @@ literal argv steps. Steps in one demo share a disposable workspace; separate
47
47
  demos and the two rendition captures do not. Commands are never accepted as a
48
48
  shell string. An omitted or explicit `standard` duration class remains bounded
49
49
  to 60 seconds. A reviewed `execution.durationClass: long-form` declaration may
50
- raise the scenario and literal step ceilings to 360 seconds; it does not change
50
+ raise the scenario and literal step ceilings to 180 seconds; it does not change
51
51
  the default. Both classes retain 4 MiB per step, a clean Home/XDG environment,
52
52
  no inherited credentials, and a network-disabled read-only container with
53
53
  bounded tmpfs.
@@ -155,7 +155,7 @@ scene.json
155
155
 
156
156
  It may additionally emit one declared `terminal-capture.json` using
157
157
  `kungfu.terminal-capture/v1`. The optional capture is bounded to 60 seconds by
158
- default or 360 seconds only when its scene explicitly declares `long-form`,
158
+ default or 180 seconds only when its scene explicitly declares `long-form`,
159
159
  fixed 80-200 by 24-80 terminal cells, 10,000 events, and 4 MiB of canonical
160
160
  base64 bytes. It must contain a qualified completion sentinel and an explicitly
161
161
  empty authority-grant list. Existing three-file adapters remain valid.
@@ -343,11 +343,6 @@ JIT SecureString under `/kungfu/burst/macos/`, then runs GitHub Actions Runner
343
343
  2.336.0 for exactly one job. The runner archive is pinned to the official
344
344
  macOS ARM64 SHA256. No GitHub, signing, notarization, publication, SSH, or
345
345
  static AWS credential is admitted to the instance.
346
- The provider provenance step explicitly disables artifact-signing request
347
- sealing for these qualification jobs, so consumer signing declarations cannot
348
- turn a runner-profile smoke or full qualification into a signing-authority
349
- dispatch. All other Buildchain lanes retain the default fail-closed signing
350
- declaration behavior.
351
346
 
352
347
  The instance uses the exact retained Amazon EC2 macOS AMI, IMDSv2, an encrypted
353
348
  delete-on-termination root volume, no inbound security-group rule, and the
@@ -357,21 +352,13 @@ job must exercise the full native lifecycle.
357
352
 
358
353
  AWS imposes a 24-hour minimum Dedicated Host allocation. The contract therefore
359
354
  keeps the one host for at least 24 hours even if all three jobs finish earlier.
360
- At the recorded USD 0.65 hourly rate, the minimum commitment is USD 15.60. A
361
- 30-hour fail-closed ceiling is USD 19.50, below the dedicated
355
+ At the recorded USD 0.6498 hourly rate, the minimum commitment rounds to USD
356
+ 15.60. A 30-hour fail-closed ceiling rounds to USD 19.49, below the dedicated
362
357
  USD 25 budget. A ten-minute reaper terminates an expired campaign instance and
363
358
  retries host release after the minimum allocation and Apple scrub constraints
364
359
  allow it. Budget notifications at 80% and 95% invoke the same card-scoped kill
365
360
  switch.
366
361
 
367
- The launch controller defaults to `us-east-1` and admits only `us-east-2` as a
368
- capacity fallback. The regions use mutually exclusive control-plane stacks and
369
- one shared USD 25 Budget covering Virginia `HostUsage:mac2` and the AWS catalog
370
- identity `USE2-HostUsage:mac2` for Ohio. A requested region, availability zone,
371
- stack, and Budget must agree before allocation, and the controller checks both
372
- regions against one global Host and instance ceiling; no other region is
373
- accepted.
374
-
375
362
  Qualification requires three trusted exact-source one-job JIT runs on the one
376
363
  host, including at least one full run, plus proof that:
377
364
 
@@ -385,47 +372,17 @@ host, including at least one full run, plus proof that:
385
372
  ### Phase 3 lifecycle controller
386
373
 
387
374
  `scripts/aws-macos-jit-controller.mjs` is the operator boundary for the paid
388
- campaign. It has five explicit mutation modes:
375
+ campaign. It has three explicit mutation modes:
389
376
 
390
377
  - `launch-campaign` binds the exact repository source, AMI, availability zone,
391
- tagged Dedicated Host, and reusable instance. Before paid allocation it
392
- verifies the exact AWS account, disabled GitHub workflow, complete control
393
- plane stack, AWS-dimension-filtered USD 25 Budget, 80% and 95% SNS
394
- subscribers, and zero pre-existing Mac capacity. Because AWS does not expose
395
- a DryRun parameter for `AllocateHosts`, it requires an allowed IAM policy
396
- simulation for the exact tagged allocation before the real call, then a
397
- successful `RunInstances` DryRun before launching the instance.
398
- - `rehydrate-instance` creates a replacement instance on the one already-paid,
399
- empty campaign host after an interrupted or failed instance lifecycle. It
400
- rechecks the exact account, disabled workflow, Budget, source, host identity
401
- and allocation time, zero runner residue, zero active JIT instances, and no
402
- other active Mac host in either admitted region. It then requires a
403
- successful same-host `RunInstances` DryRun and never calls `AllocateHosts`.
378
+ tagged Dedicated Host, and reusable instance. It rejects pre-existing Mac
379
+ capacity and requires successful `AllocateHosts` and `RunInstances` DryRuns
380
+ before either real call.
404
381
  - `run-job` binds one queued exact-source GitHub job to the existing campaign
405
382
  host and instance. It writes the repository JIT configuration through a
406
383
  mode-0600 temporary file into a distinct SSM SecureString, sends only the
407
384
  credential-free bootstrap through SSM, and removes the parameter plus runner
408
385
  registration if command delivery fails.
409
- - `rebind-campaign` repairs the source of an allocated but unused campaign
410
- without buying another host. It requires the workflow to remain manually
411
- disabled, the replacement source to be a strict descendant on the same
412
- campaign ref, and every prior matching run to contain zero jobs and zero
413
- artifacts. It also requires no registered JIT runner, SSM parameter, or
414
- bootstrap evidence and verifies the one exact host, instance, and encrypted
415
- volume. The operation updates only those resources' source tags and the
416
- existing GitHub ref, emits a zero-allocation receipt, and compensates back to
417
- the prior source if the ref update or readback fails. It never calls
418
- `AllocateHosts`, `RunInstances`, or workflow dispatch.
419
- - `rebind-campaign-after-failure` advances that same host and instance only
420
- after the operator confirms the complete prior run-id inventory. Every named
421
- run must be terminal with conclusion `failure`, all of its jobs must be
422
- complete, and both GitHub artifacts and S3 bootstrap evidence must still be
423
- present. The replacement source must remain a strict descendant on the same
424
- ref, the workflow must be disabled, the next-source evidence prefix must be
425
- empty, and runner plus SSM residue must be zero. The old evidence is retained
426
- and included in the rebind receipt; the operation changes only the existing
427
- source ref and resource tags, with the same compensated rollback and zero
428
- allocation boundary as an unused-campaign rebind.
429
386
  - `close-campaign` refuses execution before the provider's 24-hour minimum,
430
387
  verifies the encrypted delete-on-termination root volume, removes scoped JIT
431
388
  residue, terminates the exact instance, and requires a `ReleaseHosts` DryRun
@@ -435,17 +392,8 @@ campaign. It has five explicit mutation modes:
435
392
 
436
393
  Every execute mode requires the exact source SHA and campaign id to be repeated
437
394
  through `--confirm-source-sha` and `--confirm-campaign-id`. `run-job` also
438
- requires `--confirm-run-id`; `launch-campaign` additionally requires the
439
- expected workload account through `--account-id`. `rebind-campaign`
440
- additionally repeats the prior source, host, and instance identities and
441
- requires `--confirm-zero-allocation`. `rehydrate-instance` additionally repeats
442
- the existing host and replaced instance identities and requires
443
- `--confirm-no-host-allocation`. Omitting `--execute` emits a deterministic plan
395
+ requires `--confirm-run-id`. Omitting `--execute` emits a deterministic plan
444
396
  without changing AWS or GitHub state.
445
- `rebind-campaign-after-failure` additionally requires matching
446
- `--terminal-failure-run-ids-json` and
447
- `--confirm-terminal-failure-run-ids-json` arrays so an unobserved or newly
448
- created run fails closed before any tag or ref mutation.
449
397
 
450
398
  ## Provider lifecycle
451
399