v3.0.0 — Blaze

### Added

- **GitHub Copilot CLI backend** — [Copilot](https://github.com/github/copilot-cli) joins Claude Code, OpenAI Codex, opencode, and Gemini CLI as a fifth first-class backend, selectable per project or per task like any other agent. Sessions run in yolo mode (`--allow-all`); the Watchfire system prompt is delivered via `AGENTS.md` in a per-session `COPILOT_HOME`, while the user's real `~/.copilot/{config.json,mcp-config.json,session-store.db}` are symlinked in so existing GitHub login, MCP config, and session history are reused. Transcripts render in the same User/Assistant format as the other backends

### Fixed

- **`watchfire update` across filesystems on Linux (#25)** — updating from `/tmp` (often `tmpfs` on Fedora/Ubuntu) into `~/.local/bin` used to fail with `EXDEV: invalid cross-device link`. The updater now stages the download inside the install directory itself, so the final atomic rename is always same-filesystem. A belt-and-suspenders fallback copies, fsyncs, and renames if a caller ever stages elsewhere
- **Task list rotation with many tasks (#28)** — projects with mixed-status tasks (e.g. 16 done + 31 ready) could render the task list rotated (`0017…0047` then wrapping to `0001…0016`). Sorting is now canonical everywhere: the task manager returns tasks strictly descending by `task_number`, and CLI, TUI, and GUI all rely on that order without re-sorting
- **GUI prompted to update the CLI on every launch (#30)** — version comparison tripped on trailing whitespace, pre-release suffixes, and ANSI hyperlinks, and on Linux read the wrong binary because the search order put `/usr/local/bin` ahead of `~/.local/bin`. Version parsing is now semver-aware, ANSI-stripping is broader (CSI + OSC + other ESC), and the search order matches the install target with a PATH fallback for rpm/deb/Linuxbrew installs
- **Newly-installed agents invisible in GUI/TUI pickers (#29)** — installing Codex (or any agent) while Watchfire was running used to hide it from the agent picker until `project.yaml` was hand-edited. The backend registry is now the sole source of truth for pickers: every registered backend always appears, with a `(not installed)` suffix when unavailable, so users can select a backend they're mid-installing and get a clear error at spawn time rather than a silent absence. Linux fallback paths also broadened to cover `/usr/bin/` and `~/.npm-global/bin/`

### Migration

- Existing projects and tasks are unaffected — Copilot is purely additive. To opt a project into Copilot, switch `project.default_agent` (or a specific task's `agent` field) to `copilot`. A custom Copilot binary path can be set in the global settings UI or by hand in `~/.watchfire/settings.yaml`