@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.
- package/actions/release-tail/README.md +8 -0
- package/architecture/ci-lane-change-budget.json +187 -0
- package/architecture/decisions/0002-next-development-transition.md +101 -0
- package/architecture/decisions/0003-two-phase-delivery-warrant.md +152 -0
- package/architecture/internal-capabilities.json +211 -8
- package/architecture/maintainability-policy.json +113 -28
- package/architecture/release-tail-contract-inventory.json +5 -2
- package/architecture/v3-core-mechanism-inventory.json +91 -0
- package/architecture/v4-adopter-delivery-parity.json +32 -5
- package/architecture/v4-capability-state-machine-manifest.json +73 -0
- package/architecture/v4-compatibility-facts-parity.json +77 -0
- package/architecture/v4-delivery-authority-parity.json +250 -0
- package/architecture/v4-delivery-warrant-shadow-fixtures.json +41 -9
- package/architecture/v4-floating-consumer-policy.json +6 -0
- package/architecture/v4-next-development-parity.json +192 -0
- package/architecture/v4-publication-rehearsal-parity.json +84 -0
- package/architecture/v4-release-train-parity.json +1 -0
- package/architecture/v4-tail-reseal-parity.json +150 -0
- package/bin/buildchain.mjs +32 -3
- package/bin/internal/adopter-delivery-cli.mjs +70 -0
- package/bin/internal/command-registry.mjs +3 -0
- package/bin/internal/compatibility-facts-cli.mjs +101 -0
- package/contracts/dev-delivery-authority-v2.schema.json +662 -0
- 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/fixtures/v4-adopter-delivery-v1/archive-template.json +19 -0
- package/contracts/fixtures/v4-adopter-delivery-v1/bootstrap-positive.json +93 -0
- package/contracts/fixtures/v4-adopter-delivery-v1/gate-positive.json +29 -0
- package/contracts/fixtures/v4-adopter-delivery-v1/gate-unknown-selector.json +26 -0
- package/contracts/fixtures/v4-adopter-delivery-v1/offline-vectors.json +50 -0
- package/contracts/fixtures/v4-compatibility-facts-v1/shared.json +1129 -0
- package/contracts/fixtures/v4-floating-consumer-policy-v1/cases.json +7 -1
- package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/artifacts/product.bin +1 -0
- package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/config/buildchain.toml +5 -0
- package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/documents/release-activation.json +1 -0
- package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/documents/signed-channel.json +1 -0
- package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/evidence/qualification.json +1 -0
- package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/manifests/candidate.json +5 -0
- package/contracts/fixtures/v4-publication-rehearsal-v1/candidate/manifests/release-passport.json +1 -0
- package/contracts/fixtures/v4-publication-rehearsal-v1/capsule.json +707 -0
- package/contracts/fixtures/v4-publication-rehearsal-v1/offline-vectors.json +27 -0
- package/contracts/fixtures/v4-tail-reseal-v1/valid.json +229 -0
- package/contracts/next-development-request-v1.schema.json +66 -0
- package/contracts/next-development-transition-v1.schema.json +292 -0
- package/contracts/v4-adopter-delivery-v1.schema.json +81 -0
- package/contracts/v4-compatibility-facts-v1.schema.json +230 -0
- package/contracts/v4-floating-consumer-policy-receipt-v1.schema.json +4 -2
- package/contracts/v4-publication-rehearsal-capsule-v1.schema.json +233 -0
- package/contracts/v4-tail-reseal-v1.schema.json +276 -0
- package/dist/site/agent-index.json +5 -0
- package/dist/site/artifact-schemas.json +10 -0
- package/dist/site/buildchain-contract.json +1475 -27
- package/dist/site/buildchain-site.json +627 -31
- package/dist/site/capability-registry.json +17 -14
- package/dist/site/cli-registry.json +205 -3
- package/dist/site/kfd-claims.json +490 -16
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +52 -6
- package/dist/site/node-api-registry.json +14736 -8851
- package/dist/site/page-registry.json +593 -21
- package/dist/site/public-surface-audit.json +837 -48
- package/dist/site/publication-authority-registry.json +44 -8
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/release-provenance.json +24 -0
- package/dist/site/schemas/dev-delivery-authority-v2.schema.json +662 -0
- package/dist/site/schemas/release-tail-capabilities-v1.schema.json +199 -0
- package/dist/site/schemas/v4-adopter-delivery-v1.schema.json +81 -0
- package/dist/site/schemas/v4-compatibility-facts-v1.schema.json +230 -0
- package/dist/site/schemas/v4-publication-rehearsal-capsule-v1.schema.json +233 -0
- package/dist/site/site-manifest.json +34 -10
- package/dist/site/workflow-registry.json +160 -10
- package/docs/MAP.md +8 -2
- package/docs/cli-reference.md +404 -13
- package/docs/cli.md +8 -0
- package/docs/dev-alpha-candidate-patrol.md +8 -0
- package/docs/dev-delivery-qualification-landing-adr.md +251 -0
- package/docs/dev-delivery-warrant.md +351 -38
- package/docs/next-development-transition.md +118 -0
- package/docs/node-api-reference.md +646 -293
- package/docs/release-tail-provider-plane.md +30 -0
- package/docs/v4-adopter-delivery.md +133 -0
- package/docs/v4-compatibility-facts.md +91 -0
- package/docs/v4-publication-rehearsal.md +130 -0
- package/docs/v4-tail-reseal.md +73 -0
- package/docs/versioning.md +4 -3
- package/package.json +34 -6
- package/packages/core/adopter-delivery-passport.js +259 -0
- package/packages/core/adopter-delivery-vectors.js +158 -0
- package/packages/core/adopter-delivery-vectors.json +77 -0
- package/packages/core/buildchain-agent-manuals.js +3 -0
- package/packages/core/buildchain-compatibility-authority.js +336 -0
- package/packages/core/buildchain-compatibility-fact.js +394 -0
- package/packages/core/buildchain-compatibility-facts.json +217 -0
- package/packages/core/buildchain-compatibility-proof.js +566 -0
- package/packages/core/buildchain-config.js +84 -0
- package/packages/core/buildchain-contract.js +96 -143
- package/packages/core/buildchain-delivery-bootstrap.js +240 -0
- package/packages/core/buildchain-delivery-infrastructure.js +164 -0
- package/packages/core/buildchain-delivery-self-dogfood.js +395 -0
- package/packages/core/buildchain-publication-authority.js +1 -0
- package/packages/core/channel-candidate.js +8 -0
- package/packages/core/channel-promotion-baseline.js +55 -0
- package/packages/core/ci-lane-change-budget.js +247 -0
- package/packages/core/dev-alpha-candidate-selection.js +10 -2
- package/packages/core/dev-delivery-authority-candidate.js +270 -0
- package/packages/core/dev-delivery-authority-evidence.js +146 -0
- package/packages/core/dev-delivery-authority-landing.js +461 -0
- package/packages/core/dev-delivery-authority-observation.js +48 -0
- package/packages/core/dev-delivery-authority-qualification.js +591 -0
- package/packages/core/dev-delivery-authority-settlement.js +213 -0
- package/packages/core/dev-delivery-authority-state.js +583 -0
- package/packages/core/dev-delivery-candidate-identity.js +13 -0
- package/packages/core/dev-delivery-contract-surface.js +76 -0
- package/packages/core/dev-delivery-execution-failure.js +133 -0
- package/packages/core/dev-delivery-execution-transfer.js +592 -0
- package/packages/core/dev-delivery-landing-admission-core.js +119 -0
- package/packages/core/dev-delivery-landing-readback.js +598 -0
- package/packages/core/dev-delivery-landing-terminal-evidence.js +271 -0
- package/packages/core/dev-delivery-landing-testing-port.js +6 -0
- package/packages/core/dev-delivery-native-execution.js +110 -0
- package/packages/core/dev-delivery-native-proof.js +562 -0
- package/packages/core/dev-delivery-process-boundary.js +563 -0
- package/packages/core/dev-delivery-provider-attempt.js +127 -0
- package/packages/core/dev-delivery-provider-heartbeat.js +382 -0
- package/packages/core/dev-delivery-warrant-cancellation.js +1 -0
- package/packages/core/dev-delivery-warrant-qualification.js +145 -0
- package/packages/core/dev-delivery-warrant-settlement.js +237 -36
- package/packages/core/dev-delivery-warrant-state.js +587 -0
- package/packages/core/dev-delivery-warrant.js +328 -370
- package/packages/core/github-governance-authority.js +1 -0
- package/packages/core/index.js +5 -0
- package/packages/core/kungfu-temporal-fact.js +557 -0
- package/packages/core/legacy-kfd-adopter-driver.js +167 -0
- package/packages/core/next-development-candidate-reservation.js +186 -0
- package/packages/core/next-development-controller.js +728 -0
- package/packages/core/next-development-projection.js +287 -0
- package/packages/core/next-development-transition.js +738 -0
- package/packages/core/paper-agent-entry.js +11 -5
- package/packages/core/paper.js +16 -5
- package/packages/core/published-delivery-authority.js +266 -0
- package/packages/core/release-candidate-recovery.js +70 -15
- package/packages/core/release-candidate.js +2 -2
- package/packages/core/release-passport.js +36 -9
- package/packages/core/v4-adopter-delivery-parity.js +3 -3
- package/packages/core/v4-adopter-delivery.js +359 -0
- package/packages/core/v4-canonical-contracts.js +5 -0
- package/packages/core/v4-delivery-warrant-read-candidate.js +10 -3
- package/packages/core/v4-floating-consumer-evidence.js +18 -4
- package/packages/core/v4-floating-consumer-policy.js +143 -20
- package/packages/core/v4-floating-consumer-release-passport.js +32 -5
- package/packages/core/v4-publication-rehearsal-capsule.js +468 -0
- package/packages/core/v4-publication-rehearsal-provider-bindings.js +212 -0
- package/packages/core/v4-publication-rehearsal.js +481 -0
- package/packages/core/v4-tail-reseal-contract.js +26 -0
- package/packages/core/v4-tail-reseal-github.js +178 -0
- package/packages/core/v4-tail-reseal-receipt.js +225 -0
- package/packages/core/v4-tail-reseal.js +594 -0
- package/packages/core/workflow-yaml-contract.js +24 -2
- package/scripts/buildchain-cli-help.mjs +41 -2
- package/scripts/check-ci-lane-change-budget.mjs +100 -0
- package/scripts/check-inventory.mjs +14 -3
- package/scripts/check-v4-floating-consumer-policy-contract.mjs +23 -4
- package/scripts/dev-alpha-candidate-patrol.mjs +22 -1
- package/scripts/dev-delivery-authority-command-adapters.mjs +206 -0
- package/scripts/dev-delivery-authority-provider.mjs +28 -0
- package/scripts/dev-delivery-authority.mjs +490 -0
- package/scripts/dev-delivery-native-run.mjs +177 -0
- package/scripts/dev-delivery-process-boundary.mjs +260 -0
- package/scripts/dev-delivery-proof.mjs +67 -2
- package/scripts/dev-delivery-provider-heartbeat.mjs +215 -0
- package/scripts/dev-delivery-source-proof-replay.mjs +153 -0
- package/scripts/dev-delivery-source-proof-reuse.mjs +13 -97
- package/scripts/dev-delivery-two-phase-resume.mjs +345 -0
- package/scripts/dev-delivery-two-phase.mjs +573 -0
- package/scripts/dev-delivery-warrant-options.mjs +266 -0
- package/scripts/dev-delivery-warrant-store.mjs +231 -0
- package/scripts/dev-delivery-warrant.mjs +232 -194
- package/scripts/dev-pr-auto-merge.mjs +1 -1
- package/scripts/dev-pr-delivery-warrant.mjs +11 -0
- package/scripts/dev-qualification-patrol.mjs +9 -9
- package/scripts/dispatch-artifact-signing-authority.mjs +1 -1
- package/scripts/generate-channel-promotion-workflow.mjs +2 -2
- package/scripts/generate-next-development-guidance.mjs +49 -0
- package/scripts/generate-release-candidate-passport.mjs +152 -0
- package/scripts/generate-site-bundle.mjs +69 -4
- package/scripts/init-repo.mjs +22 -4
- package/scripts/next-development-self-dogfood-harness.mjs +460 -0
- package/scripts/next-development-self-dogfood.mjs +597 -0
- package/scripts/next-development-transition.mjs +47 -0
- package/scripts/npm-publish-transaction.mjs +2 -2
- package/scripts/promotion-channel-router.mjs +4 -4
- package/scripts/release-candidate-anchor-provenance.mjs +99 -0
- package/scripts/release-tail.mjs +51 -3
- package/scripts/release-train-self-dogfood.mjs +94 -92
- package/scripts/resume-from-candidate-run.mjs +557 -30
- package/scripts/site-capability-metadata.mjs +41 -0
- package/scripts/stable-candidate-qualification.mjs +9 -10
- package/scripts/v4-consumer-policy.mjs +5 -5
- package/scripts/v4-publication-rehearsal-fixture.mjs +144 -0
- package/scripts/v4-tail-reseal-macos-rehearsal.mjs +134 -0
- package/scripts/v4-tail-reseal.mjs +416 -0
- 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
|
+
}
|