@kungfu-tech/buildchain 4.1.0-alpha.0 → 4.1.0-alpha.2

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 (295) hide show
  1. package/AGENTS.md +30 -41
  2. package/CONTRIBUTING.md +6 -7
  3. package/architecture/action-taxonomy.json +5 -21
  4. package/architecture/agent-change-map.md +74 -56
  5. package/architecture/build-orchestration.json +8 -1
  6. package/architecture/ci-lane-change-budget.json +179 -69
  7. package/architecture/floating-consumer-policy.json +7 -17
  8. package/architecture/internal-capabilities.json +58 -72
  9. package/architecture/maintainability-debt.json +138 -52
  10. package/architecture/maintainability-policy.json +6 -15
  11. package/architecture/promotion-job-topology.json +39 -20
  12. package/architecture/release-topology.json +26 -37
  13. package/architecture/runtime-entry.json +26 -0
  14. package/architecture/runtime-resume-lineage.json +23 -0
  15. package/architecture/stage-capsule-qualification.json +2 -2
  16. package/architecture/universal-workflow-bootstrap.json +10 -25
  17. package/architecture/universal-workflow-capability-policy.json +61 -0
  18. package/architecture/universal-workflow-fault-campaign.json +18 -24
  19. package/architecture/workflow-taxonomy.json +0 -11
  20. package/contracts/fixtures/{v4-runtime-ref-resume-authority-v1 → runtime-resume-lineage-v2}/scenario.json +2 -3
  21. package/contracts/fixtures/v4-floating-consumer-policy-v1/cases.json +2 -2
  22. package/contracts/fixtures/v4-tail-reseal-v1/valid.json +1 -1
  23. package/contracts/promotion-invocation-v1.schema.json +0 -44
  24. package/contracts/promotion-request-v1.schema.json +0 -39
  25. package/contracts/runtime-resume-lineage-v2.schema.json +182 -0
  26. package/dist/site/buildchain-contract.json +472 -361
  27. package/dist/site/buildchain-site.json +99 -99
  28. package/dist/site/capability-registry.json +3 -3
  29. package/dist/site/cli-registry.json +4 -4
  30. package/dist/site/controller-registry.json +94 -78
  31. package/dist/site/kfd-claims.json +224 -343
  32. package/dist/site/kfd-upstream-aggregate.json +1 -1
  33. package/dist/site/manual-registry.json +15 -15
  34. package/dist/site/node-api-registry.json +239 -354
  35. package/dist/site/page-registry.json +80 -80
  36. package/dist/site/public-surface-audit.json +203 -254
  37. package/dist/site/publication-authority-registry.json +1 -24
  38. package/dist/site/publication-registry.json +4 -4
  39. package/dist/site/release-provenance.json +1 -1
  40. package/dist/site/site-manifest.json +19 -19
  41. package/dist/site/workflow-registry.json +197 -357
  42. package/docs/MAP.md +3 -3
  43. package/docs/auditable-demo.md +4 -4
  44. package/docs/cli-reference.md +2 -2
  45. package/docs/code-organization.md +5 -4
  46. package/docs/controller-evidence.md +2 -2
  47. package/docs/dev-alpha-candidate-patrol.md +5 -5
  48. package/docs/dev-delivery-warrant.md +14 -24
  49. package/docs/engineering-housekeeper.md +3 -3
  50. package/docs/github-artifact-attestation.md +9 -12
  51. package/docs/github-governance-authority.md +4 -4
  52. package/docs/node-api-reference.md +153 -167
  53. package/docs/publication-artifacts.md +3 -4
  54. package/docs/publication-authority.md +2 -2
  55. package/docs/release-candidate.md +21 -27
  56. package/docs/release-governance.md +10 -10
  57. package/docs/release-promotion-request.md +11 -18
  58. package/docs/release-propagation.md +5 -6
  59. package/docs/release-tail-provider-plane.md +2 -3
  60. package/docs/reusable-build-surface.md +13 -7
  61. package/docs/runtime-entry.md +122 -0
  62. package/docs/runtime-train-validation.md +30 -41
  63. package/docs/v4-publication-rehearsal.md +5 -5
  64. package/docs/v4-stage-capsule.md +9 -10
  65. package/docs/web-surface-deployments.md +16 -20
  66. package/docs/workflow-catalog.md +0 -1
  67. package/package.json +6 -6
  68. package/packages/core/adoption/commands/init-repo.mjs +2 -2
  69. package/packages/core/adoption/cross-platform-adopter-qualification.js +2 -13
  70. package/packages/core/adoption/qualification/actions.js +3 -5
  71. package/packages/core/adoption/qualification/admission.js +2 -3
  72. package/packages/core/build/artifact/attestation.js +0 -1
  73. package/packages/core/build/artifact/contracts.js +1 -4
  74. package/packages/core/build/artifact/store.js +6 -5
  75. package/packages/core/build/artifact-signing.js +4 -10
  76. package/packages/core/build/binary/actions.js +15 -9
  77. package/packages/core/build/binary-publication-dispatch.js +2 -6
  78. package/packages/core/build/demo/action-context.js +2 -11
  79. package/packages/core/build/demo/binary-action.js +8 -10
  80. package/packages/core/build/gate/controller.js +0 -2
  81. package/packages/core/build/github-attestation/action.js +2 -7
  82. package/packages/core/build/github-attestation/admission.js +0 -8
  83. package/packages/core/build/github-attestation/transaction.js +1 -2
  84. package/packages/core/build/lifecycle/stage-action.js +2 -0
  85. package/packages/core/build/lifecycle/stage.js +6 -3
  86. package/packages/core/build/macos-credential-island/dmg-assembly.js +0 -2
  87. package/packages/core/build/macos-credential-island/lib.js +2 -6
  88. package/packages/core/build/plan/action-context.js +0 -7
  89. package/packages/core/build/plan/action.js +7 -11
  90. package/packages/core/build/plan/admission.js +6 -73
  91. package/packages/core/build/plan/configuration.js +1 -1
  92. package/packages/core/build/plan/environment.js +1 -1
  93. package/packages/core/build/plan/identity.js +1 -5
  94. package/packages/core/build/plan/resolve.js +7 -1
  95. package/packages/core/build/recovery/checkpoint.js +158 -0
  96. package/packages/core/build/recovery/transaction.js +51 -0
  97. package/packages/core/build/signing/authority-actions.js +2 -11
  98. package/packages/core/build/signing/control.js +0 -5
  99. package/packages/core/build/signing/controller-transaction.js +0 -1
  100. package/packages/core/build/signing/delegation.js +2 -4
  101. package/packages/core/build/signing/dispatch.js +10 -56
  102. package/packages/core/build/signing/intake.js +0 -4
  103. package/packages/core/build/signing/prepare.js +1 -1
  104. package/packages/core/build/signing/request.js +3 -8
  105. package/packages/core/build/source/checkout-action.js +6 -10
  106. package/packages/core/build/source/controller.js +1 -4
  107. package/packages/core/build/source/lifecycle.js +3 -13
  108. package/packages/core/build/stage-capsule/actions.js +3 -13
  109. package/packages/core/build/stage-capsule/campaign/resume.js +10 -5
  110. package/packages/core/build/stage-capsule/rehearsal/verify.js +3 -4
  111. package/packages/core/build/stage-capsule-resume-planner.js +0 -1
  112. package/packages/core/build/summary/aggregation.js +5 -5
  113. package/packages/core/build/summary/finalization.js +1 -1
  114. package/packages/core/build/verification/actions.js +3 -12
  115. package/packages/core/build/verification/runner.js +22 -20
  116. package/packages/core/consumer/floating-consumer-evidence.js +3 -21
  117. package/packages/core/consumer/floating-consumer-policy.js +2 -93
  118. package/packages/core/consumer/floating-consumer-release-passport.js +1 -34
  119. package/packages/core/consumer/policy-admission.js +1 -3
  120. package/packages/core/contracts/buildchain-contract.js +12 -146
  121. package/packages/core/contracts/workflow-yaml-contract.js +11 -1
  122. package/packages/core/dev-delivery/candidate/admission.js +3 -4
  123. package/packages/core/dev-delivery/candidate/coordinates.js +0 -8
  124. package/packages/core/dev-delivery/commands/dev-delivery-request.sh +5 -13
  125. package/packages/core/dev-delivery/commands/dev-delivery-source-proof-reuse.mjs +0 -3
  126. package/packages/core/dev-delivery/dev-delivery-contract-surface.js +4 -52
  127. package/packages/core/dev-delivery/dev-delivery-execution-transfer.js +2 -15
  128. package/packages/core/dev-delivery/native/action-context.js +4 -32
  129. package/packages/core/dev-delivery/native/provider-boundary.js +0 -2
  130. package/packages/core/dev-delivery/native/transactions.js +1 -2
  131. package/packages/core/dev-delivery/queue/reconciliation-action.js +6 -10
  132. package/packages/core/dev-delivery/source-proof/predicates.js +0 -6
  133. package/packages/core/dev-delivery/source-proof/reuse.js +0 -2
  134. package/packages/core/dev-delivery/source-proof/seal.js +0 -2
  135. package/packages/core/governance/alpha-candidate/action.js +1 -10
  136. package/packages/core/governance/audit/actions.js +1 -3
  137. package/packages/core/governance/audit/collection.js +1 -3
  138. package/packages/core/governance/audit/identity.js +3 -31
  139. package/packages/core/governance/audit/transactions.js +2 -4
  140. package/packages/core/governance/buildchain-publication-authority.js +0 -1
  141. package/packages/core/governance/commands/audit-github-governance.mjs +3 -2
  142. package/packages/core/governance/github-governance-authority.js +0 -5
  143. package/packages/core/governance/receipt-admission.js +0 -15
  144. package/packages/core/index.js +1 -1
  145. package/packages/core/observability/controller/identity.js +4 -5
  146. package/packages/core/observability/controller-evidence.js +5 -10
  147. package/packages/core/paper/commands/paper.mjs +6 -6
  148. package/packages/core/paper/operations/plans.js +2 -2
  149. package/packages/core/paper/operations/provisioning-validation.js +1 -1
  150. package/packages/core/paper/operations/scaffold-workflows.js +29 -12
  151. package/packages/core/paper/operations/scaffold.js +97 -69
  152. package/packages/core/paper/paper-agent-entry.js +0 -11
  153. package/packages/core/paper/paper-runtime-channels.js +21 -66
  154. package/packages/core/paper/paper-scaffold-content.js +1 -1
  155. package/packages/core/paper/paper.js +9 -5
  156. package/packages/core/paper/publication/candidate.js +0 -9
  157. package/packages/core/paper/publication-controller.js +2 -4
  158. package/packages/core/providers/github/artifact-attestation.js +1 -1
  159. package/packages/core/publication/authority/actions.js +9 -8
  160. package/packages/core/publication/authority/admission.js +0 -11
  161. package/packages/core/publication/authority/assembly.js +2 -7
  162. package/packages/core/publication/authority/control-plane.js +2 -2
  163. package/packages/core/publication/authority/governance.js +2 -9
  164. package/packages/core/publication/authority/request.js +7 -2
  165. package/packages/core/publication/authority/verification.js +3 -18
  166. package/packages/core/publication/binary/action.js +5 -7
  167. package/packages/core/publication/candidate/qualification-action.js +1 -6
  168. package/packages/core/publication/candidate/stage-capsules.js +1 -1
  169. package/packages/core/publication/npm/preview-action.js +9 -15
  170. package/packages/core/publication/oci/preview-actions.js +1 -10
  171. package/packages/core/publication/publication-artifact-candidate.js +2 -2
  172. package/packages/core/publication/publication-authority.js +2 -2
  173. package/packages/core/publication/publication-rehearsal-projection.js +3 -3
  174. package/packages/core/publication/settlement/actions.js +2 -11
  175. package/packages/core/release/binary/coordinates-action.js +0 -13
  176. package/packages/core/release/binary/coordinates.js +2 -19
  177. package/packages/core/release/commands/promotion-channel-router.mjs +12 -56
  178. package/packages/core/release/commands/resume-from-candidate-run.mjs +2 -3
  179. package/packages/core/release/dev-alpha-active-release-train.js +0 -5
  180. package/packages/core/release/line/action.js +2 -13
  181. package/packages/core/release/next-development/actions.js +2 -5
  182. package/packages/core/release/passport/consumer-validation.js +1 -28
  183. package/packages/core/release/promote-candidate/development-source.js +7 -8
  184. package/packages/core/release/promotion/actions.js +7 -38
  185. package/packages/core/release/promotion/admission.js +3 -50
  186. package/packages/core/release/promotion/candidate.js +2 -4
  187. package/packages/core/release/promotion/channel.js +13 -101
  188. package/packages/core/release/promotion/qualification-action.js +2 -13
  189. package/packages/core/release/promotion/routing.js +16 -81
  190. package/packages/core/release/promotion/selection.js +1 -9
  191. package/packages/core/release/promotion-request.js +1 -40
  192. package/packages/core/release/qualification/actions.js +0 -8
  193. package/packages/core/release/qualification/public-build.js +1 -1
  194. package/packages/core/release/recovery/candidate.js +15 -21
  195. package/packages/core/release/recovery/capsules.js +2 -10
  196. package/packages/core/release/recovery/lineage.js +305 -0
  197. package/packages/core/release/recovery/provenance.js +1 -2
  198. package/packages/core/release/recovery/publication.js +4 -14
  199. package/packages/core/release/recovery/readback.js +19 -32
  200. package/packages/core/release/recovery/runtime.js +4 -95
  201. package/packages/core/release/release-candidate-recovery.js +4 -9
  202. package/packages/core/release/release-candidate.js +2 -5
  203. package/packages/core/release/reseal/actions.js +3 -22
  204. package/packages/core/release/reseal/admission.js +0 -2
  205. package/packages/core/release/reseal/finalize-platform.js +0 -2
  206. package/packages/core/release/tail-reseal-github.js +1 -2
  207. package/packages/core/release/tail-reseal-receipt.js +0 -1
  208. package/packages/core/release/tail-reseal.js +2 -20
  209. package/packages/core/release/version-state.js +16 -13
  210. package/packages/core/runtime/buildchain-domain.wasm +0 -0
  211. package/packages/core/runtime/checkout-identity.js +0 -13
  212. package/packages/core/runtime/domain-wasm-artifact.js +2 -2
  213. package/packages/core/runtime/entry/actions.js +121 -0
  214. package/packages/core/runtime/entry/activation.js +86 -0
  215. package/packages/core/runtime/entry/github.js +55 -0
  216. package/packages/core/runtime/entry/recovery.js +37 -0
  217. package/packages/core/runtime/entry/selection.js +110 -0
  218. package/packages/core/web/controller.js +1 -1
  219. package/packages/core/web/publication-admission-action.js +1 -8
  220. package/packages/core/web/web-surface-publication-candidate.js +2 -5
  221. package/packages/core/workflow/admission/actions.js +6 -26
  222. package/packages/core/workflow/admission/recovery.js +3 -43
  223. package/packages/core/workflow/admission/transactions.js +8 -24
  224. package/packages/core/workflow/commands/buildchain-cli-help.mjs +1 -1
  225. package/packages/core/workflow/commands/universal-workflow-engine.mjs +2 -7
  226. package/packages/core/workflow/dogfood/actions.js +0 -17
  227. package/packages/core/workflow/engine/action.js +0 -5
  228. package/packages/core/workflow/engine/conformance.js +1 -1
  229. package/packages/core/workflow/engine/execution.js +2 -6
  230. package/packages/core/workflow/engine/identity.js +1 -6
  231. package/packages/core/workflow/engine/release-environment.js +11 -35
  232. package/packages/core/workflow/engine/release-promotion.js +2 -2
  233. package/packages/core/workflow/settlement/actions.js +0 -12
  234. package/packages/core/workflow/universal-self-dogfood.js +2 -16
  235. package/packages/core/workflow/universal-workflow-bootstrap.js +16 -241
  236. package/packages/core/workflow/workflow-taxonomy.mjs +2 -2
  237. package/scripts/check-dev-delivery-actions.mjs +17 -8
  238. package/scripts/check-floating-consumer-policy-contract.mjs +6 -6
  239. package/scripts/check-inventory.mjs +1 -10
  240. package/scripts/check-public-dogfood-contract.mjs +34 -21
  241. package/scripts/check-release-topology.mjs +2 -6
  242. package/scripts/check-runtime-entry.mjs +133 -0
  243. package/scripts/check-universal-workflow-bootstrap.mjs +45 -281
  244. package/scripts/check-workflows.sh +0 -7
  245. package/scripts/generate-bootstrap-admission.mjs +1 -1
  246. package/scripts/generate-channel-promotion-workflow.mjs +4 -4
  247. package/scripts/inventory/binary.mjs +4 -4
  248. package/scripts/inventory/promotion.mjs +5 -3
  249. package/scripts/runtime-source-boundaries.mjs +70 -0
  250. package/scripts/site-capability-metadata.mjs +2 -2
  251. package/scripts/workflow-action-graph.mjs +5 -18
  252. package/scripts/workflow-self-reference.mjs +20 -0
  253. package/templates/native-dev-delivery.yml +4 -4
  254. package/templates/universal-buildchain-bootstrap.yml +12 -2
  255. package/architecture/runtime-ref-resume-authority.json +0 -64
  256. package/architecture/universal-workflow-train-admission.json +0 -76
  257. package/contracts/v4-runtime-ref-resume-authority-v1.schema.json +0 -235
  258. package/docs/v4-runtime-ref-resume-authority.md +0 -69
  259. package/packages/core/consumer/channel-selection.js +0 -211
  260. package/packages/core/consumer/commands/buildchain-channel-router.mjs +0 -81
  261. package/packages/core/consumer/invocation-selector.js +0 -4
  262. package/packages/core/consumer/runtime-ref-resume-authority.js +0 -621
  263. package/packages/core/consumer/workflow-definition-authority.js +0 -64
  264. package/packages/core/contracts/runtime-contract-action.js +0 -48
  265. package/packages/core/release/commands/promotion-identity-resolver.mjs +0 -77
  266. package/packages/core/release/commands/verify-promotion-router-binding.sh +0 -36
  267. package/packages/core/release/promotion/identities.js +0 -56
  268. package/packages/core/release/runtime-override-authorization.js +0 -242
  269. package/packages/core/runtime/commands/runtime-ref-core.mjs +0 -171
  270. package/packages/core/runtime/provider-closure.js +0 -60
  271. package/packages/core/runtime/runtime-selection-action.js +0 -34
  272. package/packages/core/runtime/runtime-selection.js +0 -136
  273. package/packages/core/runtime/workflow-runtime.js +0 -11
  274. package/packages/core/workflow/admission/review.js +0 -188
  275. package/packages/core/workflow/commands/universal-workflow-backflow.mjs +0 -26
  276. package/packages/core/workflow/installation.js +0 -33
  277. package/packages/core/workflow/settlement/backflow.js +0 -187
  278. package/scripts/generate-bootstrap-recovery.mjs +0 -94
  279. package/templates/bootstrap-recovery/actions/build/source/admit/action.yml +0 -17
  280. package/templates/bootstrap-recovery/actions/build/source/admit/dist/index.js +0 -63
  281. package/templates/bootstrap-recovery/actions/runtime/dependencies/install/action.yml +0 -18
  282. package/templates/bootstrap-recovery/actions/runtime/dependencies/install/dist/index.js +0 -63
  283. package/templates/bootstrap-recovery/actions/runtime/environment/prepare/action.yml +0 -21
  284. package/templates/bootstrap-recovery/actions/workflow/admission/inspect/action.yml +0 -27
  285. package/templates/bootstrap-recovery/actions/workflow/admission/inspect/dist/index.js +0 -64
  286. package/templates/bootstrap-recovery/actions/workflow/admission/review/action.yml +0 -15
  287. package/templates/bootstrap-recovery/actions/workflow/admission/review/dist/index.js +0 -65
  288. package/templates/bootstrap-recovery/actions/workflow/recovery/admit/action.yml +0 -47
  289. package/templates/bootstrap-recovery/actions/workflow/recovery/execute/action.yml +0 -48
  290. package/templates/bootstrap-recovery/actions/workflow/recovery/settle/action.yml +0 -54
  291. package/templates/bootstrap-recovery/actions/workflow/settlement/seal/action.yml +0 -17
  292. package/templates/bootstrap-recovery/actions/workflow/settlement/seal/dist/index.js +0 -65
  293. package/templates/bootstrap-recovery/manifest.json +0 -68
  294. package/templates/bootstrap-recovery/package.json +0 -9
  295. package/templates/universal-buildchain-bootstrap-recovery.yml +0 -115
@@ -156,7 +156,7 @@ jobs:
156
156
  toolchain-type: config
157
157
  verify-command: make check
158
158
  artifact-name: observer-declared-timelines
159
- buildchain-contract-lock-path: .buildchain/contract-lock.json
159
+ contract-lock: .buildchain/contract-lock.json
160
160
  ```
161
161
 
162
162
  The build-only workflow:
@@ -212,7 +212,7 @@ on:
212
212
 
213
213
  jobs:
214
214
  paper-release:
215
- uses: kungfu-systems/buildchain/.github/workflows/public-release-paper.yml@<exact-buildchain-sha>
215
+ uses: kungfu-systems/buildchain/.github/workflows/public-release-paper.yml@v4
216
216
  permissions:
217
217
  actions: read
218
218
  checks: write
@@ -220,12 +220,11 @@ jobs:
220
220
  id-token: write
221
221
  issues: write
222
222
  with:
223
- buildchain-ref: <exact-buildchain-sha>
224
223
  publisher-workflow-path: .github/workflows/public-release-paper.yml
225
224
  toolchain-type: config
226
225
  verify-command: make check
227
226
  artifact-paths: _build/paper-name.pdf
228
- buildchain-contract-lock-path: .buildchain/contract-lock.json
227
+ contract-lock: .buildchain/contract-lock.json
229
228
  secrets:
230
229
  BUILDCHAIN_GENERATED_WRITE_APP_CLIENT_ID: ${{ secrets.BUILDCHAIN_GENERATED_WRITE_APP_CLIENT_ID }}
231
230
  BUILDCHAIN_GENERATED_WRITE_APP_PRIVATE_KEY: ${{ secrets.BUILDCHAIN_GENERATED_WRITE_APP_PRIVATE_KEY }}
@@ -8,7 +8,7 @@ confidence: high
8
8
  sensitivity: public
9
9
  evidence_grade: B
10
10
  review_state: unreviewed
11
- last_reviewed: 2026-07-31
11
+ last_reviewed: 2026-09-11
12
12
  ai_provenance:
13
13
  model_family: GPT-5
14
14
  product: Codex
@@ -50,7 +50,7 @@ bound by the manifest digest but excluded from the product-byte set because it c
50
50
  be finalized after the lifecycle scan. The verifier also compares the PR evidence tree to the
51
51
  admitted post-merge source commit tree. It rejects an unknown
52
52
  workflow, stale or replayed nonce, runner downgrade, control-plane drift,
53
- source/runtime mismatch, and artifact substitution. A successful result is a
53
+ source mismatch, and artifact substitution. A successful result is a
54
54
  scoped capability receipt, not a bearer credential.
55
55
 
56
56
  ## Runner and control-plane evidence
@@ -111,11 +111,10 @@ finished uploading evidence, the resolver waits up to ten minutes for the exact
111
111
  merged PR's successful workflow run and paired artifacts. Polling remains bound
112
112
  to the PR/head identity; timeout or a sibling run still fails closed.
113
113
 
114
- The public promotion router preserves the requested `vN` or `vN-alpha` ref as
115
- audit metadata, but binds the router to GitHub's selected reusable-workflow SHA
116
- and resolves each remaining floating shell/runtime ref exactly once. Every
117
- later checkout and delegated promotion receives those immutable SHAs, so a
118
- channel tag moving during the run cannot mix two Buildchain revisions.
114
+ The public promotion entry selects one execution runtime through the shared
115
+ [Runtime entry contract](runtime-entry.md). Entry and execution commits may differ.
116
+ Every later job prepares that selection without resolving another Buildchain ref
117
+ or checking entry/runtime SHA equality.
119
118
 
120
119
  ## Resume from an existing candidate run
121
120
 
@@ -139,12 +138,10 @@ on:
139
138
  candidate-run-id: { required: true, type: string }
140
139
  target-sha: { required: true, type: string }
141
140
  expected-tree: { required: true, type: string }
142
- candidate-runtime-sha: { required: true, type: string }
143
- buildchain-runtime-sha: { required: true, type: string }
144
-
141
+ runtime-ref: { required: true, type: string }
145
142
  jobs:
146
143
  resume:
147
- uses: kungfu-systems/buildchain/.github/workflows/public-release-promote.yml@<exact-current-buildchain-sha>
144
+ uses: kungfu-systems/buildchain/.github/workflows/public-release-promote.yml@v4
148
145
  permissions:
149
146
  actions: write
150
147
  checks: write
@@ -153,22 +150,20 @@ jobs:
153
150
  pull-requests: write
154
151
  secrets: inherit
155
152
  with:
156
- buildchain-ref: ${{ inputs.buildchain-runtime-sha }}
157
- channel: alpha
158
- target-ref: alpha/v3/v3.0
159
- target-sha: ${{ inputs.target-sha }}
160
- artifact-name: product
161
- artifact-patterns: product-package-*
162
- release-candidate-workflow-file: build.yml
163
- release-candidate-workflow-name: Build
164
- resume-candidate-repository: ${{ github.repository }}
165
- resume-candidate-run-id: ${{ inputs.candidate-run-id }}
166
- resume-expected-workflow-file: build.yml
167
- resume-expected-workflow-name: Build
168
- resume-expected-source-tree: ${{ inputs.expected-tree }}
169
- resume-expected-candidate-runtime-sha: ${{ inputs.candidate-runtime-sha }}
170
- resume-buildchain-runtime-sha: ${{ inputs.buildchain-runtime-sha }}
171
- publish-transaction-override: true
153
+ runtime-ref: ${{ inputs.runtime-ref }}
154
+ request-json: >-
155
+ {"schema":"buildchain.promotion-request/v1",
156
+ "channel":"alpha", "target-ref":"alpha/v4/v4.1",
157
+ "target-sha":${{ toJSON(inputs.target-sha) }},
158
+ "artifact-name":"product", "artifact-patterns":"product-package-*",
159
+ "release-candidate-workflow-file":"build.yml",
160
+ "release-candidate-workflow-name":"Build",
161
+ "resume-candidate-repository":${{ toJSON(github.repository) }},
162
+ "resume-candidate-run-id":${{ toJSON(inputs.candidate-run-id) }},
163
+ "resume-expected-workflow-file":"build.yml",
164
+ "resume-expected-workflow-name":"Build",
165
+ "resume-expected-source-tree":${{ toJSON(inputs.expected-tree) }},
166
+ "publish-transaction-override":true}
172
167
  ```
173
168
 
174
169
  `resume-expected-candidate-root` may replace `resume-expected-source-tree`, or
@@ -321,8 +316,7 @@ and payload bytes. It can read those inputs through
321
316
  permission, or provider write permission. Buildchain validates the aggregate
322
317
  digest and exact source binding before it seals a capability. Exactly one of
323
318
  the supplied aggregate, consumer command, or explicit no-Gate decision is
324
- allowed. Buildchain still requires caller-owned RC evidence, an exact authority
325
- runtime and source SHA, a repository-local publisher workflow, matching npm
319
+ allowed. Buildchain still requires caller-owned RC evidence, an exact source SHA and prepared execution runtime, a repository-local publisher workflow, matching npm
326
320
  target/package identity or exact caller-bound GitHub Release target, and a
327
321
  qualifying control-plane audit.
328
322
 
@@ -8,7 +8,7 @@ confidence: high
8
8
  sensitivity: public
9
9
  evidence_grade: A
10
10
  review_state: unreviewed
11
- last_reviewed: 2026-09-08
11
+ last_reviewed: 2026-09-11
12
12
  ai_provenance:
13
13
  model_family: GPT-6
14
14
  product: Codex
@@ -250,7 +250,7 @@ Two independent thin workflows continuously qualify the published channels.
250
250
  runs the root project's real install, build, and verify lifecycle.
251
251
  `self-build-stable-dogfood.yml` calls `build.yml@v4` with only the nested fixture's
252
252
  `config-path`, including native and Linux container builds. Project settings
253
- live in TOML; the called workflow binds its exact runtime SHA and configuration
253
+ live in TOML; the selected runtime records its execution SHA and configuration
254
254
  root into the build receipts. Separate workflow validation allows each channel
255
255
  to advance independently during a breaking producer-first release.
256
256
 
@@ -631,12 +631,12 @@ complete interface are bound into `contractRoot`; the receipt additionally
631
631
  binds the caller commit/tree and both workflow digests.
632
632
 
633
633
  ```sh
634
- node .buildchain/workflow-contract-runtime/packages/core/contracts/commands/workflow-call-contract.mjs check \
634
+ node .buildchain/runtime/packages/core/contracts/commands/workflow-call-contract.mjs check \
635
635
  --caller-root . \
636
636
  --caller-workflow .github/workflows/self-release-new-version-compat.yml \
637
637
  --caller-repository kungfu-systems/example \
638
638
  --job promote \
639
- --callee-root .buildchain/workflow-contract-runtime \
639
+ --callee-root .buildchain/runtime \
640
640
  --callee-workflow .github/workflows/public-release-promote.yml \
641
641
  --callee-repository kungfu-systems/buildchain \
642
642
  --trusted-event workflow_dispatch \
@@ -645,11 +645,11 @@ node .buildchain/workflow-contract-runtime/packages/core/contracts/commands/work
645
645
  --output .buildchain/workflow-call-receipts/release-new-version.json
646
646
  ```
647
647
 
648
- The checkout at `.buildchain/workflow-contract-runtime` must use the same
649
- 40-character SHA written in the caller's `uses:` edge. To accept an intentional
650
- contract change, first run without `--expected-contract-root`, review the full
651
- diagnostic and exact coordinates, then replace only the committed root. The
652
- ordinary PR check runs this command before any candidate or promotion dispatch.
648
+ Use the runtime prepared by the central entry for this offline contract audit.
649
+ The caller persists a floating entry; its resolved API definition is distinct
650
+ from the selected execution runtime. To accept an intentional contract change,
651
+ review the full diagnostic and source coordinates before replacing the committed
652
+ contract root. This audit does not add a runtime-SHA equality gate to execution.
653
653
  Local pre-commit rehearsal may add `--allow-dirty`; that result is marked
654
654
  `receiptReusable: false` and cannot replace the clean exact-source receipt.
655
655
 
@@ -662,7 +662,7 @@ command = "cargo test --workspace --locked"
662
662
  ```
663
663
 
664
664
  Consumers that want Buildchain to own the check wrapper can call
665
- `.github/workflows/public-build-check.yml@v3`. The wrapper runs the declared
665
+ `.github/workflows/public-build-check.yml@v4`. The wrapper runs the declared
666
666
  `lifecycle.install` and `lifecycle.verify` stages and fails the `check` job when
667
667
  either declaration is missing or the command exits non-zero.
668
668
 
@@ -8,7 +8,7 @@ confidence: high
8
8
  sensitivity: public
9
9
  evidence_grade: B
10
10
  review_state: unreviewed
11
- last_reviewed: 2026-09-09
11
+ last_reviewed: 2026-09-11
12
12
  ai_provenance:
13
13
  model_family: GPT-6
14
14
  product: Codex
@@ -43,22 +43,15 @@ Serialize dynamic values with `toJSON` so quotes, newlines, numbers and booleans
43
43
  retain their original meaning. Permissions remain an explicit caller responsibility;
44
44
  an input cannot grant a job credentials or provider authority.
45
45
 
46
- The public workflow resolves identities, admits the consumer and calls the current
47
- publisher component. The admission node creates one complete internal
46
+ The public workflow selects one runtime through the central runtime entry, admits
47
+ the consumer source and constructs the internal
48
48
  [`promotion-invocation-v1.schema.json`](../contracts/promotion-invocation-v1.schema.json)
49
- document containing the exact router, publisher, runtime, contract lock and any
50
- independently authorized transient runtime selection. The component verifies that
51
- document before loading the selected runtime, then runs QUALIFY, APPLY and SETTLE
52
- with their separate job permissions.
49
+ document. QUALIFY, APPLY and SETTLE prepare that selected runtime and retain their
50
+ separate job permissions. Later nodes validate source, artifact and publication
51
+ evidence without comparing Buildchain SHAs.
53
52
 
54
- Consumer repositories adopt this API when the selected distribution channel
55
- contains it. Development self-calls use the source-owned public entry so that
56
- the definition and request contract come from the same reviewed commit. This
57
- development arrangement does not move a floating tag or publish an alpha package.
58
-
59
- The source-owned promotion API uses the caller's exact defining commit. Its
60
- consumer lock roots describe published external dependencies; they do not claim
61
- that the new local API is compatible with a previously published workflow. The
62
- source-owned path authenticates Git content instead of granting a historical
63
- compatibility exception. External floating calls still require selected-lock
64
- compatibility with the resolved public workflow.
53
+ Buildchain dogfood and external consumers use the same `@v4` or `@v4-alpha`
54
+ public entry. The entry commit owns the API shell; the selected runtime owns
55
+ business actions, modules and resources. A transient `runtime-ref` can select a
56
+ repaired train while preserving the original publication source and evidence.
57
+ See [Runtime entry](runtime-entry.md) for selection precedence and recovery.
@@ -8,7 +8,7 @@ confidence: high
8
8
  sensitivity: public
9
9
  evidence_grade: A
10
10
  review_state: unreviewed
11
- last_reviewed: 2026-09-09
11
+ last_reviewed: 2026-09-11
12
12
  ai_provenance:
13
13
  model_family: GPT-6
14
14
  product: Codex
@@ -520,10 +520,9 @@ branch or a concurrent incompatible update fails; the workflow does not replace
520
520
  its history. The controller retains the exact branch reconciliation and PR
521
521
  coordinates.
522
522
 
523
- The workflow checks out the Buildchain runtime selected by
524
- `buildchain-repository` and `buildchain-ref` into `.buildchain/runtime`, invokes
525
- that runtime for the propagation plan and lock write, then checks out the
526
- downstream repository and writes the exact lock. If
523
+ The central entry prepares `.buildchain/runtime` once for each execution job.
524
+ The selected runtime owns the propagation plan and lock write; the downstream
525
+ repository checkout is the consumer source. If
527
526
  `downstream-update-command` is set, Buildchain runs that consumer-owned command
528
527
  after writing the lock and exposes the exact lock path, lock SHA-256,
529
528
  propagation key, branch, and upstream release JSON as
@@ -550,7 +549,7 @@ publication, deployment, and readback entrypoints. A byte-identical rerun is an
550
549
  explicit successful no-op, never a synthetic completion.
551
550
 
552
551
  For unreleased runtime validation, keep the caller's reusable workflow reference
553
- on `@v3` and pass a temporary train ref through `buildchain-ref`.
552
+ on `@v4` and pass a temporary train through `runtime-ref`.
554
553
 
555
554
  ## kfd to site-libkungfu-dev
556
555
 
@@ -8,7 +8,7 @@ confidence: high
8
8
  sensitivity: public
9
9
  evidence_grade: A
10
10
  review_state: unreviewed
11
- last_reviewed: 2026-08-07
11
+ last_reviewed: 2026-09-11
12
12
  ai_provenance:
13
13
  model_family: GPT-5
14
14
  product: Codex
@@ -55,9 +55,8 @@ jobs:
55
55
  release-tail:
56
56
  permissions:
57
57
  contents: write
58
- uses: kungfu-systems/buildchain/.github/workflows/public-release-tail.yml@<exact-buildchain-sha>
58
+ uses: kungfu-systems/buildchain/.github/workflows/public-release-tail.yml@v4
59
59
  with:
60
- buildchain-ref: <exact-buildchain-sha>
61
60
  declaration-path: .buildchain/release-tail/declaration.json
62
61
  provider-bindings-path: .buildchain/release-tail/provider-bindings.json
63
62
  execute: true
@@ -34,11 +34,16 @@ jobs:
34
34
  uses: kungfu-systems/buildchain/.github/workflows/build.yml@v4
35
35
  ```
36
36
 
37
- Use `@v4-alpha` to select the alpha runtime. The exact called workflow SHA is
38
- the runtime SHA; a second runtime selector cannot override it. Both the public
39
- `build.yml` and the `.build.yml` backbone expose exactly one optional input:
40
- `config-path`. Neither accepts command overrides, runtime refs, arbitrary JSON
41
- configuration or legacy aliases.
37
+ Use `@v4-alpha` for the alpha entry. The entry selects the execution runtime
38
+ from a transient `runtime-ref`, the selected `contract-lock`, or its own commit
39
+ by default. The build API also accepts `config-path` and `resume-run-id`;
40
+ `runtime-selection` transports the entry decision through nested workflows.
41
+ All project commands and build options remain in TOML.
42
+
43
+ A new recovery dispatch can pass a repaired train and the original failed run
44
+ ID through the same entry. It restores matching retained build outputs, executes
45
+ remaining verification and reads back provider effects. An entry defect requires
46
+ an upgraded published entry and a full run. See [Runtime entry](runtime-entry.md).
42
47
 
43
48
  ## Project discovery
44
49
 
@@ -118,8 +123,9 @@ Other optional project sections are:
118
123
  | `build.evidence` | Repository files containing gate and candidate-family evidence |
119
124
 
120
125
  Declarative signing targets continue to belong to `[signing.artifacts]`.
121
- The 4.1 formal signing contract requires `authority/v4/v4.1/artifact-signing`
122
- with the protected `buildchain-artifact-signing` environment.
126
+ Signing uses `public-release-signing-authority.yml@v4`, passes the selected runtime
127
+ through its runtime parameter and retains the protected
128
+ `buildchain-artifact-signing` environment.
123
129
  Credentials, authority profiles and signer identities cannot be supplied through
124
130
  that declaration. See [Release Candidate](release-candidate.md)
125
131
  and [GitHub Artifact Attestation](github-artifact-attestation.md).
@@ -0,0 +1,122 @@
1
+ ---
2
+ status: draft
3
+ period: ongoing
4
+ theme: unified-runtime-entry
5
+ doc_type: implementation-contract
6
+ source_level: user-consensus
7
+ confidence: high
8
+ sensitivity: public
9
+ evidence_grade: B
10
+ review_state: unreviewed
11
+ last_reviewed: 2026-09-11
12
+ ai_provenance:
13
+ model_family: GPT-6
14
+ product: Codex
15
+ generated_at: 2026-09-11
16
+ visible_context: Explicit user-approved runtime selection, recovery and alpha publication requirements.
17
+ invisible_context_boundary: This contract does not claim implementation or hosted qualification is complete.
18
+ ---
19
+
20
+ # Runtime entry contract
21
+
22
+ Consumers persist a public workflow reference at `@v4` or `@v4-alpha`.
23
+ GitHub resolves that entry to a commit. The entry selects execution runtime X
24
+ from an explicit transient parameter, the selected contract lock, or the entry
25
+ commit default, in that order. The entry commit and runtime commit may differ.
26
+
27
+ `actions/runtime/environment/prepare` is the sole runtime preparation owner.
28
+ Selection is resolved once per execution. Each executing job prepares that
29
+ selected runtime through the same implementation. Business workflows and
30
+ actions cannot acquire, replace, reselect or install their own Buildchain
31
+ runtime. All business composites, JavaScript modules, WASM and resources come
32
+ from X. Runtime identity is retained as provenance; subsequent business nodes
33
+ do not compare Buildchain SHAs or require equality with the workflow commit.
34
+
35
+ A runtime failure can start a recovery execution through the same public
36
+ entry with a transient repaired train branch or tag. The new execution selects
37
+ runtime Y and retains the original task, source and evidence. Valid completed
38
+ results can be reused; provider effects require readback before further writes.
39
+ Switching runtimes does not automatically qualify all previous results for reuse.
40
+ Neither the persisted caller nor its contract lock needs a train rewrite.
41
+
42
+ An entry failure is repaired by publishing and adopting a corrected entry and
43
+ starting a complete run. Recovering an invalid entry is not a runtime feature.
44
+ Buildchain self-dogfood uses exactly the same consumer contract and has no
45
+ repository-specific execution or recovery route.
46
+
47
+ Source checkouts are separate business inputs. Building Buildchain itself may
48
+ check out its source, but that source cannot implicitly replace the selected
49
+ execution runtime. Source, artifact and publication-effect checks retain their
50
+ business meaning; they do not reintroduce downstream Buildchain SHA checks.
51
+
52
+ Acceptance requires a complete workflow/action acquisition inventory, enforced
53
+ single preparation ownership, different entry/runtime execution, train recovery,
54
+ platform and multi-job qualification, and validation of the published consumer
55
+ entry. A source test or a successful package import alone is insufficient.
56
+
57
+ ## Consumer build and recovery
58
+
59
+ ```yaml
60
+ on:
61
+ push:
62
+ workflow_dispatch:
63
+ inputs:
64
+ runtime-ref:
65
+ description: Optional repaired train for this execution
66
+ default: ""
67
+ type: string
68
+ resume-run-id:
69
+ description: Original failed build run to recover
70
+ default: ""
71
+ type: string
72
+ jobs:
73
+ build:
74
+ uses: kungfu-systems/buildchain/.github/workflows/build.yml@v4
75
+ with:
76
+ runtime-ref: ${{ inputs.runtime-ref || '' }}
77
+ resume-run-id: ${{ inputs.resume-run-id || '' }}
78
+ ```
79
+
80
+ Ordinary executions use `.buildchain/contract-lock.json`; the alpha entry defaults
81
+ to `.buildchain/alpha-contract-lock.json`. `contract-lock` selects another relative
82
+ lock path. A missing default lock falls back to the entry commit; an invalid lock
83
+ or an unreadable source fails preparation. A supplied runtime parameter overrides
84
+ the lock and requires caller repository write authority. For `workflow_dispatch`,
85
+ GitHub enforces repository Actions write permission before creating the run,
86
+ including calls using installation tokens. The entry uses that authorization;
87
+ an installation bot does not need to be a human repository collaborator.
88
+ Other event types retain the entry's write, maintain or admin collaborator check.
89
+ See GitHub's [workflow dispatch authorization](https://docs.github.com/en/rest/actions/workflows#create-a-workflow-dispatch-event).
90
+ Branches and tags are resolved to an immutable commit during selection.
91
+
92
+ For a Buildchain runtime fault, dispatch the same consumer workflow with
93
+ `runtime-ref: train/v4/v4.1/<repair>` and the original `resume-run-id`. The entry
94
+ retains the original source commit and rejects unrelated workflows or fork runs.
95
+ Install hydrates the new workspace; completed build outputs are restored only
96
+ when source, configuration, platform, tools, artifact producer and all retained
97
+ bytes qualify. The remaining verification runs with the repaired runtime.
98
+ Existing provider effects use their transaction evidence and live readbacks.
99
+ A failed-job rerun cannot supply new inputs; recovery therefore starts a new run.
100
+
101
+ `runtime-selection` is an internal reusable-workflow transport for an already
102
+ selected runtime. Components forward it unchanged instead of resolving another
103
+ reference. Consumers normally supply `runtime-ref` or a lock, not this transport.
104
+
105
+ Nested components preserve the selected runtime and contract metadata without
106
+ re-reading the lock or comparing the runtime SHA. The internal transport carries
107
+ a trusted entry output; consumer source binding and override authorization remain
108
+ entry concerns. Recovery selectors request `actions: read` to read the original
109
+ run in private repositories as well as public repositories.
110
+
111
+ Business adapters also keep the runtime installation directory separate from the
112
+ consumer workspace. Queue reconciliation, npm preview, runner qualification and
113
+ binary packaging read consumer source from the workspace while executing selected
114
+ runtime code. Directory equality is not an admission rule; source SHA and artifact
115
+ containment checks still apply. The architecture gate parses business JavaScript
116
+ and rejects direct or aliased runtime/source directory equality comparisons.
117
+
118
+ Publication authority adapters take runtime repository and revision provenance
119
+ from the prepared entry selection. Consumer requests provide source, artifact
120
+ and effect authority; they do not supply or readmit a Buildchain SHA. Governance
121
+ and sealed publication evidence retain the selected runtime as provenance while
122
+ validating their own source, policy and provider bindings.
@@ -18,44 +18,33 @@ ai_provenance:
18
18
 
19
19
  # Runtime Train Validation
20
20
 
21
- Ordinary builds use the public `build.yml@v4` or `build.yml@v4-alpha`
22
- workflow and select all project settings from `buildchain.toml`. The called
23
- workflow SHA also selects the runtime; there is no second runtime selector.
24
- See [Reusable Build Surface](reusable-build-surface.md) for configuration,
25
- zero-input calls and the optional nested-project locator.
26
-
27
- ## Alpha qualification
28
-
29
- Buildchain changes enter the protected development branch after review and
30
- checks. Publish an alpha through the protected release workflow, then exercise
31
- that public alpha on the exact consumer source. Record the called workflow SHA,
32
- source SHA, channel-matching contract lock, configuration root and artifact
33
- manifests. Promote stable only after the required alpha evidence succeeds.
34
-
35
- For a breaking build-interface change, publish the producer before changing
36
- its own public consumers. Retain the callers and locks for the currently
37
- published interface while creating the first alpha from a successful PR-stage
38
- candidate. Then migrate the callers and accept the published alpha contract,
39
- qualify that public interface, and publish the completed alpha and stable.
40
- This ordering adds no compatibility inputs to the new build workflow.
41
-
42
- Source checks verify each consumer lock against the immutable source contract
43
- at its accepted SHA. Hosted consumer admission separately verifies the actual
44
- called floating workflow; unpublished producer code is not that dependency.
45
-
46
- A train branch is a temporary diagnostic pointer, never a release channel or a
47
- persisted consumer dependency. Ordinary builds do not accept train, SHA or
48
- `buildchain-ref` inputs. Initialization does not create a runtime pass-through.
49
-
50
- ## Specialized release and recovery
51
-
52
- Release and recovery entry points retain their own bounded runtime admission
53
- contracts. Their runtime override capability does not extend to ordinary builds.
54
- Follow [Release Flow](release-flow.md) and the particular entry point's contract;
55
- a diagnostic train does not authorize publication, signing, or floating-ref
56
- movement. Preserve existing source locks, exact candidate lineage and terminal
57
- receipts when recovering a release.
58
-
59
- The Buildchain self-build callers exercise the public floating channels using
60
- root or fixture TOML. They do not commit a private runtime selector to qualify
61
- that channel.
21
+ A train repairs the execution runtime without changing the consumer's durable
22
+ public entry. All public workflows, including ordinary builds, use the same
23
+ [Runtime entry contract](runtime-entry.md). The transient runtime parameter
24
+ wins over the consumer lock. Buildchain dogfood follows this same path.
25
+
26
+ ## Validate a runtime change
27
+
28
+ 1. Commit the candidate with its action bundles, WASM and runtime contract.
29
+ 2. Publish the candidate at `train/v4/v4.1/<capability>`.
30
+ 3. Dispatch the consumer's existing public entry with `runtime-ref` set to that
31
+ train. Record the selected runtime, consumer source and resulting evidence.
32
+ 4. After checks and independent review, merge into protected Dev and publish
33
+ the requested Alpha. Qualify the published entry before Stable promotion.
34
+
35
+ Train selection is a trusted non-persistent runtime input. It never grants
36
+ publication or signing authority by itself; those business effects retain their
37
+ provider credentials, capability constraints and readback requirements.
38
+
39
+ ## Recover a runtime failure
40
+
41
+ Start a new dispatch through the same public entry with the repaired train.
42
+ For builds, supply `resume-run-id`; for release promotion, preserve the original
43
+ candidate run and transaction in the typed request. The entry prepares runtime
44
+ Y while the task keeps its original source and valid completed evidence.
45
+ A GitHub failed-job rerun does not change its inputs and cannot select a new
46
+ runtime. Do not persist the train into the caller workflow or contract lock.
47
+
48
+ If the public entry itself is defective, publish and adopt the corrected entry
49
+ and start a full run. Copied consumer recovery packages and alternate recovery
50
+ workflows are not part of the runtime contract.
@@ -8,7 +8,7 @@ confidence: high
8
8
  sensitivity: public
9
9
  evidence_grade: A
10
10
  review_state: self-reviewed
11
- last_reviewed: 2026-08-16
11
+ last_reviewed: 2026-09-11
12
12
  ai_provenance:
13
13
  model_family: GPT-5
14
14
  product: Codex
@@ -107,13 +107,13 @@ effect_default = "disabled"
107
107
  The public reusable
108
108
  [`public-release-tail.yml`](../.github/workflows/public-release-tail.yml) accepts the same
109
109
  capsule, candidate root, mode, state and evidence paths. Before publication,
110
- Buildchain dogfoods that public surface through a thin same-commit local reusable
111
- call with the exact PR-head or dispatch SHA as its runtime. The reusable is
110
+ Buildchain dogfoods that public surface through the same floating `@v4` entry
111
+ as external consumers. The shared entry selects the runtime from the transient
112
+ parameter, consumer lock, or entry default, and prepares it in each job. The reusable is
112
113
  permission-neutral and the self-dogfood caller stays `contents: read`, passes
113
114
  `execute: false`, and therefore cannot inherit or synthesize production write
114
115
  authority. Effectful production callers must explicitly declare their own
115
- provider permission. Durable external consumers remain on the floating
116
- `@v4-alpha` contract. Provider mode additionally requires the exact authority
116
+ provider permission. Durable external consumers use `@v4` or `@v4-alpha`. Provider mode additionally requires the exact authority
117
117
  path. Provider bindings come from the capsule; an optional external bindings
118
118
  input is accepted only when its canonical exact root and payload equal the
119
119
  capsule binding. Ordinary calls default to `simulate`.
@@ -8,7 +8,7 @@ confidence: high
8
8
  sensitivity: public
9
9
  evidence_grade: A
10
10
  review_state: unreviewed
11
- last_reviewed: 2026-08-10
11
+ last_reviewed: 2026-09-11
12
12
  ai_provenance:
13
13
  model_family: GPT-5
14
14
  product: Codex
@@ -122,7 +122,7 @@ access and produce the same ordered decisions and `planRoot`.
122
122
 
123
123
  An eligible completed dependency becomes an exact-root restore; a missing or
124
124
  invalid target becomes a rebuild, and only that target's dependency closure is
125
- scheduled. Source, platform, toolchain, runtime, policy, declared-input,
125
+ scheduled. Source, platform, toolchain, policy, declared-input,
126
126
  transformation, output-manifest, and retention changes carry rooted causal
127
127
  invalidation fields. Cross-platform reuse, corrupt or partial content, root
128
128
  mismatch, and insufficient qualification reject reuse fail closed.
@@ -139,13 +139,11 @@ Buildchain-owned public reusable workflow,
139
139
  `.github/workflows/public-build-stage-capsule-canary.yml`. Buildchain's caller is the thin
140
140
  `.github/workflows/self-build-public-consumer-dogfood.yml`; it has no steps, copied
141
141
  orchestration, local action, direct qualification invocation, or private
142
- consumer profile. Candidate recursion is resolved only by publishing the exact
143
- candidate at `train/v4/v4.0/<capability>` and calling that fully qualified
144
- public ref. After successful qualification and protected merge, the caller can
145
- be pinned to the exact protected commit. An internal exception is never a
146
- permitted recursion mechanism.
142
+ consumer profile. The persisted caller uses `@v4`. Candidate validation passes
143
+ `train/v4/v4.1/<capability>` as the transient `runtime-ref` input, through the
144
+ same central selection and preparation entry as external consumers.
147
145
 
148
- The called workflow checks out that same commit as its runtime, reads the consumer's
146
+ The called workflow prepares the selected runtime and reads the consumer's
149
147
  tracked `.buildchain/buildchain.toml`, and executes only `install`, `build`,
150
148
  and `verify` on GitHub-hosted Linux x64, macOS arm64, and Windows x64 runners.
151
149
  Each stage binds its declared command, dependency edge, exact consumer source,
@@ -157,8 +155,9 @@ paths; it does not copy the campaign orchestration.
157
155
  The external seed retains `install` and `build` before an intentional late
158
156
  `verify` failure. A clean process reads the retained store, restores only the
159
157
  exact `build` root, rebuilds `verify`, and compares the result with the fresh
160
- three-stage aggregate. Runtime-ref, source, command/profile, manifest, summary,
161
- output, platform, and Capsule-root drift all stop with typed diagnostics.
158
+ three-stage aggregate. A repaired runtime may continue the campaign. Source,
159
+ command/profile, manifest, summary, output, platform and Capsule integrity drift
160
+ still stop with typed diagnostics; runtime provenance does not invalidate reuse.
162
161
 
163
162
  Qualification compares the declared artifact-manifest and aggregate content
164
163
  roots from a fresh full build with the roots assembled from retained and rebuilt