v1.0.264
✨ New: watch an update happen instead of guessing
Updating used to be a spinner on a popover button that disappeared the moment the popover closed, followed by minutes of silence while the server was gone, and then two separate cards each offering a reload.
Progress now lives in its own card in the top-right corner. It survives closing the popover, switching panels, and the server being absent mid-restart — the updater publishes live state on a loopback port, and Cockpit falls back to a local timer if that port isn't there. When an update fails you get the rollback plus a copyable fix command and the log path, instead of a toast that's gone in three seconds. The old "server restarted" banner is folded into the same card, so exactly one surface ever offers you a reload.
The card also renders once now. Every project pane is an iframe of Cockpit itself, so the parent and each open project used to mount their own copy — all drawing at the same corner, stacked, and disagreeing about what to say, because only the parent was actually running the update.
✨ New: every bash call a previewed page makes, on the record
Previewing a local .html runs it, with full shell access, and until now that happened with no trace anywhere. The injected SDK records every bash() the page issues and shows them in a floating panel — time, cwd, duration, exit code, whether it was backgrounded or killed.
It is deliberately not opt-in: a page that could switch the log off would simply switch it off. Instead the button stays hidden until the page's first bash call, so plain notes and reports get no extra chrome, and the button appearing is itself the signal that this page ran something. The log is in-memory and per-page — localStorage is writable by the page being audited — and nothing is exposed on window.cockpit, since this is the host reporting on the page, not a feature the page drives.
The log button and the theme button now share one draggable dock instead of covering each other in the same corner.
✨ New: code-review findings say whether your change caused them
A review report answered "what is broken" but not "which of these did I just cause", so the first thing asked after every report was a follow-up sorting the findings. Each finding now carries that itself: introduced, activated, or pre-existing, in a column in the summary table, an Origin line in the detail, and a tally at the end.
The test is a revert counterfactual, not whether the offending line sits inside the diff — the findings most worth flagging are half-landed changes, where a contract, enum, mirror table or bilingual string was updated on one side and the other was left behind, and the line that misbehaves isn't in the diff at all. Origin is orthogonal to severity: a pre-existing defect that your change routes live traffic through is still as bad as it is.
🐛 Fix: Codex sub-agent bubbles are back on 0.147
Codex 0.147 stopped announcing sub-agents in exec --experimental-json — spawn_agent produces no thread item, and the one event that still arrives carries empty agent state. A running multi-agent turn therefore rendered only its Bash calls: a review that spawned two agents showed 2 tool calls out of 8.
The live engine now reads the same sources the resume path already used — the rollout's spawn_agent lines, plus the sub-agent's own message for the report. Verified end to end against the real 0.147 binary, with the older collab_tool_call path kept for earlier versions.
🐛 Fix: three endpoints that had been failing silently
Each of these had the client and the server declaring the same request fields separately, and drifting:
- Right-click → copy file 400'd every time and toasted 复制失败.
- Console bubble titles never survived a reload.
- The scheduled-task unread badge never cleared.
All three now have contract files both sides import, which turns this class of bug into a compile error rather than a silent 400. The scheduled-task route also stops answering 200 to a typo'd action and no longer reports bad arguments as "task not found".
🐛 Fix: images in history render as images
Clicking an image in the history tab showed garbage — the commit-detail and branch-compare panes ran every file through the text differ, and a PNG decoded as UTF-8 is mojibake rendered line by line. Both panes now short-circuit on image paths and render the actual before/after images as of those revisions (one image when the file was added or deleted), matching how the status pane already behaved.
🐛 Fix: floating surfaces stop turning see-through
The session-complete toast used a translucent hover tint as its background, so hovering it made the sidebar menu underneath bleed straight through — and since hover cancels the auto-dismiss, the broken state stuck around. Sweeping for the same mistake turned up four more: the Jupyter cell toolbar (which referenced a token that doesn't exist, so it had no background at all), the sticky blame gutter, and the sticky group headers in search results and references.
📦 Misc
- A finished session's summary shows two lines instead of one — a single line cut off at about 20 CJK characters, usually too early to tell which task just finished.
- The close-all button stays visible with a single tab open, where it still does something useful: swap the tab for a blank New Chat.
- The HTML app preview title shows the file's path.
- Sol's default reasoning effort is now medium.
🌐 Site: homepage hero reshot
The hero still showed chrome that v1.0.263 removed — a brand-coloured border on the user bubble, the teal focus ring on the composer. Same view, same dimensions, reshot on the current build.