A field note on governing the critical remediation of a technical FX options manuscript. Published on orbaos.com.
What it took to fix the 34 worst findings in my FX options book – and prove the fixes were right
This is the second article in a three-part series. The first is The Agent Is Not the Control Plane (I/III).
The audit of my book produced 1,003 findings.
I'd asked for them. Somehow that made it worse.
Thirty-four were critical. Wrong formulas. Numbers that disagreed with the prose sitting right next to them. A risk conclusion that no longer followed from its own arithmetic. And a few passages where the text was genuinely ambiguous and no model could resolve it, because the ambiguity was mine – only I knew what I'd meant to say. The book is FX Options: Pricing, Hedging, Exotics, Risk and Institutional Practice, about 780 typeset pages, written for people who will absolutely notice a wrong Greek.
So the job changed. Finding problems was done. Now I had to fix thirty-four critical defects in a way I could defend later. To a reader. To a reviewer. To myself in six months, when I'll have forgotten all of this and will only have the record to go on.
Here's the thing I kept coming back to. I spent thirty-eight years around trading floors and I never once saw a trader confirm his own ticket. Front office trades, middle office confirms, back office settles, and nobody takes it personally. That's just how you run a business where being wrong costs money. Then people sit down with an AI model and forget the whole arrangement. Same model defines the task, does the task, marks its own homework. And they're surprised when the marking turns out generous.
So I ran the repair like a desk runs a trade.
Batches
First instinct: give the model the list, say "fix the critical ones". Glad I didn't. That prompt blends formula repair, numerical correction, editorial judgement and typesetting into one blob, and afterwards you can't say which change served which purpose. You just have a different book.
I split it into three batches instead. Twenty-two formula and economic corrections. Eight numerical ones. Three that needed a decision from me personally, because they were about intent, not maths. Each batch got a fixed list of finding IDs and a hard rule: nothing outside the list. Scope control sounds like bureaucracy. It stops sounding like bureaucracy the first time you watch a model fix a formula and helpfully rewrite the three paragraphs around it while it's in the neighbourhood.
One critical finding I refused to touch at all: the index. An index maps terms to page numbers and the page numbers were still moving with every correction. Locking it now would have been theatre. It stayed open, with a note saying why.
Git as middle office
The whole repair ran in a separate Git repository. Every approved stage got a commit and a clean status. Nothing clever about it. It's trade confirmation for publishing – what changed, who authorised it, can we get back to the previous state, can we resume after a failure.
Two different model configurations, two roles. One implemented. The other reviewed. Not because I think one of them is honest and the other isn't. Four eyes doesn't work because either pair is perfect. It works because they're different.
The crash
Midway through the first batch, the implementation session died. Somewhere in Chapter 24. Eleven chapter files modified and uncommitted, some validation suites passed, some not started, no final report of any kind.
You can guess my first reaction.
But that crash ended up being the most useful event of the phase, because it tested something I'd only claimed in theory: does this workflow depend on the model remembering what it was doing?
It didn't. The recovery session was told to ignore its own memory and rebuild the picture from disk. The Git diff, the logs, the approved manifest, whatever outputs existed. It had to classify each of the twenty-two findings honestly – not started, edited but not validated, validated but not compiled, complete but uncommitted, done – and then continue from the first gap. Continue. Not restart.
A restart repeats work. A recovery reads the blotter. Anyone who's done a stint in operations knows the difference.
The model was not allowed to do arithmetic
Every critical correction had to be reproduced in deterministic code. Explicit inputs, intermediate values, tolerances, the same rounding the printed book uses. The model could explain a result. It couldn't assert one.
Why so stubborn? Two findings.
One was tail risk. The corrected passage had to separate an expected shortfall of EUR 25.6 million, from a fitted generalised Pareto distribution, from an empirical CVaR of about EUR 13.7 million. Both are tail measures. Both sound equally authoritative in a sentence. They're twelve million euros apart. Someone running risk at a real institution will eventually want to know which one you meant, and "the model said so" is not an answer I can print.
The other was a risk-budget example. Corrected figures: USD 6.08 million and USD 3.26 million against a USD 3 million budget. Which means the position fails the limit. The old prose said it passed. Fix the number, keep the sentence, and you've produced a paragraph that's arithmetically correct and still wrong. That one finding is the whole audit, really. The question was never just "is the number right". It was "does the conclusion still follow".
Every suite got rerun independently at the end. Zero failures. Slower than trusting the model, obviously. Also the only version of "it passed" I was willing to put my name on.
Green builds
All three batches compiled cleanly. 780 pages, seven by ten inches, no fatal errors.
There was a time that would have felt like a result. Not any more. Compilation proves the typesetting engine produced a document. That's all. It says nothing about whether a formula is readable, whether a table survived, whether the corrected number is actually on the page or got eaten by a layout defect.
So the reviewer worked out which pages the thirty-three corrections actually touched – thirty-one – and rendered each one from the final PDF at 300 dpi for inspection. All thirty-one passed. No clipping, no broken alignment, no stale value sitting next to its replacement.
Why 300 dpi? Because I got it wrong first. Earlier renders were at 150 dpi. Fine as previews, useless as evidence – at that resolution a mangled subscript and a healthy one look about the same. Lesson learned, written into policy. I'd rather admit that than pretend the standard arrived fully formed.
The regression that wasn't
One more thing from this phase. It changed how I read logs.
At one point the raw build output said the repairs had added 67 typesetting warnings. 251 in the baseline, 318 after. Looks like a regression. For an evening I believed it was one.
It was a counting artefact. LaTeX emits warnings across multiple compilation passes and the raw totals were double-counting differently between builds. Deduplicate by source location and overflow width and both builds contain exactly 107 unique warnings. The same 107. Net new: zero.
A number in a log is not a fact about the manuscript. The counting method is part of the fact. Keep that in mind – in the final article the same lesson comes back from the other direction, and it costs an implementation its approval.
Where that left things
The independent review reconciled everything at the end. Thirty-four critical findings approved. Thirty-three implemented and closed. One deliberately deferred. Nothing missing, nothing smuggled in. Every calculation rerun, the book rebuilt, every affected page inspected. Verdict: pass.
I want to be careful about what that pass meant, because the temptation to inflate it was real. It didn't mean the book was ready. Still open: 424 material findings, 545 editorial ones, 146 images below publication resolution, external references, the index. The pass meant one narrow thing. The critical phase now had evidence I could hand to a sceptic.
The critical gate passed. The book didn't. Keeping those two sentences apart was the hardest discipline of the whole rebuild, and it's what the last article is about.
---
A note on method. The same agents that appear in this story were used to check and edit this article against the project record – the finding counts, the batch contents, the page numbers, the warning totals. It seemed only fair to make them verify the story about themselves. The judgement, and any errors that remain, are mine.
Originally published at orbaos.com. The accompanying podcast, The Post-Project World, is available wherever you get your podcasts.