The cockpit stops lying to you about what it can see.
Every fix in this release is the same shape: something reported healthy, or reported nothing at all, while the truth was elsewhere. The desktop shell adopted whatever answered on :4000. The sync button refused the one merge that would work. A restart auto-approved decisions a human was in the middle of making. An update sat published and never said so.
Desktop and install
- The shell no longer adopts a foreign server.
/healthnames itself, and when another app holds :4000 the sidecar moves to the next free port instead of pointing the whole cockpit at a stranger (#127). - Rebuilding stops the running app properly rather than signalling its whole process tree and copying over the wreckage, and the app is now identified by its binary rather than by anything that mentions its path (#136, #139).
Terminal
- tmux windows are the panel's own tabs, addressed by window id rather than by tab position, so renaming or reordering cannot switch you to the wrong one (#154, #158).
- Tabs answer at once instead of taking seconds, and the panel now shows when tmux is waiting for the rest of a prefix key (#159).
Git
- Sync is no longer blocked on a branch that tracks the trunk directly. Its upstream IS its base, so "behind upstream" and "behind base" are the same commits and merging is what closes them: the old guard disabled the only working action and recommended a pull that could not run (#130).
- Handing a conflict to the chat now names the branch, the base, the worktree and which side is theirs, spelling out the rebase inversion that otherwise resolves an entire rebase backwards (#143).
Approvals and notifications
- A restart no longer auto-allows a hold a human was deciding on (#131).
- Approval requests survive a desktop Do Not Disturb setting agentglass does not own, and agentglass has its own quiet switch for mirrored notifications instead (#138, #152).
- The notch stops narrating old news, and holds jump the toast lane (#150).
Fleet and updates
- An open tool call now carries evidence of life: when the transcript last grew, or when the file a write tool named last changed. Reported only, because nothing classifies on it yet: the signal deserves watching against real runs before a state machine depends on it (#141).
- A newer release announces itself: a background check, a dot on the settings button while it stands, and one note per tag rather than a reminder every six hours (#145).
- Docker reads labels by name and samples only the containers on screen (#142).
Housekeeping
- Two test suites were reading the developer's real database; three source files carried NUL bytes that hid them from grep (#144, #146, #151, #155).
- package.json had said 0.2.0 since that release, so local builds misreported their own version (#161).
Thanks to @eatmonster, whose "check evidence of life, not liveness" framing is what the fleet work is built on.