Dan Lichtenberger

Technical Reports

Ten documents, and
what each one admits.

Every project here is written up properly — architecture, method, results, and a section on what it does not do. That last section is the one I'd read first.

Roughly 62 pages in total, or one page if you only read the summary. Each report is generated from the markdown source committed in its own repository, so the document and the code cannot drift apart, and reads in the browser as well as in the PDF. Every figure is reproduced from that project's test suite, experiment log, or results file.

Format Summary · 1 p Project All six

Research Summary

Start here. Six projects and the honest result of each, on one page — including the three whose central idea did not work.

Every figure on it was re-verified against the repository or technical report it came from rather than copied forward from an earlier draft, which is how two stale numbers and one unreproducible one were caught.

Format Ledger · 3 pp Project All six

Verification Ledger

Every headline number on this site, the file it comes from, and the command that regenerates it.

Dated, because data sources and package versions move. It includes the results a re-check overturned: a regime result that only holds for one window, and a crypto interval that a pre-registered replication did not reproduce.

Format Paper · 4 pp Project RL for Crypto & Stocks

Generalization and Evaluation Rigor in Deep Reinforcement Learning

The headline result is negative, and that is the point: on real markets the agent has no seed-robust edge over buy-and-hold, and the significance tooling catches a single-seed “+275%” run as a false positive.

PPO with Generalized Advantage Estimation implemented from first principles, two custom Gymnasium environments, and four research questions on generalization, domain randomization, seed robustness and cross-sectional allocation. Written in LaTeX, two-column, rebuilt by CI on every push so the PDF never drifts from its source.

Format Report · 13 pp Project AlphaZero Chess Engine

An AlphaZero-Style Chess Engine, Built From Scratch

Scaling self-play 10× bought 14 Elo. The diagnosis is that this is a self-play signal problem, not a compute ceiling — draw-heavy self-play starves the value head of gradient.

The longest document here. Network, PUCT search and training loop from first principles; a controlled study of the training plateau; and a classical alpha-beta engine built as a control to confirm the evaluation harness itself was sound.

Format Report · 8 pp Project AlphaGlyph

A Backtesting Laboratory That Measures Its Own Credibility

72% probability of backtest overfitting on its own strategy grid. An earlier run of identical code on a different window said 63% — and the instability is itself the finding.

Walk-forward simulation with rolling Kelly sizing and transaction costs, then Probabilistic and Deflated Sharpe ratios, Fama-French attribution, and combinatorial purged cross-validation to quantify how much of the result is selection bias.

Format Report · 6 pp Project QuantumSafe Scan

Detecting Quantum-Vulnerable Cryptography

The interesting problem isn't matching the string RSA — it's not matching it inside a comment, a docstring, or a code path nothing ever calls.

A hybrid AST-and-regex engine with usage awareness and reachability ranking, measured against a labeled nine-language benchmark: 100% precision where naive pattern matching scores 49.1%, with 100% recall under mutation testing. The companion whitepaper covers the full threat model, the mathematics of Shor and Grover, and a lattice-based KEM written from scratch.

Format Report · 6 pp Project Tradeski

A Real-Time Market Dashboard

A market dashboard looks like a data-visualization problem and is actually an API-quota problem. The design question is not how to draw it — it's how stale each number is allowed to be.

Per-source cache TTLs chosen from how fast each quantity actually moves, ten indicators hand-implemented on NumPy arrays with their boundary conditions handled explicitly, and a language-model assistant grounded in the user's real holdings before it is called. The limitations section is unusually long on purpose.

Format Report · 6 pp Project Neural Canvas

Painting With Bare Hands

Getting hand landmarks is a solved problem you can import. Then you draw a line with it, and the line is unusable — the jitter and the signal are the same size.

Why a fixed low-pass filter cannot work for drawing, and what the one-euro filter does instead: a cutoff frequency derived from the smoothed velocity, so the pen smooths hard at rest and passes through untouched at speed. Plus dropout grace periods, gesture debouncing, and kaleidoscopic symmetry as a stroke-path transform.