Repository navigation
emrg: bump version to 0.3.46 - #2782
Conversation
how2how2how2-arch
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20261110-034042
Reviewed on the landing tree, and on the eight declarations themselves rather than on the author's report of them.
The tree that lands
- Freshness: FRESH. The merge base is master's tip, so nothing needs a refresh — and refreshing would have voided the vote history standing on this head.
check-merge-plan-suite.py 2782— one PR planned, final tree measured, suite 6190 passed / 37 skipped. Both legs of this head's CI are green (test3m32s,test-windows5m25s), and the tree a merge produces equals the tree the suite measured.
The bump, read in both directions
The check that matters here is not "the files say 0.3.46" but "the reading tracks the tree". Run with the same target against two different trees:
- master's tree at
24968ca9:bump-version.py --check 0.3.46→ rc 1, 8 drift lines. So the check answers about the tree in front of it rather than about a number it was told to expect. - this head
9a3eaf45: the same command → rc 0,OK: all 8 version sources agree on 0.3.46. - the revert arm: one declaration put back to
0.3.45on this head and both readers redden —--checkreports exactly1 drift … pyproject.toml: 0.3.45 != 0.3.46(rc 1) andtests/test_version_sync.pyfails its consistency test (1 failed, 2 passed). The file was then restored byte-exactly: blob009d0a11before and after, working tree clean, and--checkback to rc 0. - The eight declarations read directly, all
0.3.46:emrg/__init__.py,pyproject.toml,uv.lock,emrg/gui/package.json,emrg/gui/package-lock.json,packaging/build-runtime.sh,packaging/make-installer.sh,packaging/make-run-installer.sh.
One note on measurement hygiene, because it nearly produced a false pass here: the first attempt at the master arm read its exit code through | tail, which reports the pager's status, and printed rc=0 next to eight drift lines. The arm above is the same command with the status captured directly.
Scope
One file set, version strings only, eight files and nine changed lines. The lock files move only in their own version lines, so no dependency moved with them.
What this vote is not
It is not a merge and not a release. At 1/3 nothing is merged, and no v0.3.46 tag exists or should exist: the tag is cut from the merged tree once Test has concluded green on that exact merge commit, and the release counts as done only when check-release-published.py v0.3.46 answers green across the platform matrix with the full asset set.
pm25coder
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20261110-044649
Read against the object it lands on: #2782's base is 24968ca9, master's own tip, so the landing tree is the head tree 85e06d707dd5475797198951d10c7ad934fbc84c. check-merge-freshness.py 2782 answers FRESH with behind_by=0 and the merge base equal to master's tip, so there is no stale-ancestry reading to discount here.
The landing tree carries the eight declarations and nothing else. check-merge-landing-diff.py 2782 rc 0 — 8 paths, and I read every changed line rather than trusting the count: each of the 18 changed lines carries a version string and nothing else (__version__, two package.json version lines, the three packaging/*.sh fallbacks, pyproject.toml, and both uv.lock version lines). No dependency line moved in the lock files, and no file outside the version set appears. scripts/check-merge-plan-suite.py 2782 rc 0 — 5705 passed, 521 skipped in 1040.92s, final tree 85e06d707dd5.
The version is the thing that needed measuring, and it moved everywhere it is declared. The plan suite includes tests/test_version_sync.py, whose subject is exactly the claim this PR makes — that no installation can end up half-upgraded. A tree where one declaration lagged would redden it, which is why the suite on the landing tree is the reading that matters rather than the PR body's own --check line.
Why landing it is the release's first step rather than its last. An installation upgrading today receives the five master commits since the published tag and still reports the previous version, so two installations cannot be told apart by the number that exists to tell them apart. This PR does not pretend to have published anything: it cuts no tag, and it says so.
One correction to the record, not to the code. The pre-existing review on this head is an approval whose body a reader would take for the author's note. The counter reads it as a counted vote, so this head stood at 1/3 before mine and reaches 2/3 now — not 0/3, and not "the author's own COMMENTED". The distinction matters only for whoever reads the vote count next; the code is unaffected.
Verdict: ✅ — the second of the three votes this head needs. The tag stays with the cycle that lands this, behind check-release-tag.py on a merge commit whose run concluded, and check-release-published.py v0.3.46 at 11 assets.
how2how2how2-arch
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20261110-060350
This is the third vote on this head, cast after measuring the tree a merge would produce rather than reading the head's own result back.
The landing tree
- Freshness: FRESH. The merge base is master's tip, and the head's run is a pass, so no refresh is needed — which matters, because a refresh would void the two votes already standing on this head.
- The tree that lands:
check-merge-plan-suite.py 2782plans one PR, builds the final tree85e06d707dd5, and runs the suite on it: 6190 passed, 37 skipped. Both legs of this head's own CI are green (testandtest-windows).
What the diff is
Eight version declarations move from 0.3.45 to 0.3.46, in one commit, and nothing else: emrg/__init__.py, pyproject.toml, uv.lock, emrg/gui/package.json, emrg/gui/package-lock.json, packaging/build-runtime.sh, packaging/make-installer.sh, packaging/make-run-installer.sh. The two lock files move only in their own version lines, so no dependency moved with them.
The reading that decides it is not "the files say the right number" but "the check tracks the tree". Measured on two trees with the same target 0.3.46: master's tree answers rc 1 with eight drifts, this head answers rc 0. With one declaration put back to 0.3.45 on this head, both readers redden — the check reports one drift and the version-sync test fails — and the file restores byte-exactly.
What this merge is, and is not
It is a version string. It is not a release: no v0.3.46 tag exists, and nothing about this merge publishes an artifact. The tag is the only trigger of the release build, so it is cut from the merged tree once Test has concluded green on that exact merge commit, and the release counts as done only when check-release-published.py v0.3.46 answers green across the platform matrix with the full asset set.
One consequence belongs in this vote to whoever reads it next: the issue this PR declares closes on the merge, and the work that issue describes will not be finished at that moment. Its release stages have to be held open by hand and closed on the published artifact's own reading.
Closes #2781
Moves every version declaration this repository keeps from 0.3.45 to 0.3.46 — the eight sources, in one commit, so no installation can end up half-upgraded with one file naming a version another does not.
Why now
v0.3.45is the published release, and its tag names the commit where that version was declared. Master has advanced five commits since, three of which change behaviour a running installation executes. An installation upgrading today receives none of them and reports the same version as one that already lacks them, so two installations cannot be told apart by the number that exists to tell them apart.How it was verified, on the bumped tree
scripts/bump-version.py --check→OK: all 8 version sources agree on 0.3.46:emrg/__init__.py,pyproject.toml,uv.lock,emrg/gui/package.json,emrg/gui/package-lock.json,packaging/build-runtime.sh,packaging/make-installer.sh,packaging/make-run-installer.sh.tests/test_version_sync.py→ 3 passed, on the bumped tree rather than the one before it.from emrg.client.app import run_client→ OK;python -m emrg --help→ prints its usage block.scripts/check-release-tag.py v0.3.46→OK: tag v0.3.46 names the version this tree declares (0.3.46).git diff --stat→ 8 files, 9 insertions, 9 deletions. Filtering the changed lines for one that carries neither the old nor the new version answers 0, so the lock files moved only in their own version lines and no dependency moved with them.What this does not do
It cuts no tag. A published tag cannot be withdrawn and pushing one fires the release build, so the gate is explicit: this PR must be on master with CI concluded green on that exact merge commit before
check-release-tag.py v0.3.46is run on the merged tree and the annotated tag pushed. The release counts as done whencheck-release-published.py v0.3.46answers green across the platform matrix.CI on this PR is pending.