From 349d26457650941f3241478a7dd93eaf2d781583 Mon Sep 17 00:00:00 2001 From: Tyrie Vella Date: Wed, 30 Sep 2026 14:06:01 -0700 Subject: [PATCH 1/2] Document the release lines and the divergent version value The GVFSMajorAndMinorVersion value in release.yml differs between vnext and master. Nothing in the file says this is deliberate, and nothing in the repository describes the two release lines. A future merge conflict on this line could take the other branch's value and undo a version bump without notice. No CI job parses release.yml, so nothing downstream would catch it. Add a comment above the value that records the intent. The comment names the two branches that diverge, but it states no version numbers, so it stays correct after vnext is promoted. Add a "Release lines and version numbers" section to AGENTS.md. The section describes what master and vnext build, how the pipeline forms the full version and tag, and why a cross-line merge always uses a merge commit. Assisted-by: Claude Opus 5 Signed-off-by: Tyrie Vella --- .azure-pipelines/release.yml | 3 +++ AGENTS.md | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/.azure-pipelines/release.yml b/.azure-pipelines/release.yml index aac9b3c167..d866a577f4 100644 --- a/.azure-pipelines/release.yml +++ b/.azure-pipelines/release.yml @@ -51,6 +51,9 @@ parameters: arch: arm64 variables: + # This value is intentionally divergent between vnext and master. + # On a merge conflict here, do not take the other branch's value - + # confirm which line this branch ships. - name: 'GVFSMajorAndMinorVersion' value: '2.1' - name: 'GVFSRevision' diff --git a/AGENTS.md b/AGENTS.md index 31ac6ef919..1a8a42a47e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -215,6 +215,32 @@ release only carries the installer and symbols**: `SetupGVFS..exe` the compiled `MinimumGitVersion` constant in `Version.props`, which is changed separately and rarely. +## Release lines and version numbers + +Two branches carry active work: + +- **`master`** — the shippable line. Public releases are cut from it. +- **`vnext`** — integration for the next minor release. + +Each line carries its own `major.minor`, set by `GVFSMajorAndMinorVersion` in +`.azure-pipelines/release.yml`. The release pipeline appends the build number +to form the full version and the release tag, so `GVFSMajorAndMinorVersion` +of `2.0` with build number `26229.1` produces version `2.0.26229.1` and tag +`v2.0.26229.1`. Today `master` carries `2.0` and `vnext` carries `2.1`. + +That variable is the only line in `release.yml` that differs between the two +branches, and the difference is deliberate. **Do not resolve a merge conflict +on it by taking the other branch's value.** Confirm which line the branch +ships first. Taking the wrong side stamps builds from one line with the other +line's version, and nothing downstream catches it — `release.yml` is +`trigger: none` / `pr: none`, and no GitHub workflow parses it. + +`master` is merged into `vnext` regularly so the lines do not drift. Finished +`vnext` work is promoted by merging `vnext` into `master`, which carries the +version value along with the feature work. Both directions use a real merge +commit — **never squash or rebase a cross-line merge**, because that destroys +the merge base and the same commits resurface as conflicts on the next sync. + ## Feature flags Product feature flags are **git config** keys under the `gvfs.` prefix (not a From cef5a49fb5af5bf3d692ad4d205b0f4657d5286e Mon Sep 17 00:00:00 2001 From: Tyrie Vella Date: Tue, 6 Oct 2026 11:04:07 -0700 Subject: [PATCH 2/2] Update .azure-pipelines/release.yml Co-authored-by: Marli Remash --- .azure-pipelines/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.azure-pipelines/release.yml b/.azure-pipelines/release.yml index d866a577f4..6c55a05253 100644 --- a/.azure-pipelines/release.yml +++ b/.azure-pipelines/release.yml @@ -51,7 +51,7 @@ parameters: arch: arm64 variables: - # This value is intentionally divergent between vnext and master. + # GVFSMajorAndMinorVersion is intentionally divergent between vnext and master. # On a merge conflict here, do not take the other branch's value - # confirm which line this branch ships. - name: 'GVFSMajorAndMinorVersion'