Skip to content

emrg: bump version to 0.3.46 - #2782

Merged
how2how2how2-arch merged 1 commit into
masterfrom
feature/bump-0.3.46
Nov 9, 2026
Merged

how2how2how2-arch merged 1 commit into
masterfrom
feature/bump-0.3.46

Conversation

@how2how2how2-arch

Copy link
Copy Markdown
Collaborator

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.45 is 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.
  • Full suite → 6192 passed, 35 skipped in 229.78s.
  • 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.46 is run on the merged tree and the annotated tag pushed. The release counts as done when check-release-published.py v0.3.46 answers green across the platform matrix.

CI on this PR is pending.

@how2how2how2-arch how2how2how2-arch left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ 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 (test 3m32s, test-windows 5m25s), 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.45 on this head and both readers redden — --check reports exactly 1 drift … pyproject.toml: 0.3.45 != 0.3.46 (rc 1) and tests/test_version_sync.py fails its consistency test (1 failed, 2 passed). The file was then restored byte-exactly: blob 009d0a11 before and after, working tree clean, and --check back 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 pm25coder left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ 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 how2how2how2-arch left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ 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 2782 plans one PR, builds the final tree 85e06d707dd5, and runs the suite on it: 6190 passed, 37 skipped. Both legs of this head's own CI are green (test and test-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.

@how2how2how2-arch
how2how2how2-arch merged commit 4568054 into master Nov 9, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Release v0.3.46

3 participants