From d01e4a180e567e899e9d9c93abfc1ce2782b8147 Mon Sep 17 00:00:00 2001 From: Wanjohi Date: Wed, 2 Sep 2026 13:00:03 +0300 Subject: [PATCH] fix: nesdoctor.json was committed to a public repository (#312) My mistake, in a76cb2a, now merged to dev. nesdoctor writes its report next to wherever it is run, and during development that is the repository root. `git add -A` took it. What the committed file exposed, all of it the operator's own machine: - two home paths, /home//.steam/steam and .local/share/Steam - one installed game title - mount points - the answers given to a test run of the questionnaire Low severity -- the username is already public and matches the account, and one game title is not much -- but it is exactly the class of thing this tool exists to be careful with, and shipping it in the repository that asks strangers to trust the tool is worse than the content. Removed from HEAD and added to .gitignore, along with the wildcard form. The `--json` default keeps its name on purpose: an ignore rule cannot protect a default called something generic like report.json, and renaming it would leave the old name unguarded for anyone who scripted against it. **History is not cleaned by this commit.** The file is in pushed history on a public repository, which per our own rule about published history means it should be treated as permanent rather than as something a revert fixes. Rewriting dev is possible and is a judgement call about whether the content above is worth the disruption; it is not mine to make unilaterally. --- .gitignore | 7 ++ apps/nesdoctor/src/main.rs | 7 ++ nesdoctor.json | 163 ------------------------------------- 3 files changed, 14 insertions(+), 163 deletions(-) delete mode 100644 nesdoctor.json 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