Source Authorship Forensics
A source-level read of znxftw/rudim v3.0.5, contrasted with Stockfish — and with the AI-generated Luna engine as a control.
Every signal that marks a repository as AI-dumped is absent here; in its place is the unmistakable fingerprint of expert, test-driven, incremental engine development — 605 local commits, Elo-measured releases, a trained network, and code that shows genuine engineering depth. The author documents the work on his own dev blog and runs it as rudim-bot on Lichess.
The only AI involvement is disclosed, bounded, and human-supervised: a Copilot account authored 4 of 605 commits as reviewed pull requests, and Dependabot bumps dependencies — an assistant on discrete tasks, not the author of the codebase.
Confidence: High — process history and code substance agree.
Signals of authentic human authorship, strongest first.
| # | Signal | What it shows | Weight |
|---|---|---|---|
| 1 | 605 local commits with conventional prefixes (feat:/fix:/optz:) | Sustained, disciplined, incremental development | Decisive |
| 2 | Commits are SPRT-style one-idea patches; releases quote Elo deltas | A real test-driven engine-tuning workflow — cannot be faked | Decisive |
| 3 | Truly incremental NNUE accumulator (add_1_sub_1, add_1_sub_2, add_2_sub_2) | Deep understanding of NNUE engineering, not a plausible facsimile | Decisive |
| 4 | Own training infra: deps/bullet submodule, datagen.rs, train.rs, a networks repo | The author trained the net he ships | Strong |
| 5 | // TODO: tune notes throughout the search | A human's working shorthand mid-experiment | Strong |
| 6 | Real tests, benchmarks, multi-job CI, named human contributors | Maintained software project, not a one-shot upload | Strong |
| 7 | Zero [cite:] markers or other AI residue | No un-scrubbed generated text | Support |
The git history is the clearest tell. Placed beside Luna, the contrast is total.
| Dimension | Luna (AI-generated) | Rudim (human) |
|---|---|---|
| Commits | 30, all GitHub-web "Add files via upload" | 605, local, conventional-commit discipline |
| Commit content | wholesale file replacement | one-idea patches: "history maluses", "gravity history", "refine NMP conditions", "add_2_sub_2 accumulator for castling" |
| Releases | versions that contradict each other | 20 tags, each with measured Elo gain (e.g. +61.4 Elo v3.0.5 vs v3.0.4) |
| AI residue | 147 [cite:] markers | none |
| Contributors | one handle | named author + human contributors + disclosed bots |
| Dead code | orphaned uci.rs, dead "aging" | clean modular tree, real tests/ & benches/ |
Metadata can be staged; substance is harder. Two things stand out.
(a) Tuning notes in the hot path. The search is dotted with // TODO: tune beside pruning margins (reverse-futility, futility, NMP conditions). That's the working shorthand of someone running tuning experiments one parameter at a time — not explanatory prose an assistant emits.
(b) A genuinely incremental NNUE accumulator. Rudim implements the full efficient-update family on a cache-aligned accumulator — the reason NNUE is called efficiently updatable:
#[repr(C, align(64))]
pub struct Accumulator { pub state: [i16; ACC_SIZE] }
add_1_sub_1(add, remove, net) // quiet move: 1 piece leaves, 1 arrives
add_1_sub_2(add, rem1, rem2, net) // capture: mover arrives, 2 removed
add_2_sub_2(a1, a2, r1, r2, net) // castling: king + rook both move
Rudim shares Stockfish's DNA and culture, at a solo-developer scale.
| Where it resembles Stockfish |
|---|
| Modern search: ID + aspiration, PVS, LMR, NMP, futility / reverse-futility, check extensions, quiescence, two-tier TT |
| Move ordering: SEE, MVV-LVA, killers, history (gravity + maluses), counter-moves, hash/PV |
| Incremental NNUE accumulator with per-move-type updates |
| SPRT / Elo-driven development (the Fishtest ethos) |
| Magic bitboards, Zobrist hashing, perft tests |
| Where it differs (scale, not authenticity) |
|---|
| Rust, ~8.6k LoC, one primary author vs C++, hundreds of contributors over decades |
| Relies on compiler auto-vectorization (native/AVX2) vs hand-written AVX2/AVX-512/NEON intrinsics |
Compact (768→256)×2→1 perspective net vs bucketed HalfKAv2_hm |
| ~2,600 CCRL vs the strongest engine in the world (~3,600+) |
None of the differences bear on authorship — they're the expected gap between a talented individual's project and a decades-long collective effort. What matters is that rudim is built the way real engines are built.
Rudim is a legitimate, human-authored competitive chess engine in the Stockfish tradition — the same algorithmic toolkit and the same test-driven culture, scaled down to one talented developer, with normal, disclosed AI/bot assistance on the margins. If Luna was the cautionary tale of AI output pasted unreviewed, rudim is the counterexample: authentic human engine engineering, visible in both the repository's history and the substance of its code.