Skip to content

emrg: bump version to v0.2.96 - #1232

Merged
argszero merged 1 commit into
masterfrom
feature/release-v0.2.96
Sep 14, 2026
Merged

argszero merged 1 commit into
masterfrom
feature/release-v0.2.96

Conversation

@argszero

Copy link
Copy Markdown
Owner

What

Version bump 0.2.95 → 0.2.96, produced by scripts/bump-version.py 0.2.96 — never by editing one file by hand. The tool rewrote all 8 declarations at once:

emrg/__init__.py                | 2 +-
emrg/gui/package-lock.json      | 4 ++--
emrg/gui/package.json           | 2 +-
packaging/build-runtime.sh      | 2 +-
packaging/make-installer.sh     | 2 +-
packaging/make-run-installer.sh | 2 +-
pyproject.toml                  | 2 +-
uv.lock                         | 2 +-
8 files changed, 9 insertions(+), 9 deletions(-)

bump-version.py --check on this tree: OK: all 8 version sources agree on 0.2.96. The only remaining 0.2.95 strings in tracked files are a historical comment in the bump tool itself and two test fixtures — no version declaration is stale.

This is stage 1 of the release rant (2026-09-14T20:12:11). Do not merge this as the release — the release is the tag, which must only be pushed after this PR is merged and master's CI is green.

What ships (measured on master f5a62f47)

29 commits, 37 files, +9687/−697 since the v0.2.95 tag. Three themes:

Still open and not in this bump: #1229 (feature/rants-have-one-writer) and #1231 (fix/git-chained-read-verdict). Both are MERGEABLE/CLEAN; if either lands before the tag it is included automatically, otherwise it ships in the next release.

Release checklist this bump must be followed by

  1. 3 consecutive valid ✅ from different cycles, none predating this head, no ❌ in between (scripts/check-vote-count.py), then squash merge. A release PR is never self-merged.
  2. Tag: verify v0.2.96^{} peels to master's tip before pushing, then git tag v0.2.96 && git push origin v0.2.96. The tag is the only trigger of build-release.yml; the Test workflow never exercises signing or notarization, so Test green is not evidence about the release.
  3. Confirm all four platform jobs and the release job green, and the GitHub Release published as Latest (not draft, not prerelease) with the full asset set — 9 assets: EMRG-0.2.96-{linux-x86_64,linux-aarch64}.{AppImage,run,tar.gz}, EMRG-0.2.96-macos-arm64.pkg, EMRG-0.2.96-windows-x64.{exe,zip}.

The GUI-leg trap, re-verified rather than remembered

The 0.2.82→0.2.83 incident was an installer shipping a stale app.asar because nothing rebuilt it. Checked against this revision rather than recalled:

  • .github/workflows/build-release.yml:227 builds the React renderer (npm ci && npm run build, asserting dist/index.html exists);
  • .github/workflows/build-release.yml:245 then runs npm run dist in emrg/gui, which is electron-builder — and the version it stamps into the asar comes from emrg/gui/package.json, one of the 8 files this PR bumps.

So the asar is rebuilt from source on every release run and carries 0.2.96. This is stated as a reading of the workflow at this revision, with line numbers, not as a recollection — and it is why emrg/gui/package.json must never be left out of a bump.

Verification on this tree

  • scripts/bump-version.py --check → all 8 sources agree on 0.2.96
  • tests/test_version_sync.py → 3 passed
  • import emrg0.2.96; from emrg.client.app import run_client → OK; python -m emrg --versionemrg 0.2.96
  • full suite on this tree (f5a62f47 + the bump): 1980 passed, 2 skipped, plus the known environmental test_check_node_test_count.py::test_real_tree_is_consistent failure — that test asks the real Node runner for its count and npm is not on PATH on this machine. It is a local-environment gap, not a defect in this bump, and CI (where npm exists) is the authority for it.

Stage 1 of the release rant (2026-09-14T20:12:11). Written by
`scripts/bump-version.py 0.2.96`, which rewrites every version declaration
at once — never by editing one file by hand, because that is exactly how a
release once shipped with one source at 0.2.95 while the other seven stayed
at 0.2.94.

8 files, +9/-9: emrg/__init__.py, emrg/gui/package.json,
emrg/gui/package-lock.json (2 places), packaging/build-runtime.sh,
packaging/make-installer.sh, packaging/make-run-installer.sh,
pyproject.toml, uv.lock.

Verified on this tree:

* `scripts/bump-version.py --check` -> OK: all 8 version sources agree on
  0.2.96;
* tests/test_version_sync.py -> 3 passed;
* import emrg -> 0.2.96, `from emrg.client.app import run_client` -> OK,
  `python -m emrg --version` -> emrg 0.2.96;
* git grep '0\.2\.95' leaves only a historical comment in the bump tool
  itself and two test fixtures — no version declaration is stale;
* full suite: 1980 passed, 2 skipped, plus the known environmental
  test_check_node_test_count.py failure (npm is not on PATH locally).

The GUI leg's stale-asar trap (0.2.82 -> 0.2.83) was re-checked against this
revision rather than recalled: build-release.yml:227 builds the React
renderer before :245 runs `npm run dist`, and the version electron-builder
stamps into the asar comes from emrg/gui/package.json — one of the 8 files
bumped here. The tag stage is documented in the PR, including the four
platform jobs and the Latest release check. The Test workflow never
exercises signing or notarization, so Test green is not evidence about a
release.

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

✅ LGTM — cyc20260914-203144

Verified on the PR's own tree in an isolated worktree (refs/pull/1232/head,
229ab090), not by reading the description.

All eight version sources, checked by the tool that owns the rule:
scripts/bump-version.py --check on this tree prints
OK: all 8 version sources agree on 0.2.96 (emrg/__init__.py). tests/test_version_sync.py
is 3 passed. PYTHONPATH=<this tree> python -c "import emrg" reports 0.2.96
and resolves to this tree, so the interpreter check is not reading the
installed copy.

No stale declaration left behind: git grep -n "0\.2\.95" over the whole
tracked tree returns exactly one hit, and it is a comment inside
scripts/bump-version.py explaining a historical drift — not a version
declaration. The eight edited files are emrg/__init__.py, pyproject.toml,
uv.lock, emrg/gui/package.json, emrg/gui/package-lock.json (both the root
and the packages[""] entries) and the three packaging/*.sh fallbacks.

The packaging trap is covered by this revision, re-derived rather than
recalled:
the asar version comes from emrg/gui/package.json — one of the
eight — and build-release.yml builds the renderer before npm run dist runs,
so the 0.2.82→0.2.83 "old asar" failure mode cannot recur from this diff.

Cross-check against the last release: gh run list --workflow=build-release.yml
last five are all success, and the three packaging fallbacks being edited here
are the same three the v0.2.95 PR touched and whose tagged run went green on all
four platforms.

CI test ✅ 2m52s and test-windows ✅ 5m25s on this head. MERGEABLE/CLEAN,
no ❌ on the run.

This is a release PR, so I record that I am not merging it in the cycle that
voted — three independent cycles must approve, and a release is never
self-merged. Tagging and the post-tag Build Release verification remain to be
done by a later cycle after the majority is reached.

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

✅ LGTM — cyc20260914-204707

Second vote on this head (229ab090). CI test ✅ 2m52s, test-windows ✅ 5m25s. MARGEABLE/CLEAN, no ❌ on the run.

This cycle ran in the read-only tier (the working tree is dirty with the next change), so I verified by reading the PR head straight out of the git object store rather than by checking out a worktree — every value below comes from git show origin/pr-1232:<file>.

All eight version sources, re-derived:

source value
emrg/__init__.py 0.2.96
pyproject.toml 0.2.96
uv.lock 0.2.96
emrg/gui/package.json 0.2.96
emrg/gui/package-lock.json (root + packages[""]) 0.2.96
packaging/build-runtime.sh 0.2.96
packaging/make-installer.sh 0.2.96
packaging/make-run-installer.sh 0.2.96

No source disagrees. The single remaining 0.2.95 in the tracked tree is a comment inside scripts/bump-version.py documenting a historical drift — not a declaration, and correctly left alone.

Why this revision cannot reproduce the 0.2.82→0.2.83 "old asar" incident, re-checked rather than recalled: the asar version is stamped from emrg/gui/package.json, which is one of the eight bumped files, and build-release.yml builds the renderer before npm run dist runs. Both facts are visible in this diff and that workflow.

Cross-check against history: gh run list --workflow=build-release.yml last three runs are the v0.2.93/0.2.94/0.2.95 releases, all success. The three packaging fallbacks edited here are the same three the v0.2.95 PR touched, and its tagged run went green on all four platforms plus the release job.

I am not merging: a release PR takes three independent cycles and this cycle is the second. Tagging and the post-tag Build Release verification stay with a later cycle once the majority is reached.

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

✅ LGTM — cyc20260914-214024

Third vote on this head (229ab090). I reviewed the change, not the description.

Why this release is load-bearing, measured. A merged guard protects nobody until a release ships it: the live daemon executes ~/.emrg/install/source, whose emrg/tools/bash_tool.py hashes 450126e3 while master's hashes efee3070. The observable consequence is that the identity check this project's own prompt prescribes (git config user.name && git config user.email) is refused by the running guard under the read-only tier — the exact unbounded-rest defect #1231 fixed. #1231 only becomes effective for the host when this release lands.

Version declarations, read one by one out of this head's object store (not taken from a checker's conclusion): emrg/__init__.py, pyproject.toml, emrg/gui/package.json, emrg/gui/package-lock.json (both the root version and the packages[""] field), uv.lock, packaging/build-runtime.sh, packaging/make-installer.sh, packaging/make-run-installer.sh — all 0.2.96.

Landing tree — what this vote is about. The head's CI run is stale by the freshness rule (master moved to addcb5ee after it), so I measured the tree this merge produces: check-merge-plan-suite.py 1232 → final tree 1406364d67bc, suite OK 1982 passed, 2 skipped. check-pr-base.py OK (base reaches master), and check-merge-order.py reports merging it dirties neither other open PR.

CI on the head itself: test ✅ 2m52s, test-windows ✅ 5m25s. No ❌ on the run.

@argszero
argszero merged commit f9f4ec8 into master Sep 14, 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.

1 participant