0642eb4712
The first slice of M6 (gaming-environment checks): detect a user's Steam libraries and the games installed in each — also the D12 "pick a game" foundation. - core/steam.py: multi-install/library discovery (libraryfolders.vdf, symlink dedupe, native/Flatpak/Snap), appmanifest_*.acf scan with runtime/Proton/ redist filtering, scan cache + new-game diff. Stdlib only. VDF keys read case-insensitively (e.g. lastupdated vs SizeOnDisk). - Libraries are opt-in (config steam_libraries); the flat TOML writer now emits list/array values. - GUI Games page: library checkboxes with per-library counts, game list, background rescan on every launch, NEW badge + sidebar count for games installed since the last scan (acknowledged when viewed). - CLI: rigdoctor games / games libraries [--enable|--disable|--all|--json] (headless-complete, D17). - Tests for VDF parse, scan, tool filter, cache diff, config list round-trip. - Docs (MODULES/ROADMAP) updated; version 0.7.3 -> 0.8.0. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
231 lines
13 KiB
Markdown
231 lines
13 KiB
Markdown
# Changelog
|
||
|
||
All notable changes to RigDoctor are recorded here. Format follows
|
||
[Keep a Changelog](https://keepachangelog.com/); versioning is SemVer-style
|
||
(`MAJOR.MINOR.PATCH`, pre-1.0). `__version__` and `pyproject.toml` must match the git
|
||
release tag (so the auto-updater, D18, can compare versions).
|
||
|
||
## [0.8.0] - 2026-05-22
|
||
### Added
|
||
- **Gaming environment checks (M6) — Steam game detection.** RigDoctor now finds your Steam
|
||
libraries (across multiple drives, via `libraryfolders.vdf`) and the games installed in each
|
||
(parsing `appmanifest_*.acf` — stdlib only, no Steam tooling needed). Runtimes, Proton builds,
|
||
and redistributables are filtered out.
|
||
- **Opt-in libraries:** detected libraries are listed with a per-library game count; you check
|
||
the ones to scan. Nothing is scanned until you pick a library.
|
||
- **Background scan on every launch:** the GUI rescans the selected libraries in the background
|
||
when it opens and flags games installed since the last scan with a **NEW** badge plus a count
|
||
on the **Games** sidebar item (cleared when you view the page). Results are cached
|
||
(`~/.local/state/rigdoctor/games.json`) so the list shows instantly.
|
||
- **CLI:** `rigdoctor games` lists detected games; `rigdoctor games libraries
|
||
[--enable PATH | --disable PATH | --all]` lists/selects libraries (headless-complete, D17).
|
||
- Config now supports list values (TOML arrays); `steam_libraries` records the selected libraries.
|
||
|
||
## [0.7.3] - 2026-05-21
|
||
### Fixed
|
||
- Shared terminal now has **scrollback** — large output (e.g. `ls -la`) can be scrolled up to
|
||
read; it keeps a history buffer and only auto-scrolls to the bottom when you're already there.
|
||
|
||
## [0.7.2] - 2026-05-21
|
||
### Changed
|
||
- Removed the GUI **Inventory** tab — use the CLI `rigdoctor inventory` instead. (Inventory is
|
||
still collected for the relay guest view, so a remote helper still sees the host's hardware.)
|
||
### Fixed
|
||
- Shared terminal caret now sits at the real cursor position (row **and** column) instead of
|
||
the start of the line.
|
||
|
||
## [0.7.1] - 2026-05-21
|
||
### Fixed
|
||
- Shared terminal: a guest who joined **after** the host enabled the terminal stayed read-only.
|
||
The host now re-sends the terminal state when a guest joins, so the terminal is available.
|
||
- Inventory page no longer jumps back to the top when it refreshes (e.g. when elevated data
|
||
arrives) — scroll position is preserved and unchanged data isn't re-rendered.
|
||
- Shared terminal now follows the cursor to the bottom as output arrives (e.g. `ls -la`),
|
||
instead of staying scrolled up.
|
||
|
||
## [0.7.0] - 2026-05-21
|
||
### Added
|
||
- **Shared terminal (M12, Tier 3)**: when the host enables it, the session shares a real **PTY**
|
||
shell — the guest gets an interactive terminal (vim, top, tab-completion, Ctrl-C) running on
|
||
the host as the host's user. The host **reads along** live and can type too, e.g. a `sudo`
|
||
password — which stays local and is never sent to the guest. Off by default, host-consented.
|
||
The guest also pulls the host's inventory on join.
|
||
### Fixed
|
||
- **Input contrast**: all form controls (text fields, spin boxes, combo boxes, terminals) now
|
||
use the dark theme with readable text (Fusion defaulted them to light-on-light).
|
||
|
||
## [0.6.0] - 2026-05-21
|
||
### Added
|
||
- **Session sharing over the relay (M12)**: a **Share** tab — *Start shared session* (host)
|
||
hands you a short code and streams a read-only live view; *Enter share code* (guest) joins
|
||
someone else's session and views their sensors/health/inventory. Both connect outbound over
|
||
WebSocket to the relay (`relay_url`, default `wss://rigdoctor.jesseyvanofferen.com`), gated
|
||
by your Gitea access token — no port forwarding. Read-only.
|
||
|
||
## [0.5.0] - 2026-05-21
|
||
### Added
|
||
- **Session sharing (M12, Tier 2)**: `rigdoctor share serve` starts a **read-only** live view
|
||
(sensors auto-refresh + health report + inventory) over a local HTTP server, gated by a
|
||
random share token. Bind to localhost for local testing, or to all interfaces behind a
|
||
user-chosen tunnel (Tailscale/cloudflared/SSH) for remote help. No actions, no terminal.
|
||
(Tier 1 export and Tier 3 gated terminal still to come — D16.)
|
||
|
||
## [0.4.1] - 2026-05-21
|
||
### Fixed
|
||
- Checkbox contrast: a checked checkbox is now a clear accent-filled box with a checkmark
|
||
(was hard to tell checked from unchecked on the dark theme).
|
||
|
||
## [0.4.0] - 2026-05-21
|
||
### Added
|
||
- **Alerts (M8)**: desktop notifications (via `notify-send`) for **overheat** (GPU/CPU past a
|
||
threshold), **GPU-lost** (nvidia-smi timeout), and a **new version available** (fired once
|
||
per version). Edge-triggered with a cooldown so it doesn't spam. Degrades gracefully if
|
||
`notify-send` isn't installed.
|
||
- **Notifications page**: configure alerts (enable/disable, GPU/CPU temperature thresholds)
|
||
with a "Send test" button; changes apply live and persist to `config.toml`.
|
||
- **App icon**: ships a RigDoctor icon and shows it in the dock/launcher. The GUI
|
||
**self-registers** the icon + `.desktop` on launch (and sets the Wayland app-id), so a
|
||
self-update + relaunch picks it up — no need to re-run the installer.
|
||
|
||
## [0.3.2] - 2026-05-21
|
||
### Changed
|
||
- Replaced the per-page "Run with admin" buttons with a **single password prompt at launch**
|
||
(`pkexec`): the GUI collects root-only data (SMART + dmidecode board/BIOS/RAM) once and
|
||
caches it for the session, so Health and Inventory always show the full picture. Falls back
|
||
to non-root if cancelled/unavailable; disable via `elevate_on_launch = false`.
|
||
|
||
## [0.3.1] - 2026-05-21
|
||
### Fixed
|
||
- Changelog/release notes now **render Markdown** instead of showing raw `#`/`**` markup —
|
||
the in-app changelog uses `QTextEdit.setMarkdown()` and the update prompt renders notes as
|
||
rich text (closes #1).
|
||
|
||
## [0.3.0] - 2026-05-21
|
||
### Added
|
||
- **System inventory (M5)**: CPU, GPU (model/driver/VBIOS/VRAM/PCIe), motherboard/BIOS, RAM
|
||
(total + modules), storage, kernel, and display server. CLI `rigdoctor inventory`
|
||
(`--json` / `--markdown` / `--output`) and a GUI **Inventory** tab with Copy-as-Markdown,
|
||
Save, and "Run with admin" (for `dmidecode` board/BIOS/RAM details). Fills the last GUI tab.
|
||
|
||
## [0.2.0] - 2026-05-21
|
||
### Added
|
||
- **"Check for updates" button** in the sidebar — force an immediate version check instead of
|
||
waiting for the 30-minute poll.
|
||
|
||
## [0.1.1] - 2026-05-21
|
||
### Fixed
|
||
- Dialogs (the update prompt and changelog) were light-on-light and unreadable — they now use
|
||
the dark theme with readable text.
|
||
|
||
## [0.1.0] - 2026-05-21
|
||
_First milestone release — a complete, installable, self-updating RigDoctor: live monitoring,
|
||
crash capture + health report, desktop GUI, user-local install/uninstall, and updates._
|
||
### Added
|
||
- **In-app uninstaller**: "Uninstall RigDoctor" button on the Setup page (and
|
||
`rigdoctor uninstall [--purge]`) — removes the venv, launchers, and desktop entry, with an
|
||
option to also wipe settings/token/logs. Runs detached so it can delete its own venv.
|
||
- **In-app changelog**: a "Changelog" link in the sidebar opens the release history (tags +
|
||
notes) fetched from the update server.
|
||
|
||
## [0.0.10] - 2026-05-21
|
||
### Added
|
||
- **"Restart now" button** after a successful in-app update — relaunches RigDoctor for you
|
||
instead of asking you to restart manually.
|
||
- **Real release notes**: CI now sets each Gitea release's body from the matching CHANGELOG
|
||
section (instead of "Automated release for…"), and the updater shows **"What's new"** — a
|
||
notes dialog before applying (GUI) and in `rigdoctor update` (CLI).
|
||
### Changed
|
||
- Setup page / `rigdoctor install`: dropped internal module references (M4, M5, …) from the
|
||
component descriptions — end users don't need them.
|
||
- Adopting **Conventional Commits** + **git-cliff** (`cliff.toml`, `packaging/changelog.sh`)
|
||
to generate CHANGELOG entries from commit history going forward (D20).
|
||
### Fixed
|
||
- The self-extracting **`.run` installer** is now built **without makeself** (a pure-Python
|
||
self-extractor, `packaging/make_run.py`), so it reliably attaches to every release — it was
|
||
silently skipped before because the CI runner couldn't install makeself.
|
||
|
||
## [0.0.8] - 2026-05-21
|
||
### Added
|
||
- **Periodic update checks**: the GUI now re-checks for new releases while running (every
|
||
`update_check_minutes`, default 30; 0 disables), so a newly published version is detected
|
||
without restarting. After applying an update, re-checks stop until restart.
|
||
- **"Run with admin" on the Health page**: runs all checks (including root-only SMART) via
|
||
`pkexec rigdoctor report --json`, so the full report — not just "SMART needs root" — is
|
||
available from the UI.
|
||
|
||
## [0.0.7] - 2026-05-21
|
||
### Added
|
||
- **User-local installer** `install.sh` (no root): creates a private venv, links
|
||
`rigdoctor`/`rigdoctor-gui` into `~/.local/bin`, and adds a desktop entry. Re-run to
|
||
upgrade; `--uninstall` to remove.
|
||
- **Self-extracting `.run` installer** via `packaging/make-run.sh` (makeself) — one
|
||
download-and-run executable bundling the wheel + `install.sh`; built and attached to each
|
||
release by CI.
|
||
- **Self-update apply (M13)**: `rigdoctor update` now installs the newer version via
|
||
authenticated pip (`rigdoctor[gui] @ git+https://oauth2:<token>@…@<tag>`); the GUI sidebar
|
||
"Update to v…" button applies it and prompts to restart. Token is scrubbed from output.
|
||
|
||
## [0.0.6] - 2026-05-21
|
||
### Added
|
||
- **Token-gated updates (M13)**: store a Gitea Personal Access Token, **encrypted in the OS
|
||
keyring** (Secret Service / GNOME Keyring via `secret-tool`) with a 0600-file fallback.
|
||
`rigdoctor login` / `logout` / `update [--check]`; GUI **Setup → Update access** panel
|
||
(token field, "Get a token", backend status) and sidebar states (connect / up-to-date /
|
||
"Update to v…" / access denied). Updates are gated to accounts on the Gitea server (D18).
|
||
- `libsecret-tools` added to the installer catalog (enables encrypted token storage).
|
||
### Changed
|
||
- D18 update mechanism revised from anonymous public HTTP to **authenticated HTTP (token)** —
|
||
the Gitea instance requires sign-in for all anonymous access.
|
||
|
||
## [0.0.5] - 2026-05-21
|
||
### Added
|
||
- **M9 installer (first cut)**: detects distro / package manager / GPU; a catalog of optional
|
||
components (smartmontools, lm-sensors, dmidecode, pciutils, libnotify) with what each
|
||
enables; `rigdoctor install [--check] [-y]` installs missing apt packages via pkexec/sudo
|
||
with consent; GUI **Setup** tab with one-click install. Fixes the "smartmontools missing"
|
||
gap in the health report.
|
||
- **Update check (M13, check half)**: on GUI launch the sidebar checks the Gitea releases API
|
||
and shows "up-to-date", an "Update to v…" button if a newer release exists, or "update check
|
||
unavailable" if the API can't be reached anonymously.
|
||
|
||
## [0.0.4] - 2026-05-21
|
||
### Added
|
||
- **M4 health report**: scans kernel logs (NVIDIA Xid incl. 79 "fell off the bus", kernel
|
||
panic, OOM, MCE, PCIe AER, thermal, amdgpu reset), SMART health, NVIDIA driver/library
|
||
mismatch, journald persistence, and live temps → prioritized plain-language findings with
|
||
suggested fixes (read-only, D9).
|
||
- CLI `rigdoctor report` (text + `--json`).
|
||
- GUI **Health** tab: runs checks in the background; findings shown as severity-colored cards.
|
||
- Tests for the journal scanner.
|
||
|
||
## [0.0.3] - 2026-05-21
|
||
### Added
|
||
- Show the app version (`v<version>`) in the GUI sidebar.
|
||
|
||
## [0.0.2] - 2026-05-21
|
||
### Added
|
||
- **M3 crash-capture logger**: crash-safe JSONL (`fsync` per sample), size-based rotation,
|
||
GPU-lost/recovered event markers, atomic status file; `rigdoctor record run|start|stop|
|
||
status|report` (foreground `run` is the systemd-ready entrypoint).
|
||
- **GUI Recording/Logs page** (M10): start/stop/interval controls, live status, and the
|
||
post-crash report — driving the same recorder via shared `core.reccontrol`.
|
||
- Shared render helpers (`format_raw`, `format_headline`, `render_summary`) used by CLI + GUI.
|
||
- Tests for the crash log (writer, rotation, reader, summary, recorder).
|
||
- **Gitea Actions release workflow** (`.gitea/workflows/release.yml`): on push to `main`,
|
||
builds wheel + sdist and publishes a Gitea release `v<version>` with the artifacts.
|
||
### Changed
|
||
- **GUI-first** emphasis (D17): docs reframed; the CLI keeps full parity for headless/SSH.
|
||
- CPU core temperatures ordered (package, then core 0, 4, 8, …) at the source — fixes the
|
||
CLI ordering too.
|
||
- Distribution revised (D8): **user-local self-updating install** is primary, `.deb` optional.
|
||
### Planned (docs only)
|
||
- M12 session sharing / remote assist (D16); M13 no-root auto-update from the public repo
|
||
(D18); versioning/changelog convention (D19).
|
||
|
||
## [0.0.1] - 2026-05-21
|
||
### Added
|
||
- Initial release: planning docs and decisions (D1–D15); **M1 sensor core** (NVIDIA GPU via
|
||
nvidia-smi, CPU via hwmon, memory + DDR5 SPD temps, NVMe); CLI (`snapshot`, `monitor`,
|
||
`sources`); and the **M10 desktop GUI** — dark dashboard with circular gauges and
|
||
collapsible, temperature-colored cards.
|