The desktop app is now jcode-desktop2. Drop the legacy crate from the
workspace, collapse the selfdev Desktop build target into Desktop2,
delete legacy-only scripts/packaging, refresh budget baselines, and mark
the legacy desktop design docs as historical.
* perf(tui): stop the header TTL rebuild from probing credentials on the render thread
The prepared-header cache re-runs AuthStatus::check_fast() every 30s TTL
lapse. A cold probe measures 20-30ms of credential-file reads on this
hardware, and it ran synchronously inside prepare_messages, producing a
periodic 40-55ms frame (TUI_SLOW_FRAME header_ms ~41ms) that read as input
lag while typing.
Add AuthStatus::check_fast_nonblocking(): serve the freshest cached snapshot
(even expired) and refresh on a detached background thread, bumping the auth
generation only when the refreshed snapshot differs so the header signature
invalidates and repaints. First-ever call still blocks (no snapshot exists),
and test harness processes keep the fully blocking path to avoid racing
per-test JCODE_HOME swaps. The TUI render path now uses this variant.
* fix(install): don't touch shell rc files when install dir is already on PATH (fixes#624)
The Unix installer only set up PATH for bash/zsh via POSIX rc files and
never touched fish (which uses its own syntax and does not read POSIX rc
files). It also skipped all shell setup whenever the install dir already
happened to be on the current shell's PATH, leaving other shells
unconfigured.
Now install.sh always writes PATH entries for bash (~/.bashrc, ~/.profile),
zsh (~/.zshenv), and fish (~/.config/fish/config.fish) using each shell's
correct syntax, idempotently and gated on the shell being installed or
already configured. Factor the logic into scripts/lib/configure_path.sh and
use it from install_release.sh too.