@kungfu-tech/buildchain 3.0.9-alpha.2 → 3.0.9-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/contracts/fixtures/next-development-transition-v1/anchored-manual-waiting.json +47 -0
  2. package/contracts/fixtures/next-development-transition-v1/semver-auto-planned.json +47 -0
  3. package/contracts/fixtures/next-development-transition-v1/version-model-cases.json +40 -0
  4. package/contracts/next-development-request-v1.schema.json +66 -0
  5. package/contracts/next-development-transition-v1.schema.json +292 -0
  6. package/dist/site/buildchain-contract.json +4 -4
  7. package/dist/site/buildchain-site.json +89 -18
  8. package/dist/site/capability-registry.json +4 -3
  9. package/dist/site/kfd-claims.json +65 -5
  10. package/dist/site/kfd-upstream-aggregate.json +1 -1
  11. package/dist/site/manual-registry.json +19 -3
  12. package/dist/site/node-api-registry.json +1016 -36
  13. package/dist/site/page-registry.json +74 -11
  14. package/dist/site/public-surface-audit.json +7 -3
  15. package/dist/site/publication-registry.json +4 -4
  16. package/dist/site/release-provenance.json +3 -0
  17. package/dist/site/site-manifest.json +15 -7
  18. package/dist/site/workflow-registry.json +4 -4
  19. package/docs/MAP.md +2 -1
  20. package/docs/aws-us-elastic-runner-burst-plane.md +11 -3
  21. package/docs/dev-alpha-candidate-patrol.md +8 -0
  22. package/docs/next-development-transition.md +119 -0
  23. package/docs/node-api-reference.md +126 -73
  24. package/docs/versioning.md +1 -1
  25. package/package.json +8 -3
  26. package/packages/core/buildchain-agent-manuals.js +1 -0
  27. package/packages/core/channel-candidate.js +8 -0
  28. package/packages/core/channel-promotion-baseline.js +52 -0
  29. package/packages/core/dev-alpha-candidate-selection.js +10 -2
  30. package/packages/core/next-development-candidate-reservation.js +186 -0
  31. package/packages/core/next-development-controller.js +726 -0
  32. package/packages/core/next-development-projection.js +288 -0
  33. package/packages/core/next-development-transition.js +738 -0
  34. package/packages/core/paper-agent-entry.js +7 -4
  35. package/packages/core/paper.js +14 -7
  36. package/scripts/aws-macos-jit-controller-core.mjs +83 -2
  37. package/scripts/aws-macos-jit-controller.mjs +32 -1
  38. package/scripts/aws-macos-jit-instance-rehydrate.mjs +260 -0
  39. package/scripts/check-inventory.mjs +11 -0
  40. package/scripts/dev-alpha-candidate-patrol.mjs +22 -1
  41. package/scripts/generate-next-development-guidance.mjs +49 -0
  42. package/scripts/generate-site-bundle.mjs +2 -0
  43. package/scripts/init-repo.mjs +119 -62
  44. package/scripts/next-development-self-dogfood-harness.mjs +409 -0
  45. package/scripts/next-development-self-dogfood.mjs +532 -0
  46. package/scripts/next-development-transition.mjs +47 -0
  47. package/scripts/site-capability-metadata.mjs +3 -0
  48. package/scripts/stable-candidate-qualification.mjs +7 -7
@@ -6,7 +6,7 @@
6
6
  "cliCommandCount": 114,
7
7
  "workflowCount": 69,
8
8
  "actionCount": 7,
9
- "sitePageCount": 71,
9
+ "sitePageCount": 72,
10
10
  "docCommandRefCount": 924,
11
11
  "failureCount": 0
12
12
  },
@@ -3266,6 +3266,10 @@
3266
3266
  "id": "manual:migration-inventory",
3267
3267
  "category": "manual"
3268
3268
  },
3269
+ {
3270
+ "id": "manual:next-development-transition",
3271
+ "category": "manual"
3272
+ },
3269
3273
  {
3270
3274
  "id": "manual:node-api-reference",
3271
3275
  "category": "manual"
@@ -8003,8 +8007,8 @@
8003
8007
  "workflowRegistryPath": "dist/site/workflow-registry.json",
8004
8008
  "pageRegistryPath": "dist/site/page-registry.json",
8005
8009
  "cliRegistryDigest": "099c0db9c5346942aee236af2cb7b6a7a91fbb2c54ebb17b7a2544a339c00d40",
8006
- "workflowRegistryDigest": "65c832629ee164235674ec4da7cd1bc47229fae1152d7487d09876d03d7ded91",
8007
- "pageRegistryDigest": "adfef59fcc28508390dac4c634a65b52e49f8500545ac86fbdad1134ed480bc5"
8010
+ "workflowRegistryDigest": "9ab17af52207b301bb5876f8a4c314706a2d2aeb9e9270351f0da67bd0bd5a67",
8011
+ "pageRegistryDigest": "00c95f4f0f75fcaa386b9b615d692cae622dbf9bd854aa62357d0b8dce310955"
8008
8012
  },
8009
8013
  "comparison": {
8010
8014
  "missingCliRegistry": [],
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "contract": "kungfu-buildchain-publication-release-registry",
4
- "generatedAt": "2026-08-11T09:59:20.000Z",
5
- "publishedAt": "2026-08-11T09:59:20.000Z",
4
+ "generatedAt": "2026-08-11T13:41:03.000Z",
5
+ "publishedAt": "2026-08-11T13:41:03.000Z",
6
6
  "reproducible": true,
7
7
  "timestampPolicy": "ci-injected",
8
8
  "deterministicInputs": [
@@ -19,7 +19,7 @@
19
19
  "declared Buildchain surface manifest contract"
20
20
  ],
21
21
  "sourceDateEpoch": "0",
22
- "sourceRevision": "dbad2f383a6ab93abd192c4edefb4689c9eebc78",
22
+ "sourceRevision": "9362236c143df3d0e65c3746dbaa8e06923d08f6",
23
23
  "timestampPolicyDetails": {
24
24
  "contract": "kungfu-buildchain-surface-timestamp-policy",
25
25
  "timestampFields": [
@@ -32,7 +32,7 @@
32
32
  },
33
33
  "package": {
34
34
  "name": "@kungfu-tech/buildchain",
35
- "version": "3.0.9-alpha.2",
35
+ "version": "3.0.9-alpha.3",
36
36
  "versionSource": "package.json#version"
37
37
  },
38
38
  "sourceKind": "package-site-bundle",
@@ -54,6 +54,9 @@
54
54
  "./release-candidate": "./packages/core/release-candidate.js",
55
55
  "./release-candidate-recovery": "./packages/core/release-candidate-recovery.js",
56
56
  "./release-train": "./packages/core/release-train.js",
57
+ "./next-development-transition": "./packages/core/next-development-transition.js",
58
+ "./next-development-controller": "./packages/core/next-development-controller.js",
59
+ "./next-development-projection": "./packages/core/next-development-projection.js",
57
60
  "./stable-candidate-ledger": "./packages/core/stable-candidate-ledger.js",
58
61
  "./release-passport": "./packages/core/release-passport.js",
59
62
  "./release-passport-contract": "./packages/core/release-passport-contract.js",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "contract": "kungfu-buildchain-site-manifest",
4
- "generatedAt": "2026-08-11T09:59:20.000Z",
5
- "publishedAt": "2026-08-11T09:59:20.000Z",
4
+ "generatedAt": "2026-08-11T13:41:03.000Z",
5
+ "publishedAt": "2026-08-11T13:41:03.000Z",
6
6
  "reproducible": true,
7
7
  "timestampPolicy": "ci-injected",
8
8
  "deterministicInputs": [
@@ -19,7 +19,7 @@
19
19
  "declared Buildchain surface manifest contract"
20
20
  ],
21
21
  "sourceDateEpoch": "0",
22
- "sourceRevision": "dbad2f383a6ab93abd192c4edefb4689c9eebc78",
22
+ "sourceRevision": "9362236c143df3d0e65c3746dbaa8e06923d08f6",
23
23
  "timestampPolicyDetails": {
24
24
  "contract": "kungfu-buildchain-surface-timestamp-policy",
25
25
  "timestampFields": [
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "package": {
39
39
  "name": "@kungfu-tech/buildchain",
40
- "version": "3.0.9-alpha.2",
40
+ "version": "3.0.9-alpha.3",
41
41
  "versionSource": "package.json#version"
42
42
  },
43
43
  "entrypoint": "buildchain-site.json",
@@ -53,7 +53,7 @@
53
53
  "path": "docs/MAP.md",
54
54
  "plane": "use",
55
55
  "exists": true,
56
- "digest": "sha256:5292461118df2ec99a15411b6ed50c288abeb05d992677e3500b9bd46255a001"
56
+ "digest": "sha256:a1c408b13658f225113ede0ee4f4309cbae466178e8f248f4290a616ce39194c"
57
57
  },
58
58
  {
59
59
  "id": "getting-started",
@@ -135,6 +135,14 @@
135
135
  "exists": true,
136
136
  "digest": "sha256:5ec5534ee48790df09c71a2578e1ca364a14dadf6ba662685ee66f78ae2589e7"
137
137
  },
138
+ {
139
+ "id": "next-development-transition",
140
+ "title": "Next-development transition",
141
+ "path": "docs/next-development-transition.md",
142
+ "plane": "verify",
143
+ "exists": true,
144
+ "digest": "sha256:93b2687be0e36744cb7b0b9d0d76588d89569120ffdb577f13c8c0827988ba28"
145
+ },
138
146
  {
139
147
  "id": "release-propagation",
140
148
  "title": "Release propagation",
@@ -245,7 +253,7 @@
245
253
  "path": "docs/node-api-reference.md",
246
254
  "plane": "use",
247
255
  "exists": true,
248
- "digest": "sha256:bbef23e4f489376f759e5678d61e2f07c69dfa5542f5538e14c68a0714233ea3"
256
+ "digest": "sha256:cf2137143bb567a11430cf35c3faaff7e16861af4e68554af5cbea1b3a0a1077"
249
257
  },
250
258
  {
251
259
  "id": "build-facts",
@@ -349,7 +357,7 @@
349
357
  "path": "docs/versioning.md",
350
358
  "plane": "why",
351
359
  "exists": true,
352
- "digest": "sha256:68934ebe8330a13376d1b71d1a875d67d2970b1036e0f185a923175ca2a257fe"
360
+ "digest": "sha256:948957c9170437e2a383efba01d99d9b137ef56ce71ae8036545daaed625d09c"
353
361
  },
354
362
  {
355
363
  "id": "web-surface-deployments",
@@ -1961,7 +1961,7 @@
1961
1961
  "status": "preview",
1962
1962
  "owner": "buildchain-workflows",
1963
1963
  "maturity": "preview",
1964
- "introducedVersion": "3.0.9-alpha.2",
1964
+ "introducedVersion": "3.0.9-alpha.3",
1965
1965
  "compatibilityPromise": "preserved-through-the-v3-major-line",
1966
1966
  "deprecationReplacement": "",
1967
1967
  "sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
@@ -1982,7 +1982,7 @@
1982
1982
  "status": "preview",
1983
1983
  "owner": "buildchain-workflows",
1984
1984
  "maturity": "preview",
1985
- "introducedVersion": "3.0.9-alpha.2",
1985
+ "introducedVersion": "3.0.9-alpha.3",
1986
1986
  "compatibilityPromise": "preserved-through-the-v3-major-line",
1987
1987
  "deprecationReplacement": "",
1988
1988
  "sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
@@ -2003,7 +2003,7 @@
2003
2003
  "status": "preview",
2004
2004
  "owner": "buildchain-workflows",
2005
2005
  "maturity": "preview",
2006
- "introducedVersion": "3.0.9-alpha.2",
2006
+ "introducedVersion": "3.0.9-alpha.3",
2007
2007
  "compatibilityPromise": "preserved-through-the-v3-major-line",
2008
2008
  "deprecationReplacement": "",
2009
2009
  "sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
@@ -2053,7 +2053,7 @@
2053
2053
  "status": "preview",
2054
2054
  "owner": "buildchain-workflows",
2055
2055
  "maturity": "preview",
2056
- "introducedVersion": "3.0.9-alpha.2",
2056
+ "introducedVersion": "3.0.9-alpha.3",
2057
2057
  "compatibilityPromise": "preserved-through-the-v3-major-line",
2058
2058
  "deprecationReplacement": "",
2059
2059
  "sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
package/docs/MAP.md CHANGED
@@ -66,7 +66,7 @@ workflow, action, and Node API export also carries a `capabilityGroup`,
66
66
  | Publication Artifacts | `publication-registry.json`, `workflow-registry.json`, `node-api-registry.json`, `manual-registry.json`, `kungfu-buildchain-publication-artifact-registry` | [`publication-artifacts.md`](publication-artifacts.md), [`reusable-build-surface.md`](reusable-build-surface.md) |
67
67
  | Distribution Indexes and Badges | `badge-endpoint-registry.json`, `node-api-registry.json`, `manual-registry.json` | [`readme-badges.md`](readme-badges.md), [`homebrew.md`](homebrew.md) |
68
68
  | Build Facts, Observability, and Diagnostics | `cli-registry.json`, `node-api-registry.json`, lifecycle artifacts | [`build-facts.md`](build-facts.md), [`toolkit-observability.md`](toolkit-observability.md), [`consumer-issue-reporting.md`](consumer-issue-reporting.md) |
69
- | Governance, Versioning, and Runtime Drift | `buildchain-contract.json`, `workflow-registry.json`, `release-model.json` | [`github-governance-authority.md`](github-governance-authority.md), [`release-governance.md`](release-governance.md), [`release-flow.md`](release-flow.md), [`versioning.md`](versioning.md), [`runtime-train-validation.md`](runtime-train-validation.md), [`cli.md`](cli.md) |
69
+ | Governance, Versioning, and Runtime Drift | `buildchain-contract.json`, `workflow-registry.json`, `release-model.json` | [`github-governance-authority.md`](github-governance-authority.md), [`release-governance.md`](release-governance.md), [`release-flow.md`](release-flow.md), [`next-development-transition.md`](next-development-transition.md), [`versioning.md`](versioning.md), [`runtime-train-validation.md`](runtime-train-validation.md), [`cli.md`](cli.md) |
70
70
  | CLI and Node API Reference | `cli-registry.json`, `node-api-registry.json`, `workflow-registry.json`, `manual-registry.json` | [`cli-reference.md`](cli-reference.md), [`node-api-reference.md`](node-api-reference.md), [`cli.md`](cli.md), [`../packages/core/README.md`](../packages/core/README.md) |
71
71
 
72
72
  | Capability | Machine-readable entry | Manual entry |
@@ -118,6 +118,7 @@ replace them.
118
118
  | How do I report or safely apply branch and pull-request engineering hygiene? | [`engineering-housekeeper.md`](engineering-housekeeper.md) | use/verify | preview |
119
119
  | How does Buildchain decide patch, minor, and major release lines? | [`versioning.md`](versioning.md) | why | stable |
120
120
  | What exact branch/tag state machine runs on alpha, release, and major gate? | [`release-flow.md`](release-flow.md) | verify | stable |
121
+ | How does a completed Alpha remain successful while the following development version is prepared? | [`next-development-transition.md`](next-development-transition.md), [`../architecture/decisions/0002-next-development-transition.md`](../architecture/decisions/0002-next-development-transition.md) | verify/use | preview |
121
122
  | What did Buildchain migrate or retire from old action repositories? | [`migration-inventory.md`](migration-inventory.md) | verify | stable |
122
123
  | What is the active action and workflow source of truth? | [`ownership.md`](ownership.md) | verify | stable |
123
124
  | How do I declare version files and custom lifecycle commands? | [`lifecycle-protocol.md`](lifecycle-protocol.md) | use | stable |
@@ -380,7 +380,7 @@ host, including at least one full run, plus proof that:
380
380
  ### Phase 3 lifecycle controller
381
381
 
382
382
  `scripts/aws-macos-jit-controller.mjs` is the operator boundary for the paid
383
- campaign. It has four explicit mutation modes:
383
+ campaign. It has five explicit mutation modes:
384
384
 
385
385
  - `launch-campaign` binds the exact repository source, AMI, availability zone,
386
386
  tagged Dedicated Host, and reusable instance. Before paid allocation it
@@ -390,6 +390,12 @@ campaign. It has four explicit mutation modes:
390
390
  a DryRun parameter for `AllocateHosts`, it requires an allowed IAM policy
391
391
  simulation for the exact tagged allocation before the real call, then a
392
392
  successful `RunInstances` DryRun before launching the instance.
393
+ - `rehydrate-instance` creates a replacement instance on the one already-paid,
394
+ empty campaign host after an interrupted or failed instance lifecycle. It
395
+ rechecks the exact account, disabled workflow, Budget, source, host identity
396
+ and allocation time, zero runner residue, zero active JIT instances, and no
397
+ other active Mac host in either admitted region. It then requires a
398
+ successful same-host `RunInstances` DryRun and never calls `AllocateHosts`.
393
399
  - `run-job` binds one queued exact-source GitHub job to the existing campaign
394
400
  host and instance. It writes the repository JIT configuration through a
395
401
  mode-0600 temporary file into a distinct SSM SecureString, sends only the
@@ -417,8 +423,10 @@ through `--confirm-source-sha` and `--confirm-campaign-id`. `run-job` also
417
423
  requires `--confirm-run-id`; `launch-campaign` additionally requires the
418
424
  expected workload account through `--account-id`. `rebind-campaign`
419
425
  additionally repeats the prior source, host, and instance identities and
420
- requires `--confirm-zero-allocation`. Omitting `--execute` emits a deterministic
421
- plan without changing AWS or GitHub state.
426
+ requires `--confirm-zero-allocation`. `rehydrate-instance` additionally repeats
427
+ the existing host and replaced instance identities and requires
428
+ `--confirm-no-host-allocation`. Omitting `--execute` emits a deterministic plan
429
+ without changing AWS or GitHub state.
422
430
 
423
431
  ## Provider lifecycle
424
432
 
@@ -59,6 +59,14 @@ controller then compares the selected SHA to the exact Alpha head before it can
59
59
  be eligible, so a bounded scan cannot turn a commit outside the promotion
60
60
  ancestry into a candidate.
61
61
 
62
+ Generated next-development version preparation is not a product candidate. The
63
+ observer skips both the signed `chore(release): prepare ...` commit and its
64
+ two-parent integration commit. When later product work becomes qualified, the
65
+ nearest preparation becomes a reservation: Patrol reads every path changed by
66
+ that preparation at both exact SHAs and requires identical Git blob identities.
67
+ A missing or stale reserved path blocks selection before the Release Cut and
68
+ therefore before any heavy candidate build.
69
+
62
70
  The decision is `kungfu-buildchain-channel-candidate-decision/v1`. It records the
63
71
  source and target branches and SHAs, comparison distance, workflow paths, run
64
72
  identities and attempts, completion times, URLs, policy, and a canonical decision
@@ -0,0 +1,119 @@
1
+ ---
2
+ status: preview
3
+ period: ongoing
4
+ theme: next-development-transition
5
+ doc_type: generated-contract-guidance
6
+ source_level: generated-from-node-contract
7
+ confidence: high
8
+ sensitivity: public
9
+ evidence_grade: A
10
+ review_state: self-reviewed
11
+ last_reviewed: 2026-08-11
12
+ ---
13
+
14
+ # Next-development Transition
15
+
16
+ This document is generated from
17
+ `packages/core/next-development-transition.js` and
18
+ `packages/core/next-development-controller.js` and
19
+ `packages/core/next-development-projection.js`. Edit those sources and run
20
+ `node scripts/generate-next-development-guidance.mjs`; direct edits fail the
21
+ projection drift check.
22
+
23
+ ## Contract
24
+
25
+ - Contract: `kungfu-buildchain-next-development-transition/v1`
26
+ - Durable controller: `kungfu-buildchain-next-development-controller/v1`
27
+ - ADR: [ADR 0002](../architecture/decisions/0002-next-development-transition.md)
28
+ - States: `planned`, `waiting-anchor`, `materialized`, `pr-pending`, `merged`, `verified`
29
+ - Legal version models: `semver/auto` and `anchored/manual`
30
+ - Invariant: A completed Alpha remains successful and its refs remain immutable while the next-development transition is incomplete.
31
+
32
+ An Alpha publication is terminal success independently of this transition.
33
+ The idempotency key is a deterministic hash of the completed-Alpha root,
34
+ repository, legal model, and sorted declared paths. Incomplete Dev preparation
35
+ therefore cannot relabel Alpha N as failed, and replay cannot select a different
36
+ Alpha or path set.
37
+
38
+ ## Durable controller
39
+
40
+ `scheduleNextDevelopmentController` atomically creates one child for the
41
+ repository and completed-Alpha root. Identical wakes reuse it. The store
42
+ boundary requires read, create-if-absent, and compare-and-swap operations; the
43
+ controller root fences every checkpoint. Materialization uses an operation key
44
+ derived from the child, exact current protected Dev SHA, and reviewed target,
45
+ so a fresh runner can recover an already-created commit instead of rebuilding
46
+ the Alpha candidate or depending on the original runner workspace.
47
+
48
+ Before opening the protected version PR, the controller reads Dev again. A
49
+ moved head makes the prepared attempt `superseded`; the following wake
50
+ regenerates only declared version material from that latest SHA. After merge,
51
+ `verified` remains unreachable until protected Dev readback contains the
52
+ prepared commit and its target version, source roots, and derived roots exactly
53
+ match the checkpoint. The executor surface contains no Alpha publication, tag,
54
+ release, or package operation.
55
+
56
+ Alpha finalization no longer treats a non-fast-forward Dev update as successful
57
+ bookkeeping. It requires an exact checkout of the current Dev head, regenerates
58
+ the declared version lifecycle there, and uses a non-force merge or reusable
59
+ protected version PR. Candidate Patrol ignores both the generated preparation
60
+ commit and its two-parent integration commit. Before a later product candidate
61
+ can settle, Patrol reads every prepared version path at the candidate SHA and
62
+ requires the exact reserved blob identities; missing or stale state blocks
63
+ before a Release Cut or heavy candidate build.
64
+
65
+ ## Version models
66
+
67
+ `semver/auto` increments the Alpha sequence on the same semantic patch. For
68
+ example, completed `1.4.2-alpha.7` plans `1.4.2-alpha.8`. It must not accept an anchor or an
69
+ operator-selected target.
70
+
71
+ `anchored/manual` enters `waiting-anchor` until the caller provides both a
72
+ semantic target and the exact digest of the configured anchor manifest. The
73
+ adapter verifies the manifest already present in the checkout; it never invents
74
+ or edits upstream anchor facts. `semver/manual` and `anchored/auto` are
75
+ invalid.
76
+
77
+ ## Hosted self-dogfood and adoption
78
+
79
+ `.github/workflows/buildchain-alpha-self-dogfood.yml` calls the same public
80
+ `build.yml@v3-alpha` router as a consumer. After the hosted build succeeds, one
81
+ runner uses the real version-state adapter and checkpoints an injected transient
82
+ durable-state write failure. A separate runner restores the adapter operation
83
+ without rebuilding Alpha, supersedes it when protected Dev moves, and preserves
84
+ `pr-pending` while the protected PR is delayed. The final artifact roots the
85
+ exact runtime SHA, controller transaction, both legal version-model outcomes,
86
+ and an exact hosted protected Dev readback. Stable qualification recomputes and
87
+ rejects evidence that omits or drifts any of those bindings.
88
+
89
+ Production consumers, including Kungfu, adopt the proved contract through
90
+ `kungfu-systems/buildchain/.github/workflows/build.yml@v3`. The evidence retains
91
+ the exact resolved SHA for audit, but the committed production coordinate is the
92
+ floating major contract rather than an exact-SHA pin.
93
+
94
+ ## Local adapter
95
+
96
+ From a normal Buildchain checkout:
97
+
98
+ ```sh
99
+ node scripts/next-development-transition.mjs materialize --cwd . --input <request.json>
100
+ ```
101
+
102
+ The command prints a rooted plan and performs no write by default. `--write`
103
+ may change only regular, non-symlink source files listed by `version.files`
104
+ in the loaded Buildchain config. The rooted adapter contract separately names
105
+ `version.derived_files` as allowed changes, `version.manifest` as read-only,
106
+ `BUILDCHAIN_VERSION` as the target input, `lifecycle.version-state` as the
107
+ derived-material stage, and `lifecycle.verify` as the truth gate. The
108
+ reference writer fails closed when derived files exist because transaction
109
+ execution is outside this contract slice. It performs no Git operation, ref
110
+ update, network request, provider call, lifecycle command, or anchor edit.
111
+
112
+ Preparing development state creates no tag, Release, public package, or
113
+ candidate. Those public effects remain outside the local adapter contract.
114
+
115
+ The request schema is
116
+ `contracts/next-development-request-v1.schema.json`; the durable record schema
117
+ is `contracts/next-development-transition-v1.schema.json`. Positive and
118
+ negative examples live under
119
+ `contracts/fixtures/next-development-transition-v1/`.