Building zero-dependency CLI tools for Linux auditing and B2B data extraction.
Independent developer · Sichuan, China
Most monitoring lies in a specific way: it reports success it never verified. A backup job exits 0 while the dump was truncated. A probe reports timeout and cannot say whether the target died or the probe did. A check passes because the thing it was supposed to test was never actually run.
I build tools that separate "the command finished" from "the thing is actually true", and I write about the difference with measurements rather than assertions.
| Project | What it does | |
|---|---|---|
| 🔍 | Vaultcheck | Read-only Linux health and backup-freshness audit. Eleven checks, pure Python standard library, zero dependencies. Its point is the failure it catches: a backup that stopped three weeks ago while every dashboard stayed green. |
| 📊 | NPILift | US healthcare provider data extraction. NPI-registered organisations filtered by specialty and state, exported to CSV with deduplication and quality scoring. |
Both are shipped, both are sold to real customers, and both exist because I hit the problem myself first.
Where I can add something a maintainer would otherwise have to write, I send the tests and the measurement rather than an opinion.
| Repository | Pull request | Change |
|---|---|---|
| AfterShip/email-verifier | #235 | +112 −0 — test coverage for GenerateRandomEmail and getMD5Hash, the two pure functions with none. Reviewed and merged by the maintainer. |
| HeyPuter/puter | #4411 | +19 −1 — install documentation: the Docker path that the instructions skipped, reproduced before it was written up. |
| Repository | Pull request | Change |
|---|---|---|
| AfterShip/email-verifier | #238 | +188 −0 — pins the MX-before-dial ordering in newSMTPClient, offline and deterministically. Opened after the maintainer pointed at the missing seam. |
| restic/restic | #22160 | +10 −2 — documents that --read-data-subset=n/t can produce empty groups, verified by running it on a four-pack repository. |
| tenstorrent/tt-metal | #63655 | +1 −1 — RelWithDebugInfo → RelWithDebInfo, a build-type typo that silently produced an unoptimised build. |
Two merged, three awaiting review. I do not describe an open pull request as merged — that distinction is the whole subject of the writing below.
I write about verification failures with the numbers attached, usually after doing the experiment that either confirms or kills the hypothesis.
- Your monitor is reporting its own network problems — a 48-second timeout that cannot distinguish a dead target from a dead probe, with the IPv6 blackhole case measured at 259 ms versus 48,048 ms.
- Three checks that look like they passed, but validated nothing — a
pg_dumpkilled mid-pipe that still exits0, passesgzip -t, and lists all seven tables inpg_restore -l. - My backup exited 0 for three weeks and nothing paged me — artifact age versus exit code, and why the exit code is the weaker signal.
All of it also lives on Dev.to and Hashnode.
If you found a bug in something I shipped, tell me — the reproduction is worth more than the complaint.
Every number on this page was measured, not estimated. Where it was wrong, it was corrected in public.

