Expand diagnostic/report collection (all stored per-diagnostic, in the Report zip;
logs also fed to the AI on "Explain"):
- syslogs: nvidia-smi -q snapshot (driver/throttle/clocks/power/temps/PCIe/ECC/
retired pages) + display-server log auto-detected — Xorg.0.log on X11, or the
compositor user-journal slice (gnome-shell/kwin/sway/gamescope) on Wayland.
- diagstore: include the full M5 inventory (inventory.txt + .json) — invaluable
for larger/shared debugging. inventory.collect() degrades gracefully (no root
prompt). Best-effort throughout.
- Tests for nvidia/display + inventory in store; docs (M15/SPEC).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
One `logging_enabled` toggle (default off) gates everything (D25):
- core/applog.py: rotating app.log (no-op unless enabled); setup() at GUI/CLI start.
- core/diagstore.py: each diagnostic stored in DATA_DIR/diagnostics/<id>/ (capture,
result.json, report.txt, scoped gamelogs, ai/ records of exactly what was sent to
the model + which model + the reply). make_report() zips a diagnostic (+ app.log)
into DATA_DIR/reports/.
- diagnostic.finish()/analyze_crash() store when enabled; DiagnosticResult.dir.
- GUI: Settings → Logging toggle; "Report" button on the diagnostic dialog; AI
interactions recorded into the diagnostic dir on "Explain with AI".
- CLI: `rigdoctor bundle` (report is taken by the M4 health report).
- Tests for store/record_ai/make_report + applog gating; docs (D25, M15, Phase 8).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>