# Changelog v0.4.0 - 2026-05-30

### Added
- **Startup AI Speed Scan opt-in** — Added a new Settings toggle that can automatically run the global Ctrl+U AI Speed Test after each app launch. It is disabled by default because it uses real provider requests, and first-time onboarding now asks whether users want to enable it.
- **Tiny verdict indicator column** — Added a compact first-column `❔` verdict indicator so users can scan model condition instantly without reading the full `Verdict` column.
- **Clickable verdict shortcut** — The new compact verdict column sorts with the same logic as the full `Verdict` column, making the far-left status indicator a fast sorting target.
- **Benchmark retry badges** — Ctrl+A and Ctrl+U now retry failed benchmark requests up to 3 times with a 15s delay. Successful retries show a blue `↻N` badge beside AI Latency and TPS values so users know the result recovered after transient provider trouble.
- **Smart global benchmark ordering** — Ctrl+U now tests healthy/UP models first, sorted by low ping, then slower or problematic models afterward. This gives useful benchmark results quickly instead of letting timeouts dominate the start of the run.
- **Benchmark-driven health updates** — Real AI Speed Test results now update the Health column live. A model that succeeds during benchmarking can recover from stale timeout/down states, while auth/rate-limit/errors are reflected immediately.
- **Ctrl+U raw-byte fallback** — Added the `\x15` fallback so Global AI Speed Test works in terminals where Node/readline does not report Ctrl+U normally.
- **Header flash feedback** — Column header clicks now flash the active column, making mouse sorting easier to confirm visually.

### Changed
- **v0.4.0 supersedes the broken v0.3.81 bump** — This release consolidates all post-v0.3.80 benchmark, verdict, and startup-scan changes into a clean minor release line.
- **AI Speed Test now benchmarks every model** — Ctrl+A and Ctrl+U no longer skip models just because they are filtered, unhealthy, missing a provider URL, or currently showing an error state. The benchmark path now attempts the real request and lets the result decide.
- **Benchmark errors are visually cleaner** — Failed benchmarks show a red `—` in AI Latency and TPS instead of duplicating HTTP/error labels in the benchmark columns. Detailed status remains in the Health column.
- **Clearer verdict emoji language** — Verdict visuals now use a consistent compact mapping: `🟩 Perfect`, `🟢 Normal`, `🟡 Spiky`, `🟠 Slow`, `🔴 Very Slow`, `🔥 Overloaded`, `⚠️ Unstable`, `⚫ Not Active`, and `⏳ Pending`.
- **Settings and docs mention Global AI Speed Test clearly** — README, Help, and Settings now explain Ctrl+A, Ctrl+U, and the optional startup auto-run behavior more explicitly.

### Fixed
- **Ctrl+A works on error rows** — The selected-model benchmark can run even when the row currently has an error/timeout/no-key status, so users can retest problematic models directly.
- **Global benchmark ignores UI filters correctly** — Ctrl+U benchmarks the complete model set instead of accidentally obeying active filters or visible-table state.
- **Benchmark result display is stable** — Benchmark results now render consistently regardless of Health state, avoiding cases where successful benchmark data was hidden behind stale row status.
