emrg: gui — restore upgrade banner in React shell (fix rant 2026-08-27T21:54:51) - #1049
Merged
Merged
Conversation
…nts in daemonBridge + GUI-only relaunch IPC)
argszero
commented
Aug 27, 2026
argszero
left a comment
OwnerAuthor
There was a problem hiding this comment.
✅ LGTM — cycle cyc20260827-230933
argszero
commented
Aug 27, 2026
argszero
left a comment
OwnerAuthor
There was a problem hiding this comment.
✅ LGTM — cycle cyc20260827-232221 (2/3). Head bae227c unchanged since cyc20260827-230933 LGTM, CI test + test-windows green (33085725605), MERGEABLE/CLEAN. relaunchGui verified GUI-only (app.relaunch + app.exit, no daemon-stop path).
argszero
commented
Aug 27, 2026
argszero
left a comment
OwnerAuthor
There was a problem hiding this comment.
✅ LGTM — cycle cyc20260827-233730 (3/3). Head bae227c unchanged since cyc20260827-232221 LGTM (2/3), CI test + test-windows green (33085725605), MERGEABLE/CLEAN. No ❌ in review history — 3 consecutive ✅ from distinct cycles (230933, 232221, 233730). Merging.
Uh oh!
There was an error while loading. Please reload this page.
argszero added a commit
that referenced
this pull request
Aug 27, 2026
…derer count against reality (#1052) * emrg: test — fix Agent.md renderer count drift (445->448) + guard renderer count against reality R2254: #1049/#1050 added renderer tests (daemonBridge/Shell/SettingsPanel/ WorkspaceView) without bumping Agent.md — the renderer count drifted 445 -> 448 silently. The doc-count guard only validates each "(N: ...)" line's internal sum (parts == headline), not reality, and the pytest CI job has no node_modules to run vitest. FIX: Agent.md renderer line corrected to 448 with per-file counts aligned to vitest's executed numbers (workspaceView 29->27, WorkspaceView 8->10, daemonBridge 14->15, Shell 24->25, SettingsPanel 19->20). GUARD: test_doc_counts.py::test_renderer_count_matches_docs — a static count of test-case definitions (^\s*(it|test)\( per file under renderer/src) equals vitest's executed total exactly (verified for all 44 files), so it runs in plain pytest and turns any future renderer-count drift red immediately. Python tests 1127 -> 1128 (new guard), Agent.md synced. * test: escape regex in docstring (fix SyntaxWarning in renderer count guard) --------- Co-authored-by: argszero <argszero@gmail.com> Co-authored-by: EMRG Evolution <emrg@argszero.dev>
argszero added a commit
that referenced
this pull request
Aug 28, 2026
… theme persistence + integrity guard, renderer count guard, llm-cost-report, vision-aware token estimate, auto-title) (#1058) Co-authored-by: argszero <argszero@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The GUI upgrade notification ("new version installed — restart to apply" banner) was silently broken since the React migration (Batch 5, #1024): the renderer's event bridge dropped
upgradeframes. This PR restores the full chain.Root cause
main.jsheartbeat detectsinstalled_version ≠ current_versionand sends a dedicatedupgradeevent every 15s;preload.jsforwards it; butrenderer/src/lib/daemonBridge.tshandleFrame()had noupgradecase → the frame fell into the default "unknown event" branch and was silently dropped. No UI component referenced the upgrade i18n keys either.Changes
UpgradeDataframe type,upgradeBanner: {current, installed} | nullstore field, and anupgradecase (dedupe per installed version — the 15s heartbeat re-sends the same version, and after dismiss the banner must not reappear).#upgrade-banneroverlay (CSS already survived inrenderer/css/layout.css, theme-token based): from→to message (falls back to plain message), restart button, dismiss button. Restart failure surfaces as a system message viaapp.upgradeRestartFailed.emrg:relaunchGuiIPC:app.relaunch() + app.exit(0)— GUI process only. The existingemrg:restartDaemonchannel stops the daemon (emrg._stop_all --skip-gui) which is forbidden for this purpose: the daemon is EMRG's living core (MANIFESTO 最高原则) and must not be killed by an upgrade-banner click. After relaunch the new GUI process reuses the running daemon; if the daemon itself needs new code, the heartbeat keeps driving the banner.relaunchGui.Verification
tsc --noEmitclean;vite buildOKCloses rant 2026-08-27T21:54:51 (GUI upgrade notification broken after React migration).