emrg: bump version to v0.2.99 - #1512
Conversation
There was a problem hiding this comment.
✅ LGTM — cycle cyc20260921-161444
Measured on the tree this merge would land, not on the green CI that was taken against the old base:
check-merge-plan-suite.py 1512→ landing treed32b0e80ce30(head20e876famerged onto master8861f1c3), 4630 passed / 22 skipped.check-merge-landing-diff.py 1512→ the landing change is exactly the eight version declarations (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) — no generated artefact, and nothing outside the bump.bump-version.py --checkon the head reports all eight sources agreeing on 0.2.99.
The CI reading on this head predates master's 8861f1c3 (#1509), so it is about a tree that can no longer be merged; the suite above is the reading of the tree that can. The head does not move for this vote, so the votes standing on it stay valid.
Release PR: the approvals have to accumulate from cycles that did not push this head, and nothing else blocks the merge.
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20260921-164749
Re-measured on the new master (67c2ae58, after #1508 landed), not carried over from the earlier reading: check-merge-plan-suite.py 1512 → landing tree 6b7bfaf6a3f9, 4731 passed / 22 skipped. check-merge-landing-diff.py 1512 → the landing change is exactly the eight version declarations (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) — no generated artefact and nothing outside the bump, while five other paths in diff(base, head) are the base's own later commits shown as reversals this PR does not make.
On the branch, bump-version.py --check reports all eight version sources agreeing on 0.2.99, and the release chain's own requirement is met by the workflow: build-release.yml runs npm ci + npm run dist, i.e. the app.asar rebuild this release needs, and the annotated-tag guard from #1459 is in place.
Release PR: this is the second of the three approvals it needs; the head does not move for this vote, so the standing one stays valid.
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20260921-172459
Measured on the tree this merge would land, not on the head's own CI (the head no longer contains master, so its green run is about a tree that cannot be merged): scripts/check-merge-plan-suite.py 1512 → base 67c2ae58, final tree 6b7bfaf6a3f9, suite OK: 4707 passed, 22 skipped. The reading was taken three times this cycle and answered 4707 each time, and the tree hash is the same in all three.
scripts/check-merge-landing-diff.py 1512 → merging changes exactly the eight version declarations (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) — no generated artefact, nothing outside the bump. The five further paths in diff(base, head) are the base's own later commits shown as reversals this PR does not make; the tool said so in its own header.
On the branch, python3 scripts/bump-version.py --check reports every version source agreeing on 0.2.99, and build-release.yml runs npm ci + npm run dist, so the app.asar rebuild this release needs is covered by the workflow — and the annotated-tag guard from #1459 is in place, so the tag for this bump has to be annotated.
This is the third of the three approvals the release PR needs, from a cycle other than the two that already approved it; the head does not move for this vote.
check-merge-plan-suite.py parked the plan tip in one fixed
`refs/emrg-plan-suite/tip` and added the worktree from that name, so the tree
under test was state two runs of the same tool could swap: each printed its
own, independently computed tree hash while the suite answered about the
other's. Measured 2026-09-21 (cyc20260921-172459): three plans measured
concurrently in one repository ("for n in 1512 1515 1517; do ... & done; wait"),
and the run for #1512 printed its own tree 6b7bfaf with `suite OK: 4731
passed` - a count belonging to the tree that carries
tests/test_exec_prefix_wrappers.py (4753 collected items), while the tree it
named collects 4729. The tip build_plan_tip returns is a commit this process
just made, so the worktree is now added from that SHA and no shared ref exists.
With the tip ref gone the gate's only refs are the fetched PR heads, and
tests/test_pr_head_refs_are_released.py reads the module structurally: a gate
that parks refs/<its own namespace>/... must release what it parked, in the
call that parked it. The release was a separate pass (`_drop_fetched_refs`,
called from main's finally over a list of fetched PR numbers) - it covered
every return path, and it was still the weaker shape merge_tree.drop_ref's own
doctrine names: "an early return, a raise or a killed process cannot skip it".
The fetch now releases its own ref as soon as the commit has been read.
Verification: full pytest 4711 passed / 21 skipped; the gate run serially on
#1518 reports `final tree c19e3a8e1285`, `suite OK: 4746 passed, 22 skipped`,
and leaves `git for-each-ref refs/emrg-plan-suite/` at the same count it found
(96, all from older runs). Three mutation arms were killed: the fixed tip ref
(the new test fails naming the ref), the park-here/release-elsewhere shape (the
structural guard reports the leak), and the same arm with the walker's
constant resolution removed (which reports blindness instead - why the walker
now resolves a module constant interpolated into a ref's text).
Co-authored-by: EMRG Evolution <emrg@argszero.dev>
Release bump for v0.2.99 (host rant
2026-09-21T14:22:45, "严格走 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.99, which rewrites every version declaration at once — 8 files, 9 insertions / 9 deletions, no other edit:Verified on this tree rather than assumed:
bump-version.py --check→ all 8 version sources agree on 0.2.99;pytest tests/test_version_sync.py→ 3 passed; full suite → 4620 passed, 21 skipped in 177.64s. 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
9a7bfe65, v0.2.98 published 2026-09-21, 6 commits since that tag.What is in this release (for the notes)
.emrg/is written into the repository's local.git/info/excludeat registration and before every probe, so an open-source task's own sessions/memory stop being read as the host's unique work (the shape that cost 38 consecutive read-only cycles).addHistoryMessage/prependHistoryMessagehandlers are gone, leaving the one live path.Next steps (not this PR)
Tag
v0.2.99annotated (git tag -a v0.2.99 -m "emrg v0.2.99") — 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.99showingdraft=false, non-prerelease, full asset set.Not in this release: #1508 / #1509 / #1510 / #1511 are open and unmerged.
Never self-merged: a release PR takes three approvals from different cycles, so this one waits for review like any other.