Repository navigation
feat(versioning): mint 3.<minor>.<run> — SemVer minter flip (stacked on #6208) - #6209
Conversation
… flip Minter half of policy `platform-semver-versioning` (Doc/Architecture/PlatformVersioning, step 4). Stacked on the readers change; must not merge before every portal runs those readers AND every Hosting/Deployment record's updatePattern admits 3.* (Memex), else Continuous installs freeze. - PlatformVersion 3.0.0 -> 3.1.0. CI Version = <major>.<minor>.<GITHUB_RUN_NUMBER> (3.1.10050); local Version = <major>.<minor>.0-ci.0 (ordinal 0). CD reads it via -getProperty:Version, so images, MESHWEAVER_PLATFORM_VERSION and packages follow; arm moves 3-latest / 3.1-latest. - AssemblyVersion pinned to <major>.0.0.0 (stays 3.0.0.0): a minor bump never moves the runtime binding identity (policy platform-backwards-compatibility). - PlatformVersionSchemeGuard rewritten for the SemVer shapes, through real MSBuild, with a control arm (labelled line, run number 0). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…s the newest <major>.<minor>.<run> set Decision 2 of Doc/Architecture/PlatformVersioning §6 (policy platform-semver-versioning): release.yml keeps promoting and renames nothing. v3.0.0 still promotes 3.0.0-ci.<run>; from line 3.1 a release is v<major>.<minor>.0 and promotes the newest <major>.<minor>.<run> set of its commit, read by platform-version.py. A non-zero patch on the new line, another line's set, an old-notation build and the withdrawn slip 3.1.0-ci.7841 are refused. In the new notation the release moves no -latest pointer (CD's arm already did; a release move could only go backwards); GHCR latest still follows releases. test-release-promotes-both-notations.py executes the real step text against stubbed registry listings (6 era + 9 set cases), wired into dotnet-test.yml; it fails against main's release.yml. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Auto-merge was not armed. This pull request targets |
|
The control plane does not arm auto-merge on this pull request: its base 'feat/platform-semver' is not the default branch 'main' — an unprotected base merges the moment it is armed (#1685), so merge it by hand. PR babysitter — posted once per head; see |
|
The control plane does not arm auto-merge on this pull request: its base 'feat/platform-semver' is not the default branch 'main' — an unprotected base merges the moment it is armed (#1685), so merge it by hand. PR babysitter — posted once per head; see |
The minter flip for policy
platform-semver-versioning. This is step 4 of the migration inDoc/Architecture/PlatformVersioning. It is stacked on #6208 (the readers), and its base isfeat/platform-semver. Retarget it tomainonce #6208 has merged.Decisions taken (maintainer can override)
Recorded in
Doc/Architecture/PlatformVersioning§6 (shared with #6208). Each one takes the conservative option.VersionSelect).release.ymlkeeps promoting and renames nothing. Implemented here, as described below.PlatformVersion, in practice the next-line PRrelease.ymlopens after a release (3.1.0→3.2.0). This PR is that kind of edit (3.0.0→3.1.0).What it changes
Directory.Build.props:PlatformVersionchanges from3.0.0to3.1.0.Versionbecomes<major>.<minor>.<GITHUB_RUN_NUMBER>(3.1.10050). The local version becomes<major>.<minor>.0-ci.0, which every reader treats as ordinal 0.-getProperty:Version -p:CIRun=true, so image tags,MESHWEAVER_PLATFORM_VERSIONand package versions follow without any workflow change.platform-version.pymakes arm phase D and control-first move3-latestand3.1-latest.3.0.0-latestfreezes on the last old-notation set.AssemblyVersionis pinned to<major>.0.0.0, so it stays3.0.0.0and a minor bump never moves the runtime binding identity (policyplatform-backwards-compatibility).FileVersionandInformationalVersionfollow the line (3.1.0).PlatformVersionSchemeGuardis rewritten for the SemVer shapes and evaluated through real MSBuild. It includes a binding-identity case and a control arm (a labelled line, and run number 0 under CI).edge-images.ymlneeds no change: a version without acisegment falls through to<v>-edge.<run>.Verification (local, Release
-warnaserror, 0 warnings / 0 errors)dotnet msbuild -getProperty:Versiongives3.1.0-ci.0locally,3.1.10050with-p:CIRun=true -p:GITHUB_RUN_NUMBER=10050,3.1.0withPublicRelease, and3.1.0with run number 0 (which the guard rejects).AssemblyVersionis3.0.0.0, and the compiledAssemblyInfowas confirmed after the rebuild.MeshWeaver.Documentation.Test: 48/48 passed (scheme guard, CompiledVersionAttributes, CdImageLeg, ModuleSyncDecision, topic map). The reader tests still pass on top of this change: Graph 83/83, Portal 240/240.Verification of this update (merged
origin/mainand #6208's head; Release-warnaserror, 0 warnings / 0 errors)msbuild -getProperty:Version=3.1.0-ci.0locally and3.1.10050underCIRun+ run 10050;AssemblyVersion=3.0.0.0.test-release-promotes-both-notations.py,platform-version.py,arm-promoted-set.py,resolve-platform.py(218),test-gate-lane-forwards-the-callers-set.py. Workflow guards green: shell, timeouts, yaml keys, permission pairing, runners, PR secret preflight.release.ymlin the new notation (decision 2)v3.0.0keeps promoting the newest3.0.0-ci.<run>set of its commit, unchanged.v<major>.<minor>.0promotes the newest<major>.<minor>.<run>set of its commit, chosen by run number throughplatform-version.py. It adds the clean tag and renames nothing. A non-zero patch (v3.1.5) is refused, because on that line it is a CD run's version. A set from another line, an old-notation build, and the withdrawn slip3.1.0-ci.7841are all refused. (Main'srelease.ymlwould currently promote that slip underv3.1.0.)-latestpointer in ACR or GHCR. CD's arm already moved3-latest/3.<minor>-latestto the set or past it, so a release-side move could only go backwards. GHCRlateststill follows releases. The old notation is unchanged..github/scripts/test-release-promotes-both-notations.py, wired intodotnet-test.yml. It cuts the real step text out ofrelease.ymland runs it against stubbed registry listings: 6 era cases and 9 set cases. Negative control: against main'srelease.ymlit fails (no era decision, the new-notation sets are refused, and the slip is accepted).Not covered here
portal-ai-image.yml:300-313mints its own-ci.version (step 5).Pairs-with: none: no public type or member is removed.
🤖 Generated with Claude Code