A graphical sample-based health checker for PoCX plot files. Spot-checks a .pocx
plot in seconds — orders of magnitude faster than a full verifier sweep — and
shows the result as a colour-coded grid so you can see at a glance whether a
plot is healthy, partially written, or corrupted.
| Single file | Batch |
|---|---|
![]() |
![]() |
A full plot verifier hashes every nonce on disk. That's correct but slow:
verifying a multi-terabyte plot can take hours. pocx_doctor does something
different — it picks a representative grid of sample positions across the plot
(nonces × scoops), hashes only those, and checks whether each sample matches
what the plot file claims. If samples agree with the canonical hash, the plot is
almost certainly fine; if a region disagrees, you see exactly which part is bad.
Concretely:
- Statistical sampling: a 64×48 grid (3 072 cells) over the nonce/scoop plane. Each cell gets 1–4 probes depending on thoroughness.
- Pinned canary probes: the first and last nonces are always probed so early-write and late-write corruption is caught reliably.
- Tail-magic detection: reads the resume marker to learn how far plotting actually got, so paused / aborted plots are reported correctly instead of flagged as broken.
- SIMD-accelerated hashing: auto-detects SSE2 / AVX / AVX2 / AVX512 at startup.
- Single or batch mode: one file, or every
.pocxin a folder. - HTML + JSON reports: shareable per-plot summary including the bad-probe list and address metadata.
Pre-built binaries for Windows, macOS (Intel + Apple Silicon) and Linux (x86_64 + ARM64) are on the Releases page.
- Windows: unzip and double-click
pocx_doctor.exe. - Linux / macOS: untar and run
./pocx_doctor.
- Open a plot — drag a
.pocxfile onto the window, or click Open plot. - Pick a thoroughness:
- Quick — 1 probe per cell (~3k probes). Seconds. Recommended first pass.
- Normal — 2 probes per cell. Catches more localized defects.
- Deep — 4 probes per cell. Use when Quick flagged something and you want stronger confidence.
- Hit Verify. The grid fills in as probes complete:
- 🟩 green — probe matched
- 🟥 red — probe failed (corruption, bad sector, or unwritten tail)
- ⬜ grey — not probed yet
- Read the result. The summary shows pass / fail counts, the bad-probe list, and a health verdict.
- Export a report (optional) — Save report writes a JSON file and a standalone HTML viewer next to the plot.
Switch to Batch in the header and pick a folder — pocx_doctor queues every
.pocx inside, runs them sequentially, and shows per-file status (pending /
running / done / failed). Use this for nightly health sweeps over a whole rig.
- Rust stable (1.75+)
- Linux only — GUI dev libraries:
sudo apt-get install -y libgl1-mesa-dev libxcb-render0-dev \ libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev \ libssl-dev libfontconfig1-dev libgtk-3-dev
git clone https://github.com/PoC-Consortium/pocx_doctor.git
cd pocx_doctor
cargo run --releaseReleases are tag-driven. From a clean main branch:
# bump version in Cargo.toml first, commit, then:
git tag v0.9.0
git push origin v0.9.0The Release workflow builds binaries for
Windows / macOS / Linux (x86_64 + ARM64), uploads .zip / .tar.gz archives
with SHA-256 sums, and creates a draft GitHub release. Review the artifacts,
edit the notes, then publish manually.
cargo fmt --all
cargo clippy --all-targets -- -D warnings
cargo test --releaseCI runs the same checks on every push and PR (see .github/workflows/ci.yml).
- Windows: no console output on crash. The release binary uses the
Windows subsystem (no console window). Panics are written to
%TEMP%\pocx_doctor_panic.logand worker progress to%TEMP%\pocx_doctor_worker.log. - Direct I/O is off by default. Sample reads are 64-byte scoops which
aren't sector-aligned, so
FILE_FLAG_NO_BUFFERINGwould fail every read on Windows. The page-cache impact for scattered reads is negligible. - A plot shows a fully red bottom block. That's the unwritten tail of a paused/aborted plot — not corruption. Resume plotting to fill it in.
Released under the MIT License. See LICENSE.

