philip@lilius

Half a word of bureaucracy per word of novel

· 10 min read · Made: The Physics of Greed

The hard part of writing a book is turning a plot into a story. I had the plot in my head. I didn’t have the time or the energy.

I wanted to read a particular kind of book. A thriller with a thread running from the Second World War to the present day. Think conspiracy theory, but without a secret group pulling the strings. Just greedy people in power, the logistics of geopolitical corruption, and the bureaucracy that keeps it running, partly without noticing.

It didn’t exist, so I had to write it myself. 89,000 words, five months, evenings only, because I was on parental leave. “Myself” is a modified truth. I used AI, obviously. One as editor, a second from a different vendor as an independent checker.

It worked. It wasn’t easy, and it wasn’t cheap.

The book is The Physics of Greed, out on Kindle and as an audiobook on ElevenReader. This post is about how it got made.

The problem nobody puts on a slide

A thriller this size is a continuity system that happens to be made of sentences.

Seventy scenes across four acts. A fictional chain of events running 85 years, from 1943 to 2026, threaded through real history. A burned hand that has to get worse over three acts and never better. A phone battery that works as the book’s clock. A 70-pound case that somebody has to keep carrying. And for every scene, what each character knows at that point, so nobody knows something before they’ve learned it.

No single head holds all of that. Not mine, not a model’s. And I had evenings, on parental leave, with whatever attention was left by then.

So the whole setup had one job: spend my time on judgement and nothing else.

Who did what

flowchart TD
    accTitle: Who did what
    accDescr: I give the editor AI margin marks and yes-or-no decisions. The editor edits the book, which is 70 scene files in git. It briefs a checker AI from another vendor, which reads the book but never edits it, and reports findings with file and line. Trackers and summaries tell the editor where to look but never count as proof. I read the book last.
    A["Me<br/>owns every fact"]
    E["Editor AI<br/>edits the prose"]
    C["Checker AI<br/>other vendor, never edits"]
    S["The book<br/>70 scene files in git"]
    T["Trackers and summaries"]
    A -- "margin marks,<br/>yes or no" --> E
    E -- "edits" --> S
    E -- "brief" --> C
    C -- "reads" --> S
    C -- "findings with<br/>file and line" --> E
    T -. "where to look,<br/>never proof" .-> E
    A == "reads last" ==> S
Does Never does
Me Reads at reading speed. Owns every fact. Does the final read. Hands the final read to a model
Editor AI Line edits, cuts, voice, fixing the trackers, building the book Invents a fact
Checker AI Cross-reads scenes, quotes file and line, says when it can’t confirm something Edits anything
Trackers Tell you where to look Count as evidence

Two vendors matters. A checker from the same model family shares the writer’s blind spots. A different family is wrong in different ways, which is the closest thing to independence you can buy.

The paperwork

Next to the novel grew 35,000 words of rules, trackers and protocols. Half a word of rules for every word of prose. The work didn’t disappear. It changed shape.

That number isn’t going on anyone’s AI conference slide.

Manuscript 89,299 words, 70 scenes
Revision 7 May to 9 October 2026
Commits 660
Commits co-written by an AI about 370
AI model versions used along the way more than 10
Rules and trackers about 35,000 words
Failures logged and turned into rules 11
xychart-beta
    accTitle: Commits per month
    accDescr: 166 in May, 175 in June, 198 in July, 94 in August, 24 in September and 3 in October.
    title "Commits per month, 2026"
    x-axis [May, June, July, August, September, October]
    y-axis "Commits" 0 --> 220
    bar [166, 175, 198, 94, 24, 3]

July is when the checker joined and the trackers got built out. August is when I started reading, and the commit count halved. That’s not a coincidence. Reading is slow, and it was supposed to be.

Every rule in those 35,000 words exists because something went wrong first. None of them came from a best-practice guide. I wrote each one the day its failure happened, with the incident attached, so that the next model, or the next tired version of me, couldn’t “simplify” it away.

Here are the ones worth knowing about.

The quote that never existed

A generated index of the scenes handed me a thread from an earlier chapter that looked like a good subplot: “Mobile command unit on I-40, they’ll deploy aerial immediately.” Neat. Specific. In quotation marks. I was busy writing the next chapter around it when I went back for more context.

The line didn’t exist, of course. It never had. The real line had a different time interval and no command post at all.

A bad draft looks bad. That’s the whole point of drafts. A summary that’s wrong looks exactly like one that’s right, and it arrives in the most confident form there is: a quotation. Swap the novel for a quarterly report or an inquiry and you have the same problem. We all know nobody goes back to the source to check a summary.

Later I had four agents audit the trackers against the book. They found eleven problems. All eleven were in the trackers. Zero were in the prose. Missing scenes, swapped numbers, summaries of scenes that had since been rewritten.

That gave me the rule the whole project ended up resting on:

A scene can’t be wrong about itself. A tracker can be wrong about a scene.

A tracker is a lead, never evidence. Open the scene and read the line.

The checker made things up too

The independent checker was there to catch the editor. Its top finding one evening was a clash between two figures, 14,000 and 3,400.

There is no 14,000 in the book. The line it cited is a character asking for rubber compound. The real figures, 1,400 and 2,000, add up to 3,400 on purpose.

So the checker’s report got the same treatment as a tracker. A lead. And the figure got marked as protected, so no later pass would helpfully “fix” it.

Independence catches different mistakes. It doesn’t make the checker right.

Invent prose, not facts

The editor was good at sentences. It was also happy to make things up. A swap meet that doesn’t exist. A character casually naming two countries the plot had never been near. Three historical claims in a single 1949 flashback.

I caught them by asking the obvious question. My actual note on one of them: “did they die in their beds? do you know that?”

So the editor got a narrow licence. Compress, cut, rework the syntax, swap who says a line: fine, go. Anything that adds a place, an event, a device, a number or a piece of tradecraft comes to me first.

It’s the most useful rule I have for AI at work, and it fits on a sticky note.

A bigger problem early on was harder to spot. The model had read the whole beat sheet. The characters hadn’t. What it knew about later chapters kept leaking into people who couldn’t know it yet. Sometimes quietly, as a character doing something that only makes sense if you know what happens next. Sometimes openly, as someone being oddly prescient about things nobody had told them.

That’s a big part of why every scene got its own file of what each character knows at that point. Nobody gets to act on something before the scene where they learn it.

“Bold” means more lyrical, apparently

I once asked for a rewrite to be bolder. It came back with an average sentence length of 14 words, against a house range of six to nine and a half, and twelve times the usual number of “and this, and that, and the other” constructions.

The model read “bold” as “more poetic”. I meant “more like this book”.

After that, voice stopped being an adjective. It became a handful of numbers checked after every voice edit: average sentence length, share of fragments, share of long sentences. Adjectives are a vibe. Numbers can fail a test.

Exit code 0 is not a promise

Some failures make no noise at all.

  • An automated edit wrote a multi-paragraph change to the wrong place and left two orphaned paragraphs behind. The scene now delivered its big finding twice and ended twice. It passed the metadata check, a search and a commit. Only comparing the whole session’s changes caught it.
  • A single stray quotation mark in one scene’s metadata broke every tag, character and date in that file.
  • On the day I built the advance copies, 14 of my private margin notes were still in the text. The build script only stripped one kind of comment. All 14 would have been printed for reviewers.

The fix is boring: count what you expect to change, compare before and after, validate, and check the actual output before you ship it. The command telling you it succeeded is not the same as it succeeding.

flowchart LR
    accTitle: The eleven failures and their rules
    accDescr: 11 logged failures grouped into five kinds. Wrong summaries (3) and the checker making things up (1) led to the rule that a summary is a lead, never evidence. The model inventing or drifting (3) led to "invent prose, not facts" and "voice is a number". Tools failing silently (3) led to "check the diff, not the exit code". One meaning error no model caught led to "the human reads last".
    F["11 logged<br/>failures"] --> G1["Wrong summaries<br/>3"]
    F --> G4["Checker made<br/>things up<br/>1"]
    F --> G2["Model invented<br/>or drifted<br/>3"]
    F --> G3["Tools failed<br/>silently<br/>3"]
    F --> G5["Meaning error<br/>no model caught<br/>1"]
    G1 --> R1["A summary is a lead,<br/>never evidence"]
    G4 --> R1
    G2 --> R2["Invent prose, not facts.<br/>Voice is a number."]
    G3 --> R3["Check the diff,<br/>not the exit code"]
    G5 --> R4["The human<br/>reads last"]

The unread half

Three weeks before launch I had four unedited chapters left and not much time. I put both models on them, editor plus independent checker: read the prose, read the facts, read the plot and the causality, read the characters, read, read, read, and report back.

The verdict: no defects in the unread half.

Narrator: there were defects. Lots of them.

I didn’t trust it, so I read the chapters myself. One example: near the end, something happens to a supporting character, and the main characters don’t react at all, despite strong emotional ties. Two models, zero flags.

Machines find structural errors. People find human ones.

So when the editor offered to do the final read as well, I said no. It had written the text, read it and rewritten it. By that point it isn’t a reader. It’s an accomplice.

Designed for a tired human

The scarcest thing in the whole setup wasn’t compute. It was my attention at ten in the evening.

So the editor answered by rule: next action first, never more than five points, one concrete next step at the end. When it drifted into essays I said so, and it went back.

While reading I didn’t write feedback. I marked the text with four symbols for slack, protect, wrong and lost. A note, never a fix. I flagged, the machine proposed.

Each session started where the last one ended, because claude-mem kept track of what had been decided, what had been fixed and what was next. With one evening at a time and a head full of other things, that was the difference between continuing and starting over. I’d argue it mattered as much as either model.

For the last chapters I ran out of reading time altogether. So I listened to the book at double speed on the commute, sent vague voice notes (“the hangar bit, Del’s line made no sense”) and let the editor find the exact line.

The human keeps the judgement and drops the clerical work. That’s the whole trick. Nobody is giving a keynote about it.

What didn’t work

A write-up that’s all wins isn’t worth much.

The launch date moved twice. AI speeds up the editing. It doesn’t speed up the human read, and the human read is the critical path. Plan that first.

The memory stopped saving halfway through September, when claude-mem ran out of allowance. Nothing was lost, because everything that mattered also lived in the repo. Memory is a convenience. The repo is the record.

A tool that saves tokens quietly cut off the project history, so for a while it looked like the whole thing started in August. Filtered output is a lead, same as a tracker.

The marketing plan was fantasy. It assumed 15 to 20 advance reviews. The review platform’s own numbers for a debut pen name are zero to ten readers a month. Give the model real numbers before it plans, or it will plan confidently from nothing.

And it isn’t cheap. Big multi-agent passes burn tokens, and more than once my note back was “usage costs, mate”. Every run needs a question that justifies it.

How a claim gets handled

This is what the rules boil down to, whether the claim comes from a tracker, the checker, memory or the editor itself.

flowchart TD
    accTitle: How a claim gets handled
    accDescr: a claim arrives from a tracker, the checker, memory or the model. Open the scene: if the line isn't there, the claim is false, so fix the tracker and log the failure. If it is there and the change is line-level, edit and then check the diff. If it's structural and adds a fact, I decide. If it's structural and adds no fact, the checker cross-reads the other scenes first, then edit and check the diff.
    Q["A claim arrives<br/>from a tracker, the checker,<br/>memory or the model"] --> O{"Open the scene.<br/>Is the line there?"}
    O -- "No" --> W["The claim is false.<br/>Fix the tracker.<br/>Log the failure."]
    O -- "Yes" --> S{"Line-level change<br/>or structural?"}
    S -- "Line-level" --> E["Edit, then check<br/>the diff"]
    S -- "Structural" --> F{"Does it add a fact?<br/>place, event, device,<br/>number, tradecraft"}
    F -- "Yes" --> A["I decide"]
    F -- "No" --> X["Checker cross-reads<br/>the other scenes first"]
    X --> E

If you’re doing this at work

None of this is really about novels. Swap “scene” for “contract”, “report” or “codebase” and it holds.

More than ten model versions came and went over those five months. The process survived all of them, for the unglamorous reason that the book was run like a software project: a git repo, with checks and controls. If your AI process lives in someone’s chat history, you don’t have a process.

The short version:

  1. Only the work is evidence. Summaries are claims.
  2. Use a checker from another model family. Then check the checker.
  3. AI may rewrite. Anything new goes to a human.
  4. Make quality a number.
  5. Write the rule the day it breaks.
  6. Keep the rules in files, not in a chat.
  7. A human reads last, where a mistake costs the most.

The book

It’s called The Physics of Greed, written as P.L. Pimeys, out on Kindle and as an audiobook on ElevenReader. If you’re about to put AI on seriously heavy work, this post is probably worth more than the novel. But you’re welcome to read the book anyway, if you like conspiracy thrillers.