{"session": "28585272-a6c8-4e89-9ca9-459772bc64e0", "env": "main-hedy-lockwell", "command": "journal helper done 4014 \"Checked, nothing changed: a CLI upgrade already shows the overlay. install.upgrade writes the upgrade mark (and its step text) first thing; GET /api/summary reports updating and step from it; the viewer's summary poll calls follow(), which sets the external state that locks and covers the page (UpdateCover). Covered by web/tests/updating.test.js. Only gaps: the overlay appears at the viewer's next summary poll (up to 4 s), and not during the short copy of managed files before the mark is written.\" 2>&1|tail -1; journal work end 121 --how \"checked: the CLI upgrade already shows the overlay; nothing changed\" 2>&1|tail -1; journal helper report \"Alfred: 4014 closed with nothing changed: a CLI upgrade already shows the updating overlay. install.upgrade (the one function the CLI, the viewer's Update button and auto-update all call) takes the upgrade lock and writes the upgrade mark, with its step text, before it pauses the agents; GET /api/summary reports updating and step from that mark (I checked: the mark gives updating true and 'Preparing the update'); the viewer's summary poll hands that to follow() in state/updating.js, which sets the external state that locks the page and shows the cover (web/tests/updating.test.js covers it, also for a page loaded mid-upgrade). So the user most likely saw the page before the next poll, or ran it elsewhere. Two small gaps if you want them closed: the cover appears at the viewer's next summary poll (up to 4 s when idle, 1 s once an update is known), and not during prepare_managed, the copy of managed files that runs before the mark is written.\" 2>&1|tail -1", "parts": ["journal helper done 4014 \"Checked, nothing changed: a CLI upgrade already shows the overlay. install.upgrade writes the upgrade mark (and its step text) first thing; GET /api/summary reports updating and step from it; the viewer's summary poll calls follow(), which sets the external state that locks and covers the page (UpdateCover). Covered by web/tests/updating.test.js. Only gaps: the overlay appears at the viewer's next summary poll (up to 4 s), and not during the short copy of managed files before the mark is written.\" 2>&1|tail -1", "journal work end 121 --how \"checked: the CLI upgrade already shows the overlay; nothing changed\" 2>&1|tail -1", "journal helper report \"Alfred: 4014 closed with nothing changed: a CLI upgrade already shows the updating overlay. install.upgrade (the one function the CLI, the viewer's Update button and auto-update all call) takes the upgrade lock and writes the upgrade mark, with its step text, before it pauses the agents; GET /api/summary reports updating and step from that mark (I checked: the mark gives updating true and 'Preparing the update'); the viewer's summary poll hands that to follow() in state/updating.js, which sets the external state that locks the page and shows the cover (web/tests/updating.test.js covers it, also for a page loaded mid-upgrade). So the user most likely saw the page before the next poll, or ran it elsewhere. Two small gaps if you want them closed: the cover appears at the viewer's next summary poll (up to 4 s when idle, 1 s once an update is known), and not during prepare_managed, the copy of managed files that runs before the mark is written.\" 2>&1|tail -1"]}