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>
4.4 KiB
4.4 KiB
RigDoctor — Roadmap (DRAFT v0.2)
Phased so the seed use case (capturing the RTX 3070 crash / black-screen events) is solved
early, before the broader "tool for all Linux gamers" work. Stack: Python 3 + Qt/PySide6;
Ubuntu + NVIDIA first; .deb distribution (see DECISIONS.md).
Phase 0 — Workspace & spec (done)
- Create repo + docs scaffold
- Settle the foundational decisions D1–D11 (name, language, platform/GPU priority, MVP scope, trigger model, packaging, scope-of-action, GUI/tray)
- Lock the MVP scope (M1 + M3 + M4, NVIDIA-only)
Phase 1 — MVP: capture this crash (Essential bundle, NVIDIA-only, CLI)
- M1 sensor core (NVIDIA via nvidia-smi + hwmon for CPU/RAM/NVMe), stdlib-only
- M3 crash-capture logger (JSONL, fsync per sample, GPU-lost detection, size rotation)
- Manual trigger mode (
rigdoctor record run/start/stop/status);systemd --userservice + other trigger modes in Phase 4 (runis already the service entrypoint) - M4 health report (Xid/panic/OOM/MCE/AER/thermal scan + SMART + driver-mismatch + journald-persistence + live temps, suggested fixes only — D9; GPU-firmware verify deferred)
record reportpost-crash summary (peak temps/power per subsystem, events, last N samples)- Exit criteria: user can run it during gaming and, after a freeze/black-screen, see the last readings + a plausible cause.
Phase 2 — Live monitor (terminal)
- M2 TUI dashboard (current/min/max, grouped, throttle highlighting)
- M8 basic alerting (overheat/throttle/GPU-lost notifications)
Phase 3 — Diagnostics breadth
- M5 system inventory + exportable report
- [~] M6 gaming environment checks (suggest-only) — Steam game/library detection done
(multi-library
libraryfolders.vdfdiscovery +appmanifestscan, opt-in libraries, launch-time background rescan with new-game badge; CLIrigdoctor games, GUI Games page). This is also the D12 "pick a game" foundation. Pending: the env-check probes (governor, GPU persistence, GameMode/MangoHud, swappiness, hugepages, mitigations, PCIe ASPM). - SMART integration (smartmontools if present)
Phase 4 — Desktop UI & installer
- M10 desktop GUI (PySide6: dashboard, log browser, report viewer, logger controls)
- M11 tray / menu-bar applet (QSystemTrayIcon: live M1 readouts + Run Diagnostic + supporting actions — D13)
- Guided diagnostic session (pick game → focused M3 capture → M4 scan → findings), shared by tray/GUI/CLI
- Logger trigger modes: always-on + game-launch (D12 — wrapper first:
rigdoctor wrap %command%+ global Steam compat-tool; zero-config watcher (Steam RunningAppID + /proc) and GameMode hook follow) - [~] M9 interactive installer — done: distro/GPU detection + optional-dependency install
(
rigdoctor install, GUI Setup tab); user-localinstall.sh+ self-extracting.run(no-root venv install, handles python3-venv prereq, CI-built). Pending: module-selection config +systemd --userservice enable + trigger-mode pick. .debpackaging (D8) declaring per-bundle deps incl. python3-pyside6 for Desktop UI
Phase 5 — Breadth (later)
- AMD GPU support in M1 (Steam Deck / Radeon)
- Intel GPU best-effort
- M13 auto-update (D18) — launch-time version check (GUI sidebar) + no-root self-update
apply (
rigdoctor update/ sidebar button → authenticated pip upgrade), token-gated. Restart-after-update is manual for now. - (Later, separate milestone) Optional auto-apply of suggested fixes behind explicit consent — currently out of scope (D9)
Phase 6 — Session sharing / remote assist (M12, D16)
Escalating ladder, built in order:
- Tier 1:
share export— diagnostic bundle (inventory + recent log + report); B opens it in RigDoctor. One-way, safest. - Tier 2: live read-only view —
rigdoctor share serve(stdlib HTTP, token-gated: sensors + health + inventory). Remote = user-chosen tunnel; GUI controls still to add. - Tier 3: host-consented interactive terminal — a real PTY shell shared over the relay
(own
pty, pyte-rendered guest), off by default; host reads along + can type (sudo).
Out of scope: stress/repro module (D7); multi-distro support and packaging beyond Ubuntu/apt +
.deb(D15) — a thin seam is kept but not built out.
Dropped: stress / repro module (D7) — not on the roadmap.