Skip to content
View Wasserpuncher's full-sized avatar
🏠
Working from home
🏠
Working from home

Organizations

@Kaipfister

Block or report Wasserpuncher

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
Wasserpuncher/README.md

Kai Pfister

A claim that nothing checks will eventually be false. So I build the things that check.

That is not a slogan I picked. I audited the READMEs of my own repositories one night, by hand, and most of them had a number in them that was wrong — several had been wrong since the day they were written, and always in my own favour, which is the direction these errors go. So I stopped trusting prose, including my own, and started writing tools that hold it to the code.

This page is one of them. The measured number below is bound, in the Markdown, to the command that produces it, and a workflow re-runs that command on every push and once a week. If the number drifts, this profile goes red. It does not get to quietly stop being true.

Tools that hold a claim to the truth

readme-check — Runs the console blocks in your README and checks that they still print what you promised. A number in your prose can name the command that settles it, in a comment that renders as nothing. It found the wrong numbers in my own repositories first, and it checks its own README with it.

changelog-check — Your CHANGELOG cites a commit hash. This checks the commit is actually in your history. The catch is a subtle one: after a rebase the old objects are still lying around, so the obvious test (git cat-file -e) passes happily while the entry points at a commit nobody can reach.

consent-check — Your cookie banner claims "we respect your choice". This clicks Reject all, then measures what the browser actually does — against the same site's Accept all run, so the site is its own yardstick and there is no argument about what counts as a tracker. It reports facts and evidence, never a legal verdict.

impressum-check — Fails the build when a site is missing a disclosure German law requires (§ 5 DDG, Art. 13 GDPR), and every rule cites the provision it enforces. Deliberately German: it enforces German law, so its rules and its output speak it.

link-check — A README says "sources below" and lists ten links; a dead one is the quietest kind of wrong. This pulls every http(s) URL out of Markdown or HTML, requests each, and fails the build on a dead one — example URLs in code fences skipped, HEAD falling back to GET. Standard library only, and its own CI runs it on its own README.

Layer 8 — An encyclopedia of real computer, phone and network faults. Its build runs a set of linters over its own content and aborts when a claim is unbacked — a command that would not work, a fix nothing supports. It refuses to publish what it cannot stand behind. Also deliberately German, because its readers are.

These belong together. The Claim Checkers collects them as one family with a single thesis: the gap between what something claims to be and what it is, made measurable, made a build failure.

Sites that check themselves in public

The tools above run in CI, where only I see them. These are the same idea, deployed — a claim held to the truth in front of whoever visits.

wetter.kaipfstr.de — A weather site that shows its own errors instead of hiding them. Every other weather page prints one number; this one prints the spread — eleven forecast models asked the same question at the same minute, and the gap between their answers — and then back-checks its own past forecasts against what the DWD station actually measured. The five-day forecast that was seven degrees off is still on the page; most apps swap the old forecast for the new one and pretend they always knew. Keyless, no build step, no dependencies: the whole logic sits in three script files, and every number names the source it came from (Open-Meteo for the models, Bright Sky for the measurements, PEGELONLINE for river gauges, the DWD for warnings). Where a source is unreliable — a flood value read off the wrong grid cell, a station 2,000 m below your mountain — the page says so rather than rounding it away. Static on Netlify, MIT-licensed.

tetris.kaipfister.de — The original Tetris in the browser, built to the 1989 Nintendo rules: Super Rotation System, wall kicks, lock delay, original scoring, local highscores. No install, no signup, no framework.

Built from scratch

These came first, and they are why the tools above exist: they are the repositories whose READMEs turned out to be lying. No frameworks and no dependencies — the standard library and the problem.

chess-perft — A legal chess move generator in pure Python — castling through check, en passant with its discovered-check edge cases, promotions, pins. Its correctness is not an opinion: it reproduces the canonical published perft node counts to the last digit, up to 119,060,324 leaf nodes at depth 6 from the start position, across the six standard test positions.

rejit — A regular-expression engine (a Pike VM) that matches in guaranteed linear time, so it cannot be ReDoS'd. Against the classic catastrophic pattern (a+)+$, Python's re multiplies its work about sixteenfold for every four characters of input, while rejit's time does not move at all — that shape is the claim, not any one benchmark. Every CI run cross-checks it against re on ten thousand randomly generated pattern/text pairs, asking three questions of each — 30013 assertions, zero disagreements.

tinyjit — A JIT compiler in pure Python that writes real x86-64 machine code into executable memory and calls it. No gcc, no LLVM. 55 is push rbp, and the CPU runs it directly.

x86-disasm — The other half of tinyjit: it turns those bytes back into instructions and is held to GNU objdump's reading of them. One project writes the machine code, the other proves it says what it meant.

nanoclonegit clone, implemented: Smart HTTP v2, packfile delta resolution, a real .git index. Every object is verified against its own SHA-1, and real Git sees a clean checkout — git status prints nothing.

pdb-from-scratch — A debugger in pure Python that sets breakpoints the way real debuggers do: by writing 0xCC into another process's memory via ptrace. Verified end-to-end against a traced C program.

tar-from-scratch — The POSIX USTAR format built and parsed by hand, one 512-byte block at a time, no tarfile. The proof is external: the CI writes an archive with it, hands it to the system GNU tar to extract, and compares every byte back — both directions.

json-from-scratch — A recursive-descent JSON parser (RFC 8259), no json module. Measured against the corpus every JSON parser is measured against — Nicolas Seriot's official JSON Parsing Test Suite — in CI: 95/95 must-accept, 188/188 must-reject.

Also from scratch: btreedb (an on-disk B+ tree), tcp-userspace (a TCP/IP stack real curl talks to), cdcl-sat (a SAT solver whose UNSAT answers ship a checkable proof), minilink (a static ELF linker), deflate-from-scratch, recursive-dns (DNS resolution from the root servers), sha256-from-scratch (FIPS 180-4, proven against hashlib), base64-from-scratch (RFC 4648, checked against /usr/bin/base64), crc32-from-scratch (proven against zlib.crc32), bignum-from-scratch (arbitrary-precision integers, Karatsuba, proven against Python int), csv-from-scratch (RFC 4180, proven against the csv module), zip-from-scratch (archives read byte-identically by unzip and zipfile) and utf8-from-scratch (strict encoder/decoder, proven against Python's UTF-8).


Python · Compilers · Networks · Low-level · Würzburg

Pinned Loading

  1. btreedb btreedb Public

    An on-disk B+ tree in pure Python. A thousand times more data costs one extra page read: 2 page reads at 1k keys, 3 at 1M. Verified against dict.

    Python

  2. readme-check readme-check Public

    Run the console blocks in your README and check they still tell the truth -- I audited eight of my own repos and four of them lied

    Python 1

  3. nanoclone nanoclone Public

    git clone implemented from scratch: Smart HTTP v2, packfile parsing with delta resolution, and a real .git index. Zero dependencies, not even the git binary.

    Python

  4. rejit rejit Public

    A linear-time regular-expression engine (Pike VM) built from scratch. Immune to ReDoS: on (a+)+$ Python's re grows exponentially while rejit stays flat. Every CI run cross-checks 10,000 generated p…

    Python

  5. tinyjit tinyjit Public

    A JIT compiler in pure Python that emits and runs real x86-64 machine code. No gcc, no LLVM, no dependencies. Verified instruction-by-instruction against a reference interpreter.

    Python