Skip to content

Repository files navigation

DeckDoc

Current source release: v3.4.0 · Changelog · Roadmap · DeckMD · Diagnostic wiki

DeckDoc is a full-system Steam Deck diagnostic and incident-response platform. It helps answer the larger question behind almost every Deck failure: what actually failed, what evidence supports that conclusion, and what is the safest next action?

It collects and correlates evidence across the APU/GPU, memory, storage and filesystems, battery and power, thermals and fan, Wi-Fi, audio, controls, Steam and Proton, Gamescope, applications, suspend/resume, display, USB-C docks, and connected peripherals. It can capture a one-time system snapshot, preserve evidence from intermittent failures, inspect a docked hardware path, diagnose a supported app's own structured runtime, or collect from outside the installed OS. The result is one timestamped case that can separate likely application/configuration faults, SteamOS or driver faults, peripheral faults, and evidence that warrants hardware escalation.

The project currently ships 19 read-only diagnostic modules, an opt-in incident probe, dock/USB-C analysis, an alpha rescue collector/image builder, a guided symptom checker, a diagnostic wiki, and two tightly guarded remediations. DeckDoc is diagnosis-first: its coverage is intentionally much broader than the small number of conditions it can safely change automatically.

Start with the DeckDoc diagnostic center if you have a symptom and do not yet know which subsystem is responsible.

Or use DeckMD, the private in-browser symptom checker. It starts with six broad categories, reveals only the connected follow-up questions, removes conflicting paths as you answer, and keeps the complete grouped checklist behind Browse all checks.

Problems DeckDoc investigates

AreaQuestions DeckDoc helps answer
Boot and stabilityDid the Deck fail before SteamOS, panic, freeze, restart, or lose only one service?
Games and graphicsDid one title fail, did Gamescope restart, or did the AMD GPU fault and recover?
ApplicationsDid a supported app fail before launch, reach its runtime but stop producing work, rebuild stale state, or record a renderer/process fatal?
Memory and crashesWas there an OOM kill, active pressure, swap churn, or a relevant new core dump?
StorageIs the NVMe or microSD reporting health, controller, filesystem, TRIM, or read-only errors?
Power and thermalsAre battery, charging, PMIC, fan, temperature, or low-frequency signals abnormal?
Network and audioIs the device absent, disconnected, driver-failed, or broken specifically after resume?
Suspend and resumeWhich power transition failed, and which devices or services failed with it?
Controls and peripheralsIs the failure tied to Bluetooth, input configuration, USB, or a physical device path?
Docks and USB-CDid PD, Alt Mode, USB topology, Ethernet, or the external display path renegotiate or reset?
DisplayIs rendering alive while physical scanout failed, or is the symptom part of a wider GPU/session fault?
Intermittent incidentsWhat happened immediately before and after a rare failure that a later report would miss?
Hardware decisionsDoes the evidence follow the OS/configuration, a peripheral, or the physical Deck across clean tests?

DeckDoc does not replace Valve Support, prove that hardware is healthy, repair arbitrary filesystems, or make risky firmware, voltage, clock, charge, panel-power, or blind GPU-reset changes.

Quick start

Run these commands from Desktop Mode or over SSH:

git clone https://github.com/deucebucket/deckdoc.git
cd deckdoc
./setup.sh
# Full read-only report. Root reveals kernel/debugfs and device details.
sudo ./deckdoc.sh

Reports are written under logs/. The file named deckdoc_master_report_<timestamp>.log is the combined report; module_*.log files contain public-safe filtered subsystem sections, and deckdoc_capabilities_<timestamp>.json records the model and evidence-access contract.

All collection modes filter credentials and common personal/device/network identifiers before any persistent log write, and do not keep an intentionally raw variant. Because upstream log formats can change, review a report before posting it. See Collecting and sharing evidence.

One project, five diagnostic modes

ModeBest forOutput
Full reportCurrent system-wide snapshotCapability manifest, 18 subsystem logs, and one master report
Continuous probeRare/transient failuresTrigger, pre/post journal window, and volatile incident state
Dock A/BThird-party dock, PD, USB, Ethernet, display failuresTopology, exported negotiation, connector, and reset evidence
DeckDoc RescueInstalled OS cannot boot or needs an outside-OS contrastPublic-safe read-only rescue archive and installed journal image evidence
DeckMD + wikiUser does not know which subsystem to testRanked symptom branches, known patterns, safe checks, and escalation route

Core commands

CommandEffectChanges the system?
sudo ./deckdoc.shRun all 19 diagnostic modulesNo; creates local logs
./deckdoc.shRun with reduced accessNo; some checks may be incomplete
sudo ./probe/install-probe.sh installOpt in to the low-overhead incident watcherYes; installs/starts one constrained service
sudo ./probe/install-probe.sh uninstallStop/remove watcher, preserving incidentsYes; service files only
sudo ./bootprobe/deckdoc-rescue-collect.sh ...Collect outside-OS evidence from a compatible rescue environmentNo writes to installed disk; creates a filtered archive
sudo ./privileged/install-authorized.sh installApprove DeckDoc's exact read-only privileged operations onceYes; root-owned snapshot and narrow sudoers rules
./privileged/deckdoc-authorized-client.sh reportRun a complete authorized report later without sharing a passwordNo; creates a filtered local report
bash tests/test_runner.shRun mocked regression testsNo production-device changes

The optional authorization does not give DeckDoc—or an agent—a password or general sudo access. It installs a root-owned, checksummed snapshot and allowlists only exact diagnostic operations. Arbitrary arguments, paths, commands, shells, environment injection, and remediations are excluded. Updating the snapshot or changing that allowlist requires another visible user approval. See Privileged diagnostic authorization.

Diagnostic coverage

AreaModuleEvidence and signatures
System contractsystem_manifest.shmodel/OS allowlist, LCD/OLED applicability, discovered devices, readable/inaccessible/absent evidence states
GPU/APUgpu_apu.shamdgpu ring timeouts, reset outcome, low CPU/GPU frequency state
Displaydisplay_blackout.sheDP status, EDID, backlight, CRTC, DRM planes, Gamescope, display warnings
Dock/USB-Cdock_usb_c.shUSB topology, Type-C/PD/Alt Mode exports, external displays, Ethernet, path errors
Battery/PMICbattery_pmic.shraw capacity, voltage, current, charge/energy counters
Thermals/fanthermal_fan.shhwmon readings, plausible exported thresholds, fan RPM
NVMestorage_smart.shSMART/NVMe health and error fields for /dev/nvme0n1
Filesystemsfs_integrity.shBTRFS device counters and ext4 filesystem state
Audioaudio_sof.shSOF panic, IPC timeout/-22, firmware state, ALSA and PipeWire presence
Crashescoredump_analysis.shretained/current-boot/last-24h dumps, process families, signals, disk use
Wi-Fiwifi_firmware.shwlan/wl presence, link info, bounded driver errors/version, Wi-Fi+SOF signature
Game Modegamescope_session.shGamescope dumps and user-service restarts, Vulkan/Wayland errors, MangoApp signature
Memorymemory_swap.shMemAvailable, swap use, cumulative vs live I/O, current-boot OOM events
Incident historyprobe_incidents.shlatest opt-in trigger, volatile snapshot, bounded journal window
Steam/Protonsteam_client_logs.shreal crash files, helper crash rate, Steam errors, prefix/lock inventory
App runtimeryudeck_app.shRyuDeck install/profile state, runtime stage, FPS progress, cache/pipeline signals, renderer/process fatal classes
microSDmmc_sd_card.shmmc presence/mounts, driver/ext4/TRIM errors, read-only state
Suspend/resumeacpi_pm_state.shPM transitions/failures, fan-controller warnings, wake sources
Vulkan translationdxvk_page_fault.shAMD VM/UTCL2 page-fault class, process hints, timeouts, reset result

See Module reference for prerequisites, limitations, and how to interpret every section.

Symptom routes

SymptomStart here
Will not power on, boot, or reach SteamOSRecovery and escalation
Game freezes, crashes, reboots, or returns to LibraryCrashes, GPU and memory
No sound, especially after wakeAudio problems
Wi-Fi missing or broken after wakeNetwork and resume problems
Overheating, fan stopped, charging, battery, sudden shutdownPower, thermal and battery
microSD errors, corrupt games, storage warningsStorage and microSD
Dock, USB-C, charging, Ethernet, or external displayDock and USB-C
Controls, Bluetooth, touch, or gyroControls and Bluetooth
Screen black while the rest of the system may still workDisplay problems
First start after days off is black; second boot worksLong-off startup blackout
Installed OS cannot boot or hardware needs outside-OS comparisonDeckDoc Rescue
Hardware failure versus fixable software is unclearHardware decision guide

Reading a report

Treat a DeckDoc finding as a lead, not a verdict:

  1. Match the timestamp to the incident. Old core dumps and old journal warnings are context, not proof of a current failure.
  2. Correlate independent signals. An OOM victim plus live memory pressure, a filesystem error plus new block I/O failures, or a dock-wide reset plus UCSI/display-link errors is stronger than any one line.
  3. Distinguish absence from inaccessibility. A non-root run may be unable to read debugfs, SMART, BTRFS, system journals, or another user's Game Mode services.
  4. Prefer the smallest reversible experiment that tests the leading hypothesis.
  5. Re-run diagnostics and physically verify the result before calling a remediation successful.

The full interpretation guide is Reading DeckDoc reports.

Diagnosis first, narrow remediation second

DeckDoc's main product is evidence and decision support. Eighteen modules, the probe, Rescue, DeckMD, and the wiki diagnose far more conditions than DeckDoc modifies. Only two signature-specific remediations exist today:

  • a Vangogh SOF audio reload after a current-boot DSP panic or IPC -22;
  • a session-only Gamescope forced-composition test after the validated live LCD scanout-gap precheck.

Everything else ends in evidence, a safe manual contrast, an upstream-ready report, or escalation—not an invented “fix.”

Specialized commandGuarded action
sudo ./deckdoc.sh --fixReload SOF audio only when the current diagnostic trigger is present
sudo ./deckdoc.sh --display-blackCollect additional evidence for a declared physical-panel blackout; read-only
./deckdoc.sh --fix-display-blackoutRun a reversible, session-only Gamescope composition test
./deckdoc.sh --persist-display-stabilityInstall the backed-up display policy only after the live test succeeds

Every remediation follows:

PRE_CHECK -> BACKUP -> EXECUTE -> VERIFY -> REPORT -> documented ROLLBACK

The audio and display commands, exact prechecks, verification, and rollbacks are documented in the safe remediation policy. Unsupported hardware or a mismatched signature is skipped rather than guessed.

DeckDoc never automatically writes panel power, backlight brightness, refresh rate, resolution, TDP, CPU/GPU clocks, charging behavior, firmware, or GPU-reset sysfs nodes. See the safe remediation policy.

Architecture

deckdoc.sh
|-- discovers the model/capability contract first
|-- launches 18 subsystem modules in parallel
|-- filters every module before writing logs/module_*.log
|-- consolidates a timestamped master report
`-- dispatches explicit remediation modes sequentially
modules/ diagnostic and remediation shell modules
lib/ shared public-safe output filtering
probe/ opt-in event-triggered watcher and constrained service installer
bootprobe/ outside-OS collector and unsigned alpha ArchISO builder
privileged/ one-time approved, exact-command diagnostic broker
config/ optional Gamescope policy template
docs/wiki/ GitHub-wiki-ready diagnostic center
tests/test_runner.sh mocked behavior and safety regression checks
VERSION canonical source release version
CHANGELOG.md release history and current unreleased state
remediation_backups/ created only when a remediation records state
logs/ generated reports; ignored by Git

The runner registers a sync trap and modules flush after discrete evidence groups. This improves the chance that partial evidence survives a crash or power interruption; it cannot guarantee persistence after every kernel, device, or filesystem failure.

Requirements and tested scope

  • SteamOS 3.x on Steam Deck is the target environment.
  • Bash 4+, systemd/journalctl, and standard Linux userland are assumed.
  • Root is recommended for a complete report, but fixes always require an explicit flag.
  • smartctl is needed for NVMe SMART; btrfs and dumpe2fs enable filesystem checks.
  • aplay, PipeWire tools, iw, ip, lspci, and coredumpctl enrich their related sections.
  • Read-only coverage and regression fixtures include Jupiter LCD and Galileo OLED differences; model-specific findings and remediations remain evidence-first.
  • Device paths such as /dev/nvme0n1, DRM card indices, driver names, thresholds, and exported sysfs nodes vary. Missing or different hardware should be reported as a coverage gap.

Development

Run the checks before submitting a change:

bash -n deckdoc.sh setup.sh modules/*.sh probe/*.sh bootprobe/*.sh privileged/* tests/*.sh
bash tests/test_runner.sh
node tests/validate_links.js
git diff --check

New diagnostic knowledge should include a symptom, exact evidence, time scope, confidence boundary, safe next step, rollback if applicable, and primary references. The research and issue index maps repository issues and upstream reports to implemented modules and remaining work.

Roadmap and project status

The current roadmap is in ROADMAP.md. The research-backed priorities are a model/capability manifest, evidence access ledger, unified incident timeline, safe redacted packager, storage risk gate, and production hardening/signing of the probe and Rescue image.

License

MIT

About

Evidence-first Steam Deck diagnostics, incident capture, guided symptom triage, safe remediation, and hardware escalation.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages