# Archived Changes

- **260609-enic-restore-display-message-resolve-window** — Restore O(1) display-message lookup in ResolveWindowSession
- **260609-ebks-derive-sidebar-order** — Derive sidebar session display-order instead of storing localOrderByServer in state
- **260608-j6bs-shllai-readme-extraction-contract** — Conform repo to shll.ai README-extraction contract
- **260603-iak3-teardown-shllai-publish-ci** — Teardown shll.ai Help-Tree Publish CI (Push → Pull Migration)
- **260603-gs2t-reap-dead-tmux-servers-sse** — Reap Dead Tmux Servers from SSE Poll Set
- **260602-qn62-move-based-board-pin-sessions** — Move-Based Server-Scoped Boards (Pin Sessions)
- **260602-poka-guard-anchor-no-resurrect** — Guard createAnchor against resurrecting a killed tmux server
- **260602-2dt9-fix-shllai-help-publish** — Fix shll.ai help-tree publish — run-kit.json never lands
- **260602-a36m-help-dump-shll-ai** — Build-time help-dump — emit rk CLI help tree as help/run-kit.json
- **260602-72oq-fix-sync-latency-ghost-measure** — Fix sync-latency test 3 false-signal fixed-sleep measurement
- **260602-3i5d-fix-create-server-not-found-race** — Fix Transient "Server not found" Flash After Server Create
- **260602-a1wo-prevent-exit-empty-server-death** — Prevent exit-empty tmux server death
- **260602-mss7-fix-sidebar-group-expand** — Fix sidebar non-current group expand (mss7)
- **260531-tmnm-test-scoped-server-enumeration** — Test-scoped server enumeration
- **260531-rus8-bound-desktop-relay-websockets** — Bound desktop relay WebSockets
- **260531-m3pl-static-xterm-imports** — Static xterm imports
- **260531-ckwv-skip-brew-update-flag** — Add --skip-brew-update flag to update command
- **260530-v6hm-active-window-event-derivation** — Active-Window Event-Driven Derivation
- **260530-cf3g-unify-test-socket-reaping** — Unify Test Socket Reaping
- **260529-wtg4-isolate-relay-sweep-test-leaks** — Isolate Relay Sweep & Stop Test Artifact Leaks
- **260529-jad6-window-api-stability** — Window-State API Stability Remediation
- **260529-fww2-rk-reaper-command** — rk reaper command
- **260529-chgz-window-id-routing** — Window-ID Routing (stable `@N` identity)
- **260528-nvlp-active-window-sync** — Active Window Sync — tmux truth, URL as bookmark
- **260528-5zvv-rk-daemon-cli-restructure** — rk daemon CLI Restructure
- **260527-901h-deterministic-daemon-lifecycle** — Deterministic Daemon Lifecycle
- **260516-tdu6-couple-server-pane-sessions-scope** — Couple Server Pane expand state with Sessions Pane server scope
- **260509-17m3-rotated-shell-layout** — Rotated Shell Layout
- **260508-hdjr-relay-grouped-sessions-board-panes** — Relay Grouped Sessions for Board Panes
- **260508-dc0t-multiserver-session-provider** — Multi-Server SessionProvider + Unified Sidebar
- **260507-lvon-session-order-tmux-persist** — Persist Sidebar Session Order to tmux
- **260507-4vuv-pane-boards** — Pane Boards
- **260504-lald-rk-riff-count-rename-and-fanout-fixes** — rk riff — `--count` rename and fan-out correctness fixes
- **260423-udhe-rk-riff-cli-surface** — rk riff — CLI Surface Refinement
- **260423-jmwu-rk-riff-workflow-features** — rk riff — Workflow Features
- **260423-ba9f-rk-riff-correctness-fixes** — rk riff — Correctness and Portability Fixes
- **260419-l1ja-fix-rk-iframe-relative-urls** — Fix rk iframe URL recipe — use relative /proxy/... paths
- **260419-afyv-adapt-fab-pane-map-agents-schema** — Adapt to fab-kit `_agents` schema refactor
- **260419-9ufu-sidebar-separator-cursor-fixes** — Sidebar Separator Cursor Fixes
- **260418-zar8-server-panel-collapsed-selected-shade** — Sidebar header "current item" affordances — Server collapsed shade + Sessions header name
- **260418-yadg-fix-mutation-server-race** — Fix Mutation APIs Targeting Wrong tmux Server
- **260418-xgl2-xterm-emoji-width** — Fix xterm.js emoji / wide-character rendering
- **260418-2cjc-right-align-server-name** — Right-align Server Name in Server Panel Header
- **260417-w4af-name-riff-window-after-worktree** — Name the tmux window created by `rk riff` after the worktree
- **260417-jpkl-server-panel-tile-grid** — Server Panel Tile Grid
- **260417-hyrl-bundle-jetbrains-mono-nerd-font** — Bundle JetBrainsMono Nerd Font as a webfont in the frontend
- **260417-g9uo-mobile-tap-focus-regression** — Mobile tap-to-focus regression after frontend dep upgrade
- **260417-aaon-fix-riff-copilot-feedback** — Fix rk riff Copilot Review Feedback
- **260417-5nok-fix-sidebar-fab-state** — Fix Sidebar Fab State Display
- **260416-r1j6-add-riff-command** — Add rk riff Command
- **260416-jn4h-session-window-color-tinting** — Session and Window Color Tinting
- **260416-a5ug-pane-panel-spinner-animations** — Pane Panel Spinner Animations
- **260416-6b0h-iframe-proxy-windows** — Iframe Proxy Windows
- **260416-0gz9-rk-context-agent-discovery** — rk context — Agent Discovery
- **260412-lc2q-pane-panel-copy-cwd-branch** — Pane Panel — Copy CWD & Git Branch
- **260411-z63r-sidebar-host-window-panels** — Sidebar Host & Window Panels
- **260411-sl02-cross-session-drag-optimistic-update** — Cross-Session Drag Optimistic Update
- **260411-sl01-optimistic-sidebar-window-reorder** — Optimistic Sidebar Window Reorder
- **260406-65f1-shorten-cwd-status-panel** — Shorten CWD in Status Panel
- **260405-gle4-quick-session-launch** — Splits session/window creation into an instant default path (no folder prompt, uses active pane's CWD) and a secondary 'New Session at Folder' Cmd+K action, reducing friction for the most common quick-launch case.
- **260405-f8p9-sidebar-component-decomposition** — Decomposes the 713-line monolithic sidebar.tsx into five sub-components (SessionRow, WindowRow, ServerSelector, KillDialog, and index orchestrator) to improve iterability, testability, and reviewability with zero behavioral changes.
- **260405-x3yt-sidebar-window-state-zustand** — Rewrite sidebar window state management with Zustand using immutable identifiers instead of mutable indexes to fix deletion/rename bugs.
- **260405-3mt2-session-inline-rename** — Add double-click inline rename for session names in sidebar, matching the existing window name rename pattern.
- **260405-2a2k-left-panel-window-sync** — Fix left panel window sync so externally created windows (e.g., via wt create) appear in sidebar without page refresh.
- **260404-xmrw-fix-dashboard-dropdown-scroll** — Fix dashboard and breadcrumb dropdown scrollability by adding min-h-0 to flexbox chain and max-h/overflow-y to dropdown menus.
- **260404-dsq9-sidebar-kill-hides-extra-window** — Fix sidebar kill hiding two windows by clearing stale optimistic kill state after successful kill API response.
- **260404-dq70-move-window-between-sessions** — Add cross-session window moves via CmdK palette and sidebar drag-and-drop between sessions.
- **260404-29qz-window-move-reorder** — Add window move/reorder via CmdK command palette actions and sidebar drag-and-drop for organizing tmux windows.
- **260403-xnq5-new-pane-inherit-cwd** — Make new panes inherit the current working directory of the active pane instead of defaulting to project root.
- **260403-d3i1-ctrl-click-force-kill-window** — Add Ctrl+Click on sidebar kill buttons to force-kill windows/sessions without confirmation dialog.
- **260403-32la-optimistic-ui-feedback** — Add optimistic UI feedback for all mutating actions with SSE reconciliation, eliminating 100-500ms dead zones after user interactions.
- **260328-wxrh-source-rk-tmux-configs** — Add multi-file tmux config sourcing from ~/.rk/tmux.d/ directory so users can extend base config without modification.
- **260328-d7s5-change-tmux-prefix** — Change tmux prefix key configuration for run-kit's dedicated tmux server.
- **260328-6xey-tmux-commands-dialog** — Replace single copy-attach action with a tmux commands dialog showing multiple command variants (attach, spawn, detach) with -L server flag.
- **260327-uyj5-perf-bundle-loading** — Bundle performance: lazy-load conditional components, add Vite manual chunks for vendor splitting, and deduplicate concurrent API requests.
- **260327-k4l2-copy-tmux-attach-command** — Add 'Copy: tmux Attach Command' to command palette, copying tmux attach-session -t session:window to clipboard from current route.
- **260327-cnav-perf-frontend-rendering** — Frontend performance: diff SSE state before update, split chrome context hooks, memoize palette actions, and batch xterm.js writes with rAF.
- **260327-c1qx-perf-backend-hot-paths** — Backend performance: parallelize ListServers, cache SSE session fetches and pane-map with TTL, and propagate HTTP request context to tmux calls.
- **260327-bkm8-mobile-bar-keyboard-toggle** — Move Escape to Fn menu, convert mobile keyboard-dismiss button to a bidirectional toggle with keyboard icon.
- **260327-8f9k-fix-update-restart** — Fix rk update daemon restart failure by resolving the new binary path after brew upgrade completes instead of using stale os.Executable() path.
- **260327-5mlg-sse-infrastructure-perf** — SSE performance: upgrade hub mutex to RWMutex, increase client buffer to 32 with drop logging, and fix relay goroutine race on close.
- **260327-4azv-mobile-keyboard-scroll-lock** — Add scroll-lock mode via long-press on mobile keyboard button to prevent soft keyboard from appearing during scroll/read workflows.
- **260327-0bzg-version-flag-replace-subcommand** — Replace rk version subcommand with idiomatic --version/-v global flag on root command.
- **260326-tbmj-close-pane-button** — Add close pane button to top bar alongside split pane buttons for symmetric pane management from the UI.
- **260325-zbqf-shareable-urls** — Make URLs fully encode server, session, and window context so they are copy-pasteable and self-contained across browsers.
- **260325-vxj6-per-mode-theme-preferences** — Add per-mode theme preferences so system mode remembers separate dark and light theme choices when OS toggles between modes.
- **260325-8kuf-tmux-mobile-scroll** — Fix tmux scrollback on mobile by replacing touch-none with gesture detection that allows vertical swipe scrolling without breaking xterm.js input.
- **260324-yxjs-command-palette-arrow-scroll** — Fix command palette arrow key navigation to auto-scroll when selection moves beyond the visible area.
- **260324-v9i1-icon-generation-pipeline** — Replace naive PNG resize with a proper icon generation pipeline that produces padded dark-background PWA icons from SVG source, fixing macOS dock fringe.
- **260323-z46s-disable-mobile-zoom** — Disable iOS auto-zoom on input focus by adding maximum-scale=1 to viewport meta tag.
- **260323-ycod-rename-cli-to-rk** — Rename CLI binary from run-kit to rk for ergonomics, Homebrew conflict resolution, and consistency with internal rk- prefix conventions.
- **260323-bd6n-bottom-bar-focus-steal** — Fix bottom bar buttons stealing focus from xterm.js on iOS, preventing keyboard dismissal when tapping modifier keys.
- **260323-7wys-ansi-palette-theme-rework** — Rework theme system to use full 22-color ANSI palettes from canonical sources, theming web UI, xterm.js canvas, and tmux chrome from a single palette definition.
- **260323-3tfo-theme-selector-preview** — Add VSCode-style theme selector with 15-20 terminal themes, live preview on selection, Ctrl+Click shortcut, and command palette entry.
- **260322-uac4-back-chevron-menu-toggle** — Replace hamburger-to-X animation with a back chevron icon for clearer sidebar/drawer close affordance.
- **260321-zbdq-fix-osc52-clipboard-provider** — Fix OSC 52 clipboard copy by providing a custom ClipboardProvider that treats empty selection parameter same as 'c' for tmux compatibility.
- **260321-ye3t-fix-compose-buffer-dialog** — Fix compose buffer dialog: add image preview with blob URLs, fix path duplication bug, and align with project Dialog component pattern.
- **260321-y11t-normalize-toolbar-icon-colors** — Normalize toolbar icon colors, add split pane controls, fix connection status indicator, and fill command palette gaps.
- **260321-s5pw-split-pane-buttons** — Add horizontal and vertical split pane buttons to the top bar with backend API support for tmux pane splitting from the web UI.
- **260321-73w3-supply-chain-sha-pin** — SHA-pin all external GitHub Actions in release.yml to commit SHAs for supply chain hardening against tag poisoning attacks.
- **260320-uq0k-hostname-browser-title** — Show server hostname in browser tab title to distinguish multiple run-kit instances across different machines.
- **260320-j9a2-pwa-compliance** — Make run-kit PWA compliant with vite-plugin-pwa, service worker caching, manifest generation, iOS meta tags, and standalone display mode.
- **260320-hkm8-daemon-lifecycle-serve** — Replace supervisor.sh polling with direct tmux-based daemon lifecycle for run-kit serve, supporting --restart and --stop flags.
- **260320-9ldy-ui-polish-tmux-config-embed** — Bundle of UI polish fixes: breadcrumb alignment, fresh worktree build fix, embed package restructure, tmux config auto-create, and bottom bar hostname.
- **260320-1335-tmux-server-switcher** — Add tmux server switcher UI with single-active-server model, server dropdown in sidebar, and command palette actions for create/kill/switch server.
- **260318-eseg-add-light-theme-support** — Add light theme support with system/light/dark modes, localStorage persistence, and no-flicker initialization via blocking head script.
- **260318-dcl9-inline-tab-rename-double-click** — Add double-click inline rename for sidebar window tabs, bypassing the command palette dialog flow.
- **260318-0gjh-dedicated-tmux-server** — Replace byobu dependency with a dedicated tmux server (-L runkit) with custom tmux.conf, supporting both run-kit and external default-server sessions.
- **260317-ukyz-homebrew-deployment** — Add Homebrew deployment system with embedded frontend assets, Cobra CLI, cross-compiled prebuilt binaries via GitHub Releases, and version injection via ldflags.
- **260317-rpqx-xterm-copy-clipboard** — Fix xterm copy-to-clipboard by adding a fallback for non-secure contexts where navigator.clipboard API silently fails.
- **260317-qiza-default-session-name-from-folder** — Auto-derive session name from folder path when user leaves the name field empty in the Create Session dialog.
- **260315-lnrb-dashboard-scroll-behavior** — Fix scroll containment: activate fullbleed class for terminal view to prevent browser scrollbar, and add scoped scroll container for dashboard session cards.
- **260314-9raw-top-bar-bottom-bar-refresh** — Refresh top bar and bottom bar UI: move compose button to top bar, add hamburger menu toggle, increase bottom bar touch targets, add product branding, and simplify connection status indicator.
- **260313-ll1j-dashboard-project-page-views** — Add a Dashboard view at / route that fills the terminal area when no window is selected, with expandable session cards showing window counts and activity summaries.
- **260313-3vlx-pane-map-enrichment** — Replace direct file reading with fab pane-map --json for per-window fab state enrichment, decoupling from internal file formats and simplifying the sidebar poller.
- **260313-zvgc-remove-top-bar-line-2** — Remove top bar line 2
- **260313-dr60-xterm-clipboard-addons** — Enabled xterm.js clipboard copy (Cmd+C with selection check), activated web-links and WebGL addons, and added clipboard addon for OSC 52 support.
- **260313-3brm-remove-single-key-shortcuts** — Removed single-key keyboard shortcuts (j/k/c/r) and Esc Esc drawer toggle that conflicted with xterm.js terminal input, along with the sidebar focus ring that only existed for j/k navigation.
- **260313-txna-rich-sidebar-window-status** — Enrich sidebar window rows with activity duration, agent state indicators, and an info popover for fab change/process/worktree details — plus top bar Line 2 detail.
- **260312-y4ci-ui-chrome-layout-refinements** — Refine UI chrome — simplify breadcrumbs, add layout borders, make sidebar resizable, normalize padding, and scope bottom bar to keyboard input.
- **260312-ux92-vite-react-frontend** — Implement the Vite/React SPA frontend against the new Go API — single-view model with sidebar + terminal, POST-based API client, and Playwright E2E tests.
- **260312-r4t9-go-backend-api** — Implement the Go backend API with resource-oriented POST-based routes, handler-level tests, SSE, and WebSocket relay — Phase 2 of the reimplementation plan.
- **260312-n11e-cleanup-old-implementation** — Remove old packages/ and e2e/ code superseded by the new app/ implementation, clean up stale path references in docs and config.
- **260312-jz77-scaffold-app-structure** — Clean foundation for reimplementation — creates the app/backend and app/frontend folder scaffolding with working build toolchains before functional code lands.
- **260310-8xaq-go-backend-vite-spa-split** — Go backend + Vite SPA split: monorepo restructure replacing Next.js monolith with Go HTTP/WebSocket backend and Vite+React SPA frontend for decoupled multi-client architecture.
- **260307-l9jj-mobile-bar-breadcrumb-cleanup** — Mobile bottom bar and breadcrumb cleanup: merged extended keys into F-key dropdown, added keyboard dismiss button, removed upload button, and stripped breadcrumb dropdown arrows to save space on iOS.
- **260305-r7zs-playwright-e2e-design-spec** — Playwright E2E test suite for UI design spec: verifies fixed chrome stability, bottom bar WebSocket integration, compose buffer flow, and mobile responsive behavior in real browsers.
- **260305-ol5d-mobile-responsive-polish** — Mobile responsive polish: Line 2 action collapse on narrow screens, 44px touch targets per Apple HIG, command palette trigger for mobile, and responsive terminal typography.
- **260307-uzsa-navbar-breadcrumb-dropdowns** — Added breadcrumb dropdown menus for switching between projects and windows directly from the navbar, using a split click-target pattern (name navigates, chevron opens dropdown).
- **260307-r3yv-action-buttons-rename-kill** — Added Rename window action to both project and terminal pages, and shortened "Kill Window" label to "Kill".
- **260307-kqio-image-upload-claude-terminal** — Added image upload to Claude Code terminal sessions via drag-drop, clipboard paste, and file picker in the run-kit web UI.
- **260307-f3o9-ios-keyboard-viewport-overlap** — Fixed iOS keyboard covering the terminal by handling visualViewport scroll events and compensating for offset, keeping the bottom bar and terminal visible while typing.
- **260307-8n60-fix-ios-terminal-touch-scroll** — Fixed iOS Safari terminal touch scrolling by preventing page scroll when touching the xterm terminal area.
- **260306-0ahl-perf-sse-chrome-sessions** — Parallelized session enrichment, deduplicated SSE connections with shared polling, and split ChromeContext to eliminate cascade re-renders.
- **260305-zkem-session-folder-picker** — Added session folder picker with server-side directory autocomplete and quick picks from existing session paths for creating sessions rooted in specific directories.
- **260305-vq7h-feature-tests-tmux-keyboard-api** — Added feature tests for the three most logic-dense modules: tmux session parsing, keyboard navigation hook, and sessions API POST handler.
- **260305-fjh1-bottom-bar-compose-buffer** — Added bottom bar with modifier keys, arrow keys, and compose buffer for latency-tolerant input on terminal pages, enabling mobile and remote server usability.
- **260305-emla-fixed-chrome-architecture** — Refactored root layout to own the chrome skeleton with ChromeProvider context, TopBarChrome with icon breadcrumbs, fixed-height Line 2, and standardized max-width across all pages.
- **260303-07iq-setup-vitest** — Set up Vitest testing infrastructure as the foundational test framework, enabling test-alongside strategy for all subsequent changes.
- **260303-q8a9-configurable-port-host** — Made Next.js port, relay WebSocket port, and bind host configurable via CLI args and run-kit.yaml, replacing hardcoded constants that caused port conflicts, network exposure issues, and prevented multi-instance usage.
- **260303-yohq-drop-config-derive-from-tmux** — Removed run-kit.yaml config file and derived project state entirely from tmux session state, aligning with no-persistent-state and convention-over-configuration principles.
- **260303-vag8-unified-top-bar** — Unified two-line top bar with breadcrumb navigation, contextual action bars, inline kill buttons, and killSession API across all three pages.
- **260302-fl88-web-agent-dashboard** — Web-based agent orchestration dashboard with Next.js 15, tmux integration, and terminal relay for managing multiple Claude Code agent sessions across projects.
