@kungfu-tech/buildchain 4.0.1-alpha.2 → 4.0.1-alpha.21

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 (203) hide show
  1. package/actions/release-tail/README.md +8 -0
  2. package/architecture/ci-lane-change-budget.json +187 -0
  3. package/architecture/decisions/0002-next-development-transition.md +101 -0
  4. package/architecture/decisions/0003-two-phase-delivery-warrant.md +152 -0
  5. package/architecture/internal-capabilities.json +211 -8
  6. package/architecture/maintainability-policy.json +113 -28
  7. package/architecture/release-tail-contract-inventory.json +5 -2
  8. package/architecture/v3-core-mechanism-inventory.json +91 -0
  9. package/architecture/v4-adopter-delivery-parity.json +32 -5
  10. package/architecture/v4-capability-state-machine-manifest.json +73 -0
  11. package/architecture/v4-compatibility-facts-parity.json +77 -0
  12. package/architecture/v4-delivery-authority-parity.json +250 -0
  13. package/architecture/v4-delivery-warrant-shadow-fixtures.json +41 -9
  14. package/architecture/v4-floating-consumer-policy.json +6 -0
  15. package/architecture/v4-next-development-parity.json +192 -0
  16. package/architecture/v4-publication-rehearsal-parity.json +84 -0
  17. package/architecture/v4-release-train-parity.json +1 -0
  18. package/architecture/v4-tail-reseal-parity.json +150 -0
  19. package/bin/buildchain.mjs +32 -3
  20. package/bin/internal/adopter-delivery-cli.mjs +70 -0
  21. package/bin/internal/command-registry.mjs +3 -0
  22. package/bin/internal/compatibility-facts-cli.mjs +101 -0
  23. package/contracts/dev-delivery-authority-v2.schema.json +662 -0
  24. package/contracts/fixtures/next-development-transition-v1/anchored-manual-waiting.json +47 -0
  25. package/contracts/fixtures/next-development-transition-v1/semver-auto-planned.json +47 -0
  26. package/contracts/fixtures/next-development-transition-v1/version-model-cases.json +40 -0
  27. package/contracts/fixtures/v4-adopter-delivery-v1/archive-template.json +19 -0
  28. package/contracts/fixtures/v4-adopter-delivery-v1/bootstrap-positive.json +93 -0
  29. package/contracts/fixtures/v4-adopter-delivery-v1/gate-positive.json +29 -0
  30. package/contracts/fixtures/v4-adopter-delivery-v1/gate-unknown-selector.json +26 -0
  31. package/contracts/fixtures/v4-adopter-delivery-v1/offline-vectors.json +50 -0
  32. package/contracts/fixtures/v4-compatibility-facts-v1/shared.json +1129 -0
  33. package/contracts/fixtures/v4-floating-consumer-policy-v1/cases.json +7 -1
  34. package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/artifacts/product.bin +1 -0
  35. package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/config/buildchain.toml +5 -0
  36. package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/documents/release-activation.json +1 -0
  37. package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/documents/signed-channel.json +1 -0
  38. package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/evidence/qualification.json +1 -0
  39. package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/manifests/candidate.json +5 -0
  40. package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/manifests/release-passport.json +1 -0
  41. package/contracts/fixtures/v4-publication-rehearsal-v1/capsule.json +707 -0
  42. package/contracts/fixtures/v4-publication-rehearsal-v1/offline-vectors.json +27 -0
  43. package/contracts/fixtures/v4-tail-reseal-v1/valid.json +229 -0
  44. package/contracts/next-development-request-v1.schema.json +66 -0
  45. package/contracts/next-development-transition-v1.schema.json +292 -0
  46. package/contracts/v4-adopter-delivery-v1.schema.json +81 -0
  47. package/contracts/v4-compatibility-facts-v1.schema.json +230 -0
  48. package/contracts/v4-floating-consumer-policy-receipt-v1.schema.json +4 -2
  49. package/contracts/v4-publication-rehearsal-capsule-v1.schema.json +233 -0
  50. package/contracts/v4-tail-reseal-v1.schema.json +276 -0
  51. package/dist/site/agent-index.json +5 -0
  52. package/dist/site/artifact-schemas.json +10 -0
  53. package/dist/site/buildchain-contract.json +1475 -27
  54. package/dist/site/buildchain-site.json +627 -31
  55. package/dist/site/capability-registry.json +17 -14
  56. package/dist/site/cli-registry.json +205 -3
  57. package/dist/site/kfd-claims.json +490 -16
  58. package/dist/site/kfd-upstream-aggregate.json +1 -1
  59. package/dist/site/manual-registry.json +52 -6
  60. package/dist/site/node-api-registry.json +14736 -8851
  61. package/dist/site/page-registry.json +593 -21
  62. package/dist/site/public-surface-audit.json +837 -48
  63. package/dist/site/publication-authority-registry.json +44 -8
  64. package/dist/site/publication-registry.json +4 -4
  65. package/dist/site/release-provenance.json +24 -0
  66. package/dist/site/schemas/dev-delivery-authority-v2.schema.json +662 -0
  67. package/dist/site/schemas/release-tail-capabilities-v1.schema.json +199 -0
  68. package/dist/site/schemas/v4-adopter-delivery-v1.schema.json +81 -0
  69. package/dist/site/schemas/v4-compatibility-facts-v1.schema.json +230 -0
  70. package/dist/site/schemas/v4-publication-rehearsal-capsule-v1.schema.json +233 -0
  71. package/dist/site/site-manifest.json +34 -10
  72. package/dist/site/workflow-registry.json +160 -10
  73. package/docs/MAP.md +8 -2
  74. package/docs/cli-reference.md +404 -13
  75. package/docs/cli.md +8 -0
  76. package/docs/dev-alpha-candidate-patrol.md +8 -0
  77. package/docs/dev-delivery-qualification-landing-adr.md +251 -0
  78. package/docs/dev-delivery-warrant.md +351 -38
  79. package/docs/next-development-transition.md +118 -0
  80. package/docs/node-api-reference.md +646 -293
  81. package/docs/release-tail-provider-plane.md +30 -0
  82. package/docs/v4-adopter-delivery.md +133 -0
  83. package/docs/v4-compatibility-facts.md +91 -0
  84. package/docs/v4-publication-rehearsal.md +130 -0
  85. package/docs/v4-tail-reseal.md +73 -0
  86. package/docs/versioning.md +4 -3
  87. package/package.json +34 -6
  88. package/packages/core/adopter-delivery-passport.js +259 -0
  89. package/packages/core/adopter-delivery-vectors.js +158 -0
  90. package/packages/core/adopter-delivery-vectors.json +77 -0
  91. package/packages/core/buildchain-agent-manuals.js +3 -0
  92. package/packages/core/buildchain-compatibility-authority.js +336 -0
  93. package/packages/core/buildchain-compatibility-fact.js +394 -0
  94. package/packages/core/buildchain-compatibility-facts.json +217 -0
  95. package/packages/core/buildchain-compatibility-proof.js +566 -0
  96. package/packages/core/buildchain-config.js +84 -0
  97. package/packages/core/buildchain-contract.js +96 -143
  98. package/packages/core/buildchain-delivery-bootstrap.js +240 -0
  99. package/packages/core/buildchain-delivery-infrastructure.js +164 -0
  100. package/packages/core/buildchain-delivery-self-dogfood.js +395 -0
  101. package/packages/core/buildchain-publication-authority.js +1 -0
  102. package/packages/core/channel-candidate.js +8 -0
  103. package/packages/core/channel-promotion-baseline.js +55 -0
  104. package/packages/core/ci-lane-change-budget.js +247 -0
  105. package/packages/core/dev-alpha-candidate-selection.js +10 -2
  106. package/packages/core/dev-delivery-authority-candidate.js +270 -0
  107. package/packages/core/dev-delivery-authority-evidence.js +146 -0
  108. package/packages/core/dev-delivery-authority-landing.js +461 -0
  109. package/packages/core/dev-delivery-authority-observation.js +48 -0
  110. package/packages/core/dev-delivery-authority-qualification.js +591 -0
  111. package/packages/core/dev-delivery-authority-settlement.js +213 -0
  112. package/packages/core/dev-delivery-authority-state.js +583 -0
  113. package/packages/core/dev-delivery-candidate-identity.js +13 -0
  114. package/packages/core/dev-delivery-contract-surface.js +76 -0
  115. package/packages/core/dev-delivery-execution-failure.js +133 -0
  116. package/packages/core/dev-delivery-execution-transfer.js +592 -0
  117. package/packages/core/dev-delivery-landing-admission-core.js +119 -0
  118. package/packages/core/dev-delivery-landing-readback.js +598 -0
  119. package/packages/core/dev-delivery-landing-terminal-evidence.js +271 -0
  120. package/packages/core/dev-delivery-landing-testing-port.js +6 -0
  121. package/packages/core/dev-delivery-native-execution.js +110 -0
  122. package/packages/core/dev-delivery-native-proof.js +562 -0
  123. package/packages/core/dev-delivery-process-boundary.js +563 -0
  124. package/packages/core/dev-delivery-provider-attempt.js +127 -0
  125. package/packages/core/dev-delivery-provider-heartbeat.js +382 -0
  126. package/packages/core/dev-delivery-warrant-cancellation.js +1 -0
  127. package/packages/core/dev-delivery-warrant-qualification.js +145 -0
  128. package/packages/core/dev-delivery-warrant-settlement.js +237 -36
  129. package/packages/core/dev-delivery-warrant-state.js +587 -0
  130. package/packages/core/dev-delivery-warrant.js +328 -370
  131. package/packages/core/github-governance-authority.js +1 -0
  132. package/packages/core/index.js +5 -0
  133. package/packages/core/kungfu-temporal-fact.js +557 -0
  134. package/packages/core/legacy-kfd-adopter-driver.js +167 -0
  135. package/packages/core/next-development-candidate-reservation.js +186 -0
  136. package/packages/core/next-development-controller.js +728 -0
  137. package/packages/core/next-development-projection.js +287 -0
  138. package/packages/core/next-development-transition.js +738 -0
  139. package/packages/core/paper-agent-entry.js +11 -5
  140. package/packages/core/paper.js +16 -5
  141. package/packages/core/published-delivery-authority.js +266 -0
  142. package/packages/core/release-candidate-recovery.js +70 -15
  143. package/packages/core/release-candidate.js +2 -2
  144. package/packages/core/release-passport.js +36 -9
  145. package/packages/core/v4-adopter-delivery-parity.js +3 -3
  146. package/packages/core/v4-adopter-delivery.js +359 -0
  147. package/packages/core/v4-canonical-contracts.js +5 -0
  148. package/packages/core/v4-delivery-warrant-read-candidate.js +10 -3
  149. package/packages/core/v4-floating-consumer-evidence.js +18 -4
  150. package/packages/core/v4-floating-consumer-policy.js +143 -20
  151. package/packages/core/v4-floating-consumer-release-passport.js +32 -5
  152. package/packages/core/v4-publication-rehearsal-capsule.js +468 -0
  153. package/packages/core/v4-publication-rehearsal-provider-bindings.js +212 -0
  154. package/packages/core/v4-publication-rehearsal.js +481 -0
  155. package/packages/core/v4-tail-reseal-contract.js +26 -0
  156. package/packages/core/v4-tail-reseal-github.js +178 -0
  157. package/packages/core/v4-tail-reseal-receipt.js +225 -0
  158. package/packages/core/v4-tail-reseal.js +594 -0
  159. package/packages/core/workflow-yaml-contract.js +24 -2
  160. package/scripts/buildchain-cli-help.mjs +41 -2
  161. package/scripts/check-ci-lane-change-budget.mjs +100 -0
  162. package/scripts/check-inventory.mjs +14 -3
  163. package/scripts/check-v4-floating-consumer-policy-contract.mjs +23 -4
  164. package/scripts/dev-alpha-candidate-patrol.mjs +22 -1
  165. package/scripts/dev-delivery-authority-command-adapters.mjs +206 -0
  166. package/scripts/dev-delivery-authority-provider.mjs +28 -0
  167. package/scripts/dev-delivery-authority.mjs +490 -0
  168. package/scripts/dev-delivery-native-run.mjs +177 -0
  169. package/scripts/dev-delivery-process-boundary.mjs +260 -0
  170. package/scripts/dev-delivery-proof.mjs +67 -2
  171. package/scripts/dev-delivery-provider-heartbeat.mjs +215 -0
  172. package/scripts/dev-delivery-source-proof-replay.mjs +153 -0
  173. package/scripts/dev-delivery-source-proof-reuse.mjs +13 -97
  174. package/scripts/dev-delivery-two-phase-resume.mjs +345 -0
  175. package/scripts/dev-delivery-two-phase.mjs +573 -0
  176. package/scripts/dev-delivery-warrant-options.mjs +266 -0
  177. package/scripts/dev-delivery-warrant-store.mjs +231 -0
  178. package/scripts/dev-delivery-warrant.mjs +232 -194
  179. package/scripts/dev-pr-auto-merge.mjs +1 -1
  180. package/scripts/dev-pr-delivery-warrant.mjs +11 -0
  181. package/scripts/dev-qualification-patrol.mjs +9 -9
  182. package/scripts/dispatch-artifact-signing-authority.mjs +1 -1
  183. package/scripts/generate-channel-promotion-workflow.mjs +2 -2
  184. package/scripts/generate-next-development-guidance.mjs +49 -0
  185. package/scripts/generate-release-candidate-passport.mjs +152 -0
  186. package/scripts/generate-site-bundle.mjs +69 -4
  187. package/scripts/init-repo.mjs +22 -4
  188. package/scripts/next-development-self-dogfood-harness.mjs +460 -0
  189. package/scripts/next-development-self-dogfood.mjs +597 -0
  190. package/scripts/next-development-transition.mjs +47 -0
  191. package/scripts/npm-publish-transaction.mjs +2 -2
  192. package/scripts/promotion-channel-router.mjs +4 -4
  193. package/scripts/release-candidate-anchor-provenance.mjs +99 -0
  194. package/scripts/release-tail.mjs +51 -3
  195. package/scripts/release-train-self-dogfood.mjs +94 -92
  196. package/scripts/resume-from-candidate-run.mjs +557 -30
  197. package/scripts/site-capability-metadata.mjs +41 -0
  198. package/scripts/stable-candidate-qualification.mjs +9 -10
  199. package/scripts/v4-consumer-policy.mjs +5 -5
  200. package/scripts/v4-publication-rehearsal-fixture.mjs +144 -0
  201. package/scripts/v4-tail-reseal-macos-rehearsal.mjs +134 -0
  202. package/scripts/v4-tail-reseal.mjs +416 -0
  203. package/templates/native-dev-delivery.yml +143 -0
@@ -13,6 +13,11 @@ export function cliCommandMeta(id) {
13
13
  const map = new Map(Object.entries({
14
14
  audit: { group: "release-passport-trust", purpose: "Inspect read-only publication authority audit commands." },
15
15
  architecture: { group: "governance-versioning", purpose: "Inspect and qualify the Buildchain v4 capability and state-machine architecture contract." },
16
+ "adopter-delivery": { group: "reusable-build", purpose: "Run public protocol-neutral adopter delivery, exact readback, N-1 bootstrap, and published archive checks." },
17
+ "adopter-delivery-run": { group: "reusable-build", purpose: "Run one exact public adopter driver and artifact-profile selection offline." },
18
+ "adopter-delivery-verify": { group: "reusable-build", purpose: "Recompute and verify exact adopter delivery readback without authority widening." },
19
+ "adopter-delivery-bootstrap": { group: "reusable-build", purpose: "Qualify exact v3 N-1 bootstrap lineage against the v4 adopter delivery substrate." },
20
+ "adopter-delivery-archive": { group: "reusable-build", purpose: "Load content-addressed public npm archive bytes and verify their exact identity and readback root." },
16
21
  "architecture-list": { group: "governance-versioning", purpose: "Generate the Agent-readable capability list from the validated v4 architecture manifest." },
17
22
  "architecture-qualify": { group: "governance-versioning", purpose: "Qualify an exact candidate against a distinct N-1 Git authority revision without candidate self-qualification." },
18
23
  "architecture-show": { group: "governance-versioning", purpose: "Generate one capability and its state-machine details from the validated v4 architecture manifest." },
@@ -39,6 +44,10 @@ export function cliCommandMeta(id) {
39
44
  "explain-artifact": { group: "release-passport-trust", purpose: "Explain artifact evidence for humans or agents." },
40
45
  "explain-release": { group: "release-passport-trust", purpose: "Explain a release passport for humans or agents." },
41
46
  facts: { group: "observability-diagnostics", purpose: "Inspect build facts command families." },
47
+ "facts-compatibility-project": { group: "governance-versioning", purpose: "Project legacy digest and proof views from the current Cut-bound compatibility Fact registry." },
48
+ "facts-compatibility-query": { group: "governance-versioning", purpose: "Verify one explicit directional compatibility path and emit a rooted receipt." },
49
+ "facts-compatibility-query-template": { group: "governance-versioning", purpose: "Create a direct query template for one current compatibility Fact." },
50
+ "facts-compatibility-verify": { group: "governance-versioning", purpose: "Verify the exact append-only compatibility Fact registry and current Cut." },
42
51
  help: { group: "getting-started", purpose: "Print Buildchain CLI help." },
43
52
  homebrew: { group: "distribution-indexes", purpose: "Inspect Homebrew distribution-index command families." },
44
53
  "homebrew-check": { group: "distribution-indexes", purpose: "Verify Homebrew tap metadata against upstream release passport evidence." },
@@ -92,6 +101,17 @@ export function cliCommandMeta(id) {
92
101
  "kfd-upstream-roles": { group: "kfd-trust", purpose: "List Buildchain-managed KFD upstream role values and inference policy." },
93
102
  lifecycle: { group: "reusable-build", purpose: "Run configured lifecycle commands and write deterministic artifact manifests." },
94
103
  dev: { group: "governance-versioning", purpose: "Inspect protected development-channel governance command families." },
104
+ "dev-authority-admit-merge-group": { group: "governance-versioning", purpose: "Verify that one exact candidate holds the exclusive Landing Warrant before merge_group admission." },
105
+ "dev-authority-complete-qualification": { group: "governance-versioning", purpose: "Bind qualification evidence and release one bounded Qualification Lease without granting landing authority." },
106
+ "dev-authority-heartbeat-landing": { group: "governance-versioning", purpose: "Extend the exact fenced Landing Warrant while final landing work remains live." },
107
+ "dev-authority-heartbeat-qualification": { group: "governance-versioning", purpose: "Extend one exact fenced Qualification Lease while qualification work remains live." },
108
+ "dev-authority-lease-landing": { group: "governance-versioning", purpose: "Issue or retain the single exclusive Landing Warrant for a qualified candidate." },
109
+ "dev-authority-lease-qualification": { group: "governance-versioning", purpose: "Issue one qualification-only lease within the configured bounded lane count." },
110
+ "dev-authority-migrate": { group: "governance-versioning", purpose: "Migrate one exact v1 Warrant state into v2 without rewriting candidate or fencing evidence." },
111
+ "dev-authority-observe": { group: "governance-versioning", purpose: "Read bounded Qualification Leases and the exclusive Landing Warrant without mutating authority." },
112
+ "dev-authority-recover": { group: "governance-versioning", purpose: "Recover expired qualification or Landing authority and emit one rooted wake instruction." },
113
+ "dev-authority-settle": { group: "governance-versioning", purpose: "Settle terminal candidate evidence idempotently and release held qualification or Landing authority immediately." },
114
+ "dev-authority-submit": { group: "governance-versioning", purpose: "Submit an exact candidate to the opt-in bounded-qualification authority state." },
95
115
  "dev-proof-classify": { group: "governance-versioning", purpose: "Classify source-qualified candidate changes against a current integration base." },
96
116
  "dev-proof-integration": { group: "governance-versioning", purpose: "Seal final exact integration delivery proof for a warranted candidate." },
97
117
  "dev-proof-replay": { group: "governance-versioning", purpose: "Replay source qualification against a Project Cut without rewriting candidate source." },
@@ -128,6 +148,7 @@ export function cliCommandMeta(id) {
128
148
  "paper-status": { group: "reusable-build", purpose: "Report explicit evidence for every paper lifecycle state without unsupported inference." },
129
149
  "paper-work-start": { group: "getting-started", purpose: "Create a safe Paper work branch from the exact canonical remote development SHA." },
130
150
  "paper-work-submit": { group: "governance-versioning", purpose: "Push a Paper work branch without force and open or reuse the correctly targeted development PR." },
151
+ "next-development": { group: "governance-versioning", purpose: "Plan or apply one rooted declared-path next-development version transition without release or ref authority." },
131
152
  "publish-source": { group: "release-passport-trust", purpose: "Create, inspect, or verify publish-gate source-lock refs." },
132
153
  "publication-artifact": { group: "reusable-build", purpose: "Generate publication artifact manifests, passports, and source bundles for paper/report repositories." },
133
154
  "publication-artifact-manifest": { group: "reusable-build", purpose: "Write a site-consumable publication artifact manifest, publication passport, and source bundle." },
@@ -140,6 +161,7 @@ export function cliCommandMeta(id) {
140
161
  "release-governance": { group: "governance-versioning", purpose: "Reconcile a managed branch's Buildchain aggregate check to an already-tested pull request SHA." },
141
162
  "release-propagation": { group: "site-and-propagation", purpose: "Route exact Paper, KFD, Buildchain, or Core Site updates through one resumable propagation Work." },
142
163
  "release-tail": { group: "release-passport-trust", purpose: "Plan, initialize, resume, and verify one declarative provider-owned release-tail transaction." },
164
+ "tail-reseal": { group: "release-passport-trust", purpose: "Plan, admit, byte-verify, and seal one exact retained v4 Alpha candidate signing-finalization tail." },
143
165
  "release-transaction": { group: "release-passport-trust", purpose: "Inspect, recover, finalize, or abort durable release transactions." },
144
166
  sample: { group: "observability-diagnostics", purpose: "Inspect sampler command families." },
145
167
  "sample-process-tree": { group: "observability-diagnostics", purpose: "Sample process-tree diagnostics for a wrapped command." },
@@ -173,7 +195,9 @@ export function nodeApiMeta(exportName) {
173
195
  "./homebrew": { group: "distribution-indexes", summary: "Homebrew tap fact collection, Formula rendering, update, and check APIs." },
174
196
  "./build-facts": { group: "observability-diagnostics", summary: "Git source, version, module output, product artifact, and legacy Kungfu build fact APIs." },
175
197
  "./candidate-timeline": { group: "observability-diagnostics", summary: "Source-bound candidate event normalization, per-attempt critical-path-safe aggregation, and compact reporting APIs." },
198
+ "./ci-lane-change-budget": { group: "governance-versioning", summary: "Exact-baseline CI lane admission requiring authority, trigger, concurrency, runner, cancellation, and merge-critical SLO budgets." },
176
199
  "./channel-candidate": { group: "governance-versioning", summary: "Exact-source channel candidate decisions, same-SHA workflow evidence validation, and deterministic source-lock reference APIs." },
200
+ "./dev-delivery-authority": { group: "governance-versioning", summary: "Opt-in bounded Qualification Lease, exclusive Landing Warrant, provider-attempt admission and heartbeat readback, terminal sealing, and expired-Landing verification APIs." },
177
201
  "./dev-delivery-warrant": { group: "governance-versioning", summary: "Durable fair Dev Delivery Warrant queue, fenced lease, and split source and integration proof APIs." },
178
202
  "./cache-evidence": { group: "observability-diagnostics", summary: "Content-addressed cache operation receipts and source/platform-bound evidence-set verification APIs." },
179
203
  "./diagnostics": { group: "observability-diagnostics", summary: "Native diagnostics collection, summarization, cache, compiler, and process-sampler APIs." },
@@ -203,8 +227,24 @@ export function nodeApiMeta(exportName) {
203
227
  "./release-candidate": { group: "reusable-build", summary: "PR-stage release-candidate artifact, passport, and promote-only resolver APIs." },
204
228
  "./v4-floating-consumer-policy": { group: "governance-versioning", summary: "Semantic floating-selector admission, dual-lock receipt, and independent v4 consumer certification APIs." },
205
229
  "./v4-runtime-ref-resume-authority": { group: "release-passport-trust", summary: "Transient exact-runtime authorization, persisted-selector rejection, fresh-attempt Stage Capsule reuse, and A+B Passport lineage APIs." },
230
+ "./v4-tail-reseal": { group: "release-passport-trust", summary: "Effect-pure retained Stage Capsule validation and explicit Warrant-, credential-, and release-tail-fenced macOS reseal planning APIs." },
231
+ "./v4-tail-reseal-receipt": { group: "release-passport-trust", summary: "Four-platform byte readback, standard candidate Passport binding, and terminal v4 tail-reseal receipt APIs." },
232
+ "./v4-publication-rehearsal": { group: "release-passport-trust", summary: "Content-addressed v4 publication rehearsal capsules, shared production release-tail execution, replay, provider observation, and fail-closed verification APIs." },
233
+ "./adopter-delivery-gate": { group: "reusable-build", summary: "Protocol-neutral adopter delivery gate, driver interface, artifact profiles, and canonical result APIs." },
234
+ "./kfd-adopter-category-driver": { group: "kfd-trust", summary: "Published KFD adopter-category driver and exact package-cut verification APIs." },
235
+ "./buildchain-delivery-infrastructure": { group: "reusable-build", summary: "Public delivery-infrastructure instance creation and KFD verification APIs." },
236
+ "./buildchain-delivery-bootstrap": { group: "reusable-build", summary: "Protected, published N-1 Buildchain delivery bootstrap qualification APIs." },
237
+ "./buildchain-delivery-self-dogfood": { group: "reusable-build", summary: "Public archive-backed Buildchain delivery-infrastructure self-dogfood APIs." },
238
+ "./published-delivery-authority": { group: "release-passport-trust", summary: "Content-addressed public Buildchain and KFD archive loading and identity verification APIs." },
239
+ "./legacy-kfd-adopter-driver": { group: "kfd-trust", summary: "One-way legacy KFD support-matrix adapter driver APIs." },
240
+ "./adopter-delivery-passport": { group: "release-passport-trust", summary: "Non-authoritative adopter delivery Release Passport binding and substitution checks." },
241
+ "./adopter-delivery-vectors": { group: "reusable-build", summary: "Rooted public adopter delivery conformance vector suite APIs." },
242
+ "./v4-adopter-delivery": { group: "reusable-build", summary: "Public v4 adopter delivery runtime, exact readback, N-1 lineage, and published archive verification APIs." },
206
243
  "./release-candidate-recovery": { group: "release-passport-trust", summary: "Fail-closed verification and immutable receipts for reusing a successful sealed candidate run without rebuilding product payloads." },
207
244
  "./release-train": { group: "governance-versioning", summary: "Frozen Release Cut identity, rooted Release Train transitions, Dev observations, supersession, replay, and legacy read compatibility APIs." },
245
+ "./next-development-transition": { group: "governance-versioning", summary: "Provider-neutral completed-Alpha preservation and rooted next-development state, version-model, idempotency, and local materialization APIs." },
246
+ "./next-development-controller": { group: "governance-versioning", summary: "Durable completed-Alpha child scheduling, fresh-runner checkpoint resume, latest protected-Dev reconciliation, and exact version-root readback APIs." },
247
+ "./next-development-projection": { group: "governance-versioning", summary: "Canonical generated config, Agent, workflow-header, and manual projections for the next-development transition contract." },
208
248
  "./stable-candidate-ledger": { group: "governance-versioning", summary: "Immutable alpha candidate ledger, qualification, revocation, selection, and exact stable source-lock APIs." },
209
249
  "./release-propagation": { group: "site-and-propagation", summary: "Release propagation graph, plan, and exact upstream lock APIs." },
210
250
  "./release-activation-transaction": { group: "release-passport-trust", summary: "Ordered cross-repository activation, exact receipt-set binding, retry, abort, rollback, and shadow-rehearsal APIs." },
@@ -213,6 +253,7 @@ export function nodeApiMeta(exportName) {
213
253
  "./release-tail-compatibility": { group: "release-passport-trust", summary: "Bounded v3 release-hook compatibility diagnostics that reject new executable release-tail inputs." },
214
254
  "./release-line-bootstrap": { group: "governance-versioning", summary: "Semver release-line bootstrap planning and version-state APIs." },
215
255
  "./buildchain-contract": { group: "governance-versioning", summary: "Runtime contract world and compatibility digest APIs for floating-ref drift checks." },
256
+ "./compatibility-fact-authority": { group: "governance-versioning", summary: "Directional Cut-bound compatibility Fact, lifecycle, explicit path receipt, legacy projection, and Release Passport evidence APIs." },
216
257
  "./controller-evidence": { group: "reusable-build", summary: "Project-independent controller descriptors, source/runtime-bound plans, receipts, aggregates, and validation APIs." },
217
258
  "./surface-manifest": { group: "site-and-propagation", summary: "Surface manifest timestamp and reproducibility policy APIs." },
218
259
  "./issue-reporting": { group: "observability-diagnostics", summary: "Buildchain-owned issue reporting API for workflow friction feedback." },
@@ -146,9 +146,7 @@ export async function runStableCandidateQualification(optionsInput = {}, clientI
146
146
  const options = normalizeStableCandidateQualificationOptions(optionsInput);
147
147
  const client = clientInput || createGitHubQualificationClient({ token: process.env.GITHUB_TOKEN });
148
148
  const candidate = await client.resolveExactAlpha(options.repository, options.candidateSha);
149
- if (!candidate) {
150
- return { schemaVersion: 1, contract: "kungfu-buildchain-stable-candidate-qualification", status: "skipped", reason: "exact-alpha-release-not-found", candidateSha: options.candidateSha };
151
- }
149
+ if (!candidate) return { schemaVersion: 1, contract: "kungfu-buildchain-stable-candidate-qualification", status: "skipped", reason: "exact-alpha-release-not-found", candidateSha: options.candidateSha };
152
150
 
153
151
  const build = await ensureWorkflowEvidence({
154
152
  client,
@@ -156,12 +154,12 @@ export async function runStableCandidateQualification(optionsInput = {}, clientI
156
154
  workflowFile: options.buildWorkflowFile,
157
155
  workflowName: options.buildWorkflowName,
158
156
  ref: candidate.tag,
159
- headSha: options.candidateSha,
157
+ headSha: candidate.sha,
160
158
  runName: "",
161
159
  options,
162
160
  });
163
161
 
164
- let status = await client.findCommitStatus(options.repository, options.candidateSha, options.canaryStatusContext);
162
+ let status = await client.findCommitStatus(options.repository, candidate.sha, options.canaryStatusContext);
165
163
  let canary = { state: status?.state === "success" ? "existing" : "pending", run: undefined };
166
164
  if (status?.state !== "success") {
167
165
  const canaryRef = options.canaryRef || await client.defaultBranch(options.canaryRepository);
@@ -177,15 +175,15 @@ export async function runStableCandidateQualification(optionsInput = {}, clientI
177
175
  workflowFile: options.canaryWorkflowFile,
178
176
  workflowName: options.canaryWorkflowName,
179
177
  ref: canaryRef,
180
- headSha: options.candidateSha,
181
- runName: `${options.canaryWorkflowName} / ${options.candidateSha}`,
178
+ headSha: candidate.sha,
179
+ runName: `${options.canaryWorkflowName} / ${candidate.sha}`,
182
180
  sourceSha: options.canarySha,
183
181
  options,
184
182
  });
185
183
  if (!options.dryRun) {
186
184
  status = await client.createCommitStatus({
187
185
  repository: options.repository,
188
- sha: options.candidateSha,
186
+ sha: candidate.sha,
189
187
  context: options.canaryStatusContext,
190
188
  targetUrl: canary.run.html_url,
191
189
  description: `No-apply ${options.canaryRepository} canary passed`,
@@ -256,11 +254,12 @@ export function createGitHubQualificationClient({
256
254
  }
257
255
  return {
258
256
  async resolveExactAlpha(repositoryName, candidateSha) {
259
- const releases = await api(`/repos/${repositoryName}/releases?per_page=100`);
257
+ const releases = (await api(`/repos/${repositoryName}/releases?per_page=100`)).sort((left, right) => right.tag_name.localeCompare(left.tag_name, "en", { numeric: true }));
260
258
  for (const release of releases) {
261
259
  if (!release.prerelease || !/^v\d+\.\d+\.\d+-alpha\.\d+$/.test(release.tag_name || "")) continue;
262
260
  const sha = await resolveTagSha(repositoryName, release.tag_name);
263
- if (sha === candidateSha) return { version: release.tag_name.slice(1), tag: release.tag_name, sha, releaseUrl: release.html_url };
261
+ if (sha !== candidateSha && !["ahead", "identical"].includes((await api(`/repos/${repositoryName}/compare/${sha}...${candidateSha}`)).status)) continue;
262
+ return { version: release.tag_name.slice(1), tag: release.tag_name, sha, releaseUrl: release.html_url };
264
263
  }
265
264
  return undefined;
266
265
  },
@@ -41,6 +41,9 @@ export function scanCommand(options = {}) {
41
41
  const root = path.resolve(
42
42
  options.root || env("BUILDCHAIN_CONSUMER_ROOT", process.cwd()),
43
43
  );
44
+ const invocationRoot = path.resolve(
45
+ options.invocationRoot || env("BUILDCHAIN_INVOCATION_SOURCE_ROOT", root),
46
+ );
44
47
  const output = path.resolve(
45
48
  root,
46
49
  options.output ||
@@ -54,6 +57,7 @@ export function scanCommand(options = {}) {
54
57
  );
55
58
  const result = scanV4FloatingConsumerPolicy({
56
59
  root,
60
+ invocationRoot,
57
61
  repository: options.repository || env("GITHUB_REPOSITORY"),
58
62
  sourceSha: options.sourceSha || env("GITHUB_SHA"),
59
63
  invokedWorkflow:
@@ -139,10 +143,6 @@ export function certifyCommand(options = {}) {
139
143
  stableLockPath,
140
144
  alphaLockPath,
141
145
  });
142
- const selectedLock =
143
- receipt?.invocation?.visibleSelector === "v4-alpha"
144
- ? readJson(path.join(callerRoot, alphaLockPath))
145
- : readJson(path.join(callerRoot, stableLockPath));
146
146
  const authorityScan = scanV4FloatingConsumerPolicy({
147
147
  root: callerRoot,
148
148
  repository,
@@ -150,7 +150,7 @@ export function certifyCommand(options = {}) {
150
150
  invokedWorkflow,
151
151
  invocationSourcePath: receipt?.invocation?.sourcePath,
152
152
  expectedInvocationChannel: receipt?.invocation?.channel,
153
- resolvedWorkflowSha: selectedLock.buildchain?.resolvedSha,
153
+ resolvedWorkflowSha: receipt?.invocation?.resolvedWorkflowSha,
154
154
  resolvedRuntimeSha,
155
155
  stableLockPath,
156
156
  alphaLockPath,
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env node
2
+
3
+ import crypto from "node:crypto";
4
+ import fs from "node:fs";
5
+ import path from "node:path";
6
+ import { fileURLToPath } from "node:url";
7
+
8
+ import {
9
+ createV4PublicationRehearsalCapsule,
10
+ executeV4PublicationRehearsal,
11
+ } from "../packages/core/v4-publication-rehearsal.js";
12
+
13
+ const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
14
+ const fixtureRoot = path.join(
15
+ root,
16
+ "contracts/fixtures/v4-publication-rehearsal-v1",
17
+ );
18
+ const candidateRoot = path.join(fixtureRoot, "candidate");
19
+
20
+ function digest(bytes) {
21
+ return `sha256:${crypto.createHash("sha256").update(bytes).digest("hex")}`;
22
+ }
23
+
24
+ function candidateFiles() {
25
+ const roles = {
26
+ "artifacts/product.bin": "installable-product",
27
+ "config/buildchain.toml": "buildchain-config",
28
+ "documents/release-activation.json": "release-activation-document",
29
+ "documents/signed-channel.json": "signed-channel-document",
30
+ "evidence/qualification.json": "qualification-evidence",
31
+ "manifests/candidate.json": "candidate-manifest",
32
+ "manifests/release-passport.json": "release-passport",
33
+ };
34
+ return Object.keys(roles)
35
+ .map((relative) => {
36
+ const bytes = fs.readFileSync(path.join(candidateRoot, relative));
37
+ return {
38
+ role: roles[relative],
39
+ path: relative,
40
+ size: bytes.length,
41
+ root: digest(bytes),
42
+ };
43
+ })
44
+ .sort((left, right) =>
45
+ Buffer.from(left.path).compare(Buffer.from(right.path)),
46
+ );
47
+ }
48
+
49
+ async function generated() {
50
+ const declaration = JSON.parse(
51
+ fs.readFileSync(
52
+ path.join(
53
+ root,
54
+ "contracts/fixtures/release-tail-capabilities-v1/kungfu-alpha.json",
55
+ ),
56
+ "utf8",
57
+ ),
58
+ );
59
+ const files = candidateFiles();
60
+ const binding = (relative) => ({
61
+ path: relative,
62
+ root: files.find((entry) => entry.path === relative).root,
63
+ });
64
+ const capsule = createV4PublicationRehearsalCapsule({
65
+ source: {
66
+ repository: "kungfu-systems/buildchain",
67
+ revision: "bc12cd0ff18a7e1d918777ea093c169349952d34",
68
+ },
69
+ declaration,
70
+ manifest: binding("manifests/candidate.json"),
71
+ config: binding("config/buildchain.toml"),
72
+ providerBindings: {
73
+ schema: "kungfu.buildchain.release-tail.provider-bindings/v1",
74
+ artifacts: {
75
+ "installable-product": {
76
+ path: "artifacts/product.bin",
77
+ name: "product.bin",
78
+ },
79
+ "release-passport": {
80
+ path: "manifests/release-passport.json",
81
+ name: "release-passport.json",
82
+ },
83
+ },
84
+ documents: {
85
+ "release.activate": {
86
+ path: "documents/release-activation.json",
87
+ method: "PUT",
88
+ },
89
+ "signed-channel.commit": {
90
+ path: "documents/signed-channel.json",
91
+ method: "PUT",
92
+ },
93
+ },
94
+ evidence: {
95
+ inputs: ["evidence/qualification.json"],
96
+ output: "generated/released-evidence.json",
97
+ },
98
+ },
99
+ files,
100
+ });
101
+ const vectors = [];
102
+ for (const platform of ["linux", "macos", "windows"]) {
103
+ const result = await executeV4PublicationRehearsal({
104
+ capsule,
105
+ candidateRoot,
106
+ mode: "simulate",
107
+ });
108
+ vectors.push({
109
+ platform,
110
+ capsuleRoot: result.evidence.capsuleRoot,
111
+ transactionRoot: result.evidence.transactionRoot,
112
+ stateRoot: result.evidence.stateRoot,
113
+ evidenceRoot: result.evidence.evidenceRoot,
114
+ });
115
+ }
116
+ return {
117
+ capsule,
118
+ vectors: {
119
+ schema: "buildchain-v4-publication-rehearsal-offline-vectors/v1",
120
+ vectors,
121
+ vectorRoot: digest(JSON.stringify(vectors)),
122
+ },
123
+ };
124
+ }
125
+
126
+ const { capsule, vectors } = await generated();
127
+ const outputs = new Map([
128
+ [path.join(fixtureRoot, "capsule.json"), capsule],
129
+ [path.join(fixtureRoot, "offline-vectors.json"), vectors],
130
+ ]);
131
+ const check = process.argv.includes("--check");
132
+ for (const [file, value] of outputs) {
133
+ const bytes = `${JSON.stringify(value, null, 2)}\n`;
134
+ if (check) {
135
+ if (!fs.existsSync(file) || fs.readFileSync(file, "utf8") !== bytes)
136
+ throw new Error(`${path.relative(root, file)} is stale`);
137
+ } else {
138
+ fs.mkdirSync(path.dirname(file), { recursive: true });
139
+ fs.writeFileSync(file, bytes);
140
+ }
141
+ }
142
+ process.stdout.write(
143
+ `${JSON.stringify({ capsuleRoot: capsule.capsuleRoot, vectorRoot: vectors.vectorRoot })}\n`,
144
+ );
@@ -0,0 +1,134 @@
1
+ #!/usr/bin/env node
2
+
3
+ import crypto from "node:crypto";
4
+ import fs from "node:fs";
5
+ import os from "node:os";
6
+ import path from "node:path";
7
+ import { pathToFileURL } from "node:url";
8
+
9
+ import { v4ContentRoot } from "../packages/core/v4-canonical-contracts.js";
10
+ import { verifyV4TailResealPlatform } from "./v4-tail-reseal.mjs";
11
+
12
+ function flag(args, name, fallback = "") {
13
+ const index = args.indexOf(`--${name}`);
14
+ return index < 0 ? fallback : String(args[index + 1] || "");
15
+ }
16
+
17
+ function fileRoot(file) {
18
+ return `sha256:${crypto
19
+ .createHash("sha256")
20
+ .update(fs.readFileSync(file))
21
+ .digest("hex")}`;
22
+ }
23
+
24
+ function writeCandidate(root, request, content) {
25
+ const platform = request.platforms.find(({ id }) => id === "macos-arm64");
26
+ const payload = path.join(root, "product/release/macos-arm64/payload.bin");
27
+ fs.mkdirSync(path.dirname(payload), { recursive: true });
28
+ fs.writeFileSync(payload, content);
29
+ const relative = path.relative(root, payload);
30
+ const file = {
31
+ path: relative,
32
+ size: fs.statSync(payload).size,
33
+ digest: fileRoot(payload),
34
+ };
35
+ const manifest = {
36
+ contract: "kungfu-buildchain-artifact",
37
+ artifactName: platform.artifactName,
38
+ git: {
39
+ repository: request.repository,
40
+ sha: request.source.sha,
41
+ treeSha: request.source.treeSha,
42
+ runId: String(request.source.runId),
43
+ runAttempt: String(request.source.runAttempt),
44
+ },
45
+ platform: { id: platform.id, name: platform.name },
46
+ files: [
47
+ {
48
+ path: relative,
49
+ size: file.size,
50
+ sha256: file.digest.replace(/^sha256:/u, ""),
51
+ },
52
+ ],
53
+ summary: { fileCount: 1, totalBytes: file.size },
54
+ };
55
+ const manifestPath = path.join(root, "evidence/macos-arm64/manifest.json");
56
+ fs.mkdirSync(path.dirname(manifestPath), { recursive: true });
57
+ fs.writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`);
58
+ return {
59
+ artifactRoot: v4ContentRoot("tail-reseal-artifact-files", [file]),
60
+ manifestRoot: fileRoot(manifestPath),
61
+ };
62
+ }
63
+
64
+ export function rehearseV4TailResealMacos({
65
+ fixturePath = "contracts/fixtures/v4-tail-reseal-v1/valid.json",
66
+ outputPath = "",
67
+ } = {}) {
68
+ const request = JSON.parse(
69
+ fs.readFileSync(path.resolve(fixturePath), "utf8"),
70
+ );
71
+ const workRoot = fs.mkdtempSync(
72
+ path.join(os.tmpdir(), "buildchain-v4-tail-macos-"),
73
+ );
74
+ try {
75
+ const retainedRoots = writeCandidate(workRoot, request, "unsigned");
76
+ const platform = request.platforms.find(({ id }) => id === "macos-arm64");
77
+ Object.assign(platform, retainedRoots);
78
+ const retained = verifyV4TailResealPlatform({
79
+ request,
80
+ platformId: "macos-arm64",
81
+ artifactRoot: workRoot,
82
+ mode: "retained",
83
+ });
84
+ writeCandidate(workRoot, request, "signed-and-notarized");
85
+ const resealed = verifyV4TailResealPlatform({
86
+ request,
87
+ platformId: "macos-arm64",
88
+ artifactRoot: workRoot,
89
+ mode: "resealed",
90
+ providerReadbackRoot: request.signing.providerReadbackRoot,
91
+ });
92
+ const payload = {
93
+ schema: "kungfu-buildchain-v4-tail-reseal-macos-rehearsal/v1",
94
+ platformId: "macos-arm64",
95
+ retained,
96
+ resealed,
97
+ buildStagesExecuted: 0,
98
+ signingFinalizationExecutions: 1,
99
+ providerReadbackRoot: request.signing.providerReadbackRoot,
100
+ };
101
+ const evidence = {
102
+ ...payload,
103
+ evidenceRoot: v4ContentRoot("tail-reseal-admission", payload),
104
+ };
105
+ if (outputPath) {
106
+ const output = path.resolve(outputPath);
107
+ fs.mkdirSync(path.dirname(output), { recursive: true });
108
+ fs.writeFileSync(output, `${JSON.stringify(evidence, null, 2)}\n`);
109
+ }
110
+ return evidence;
111
+ } finally {
112
+ fs.rmSync(workRoot, { recursive: true, force: true });
113
+ }
114
+ }
115
+
116
+ if (
117
+ process.argv[1] &&
118
+ import.meta.url === pathToFileURL(process.argv[1]).href
119
+ ) {
120
+ try {
121
+ const evidence = rehearseV4TailResealMacos({
122
+ fixturePath: flag(
123
+ process.argv.slice(2),
124
+ "fixture",
125
+ "contracts/fixtures/v4-tail-reseal-v1/valid.json",
126
+ ),
127
+ outputPath: flag(process.argv.slice(2), "output"),
128
+ });
129
+ process.stdout.write(`${JSON.stringify(evidence, null, 2)}\n`);
130
+ } catch (error) {
131
+ console.error(`v4-tail-reseal-macos-rehearsal: ${error.message}`);
132
+ process.exitCode = 1;
133
+ }
134
+ }