diff --git a/.gitignore b/.gitignore index b8170f4f..0b86bc05 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,10 @@ lunora/_generated #turbo .turbo + +# nesdoctor writes its report next to wherever it is run, and it is run from +# the repository root during development. It contains the operator's own +# machine: home paths, installed game titles, launch times. Committed once by +# accident; never again. +nesdoctor.json +*.nesdoctor.json diff --git a/apps/nesdoctor/src/main.rs b/apps/nesdoctor/src/main.rs index 53f883a6..f4cfaecd 100644 --- a/apps/nesdoctor/src/main.rs +++ b/apps/nesdoctor/src/main.rs @@ -74,6 +74,13 @@ struct Args { yes: bool, /// Where to write the full report. + /// + /// Relative to the working directory, which during development is a git + /// checkout -- and this file contains the operator's own machine: home + /// paths, installed titles, launch times. It was committed to the public + /// repository once by accident. `.gitignore` now covers the default name, + /// and the default is deliberately not something like `report.json` that + /// an ignore rule would miss. #[arg(long, default_value = "nesdoctor.json")] json: PathBuf, diff --git a/nesdoctor.json b/nesdoctor.json deleted file mode 100644 index 6c8b3185..00000000 --- a/nesdoctor.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "nesdoctor": "0.1.0", - "sys": { - "os": "linux", - "arch": "x86_64", - "release": "CachyOS", - "kernel": "7.1.8-1-cachyos", - "cpu_model": "AMD Ryzen 5 7530U with Radeon Graphics", - "cpu_threads": 12, - "ram_gib": 13.496604919433594, - "gpus": [ - { - "name": "AMD Barcelo", - "vendor": "AMD", - "render_node": "/dev/dri/renderD128" - } - ], - "disks": [ - { - "mount": "/", - "fs": "btrfs", - "source": "/dev/nvme0n1p2", - "free_gib": 90.39772033691406 - }, - { - "mount": "/tmp", - "fs": "tmpfs", - "source": "tmpfs", - "free_gib": 3.8342933654785156 - } - ], - "uptime_hours": 12.97486111111111, - "powered_hours_per_day": null, - "powered_span_days": 2.0136990167476854 - }, - "host": { - "checks": [ - { - "id": "kvm", - "what": "/dev/kvm present and openable", - "state": "pass", - "detail": "yes", - "blocking": true - }, - { - "id": "gpu", - "what": "an AMD or Intel GPU with a DRM render node", - "state": "pass", - "detail": "AMD Barcelo at /dev/dri/renderD128", - "blocking": true - }, - { - "id": "vkvideo", - "what": "VK_KHR_video_encode_queue plus a codec extension", - "state": "pass", - "detail": "extensions present. Note: presence is not proof — a working extension list with a broken path has happened here before, so this row is a necessary and not a sufficient condition.", - "blocking": true - }, - { - "id": "virgl", - "what": "libvirglrenderer with DRM native context, patched", - "state": "unknown", - "detail": "libvirglrenderer.so.1.11.0 found. Whether it carries the native-context patches cannot be told from outside — the contract calls this the requirement most likely to be silently wrong, so we report presence only.", - "blocking": false - }, - { - "id": "content-store", - "what": "a ZFS pool for game datasets", - "state": "fail", - "detail": "no ZFS mount found. One dataset per game, cloned per player, is the whole of the content store — no other filesystem gives clones and send/recv.", - "blocking": false - }, - { - "id": "box-store", - "what": "ext4 or xfs, not /, for box images (O_DIRECT)", - "state": "fail", - "detail": "none found. A box image must be openable O_DIRECT or the box has no storage bound at all — ZFS ignores the flag, and a warm page cache let a capped guest read at 13.3 GB/s against a 20 MB/s cap. Games are hundreds of GiB, so / is not an option either.", - "blocking": false - }, - { - "id": "cgroup-io", - "what": "the io cgroup controller available", - "state": "pass", - "detail": "present at the root", - "blocking": false - }, - { - "id": "virtiofsd", - "what": "virtiofsd, for shared directories into the guest", - "state": "pass", - "detail": "/usr/bin/virtiofsd", - "blocking": false - } - ], - "could_host": true, - "unknowns": 0 - }, - "net": { - "idle_rtt_ms": null, - "loaded_rtt_ms": null, - "loaded_rtt_p95_ms": null, - "bloat_ms": null, - "upstream_mbps": null, - "grade": null, - "note": "skipped with --no-net" - }, - "steam": { - "found": true, - "roots": [ - "/home/wanjohiryan/.steam/steam", - "/home/wanjohiryan/.local/share/Steam" - ], - "titles": 1, - "bytes_on_disk": 45003193272, - "largest": [ - [ - "Control Ultimate Edition", - 45003193272 - ] - ], - "launch_hours": [ - 8, - 4, - 2, - 8, - 0, - 4, - 0, - 4, - 2, - 0, - 0, - 0, - 4, - 6, - 2, - 0, - 8, - 2, - 2, - 2, - 2, - 8, - 6, - 0 - ], - "launch_samples": 74, - "peak_window": [ - 20, - 3 - ] - }, - "answers": { - "role": "play", - "share_for": null, - "pays_today": "1-9", - "other_linux": null, - "steam_consent": true, - "asked": 2 - }, - "verdict": "unknown", - "region_hint": null -} \ No newline at end of file