docs: re-model branching as experimental/main/release ladder (ADR-0004 amendment) - #320
Conversation
…4 amendment) Amend ADR-0004 (one day old) to invert the channel polarity per @dennisdoomen's #302 feedback: instead of `main` being the unstable edge channel, introduce a three-tier maturity ladder feeding the production line — experimental -> -alpha (fast/AI lane, breaking accumulates) GitHub Packages main -> -preview (deliberate trunk, default branch) GitHub Packages release/YYYY -> -rc -> GA (production line) nuget.org (opt-in) support/* (legacy v10 + retired year lines) nuget.org (opt-in) GitHub Packages = test/preview channels; nuget.org = production. Breaking changes land on `experimental` only; non-breaking work is promoted forward-only experimental -> main -> release/YYYY. experimental and main share one version core (breaking surface rides [Experimental]) so the alpha < preview < rc < GA ladder orders cleanly. Legacy/retired lines adopt gitflow support/* naming (release/v10 -> support/v10). Docs only. The branch creation, edge.yml->preview.yml relabel, experimental -alpha workflow, validate-ref/CI trigger changes, and per-branch version.json land in a follow-up PR + maintainer steps; until then `main` still publishes -edge (see the ADR rollout-status note). README's live Build-Status table is left unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…hanics) (#321) Wires up the three-tier ladder documented in #320: - version.json: main is now 2026.1.0-preview.{height} (was -edge); firstUnstableTag preview; publicReleaseRefSpec gains support/\d{4} + support/v\d+ (drops the old release/v\d+ now that legacy renames to support/v10). - edge.yml -> preview.yml: main's channel relabelled -edge -> -preview. - experimental.yml (new): push to experimental -> -alpha prerelease to GitHub Packages. - release.yml: validate-ref now matches production branches release/\d{4} + support/(v\d+|\d{4}); stale v11 comments refreshed. - build/Build.cs + Build.CI.GitHubActions.cs: add ExperimentalBranch + SupportBranchPattern constants; ubuntu/windows/macos triggers now cover experimental + main + release/* + support/*. The three generated workflows regenerated accordingly. - README Build-Status section + ADR-0004 rollout note updated to match. On merge, main starts publishing -preview instead of -edge. experimental.yml stays dormant until the experimental branch is created (a maintainer step, with the release/v10 -> support/v10 rename + branch protection). Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Are you planning to follow GitFlow? If so, Also, shouldn't we regularly tag commits on |
yeah makes sense with calver |
What
Amends ADR-0004 (one day old) to invert the channel polarity per @dennisdoomen's feedback on #302: instead of
mainbeing the unstable edge channel, a three-tier maturity ladder feeds the production line.experimental…-alpha(fast/AI, breaking accumulates)main…-preview(deliberate trunk, default branch)release/YYYY…-rc→ GAsupport/v10,support/YYYYGitHub Packages = test/preview; nuget.org = production. Breaking changes land on
experimentalonly; non-breaking work is promoted forward-onlyexperimental → main → release/YYYY.experimentalandmainshare one version core (risky surface rides[Experimental]) so the ladder orders cleanly:-alpha<-preview<-rc< GA. Legacy/retired lines adopt gitflowsupport/*naming (release/v10→support/v10).Why
Dennis's principle-of-least-surprise point:
mainshould be the stable-ish line newcomers/consumers expect, not the bleeding edge. ADR-0004 originally rejected a dedicatedexperimentalbranch (Alternative A) to avoiddevelop→maindivergence; this amendment adopts it because that divergence is bounded in practice (most work is non-breaking and promotes promptly;[Experimental]carries risky surface as non-breaking; promotion is forward-only) — and keeps those divergence-minimising tools.Scope — docs only
This PR lands the decision + documentation. The mechanics follow in a separate PR + maintainer steps: create
experimental, renamerelease/v10→support/v10, relabelmain's channel-edge→-preview(edge.yml→preview.yml), add theexperimental-alphaworkflow, extendvalidate-ref+ the generated CI branch triggers (build/Build.CI.GitHubActions.cs), set per-branchversion.json. Until those land,mainstill publishes-edge(per the ADR rollout-status note). README's live Build-Status table is intentionally unchanged (it links real workflow files).Files
ADR-0004 (amended in place),
branching-and-release.md,release-and-versioning.md,AGENTS.md,CONTRIBUTING.md,README.md(channels blurbs), plus channel-discipline wording inexperimental-apis.md/conventions.md/roadmap.md/adr/0001.🤖 Generated with Claude Code