Features
- hot-reload keybindings when config.toml changes
- disable idle animation by default
- score visual variety and neighbour contrast from the renderer
- model palette harmony as a renderer-derived graph
- add [features] auto_poke to set the auto-poke default (fixes #664)
- add [features] auto_poke to set the auto-poke default (fixes #664)
- surface colors in the config template and /config summary
- generate a whole harmonious palette from one seed color
- make every color configurable and add palette harmony scoring
- render markdown and math as typography
Fixes
- commit refresh_pinned_todos_if_needed the tick handlers already call
- gate the test-only scroll_bench::run behind cfg(test)
- repair master after a merge orphaned the skill invocation module
- isolate auth state in the mixed-catalog model picker test
- repair a header auth test that could never pass
- stop burning 60fps full frames on an animation nobody can see
- serialize gateway env tests against the shared test-env lock
- apply the corrected palette/theme pass order on master too
- don't luminance-flip the colors a user chose on light terminals
- remove the last render-path panic in harmony scoring
- make palette repair converge, and keep semantic colors meaningful
- make generated palettes colorblind-safe and hue-coherent
- land the key-to-paint metric its call site already depends on
- drop a pinned-todos override committed without its implementation
- don't let an animation frame swallow a keystroke's redraw
- restore interleave_images, dropped by the typing-backoff commit
- correct iTerm2 inline-image sequence (cell height + tmux passthrough)
- base the typing backoff on keystrokes, not provider output
Performance
- take the terminal theme query off the spawn critical path
- record key-to-paint on every paint path and expose it
- let the decorative animation step aside while the user types
Documentation
- mark why the interleave path must take the staged images
- document color configuration and harmony scoring
Other changes
- chore: rebaseline size and swallowed-error ratchets after the pinned-todos tests landed
- chore(tui): allow pinned_todos_payload_ref to be unused outside tests until its renderer lands
- test(tui): commit the pinned-todos payload tests that exercise pinned_todos_payload_ref
- Skip source auto-update quietly when local commits diverge from upstream
- release: v0.63.0
- chore: rebaseline size/panic/swallowed-error ratchets after intentional growth
- chore(tui): allow the pinned-todos state fields to be unread until their renderer lands
- test(tui): guard that every interleave send carries the staged images
- test(tui): pin the perf tier in the redraw-policy tests so they cannot flake
- style(desktop2): rustfmt render.rs and tests/delivery.rs
- desktop2: commit the frame_meter and scroll_profile modules main.rs already references
- Reframe discovery listings as editor's picks in the TUI
- Resolve run_shell merge conflict and fix stale test constructors
- test(tui): make the animated-row copy test able to fail, and restore its diagnostic
- refactor(tui-style): move the measured criteria into their own module
- test(tui-style): freeze the hand-tuned default palette
- refactor(tui): extract the idle-animation repaint policy out of run_shell
- style(tui): rustfmt the import and condition reflow CI was failing on
- test(scripts): record host load so a polluted latency measurement is identifiable
- test(tui): serialize the /colors config tests against the shared env lock
- desktop2: clamp overview navigation at edges instead of wrapping
- chore: remove legacy jcode-desktop crate and its plumbing
- desktop2: show sent versus acknowledged for user messages
- desktop2: stop remapped super+hjkl from flickering the overview
- refactor(config): move color tests into their own file for the size ratchet
- desktop2: show edits as diff cards in the transcript
- desktop2: honor reasoning display modes, with 'current' showing only the live paragraph
- desktop2: show the client version in the footnote on an empty page
- desktop2: boot-up reveal, a donut growing out of black into the window
- test(config): verify configured colors survive a real config file round trip
- desktop2: draw the session strip as nested rectangles instead of labelled bars
- test(tui-style): verify 'every color is configurable' instead of asserting it
- desktop2: remove top-right path/RAM readout from chrome row
- chore: baseline the two intentional swallowed-error patterns in palette.rs
- refactor(tui-style): split generation out of harmony, and stop panicking on the render path
- test(tui): drive /colors through the real App and dispatch table
- test(tui): prove configured colors reach a real rendered frame
- test(tui-style): calibrate harmony scoring against real terminal palettes
- ios: polish UI chrome, banners, bubbles, and code blocks
- test(tui): harnesses that separate app response from screen update
- session: attribute and de-spam bulk session-load bursts
- desktop2: align keyboard shortcuts with web/browser conventions
- desktop2: let a flick actually coast, and gate it at browser range
- test(tui): report the run loop round-trip instead of a fake arrival time
- desktop2: measure scroll feel instead of guessing at it
- test(tui): add a screen-level repro for typed characters flickering
- todo: stop a late score climb from clearing the quality gate
- todo: state the closed-feedback-loop score in one clause
- todo: trim the closed-feedback-loop description
- desktop2: make Super+HJKL actually move in the overview
- build: fail closed when the Linux compat build produces nothing or lies about its commit
- todo: rename hill-climbability to closed feedback loop
- Disable iTerm2 inline images by default (opt in with JCODE_ITERM2_IMAGES=1)
- desktop2: space the hero against the donut's worst-case ink
- desktop2: fix scrolling feel — 3 lines per wheel notch, honour the gesture phase
Full changelog: v0.62.1...v0.63.0
Platform availability
- Linux x86_64: available
- Linux aarch64: available
- macOS Apple Silicon: available
- macOS Intel: available
- Windows x86_64: available
- Windows ARM64: available
- FreeBSD x86_64: available