v0.60.0
feder-cr/invisible_dotsv0.60.0Sep 14, 2026by github-actions[bot]
Upgrading?
AI Summary
Fixes a critical bug where queued messages were lost during server restarts due to incorrect interpretation of the `fresh` flag. It also cleans up orphaned queued messages from local storage when a conversation is deleted and adds version detection for pages open across an upgrade.
Key Highlights
- Fixed queued message loss during server restarts caused by `fresh` flag logic
- Orphaned queued messages are now cleaned up from local storage
- Pages open across an upgrade now detect version changes
- Backward compatible with older pages
New Features
- Version detection across upgrades
- Cleanup of orphaned conversation data
- Fixed `fresh` flag logic
Full Release Notes
ONE WORD MEANT TWO THINGS. `fresh` is what the server sends when somebody presses Clear, and it is also what it sends to a page that reconnects holding a position from another transcript - which is what a restarted process looks like from the outside. The page answered both by wiping, and wiping dropped the queued message. So a follow-up typed while the agent was working disappeared on the next restart, with nothing said: the one thing this interface argues everywhere it must not do, on the feature built precisely because a reload ate it. Found by reading the two senders after the stored `fresh` of 0.57.0, which was the same defect one step earlier. The reason travels in the TEXT rather than in a new kind, the way `busy` already carries "1" and "0". That is not a shortcut: the page's dispatcher is deliberately total, so a kind it has never heard of is drawn into the transcript as a sentence - and every page still open from the previous version would have grown one. An older page seeing `fresh` keeps doing exactly what it did before. A QUEUED MESSAGE DIES WITH THE CONVERSATION IT BELONGS TO. Deleting one erased its transcript on the server and closed its browsers, and left the sentence somebody had typed into it sitting in this browser's storage: one key per conversation that ever had one, kept for as long as the browser is, holding text for something nobody can reach again. AND A PAGE OPEN ACROSS AN UPGRADE NOW KNOWS. It was noticed only by a 404, which means only when a route it asks for had gone away entirely - and most versions do not remove a route, so a tab left open went on running the script it was served against a server that had moved, in silence. The build rides on the fleet poll every page already makes, as a FIELD for the same backward-compatibility reason as above: a reader that does not know a field ignores it. The page keeps the first build it is told and says one sentence, naming both versions, the moment that changes - through the same latch as the route that vanished, because a page is old once however it found out. Suite 610 green. Eight known-bad inputs, eight killed. And one of them SURVIVED first, which was the gate's fault and not the mutation's: the test stubbed `wipe` and the known-bad changed `wipe`, so it never ran the line it altered. The real function is sliced into the harness now. A double standing in for the thing under test is a gate that cannot see its own subject.
Related Repositories
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
Interactive roadmaps, guides and other educational content to help developers grow in their careers.
Reverse engineer anything with agents, from app behavior down to native binaries.
The open source coding agent.
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.