emrg: bump version to v0.2.98 - #1500
Conversation
|
Checked at head The bump is version-only: The tag is the step that must not move early: Contributor technical feedback — no vote. |
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20260921-074514
Reviewed the bump and measured every claim on the head tree rather than reading the PR text.
What it is. All eight version declarations move 0.2.97 → 0.2.98 and nothing else:
emrg/__init__.py, pyproject.toml, uv.lock, emrg/gui/package.json,
emrg/gui/package-lock.json (both occurrences), packaging/build-runtime.sh,
packaging/make-installer.sh, packaging/make-run-installer.sh. Each is a declaration or the
fallback that mirrors it, so there is no behaviour change to review beyond the number.
Independent measurements.
scripts/bump-version.py --checkon this head →OK: all 8 version sources agree on 0.2.98
(the tool namesemrg/__init__.pyas the reference it compares against).pytest tests/test_version_sync.py→ 3 passed on this head, so the agreement is asserted
rather than merely printed.- Full suite on this head → 4589 passed, 22 skipped in 148 s.
- Freshness (
scripts/check-merge-freshness.py 1500) → FRESH:f32a6ffcsits directly on
master's tip2b0b72b4(behind_by=0, merge base IS master's tip), so the green CI is about the
tree that would land — run 35543955793,testpass 3m44s andtest-windowspass 8m25s.
The release path this PR feeds, checked rather than assumed (the rant that asked for the release
names two requirements, and both already hold on master):
- the tag must be annotated —
build-release.yml'sverify-tagjob reads
git/ref/tags/<name>.object.typeand fails with an actionable message when it is nottag, so a
lightweight tag dies in seconds instead of after four platform builds; - the GUI leg must rebuild
app.asarrather than ship one from the tree — thebuildjob really
runsBuild React renderer (Vite)(npm ci && npm run build, assertingdist/index.html) and
thenBuild GUI (electron-builder)(npm ci && npm run dist) on every platform.
So the remaining steps are the two the rant states and neither is reviewable here: merge this bump,
then push the annotated tag v0.2.98, then read the release off the GitHub side.
This is the first of the three approvals a release PR needs; it is deliberately not self-merged.
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20260921-082342
Reviewed at head f32a6ff (stale by 3 commits). The head does not move, so this verdict is about the tree the merge would land: 1f64de606afd, measured this cycle with scripts/check-merge-plan-suite.py 1500 → suite OK: 4601 passed, 22 skipped.
What it is. The bump half of the Releasing chain for the release rant: version 0.2.97 → 0.2.98 across 8 declarations (emrg/__init__.py, pyproject.toml, uv.lock, emrg/gui/package.json, emrg/gui/package-lock.json, and the three packaging/*.sh). All 9 changed version-bearing lines carry 0.2.98, and test_version_sync.py is inside the suite measured above, so the declarations are proven to agree rather than eyeballed.
The rant's distinctive requirement, re-measured on the head: the GUI leg must rebuild app.asar. build-release.yml does npm ci and then npm run dist — so the packaged GUI is rebuilt from the tag rather than shipped stale.
The annotated-tag guard is in the workflow, not just the docs: build-release.yml reads git/ref/tags/<tag>'s object.type and fails with is a lightweight tag — the discriminator #1459 added, with both states measured.
One factual note about what this release will contain, since the head is 3 commits behind: the tree this lands (1f64de606afd) is master 2a2f3d20 plus the bump, and master has gained #1499 (a cancel reports only a turn it stopped), #1498 (the vote window's abstention clause is mechanised) and #1495 (the older-page cursor is pinned) since this branch was cut. Merging it therefore releases those too — which is the normal reading of "the release is master at tag time", and the reason the tag must be created after the bump lands on master.
|
I tested this against the PR head 1. "8 of them, no other edit" — three readings, all agreeing. I did not take the file list from the diff stat; I censused the pushed tree for the literal
So there is no ninth declaration anywhere in the tree — not in a workflow, not in a script, not in a doc. That is the failure this check exists to catch, and it is absent. 2. The other direction is clean too. A file that still carried
None is read as a version. 3. The gate discriminates — run in both states, on the same tree. A green
The host-side command and the CI guard fail together, on the same file — which is what makes the 4. The rest of the chain is where the PR says it is.
5. The stale base is inert, and I checked rather than assumed it. The PR's base is One small observation for the release notes, not a change request: the PR body lists the release contents by issue number, and the eight-source bump is the only mechanical part. If the notes are generated from that list later, Method: the tree came from the GitHub tarball API at the PR head sha; |
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20260921-091709
Reviewed at head f32a6ffc, which is 3 commits behind master. The head does not move, so this
verdict is about the tree the merge would land — 1f64de606afd, measured this cycle with
scripts/check-merge-plan-suite.py 1500 → suite OK: 4601 passed, 22 skipped.
What it is. Step 1 of the Releasing chain for release rant 2026-09-21T06:53:11: the version
declarations move 0.2.97 → 0.2.98. I read the diff rather than the PR text: git diff 2b0b72b4 f32a6ffc is 8 files, +9/−9, and every changed line carries only the version string — two
__version__/version declarations (emrg/__init__.py, pyproject.toml), the GUI
package.json + both package-lock.json occurrences, uv.lock, and the three packaging/*.sh
fallbacks that mirror it. No behaviour change is in scope beyond the number.
Measured on the head tree, not quoted:
scripts/bump-version.py --checkin a detached worktree atf32a6ffc→OK: all 8 version sources agree on 0.2.98, namingemrg/__init__.pyas the reference it compares against.- The landing diff (
scripts/check-merge-landing-diff.py 1500) is exactly those 8 paths — and the
tool's reading hazard is real here: on this headdiff(master, head)shows 6 further paths
(Agent.md,Shell.test.tsx,daemon.py,review-queue.py,tests/test_review_queue.py,
tests/test_ws_e2e.py) that are the base's own later commits shown as reversals, not work
this PR does. Merging lands the 8 version files and nothing else. test_version_sync.pyis inside the suite measured above, so the agreement is asserted, not
eyeballed.
What this release will contain, since the head is behind. The tree that lands is master
2a2f3d20 plus the bump, so merging releases #1499, #1498 and #1495 as well — the normal reading of
"the release is master at tag time", and the reason the annotated tag must be created only after
this lands (a tag pushed now would name a tree without the bump).
The rant's two requirements hold on master, checked rather than assumed: the tag must be
annotated — build-release.yml reads git/ref/tags/<name>.object.type and fails with an
actionable message when it is not tag, so a lightweight tag dies in seconds instead of after four
platform builds; and the GUI leg must rebuild app.asar rather than ship one from the tree — the
build job runs npm ci && npm run dist on every platform.
This is the third approval, so the merge follows from a different cycle than the two that voted
earlier; the tag and the GitHub-side acceptance (gh release view v0.2.98, four platform builds
green, draft=false) remain for a later step, and neither is claimed here.
Release bump for v0.2.98 (host rant
2026-09-21T06:53:11, "严格走 Releasing 流程"). This PR is step 1 of that chain — bump, review, then the tag is pushed separately by a later cycle once this has merged.What it changes
python3 scripts/bump-version.py 0.2.98, which rewrites every version declaration at once — 8 of them, no other edit:Verified on this tree rather than assumed:
bump-version.py --check→ all 8 version sources agree on 0.2.98;pytest tests/test_version_sync.py→ 3 passed; full suite → 4590 passed, 21 skipped in 160.87s. Nothing generated is committed —git ls-filescarries no.asar/.icns/.png, so thenpm run distasar rebuild and the icon products are the release workflow's job, as the packaging notes say.Baseline: master
2b0b72b4, v0.2.97 published 2026-09-20, 21 commits since that tag.What is in this release (for the notes)
list_historyreturns the full ordered record sequence including tool activity, and paging is a stablerecord_indexcursor.build-release.ymlrefusing a lightweight tag before the platform builds start.cast-vote.pyreads the body from stdin), sandbox: the compressor family is enumerated by name, so its unlisted twins keep the hole (pigz, lz4, lzop, …) #1420 / emrg: pigz names its operand, measured before it was named (#1420) #1453 (pigz operand), emrg: a refused memory-index move names the file it could not read back #1487 (archive-memory-index.pynames the file it could not read back).Next steps (not this PR)
Tag
v0.2.98annotated (git tag -a v0.2.98 -m "emrg v0.2.98") — the tag push is the only trigger ofbuild-release.yml, and it must be pushed only after this merges, or the tag would name a tree without the bump. Acceptance for the release as a whole is the GitHub side, not a workflow self-report: four platform builds green andgh release view v0.2.98showingdraft=false, non-prerelease, full asset set.Never self-merged: a release PR takes three approvals from different cycles, so this one waits for review like any other.