changelog

Every release, in full.

127 versions, the most recent on 2026-08-05. Topics ships continuously, and every merge to main goes out through the auto-updater.

v2.2.11

New

  • timing sidebar and tabs say how long it has been working, or how long since it finished
  • costs stores the MODEL per message and repairs history that was inflated 3x
  • tab every tab has its own permalink /tab/<type>/<key>, copyable and resolvable
  • chat native AskUserQuestion panel over the MCP bridge
  • browser import_chrome now reads from Dia, Arc and Chromium too

Fixes

  • notifications on every launch the app re-announced every chat that had already finished
  • costs prices were stuck on retired models, and the bill came out three times too high
  • perf SessionActivity subscribed to the clock even for idle rows
  • dashboard stop adding up costs we know are wrong as if they were money
  • badge in split view it vanished from the cell you were NOT looking at as well
  • observability a model with no price, and a refused park, are now visible
  • board on mobile, no card text below 12px
  • board responsive top bar on mobile, and no more double scrollbar on the columns
  • board a column keeps ONE scrollbar (standard thin) and no longer blanks the indicator
  • layout one identity per pane, and a broken pane no longer takes the window down
  • ask-user the panel survives a human getting up from the desk
  • ask-user replaces the short-legged long-poll: the socket cannot hold through idle minutes
  • topics don't report open-project/create-project as ok when bind fails

v2.2.10

Fixes

  • release macOS ships LibreSSL as openssl, and it does not know `-legacy`

v2.2.9

Fixes

  • release macOS signing needs TRUST as well, not just the key

v2.2.8

New

  • signing a DEDICATED, stable signing identity for Topics, with no Apple subscription

v2.2.7

Fixes

  • pairing a forever «Reconnecting…» was an UNPAIRED device
  • release a MISSING macOS certificate must not throw away the entire release

v2.2.6

Fixes

  • ci aligns playwright-core, and tests that require an environment now say so

v2.2.5

Fixes

  • ci the test read a global it never reset, and `check` was missing Chromium

v2.2.4

Fixes

  • ci realigns the client lockfile, and catches the red BEFORE CI does

v2.2.3

New

  • chat /compact becomes a command, not just an emergency button
  • chat «Compact now» in the context ring as well
  • chat /compact has a real UI, not the generic spinner of a stuck turn
  • terminal parks idle agent sessions, and brings them back on their own

Fixes

  • shell the code that steals focus no longer ships in the release binary
  • sw a server restart no longer serves the old shell from cache
  • agents rotating a token no longer kills a live agent by mistake
  • notifications the banner fired while you were LOOKING at the terminal
  • hooks quotes the wrapper path, and REPAIRS the ones already written wrong
  • web /boot.js answered 404: the PWA had stopped registering the service worker
  • ui-state the theme was NEVER saved to the server
  • icons «this project has no icon» is not an error, it is a 204
  • ui-state the first theme click after load was not saved
  • evidence the visual review claimed 9 screenshots and delivered 7
  • pane a terminal tab's 'opencode' type vanished on every hydration
  • scripts the poll resurrected DURING unmount: one immortal orphan timer per cycle
  • spec-flow three package.json scripts crashed with ENOENT
  • chat drops a model picker from the CommandMenu that was LYING
  • regenerate on a stalled gateway it finalized an EMPTY message without saying so
  • opencode two hand-written type lists left it out
  • resume the «don't use the thin context on a lost conversation» guard NEVER fired
  • token «1000K»: five copies of formatTokens, three got the million boundary wrong
  • security a ref of nothing but disallowed characters bound the topic to the workspace ROOT
  • e2e the suite wiped PRODUCTION browser logins on every run
  • browser the native webview stayed painted over the app after the tab was closed
  • db regenerates the embedded manifest: migration 074 was missing
  • browser a NATIVE pane left a ghost headless Chromium running
  • browser ⌘W closed the tab here and left it open on the phone
  • browser no Browser in the «+» menu of a pop-out window
  • browser the context DELETE was CANCELLED when it fired during unload
  • browser the webview is born a child of the host window, not always of main
  • browser 11 of 13 findings from the lifecycle audit: session, orphan contexts, vacuous tests
  • browser the ghost context dies when NOBODY is watching it, not only when I created it
  • pane UNDO_CLOSE no longer leaves a ghost pane: but the E2E red has another cause
  • perf the status-bar CPU was the processes' LIFETIME average, not the current one
  • processes dead background shells sweep their orphaned children instead of leaving them alive
  • attention the «Project» tab stayed blue on a chat that had already been read
  • attention a CLOSED chat kept the project lit, and there was no way to turn it off
  • browser browserState was a DEAD write: now it has a column

Performance

  • db the missing index on messages(timestamp): 19 ms to 0.2 ms on the KPIs
  • boot the orphan-tool cleanup no longer scans the whole history
  • chat scrolling a chat redrew App and the entire grid four times a second
  • messages three places loaded and re-parsed `blocks` only to throw it away
  • e2e shards are split by DURATION, not by test count
  • e2e durations realigned from a single pass, and the stale shard folders removed

v2.2.2

New

  • changelog the English changelog is no longer half in Italian

Fixes

  • ws contract realigned the registry after the merge: 97 types
  • e2e the e2e suite was killing its own browsers
  • link a URL in a board comment wasn't clickable
  • updater the startup update check no longer shows an error on every launch

v2.2.1

New

  • security auth-gate on /api,/ws,/preview: loopback-trusted + pairing token + anti-CSRF
  • ux open windows shown in the sidebar + "Detach the group into a new window"
  • ux this window's groups in the sidebar, each with its own "Detach"
  • ux a group IS a window: one unified "Windows" section in the sidebar
  • ux chat configuration panel in the composer (effort + autonomy)
  • board an overload badge in the header when load exceeds the core count
  • sessions Topics sees external Claude sessions: ~/.claude/projects scanner, sidebar badge, dispatcher guard
  • sessions a census of EXTERNAL Claude sessions (board badge + dispatcher guard)
  • dispatch a waiting agent declares the wait and releases its slot
  • dispatch the repo-busy guard moves to HOLD + auto-resume instead of blocking
  • context the ring shows the REAL context, and warns before compaction
  • effort one single surface, and a slider instead of the five pills
  • 0.4 the turn says WHY it ended: ACP vocabulary instead of done/error/aborted
  • board line-by-line comments on the diff, in a single comment
  • board pre-review checks: no review without green commands
  • board stamp who moved the task into review
  • context standardise stream:context on the ACP usage_update block
  • provider speak Agent Client Protocol: a new agent costs one line
  • ws model the 16 messages the server was sending with no contract
  • ws a broadcast's type is now decided by the registry, not by the string
  • processes the agent's background shells become live state
  • click-to-edit send pruned HTML + computed CSS + a crop of the element
  • fan-out send the same task to N agents in parallel and let them pick
  • shell `browser_list`: know how many WKWebViews are really alive
  • diagnostics a probe that names WHO holds the heap, instead of making you guess
  • usage a monitor that puts the bill next to the fuel tank
  • context warn when every call re-reads too much, not only when the window runs out
  • pairing the client presents the token, and an authenticated remote peer is no longer CSRF
  • sidebar a view that groups by STATE, not by pane type
  • token how much of a message was CACHE: the data was there and was being thrown away
  • token the turn's consumption is seen GROWING, instead of showing up at the end
  • token the cost reads on the SINGLE action, not just on the turn
  • chat effort sits on the control that changes it, and 1M is readable
  • handoff adopt a live terminal Claude Code session into a topic
  • chat effort on the control that changes it, the window on EVERY model
  • notifications a task that gives up now tells you
  • settings preferences went up to the server and NEVER came back down
  • push the end of a chat reply wakes you with the topic's name and takes you there
  • notify gate turn notifications on Focus/Do Not Disturb
  • shortcuts one single TS↔Rust registry, the Rust is generated
  • notify per-topic/project mute + a PWA badge that counts completions
  • ui shared EmptyState + unified Spinner across the 4 densest files

Fixes

  • ux topic context menu localized + single "Archive" verb + diagnostic console.logs removed
  • ux error toast when an archive/close commit fails (PendingAction)
  • security scheme guard on ALL browser navigations (LFI/SSRF)
  • security gate /media/ too: blocks token-less remote reads of ~/.topics/media files
  • security gate the PRIMARY /ws socket (+ /uploads): was ungated (chat/ui-state leak on LAN)
  • ux "Move to Space" re-enables "Main" + the Spaces bar follows the floating design
  • ux group from the sidebar: restore the drag + open/register the dropped topic
  • dev the "new version" banner loop + sidebar/status/spaces/board consistency
  • ux the sidebar chrome popovers no longer escape the viewport
  • ux status bar on ONE line: the crowding removed at the source, not with height
  • auth session control no longer depends on an OpenClaw token
  • auth session control accepts the native agent token, not just the OpenClaw gateway
  • chat compaction no longer "inflates" the context, a single divider, no empty voice notes
  • moondream the source was invisible to grep: 2 raw NUL bytes
  • bridge detached daemons no longer hold our stderr open
  • client the manifest declares what it really uses
  • sync a sleeping tab no longer drags the other devices back
  • e2e even a normal teardown was killing OTHER people's Chromiums
  • browser the pane in DOM mode showed a white VOID, not a state
  • panes archiving a topic left the tab ALIVE on open clients
  • webrtc close the four routes that left the sidecar alive for nothing
  • webrtc reap the stale orphan at boot, not at the first offer
  • webrtc the CDP retry gives up instead of retrying for weeks
  • audio guarantee the completion ding's AudioContext gets closed
  • shell stamp the rev on the index served from disk and warn instead of reloading
  • gc verify before destroying: a branch is reaped only if its content really is on main
  • queue outbound messages no longer evaporate
  • checkpoint the rollback cuts the branch, not the tree
  • dispatch a turn whose session died no longer hangs on "working"
  • gc a task stuck on "working" for days gives back the checkout, not the commits
  • landing-audit resolve the repo from the board id, not from the ProjectStore
  • status the counter stops announcing sessions nobody can see
  • sidebar the row reads the same count as its tab, not a hard-coded zero
  • guard the test's NULs become escapes, the file is greppable again
  • memory close the WKWebViews a reload leaves ownerless
  • bundle don't accuse of growth someone who merely has the watcher running
  • guard the key separator goes back to being an escape, not a NUL byte
  • chat the turn reaches the end even if the stream detaches underneath it
  • build a watch rebuild no longer leaves /public without index.html
  • usage the 1M window is visible, and cache isn't billed as fresh input
  • memory a hidden surface has no visible panes, so it has no floors
  • terminal stop believing the app is in the background when it isn't
  • perf give the counter a deterministic window, instead of whichever one happens along
  • memory never evict a pane that owns a WKWebView
  • memory drop the reaper: reloading was free again, and I was the one who had made it expensive
  • chat the message cache was eating the quota, and with it the messages waiting to be sent
  • chat free the quota at boot, instead of waiting for the next write
  • perf compute CPU from CPU time, instead of nursing the sysinfo number
  • voice release the audio elements, instead of merely pausing them
  • context send only what changed, instead of repeating the project on every message
  • chat four holes found by stress-testing the preamble dedup
  • perf the status bar's CPU was 41.67× too low
  • edit Regenerate goes through the canonical envelope, instead of rebuilding the context by hand
  • context a million is the STOCK window, not a variant
  • memory empty a browser pane's document before closing it
  • effort the per-topic selector was dead on the terminal
  • costs the one-hour cache costs double, and the TTL is written in the usage
  • chat seven holes found by stress-testing today's work
  • terminal an empty roster is no proof the session died
  • editor the load error is no longer a writable buffer: ⌘S was overwriting the file
  • chat a queued message no longer loses Plan Mode (nor Fast Mode, nor the chosen model)
  • voice a voice note that fails to start now says so
  • chat silence isn't death: the watchdog asks the server instead of passing sentence
  • context one single truth about window and thresholds, instead of five copies
  • terminal opencode panes were NEVER persisted
  • dashboard half the KPIs were reading tables nobody writes
  • context the Context Inspector was off on every provider except openclaw
  • provider the default choice lived only in memory
  • board approvals stayed pending if the task left review
  • chat per-file tokens were scraped from a sentence, or invented
  • chat stream slowness is SAID, not written into the message
  • agents the roster wasn't refreshing, and an event was rejected by its own schema
  • topic gone: the autonomy selector, which showed "Ask" and never asked
  • board the global cap changed only in the window that touched it
  • pairing the token was missing on the 46 paths that don't go through api.ts
  • perf the CPU counter tells "not measured" apart from "measured near zero"
  • perf the server side's RAM isn't the Bun process alone: 27 MB against 2166
  • tab a tab stays blue until you LOOK at it, not until you brush past it
  • unread "read" waits for the threshold, not for the instant of focus
  • tab state is said in words, and the tier blue is ONE colour
  • unread the badge really does arrive in the background: one single read policy
  • chat the chat no longer flickers while you type
  • chat the composer no longer steals focus from the picker
  • chat no ghosts under the composer, no squashed buttons
  • chat stopping a SILENT turn no longer leaves an empty bubble
  • db the 170 empty bubbles already in the DB are gone, and deleting a message no longer leaves dangling pins
  • provider two user turns in a row no longer 400 on the Anthropic API
  • chat 'stop' no longer SENDS the queued message
  • notifications the topic name is no longer cut in half in the banner
  • notifications a single delivery fired THREE banners
  • push the notification woke you up and then left you to hunt for it
  • notifications Settings promised banners that NEVER arrive
  • keyboard Escape with Settings open KILLED the AI turn
  • lint two red errors inherited from the token work
  • keyboard Escape interrupted NOTHING, and ⌘⇧R reloaded the window
  • modals Escape on a lightbox killed the AI reply behind it
  • chat /clear emptied the screen, not the model's memory
  • sessions two spawns in the same millisecond and a resumed session restarted empty
  • pane a pane that breaks no longer takes the others down
  • chat a rejected turn goes back to the queue instead of corrupting the stream
  • board the Board was unreadable in light theme: it now follows the tokens
  • a11y removed the three screens that speak two languages at once
  • chat gone: the 4 alert() calls that FREEZE the app instead of just saying something
  • a11y pinned the 'raised surface' rule in both themes + fixed the one bare bg-white left
  • a11y the 7 window.confirm calls FROZE the webview: now a React ConfirmDialog
  • audit closed the pre-merge audit findings on contracts and cache
  • queue a queued message no longer disappears if the send goes wrong
  • board a single cause no longer sends N identical notifications
  • shell the notification diagnosis refreshes, and Cmd+Shift+R dictates

Performance

  • client syntax highlighting deferred while streaming + dnd-kit code-split into its own chunk
  • e2e the suite was half sleep: 14.5 → 6.8 min with identical outcomes
  • e2e gone: 12 dead waits on /api/ui-state/panels (10s of nothing each)
  • e2e panels 65s → 12s, and a test that wasn't verifying the project
  • e2e 15s of pauses gone from the PR gate: and one that must NOT be removed, documented
  • the status bar showed 59 MB out of a real 6937, and hidden panes weren't hidden
  • freeze the hidden panes, tab switching drops 23-28%
  • client cut the global renders and the redundant requests on tab switch
  • terminal coalesce the xterm writes when nobody is watching
  • aura don't draw the auras without a layout box
  • chat route the two SSE readers through the rAF coalescer too
  • browser no reflow for a hidden pane, no eval with the screen off
  • the aura's rAF parks itself, the terminal contains its own layout
  • chat contain the message list's layout + a guard on idle frames
  • fps halve the counter's duty cycle and take the +1 out of the measurement
  • cobrowse the rrweb replayer parks itself when nobody is watching
  • aura the waveform ticker runs at 30fps, not at the display refresh rate
  • cobrowse the live timer follows the stream, not just visibility
  • terminal no redraw for a pane with no layout: xterm's cache never fills
  • terminal coalesce the fits during the native WINDOW resize too
  • layout a layout boundary on the pane shell: the caret no longer relayouts the whole app
  • frame switch off the watchers that stayed on with no audience
  • render the agents chip subscribes on its own, App no longer re-reads everything
  • memory cap the mounted panes, instead of keeping them all forever
  • frame switch off the per-pane loops that run when nobody is watching
  • frame declare the drop zones at render, not with an observer on body
  • chat stop rebuilding on every token what hasn't changed
  • chat a token no longer re-renders the whole app
  • mcp out of the chats: the servers that restart on every spawn
  • history don't ship the duplicate the client discards anyway
  • chat the tool mutators no longer rehydrate the whole timeline
  • processes detection polled every 4s forever, even at idle
  • chat tool events went to EVERY window, even to the ones not watching
  • sub-agent the action list was quadratic, and seven WS schemas were dead
  • processes the log is read when there's something, not every two seconds
  • memory the transcripts of chats nobody is watching are handed back

v2.2.0

Fixes

  • markdown re-parse O(n^2) fixed + no more spurious notification-permission prompt on Tauri

v2.1.129

Fixes

  • changelog reset the 'Under the hood' toggle in the click handler, not in an effect (lint react-hooks/set-state-in-effect)

v2.1.128

New

  • board guaranteed review preview: the server promotes the delivery comment's evidence
  • chat tool call experience: running state synced to real usage, groups with counts+highlights, durations, hljs in cards
  • dev hot-reload on demand: no more surprise reloads
  • board open the task result as a browser tab in the workspace
  • board delivered files as a downloadable list + openable as tabs
  • chat typed cards for Monitor, BashOutput, KillShell, NotebookEdit, Skill, SlashCommand, LSP + background Bash
  • chat sticky strip for the current todo above the composer (CHAT-TODO-01)
  • chat visible, persistent context compaction (CHAT-COMPACT-01)
  • chat playful turn indicator + scroll-anchor on send
  • notifications notification on task completion at the edge into review
  • browser native WKWebView by default on desktop (end of slow mirroring by default)
  • chat add multi-select to the AskUserQuestion card
  • chat consistent time display: rollup to hours + footer via formatDurationMs
  • chat context tracking: pre→post compaction delta + /context command
  • browser cross-device auto-share (native alone, shared when another device is watching)
  • chat autocomplete for custom slash commands in the composer (/vai, /commit, …)
  • browser pause stream and WebRTC track for non-visible panes (P3-3b)
  • sidebar "time since last update" on chat and project rows
  • sidebar sub-agents spawned from a chat nest under the chat
  • chat strip sub-agents from the topic they spawn from
  • recovery boot-reconcile forgets sessions with an orphaned transcript
  • changelog per-version changelog: in-app modal (IT) + site page (EN)

Fixes

  • board Reject/Approve pick up the written note + drawer composer auto-grow
  • chat stream partial args while the tool input is being generated
  • browser screenshots to file + path, never base64 in context
  • board the /task/<id> deep-link opens the drawer even on cold boot (race with hydrate)
  • browser live typing echo in co-browse: rrweb sampling.input 'last'→'all'
  • webrtc reap the orphaned sidecar before respawning: stop CPU buildup
  • browser non-framable localhost → DOM co-browse, not a blank iframe
  • browser input bridge on WKWebView: stop links escaping to the system browser
  • worktree-gc reap squash-landed branches, not just ancestors
  • tauri the nav-guard no longer opens browser pane links in Dia
  • chat chat no longer loses the message: solid turn finalization
  • chat no more infinitely 'running' tools when the turn dies
  • chat boot-time cleanup of orphaned 'running' tools (infinite spinner)
  • chat finalize orphaned 'pending' tools too (in addition to 'running')
  • chat finalize orphaned tools in the blocks column too (infinite spinner)
  • chat an explanation on interrupted turns + a finished-session check
  • layout split, drag and focus, more solid and consistent
  • browser capture input in the main frame for DOM co-browse (WKWebView-safe)
  • pwa self-heal stale bundles (end of "index not found")
  • chat the watchdog no longer kills a live turn (CLI parity)
  • chat /model, /effort, /reasoning slash commands on claude-code (no more 400)
  • browser the native pane no longer counts as a viewer (stop resetting every 2s)
  • chat the foreground turn survives a server restart (reload-survival)
  • sidebar sort Claude Code terminals by real activity, not createdAt
  • panes cross-device browser close propagated live (tab no longer lingers on the PWA)
  • chat fold the auto-compaction summary (handled at the UI level)
  • panes GLOBAL browser close also writes the cross-device tombstone
  • chat single turn indicator (gated on the last message)
  • chat the topic updates while typing, not only on rename/archive
  • chat re-anchor scroll on composer height change and fix shimmer clipping
  • terminal activity recalculated on restart uses the transcript's mtime, not now
  • sessions reconcile orphaned "working" phases at boot, no more chats stuck for an hour
  • claude-code the inactivity reaper no longer kills a live turn
  • claude-code the turn timeout is inactivity-based, not a hard 30min wall
  • desktop ask for Accessibility permission once, not on every launch
  • chat chat no longer loses its scroll anchor during streaming
  • chat the topic updates at the end of the turn, not only on user POST
  • chat scrolling up during streaming immediately releases the pin (no more trap at the bottom)
  • terminal show a 'Session ended' overlay + Resume instead of an empty pane
  • terminal age guard >10s for the 'Session ended' overlay
  • chat wake the topic when an MCP sub-agent finishes
  • sidebar align chat and project time display on updatedAt (consistency)
  • sidebar show "updated X ago" on the project row (it was the only one missing it)
  • chat the sub-agent wakes the chat with the real result, even via /stop
  • subagent prompt seed verifies delivery and resends if swallowed
  • subagent the seed verifies the prompt's ECHO in the composer and retypes
  • chat the thread no longer gets truncated with duplicate roots
  • chat realign the open pane's thread on topic:updated
  • chat load the whole thread (limit 500) instead of just the last 100
  • chat the loaded thread is ALWAYS complete, no fixed cap
  • chat no more duplicate compaction dividers breaking up the chat
  • worktree reap forgets Claude sessions belonging to linked topics (no orphans-to-reap)
  • sessions clear the phantom 'your turn' state when the session is forgotten

Performance

  • chat per-frame coalescing of live deltas + clamping huge outputs

v2.1.127

Fixes

  • start-prod 10s settle after hot-reload's SIGTERM: never SIGTERM the server during init again
  • chat every provider event bumps the stream's lastActivity: StaleStream no longer cuts down tool-heavy turns
  • server early signal handler: a SIGTERM during init no longer kills the process with 143
  • chat two-phase reattach: silent scan of the store queue, live attach only from the open turn
  • board remove the scroll-escape that hides the TaskDetail drawer on mobile
  • browser TARGETED navigate to the target pane: with splits, browser panes were navigating in lockstep

v2.1.126

Fixes

  • chat chats survive hot-reload and auto-compact: detach in the broker + reattach at boot + liveness watchdog
  • browser enableDomMode rides the first navigation: no forced video when set_render and nav arrive together
  • chat selective boot sweep: re-adopts only mid-flight turns, reaps idle/orphaned broker children
  • chat the sweep's mid-turn signal must be captured BEFORE the boot-time partial reset
  • chat the boot-time partial reset spares sessions with a live child in the broker
  • panes read-only detached window into the shared pane-store

v2.1.125

Fixes

  • browser single-flight createContext: the race on first touch orphaned the context with the DOM recorder

v2.1.124

Fixes

  • browser DOM mode handles late-joiners and reconnects: takeFullSnapshot on a live recorder + idempotent bundle

v2.1.123

New

  • browser the DOM mirror is natively interactive: text selection, hover, instant local scroll

v2.1.122

Fixes

  • board drawer expands full-screen when too narrow, two columns with no clipping

v2.1.121

New

  • board lightbox for review evidence (image + video), over the window
  • board responsive two-column drawer (wide desktop)
  • board copyable task ID in the card, after the project
  • board memorable ID (slug) in both the card AND the drawer, aligned + copyable

Fixes

  • board drawer no longer cramped: scrollable info + modest preview
  • board closing a task's browser tab propagates cross-device
  • browser hide rrweb's replay cursor in DOM mode: no dot chasing the mouse (native feel, not streaming)

v2.1.120

New

  • browser auto-fallback to DOM when WebRTC video fails cross-device
  • browser shared session + DOM by default on Mac (Option A)
  • browser move the Native↔Server switch into the ⋯ menu (it's not "Share")
  • board video evidence for review (Playwright/spec-flow clip), not just screenshots

Fixes

  • board also retire the tab stranded on /login when the screenshot is missing
  • board a task in review is never 'working' → no double input feedback
  • tauri ⌘R reloads the app even with focus in a pane/terminal
  • board the agent no longer proposes 'Land and publish': publish is separate (protocol #6)

v2.1.119

New

  • board delivery preview in the task drawer too: full image (object-contain), click to open it full-size
  • kanban review-ready previews: live preview server + screenshot evidence per task
  • browser DOM channel protocol: additive set_render/render_mode/dom_event variants (T1 stage A)
  • browser server-side DOM channel: injects rrweb on-demand, fans out dom_event, late-join bootstrap (T1 stage B)
  • browser client-side DOM co-browse: native rrweb Replayer, DOM/video toggle, fallback on video error, agent-lock gated input (T1 stage C)

Fixes

  • board include untracked files in the task's review diff
  • reload banner on stuck bundle, runtime version chip, apply waiting SW
  • desktop absolute getMediaUrl via serverHttpBase: <img> no longer goes through the fetch shim
  • browser revocable rrweb DOM: stop recording when nobody's watching, no permanent addInitScript (review commit B)
  • browser explicit masking of password fields in the DOM stream (hardening review)
  • browser inject rrweb via CDP Runtime.evaluate (CSP-exempt): DOM mode stayed on video on sites with Content-Security-Policy
  • board review starts from the screenshot, not the login-gated dev-server

v2.1.118

Fixes

  • mobile no split in projects on mobile: groups flatten into a single tab-strip
  • shell Cmd+R/Reload reloads the FOCUSED window, not always 'main'

v2.1.117

New

  • board delivery preview on the card: preview_image (migration 055) + allowlist-gated thumbnail

Fixes

  • browser select-element (Cmd+Shift+E) maps onto the WebRTC <video> surface, not the removed <img>

v2.1.116

New

  • browser 'Share session' toggle on Mac: the pane switches from native WKWebView to the server-side stream that phone/web see live (same session)

v2.1.115

New

  • statusbar 'auto' badge when dev-reload is active (no popup)
  • board card: agent cluster top-right, inline priority, checklist in review
  • browser WebRTC signaling protocol (webrtc_offer/answer/ice) on /ws/browser
  • browser production webrtc-bridge sidecar (attach-to-target, shared track, keepalive)
  • browser WebRTC server broker: lazy sidecar spawn + SDP/ICE relay on /ws/browser
  • browser WebRTC client render path: shared-session <video>, negotiates over WS, JPEG fallback (opt-in)
  • browser WebRTC as the sole transport (default-ON, zero JPEG): iframe where frameable, video otherwise, error+Retry

Fixes

  • browser the streaming pane (web/mobile) navigates to initialUrl when the server context is empty
  • browser hide the 'Live' badge when the page is in an error state
  • browser remove the 'Live' chip and stop seeding dead local urls
  • board de-clutter the top-right cluster on the card
  • browser WebRTC keyframe on a wall-clock timer (1s): static pages no longer stayed black (frame-count-based IDR starvation)
  • browser negotiate WebRTC on nav/url, not on the first JPEG frame: avoids an infinite 'Starting shared session' spinner
  • webrtc fix the sidecar deadlock that wedged the shared session

v2.1.114

New

  • board the agent can also propose "Land and publish" (merge + push/deploy)

Performance

  • browser pause the headless screencast when the web pane is in iframe-mode

v2.1.113

New

  • browser discover installed Chrome/Dia extensions for the Chromium sidecar
  • browser the Chromium sidecar loads the user's installed extensions (Option 1)
  • browser enable the server-side engine switch behind the TOPICS_CHROMIUM_ENGINE flag
  • browser Native↔Chromium toggle in the web pane + remount on engine switch
  • board decouple Approve from landing; the agent proposes "Land on main", you decide

Fixes

  • security SSRF guard on framing probe + force-download untrusted browser downloads
  • browser drop download links whose href isn't under /media/browser/downloads/
  • dispatch mirror the comment on auto-delivery to review even without a fresh comment
  • dispatch the agent is required to comment on every delivery, no more fake mirroring

v2.1.112

New

  • browser T2: native iframe render mode for framable sites (CodePen-style)
  • board human message count on the card (thread interactions, excluding the AI)

v2.1.111

New

  • server ai-bridge broker default-on (opt-out), off only on Windows
  • board session = work (Steps + reasoning consistent with the chat), mode row on the composer
  • dispatch at the end of the turn the agent always leaves a delivery comment
  • board last-update time on the task + review column sorted by update
  • notify clicking the completion notification opens the task
  • browser native-grade web streaming pane: responsive viewport+HiDPI, WS reconnect, console/download

Fixes

  • board hide the composer while typing in the card's quick-reply too
  • board columns extend all the way to the bottom (desktop and mobile)
  • board hide human/dispatcher turns from the session's Steps
  • board the task composer stays above the keyboard on mobile

v2.1.110

Fixes

  • board no expand button on the mobile drawer + compact 'Board' on phone
  • board hide the 'Describe a task' composer when a task is open
  • board a failed navigation no longer clears the tab's seeded URL

v2.1.109

New

  • board mobile drawer = full-overlay above the topbar + swipe-to-close

Fixes

  • board the delivered output is a normal browser tab, not 'Output'

v2.1.108

New

  • board responsive header + wider Review column on mobile too
  • board column scroll-snap at all breakpoints (desktop too)
  • board steering for the in-progress task + status aligned to the project + workspace accordion

v2.1.107

New

  • board hide empty sections + ⋯ options menu in the drawer

v2.1.106

New

  • board mobile Kanban = scroll-snap carousel, review no longer sticky

v2.1.105

New

  • board collapsible description and subtasks, Changes moved out of the chat

v2.1.102

Fixes

  • board the task drawer scrolls and header chips wrap

v2.1.101

New

  • board the task drawer uses a SINGLE GroupLayout (one tab bar only)

v2.1.100

Fixes

  • board the strip below the description shows only closed cards

v2.1.99

New

  • board task-scoped store for the browser layout + soft-close for tabs
  • board task browser on the real layout engine + reopenable preview
  • board browser strip always present below the description, with + as the user entry point

Fixes

  • desktop auto-update skips debug builds (no swapping cargo run with the release)

v2.1.98

New

  • browser per-pane engine registry: ref-counted sidecar acquire/release (server-half of the engine switch)
  • board task-owned browser tab in the drawer (behind a flag)
  • board multi-tab for the task browser (+ / close / active)
  • board task-owned browser: agent fork + inventory label
  • desktop silent opt-in auto-update for the shell in local dev

Fixes

  • board Output tab no longer blank on unreachable URL + demo page
  • browser close panes opened from a terminal (no more ghosts)

v2.1.97

New

  • sessions reaper for abandoned headless sessions: running→dormant with no PTY signal
  • board path-based deep-links /task/<uuid> (drop ?task=slug~uuid)
  • dispatch quiescence gate: scheduled restarts no longer cut in-flight turns
  • ai-bridge broker daemon with clean pipes and a durable offset-addressable store
  • ai-bridge singleton client toward the daemon (spawn/attach/write/signal/kill)
  • ai-bridge provider behind the TOPICS_AI_BRIDGE flag: turns via broker
  • ai-bridge mid-turn reattach in the provider (4 cases)
  • ai-bridge reattach wiring: reconcile, chat route, runHeadlessReattach
  • worktree periodic worktree GC: fix at the source of the pile-up
  • server no auto-restart on approve; graceful hot-reload opt-in

Fixes

  • dispatch reap on 'nothing' skips worktrees with uncommitted changes
  • tauri stop global ⌘-tap monitor crashing on every focus-out
  • dispatch attachment coaching points to the right dir (~/.openclaw/media, not uploads)
  • board reliable ?task= deep-link + URL reflects the drawer
  • board literal ~ separator in the ?task= link (no %7E)
  • dispatch floor at sonnet in the model-picker: haiku only judges, never executes
  • ai-bridge dispose() disarms auto-reconnect (no daemon respawn on teardown)
  • ai-bridge EBADF store-write: close the fd in onDead, not in kill; gitignore store dir
  • provider spawn the session in the topic's cwd, not in HOME
  • chat clean interruption/exit are not errors (like Claude Code)
  • board sticky Review column with opaque backdrop on mobile
  • claude-code lost CLI session no longer crash-loops the dispatch

Performance

  • route per-token deltas to topic subscribers, memo Card, delta-scan localhost

v2.1.96

Fixes

  • client stop the reload loop from cached index: cache-busted reload + attempt cap

v2.1.95

Fixes

  • provider complete() no longer returns the raw stream-json as the response

v2.1.94

Fixes

  • dispatch post-landing self-restart waits for the merge queue to drain

v2.1.93

New

  • scripts watch-board-tasks: board task watcher for Claude Code sessions
  • tauri global right-⌘ tap focuses the task composer
  • dispatch delivery roots: commit gate on review, worktree reap post-merge, area-aware landing

v2.1.92

Fixes

  • dispatch parseTier no longer haiku-biased: exact match, then first occurrence

v2.1.91

Fixes

  • dispatch reject resets the attempt budget (new work cycle)

v2.1.90

New

  • board ONE single specified global cap (auto or number), removes the per-project cap

v2.1.89

New

  • browser on-demand Chromium sidecar: backbone of the pane engine switch

Fixes

  • board the settings chevron is attached to the 'General board' text, bare

v2.1.88

New

  • dispatch approve → merge to main + rebuild client if it touches client/
  • board Cmd+Shift+; hotkey to open the task composer
  • board right-⌘ tap opens the task composer (replaces ⌘⇧;)

Fixes

  • board search and filter chip at the SAME height (explicit h-6)
  • sticky review column with max-h-screen on mobile
  • board kanban column widths FIXED again on desktop (w-72/w-80)
  • board fixed-width search (no widening on focus) + global dropdown = chevron only

v2.1.86

Fixes

  • routes /api/system/dispatch-capacity was unreachable (dead code)

v2.1.85

New

  • board GLOBAL agent cap (machine-wide) + settings dropdown on every header

v2.1.84

New

  • voice voice task scaffolding: dialog + status bar + store (WIP)

Fixes

  • terminal create the socket set if missing instead of losing the connection

v2.1.83

New

  • board composer grows on focus (min-h 4.5rem), no longer stuck at 1 line

Fixes

  • desktop window no longer loses position on relaunch/update: geometry in LOGICAL points + save on ExitRequested

v2.1.82

Fixes

  • project-icon recovery via fetch→blob when the <img> fails but fetch succeeds

v2.1.81

New

  • chat chat scroll survives reload: device-local key + preserve in hydrate

Fixes

  • project-icon purge persisted 'none' immediately + short TTL on unverified nones

v2.1.80

New

  • composer preserve cursor/selection across hot reload: chat + board
  • project-icon inline data-URI favicon + fuzzy scan of brand names

Fixes

  • dispatch on server restart, working tasks RESUME the same session instead of starting over

v2.1.77

New

  • board 'Auto' agent cap sized from machine resources
  • project-icon deterministic monogram for projects without a favicon

v2.1.75

Fixes

  • project-icon extended favicon resolution + stop persisting 'none' cache

v2.1.74

New

  • board model selector in the task detail + cleaned-up card header

v2.1.73

New

  • board inline filters in the top bar (funnel icon removed)

v2.1.72

New

  • board GitHub-style unified diff on Publish and on tasks

Fixes

  • dispatch opus-first auto standard in the model classifier

v2.1.71

New

  • board 'delivered' icon + real model chip on tasks
  • board 'Publish' control: per-project push/deploy from the board
  • board per-board model default + commit preview on Publish

Fixes

  • panes persist the Board tab: 'board'/'kanban' were missing from the sanitize whitelist
  • board the task model always resolves from the topic when not pinned

v2.1.70

Fixes

  • version the chip shows the running CLIENT's version, not the shell's

v2.1.69

Fixes

  • board cards no longer overflow the column with long tokens

v2.1.68

Fixes

  • ci fix the client lint errors keeping the 'check' job red

v2.1.67

Fixes

  • board the board settings route persists dispatchAutoMerge
  • dispatch auto-heal of dead bindings: a todo task tied to a reaped topic restarts

v2.1.66

New

  • board opt-in auto-merge on Approve (programmatic + AI on conflicts)

v2.1.65

Fixes

  • cmd-palette 'Open Project' opens the picker, not onOpenProject without a path

v2.1.64

New

  • board Kanban filters + redesigned task header

v2.1.62

Fixes

  • desktop solid hot-reload: no SW under Tauri + no-store on disk-serve
  • desktop deterministic hot-reload on every launch (login-item included)

v2.1.59

Fixes

  • board remove the inline robot icon + include WIP task-surface (other session)

v2.1.58

New

  • board readable plan + project-less tasks run again, without a label

v2.1.57

Fixes

  • dispatch no more 'general' catch-all and no automatic plan-first

v2.1.55

New

  • chat Context Inspector as a popover on the composer (was a side panel)
  • board live metrics on cards: model · execution time · tokens
  • dispatch 'failed'/'needs fixing' chips distinct from stop; restart doesn't burn the retry budget
  • board 'plan first' toggle on existing tasks (PATCH planFirst)
  • dispatch a worked-on but undelivered task goes to review, not 'failed'
  • board 'Plan' tab in the task + formatted md descriptions + live time with seconds
  • dispatch token consumption optimization: lean MCP, lean envelope, retry cap 2

Fixes

  • board cleaned-up kanban: selector without internal plumbing, standalone catch-all at the top level
  • daemon solid server singleton: isolated worktree + exclusive port
  • board card preview without raw markdown
  • board the card renders the agent comment's markdown (was raw)
  • server index.html with Cache-Control no-store (desktop no longer stale)
  • board cards without clipping/fade + readable question text
  • board moveToProject clears stale dispatch state
  • dispatch catch-all agent finds its task via the linked topic, not via cwd
  • board hide the 'no project' label on cards

v2.1.54

New

  • board splittable per-task workspace (Stage 1) + openable deep-link

Fixes

  • db persist Topic.standalone (migration 044): it was NEVER saved

v2.1.53

New

  • dispatcher 'auto model' = fast LLM classifier, no longer a fixed default

v2.1.52

New

  • board temporary session tab (preview) + standalone catch-all sessions, never under a phantom 'general'

v2.1.51

New

  • board Esc closes the drawer, expanded review no longer clips the board, copyable task link

v2.1.49

Fixes

  • design input = LIGHT glass, not a dark glass-surface

v2.1.48

New

  • design chat input bubble in the glass tier too

v2.1.47

New

  • design chat topics + kanban in the frosted tier: opaque background removed, inherit vibrancy

v2.1.46

New

  • dev-reload bundle rev: reload only on a real change + freshness check on WS connection

Fixes

  • board drawer as a layout sibling: kanban shrinks and scrolls, never clipped; clicked card kept in view

v2.1.45

Fixes

  • board absolute URLs to the external opener: removes the phantom 'browser topics'

v2.1.44

Fixes

  • board closable preview, visible PDF (unsandboxed viewer for /api/media), self-consistent deliveries

v2.1.43

Fixes

  • board expand/close buttons always visible in the narrow drawer; external links via Tauri opener

v2.1.42

New

  • board attachments are the output: preview on the right, in-app click

Fixes

  • board agent attachments never silenced + open-session from the general board + review 32rem

v2.1.41

New

  • board server-side persisted drafts: composer and replies in the drawer

v2.1.40

Fixes

  • board full-width review card, more readable description and last word

v2.1.39

Fixes

  • board removed the priority dot from the fixed slot; minimum targets for buttons and icons

v2.1.38

New

  • board wide Review column + instant backoff on dead turns

v2.1.37

New

  • board never 'no project': auto falls back to the 'general' catch-all

v2.1.36

Fixes

  • board project-less tasks in Todo: amber 'assign a project to start' chip

v2.1.35

Fixes

  • board refetch on window wake: the ticker no longer counts sleep hours

v2.1.34

Fixes

  • board auto chips say WHAT they're auto about; removed 'No project' from the picker

v2.1.33

New

  • board 'Auto' project + compact chips + wider composer

v2.1.32

New

  • board priority as a real concept: priority queue, selectors, 'automatic' evaluated by the agent

Fixes

  • board 'Automatic intelligence' instead of 'Auto', model footer removed, icon cache flush v4

v2.1.30

New

  • board unlimited cascading nested tasks + short agent comments
  • ui every project always has an icon: real favicon/manifest or monogram
  • board agent checklist steps + task review surface (KANBAN-08/09)
  • board delivery is never silent: agent → review requires its own comment
  • board detail UI feedback: Linear-style StatusIcon, neutral agent identity, loading everywhere, live drawer
  • board per-step thread: replying on a subtask re-kicks the agent
  • board step-add = assignment, buffered mid-turn resume, inline edit, errors in the drawer
  • board project selector in the task header: move, open, new
  • board 'needs you' vs 'done (AI)' + review actions in the questions zone, airy header
  • board floating composer + agent stop + plan-first + inline session
  • board attachments in task comments: same pipeline as chat
  • board global start switch + composer with Menu project selector
  • board status history in the thread, status selector in the drawer, agent effort (time+tokens), positional DnD
  • board live streaming preview in the drawer while the agent works
  • board session continuity on timeout, blocked-by dependencies, per-task model
  • board composer with project and model autocomplete, deps UI, markdown, favicon
  • board project-less tasks + project icon always visible (monogram)

Fixes

  • session-tracking AskUserQuestion/ExitPlanMode in the JSONL tail = amber, never a spinner
  • ui+server chat tab like the others (provider brand, no decorative icon) + favicons for open projects
  • board working dispatch on real projects + visible feedback everywhere
  • board claim without a placeholder topic: the FK on assigned_topic_id forbade it
  • context awareness block points to the worktree for worktree-bound topics
  • ui no icon on chat topics: brand only on Claude Code/Codex terminals
  • board solid question quick-reply (server-side formatted) + utility tab in sidebar
  • board comment from the drawer on agent-driven review = reply (reject+resume)
  • board output iframe without allow-same-origin (sandbox bypass toward the app)
  • ui bump icon cache v2->v3: flush stale 'none' entries hiding real favicons
  • board agent messages without card or title, inline edit without layout shift
  • ui version popover no longer goes off-screen (clamp left within the viewport)
  • sidebar never PUT before hydration: a fresh client cleared everyone's pins
  • ws faithful stream:end schema, optional messageId (+reason/topicId/usage)
  • sidebar clicking a browser inside a project now focuses ITS tab
  • chat stream soft-timeout 120s → 60s for faster feedback
  • board attachments filtered on /api/media's allowlist on WRITE
  • board+core anti-husk project resolver, sliced reasoning in the drawer, no-store API
  • board project selector no longer collapses the composer (WebKit)
  • board subtasks aren't cards (root-only feed) and are never dispatch-eligible; clean chip on done
  • dispatch+boot retry budget cleared by a human drag to Todo; no more build lives at boot
  • board reliable drag: the source card no longer flies off, overlay in a portal
  • board targeted drop: pointer-first collision (empty column no longer loses to nearby cards)
  • board balanced padding in the collapsed composer
  • board streaming preview ON the session block, not under the spinner
  • board agent topics are born closed: no auto tab in the tabbar

v2.1.29

Fixes

  • browser broadcast nav/response on every page load, not just client nav (#26)

v2.1.28

Fixes

  • browser the recreated context reopens the last page, not about:blank (#25)

v2.1.27

Fixes

  • web Pinned sidebar parity + sanitize sidebar-state + mobile keyboard (#24)

v2.1.26

Fixes

  • db saveSingleTopic no longer erases the chat's --resume mapping (#23)

v2.1.25

Fixes

  • browser no more native pane flash when opening a dropdown (#22)

v2.1.24

Fixes

  • chat unified render + tool UX, per-topic model at spawn, live tracking and causal pane-sync (#21)

v2.1.23

New

  • chat per-topic effort selector + MCP tool to drive Topics chats (#20)

v2.1.22

Performance

  • sidebar native browser pane on the slide via Core Animation, a single IPC (#19)

v2.1.20

Fixes

  • updater suppress the toast while the VersionPopover is open (#17)

v2.1.18

Fixes

  • browser focus hook v3: event-driven focus-acquiring click detection (#15)

v2.1.17

Fixes

  • client retry the topics fetch on WebKit too: 'Load failed' now matches (#14)

v2.1.16

Fixes

  • ux live sweep: closable phantom board, browser focus on first click, visible countdown (#13)

v2.1.15

Fixes

  • panes move-to-project writes the tombstone: the moved tab no longer stays duplicated (#12)

v2.1.14

New

  • chat+browser conversation pack + native nav-error + fix Add-pane on an empty client (#10)

v2.1.13

New

  • chat+providers Esc interrupts streaming + effort-tier badge in the picker (#9)

v2.1.12

New

  • chat+browser rendering parity (syntax/KaTeX/Mermaid) + chat-ux reliability + remote pane close (#8)

v2.1.11

New

  • kanban task auto-dispatch: drag→todo runs a task-scoped agent, answer from the board (#7)

v2.1.7

New

  • kanban general board + agent authoring, native Tauri notify/clipboard, auto-bump, de-brand login-state (#6)

v2.1.6

Fixes

  • tauri banner fallback via signed terminal-notifier when UN is denied
  • tauri gate apply_traffic_lights to macOS so Windows/Linux compile
  • lint clear the 18 react-hooks v7 errors so the CI check gate goes green
  • e2e green sidebar, command-palette, agent-management specs
  • browser,e2e sync url on WS connect + de-flake browser-cluster e2e
  • layout non-UUID phantom id triggers an analyze storm + undo evicts the bystander
  • browser reopen the pinned project browser tab inside the project, with URL
  • browser project pin reopens in the project with URL via a durable origin store
  • sidebar closed project browser pin stays nested in the project and keeps its title
  • terminal reopening a dormant Claude Code reuses the session via revive

v2.1.5

New

  • updater anchor the update toast above the version chip
  • terminal standalone PTY bridge as a Rust sidecar (fresh-install terminals)

Fixes

  • tauri traffic lights now hide immediately when the logo menu closes
  • terminal sweep auto-names live Claude sessions even without a hook
  • tauri traffic lights reappear on logo click with a browser pane open
  • tauri tighten traffic-light spacing to native macOS pitch
  • pinning Fissa works for browser tabs: one canonical pin key for all types
  • tauri tighten traffic-light pitch a touch more (20→18pt)
  • pinning show the Fissato pin glyph on browser sidebar rows + all tabs
  • tauri browser_open no longer aborts on a not-yet-loaded pane
  • pinning align the browser sidebar pin glyph with chat/terminal rows
  • tauri vertically center the traffic lights on the app's 40px titlebar
  • terminal open shell/claude-code tabs on a fresh install
  • tauri deliver macOS banners via UNUserNotificationCenter
  • tauri surface UN authorization outcome; document macOS 26 signing requirement

v2.1.4

New

  • aura speed tracks token throughput + feather the outer edge
  • ui unified popover foundation: Menu primitive + useDismissable + placement
  • aura blurred glow band along the wave (no framed corners, softer)
  • aura fill window-edge → wave (soft vignette), not just a band
  • layout 'Reimposta pannelli' collapses the standalone grid to one tabbed cell
  • layout add 'Disponi automaticamente': auto-tile panes into a balanced grid
  • layout drop UX v2 phase 1: relative drop zones + label-free gutters + center-merge primitive
  • layout drop UX v2 phase 2: every position works on both surfaces

Fixes

  • sidebar sync browser row title with the tab via pane store
  • aura geometric soft-falloff (no per-frame blur) + pause only when hidden
  • aura smooth the haze: 16 nested contours, adaptive to aura count
  • browser preserve OS focus during agent act (no focus theft)
  • browser grace-defer native close so auto-split remount reuses the view
  • aura fill to square canvas edge, let host round the corner
  • aura kill banding: half-res, 14 layers, firmer blur
  • sidebar portal cursor context menus + add browser row right-click menu
  • aura dither the falloff: kill 8-bit gradient banding
  • sidebar legibility on the attention fill + unify the chat-row loader
  • aura smooth corners (no offset-inversion notch) + drop dither
  • layout 'Reimposta pannelli' from the header menu resets the standalone grid
  • layout 'Reimposta pannelli' re-equalises a dragged single-row standalone split
  • layout global 'Reimposta pannelli' flattens every surface with a split
  • aura scale-proportional geometry + calm corners (soft-clamp)
  • aura calm corners: fade the wave to 0 near each corner
  • security timing-safe gateway-token checks + narrow Vite allowedHosts
  • correctness guard autoBind crash + drop duplicate terminal-reload overlay
  • chat release mic on unmount, surface upload failures, OverflowMenu→Menu
  • git/editor confirm destructive actions, guard diff race, correct stop arg
  • modals/menus guard failed saves, role=dialog, measured menu geometry
  • browser scope download queue per pane, memoize native handle, gate debug
  • layout set dropEffect='move' on the PaneTabBar container dragover
  • layout register topic:switch pane, purge closed project/terminal panes
  • tauri gate self-test IPC commands to debug, drop dead dep + capability
  • tauri unregister live-resize observer when a detach window closes
  • diff render Aider blocks for extensionless files
  • chat abort provider on stream timeout + make finalizeStream idempotent
  • chat re-read Plan Mode on topic switch
  • server route agent thinking/thought deltas (were unreachable dead code)
  • server stop isStreaming() orphaning stale partial messages
  • server type-guard topic name + system-message content
  • client guard log-poll overlap and cap paused activity buffer
  • server swallow fire-and-forget push rejections
  • client register project panes in validation effect so the tab actually opens
  • client mic stays hot after End Call, useMobile listener leak, close-panel double-click
  • tauri browser_open reuse skips the navigate when already at that URL
  • client stream catchup no longer bleeds a prior turn's tool card into a new bubble
  • server owner-scope native-executor unregister (reconnect race dropped fresh registration)
  • server defer screencast start so a native-pane registration cancels it (phantom Chromium leak)
  • scripts ai-review-screenshots.sh died on its own zsh shebang (bashisms in the pair loop)
  • server type-guard heartbeat body (half-written session row on bad bind types)
  • server identity-guard the delayed SIGKILL in killRunningScript (PID reuse)
  • client six component bugs from the components-A sweep
  • server refuse Chrome-cookie decryption when sanitization empties the domain filter
  • server owner-scope codex per-session cleanup (overlapping turns corrupted state)
  • server worktree delete: prune when dir is gone, unwatch git dir, un-break queue GC
  • server clear the context-snapshot ring when a topic is deleted
  • server LRU-cap the transcript-title scan caches
  • server clear the 30-min message timer + detect stderr patterns on the accumulated tail
  • server log usage-file corruption instead of silently zeroing the day
  • client five hook bugs from the layout/hooks sweep
  • client nine Chat/Project bugs from the components-B sweep
  • perf statusbar tells the truth about app weight + CPU under Tauri
  • tauri re-anchor the window on-screen on every bring-to-front path

Performance

  • aura render the blurred wave via a low-res canvas (real soft blur, 60fps)
  • server+client kill hot-path table-scans, blocking IO and resource leaks
  • chat ref-stable onCopy/onTogglePin so MessageBubble memo holds while streaming
  • chat memo ChatPane so a stream chunk in one pane skips re-rendering idle panes

v2.1.3

New

  • server SDK-passthrough control tools + shared switch/create-topic cores
  • context openclaw decision gate: skip control-tool blocks + log degradation
  • sidebar add "Reimposta pannelli" to the Topics ▾ menu
  • pane-sync mirror close-tombstones cross-device via ui_state
  • tabs consistent tab names: browser page title, unified fallbacks
  • tabs rename chat and browser tabs from the tab context menu
  • terminal auto-name Codex sessions from the rollout, Shell from cwd
  • aura activity-driven SVG wave replaces working-aura orbiters

Fixes

  • browser/tabs stop cross-surface browser dup + closed-tab resurrection
  • ui-state stop orphan-cleanup from wiping a project's own tabs on boot
  • layout give flattenGridRows the liveItemKeys union its group twin has
  • spaces gate the create-cap on LIVE space count, not raw registry size
  • server make move-to-project pane splice an atomic read-modify-write
  • layout stop split-down from wiping existing rows when source isn't materialized
  • spaces make cross-device space delete an absorbing latch
  • spaces drop deleted space's grid overlay from localStorage
  • browser snap pane zoom to a round ladder + single source of truth
  • browser harden engine recovery, click fidelity, project url + trim observe context
  • browser settle after act/open + warn when refs shift (action→result fidelity)
  • tauri concurrent proxy startup + per-window vibrancy state
  • browser park native pane at real size, not 1×1 (fixes unsized viewport)
  • browser update title/url/favicon for background (hidden) native tabs

Performance

  • terminal drop dead per-chunk work from the streaming path
  • session-state coalesce session:state frames to one commit per frame
  • browser cap the observe snapshot with a total-size budget

v2.1.2

New

  • ui git build-sha in the version popover: freshness at a glance

Fixes

  • panes open_project from a terminal tab now actually shows the project
  • tauri floating card rounds only the webview's BOTTOM corners
  • server harness markup never becomes a session title
  • tauri browser corners round ONLY at window corners, floating included
  • tauri-browser only steal tab focus on a REAL click into the pane
  • tauri corner-flush tolerance = window radius; flush math vs the HOSTING window
  • tauri clip native panes to the window during live resize
  • tauri persist + restore window position across displays
  • tauri clip the REMOTE content layer: mask subview layers too
  • build ESM import for execSync: the build sha was silently empty
  • server reflect requested headers in desktop CORS preflight

v2.1.1

New

  • ui working aura v3: animated colored inner shadow, not a border
  • ui non-uniform aura motion: counter-wheel + irregular breathe
  • notifications OS banners for terminal Claude sessions
  • context-menu wire terminal-tab rename, sidebar pop-out, align project menu
  • ui aura v4: organic, non-repeating motion (Siri-like randomness)
  • ui aura v5: real waves, born/swelling/dissolving along the edge
  • ui aura v7: depth waves: the glow's reach undulates along the edge
  • ui aura v8: full-perimeter depth waves
  • ui aura v9: traveling waves: rotating uneven conic band + fast swells
  • dev bundle hot-delivery: rebuilt /public auto-reloads open windows
  • ui aura v11: true perimeter orbiters + tighter, faster v10 tuning
  • ui aura v12: one continuous traveling wave, no discrete dots

Fixes

  • sidecar isolate + disable the PTY bridge in standalone mode
  • journal disable gateway sync in standalone mode (no ConnectionRefused spam)
  • ci first cross-platform Tauri build: cfg-gate Reopen, drop broken Apple signing
  • ci NO_STRIP for linuxdeploy: the bun sidecar doesn't survive strip
  • shell retry the external-server probe before sidecar fallback
  • ci Linux ships deb+rpm: AppImage's linuxdeploy chokes on the sidecar
  • ui restore the aura wrapper + masked band rules eaten by the v5 rewrite
  • tauri modals occlude native browser panes structurally via MODAL_PANEL
  • panes dedup terminal tabs via a single cross-surface session locator
  • test durability test leaked its fetch stub into the whole bun-test process
  • panes reap dead terminal tabs from restored project layouts on restart
  • tauri match browser-pane corner radius to the host OS window radius
  • notifications gate banner focus-suppression on window OS focus, not just active tab
  • sidebar Fissa entry for terminal rows + tab-bar context menus
  • aura working ring only on confirmed-active phase, never on create/attach
  • tauri round ALL browser-pane corners to the card radius in floating splits

Performance

  • ui aura band disc rasterized at pane size, GPU-scaled 2.4x
  • server incremental transcript-title scan: read only appended bytes

v2.1.0

New

  • ui Apple-Intelligence working glow on active chats
  • layout 'Reimposta pannelli': flatten splits back to first level
  • shell 'Reimposta pannelli' in the app menu + Electron-parity traffic lights
  • spaces Spazi: workspace groups for app-level tabs
  • shell installed-app hot-reload: disk-served /public with auto-reload
  • sidebar Fissati: Arc/Dia-style pinning for chats and projects
  • windows pop-out to real OS windows with cross-window presence
  • ui make the working glow actually pop: two-comet ring + breathing halo
  • terminal auto-name Claude Code chat tabs from the session topic
  • tauri self-contained release with bundled server sidecar + auto-update

Fixes

  • ui sidebar resize grab band + activity subline spacing
  • panes closed tabs stay closed after reload, for every pane kind
  • split coherent split system across every surface and group kind
  • mcp open_project and create_project work from terminal Claude tabs
  • sidebar resize drag froze the instant the pointer crossed a native browser pane
  • sidebar resize handle at the real sidebar edge, not x=0
  • ui working glow on terminal Claude panes, not just chats
  • shell traffic lights must never vanish: fail-safe reposition
  • status AskUserQuestion and ExitPlanMode read as 'your turn', not 'working'
  • sidebar closing a pinned chat archives it: kills the resurrection loop
  • sync project pane channel writes are now durable: no more dead-id tabs
  • panes durable per-id tombstones: closing 50+ tabs can't resurrect old ones
  • sidebar no resting edge line on the resize handle
  • daemon treat a pre-boot lock as stale even if its pid is now alive

Performance

  • ui idle-prefetch the ⌘K palette chunk + contain:layout on split cards

v2.0.0

New

  • status show live Claude Code agent count in the status bar
  • porting Tier-1 native shell + local-serve architecture
  • porting CEF spike crate + confirm cef-rs builds on macOS
  • browser glass chrome, edge-to-edge view, inline dev controls, responsive resize mode
  • status version popover with auto-update box + fix refresh spinner
  • tauri Topics renders natively + connects to data server (Tier-1)
  • tauri Electron-parity window chrome: frameless titlebar, vibrancy, floating splits
  • browser toolbar inherits window vibrancy (cell bg transparent)
  • status align memory to macOS footprint (≈ Activity Monitor)
  • tauri window drag + on-demand traffic lights (Electron chrome parity)
  • tauri native browser pane (multi-webview) + dropdown occlusion + floating transparency
  • tauri per-region floating vibrancy (frosted cards + clear gaps)
  • tauri force-show traffic lights in fullscreen (no-exit-trap)
  • layout pure n-ary split-tree engine (layoutTree): P2 foundation
  • tauri native folder picker (selectDirectory via tauri-plugin-dialog)
  • tauri native theme sync (set_theme: NSWindow appearance + vibrancy re-tint)
  • layout legacy PanelGridRow[]/GroupLayoutRow[] -> layoutTree adapters (P2)
  • layout tree -> legacy reverse adapters + round-trip fidelity tests (P2)
  • layout split controller geometry helpers: dropZone + pxToWeightDelta (P2)
  • tauri system tray with Show/Quit (baseline)
  • tauri hide-to-tray on window close (+ ⌘Q-safe quit)
  • layout <SplitTree> recursive renderer + <Divider> (P2, additive)
  • layout useSplitController hook: completes the P2 component layer
  • tauri View menu zoom in/out/reset (⌘=/⌘-/⌘0)
  • tauri Help menu: Topics on GitHub (opener)
  • layout splitTreeEngine setting (experimental, off) + Settings toggle
  • layout wire splitTreeEngine into PanelGrid (behind flag)
  • layout remove artificial pane-count cap + sharper split previews
  • tauri native completion notifications (parity)
  • tauri persist window size/position across launches (parity)
  • tauri auto-updater infrastructure (plugin + signed-release config)
  • tauri dev hot-reload: watch /public, reload webview (Electron parity)
  • floating-splits wider gap between floating cards (2px → 6px gap)
  • terminal "Reload" action in the tab menu to restart a session in-place
  • tauri native autoresizing frost cover during resize gestures
  • terminal "Restarting…" overlay during reload (no grey flash)
  • terminal "Session expired" overlay with id/info + inline Reload button
  • tauri always-on-top global shortcut (Cmd/Ctrl+Alt+T): Electron parity
  • tauri add View ▸ Always on Top menu item for discoverability
  • layout opt-in overlay sidebar: true zero-frame-drop toggle (Settings ▸ Appearance)
  • tauri overlay sidebar default → zero frame-drop on the toggle
  • tauri browser_eval_js: read-side agent primitive for native pane (no CEF)
  • tauri full browser chrome + real nav/state on the native pane
  • tauri browser console capture → real console badge on the pane
  • tauri browser device/responsive emulation (UA + letterbox)
  • tauri find-in-page match counts on the browser pane
  • tauri DevTools (Web Inspector) toggle on the browser pane
  • tauri select-element (Cmd+Shift+E) on the browser pane
  • tauri browser downloads → DownloadStrip on the native pane
  • tauri agent activity pill on the browser pane
  • tauri opt-in streaming browser → agent can drive the pane on Tauri
  • tauri native-pane agent-delegation core (transport seam + dispatch guard)
  • tauri native-pane agent delegation: WS wiring + client executor + e2e
  • tauri-browser native browser_screenshot (WKWebView takeSnapshot → base64 PNG)
  • tauri persist window size + round browser-pane corners + AppKit focus reclaim
  • tauri wire the auto-updater on Tauri (was dead despite full Rust infra)
  • browser native agent control on the Tauri pane (observe/act/extract)
  • browser Phase 2: vision read_screen/point on the native Tauri pane
  • browser Phase 4: scheme-guard LFI + history dropdown on the Tauri pane
  • settings notifyEvenWhenFocused on by default
  • layout wire project GroupLayout to the split-tree engine (behind flag)
  • browser surface `untrusted` on native-pane browser_act results
  • tauri set a Content-Security-Policy + add a headless browser/perf self-test
  • vibrancy frost the browser address bar + instant tab geometry
  • browser browser_upload: agent uploads a local file to a page file input
  • browser browser_status: real url/title/viewport/loading for the agent
  • tauri "Open at Login" (autostart): Electron parity
  • tauri dynamic dock badge + menu-bar tray glyph from attention total
  • tauri clickable tray menu: jump to any topic needing you
  • browser async browser_eval on the native pane via callAsyncJavaScript
  • browser real system-browser handoff + honest native-pane op hint
  • status tiered session status: amber "act now" vs blue "done", legible fills, live activity feed
  • tauri window.open in-place navigation, per-topic cookie isolation, WKHTTPCookieStore commands
  • browser save/load/import login state on the Tauri native pane

Fixes

  • porting desktop server is HTTPS/WSS (trusted Armonia Local CA), not http
  • status agent count from real loading signals + de-dup dropdown memory
  • status breathing room above the system panel + drop dead row hovers
  • status cut the confusing/contradictory numbers (WS, Tab aperti, PC load)
  • browser transparent address bar at rest
  • browser toolbar inherits window vibrancy (no own background)
  • status align CPU/memory tiles, restore honest "Tab aperti" + update chip
  • status refresh counter resets after spin + ticks live
  • browser don't make the native-browser cell transparent (it blanks the view)
  • status label memory honestly as RSS (vs Activity Monitor footprint)
  • browser reap idle Chromium + arm context reaper at creation
  • browser single-flight ensureBrowser launch
  • tauri unfreeze split-out browser tabs + usable browser placeholder
  • browser keep split-out browser tab draggable + cleaner drag ghost
  • tauri remove env-gated dev eval hook (dynamic-code-eval finding)
  • tauri restore native vibrancy + make sidebar topbar draggable
  • tauri P0 stop-the-bleeding: nav-guard, ⌘W, single-instance, SSE, drag-drop, perf
  • tauri vibrancy renders: drop negative layer.zPosition (excluded it from behind-window blur)
  • tauri show project actions in the add-menu under Tauri (isElectron→isDesktop)
  • layout harden splitTreeEngine per adversarial review
  • tauri version popover shows real OS, not 'Web' (platform via UA fallback)
  • layout thread onEqualize into recursive SplitTree (column dbl-click-equalize)
  • tauri real HW-acceleration detection (was hard-coded OFF → false FPS alarm)
  • tauri HW-accel status without a WebGL probe (was killing vibrancy)
  • tauri vibrancy restored: isTauri gate + synchronous first paint
  • tauri ⌘R / ⌘⇧R reload via renderer (native menu accelerator is swallowed by WKWebView)
  • tauri frost tracks sidebar collapse live (was lagging → stale grey edge)
  • tauri rAF-track the frost (was setTimeout-debounced → lagged every resize)
  • tauri restore frost (revert rAF debounce) + isolated window-resize live-track
  • tauri track window-edge resize natively (reflow frost from AppKit's resize delivery)
  • tauri window-resize frost cover (native, sized each Resized step)
  • tauri vibrancy/chrome commands die once browser panes mount (multi-webview)
  • tauri "all-grey" panes: frost-cover not lifted on a spurious Resized
  • tauri tab drag ghost rendered as a file in WKWebView
  • tauri fit terminals AFTER revealing them, not while content-visibility:hidden
  • tauri-browser native-pane occlusion/perf/focus: structural, no hide-kludges
  • tauri-sidebar overlay-only on desktop-Tauri: kill the terminal-blank kludge
  • tauri round window content corners for native browser panes; keep sidebar strip
  • tauri dismiss FPS panel on collapse, track native pane in slide, show WebKit scrollbars
  • tauri ref-count terminal resize brackets; correct stale reclaim comment
  • layout de-stale useSplitController.close; document the engine resize floor
  • sidebar balance the resize bracket across a rapid collapse→expand burst
  • sidebar FLIP animates only on collapse/expand toggle, not on width resize
  • sidebar store + cancel the FLIP Play rAF (robustness, from adversarial review)
  • dnd WKWebView no longer closes the pane dropped onto a split
  • terminal DOM renderer on Tauri: @xterm/addon-canvas crashes on xterm v6
  • dnd WKWebView dropEffect close-bug fix + drop obsolete [dnd-debug] logs
  • browser sync-hide native view on dragstart + gate screencast on pane visibility
  • browser the address bar inherits vibrancy
  • tauri browser self-occlusion freeze, floating-splits divider seam, embed-model docs
  • security token-gate /api/terminal/sessions/:id/send and /buffer
  • tauri restore the verified CSP (was nulled as an incident precaution)
  • tauri-browser activate a native pane's tab when you click inside it
  • browser React-controlled fill/type + clear/triple_click, one action source
  • browser per-session browser panes + don't swallow session-initiated opens
  • browser navigate force-opened browser panes on Tauri (initialUrl seed)
  • focus faster browser-pane focus-on-click + standard tab-cycle shortcuts
  • focus forward app shortcuts to renderer when a browser pane holds focus (Tauri)
  • vibrancy sync sidebar frost with the collapse/expand slide (Tauri)
  • sync reconnect the WS immediately on foreground so mobile re-syncs at once
  • tauri dock-icon reopen + persist always-on-top (Electron parity)
  • split let a tab drop onto a pane's inner edge that abuts a divider
  • browser raise agent vision budget 5→20 + reset it per navigation
  • status tighten the activity subline under the row name
  • notifications OS system banner only for actionable events, not every turn-end
  • notifications drop in-app toasts, OS banner on action-required OR finish
  • server 409 on project-name collision, 400 on switch to archived topic
  • panes pop-out never destroys the pane when window.open fails

Performance

  • tauri browser panes show a placeholder instead of streaming
  • layout DOM-direct divider drag in SplitTree (zero re-render, top UX)
  • tauri kill implicit CA animations on vibrancy reconcile (sidebar-toggle FPS)
  • tauri native CAAnimation for the sidebar frost (kill the 5-step follow stutter)
  • layout dedup drop-target state on dragover (kill laggy drop-area previews)
  • tauri kill sidebar-toggle jank from DOM-terminal reflow (WebKit)
  • tauri coalesce xterm fit() across the sidebar slide (on top of content-visibility)
  • client migrate WS schemas zod → zod/mini (~14KB gz off the bundle)
  • tauri gate browser screencast frames on pane visibility
  • sidebar startTransition the toggle → zero dropped frames at the click
  • tauri restore sidebar push-and-reclaim without the terminal-reflow freeze
  • tauri adaptive synchronised sidebar push + floating-splits gap match
  • tauri skip redundant bounds re-pushes; bound download set; harden locks
  • tauri only poll the VISIBLE browser pane for url/title/console
  • sidebar FLIP the push so the slide is 60fps with N live terminals (no snap)
  • sidebar round the FLIP invert delta to whole px (native-pane edge anti-jitter)
  • sidebar empirical layout-cost proof of the FLIP + performance contract
  • sidebar composited FPS verified lock-proof (FLIP 0 dropped frames vs old all-dropped)
  • sidebar real-WebKit verification of the FLIP layout cost (lock-proof)

v0.1.0

New

  • add server routes for activity, agents, checkpoints, journal, memory, usage, and more
  • refactor layout to pane/group architecture
  • enhance chat with plan mode, memory, checkpoints, and offline queue
  • add sidebar panels, agents/context/journal views, usage tracking UI
  • update shared components, modals, browser, terminal, and App.tsx
  • add dev:server and dev:client scripts
  • polish tab bar styling and panel layout
  • refactor sidebar tools into dropdown menu
  • improve chat resilience and instant auto-name
  • resilient streaming with in-memory buffer
  • add multi-row/column grid layout with VS Code-style splits
  • resilient chat with draft persistence, SSE dedup, and stream catchup
  • expandable PlanView with markdown and unified overflow menu
  • streaming indicators in sidebar and multi-topic context tracking
  • cross-group DnD, edge-drop splits, context rings, and tab polish
  • AI-powered auto-naming via gateway LLM call
  • wire cross-window streaming and polish sidebar resize
  • fixed-width tabs and cross-group tab DnD
  • migrate storage to SQLite and add abort endpoint
  • per-session abort controllers and stop streaming
  • sidebar Topics dropdown menu and tools panel
  • terminal reconnection and session management
  • DOM-level grid resize for fluid dragging
  • browser isolation - a11y snapshots, cookie persistence, selector actions, context indicator
  • browser isolation per topic via BrowserService + CDP
  • restructure Processes sidebar: scripts API, process log pane, ports in System Status
  • make keyboard shortcuts electron-aware
  • show git status colors in file explorer
  • split staged/unstaged in git changes, add remote management
  • add project status indicators to sidebar and tab bar
  • refactor browser panel to screenshot-based CDP viewer
  • add message branching (edit & branch navigation)
  • add Web Push Notifications
  • PWA auto-update banner + service worker versioning
  • show build timestamp in sidebar status bar
  • refresh/update button in sidebar status bar
  • mobile bottom bar + compact sidebar for tablet/mobile
  • move tab bar to bottom on mobile/tablet (flex-col-reverse), keep top on desktop (lg:flex-col)
  • Electron: replace BrowserView with main window, add dev mode identity
  • draft panes, agent spawn cards, browser sidebar, and layout improvements
  • add TLS support, dev-mode proxy, and build infrastructure
  • improve PWA for mobile Safari: icons, safe areas, theme colors
  • gateway WebSocket integration and server-side UI state sync
  • persist terminal sessions across restarts, add mobile touch keys
  • chat message queuing, retry on error, tool result streaming
  • file explorer multi-select, drag-drop, batch git ops, editor UX
  • sub-agent polling via JSONL, gateway streaming, process log persistence
  • layout cross-tab sync, touch sidebar, empty-state UX, project layout persistence
  • uniform sidebar accordions: chevron after label, file toolbar
  • tab bar portal menu, floating add button, sidebar overlay layout
  • redesign toast notifications: portal, compact style, expose context
  • pinned active topics when project/section collapsed in sidebar
  • terminal paste-image, explicit git push remote/branch, stream cleanup
  • auto-open project pane when terminal cwd matches known project
  • show project name badge on terminal sidebar items
  • cross-device panel sync via server + WS
  • render MEDIA markers inline in message content
  • FileSearch arrow-key navigation and command palette entry
  • always inject project awareness context + prefer HTTP streaming
  • 01-02 create API fixtures module for test data setup/teardown
  • 01-01 create dnd, scroll, and ws domain-specific helper modules
  • 01-02 create 11 page object fixtures and composition entrypoint
  • 01-03 add structural data-testid attributes to React components
  • 01-03 add infra validation spec and conventions doc
  • 02-01 add data-testid and aria-label for chat E2E test locators
  • 02-01 create SSE mock helpers and test upload fixture
  • 02-04 add message action toolbar tests with hover, copy, and pin verification
  • 02-02 rewrite core chat E2E tests with SSE mocks and ChatPage fixture
  • 02-05 add chat input feature tests and update createTopic fixture
  • 03-01 add delete confirmation dialog and system prompt/context files to modals
  • 03-01 convert sidebar drag-reorder from native HTML5 DnD to dnd-kit
  • 03-02 create TopicManagementPage fixture and extend API fixtures
  • 03-02 add topic management E2E tests with 7 passing CRUD tests
  • 03-03 add E2E tests for topic settings, folders, unread, color, and drag-reorder
  • 04-01 add command palette E2E tests covering CMD-01, CMD-02, CMD-03, CMD-06, CMD-07
  • 04-02 add file search, message search, and shortcuts modal tests
  • 05-01 add data-testid attributes to all Board components
  • 05-01 extend KanbanPage fixture and API fixtures with approval/memory helpers
  • 05-02 add kanban board E2E tests for KANBAN-01 through 05 and KANBAN-10
  • 05-03 add KANBAN-06 through 09 E2E tests with TDZ and fixture fixes
  • add Playwright global setup for E2E test isolation
  • 06-01 add data-testid attributes to 8 file-related components
  • 06-01 add file explorer fixture and test scaffold with git repo setup
  • 06-02 implement FILE-01 through FILE-06 E2E tests
  • 06-03 implement FILE-07 through FILE-09 E2E tests
  • 07-01 add data-testid attributes and enhance terminal fixture + API helpers
  • 07-01 add TERM-01, TERM-02, TERM-05 terminal E2E tests
  • 07-02 add TERM-03 reconnect and TERM-04 multi-instance E2E tests
  • 08-01 add data-testid attributes and extend DashboardPage fixture
  • 08-01 add dashboard E2E tests DASH-01 through DASH-05
  • 08-02 add activity feed SSE and journal pane E2E tests (DASH-06, DASH-07)
  • 09-01 expand agent fixture with mock data and page object methods
  • 09-01 add E2E tests for AGENT-01 through AGENT-04
  • 09-02 add E2E tests for AGENT-05, AGENT-06, AGENT-07
  • 10-01 add data-testid attributes and expand context/settings fixtures
  • 10-01 add E2E tests for CTX-01 through CTX-07
  • 10-02 add settings panel E2E tests (SET-01 through SET-04)
  • 11-01 extend layout fixture with project, sidebar, and context menu helpers
  • 11-01 add layout-navigation tests for LAYOUT-01 through LAYOUT-05
  • 11-02 add LAYOUT-06 and LAYOUT-07 E2E tests
  • 12-01 add cross-feature interaction E2E tests
  • 12-02 add CROSS-02, CROSS-06, CROSS-07 cross-feature E2E tests
  • quick-260329-2cs isolate E2E tests on dedicated server port 3334
  • isolated test server on HTTP port 3334 with seed data
  • quick-260329-evh fix sidebar, system, and mobile-responsive tests for isolated server
  • quick-260329-evh fix panels, grid-split, context-and-layout, and mobile tests
  • 260329-hkn add WS subscriptions to AgentSpawnCard and BrowserSidebarControl
  • 260329-hkn optimize SessionHistory polling and reduce dashboard interval
  • add x-openclaw-scopes header to gateway API calls
  • 14-01 add dashboard:updated WS broadcasts to boards.ts and agent-heartbeat.ts
  • 14-01 add cron:updated WS broadcasts to cron.ts
  • 16-01 add Split Right and Split Down context menu for grid panel splitting
  • 17-01 add data-testid attributes to MessageParts.tsx tool call components
  • 17-01 add data-testid attributes to MessageContent.tsx media/attachment components
  • 17-02 extend SSE helpers with tool call and media mock functions
  • 18-01 add WS subscription to useDashboard + fix auto-refresh label
  • 19-01 add sample spec annotation to first chat test
  • 19-02 add spec-coverage.ts traceability matrix script
  • 20-02 write topics spec TOPIC-01 CRUD & Lifecycle section
  • 20-01 write chat spec CHAT-01 and CHAT-02 sections
  • 20-02 add TOPIC-02 Organization section to topics spec
  • 20-01 complete chat spec with CHAT-03 and CHAT-04 sections
  • 21-01 write kanban board behavioral spec with 35 GIVEN/WHEN/THEN scenarios
  • 21-03 write agent monitoring behavioral spec with 32 scenarios
  • 21-02 write layout behavioral spec with 36 GIVEN/WHEN/THEN scenarios
  • 22-03 add context and memory behavioral spec
  • 22-02 write terminal behavioral spec with 17 GIVEN/WHEN/THEN scenarios
  • 22-02 write dashboard behavioral spec with 26 GIVEN/WHEN/THEN scenarios
  • 22-03 add command palette and settings behavioral spec
  • 22-01 write files and git behavioral spec
  • 23-02 annotate 91 layout tests with spec requirement IDs
  • 23-02 annotate 30 file/kanban/cross-feature tests with spec IDs
  • 23-01 annotate chat, agents, topics, and sidebar tests with spec IDs
  • 23-01 annotate terminal, dashboard, commands, and context tests with spec IDs
  • 23 add missing spec annotations to 11 tests across 5 files
  • 24-02 add 10 kanban gap closure tests (KANBAN-11 to KANBAN-20)
  • 24-02 add 4 agent gap closure tests (AGENT-08 to AGENT-11)
  • 24-03 add 10 file explorer and git gap closure tests (FILE-10 to FILE-19)
  • 24-03 add 5 command palette gap closure tests and CMD-01 annotations
  • 24-01 add 8 dashboard gap closure tests with spec annotations
  • 24-01 add 5 terminal gap closure tests with spec annotations
  • openspec archive complete-spec-coverage: 17 specs, 35 requirements, 556 scenarios
  • 26 wire CronJobsPanel + build WebhooksPanel into sidebar toolbar
  • 27-01 add infra fixture with mock helpers for cron, webhooks, remote, system panels
  • 27-02 create browser/process fixture with mock helpers
  • 27-02 add 13 E2E tests for ScriptRunner, BrowserSidebarControl, RemoteBrowserPanel
  • files add Show in Finder context menu and root-level file creation
  • layout sync project layout from server on load with tab-sync E2E tests
  • layout add server-sync on load to PanelGrid (grid rows, solo topics)
  • add performance spec + CLS tests + fix white flash
  • add visual stability testing: screenshot diff + DOM mutation monitoring
  • auto-run AI visual review after every test run
  • terminal session resume on server restart
  • /project slash command for chat-based project management
  • crash recovery, always-on-top toggle, persistent preferences
  • add Open Project folder picker from command palette
  • external file drop, terminal improvements, sidebar & layout refinements
  • traffic lights hover, empty dir upload, file explorer UX polish
  • external file drop with folder support, toast feedback, and visual indicators
  • PTY bridge daemon with Unix socket for session persistence
  • traffic lights tied to Topics dropdown, viewport overlay mode
  • unified tab notification badges with sidebar sort
  • multi-provider AI abstraction (OpenClaw + Claude)
  • electron open external URLs in system browser
  • editor add PDF/HTML/media viewer support in both FilePane and EditorTabs
  • tabs tab persistence, recently closed (Cmd+Shift+T), and UI undo (Cmd+Z)
  • dnd allow drag-split for all pane types, not just chat/project
  • open-project open directory as project tab from Claude Code or sidebar
  • command-palette show recently closed tabs in Cmd+K
  • providers add claude-code CLI provider
  • terminal add Resume button for ended claude-code sessions
  • editor render raw HTML in MD preview via rehype-raw
  • terminal enable iOS-style touch-scroll with momentum on mobile
  • layout drop-between divider with widened hit-zone (#7)
  • layout split-down inserts row adjacent to source, not at the bottom (#8)
  • layout per-cell vertical sub-stack ('split-down' lands under source column) (#9)
  • layout tri-state focus visualization for project tabs
  • providers multi-provider picker + Codex/OpenAI auto-detect + diagnostics (#16)
  • providers cross-window picker sync, tool-call rows, codex hardening
  • messages chronological content-blocks timeline + provider history
  • db add projects + worktrees tables, topics.worktree_id FK (016-018)
  • types add Project + Worktree types and naming generator
  • services ProjectStore, WorktreeStore, WorktreeManager + AppContext wiring
  • routes /api/projects + /api/worktrees with WS broadcasts
  • topics bind worktree_id at create/update + cwd resolution
  • git-watcher support git worktrees + optional worktreeId broadcast
  • client Project + Worktree types, API client, useProjects/useWorktrees hooks
  • modals worktree picker in New Topic + read-only worktree section in Topic Settings
  • types WSProjectMessage + WSWorktreeMessage discriminated union
  • daemon Phase B: singleton lock + state file + control HTTP + LaunchAgent IPC
  • topics Phase C: initial message queue (TOPIC-IM-01)
  • machines Phase D: multi-machine domain + heartbeat ticker
  • updater Phase E: electron-updater + sticky "Restart to Update" toast
  • ux Phase F: no-flash boot 3rd layer + scoped notifications + caffeinate
  • design Phase G: 3-layer token system + window chrome polish + animation set
  • cli Phase H: minimal `topics` CLI binary
  • polish close out deferred items from Phase A→H
  • client Things3-style pending-action countdown for soft-destructive ops
  • client context ring in chat input, global ⌘1-9 across all tabs, claude-code model selector
  • providers persist claude-code session id for --resume + codex history continuity
  • panes inline countdown ring on tab/sidebar: drop the bottom-right toast
  • panes extend countdown to terminal/browser sidebar; skip read-only tabs; remove redundant 'Open as project' icon
  • 30-01 add Topic.browserState type + remove 19 orphan browser IPC handlers
  • 30-01 browser-state-store pure module + bun:test coverage
  • 30-01 BrowserService persistence + runtime Chromium path + explicit targetId Map
  • 30-02 WS protocol envelope + /ws/browser/:contextId upgrade handler
  • 30-02 real CDP screencast + Playwright dispatchInput in BrowserService
  • 30-02 WS-first useRemoteBrowser + connection indicator + click ripple
  • 30-03 add browser tool definitions + Moondream client + handler skeleton
  • 30-03 implement BrowserService observe/annotate helpers + handler bodies + WS broadcast registry
  • 30-03 expose 6 browser agent tool endpoints under /api/browsers/:id/agent/*
  • 30-03 KILL OpenClaw browser bridge -- remove browserTargetIdCache + isolation injection from topics.ts
  • 30-04 provider tool format adapters + browser_* dispatcher
  • 30-04 forward browserTools through claude + openai providers
  • 30-04 wire browser_* dispatcher into topics.ts onToolStart
  • 30-04 take_control + agent overlay + URL history + localhost iframe
  • 30-04 SelectElementOverlay backend + chat:insert-text bridge
  • 30-04 /browser slash command + sidebar tab card + listener
  • 30-05 add Phase 30 perf spec section + perf-baseline.json
  • 30-05 fill BrowserProcessPageV2 fixture body + 5 helpers
  • 30.1-01 expose browserNative IPC bridge in Electron preload
  • 30.1-01 add BrowserNativeManager + 8 IPC handlers in Electron main
  • 30.1-01 server CDP probe + browser-cdp-dispatcher
  • 30.1-01 wire CDP dispatcher into tool handler + REST endpoints
  • 30.1-01 client-side useNativeBrowser hook + Electron render branch
  • 30.1-polish DevTools toggle button + Cmd+Opt+I shortcut for native browser
  • 30.1-overlay transparent BrowserWindow for menus above WebContentsView
  • notifications topic completion toast + native desktop alerts
  • panes top-level "split right/down" works with a single tab
  • panes keep-alive ladder for top-level (StandaloneChatGroup)
  • history buildProviderHistory helper: DB as conversation source of truth
  • 30.1-polish Chrome-parity UX (A.1-A.5 + B.1-B.2)
  • openclaw forward conversation history so the gateway can rehydrate
  • 30.1-polish permissions + downloads + select-element + reflow (C+D+E)
  • panes pulse terminal tabs while their pty is producing output
  • agents per-tool detail rendering + sub-agent visibility
  • context canonical envelope types + provider strategy registry
  • context assembleTopicContext + 27 unit tests
  • context adaptEnvelope + composeSystemMessages + regression test
  • context in-memory snapshot ring (5 envelopes per topic)
  • context preview & snapshots endpoints
  • client canonical envelope inspector view
  • chat unified composer button with smart stop/queue/send toggle
  • chat ask-user-tool: pause stream, show form, resume on submit
  • ws Zod validation for /ws/browser/:contextId protocol, WS-01 partial
  • schemas Zod schema for ToolCallDetail union: NORM-01 foundation
  • ws Zod validation for /ws main channel inbound: WS-01 extension
  • chat wire parseToolCallDetail at renderer boundary: NORM-01 live
  • ws welcome/hello handshake with version + capabilities: WS-02
  • db sanitize ToolCallDetail at hydration boundary: NORM-01 complete
  • agents explicit FSM module for agent sessions + profiles: AGENT-01 foundation
  • v3 WS-04 contract test + AGENT-FSM adoption at heartbeat checker
  • agents extend FSM adoption to profile updates: AGENT-01 complete
  • ws outbound emit-side Zod validation registry: WS-01 outbound
  • ws expand outbound registry to 37 types: domain broadcast coverage
  • ws outbound registry FULL coverage: 87 types, WS-01 complete
  • v3 outbound 100% + client inbound + AGENT-02 epoch + AGENT-04 NaN fix
  • claude-code topics-app MCP server bridges open_browser_pane to CLI
  • activity expose /api/activity/log query endpoint
  • chat /project slash command: create / open / info
  • electron global keyboard shortcut for Always-on-Top
  • notifications cover all tab types + fix dead chat-notif path
  • master-topic Agent Teams Master mode + kanban jump-to-tab
  • browser bidirectional chat↔browser focus + pre-shift on tab close
  • claude-sessions canonical lifecycle tracker for Claude Code sessions
  • claude-sessions live phase indicator on chat tabs
  • master rename ARCHIVIA→COMPLETA + surface Claude Code terminals in Master
  • loading aggregate streaming signal onto project tab + sidebar row
  • tabs roll child loading + notifications up to the project tab
  • tabs loading spinners for browser + agent tabs, rolled up to project
  • notifications wire Claude session states into the badge system
  • server central pty activity tracking for terminal/claude-code sessions
  • mcp Phase-1 CLI bridge tools: processes & tasks, project-scoped
  • master pure parser for the ## Next proposal contract
  • master ingest endpoint: proposals become persistent kanban cards
  • master kanban proposal cards + ingest trigger on reply end
  • ui terminal→browser pane, deferred terminal close, cool palette pass
  • status Claude session phase tracking + Electron tray
  • processes surface Claude-launched dev servers in Processes panel
  • master terminal buffer scrape for ## Next (subscription-safe ingest)
  • master terminal-Master wiring: role prompt + buffer-scrape ingest
  • master session control: read/write/close MCP tools + live PTY test
  • desktop cross-platform packaging + in-app auto-update
  • master free periodic attention monitor (model-free ping)
  • master surface master:digest as a toast + monitor API
  • master monitor on/off toggle next to the sidebar Master button
  • landing Aurora OS promo site for topics.armonia.io
  • landing faithful real-app hero, richer texture, SVG icons, OS-first download, no em dashes
  • landing use the real app UI screenshot + GitHub icon + fix OS hint
  • landing interactive React demo replaces the screenshot
  • landing realistic app demo: faithful dark IDE chrome, generic data
  • status unify tab/sidebar/project notifications + loading into one model
  • landing hero uses the REAL app components (mock data)
  • landing hero demo IS the real app (mock backend, generic data)
  • landing feature Claude Code sessions + 2×2 split, fix NaNd build chip
  • landing hero shows TWO projects open at once (the multi-project figata)
  • landing 3 projects open, no git tab, processes visible, one done
  • selection one neutral "selected" surface for tab bar + sidebar
  • sidebar light the active inner tab of a focused project, not just the folder
  • master pimp the Master pane: identity + starter prompts + proposals
  • board pure recommendation + autopilot engine for the Agents Board
  • master bindable auto-pilot via Claude Code /loop
  • landing hero mockup shows 3 open projects + browser preview
  • landing render hero app at a larger logical viewport (bigger-screen feel)
  • landing restore hover straighten on hero, minus the zoom
  • board Agents Board section: status + preview + action + Autopilot
  • sidebar+tabs card rows, split mini-map, project-tab parity, icon allowlist
  • landing refresh demo to latest board/Master/tab design + fix terminal logo
  • quick-260606-1uk Settings showBoard/showMaster + total Board/Master opt-out
  • quick-260606-1uk header reorg: drop icons + SidebarControls, move into Topics ▾
  • quick-260606-1uk inline live search next to Topics ▾
  • grid double-click a divider to equalize the split (1/n)
  • electron keep traffic lights visible in full-screen
  • electron opt into macOS notch safe-area
  • ui frosted-glass popovers + GridLoader working-indicator
  • sync cross-device project tab identity via ui_state + additive union hydration
  • sessions track topic-less terminal Claude sessions + pty-idle reaper/revive
  • notifications native OS banners + pty-finished safety net
  • landing ghost-cursor demo session + gap-free mascot + page refresh
  • panes unified add-tab menus, Claude/Codex agent picker, sidebar actions
  • header icon-only Search twin of the + button; New… palette moves to ⌘N
  • updater self-managed mac auto-update for unsigned builds
  • panes ⇧⌘T reopen-closed-tab, ⌘K history unification, fix reopen swap
  • scripts signed Topics Host launcher to anchor macOS TCC for computer-use
  • landing tease the demo above the fold, refined type, fix 'for you' badge
  • scripts Topics Host self-requests Screen Recording + Accessibility (TCC)
  • cloud cloud sessions open & nest into Topics projects
  • cloud open any cloud session as a first-class interactive chat
  • browser split beside chat on session-open, reuse if open, tab cue
  • cloud conversational project placement + cloud identity + hardening
  • cloud cloud cue in ⌘K + sessionKey shape guard on adopt
  • layout split a project tab into a single column (cellStacks), not a full-width row
  • layout floating-splits: desktop-only detached rounded panels
  • layout floating-splits: transparent window so gaps show the real desktop
  • layout per-region native vibrancy: frosted panels + clear-desktop gaps
  • layout live vibrancy tracking during divider resize
  • ws per-topic delta subscription: server scaffolding (P6, step 1/3)
  • browser import_chrome: seed the native pane from the user's real Chrome logins
  • layout weight project cells by internal splits on equalize
  • agent-control move_session_to_project MCP tool + move-to-project endpoint
  • signals blue "awaiting feedback" tab/row for stopped chats
  • browser expose pane observe/act via MCP + persist the CDP target map
  • signals extend awaiting-feedback blue to terminal + project tabs
  • signals awaiting-feedback = solid electric-blue tab background
  • browser drive the pane from a terminal session, not just a chat topic
  • browser vendor Jarvis ref-based snapshot/diff engine + ops surface
  • browser unify agent tool surface to Jarvis parity (snapshot/diff + full interaction)
  • browser add browser_read_screen (vision->text via Moondream)
  • browser login sharing: browser_save_state/load_state (Jarvis interop)
  • browser block file://chrome:// for agent navigation (browser_open)
  • orchestrator MCP tools for a Claude session to spawn & drive sub-agents
  • browser non-shifting agent-activity pill with live action description
  • tools migrate claude-code topic/project control from markers to MCP tools
  • browser close the browser pane when the page calls window.close()
  • tools wire codex onto topics MCP + make topic/project/browser prompts tool-only
  • perf live FPS history + PC/Topics perf diagnostics in status bar
  • browser dev toolbar: pretty URL, zoom, device, quick console, history menu
  • browser render ⌘K above the native browser via an overlay-host window
  • ui unified popover design-system + responsive browser address bar
  • splits auto-rebalance the outer grid when an inner project split changes
  • splits auto-equalize project-internal splits + weighted vertical balance
  • perf real total app memory + CPU in status bar (not just server RSS)
  • porting Tier-1 Tauri spike + low-footprint porting plan

Fixes

  • remove unused variable warnings for production build
  • UI polish: sidebar streaming stop, message layout, system status
  • SW network-first strategy to prevent stale module errors on refresh
  • eliminate skeleton flash with synchronous cache init
  • use Playwright ariaSnapshot() instead of deprecated accessibility API
  • ports always visible, no sub-accordion for scripts, tab opens only on running click
  • show active ports in Processes sidebar section
  • per-process ports, persist script state across server restarts
  • remove loading spinner from ScriptRunner
  • fetch scripts and running state together to avoid idle flash
  • remove Suspense spinners from Files and Tasks sections
  • eagerly import FileExplorer and TaskBoard in sidebar
  • show minimal spinner in ScriptRunner while loading
  • improve scrollbar behavior and simplify kbd styling
  • swap time and archive button on hover in topic items
  • handle detached HEAD state in git status and branch list
  • improve script stop reliability and zombie detection
  • improve streaming performance and markdown rendering
  • wire editMessage/switchBranch through App and PanelGrid
  • TS errors for production build, rebuild public/
  • prevent horizontal overflow on mobile chat
  • chat input overflow on mobile, prevent horizontal scroll
  • responsive tabs on mobile, prevent overflow/clipping
  • force cache clear + hard reload on refresh button
  • move refresh button next to build timestamp, fix nested button
  • allow horizontal scroll on tab bar (mobile touch), remove global overflow-x-hidden
  • textarea clipping at tablet/medium widths
  • add min-w-0 + overflow-hidden at all flex levels to prevent content overflow on iPad/tablet
  • inline code and long paths overflow in message bubbles
  • force max-width calc(100vw) on message bubbles mobile + overflow-hidden on message list
  • message bubble max-width uses calc(100vw - 5rem) on mobile to account for sidebar
  • force overflow-x hidden on html/body/root, constrain all child widths
  • tab bar overflow-visible → overflow-x-auto, tabs scroll without pushing content wider
  • add min-w-0 to ProjectWindow root flex container
  • add min-w-0 to StandaloneChatGroup + GroupLayout containers: fixes mobile overflow
  • move safe-area-inset-bottom from form to ChatPane container, remove extra line under textarea
  • disable pinch-to-zoom on mobile (user-scalable=no, maximum-scale=1)
  • remove safe-area padding from ChatPane, set dark background on html/body to prevent white flash on overscroll
  • force 100dvh + maxHeight on root container for iOS PWA viewport
  • lock html/body/#root to 100dvh + overflow:hidden, prevent page scroll on iOS PWA
  • use fixed inset-0 instead of h-screen/100dvh: fixes iPad PWA dead space below textarea (also fixed duplicate style prop override)
  • inline style position:fixed + bump CACHE_VERSION to 3 to force PWA update
  • add min-h-0 to ChatPane, change PanelGrid to overflow-hidden: prevent content from exceeding viewport height on iPad
  • use safe-area-inset on fixed container edges: iPad PWA safe area fix
  • revert to inset:0, remove viewport-fit=cover, eliminate safe area gaps on iPad
  • compact sidebar header on mobile: smaller buttons (w-8), shorter header (h-11), consistent font size
  • normalize mobile sizes to match desktop: remove all oversized mobile-only padding, buttons, margins
  • compact sidebar items: h-11/44px → h-8/32px, text-13px → text-12px on mobile
  • normalize ALL remaining mobile-oversized elements: buttons, icons, padding unified with desktop sizes
  • compact project sidebar: file items 44px→28px, section headers h-10→h-8, close button w-9→w-7
  • add 70px left padding to sidebar header for macOS traffic lights (Electron frameless window)
  • change status-bar-style from black-translucent to default: keeps system bar separate from app content on iPad
  • try black status-bar-style for proper iPad safe area separation
  • restore viewport-fit=cover + black-translucent, use safe-area-inset-top to push content below iPad system bar
  • revert tab bar to top position always: ensures header visible under iPad system bar for projects
  • always show top bar even when no tabs open: empty state with header + sidebar toggle
  • uniform tab sizes (minWidth 120px), normalize tab bar button sizes
  • hook resilience: agent cache, topic fetch timeout, WS cleanup
  • SSE tool call status: send tool_result and contentOffset inline
  • terminal WebSocket auto-reconnect on HMR/server restart
  • 02 fix SSE route pattern regression from parallel worktree merge
  • 03 preserve treeitem role and remove aria-disabled from dnd-kit sortable attributes
  • 03-04 fix renderLevel root-level sort and add visual DOM order assertion to TOPIC-12
  • 03-04 rewrite TOPIC-11 test to use context menu color UI instead of API bypass
  • 03 fix failing E2E tests: fixture roles, WS intercept, drag scroll
  • 05 fix KANBAN-03 cross-column move test: use API move + reload verification
  • remove duplicate globalSetup in playwright.config.ts + cleanup worktrees
  • 02-06 fix SSE helper route pattern from **/chat/** to **/api/chat
  • 02 correct SSE route pattern to **/api/chat/* for session key paths
  • 02 dual SSE+history mock for chat tests: root cause: history wipe
  • 13 fix 4 failing chat E2E tests and harden test infrastructure
  • 15-01 resolve CommandPalette projectPath for project panes
  • 15-03 stabilize E2E tests: fix wrong ports, seed test data, fix history mocks
  • 16 remove topics-only guard from split handlers: allow any pane type
  • 16 enable drag-to-split for all top-level pane types
  • restore tab drag-reorder in split grid layout
  • resolve pane ID collisions, O(n²) group sync, and stale callback refs
  • resolve PanelGrid and GroupLayout robustness issues
  • resolve state architecture issues in layout system
  • 18-02 fix context toggle race, budget bar NaN, and file search regex crash
  • 18-03 fix BreadcrumbNav cache, EditorTabs race, ScriptRunner closure, verify SessionHistory filter
  • skip no-op tab reorder when dropped at same position
  • grid split edge cases: guard non-topic splits, add unsolo, enforce limits
  • enforce grid split limits + add comprehensive layout edge case E2E tests
  • 24 fix 4 failing gap closure tests (DASH-08, DASH-12, FILE-11)
  • openspec convert agents spec to valid OpenSpec format
  • openspec convert chat spec to valid OpenSpec format
  • openspec convert topics spec to valid OpenSpec format
  • openspec convert context and commands specs to valid OpenSpec format
  • openspec convert files spec to valid OpenSpec format
  • openspec convert kanban spec to valid OpenSpec format
  • openspec update coverage script regex for new heading format
  • openspec convert terminal spec to valid OpenSpec format
  • openspec convert layout spec to valid OpenSpec format
  • openspec convert dashboard spec to valid OpenSpec format
  • openspec convert all specs to valid OpenSpec format and update coverage regex
  • 25-01 EditorTabs abort cleanup, App.tsx validation guard and ref sync
  • 25-01 PanelGrid resize uses data-attribute selectors instead of sibling navigation
  • 28 correct spec annotation IDs for coverage tracking
  • chat improve stream reliability with timeout, error propagation, and stale cleanup
  • chat unblock tool call events for HTTP fallback sessions
  • gateway auto-sync token, circuit breaker, real-time status broadcast
  • gateway add full operator scopes, clean up debug logging
  • gateway use webchat client ID, register handler before sendChat
  • chat re-enable WS chat path for tool call visibility
  • chat skip message:new WS broadcast for own SSE sessions
  • chat use HTTP for chat, WS only for tool events (hybrid approach)
  • chat always register WS tool handler in HTTP path
  • chat enable WS path + always register tool handler
  • chat strip internal markers before broadcasting in WS path
  • chat tighten topic auto-switch rules to prevent false positives
  • adapt performance test selectors to Topics HTML
  • eliminate flash/flicker on load: inline critical CSS + localStorage pre-render
  • resolve visual stability bugs: topic switch, page load, sidebar toggle
  • AI review delegates to OpenClaw instead of direct API calls
  • Chromium cleanup: teardown kills by user-data-dir, setup has signal handlers for crash
  • gateway health check uses GET / instead of session_status
  • allow project tabs to split alongside via DnD and context menu
  • pass terminal type through project pane pipeline
  • sidebar tab-sync: only show items with open tabs
  • persist project tab sync in sidebar across reloads
  • suppress repeated git/status 400 for non-git paths
  • return 200 for non-git paths in git/status API
  • show project terminals under their project in sidebar
  • match terminals to most specific project path
  • show all project topics when project tab is open
  • show all project children when project tab is open
  • merge callback + persisted panes for project sidebar sync
  • always focus project tab when clicking project in sidebar
  • prevent tab reorder from triggering grid-level edge splits
  • split pane guards and dropdown positioning
  • auto-sync active terminals as project sub-tabs
  • prevent file drop from navigating away in Electron
  • prevent background windows from overriding shared terminal size
  • terminal touch detection and toolbar types
  • tab DnD cross-group indicator and stale edge split zone
  • prevent topic tabs from being dropped during HMR/page reload
  • electron prevent multiple instances via single-instance lock
  • electron exec Electron binary directly for launchd parentage
  • quick-260410-f5b only pass sidebar toggle to top-left panel
  • quick-260410-f5b reorder JSX so toggle button wins Electron drag region
  • quick-260410-f5b reorder tabbar/toggle JSX in 6 header branches
  • quick-260410-f5b symmetric tab padding when no sidebar overlay
  • notifications detect session completion via active→idle transition
  • topics system-message endpoint now increments unread count
  • project-window guard against transient empty topicIds wiping chat tabs
  • undo move reopen-closed-tab listener after callback definition
  • project-window don't persist empty openChatTopicIds before initial sync
  • dnd allow terminal/browser/session-viewer tabs to split via context menu
  • topics add updateUnreadCount to all stream:end paths
  • project-window suppress persistence until chat sync completes
  • terminal open links via shell.openExternal in Electron
  • tabs anchor pane context menu to tab position and portal it
  • editor resolve relative image paths in MD preview
  • editor MD preview images render GitHub-style + allow sibling media
  • pane-store close audit-found correctness gaps in layout reducer (#2)
  • terminal clickable wrapped URLs + restore GUI session for `open`
  • layout split bugs: stale focus highlight + collapsed split-down row (#3)
  • layout wire groupIsFocused on GroupLayout's PaneTabBar (#4)
  • layout preserve grid layout across reload (race with pane hydrate) (#6)
  • layout hoist split-substack hooks above empty-state early return (#10)
  • layout split-down survives reload (close persistence race + sync closure bug) (#11)
  • layout drag-drop reliability + structural cleanup (#12)
  • build drop unused isNativeApp + align popClosedTab return type
  • panels register pane entity in store before pushing into openPanels
  • layout click on pane content focuses its group
  • panels preserve focused tab across reload + click-to-focus in standalone group
  • layout forgiving split-drop + pre-hydrate focus guard
  • layout always preventDefault on tab dragover so split drop fires
  • persistence include activeChatTopicId in project save effect deps
  • layout dim project group focus ring when project isn't App-focused
  • panels cmd+W closes focused inner sub-tab before App-level pane
  • panels scope ⌘1-9 sub-tab shortcut to the App-focused group only
  • panels reopen-closed for project panes + recent projects in cmd+K
  • panels tombstone closed terminal sessions so reload can't resurrect them
  • server solid PTY-bridge lifecycle (single-instance, ack, watchdog)
  • server don't keep claude-code sessions that fail to launch as 'dormant'
  • panels top-bar utility tabs no longer leak as 'Topic not found' inside projects
  • panels App-level draft creation no longer absorbed by focused project
  • sync cross-window topic+message sync, device-local drafts
  • post-merge rebuild storm + accidental ui_state wipe
  • server boot-time cleanup of orphan topic refs in ui_state
  • client break Effect 7 ↔ HYDRATE ping-pong with PURGE_ORPHAN_PANE
  • server augment PATH and allocate PTY for /api/scripts/run
  • server set npm_config_yes for spawned scripts
  • client register project pane in store before opening (Open as project)
  • providers recompute default when openclaw gateway is offline
  • electron always open link clicks in the system browser
  • client land App-level panes in group:default by default (cmd+K focus snap-back)
  • client always write project layout to localStorage, gate only server PUT
  • server atomic saveSingleTopic, FK CASCADE on claude_code_sessions, server-validated /chat/abort wipe
  • chat clear tool spinners: dedup cumulative tool_use snapshots from claude-code provider
  • browser-service auto-discover Chromium when bundled path missing
  • 30.1-polish hide WebContentsView when DOM overlay is shown
  • electron force "+" tab button clickable in drag region
  • panes project tabs/terminals actually close after the soft countdown
  • 30.1-overlay theme matching + position alignment
  • panes keep-alive panes + history-fetch dedup so tab switch doesn't reload
  • 30.1-devtools dock DevTools inside Topics window by default
  • 30.1-lifecycle cleanup orphan WebContentsView + split layout
  • panes keep-alive uses stableKey + always renders active pane
  • 30.1-dnd persist WebContentsView across React DnD remount
  • 30.1-dnd hide WebContentsView during global drag operations
  • 30.1-persist persist browser pane in store so it survives reload
  • providers claude before openclaw: drop the openclaw default fallback
  • chat rebuild provider history from the DB, not the client POST body
  • claude-code replay DB history when --resume is forced to wipe a session
  • 30.1-e2e browser-* suite green: DATA_DIR isolation + close race
  • panes keep-alive hides browser WebContentsView reliably
  • panes re-measure browser bounds on transitionend (split / reflow)
  • browser three concrete bugs around split, sidebar label, close
  • browser three more sync bugs around split, sidebar, reload
  • panes restore icon polish in <PaneAddMenu>: mobile size + per-pane accent
  • panes revert per-pane colour tint in <PaneAddMenuItems>
  • panes curated item order in <PaneAddMenu> matches pre-unification
  • panes brand-tint every menu icon + unify trigger across all 3 callsites
  • panes brand-tint Electron overlay menu to match web portal
  • stream resilient timeout: survive long sub-agent waits, recover after silence
  • claude-code real-time onToolResult: process user events with tool_result blocks
  • electron make updates fully opt-in (no surprise downloads/installs)
  • refresh kill three sources of "the app refreshes by itself"
  • electron asset watcher default OFF: opt-in via TOPICS_AUTO_RELOAD=1
  • electron asset watcher default ON again, opt-OUT via TOPICS_AUTO_RELOAD=0
  • prod single-instance lock for start-prod.sh
  • chat defense-in-depth against history wipe on stop
  • types WS message union refactor: restore literal narrowing, unblock build
  • tests unit suite goes 396/0 green, no more cross-test contamination
  • chat stream:catchup carries toolCalls + blocks for mid-stream attach (#17)
  • ui sidebar↔topbar pending-action sync: countdowns mirrored everywhere
  • chat close tool→pane loop + harden marker strip against chunk splits
  • project-window wire browser:navigate + browser:open-and-navigate listener
  • project-window tear down browser context server-side when pane closes
  • cmd-n scope new chat to focused project + place pane in focused group
  • tabs faster close countdown (3s→1.5s) + accent color for project tabs
  • activity-monitor persist event buffer across server restarts
  • audit correct dishonest task markings + scan integration tests
  • streaming drop stale activeStreams entries to prevent ghost catchup
  • electron poll index.html with fs.watchFile for reliable prod reloads
  • tabs uniform soft-close affordance for every pane type
  • tabs already-active sessions now light topic rows + tab bars
  • tabs hydrate already-streaming sessions so topic rows + tabs show spinner
  • tabs set projectPath on top-level project panes so tab indicators render
  • tabs terminal tab shows its own loading spinner
  • sidebar terminal/claude-code session rows show loading spinner
  • panes standalone Claude Code tab stays standalone: no home-as-project catch-all
  • ui bug-fix pass: DnD scoping, phase-authoritative loading, reload persistence
  • ui free ⌘⇧T from the browser + make tab DnD previews self-clearing
  • master run Master on claude-code provider (subscription), not claude-code-team
  • master don't hard-fail Master creation on provider availability
  • layout three split/clone bugs: home catch-all, mixed-group new chat, no-solo terminals
  • mcp use https base-url for topics MCP gateway when TLS enabled
  • e2e isolate PTY bridge so tests never kill live sessions
  • layout scope pane DnD feedback + file-open to the owning window
  • build move mac entitlements out of gitignored build/ dir
  • build unblock mac (unsigned) + linux deb release
  • build remove invalid '//' key from mac config (broke electron-builder schema for all platforms)
  • build build each mac arch on its native runner
  • master open Master as a terminal TAB, not a chat pane
  • landing remove real app screenshot (contained private project names)
  • landing emulate macOS vibrancy in hero so it matches the real app
  • sidebar Claude Code terminal rows use chat selection semantics
  • release strip node_modules symlinks for universal merge: v1.0.2
  • release x64ArchFiles for universal merge: v1.0.3
  • sidebar+landing project sidebar sections shrink instead of overlapping
  • landing scale hero to 2 open projects (3 was too cramped at hero size)
  • selection clean fill, no ring/shadow: stop open rows looking selected
  • master tab icon (crown) + hide from sidebar list + tab-style shortcuts
  • landing drop hero hover zoom/tilt: it made the scaled demo jump
  • master single 'open-master' path: no more chat-master fallback
  • landing static hero tilt, hover glows instead of re-tilting
  • board Board full-width like Master + agents shown as kanban columns
  • landing kill the real zoom/crop: legacy .window-real :hover transform
  • grid preserve manual row heights on add + enforce split limits in project
  • grid sanitize persisted project layout on load + guard NaN cell width
  • grid clamp divider to edge (no dead-zone) + unify min pane size + cache size
  • grid keep divider drag tracking over iframe/native browser panes
  • landing clean full-block Claude mascot in correct brand orange; hide Board/Master in demo
  • hooks drop dead _SafeArea* helpers; hoist TimeSeriesChart callbacks
  • hooks real correctness fixes surfaced by react-hooks rules
  • sidebar remove stray loading spinner next to the search launcher
  • hooks POST over HTTPS to the TLS-only :3333
  • mobile edge-to-edge safe-area + theme-color sync + touch terminal resize
  • infra keep PTYs alive across server restarts; make start-prod kill-safe
  • purge remove archived/deleted chats from every ui_state shape
  • loading ground loading signals in real activity, not spurious events
  • panes route panes created from a solo cell's + into that cell
  • layout harden split/closed-tab/sync state machines (audit HIGHs)
  • resize drag slop, lost-mouseup recovery, full overlay protocol everywhere
  • state boot-window pane survival, terminal reopen meta, sync dedupe guards
  • project ghost panes, double-commits, browser context lifetime, focus rule
  • grid primary-tab extraction, cell re-key in place, stacked-pane drags, persisted-layout sanitizing
  • links dedupe external-link opens; reconcile PTYs on bridge reconnect
  • codex resolve the Codex.app binary for PTY panes + CLI 0.131 usage fields
  • landing render the demo mascot seam-free via cell background fill
  • landing real Claude Code logo seam-free via Canvas renderer + faster cursor
  • electron always open a window + tray, even if the bundled server is slow/blocked
  • sidebar list project terminals only while their tab is open
  • panes converge open tabs across clients by UNION on hydrate
  • terminal lossless reattach via the authoritative session list
  • pty force a UTF-8 locale so accented output doesn't mojibake
  • terminal coalesce xterm fit during split-drag to kill per-frame flicker
  • ui kill reload flash: instant initial tab-scroll + cached favicon slots
  • client unblock tsc -b: silence TS6 baseUrl deprecation
  • signals don't badge a still-working Claude terminal as finished
  • ui only one tab reads as selected in a split (soft → outline)
  • unread clear unread optimistically on focus to stop badge flicker
  • layout dedup panes/groups at render + hydrate (no duplicate windows)
  • signals stop false-positive loading/notifications on resize & tab-open
  • chat self-heal a chat spinner stuck after a lost stream:end
  • browser stop native browser panes opening white on session-open
  • layout floating-splits: reveal real vibrancy + flush window edges
  • layout floating-splits: flush edges in the standalone grid too
  • context stop PROJECT_* markers leaking into LLM history; centralize marker grammar (audit P4)
  • server burn down 6 server type errors; ratchet baseline 34→28 (audit P3)
  • e2e unblock E2E collection: context-settings injected `require` in ESM scope
  • server narrow zod result via `in` so formatZodIssues type-checks; ratchet 28→27
  • server enable strictNullChecks; ratchet baseline 27→19 (audit P3)
  • server correct context-analyze warnings type to match client + runtime (audit P3)
  • server type finalMessages as ChatMessage[]; ratchet 18→14 (audit P3)
  • server tidy ask-user type-guard + gateway httpStatus union access; ratchet 14→11
  • server clear remaining type errors: server typecheck now 0; ratchet is a hard gate (audit P3)
  • server tear down leaked timers/watchers on shutdown (audit P8)
  • git stop trimming porcelain XY status: fixes staged/unstaged misclassification (audit)
  • usage pricing fuzzy-match billed short model names at the wrong rate (audit)
  • providers scope abort(sessionKey) to one session, not all in-flight streams (audit)
  • voice validate voiceId, unpredictable STT tmp dir, TTS length cap (security review)
  • server register voiceRouter in the dispatch chain (re-apply, lost to shared index)
  • layout clear dragActive on stopPropagation'd split drops (stuck "Full-width row" strip)
  • layout keep project split dividers visible in floating-splits mode
  • tabs ⇧⌘T no longer reopens two tabs in Electron
  • claude start Topics-spawned sessions at the shell effort tier (ultracode)
  • server bind dual-stack (::) so nothing can squat localhost:3333
  • ws emit undefined (not null) sourceClientId on ui-state broadcasts
  • ci hoist dragActive state above its first use in GroupLayout (eslint error)
  • ci guard the beforeunload hook against a partial-window test env
  • ui stop project favicons vanishing after a server blip (poisoned icon cache)
  • release sync electron-app lockfile + correct author email
  • audit high-value bugs: topic:switch focus-steal, browser screencast leak, git mislabel
  • server close audit robustness gaps: timeouts, timer leaks, undrained stderr
  • ws align WS contract types/schemas with the real wire (kill gate-invisible drift)
  • client streaming hot-path waste, redundant polling, IPC listener leak, grid cap
  • electron trust loopback cert hosts + only kill caffeinate on a real quit
  • validate CODEX_APPROVAL_MODE + make useWSSubscription stale-closure-proof
  • electron default-deny sensitive browser permissions + add a consent bar
  • browser per-context screencast fan-out + heartbeat the browser WS sockets
  • electron bundled-server crash-restart + plist XML-escape + non-orphaning prod script
  • curated low-severity hardening (a11y, leaks, release safety)
  • client weighted-equalize reads weights lazily + NewTopicModal poll cancels on unmount
  • electron set-bounds no-op on missing view + recover off-screen window
  • server plug CDP/timer/map leaks found by audit sweep
  • client preserve drafts/split config on hydrate + ghost cleanup + O(n) reorder
  • electron no-op nav IPC handlers on a stale native-browser view
  • browser flush caches on teardown + settle after load_state + quiet WS log
  • prod stop the production server reloading on every server/ source edit
  • browser persist+restore browser tab URL like a chat tab
  • prod stop the production renderer reloading on every client/ source edit
  • electron keep the vibrancy window painting across display + sleep/wake
  • client stop per-render effect churn + handle push-init rejection (audit #2)
  • browser persist tab URL deterministically at open (not just onUrlChange)
  • vibrancy pin per-region frost behind content (z-order): fixes blank panes
  • electron scheme-guard the native browser view against agent-driven file://
  • browser solid project + standalone browser-tab behavior (URL seed + dedup)
  • server write mutable state to a writable dir so a downloaded app boots
  • server don't exit when GATEWAY_TOKEN is absent: the gateway is optional
  • server bind all IPv4 in the packaged app so 127.0.0.1 reaches the server
  • browser mirror Jarvis handle-sanitize for shared login-state interop
  • electron clear a stale server holding :3333 before spawning (self-heal EADDRINUSE)
  • terminal find user-installed `claude`/`codex` via the login-shell PATH
  • browser drive the real native pane from MCP, not a Playwright phantom
  • vibrancy make per-region frost transparent to the cursor (hitTest nil)
  • browser bind project browser pane to its own contextId + allow CDP origin
  • browser raw-CDP dispatcher so browser_* drives the native pane under Bun
  • browser eval returns the expression value + stop the per-tool-call view flash
  • browser native tab survives refresh + caps moondream read_screen loop
  • browser keepalive heartbeat keeps the native pane's CDP target alive between MCP turns
  • browser don't reap the native pane when the window is hidden (about:blank/localStorage loss)
  • dnd one clear drop indicator + unmistakable split targets
  • dnd split preview is pure fill: drop the seam line (one indicator)
  • browser never silently drive the off-screen Playwright phantom in the desktop app
  • browser force a VISIBLE pane open when open_browser_pane mounted nothing
  • dnd make the full-width-row drop zone discoverable
  • sidebar list project-internal browser panes too (not just top-level)
  • sidebar nest project-internal browser panes UNDER their project
  • browser rebind a project's shared browser pane to the caller's contextId
  • browser persist project browser panes across app reload
  • dnd insert divider clears the cell region (no double preview)
  • browser stop force-open from duplicating a project-owned browser pane
  • orchestrator hard-gate /agents/* on GATEWAY_TOKEN (close unauth RCE)
  • perf stop FPS monitor double-counting (~200fps) on status-bar open
  • browser hide native pane while overlays are open (⌘K, modals, toolbar dropdowns)
  • splits visible hover handle on resize dividers
  • splits make resize handles hittable on hover (clip fix)
  • splits always-visible resize handles (floating mode)
  • codex persist draft-chat provider pick + stop 1h sweep deleting dormant codex
  • splits divider z-50 so hover wins over pane content (revert always-on)
  • splits faint resting seam for top-level dividers in floating mode
  • codex make codex PTY sessions persist + resume across restart
  • browser route toolbar dropdowns through the native overlay menu
  • splits soften floating-mode resting seam to barely-visible
  • pty anchor spawned PTYs to the real $HOME, not a sandbox HOME
  • tray self-heal stale Claude status glyph via periodic re-sync
  • splits flex-grow project columns, dedup project browser, hide resting divider seam
  • browser self-heal reaped native views + stop get-cdp-target-id log flood
  • lint clear the eslint error blocking CI on main
  • splits weight outer equalize by the ACTIVE project in a multi-tab cell
  • splits center the divider hover bar + kill the post-hover black flash
  • perf make status-bar diagnostics honest (build-time, heap, buckets, CPU)

Performance

  • server-side caching, WS broadcasts, and git file watcher
  • topics replace single-topic loadTopics() N+1 scans with indexed lookups (audit P7)
  • server batch-load topic relations + bound gitStatusCache (audit #2)
  • render kill per-frame main-thread work from vibrancy observer + awaiting-pulse
  • browser cache targetId->Page to kill per-op CDP walk churn
  • dnd DOM-direct sub-stack divider resize (live, no re-render)
  • anim pause CSS animations while the window is backgrounded
  • terminal blur the Copy button only on hover, not at rest
  • css drop static will-change:width on .sidebar-transition