@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
@@ -0,0 +1,287 @@
1
+ import {
2
+ NEXT_DEVELOPMENT_ADR,
3
+ NEXT_DEVELOPMENT_INVARIANT,
4
+ NEXT_DEVELOPMENT_STATES,
5
+ NEXT_DEVELOPMENT_TRANSITION_CONTRACT,
6
+ NEXT_DEVELOPMENT_VERSION_MODELS,
7
+ } from "./next-development-transition.js";
8
+ import { NEXT_DEVELOPMENT_CONTROLLER_CONTRACT } from "./next-development-controller.js";
9
+
10
+ export const NEXT_DEVELOPMENT_AGENT_SECTION_START =
11
+ "<!-- buildchain:next-development:v1:start -->";
12
+ export const NEXT_DEVELOPMENT_AGENT_SECTION_END =
13
+ "<!-- buildchain:next-development:v1:end -->";
14
+ export const NEXT_DEVELOPMENT_LOCAL_COMMAND =
15
+ "node scripts/next-development-transition.mjs materialize --cwd . --input <request.json>";
16
+
17
+ export function nextDevelopmentWorkflowHeader() {
18
+ return `# Next-development contract: ${NEXT_DEVELOPMENT_TRANSITION_CONTRACT}
19
+ # Durable controller: ${NEXT_DEVELOPMENT_CONTROLLER_CONTRACT}
20
+ # ${NEXT_DEVELOPMENT_INVARIANT}
21
+ `;
22
+ }
23
+
24
+ export function nextDevelopmentToml() {
25
+ return `[next_development]
26
+ contract = ${JSON.stringify(NEXT_DEVELOPMENT_TRANSITION_CONTRACT)}
27
+ controller_contract = ${JSON.stringify(NEXT_DEVELOPMENT_CONTROLLER_CONTRACT)}
28
+ adr = ${JSON.stringify(NEXT_DEVELOPMENT_ADR)}
29
+ invariant = ${JSON.stringify(NEXT_DEVELOPMENT_INVARIANT)}
30
+ states = ${JSON.stringify(NEXT_DEVELOPMENT_STATES)}
31
+ adapter = "scripts/next-development-transition.mjs"
32
+ adapter_environment = "BUILDCHAIN_VERSION"
33
+ source_paths = "version.files"
34
+ derived_paths = "version.derived_files"
35
+ read_only_paths = "version.manifest"
36
+ derivation_stage = "lifecycle.version-state"
37
+ verification_stage = "lifecycle.verify"
38
+ allowed_effects = ["declared-version-source-and-derived-files"]
39
+ public_side_effects = []
40
+ forbidden_ref_namespaces = ["refs/heads/alpha/", "refs/tags/"]
41
+ `;
42
+ }
43
+
44
+ export function appendNextDevelopmentToml(source) {
45
+ const current = String(source || "").trimEnd();
46
+ if (/^\[next_development\]$/mu.test(current)) {
47
+ throw new Error(
48
+ "buildchain config already contains a next_development table",
49
+ );
50
+ }
51
+ return `${current}\n\n${nextDevelopmentToml()}`;
52
+ }
53
+
54
+ export function projectNextDevelopmentToml(source) {
55
+ const current = String(source || "");
56
+ const start = current.search(/^\[next_development\]\s*$/mu);
57
+ if (start === -1) return appendNextDevelopmentToml(current);
58
+ const remainder = current.slice(start);
59
+ const firstNewline = remainder.indexOf("\n");
60
+ const nextTable = remainder
61
+ .slice(firstNewline + 1)
62
+ .search(/^\[[^\n]+\]\s*$/mu);
63
+ const end =
64
+ nextTable === -1 ? current.length : start + firstNewline + 1 + nextTable;
65
+ const prefix = current.slice(0, start).trimEnd();
66
+ const suffix = current.slice(end).trimStart();
67
+ return `${prefix}\n\n${nextDevelopmentToml()}${suffix ? `\n${suffix}` : ""}`;
68
+ }
69
+
70
+ export function assertNextDevelopmentConfig(config) {
71
+ const section = config?.next_development;
72
+ if (!section || typeof section !== "object" || Array.isArray(section)) {
73
+ throw new Error("next_development table is missing");
74
+ }
75
+ const expected = {
76
+ contract: NEXT_DEVELOPMENT_TRANSITION_CONTRACT,
77
+ controller_contract: NEXT_DEVELOPMENT_CONTROLLER_CONTRACT,
78
+ adr: NEXT_DEVELOPMENT_ADR,
79
+ invariant: NEXT_DEVELOPMENT_INVARIANT,
80
+ states: [...NEXT_DEVELOPMENT_STATES],
81
+ adapter: "scripts/next-development-transition.mjs",
82
+ adapter_environment: "BUILDCHAIN_VERSION",
83
+ source_paths: "version.files",
84
+ derived_paths: "version.derived_files",
85
+ read_only_paths: "version.manifest",
86
+ derivation_stage: "lifecycle.version-state",
87
+ verification_stage: "lifecycle.verify",
88
+ allowed_effects: ["declared-version-source-and-derived-files"],
89
+ public_side_effects: [],
90
+ forbidden_ref_namespaces: ["refs/heads/alpha/", "refs/tags/"],
91
+ };
92
+ if (JSON.stringify(section) !== JSON.stringify(expected)) {
93
+ throw new Error("next_development projection is stale or unsupported");
94
+ }
95
+ return structuredClone(section);
96
+ }
97
+
98
+ export function nextDevelopmentAgentInstructions() {
99
+ return `${NEXT_DEVELOPMENT_AGENT_SECTION_START}
100
+ ## Next-development transition (required after Alpha)
101
+
102
+ Follow \`${NEXT_DEVELOPMENT_ADR}\` and
103
+ \`${NEXT_DEVELOPMENT_TRANSITION_CONTRACT}\`. ${NEXT_DEVELOPMENT_INVARIANT}
104
+
105
+ Use only \`semver/auto\` or \`anchored/manual\`. Record \`planned\`,
106
+ \`waiting-anchor\`, \`materialized\`, \`pr-pending\`, \`merged\`, and \`verified\`
107
+ without changing the completed Alpha outcome. During preparation, never move
108
+ an Alpha branch or tag and never write outside declared source and derived
109
+ version paths. Treat the anchor manifest as read-only.
110
+
111
+ The durable controller creates one child keyed by the completed-Alpha root.
112
+ Every runner must reuse that child and its compare-and-swap checkpoints. Build
113
+ from the latest protected Dev SHA, supersede stale material before opening the
114
+ version PR, and do not record \`verified\` until protected Dev readback matches
115
+ the target version plus every declared source and derived root.
116
+
117
+ Plan locally before opting into declared-path writes:
118
+
119
+ \`\`\`sh
120
+ ${NEXT_DEVELOPMENT_LOCAL_COMMAND}
121
+ \`\`\`
122
+
123
+ Add \`--write\` only after reviewing the rooted plan. Anchored/manual consumers
124
+ must materialize and root the declared anchor manifest first.
125
+ Repository transaction adapters pass the exact target as
126
+ \`BUILDCHAIN_VERSION\`, run \`lifecycle.version-state\` when derived files are
127
+ declared, then run \`lifecycle.verify\`. The reference writer fails closed for
128
+ derived-file consumers; it does not execute arbitrary consumer commands.
129
+ ${NEXT_DEVELOPMENT_AGENT_SECTION_END}`;
130
+ }
131
+
132
+ export function mergeNextDevelopmentAgentInstructions(current = "") {
133
+ const source = String(current || "");
134
+ const section = nextDevelopmentAgentInstructions();
135
+ const start = source.indexOf(NEXT_DEVELOPMENT_AGENT_SECTION_START);
136
+ const end = source.indexOf(NEXT_DEVELOPMENT_AGENT_SECTION_END);
137
+ if ((start === -1) !== (end === -1)) {
138
+ throw new Error(
139
+ "AGENTS.md has an incomplete Buildchain next-development section",
140
+ );
141
+ }
142
+ if (start === -1) {
143
+ return source.trim()
144
+ ? `${source.trimEnd()}\n\n${section}\n`
145
+ : `# AGENTS.md\n\n${section}\n`;
146
+ }
147
+ if (
148
+ source.indexOf(NEXT_DEVELOPMENT_AGENT_SECTION_START, start + 1) !== -1 ||
149
+ source.indexOf(NEXT_DEVELOPMENT_AGENT_SECTION_END, end + 1) !== -1 ||
150
+ end < start
151
+ ) {
152
+ throw new Error(
153
+ "AGENTS.md has ambiguous Buildchain next-development sections",
154
+ );
155
+ }
156
+ return `${source.slice(0, start)}${section}${source.slice(
157
+ end + NEXT_DEVELOPMENT_AGENT_SECTION_END.length,
158
+ )}`;
159
+ }
160
+
161
+ export function nextDevelopmentManual() {
162
+ const states = NEXT_DEVELOPMENT_STATES.map((state) => `\`${state}\``).join(
163
+ ", ",
164
+ );
165
+ const models = NEXT_DEVELOPMENT_VERSION_MODELS.map(
166
+ (model) => `\`${model.strategy}/${model.next}\``,
167
+ ).join(" and ");
168
+ return `---
169
+ status: preview
170
+ period: ongoing
171
+ theme: next-development-transition
172
+ doc_type: generated-contract-guidance
173
+ source_level: generated-from-node-contract
174
+ confidence: high
175
+ sensitivity: public
176
+ evidence_grade: A
177
+ review_state: self-reviewed
178
+ last_reviewed: 2026-08-11
179
+ ---
180
+
181
+ # Next-development Transition
182
+
183
+ This document is generated from
184
+ \`packages/core/next-development-transition.js\` and
185
+ \`packages/core/next-development-controller.js\` and
186
+ \`packages/core/next-development-projection.js\`. Edit those sources and run
187
+ \`node scripts/generate-next-development-guidance.mjs\`; direct edits fail the
188
+ projection drift check.
189
+
190
+ ## Contract
191
+
192
+ - Contract: \`${NEXT_DEVELOPMENT_TRANSITION_CONTRACT}\`
193
+ - Durable controller: \`${NEXT_DEVELOPMENT_CONTROLLER_CONTRACT}\`
194
+ - ADR: [ADR 0002](../${NEXT_DEVELOPMENT_ADR})
195
+ - States: ${states}
196
+ - Legal version models: ${models}
197
+ - Invariant: ${NEXT_DEVELOPMENT_INVARIANT}
198
+
199
+ An Alpha publication is terminal success independently of this transition.
200
+ The idempotency key is a deterministic hash of the completed-Alpha root,
201
+ repository, legal model, and sorted declared paths. Incomplete Dev preparation
202
+ therefore cannot relabel Alpha N as failed, and replay cannot select a different
203
+ Alpha or path set.
204
+
205
+ ## Durable controller
206
+
207
+ \`scheduleNextDevelopmentController\` atomically creates one child for the
208
+ repository and completed-Alpha root. Identical wakes reuse it. The store
209
+ boundary requires read, create-if-absent, and compare-and-swap operations; the
210
+ controller root fences every checkpoint. Materialization uses an operation key
211
+ derived from the child, exact current protected Dev SHA, and reviewed target,
212
+ so a fresh runner can recover an already-created commit instead of rebuilding
213
+ the Alpha candidate or depending on the original runner workspace.
214
+
215
+ Before opening the protected version PR, the controller reads Dev again. A
216
+ moved head makes the prepared attempt \`superseded\`; the following wake
217
+ regenerates only declared version material from that latest SHA. After merge,
218
+ \`verified\` remains unreachable until protected Dev readback contains the
219
+ prepared commit and its target version, source roots, and derived roots exactly
220
+ match the checkpoint. The executor surface contains no Alpha publication, tag,
221
+ release, or package operation.
222
+
223
+ Alpha finalization no longer treats a non-fast-forward Dev update as successful
224
+ bookkeeping. It requires an exact checkout of the current Dev head, regenerates
225
+ the declared version lifecycle there, and uses a non-force merge or reusable
226
+ protected version PR. Candidate Patrol ignores both the generated preparation
227
+ commit and its two-parent integration commit. Before a later product candidate
228
+ can settle, Patrol reads every prepared version path at the candidate SHA and
229
+ requires the exact reserved blob identities; missing or stale state blocks
230
+ before a Release Cut or heavy candidate build.
231
+
232
+ ## Version models
233
+
234
+ \`semver/auto\` increments the Alpha sequence on the same semantic patch. For
235
+ example, completed \`1.4.2-alpha.7\` plans \`1.4.2-alpha.8\`. It must not accept an anchor or an
236
+ operator-selected target.
237
+
238
+ \`anchored/manual\` enters \`waiting-anchor\` until the caller provides both a
239
+ semantic target and the exact digest of the configured anchor manifest. The
240
+ adapter verifies the manifest already present in the checkout; it never invents
241
+ or edits upstream anchor facts. \`semver/manual\` and \`anchored/auto\` are
242
+ invalid.
243
+
244
+ ## Public self-dogfood and adoption
245
+
246
+ \`.github/workflows/v4-public-consumer-dogfood.yml\` remains the exact thin
247
+ consumer of the public \`v4-stage-capsule-canary.yml@v4-alpha\` contract. Its
248
+ declared \`lifecycle.verify\` runs \`pnpm run check\`, so the same public path
249
+ executes pure recovery tests that inject a transient durable-state write
250
+ failure, restore the adapter operation on a fresh runner, supersede stale work
251
+ when protected Dev moves, preserve \`pr-pending\` during protected-PR delay, and
252
+ prove both legal version models. No caller-local qualification job, action,
253
+ or private self-dogfood route is added.
254
+
255
+ The existing dual-channel self-consumer separately retains exact hosted
256
+ \`build.yml@v4-alpha\` and \`build.yml@v4\` runtime evidence. Consumers adopt
257
+ the proved contract through the floating v4 coordinates; exact resolved SHAs
258
+ remain audit evidence and never become durable selectors.
259
+
260
+ ## Local adapter
261
+
262
+ From a normal Buildchain checkout:
263
+
264
+ \`\`\`sh
265
+ ${NEXT_DEVELOPMENT_LOCAL_COMMAND}
266
+ \`\`\`
267
+
268
+ The command prints a rooted plan and performs no write by default. \`--write\`
269
+ may change only regular, non-symlink source files listed by \`version.files\`
270
+ in the loaded Buildchain config. The rooted adapter contract separately names
271
+ \`version.derived_files\` as allowed changes, \`version.manifest\` as read-only,
272
+ \`BUILDCHAIN_VERSION\` as the target input, \`lifecycle.version-state\` as the
273
+ derived-material stage, and \`lifecycle.verify\` as the truth gate. The
274
+ reference writer fails closed when derived files exist because transaction
275
+ execution is outside this contract slice. It performs no Git operation, ref
276
+ update, network request, provider call, lifecycle command, or anchor edit.
277
+
278
+ Preparing development state creates no tag, Release, public package, or
279
+ candidate. Those public effects remain outside the local adapter contract.
280
+
281
+ The request schema is
282
+ \`contracts/next-development-request-v1.schema.json\`; the durable record schema
283
+ is \`contracts/next-development-transition-v1.schema.json\`. Positive and
284
+ negative examples live under
285
+ \`contracts/fixtures/next-development-transition-v1/\`.
286
+ `;
287
+ }