independent research · built at home

Working papers.
One pipeline. No PhD.

Physics, economics, politics, art history. I bring the ideas and the judgment calls. AI does the heavy lifting. Every paper is a Python program that prints its own PDF, and that one decision is what makes the rest work.

9papers and counting
19PDF builds, all scripted
< 1 daydraft 1 → draft 4
on the economics paper
1central claim retracted,
on the record
01

Why this works at all

Short version: the bottleneck was never brains or credentials. It was hours.

The whole idea

Research is mostly labor. Labor is now cheap. Judgment isn’t, and that part stays mine.

Reading a hundred sources, checking a date against an archive, redrawing a figure, rebuilding a PDF, arguing with a referee. None of that requires a genius. It requires hours, and hours used to mean an institution. Now I rent the hours from a machine and keep the decisions: what to write about, which claim to make, which objection is fatal, what to cut, what to retract.

What I don’t do Ask for a paper and paste what comes back. That produces confident junk, and it reads like it.
What I do Run a pipeline where every number carries a source, every figure comes from a script, and every draft has to survive a hostile review I commission against myself.
02

The pipeline

Same eight steps for every paper. Step 8 loops back to step 5 until the attacks stop landing.

Ideaa question I actually care about
Research sweepsourced facts into notes; anything shaky flagged UNVERIFIED
data.pyevery number, with its source, in one file
Figuresevery chart from one script, one style
Buildbuild_paper.py prints the PDF
Attacka hostile review of my own draft
Verdictscored ruling on what survives
Next versioncuts and fixes, rebuilt in seconds

steps 6–8 repeat until the attack file runs out of ammunition

Where the human sits

Steps 1 and 7 are mine. Everything between is delegated and then audited. The audit is not optional; it is most of the work I do.

03

The paper is a Python file

No Word. No LaTeX. The document you’d cite is the output of a program, and that’s the trick.

Every project in the repo has the same skeleton:

nobody_to_blame/ ├─ research_notes.md # sourced facts, UNVERIFIED items flagged ├─ data.py # every number + its source, one auditable file ├─ generate_figures.py # all charts, one house style ├─ build_paper_v4.py # the paper itself — prints core + full PDFs ├─ attribution.py # the formal model, results to JSON ├─ figures/ # regenerated, never hand-edited ├─ ATTACK_NOTES.md # the case against the paper └─ NOTES_2026-08-31.md # project memory + error log

The rule that carries the most weight: no number appears in the text or a figure unless it lives in data.py with a source attached. One entry looks like this:

BEEPLE_CHRISTIES = dict(
    value=69_346_250, unit="USD",
    source="Christie's auction results, 11 Mar 2021",
    status="verified",   # or "UNVERIFIED" — and it stays flagged until checked
)

The build script pulls from that file, lays out the pages, numbers the figures, and writes the PDF. Rebuilding the entire paper is two commands:

cmd — nobody_to_blame
> python generate_figures.py
wrote figures/fig1_hiring_margin.png ... fig5_electrification.png
> python build_paper_v4.py
nobody_to_blame_v4_core.pdf   26 pp
nobody_to_blame_v4_full.pdf   30 pp
> 

Why a program instead of a document

04

Why drafts improve fast

Cheap rebuilds change how revision feels. You stop defending sentences and start spending edits.

A fix is usually a tiny diff. Say a fact that was flagged UNVERIFIED finally gets pinned down:

data.py · one number, corrected once, fixed everywhere
  BEEPLE_CHRISTIES = dict(
      value=69_346_250, unit="USD",
-     source="press coverage, Mar 2021",
-     status="UNVERIFIED",
+     source="Christie's auction results, 11 Mar 2021",
+     status="verified",
  )

Two commands later there’s a new PDF with the correction in the text, the table, and the figure caption. Because a full rebuild costs seconds, a revision pass can make forty small edits in an evening instead of five. That’s the entire speed story, and the file dates back it up:

v1day 1

Physics paper, first full PDF. Too long, too soft, didn’t know it yet.

v2 → v2.2+1 day

Three revisions in one day. Restructure, cuts, figure pass.

v2.3 goes on trial+1 day

Attack notes, defense notes, verdict filed against my own draft. The bench scores the formal model a 3 out of 10.

v2.4+1 day

Toy model written, run, and cited. Changelog kept. The 3/10 was the to-do list.

The economics paper moved even faster: drafts 1 through 4 inside a day, including throwing away and rebuilding the central claim. The art paper went from draft 1 to draft 3 in an afternoon, most of that spent swapping placeholder plates for real museum scans. None of that pace is possible when a revision means re-touching a 25-page document by hand.

05

Attack, defend, improve

Nobody at home hands you a hostile committee. So I commission one.

When a draft feels done, it goes on trial. Three files, three jobs:

ATTACK_NOTES.md

A no-mercy referee pass. Its job is to kill the paper: name the weakest claim, the sloppiest figure, the sentence that overreaches. Charges come back in a table, with verdicts.

PROSECUTION

DEFENSE_NOTES.md

The best honest answer to every charge. Concede what’s true. Rebut what isn’t. Skipping a charge is not allowed.

DEFENSE

VERDICT.md

An impartial ruling, charge by charge, with scores per dimension and concrete orders for the next draft. Not a pep talk.

BENCH

The verdict is the part that matters, because it disagrees with me in writing. On the physics paper it scored honesty a 9 and the formal model a 3, then ordered the fix: cut, state the claim louder, build a toy model, define what would kill the thesis. Draft 2.4 did those four things.

It draws blood

The economics paper’s notes contain the line “Draft 3’s central claim is retracted.” The attack cycle killed my thesis and I kept the receipts: superseded drafts stay in the folder, and every project carries an error log of numbers that were wrong in earlier versions, so the same mistake can’t sneak back in. A review process that never wins an argument against you isn’t a review process.

06

Picture grabs

Two pipelines: charts generated from data, and real public-domain scans fetched by script.

Charts are code, so they regenerate whenever a number changes and every paper shares one look. Historical images are different. The art paper needed the actual Niépce heliograph, Daguerre’s boulevard, Monet’s Impression, Sunrise, Malevich’s Black Square. A small script resolves each work against the Wikimedia Commons API, pulls a public-domain scan, and writes a _sources.tsv license log next to the files. The figure script notices which real scans exist and swaps them in over the drawn stand-ins; captions adjust on their own.

Generated chart from the art paper: canon-entry timelines
Generated. Matplotlib, from generate_figures.py. Every number traces to data.py.
Plate built from a public-domain scan of Monet's Impression, Sunrise
Grabbed. Public-domain Commons scan, fetched by script, license logged in _sources.tsv.
Same rule as the numbers

Every image can answer “where is this from, and am I allowed to use it?” The UNVERIFIED flag, applied to pixels.

07

The papers

Same pipeline, four fields. Links open the files in this folder.

Physics · foundations

The Compression Hypothesis

v1 → v2.4 · 5 revisions · full attack/defense/verdict cycle · toy model

What Bell tests, contextuality, holography, and evolutionary interface theory do and don’t imply about “objects in spacetime.” A position paper that had to survive its own referee-from-hell before v2.4 existed.

Economics · politics

Nobody to Blame

v1 → v4 in under a day · draft 3’s central claim retracted · model runs as code

Who gets blamed when AI displaces work, and why the political response takes the form it does. The politics follow attribution, not size, and AI is the first big displacement with nobody to point at.

Economics · political economy

The Disarmed Countermovement

Draft 1.1, core + full · companion to Nobody to Blame · carries the history and philosophy cut from v3

Marx, Polanyi, and the politics of losing labor’s leverage. Every prior countermovement converted displacement into reform because labor was still needed; if AI removes that leverage, the response is bargained (ownership), bought (income without power), or broken (repression) — and the bargaining window closes while labor still matters.

Economics · declared advocacy

The Shareholder Commonwealth

v1 core + full · original claim flagged as the paper’s own · fund arithmetic as code

The case for universal equity endowment, labeled as advocacy in line one. Its original claim — equity-funded insurance that pays out most when wages collapse — is flagged in the disclosure as mine to defend, not borrowed.

Art history

From Photography to Blockchain

v1 → v3 in an afternoon · 53 references · 15 headline numbers re-verified · real PD plates

Digital and blockchain-native art as a major movement, argued against photography’s slow climb into the canon. The plates are real public-domain museum scans, pulled by the Commons pipeline with a license log.

The shelf keeps growing

Newest drafts land here with their full process folders — research notes, data.py, figure scripts, the build program, and the attack/defense/verdict record. Compact entries now; fuller write-ups as they earn them.

Comparative culture · political economy

Same Machine, Different Hemisphere

Draft 2 · 26 pp · attack/defense/verdict on file

How Thailand and the United States each manufactured a national culture, where the manufacturing failed, and why 2026 is an American ebb tide and a Thai door ajar — not an ending in either country.

Quantum · blockchain security

The Permanent Exposure

Draft 4.0, core + full · two full review cycles (v1 → v4)

Why the quantum threat to blockchains is a public-key problem that already happened, and what AI does to the clock. A position paper on quantum, AI, and the limits of “be your own bank.”

AI · information history

The Journeyman Age

Draft v4, core + full · revised under adversarial review · numeral audit on file

AI, the printing press, and the price of standing behind work — a position paper on naming and navigating the present information revolution.

Psychology

The Intolerable Fact

Draft v4, core + full · began as Unknown Face (v1–v2), renamed at v3 — the whole trail ships

Jung’s shadow, the science of what we cannot bear to know, and the case for looking anyway.

08

So, the PhD question

Depends what you thought the degree was for.

What the PhD bundledWhat stands in for it hereCovered?
Years of reading timeResearch sweeps with sources and UNVERIFIED flagsMostly
Assistants’ handsThe Python build system; figures and models as codeYes
A hostile committeeAttack → defense → verdict, run until it stops landing hitsYes, meaner
Peer review by strangersNothing. Self-attack is not independent review.No
Credentialed trustOnly a public trail of honest work, kept over timeNot yet

The degree still buys real things, and pretending otherwise would be the kind of overclaim the attack files exist to catch. But the core capability people meant by “you need a PhD for that” — producing a rigorous, sourced, illustrated, self-critical paper — is now a workflow on a home PC. What’s left is the old problem: having something true to say.

One line to share

The paper is a program. The referee is hired. The judgment is still mine.

Numbers with sources. Figures from scripts. Drafts that rebuild in seconds. A review that’s allowed to win. Everything disclosed.