@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.
- package/contracts/fixtures/next-development-transition-v1/anchored-manual-waiting.json +47 -0
- package/contracts/fixtures/next-development-transition-v1/semver-auto-planned.json +47 -0
- package/contracts/fixtures/next-development-transition-v1/version-model-cases.json +40 -0
- package/contracts/next-development-request-v1.schema.json +66 -0
- package/contracts/next-development-transition-v1.schema.json +292 -0
- package/dist/site/buildchain-contract.json +4 -4
- package/dist/site/buildchain-site.json +89 -18
- package/dist/site/capability-registry.json +4 -3
- package/dist/site/kfd-claims.json +65 -5
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +19 -3
- package/dist/site/node-api-registry.json +1016 -36
- package/dist/site/page-registry.json +74 -11
- package/dist/site/public-surface-audit.json +7 -3
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/release-provenance.json +3 -0
- package/dist/site/site-manifest.json +15 -7
- package/dist/site/workflow-registry.json +4 -4
- package/docs/MAP.md +2 -1
- package/docs/aws-us-elastic-runner-burst-plane.md +11 -3
- package/docs/dev-alpha-candidate-patrol.md +8 -0
- package/docs/next-development-transition.md +119 -0
- package/docs/node-api-reference.md +126 -73
- package/docs/versioning.md +1 -1
- package/package.json +8 -3
- package/packages/core/buildchain-agent-manuals.js +1 -0
- package/packages/core/channel-candidate.js +8 -0
- package/packages/core/channel-promotion-baseline.js +52 -0
- package/packages/core/dev-alpha-candidate-selection.js +10 -2
- package/packages/core/next-development-candidate-reservation.js +186 -0
- package/packages/core/next-development-controller.js +726 -0
- package/packages/core/next-development-projection.js +288 -0
- package/packages/core/next-development-transition.js +738 -0
- package/packages/core/paper-agent-entry.js +7 -4
- package/packages/core/paper.js +14 -7
- package/scripts/aws-macos-jit-controller-core.mjs +83 -2
- package/scripts/aws-macos-jit-controller.mjs +32 -1
- package/scripts/aws-macos-jit-instance-rehydrate.mjs +260 -0
- package/scripts/check-inventory.mjs +11 -0
- package/scripts/dev-alpha-candidate-patrol.mjs +22 -1
- package/scripts/generate-next-development-guidance.mjs +49 -0
- package/scripts/generate-site-bundle.mjs +2 -0
- package/scripts/init-repo.mjs +119 -62
- package/scripts/next-development-self-dogfood-harness.mjs +409 -0
- package/scripts/next-development-self-dogfood.mjs +532 -0
- package/scripts/next-development-transition.mjs +47 -0
- package/scripts/site-capability-metadata.mjs +3 -0
- 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":
|
|
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": "
|
|
8007
|
-
"pageRegistryDigest": "
|
|
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-
|
|
5
|
-
"publishedAt": "2026-08-
|
|
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": "
|
|
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.
|
|
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-
|
|
5
|
-
"publishedAt": "2026-08-
|
|
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": "
|
|
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.
|
|
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:
|
|
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:
|
|
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:
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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`.
|
|
421
|
-
|
|
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/`.
|