Files
rigdoctor/CHANGELOG.md
T
jessey 04e8d72bce
tests / core (pull_request) Successful in 12s
tests / gui-smoke (pull_request) Successful in 27s
feat(memory): flag RAM below rated speed (XMP/EXPO not enabled) — 0.40.0
Inventory shows configured RAM speed + the rated speed when lower
('4800 MT/s (rated 5600)'); System Health flags it with the fix (enable
XMP/EXPO in BIOS). With the profile off dmidecode only reports the JEDEC base,
so the rated speed comes from dmidecode's max OR the part number, matched against
known DDR5 speed grades to avoid false positives. inventory.module_speed() shared
by both; needs dmidecode (root/launch elevation). +tests (incl. the user's
CMK..5600 kit → (4800, 5600)). Completes the underperforming-hardware trio with
PCIe gen + refresh rate.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 17:00:02 +02:00

38 KiB
Raw Permalink Blame History

Changelog

All notable changes to RigDoctor are recorded here. Format follows Keep a Changelog; 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.40.0] - 2026-05-22

Added

  • RAM speed / XMP-EXPO check. Inventory now shows each module's configured speed and, when it's below the rated speed, the rating (e.g. 4800 MT/s (rated 5600)); System Health flags it ("RAM at 4800 MT/s (rated 5600 MT/s)") with the fix — enable XMP/EXPO in BIOS. With the profile off, dmidecode only reports the JEDEC base, so the rated speed is read from both dmidecode and the part number (matched against known DDR5 speed grades, so no false positives). Needs dmidecode (root / launch elevation). Completes the "underperforming hardware" trio with PCIe gen + refresh.

[0.39.0] - 2026-05-22

Added

  • Displays in the Inventory. A new core/displays.py lists each connected monitor with its resolution and current/max refresh — e.g. DP-1 · Samsung LC34G55T → 3440x1440 @ 165 Hz. Reads GNOME's Mutter DisplayConfig over D-Bus (works on X11 and Wayland), falling back to xrandr on other X11 desktops.
  • System Health flags monitors below their max refresh. If a monitor supports a higher refresh at its current resolution (e.g. a 165 Hz panel set to 60 Hz — an easily-missed gaming setting), Health reports it with the fix (raise it in Display settings). Max is computed at the current resolution, so it never suggests dropping resolution.

[0.38.0] - 2026-05-22

Added

  • PCIe link in the Inventory. Each NVMe drive now shows its negotiated PCIe link next to the model — e.g. Samsung SSD 980 PRO 1TB (931.5G) · PCIe Gen4 x4 — read from sysfs (current/max_link_speed + width). If a drive negotiates below its capability (a slower M.2 slot, lane-sharing, or a downtrain) it's flagged: PCIe Gen3 x4 (capable of Gen4 x4). So you can confirm a Gen4 SSD is actually in a Gen4 slot. (SATA disks show no PCIe link.)
  • System Health flags downtrained NVMe links. A new check warns when an NVMe drive negotiates fewer PCIe lanes than it supports (almost always motherboard lane-sharing — a GPU/second card or another M.2 stealing lanes) and notes speed-only reductions as info (a slower slot or idle ASPM). The GPU is deliberately excluded — NVIDIA drops its PCIe gen/width at idle, so a snapshot would false-alarm.

[0.37.1] - 2026-05-22

Fixed

  • rigdoctor update now uses the right method for how RigDoctor was installed. It detects apt (.deb), pip (venv/.run), or source installs (updates.install_kind()); only pip installs self-update in place. An apt install no longer fails with "No module named pip" — it (and the GUI Update button) shows sudo apt update && sudo apt install --only-upgrade rigdoctor; a source checkout points to git pull.

[0.37.0] - 2026-05-22

Added

  • Version footer — a footer across the bottom of the window shows RigDoctor v<version> in the bottom-right (moved out of the sidebar).

Fixed

  • Pages scroll when content doesn't fit, and the window is no longer pinned to the tallest page's height. Long pages (Settings, Tuning, …) get a scrollbar when too tall — so controls like Uninstall are always reachable — and the window can now be resized smaller than the screen (min height dropped from "taller than the screen" to ~600px). Pages that manage their own scroll/fill (Dashboard, System Health, Inventory, Share) are unchanged.

[0.36.1] - 2026-05-22

Fixed

  • rigdoctor gui printed the wrong fix when PySide6 is missing — it suggested the non-existent python3-pyside6 package. Now it names the real split modules (python3-pyside6.qt{widgets,gui,websockets,svg} + python3-pyte).

[0.36.0] - 2026-05-22

Fixed

  • .deb now installs all dependencies automatically — no manual tool install. The previous Recommends: python3-pyside6 named a package that doesn't exist on Debian/Ubuntu (PySide6 is split per module), so apt silently skipped it and the GUI wouldn't start. Now it Recommends the actual modules the GUI imports — python3-pyside6.qt{widgets,gui,websockets,svg} + python3-pyte.

Changed

  • apt install rigdoctor sets up the whole toolset. The .deb also Recommends the optional diagnostic/gaming tools (smartmontools, lm-sensors, dmidecode, pciutils, libnotify-bin, libsecret-tools, gamemode, mangohud) so they install by default — users never hand-install tools. cpupower is a Suggests (kernel-tied); --no-install-recommends still gives CLI-only.

[0.35.0] - 2026-05-22

Added

  • .deb package (M9 / D8)packaging/make_deb.py builds a rigdoctor_<version>_all.deb (pure-Python, Architecture: all) via dpkg-deb: Depends: python3, with the GUI deps (python3-pyside6, python3-pyte) as Recommends so sudo apt install ./rigdoctor_*.deb gives the full app and --no-install-recommends gives CLI-only. Installs the package, both launchers, the desktop entry, and the icon. CI (release.yml) builds it as a release asset every release, and optionally publishes it to the Gitea apt registry (set a REGISTRY_TOKEN secret) for sudo apt install rigdoctor. M9 is now complete.

[0.34.0] - 2026-05-22

Added

  • Event-based alerts (M8). Beyond temperature + GPU-lost, RigDoctor now notifies on critical kernel events — Xid (GPU error), out-of-memory kills, CPU machine-checks, PCIe AER errors, and disk I/O errors — scanned from the kernel log every ~30s while monitoring and fired one-shot (cooldown-gated, so no spam). A proactive warning the moment something goes wrong, not just on a temperature threshold. Included whenever desktop notifications are on.

[0.33.0] - 2026-05-22

Added

  • AI explanations stream live. "Explain with AI" now fills token-by-token as the model generates (Ollama NDJSON + Claude SSE, both via stdlib urllib) instead of a multi-second freeze, then re-renders the finished answer as Markdown. core/ai.explain_stream().

[0.32.0] - 2026-05-22

Added

  • More for diagnostics & reports:
    • nvidia-smi -q snapshot — driver, throttle/clock-event reasons, clocks, power, temps, PCIe link, ECC + retired pages (point-in-time at diagnostic time).
    • Display-server log — auto-detected: Xorg.0.log on X11, or the compositor's user-journal slice (gnome-shell/kwin/sway/gamescope) on Wayland.
    • Full system inventory (M5 hardware/OS) is now included in each stored diagnostic and the Report bundle — invaluable for larger/shared debugging. These join the kernel log + coredump records in syslogs.txt/inventory.*, are saved per diagnostic, included in the Report zip, and (logs) fed to the AI on "Explain".

[0.31.0] - 2026-05-22

Added

  • Diagnostics now collect session-scoped system logs (core/syslogs.py): a kernel-log slice (journalctl -k — Xid, OOM-killer, MCE, PCIe AER, thermal, hung tasks) and crashed-process records (coredumpctl — which executable, signal, and when). They're saved to the diagnostic directory (syslogs.txt), included in the Report bundle, and fed to the AI on "Explain" alongside the game logs. Best-effort — degrades quietly if the tools are missing or access is denied; scoped to the session window so it doesn't drag in old noise.

[0.30.0] - 2026-05-22

Added

  • Logging & report bundles (M15, D25) — opt-in via one Settings → Logging toggle (default off). When on: the app logs to a rotating app.log, and each diagnostic is stored in its own folder (~/.local/share/rigdoctor/diagnostics/<id>/) with the capture log, a structured result.json, a readable report.txt, a session-scoped game-log snapshot, and an ai/ record of every AI interaction — the exact data sent, which model, and its reply.
  • Report — a button on the diagnostic dialog (and rigdoctor bundle) zips a diagnostic's folder plus app.log into ~/.local/share/rigdoctor/reports/<id>.zip for sharing. Everything stays local; the zip only leaves your machine if you share it. Available only when logging is on.

[0.29.0] - 2026-05-22

Added

  • AI now resolves Steam app IDs from your library instead of guessing. When app IDs appear in the logs/findings, RigDoctor looks them up in your scanned games (steam.appid_names()) and injects an "App IDs (resolved from your installed games)" glossary into the prompt — so the model names games correctly (e.g. 2694490 = Path of Exile 2) rather than hallucinating. Only IDs it can resolve locally are listed; no network, no model "training" needed.

[0.28.1] - 2026-05-22

Fixed

  • AI explanations were misreading stale/benign logs. Three fixes so the model analyses the actual session: (1) the prompt now states the real game name, capture duration, and outcome (clean vs. crash) so the model stops guessing the game from log paths; (2) game logs are scoped to the session window (Steam-console lines filtered by timestamp; a stale per-app Proton log from an earlier game is skipped); (3) the reference KB flags common benign Steam/Proton lines (libnvidia-ml.so.1 assertion, routine minidump uploads, "fork without exec") so they aren't reported as the cause. The system prompt also forbids Windows-only advice (no "run as administrator") and tells the model not to invent a problem when the run was clean.

[0.28.0] - 2026-05-22

Added

  • AI explanations now include recent game logs. When you press "Explain with AI" on a diagnostic, RigDoctor also gathers recent Proton (~/steam-<appid>.log) and Steam console logs (core/gamelogs.py, tail-read + size-bounded) and passes them to the model, so it can correlate log errors with the sensor findings and pinpoint when something went wrong.

Fixed

  • The AI explanation popup now renders Markdown (headings, bold, lists) instead of showing raw ###/**QTextEdit.setMarkdown, and the model is told to answer in Markdown.

[0.27.1] - 2026-05-22

Changed

  • AI assistant: selecting Ollama now pre-fills the model field with qwen2.5:7b (a strong 7B that fits an 8 GB GPU; our grounding makes a 7B sufficient). It won't overwrite a model you've already entered, and you can change it freely.

[0.27.0] - 2026-05-22

Added

  • AI assistant (M14, D24) — optional, strictly opt-in, never automatic. Explains your diagnostics in plain language only when you press "Explain with AI" on the diagnostic dialog (or run rigdoctor ai explain). You choose a provider explicitly (no default): Ollama (local, private, no key) or Claude (Anthropic; key stored in the keyring, with a consent prompt before any data is sent). Configure in Settings → AI assistant.
  • Answers are grounded: RigDoctor passes the actual findings plus matched reference facts from a curated knowledge base (core/ai_knowledge.py — exact keyword/code match, no embeddings, stdlib only), so even a small local model gets the domain facts it needs. Stdlib urllib only — no new core dependency. Output is advisory (D9).
  • CLI: rigdoctor ai status|test|explain.

[0.26.1] - 2026-05-22

Fixed

  • Setup wizard contrast. The radio buttons (Recording trigger) were unstyled, so the selected option was invisible on the dark theme — now styled with a clear accent ring + dot. Bundle checkboxes got explicit checked/disabled states, and stay selectable even when a bundle is already installed (the page no longer looks dead when everything's present).

[0.26.0] - 2026-05-22

Added

  • Graphical setup wizard (M9). A first-run GUI wizard (gui/setup_wizard.py) walks through: environment summary → pick dependency bundles (Diagnostics / Monitoring / Gaming / Updates, from the component catalog) → install the missing apt packages → choose the recording trigger → a readiness summary. It shows automatically on first launch (until done), is re-runnable from Settings → Run setup wizard or rigdoctor-gui --setup, and install.sh launches it after a fresh install when a desktop session is present.

[0.25.0] - 2026-05-22

Changed

  • Share is now terminal-only (D23, amends D16). The Share page is a single shared-terminal experience: the host shares their shell, the guest watches and may type only if the host ticks "Allow the guest to type" (otherwise read-only). The terminal is larger and either side can pop it full-screen (Esc to exit).

Removed

  • The read-only stats view (live sensors/health/inventory over the relay) and the rigdoctor share serve HTTP server — the shared terminal replaces them. (core/share.py removed; the share CLI command is gone.)

[0.24.0] - 2026-05-22

Added

  • Shared terminal is now in color. The terminal view renders pyte's per-cell foreground/ background, bold, and reverse, so the host's real shell keeps its theming — fish, ls, git, prompts, etc. look the same as locally (the session already runs the host's $SHELL with its config and TERM=xterm-256color; only the rendering was monochrome).

[0.23.0] - 2026-05-22

Added

  • Crash-logger trigger modes (M9 / D6) via systemd --user, no root: manual, always-on (a background service records continuously), and game-launch (auto-records while a Steam game runs). Set it from Settings → Recording trigger or rigdoctor service mode <manual|always-on|game-launch>; rigdoctor service status shows it. core/service.py writes/enables the user units.
  • Zero-config game-launch watcher (core/watcher.py, rigdoctor watch) — polls Steam's RunningAppID and brackets a focused capture around the running game (the D12 fallback for users who don't add the wrap launch option; the wrapper stays the precise primary path).

[0.22.0] - 2026-05-22

Added

  • M6 breadth. Environment checks now also report GPU PowerMizer mode (NVIDIA, X — flags Adaptive/Auto and suggests Prefer-Max-Performance), the Wine version, and the Steam client version.
  • Non-Steam launchers. Lutris (its SQLite library) and Heroic (Epic + GOG JSON stores) are detected (core/launchers.py) and listed on the Games page and rigdoctor games, tagged by launcher. You can Run Diagnostic on them too (records while you play; auto-launch stays Steam-only).

Notes

  • The zero-config game watcher (D12 fallback) is deferred to the M9 trigger-mode work, where the service integration lives.

[0.21.0] - 2026-05-22

Added

  • Live monitor TUI (M2). rigdoctor monitor is now a proper curses dashboard: current / session-min / session-max per sensor, grouped by subsystem, with temperature and utilization color bands (and GPU-lost flagged red). q quits, r resets the session min/max. Falls back to a plain full-screen redraw on a non-TTY (--plain forces it). The terminal face of the same live data the GUI dashboard graphs. Completes the Monitoring bundle.

[0.20.0] - 2026-05-22

Changed

  • Reorganized navigation into grouped sidebar sections — Monitor (Dashboard) · Diagnose (Games, Recordings, System Health, Tuning) · System (Inventory) · App (Settings, Share) — so it's clear where to go.
  • Renames for clarity: Health → System Health (it's the overall 7-day system scan, not per-game), Environment → Tuning (gaming tunables + fixes), Logs → Recordings, Setup → Settings.
  • Settings absorbed Notifications (alerts) — app configuration (components/deps, alerts, account access, uninstall) now lives in one page; Notifications is no longer a separate item.
  • Recordings is now a hub: pick which captured log to view (always-on capture, last diagnostic, or a preserved crash), Analyze crash in place, alongside the recorder controls.

[0.19.0] - 2026-05-22

Added

  • System-tray applet (M11, D13). A tray icon whose menu shows live CPU / GPU temp and memory used/total, a status line (Normal / Hot / GPU not responding), and is led by a Run Diagnostic submenu (pick a detected game → the guided session), plus Open dashboard, Start/Stop recording, Snapshot (copy), and Quit. It reuses the dashboard's sample stream (no extra sampling). With a tray present, closing the window hides to the tray (Quit exits); rigdoctor-gui --tray starts hidden for autostart. Needs a tray host — on GNOME the AppIndicator extension; degrades to a no-op if none is available. Completes the Desktop UI bundle.
  • GUI smoke tests: construct MainWindow headless and exercise the tray, so a startup crash fails the build (closes the gap that let the 0.18.0 import regression ship).

[0.18.2] - 2026-05-22

Fixed

  • GUI wouldn't start (0.18.0 regression): the recording indicator used a wrong relative import (from .corerigdoctor.gui.core, which doesn't exist), crashing MainWindow on launch. Corrected to from ..core.

[0.18.1] - 2026-05-22

Changed

  • Recording badge: dropped the sample count (not useful at a glance) — it now shows just ● Recording + the game, plus a ⚠ GPU-lost line if one is detected.

[0.18.0] - 2026-05-22

Added

  • Global recording indicator. While a capture is running, the sidebar shows a red ● Recording badge on every page — with the game being captured and the live sample count (and a GPU-lost flag if seen). It polls the recorder, so it reflects captures started any way: manual record, a guided diagnostic, or the Steam launch wrapper.

[0.17.0] - 2026-05-22

Added

  • Inventory page is back in the GUI (it was removed in 0.7.2 in favor of the CLI). Sidebar Inventory → System / CPU / Firmware / Memory / GPU / Storage / Display as cards, with Copy Markdown and Save… for pasting into forum/bug reports, and Refresh. Root-only details (motherboard/BIOS/RAM modules via dmidecode) fill in after the launch password prompt. Backed by the existing M5 core/inventory.py — the CLI rigdoctor inventory is unchanged.

[0.16.0] - 2026-05-22

Added

  • Automatic crash-capture via a Steam launch wrapper (M6/D12). Set rigdoctor wrap %command% as a game's Steam launch option (or in Lutris/Heroic's wrapper field) and RigDoctor starts a focused, game-tagged capture when the game launches and stops it cleanly on exit — no manual Run Diagnostic / Finish. A hard freeze leaves the capture unterminated, so it's flagged as a crash next launch. The wrapper resolves the game name from Steam's SteamAppId, doesn't disturb an existing capture, and returns the game's exit code. (core/wrap.py, rigdoctor wrap.)
  • GUI Auto-capture… helper on the Games page: shows the exact launch-option line (absolute path, copy button) and how to set it in Steam.
  • Auto-capture preserves an unanalyzed crash (diagnostic-crash.jsonl) before starting a new capture, so relaunching the game can't wipe a crash report you haven't seen yet.

Fixed

  • docs/MODULES.md status column was stale — M1, M3, M4, M5, M8, M10, and M13 are done and now marked (only M2 and M11 remain not-started; M6/M9/M12 in progress).

[0.15.0] - 2026-05-22

Added

  • Hard-crash detection & recovery for the guided diagnostic. If a focused capture ends without a clean stop (the recorder never wrote session-stop and isn't running), RigDoctor treats it as a likely hard freeze. On launch the Games page shows a warning banner — "Your last diagnostic for ended unexpectedly…" — with Analyze crash / Dismiss.
  • Deeper crash analysis. Analyze crash combines the captured window (final readings before the freeze + any GPU-lost event) with a focused scan of the previous (crashed) boot's kernel log (journalctl -k -b -1: Xid/panic/OOM/MCE/AER/thermal) plus SMART/driver/persistence/ live-temp checks — the full "what happened" picture. core/diagnostic.py gains pending_crash() / analyze_crash(); health.check_previous_boot() + run_health_checks(include_journal=False) back it.

[0.14.0] - 2026-05-22

Changed

  • Dashboard headline tiles are now history trend graphs instead of single-value gauges — GPU temp, GPU load, CPU temp, and memory each plot their recent history (with the current value, window min/max, and a dashed warning-threshold line), so you can see changes over time rather than only the instantaneous reading. New HistoryGraph widget (QPainter, no new deps).

[0.13.0] - 2026-05-22

Added

  • Run Diagnostic now explains itself and can launch the game. Clicking Run Diagnostic shows what to do — play the game, reproduce the crash, then Finish & analyze (and that data survives a hard freeze + reboot) — and offers Launch game & start (asks Steam to run it by appid) or Start without launching. The recording banner now spells out the next step instead of just showing a sample count.

Fixed

  • Button labels containing "&" (e.g. "Finish & analyze") rendered as "Finish _analyze" because Qt treated the "&" as a keyboard mnemonic — now escaped so the ampersand shows literally.

[0.12.0] - 2026-05-22

Added

  • Guided diagnostic in the GUI. Each game on the Games page now has a Run Diagnostic button → a focused, game-tagged capture starts and a recording banner appears (live sample count, GPU-lost indicator) with Finish & analyze / Discard. Finishing opens a results dialog: the window-scoped capture summary (peak temps/power, events, last samples) plus the health findings as cards. The banner persists/restores if you navigate away and back while a capture is running. Shares core/diagnostic.py with the CLI (one flow, three front-ends).

[0.11.0] - 2026-05-22

Added

  • Guided diagnostic session (CLI) — the seed use case, end to end. rigdoctor diagnose start --game "<name>" runs a focused crash-capture tagged with that game (its own diagnostic log, so the report is scoped to just that session), diagnose status shows progress, and diagnose finish stops it and prints a combined report: the capture summary (peak temps/power, GPU-lost events, last samples — M3) plus the health findings (Xid/SMART/driver/etc. — M4). The game can be given by --game or --appid (resolved from the Steam scan), and is recorded as a log event so it survives a crash + reboot.
  • Shared orchestration lives in core/diagnostic.py (one callable for CLI/GUI/tray, per ARCHITECTURE §7.1); the recorder/record run gained an optional --game tag.

[0.10.2] - 2026-05-22

Changed

  • When an Environment Apply/Install fails, the status now shows the real reason (cancelled at the password prompt vs. the system rejecting the change, e.g. a BIOS/kernel- locked PCIe ASPM policy) instead of a vague "cancelled, or needs privileges".

[0.10.1] - 2026-05-22

Fixed

  • Environment-page contrast. The combo-box drop-down list was rendering light-on-light (the popup view is a separate widget the theme didn't cover) — now dark with readable text.
  • The Install / Apply buttons on findings were hard to read (the accent fill didn't paint reliably inside the finding cards, leaving dim dark-on-dark text). They're now an outlined style — bright accent text on the dark card, filling accent on hover — readable regardless, and given a minimum height so the row can't crush them.

[0.10.0] - 2026-05-22

Added

  • Actionable Environment page (M6) — install & apply, not just advice. Findings that recommend a tool or a setting are now one-click:
    • Install buttons for GameMode, MangoHud, and cpupower (added to the M9 component catalog, so they also appear on the Setup page with the existing installer).
    • Apply controls for runtime-reversible tunables — a dropdown of the live options + Apply, via a single pkexec prompt, no reboot: CPU governor, NVIDIA persistence mode, PCIe ASPM policy, vm.swappiness, Transparent HugePages (core/fixes.py). The chosen value is validated against the live options before anything runs.
    • This is the consent-gated apply milestone D9 anticipated, scoped to safe settings (D22). GRUB-based fixes and CPU mitigations stay suggestion-only; rigdoctor gameenv still prints the exact commands for headless use.

Changed

  • The Finding model gained optional action (installable component) and fix (applyable tunable) fields; the shared finding_card widget renders the matching control.

[0.9.0] - 2026-05-22

Added

  • Gaming environment checks (M6) — the evaluate-and-suggest engine. A new read-only report (D9) that flags system settings which hurt gaming stability/performance and gives the exact fix command. Checks: PCIe ASPM, NVIDIA persistence mode, CPU governor (the three that map to the seed-case GPU bus-drop / Xid 79), GameMode, MangoHud, vm.swappiness, shader disk cache, Transparent HugePages, CPU mitigations, and installed Proton versions.
    • CLI: rigdoctor gameenv (text or --json).
    • GUI: a new Environment page (findings cards, auto-runs on open), reusing the M4 health-report card style via a shared finding_card widget.

Fixed

  • Notification icon now uses the RigDoctor icon (matching the app/dock) instead of a generic stock icon — resolved from the installed icon theme, the bundled asset, then a stock fallback.

[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 (D1D15); 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.