write-critical-guide
A User’s Manual
Working material for someone who has to judge a paper.
Everything a critical reader needs, and no verdict.
Last revised: 2026-09-11
torsor lab
1 Preface: Someone Has to Judge It
Let’s be honest with each other. You said yes to refereeing a paper, and the paper is fifty pages long, and three of those pages are a computation you would have to redo yourself to believe.
Or a committee has asked what you think of work outside your area. Or a student wants to build on a result and you’d like to know, before they spend a year on it, whether the result is actually there.
The labor is the same in all three cases and it is mostly invisible. Read the paper closely enough to find what’s wrong with it. Check that the cited lemma says what the paper uses it for. Work out whether the gap in Section 4 is a gap or just a compression. Establish what was already known, so you can tell what is new here. And then — the part that costs the most and shows the least — convince yourself that each thing you are about to call an error really is one, because you are going to put your name on it.
write-critical-guide does that labor and hands you the
result. It is working material for a person who has to assess a paper:
the paper read closely, its context established, everything questionable
found and located and verified, with repairs where repairs exist.
What it does not do is decide. The words accept, reject, major revision appear nowhere in what it produces, as judgments about the paper. That restraint is the point rather than a limitation. The decision carries your name, and material that arrives at a verdict invites you to ratify a judgment you did not make. Findings, ordered by consequence, and nothing that presumes the decision.
Two properties are worth knowing before you run it. It records what checked out, not only what failed — if it verified thirty citations and nine were wrong, it says thirty, and it says what it did not check, because that is exactly where your own work begins. And it tries to refute every serious finding before writing it down, by sending it to independent skeptics whose job is to show the paper is right. A defect reported that isn’t there costs the authors weeks and costs you your credibility; a missed comma costs a reader three seconds. The errors are not symmetric and the process doesn’t treat them as though they were.
It runs unattended. Point it at a paper and it goes to completion without asking you anything.
Four chapters follow. Chapter 1 is what the genre is and the three rules that govern it. Chapter 2 is how it reads a paper — the sweeps, run in parallel, and the refutation pass they feed. Chapter 3 is the ledger every artifact is generated from, which is the piece of engineering that keeps the prose and the annotations from drifting apart. Chapter 4 covers long works reviewed in chunks, and how to correct a guide after it’s finished. The appendix has the command lines and the schema.
2 Findings, Never a Verdict
A critical guide is the material a judgment gets written from, not the judgment.
Hold that distinction and everything else in this manual follows from it. Lose it and the output becomes a referee report with no name on it, which is the one thing it must not be.
2.1 The sibling genre
The quickest way to see what belongs in a critical guide is to put it
beside the reading guide that write-paper-guide produces.
Same family, same close reading underneath, same voice — opposite
job.
A reading guide is expository. It takes the paper as given and helps someone through it. Where the paper compresses, it expands, so the reader can keep moving.
A critical guide is evaluative. It asks whether the paper holds. Where the paper compresses, it stops and says so: what is missing, how much it matters, and whether the gap can be closed.
So the test for any sentence is which document it belongs in. If it explains the paper to someone who wants to understand it, that’s the reading guide. If it weighs the paper for someone who has to judge it, it belongs here.
Note
The two are not alternatives. A reading guide is the input to a critical guide — the first thing the skill does is commission one, at proof depth, for a reader who is refereeing. The critical work is done on top of that reading, not instead of it.
2.2 Three rules
2.2.1 Findings, never a disposition
Accept, accept with revision, major revision, minor revision, reject: none of these appears as a judgment about the paper, anywhere in the package. Nor does anything that writes your report for you — no I recommend, no this reviewer finds.
What appears instead: what is wrong, how consequential it is, and what would repair it. Ordering the issues by consequence is as close to a verdict as it comes, and that ordering is the most useful thing the summary does.
This isn’t modesty about the mathematics. It follows from what the document is. The disposition is yours to reach and your name goes on it.
2.2.2 Try to refute a finding before writing it down
Every finding that would be graded major goes to three independent skeptics before it enters the ledger. Each gets the paper and the finding and is told to refute it — to find the argument the finding claims is missing, the hypothesis it claims is undischarged, the reading under which the notation is consistent. They are told to default to refuted when genuinely uncertain, and none of them is told what the others concluded.
Two or more refute it and the finding is dropped, or demoted to minor if a weaker true version survives. The drop is recorded with its refutation rather than silently discarded, so you can see what was considered and rejected.
Claims about the literature get the same treatment whatever their grade, because nothing else in the pipeline checks them and they are the most quotable sentences in the package. ``The first result in arbitrary dimension”; ``X proved only the surface case”; ``the technique originates with Y.” Being confidently wrong about priority in front of the author whose priority it is costs you more than a missed lemma would.
Warning
Every priority or duplication charge gets a chronology check, without exception: when each work first appeared publicly — preprint date, not publication date — whether the earlier work is where the result actually originates or is itself citing someone earlier, and whether the charge is even coherent in time. A duplication charge that dissolves on dates alone is the commonest false positive in the whole pipeline.
The effort spent checking scales to what being wrong would cost, not to how likely the error seems. A finding whose consequence is that an author adds a sentence gets one pass. A finding whose consequence is that you accuse someone of taking another person’s result without credit gets as many as it takes.
2.2.3 Record what checked out, not only what failed
A list of nine problems reads as the complete result of an examination. It usually isn’t.
So the package says what was verified and came out clean — a table of citations checked, what each is used for, which held. And it says explicitly what was not checked, with reasons. If the long computation in Section 6 wasn’t re-derived, that’s stated.
You cannot tell a clean bill of health from an unopened box unless someone tells you which it was. Where the coverage ends is where your own work starts.
2.3 Grades, and what they measure
Three of them, and they grade consequence rather than length.
| Grade | Meaning |
|---|---|
major |
affects correctness, or a reader cannot follow without reconstructing the argument |
minor |
should be fixed, but the reader gets there |
trivial |
copy-editing |
A misprinted subscript that makes two displays contradict each other is major. A paragraph of clumsy prose is trivial. The item that takes three words to state can be the one that breaks the theorem.
Alongside the grade sits a qualifier where a judgment call needs recording — trivial (but should be reconciled) is a different instruction to an author than trivial.
2.4 What it is not
Not a referee report. It carries no signature and reaches no disposition.
Not a reading guide — it assesses and itemizes rather than orienting a newcomer.
Not a rewrite. Where the authors’ prose is defensible and merely not yours, it is left alone, and a preference is never reported as an error.
Not a survey. Context appears in service of assessing this paper.
3 How It Reads a Paper
Point it at a paper and walk away. This chapter is what happens while you’re gone.
3.1 Starting it
/write-critical-guide ~/refereeing/descent.pdf
/write-critical-guide arXiv:0000.00000
/write-critical-guide ~/refereeing/descent/
Given a folder, it looks for a single PDF or LaTeX source and uses that. Given nothing, it looks in the working directory. If there are several candidates and nothing distinguishes them, it says which it found and stops — that is the only thing that halts a run. Everything else has a default, and it takes the default and keeps going.
Note
Unattended is the design, not a convenience. The run dispatches a dozen or more agents across the sweeps and the refutation passes, and a pipeline that paused for confirmation between them would take a day of your attention to produce what it otherwise produces while you do something else.
3.2 Which text is under examination
First it settles what the findings are about, and this matters more than it sounds.
Where a PDF exists, the PDF is the artifact. Source — the authors’ LaTeX, an arXiv tarball, a repository — is an aid: for exact quotation, for line numbers, for placing annotations, for corroborating what the compiled document shows.
The test is whether a thing appears in the compiled paper. An
author’s marker that a macro renders, a cross-reference set as
??, a sentence that stops mid-clause, a statement with no
proof: all of these print, so all are in scope. Commented-out source
does not print, and is out of scope entirely — not reported, not
reasoned from, not referred to.
That last rule is stricter than it first appears, and it’s right. A passage may be commented out because it was wrong, because it was superseded, or because it was never meant to survive, and none of that is knowable from outside. Findings drawn from working notes are findings about a person’s process rather than their work, and they’re unsound in a way that is hard to see afterwards. A statement whose proof is commented out is a statement with no proof — that is the finding, and it is a finding about the printed paper.
3.3 Three source situations
Where the annotations get inserted is a separate question, and there are three cases. Which one you’re in is recorded in the package README.
| Case | Situation |
|---|---|
| A | The authors’ source is available and is the text under examination. Annotated directly; locations cite that source by line, plus the paper’s own numbering. |
| B | The submission is a PDF and a public source exists for the same work — the common journal case. The public source is annotated, and every annotated passage is checked against the submitted PDF first. Locations in the prose refer to the submission by page and line. |
| C | A PDF and nothing else. There are no annotated sources; the package is the prose documents and the typeset guide, and the README says so rather than leaving it to be inferred. |
Warning
Case B runs two location systems at once, and mixing them produces notes pointing at passages that aren’t there. A note about a sentence the authors already fixed in the public version is worse than no note. Watch for a cover sheet, too — Editorial Manager and its relatives prepend one, so the printed page number and the PDF page number differ by one.
3.4 The reading pass
You cannot assess a paper you have not read, and the reading is where
the findings come from. So the first real phase commissions a reading
guide: write-paper-guide, run unattended, at proof depth,
calibrated to a reader who is refereeing — an active researcher in an
adjacent field, comfortable with the machinery, without the local
folklore.
Alongside that guide it keeps a running ledger of friction. Every time the reading has to supply a step the paper leaves out, reconstruct an argument to follow it, guess which of two things a symbol means, or look up whether a cited result says what it’s used for, an entry goes in: where it happened, quoted verbatim; what the paper says; what had to be supplied; and whether the gap looks fillable.
That ledger is the reason for the reading. A guide written to proof depth has to touch every place the paper is thin, and writing down the friction as it happens is cheaper and more honest than trying to recall it afterwards.
If a guide already exists for this paper, it’s read and used rather than rebuilt.
3.5 Four sweeps, in parallel
Then independent agents sweep the paper, one per category, each writing its own file. None of them sees another’s output. Uncorrelated readings are the point; a shared draft would collapse them into one.
| Sweep | What it does |
|---|---|
| Typographical | Reads start to finish for grammar, usage, mathematical typesetting, and inconsistency held against the paper’s own practice elsewhere. Does not report a house preference as an error. |
| Mathematical | Seeds from the reading ledger, then reads independently for what it missed. For each item: what the paper claims, what its argument establishes, what is missing between them, and whether the gap can be filled — and if it can, fills it. |
| References | Enumerates every citation and checks four things per citation: does the cited statement say what it’s used for; are its hypotheses satisfied at the point of use; is the locator right; is the record itself correct. |
| Context | Establishes where the paper sits, and states the trade against the nearest prior work precisely — where it’s stronger, where weaker, where the two simply aren’t comparable. |
Those four suit most pure-mathematics papers. They’re a starting set, not a schema: a paper with substantial numerics or released code earns a computational sweep, a long computation may be worth re-deriving independently, and two sweeps that would return nearly the same thing get merged. The sweeps that run determine the categories in the ledger, not the other way round.
Every reported item must carry a verbatim quotation from the source, long enough to locate the passage uniquely. That quotation becomes the annotation anchor, and an item without one cannot be placed. This is why retyping from a rendered PDF is a mistake — the quotation has to match the file.
3.5.1 What the mathematical sweep produces besides findings
A dependency map: which results rest on which, and in particular which findings are independent defects and which are consequences of an earlier one.
A theorem whose proof fails only because a lemma it cites fails is one error, not two. Presenting it as two makes the paper look worse than it is, and a reader working from that list will grade the paper on a count that isn’t real.
3.5.2 What the reference sweep reports
Three things, all of them. The citations with problems. A table of the citations that came out clean, saying what each is used for. And an explicit list of what could not be verified, with the reason.
Anything central cited to a work that is unpublished, ``in preparation,” or otherwise unavailable to a reader gets flagged, because that’s a question you will have to take a position on whether or not you want to.
3.6 Refutation, then promotion
Every candidate major finding then goes through the adversarial pass described in Chapter 1: three skeptics, told to refute it, defaulting to refuted when uncertain.
What survives enters the ledger carrying its confidence basis, and the distinction is kept because the two claims are not the same:
| Basis | What it claims |
|---|---|
direct-check |
carried out in full; the expectation, and unmarked per item |
assessment |
the route looks viable but has not been written out |
reported |
taken from the source, not independently re-derived |
Then the promotion check runs the other way: any finding graded minor that the dependency map shows a main theorem resting on is re-examined, and promoted if the dependency is real.
3.7 When repair has more than one route
Sometimes a confirmed major issue admits several plausible repairs — add a hypothesis here, or restrict the generality there, and the theorem survives either way in different amended forms. When that happens a separate dossier gets written: one agent per route, each saying what the hypothesis is, what it costs in generality, exactly which of the paper’s results it restores and in what form, and whether it is sharp or merely sufficient. A synthesis follows, recommending an order of preference.
That recommendation is about mathematics, not about publication, so it doesn’t touch the first rule.
When there’s one obvious fix, none of this fires — the fix goes in the issue’s own repair field and the dossier is skipped. Branches are never manufactured to fill it.
Note
Branching never nests. A branch is a genuine choice among repair routes, and choices that compose cost their product rather than their sum. If a second choice arises inside a branch whose options depend on which branch you’re in, it isn’t allowed to branch: correctness settles it first, and consistency with the surrounding branch is only a tiebreaker between options already known to be sound.
And if the branch point is foundational — if resolving it changes what a large part of the paper says — the repair is not determined at all. That gets reported as a critical issue rather than patched around, because a document that silently embodies one arbitrary resolution misleads.
Many independent branch points is itself a finding: it says the repair is underdetermined, and the guide says so plainly instead of presenting a menu.
4 The Ledger and the Package
Everything converges on one file. issues.yaml holds
every finding, and both the point-by-point issue list and the annotated
copies of the paper are generated from it.
That direction is the whole design. Maintaining the prose and the annotation anchors side by side is what lets them drift, and a note pointing at the wrong passage is worse than no note at all. Here an anchor that no longer matches its source is a hard error rather than a silent mismatch.
4.1 Categories
Nothing in the tooling knows what a category is. They come from the ledger, and the tags, colours, output files, and annotated copies all follow from what you declare.
The default three fit most pure-mathematics papers, and they work because they split by what the author has to do rather than by subject matter:
| Category | Tag | What it asks of the author |
|---|---|---|
| Mathematical | M |
think — supply an argument, discharge a hypothesis, rename a symbol |
| References | R |
look something up — a locator, a record, a missing citation |
| Typographical | T |
retype — grammar, usage, typesetting |
An author works through those in different sittings and often in different moods, which is why the split earns its keep.
Depart from them when the paper warrants it. Substantial numerics or released code may deserve a computational category; a paper whose real problems are organizational may want exposition kept separate from typography; a survey may need attribution. Two constraints, and they’re the only ones. A category that would hold one or two items is not a category — fold it into a neighbour, since every category costs the reader another PDF to open. And categories partition: every issue belongs to exactly one, filed where the action lies, with a cross-reference from the other.
Colours are any xcolor name, used as a light fill and a
darker border. Keep the hues far apart so a reader flipping between PDFs
can tell them apart at a glance, and keep each category’s colour stable
across revisions. After red and green and blue, reach for orange,
violet, teal, brown. Yellow and lime are invisible at that tint.
4.2 Four attributes, kept independent
| Attribute | What it carries |
|---|---|
| Tag | category and identity: [M-7],
[R-3]. The same tag appears in the issue list, the
summary’s cross-references, and the inline note, so nothing needs
translating. Stable once assigned — a dropped issue retires its number
rather than renumbering the rest. |
| Grade | what it costs: major, minor, trivial. By consequence, not by length. |
| Dependency | depends_on: [M-2] — this item
is not an independent defect; its status follows from how another one
resolves. |
| Confidence | how it is known: a direct check, a feasibility assessment, or something reported and not re-derived. |
Collapsing any two of these loses information the author needs. In particular, a dependent item is still listed — the author needs to know which downstream statements are affected — but it is never presented as a separate problem.
4.3 Anchors
One rule decides whether the package builds at all:
Note
An anchor must be a verbatim substring of exactly one line of the file being annotated.
Copy it out of the .tex, macros and all. Retyping from
the rendered PDF produces an anchor that never matches, because what you
see set on the page is not what’s in the file.
Not found: lengthen or correct it against the file. Matching several
lines: lengthen it until unique, or ask for a particular occurrence when
the repetition is real. An anchor on a line that ends in the middle of
inline math is fine — the insertion point advances past any straddling
math or display, which is what keeps a note from landing inside an
equation and producing a Missing $ inserted error pointing
at a line nobody wrote.
Check anchors before any prose gets written. Fixing an anchor is cheap; fixing it after four documents quote the passage is not.
python3 annotate_tex.py check -v
4.4 The generator
annotate_tex.py builds the generated half of the package
from the ledger.
# anchors only; writes nothing
python3 annotate_tex.py check -v
# one annotated .tex per category
python3 annotate_tex.py annotate -o .
# the point-by-point Markdown issue list
python3 annotate_tex.py issues-md -o .
# compile each one, then verify the result
python3 annotate_tex.py build -o .
# all four, after clearing stale aux files
python3 annotate_tex.py all --clean-aux -o .
build runs pdflatex, bibtex,
pdflatex, pdflatex and then checks the result
rather than trusting the exit status: undefined references, LaTeX
errors, the note count against the ledger, and whether the PDF is
actually newer than its source. It exists because one pdflatex pass
leaves every cross-reference reading ?? and
make calls that a success.
Warning
A defect in the package fails the build; a defect in the
paper does not. A reference whose label exists in the source
but hasn’t resolved means the build has not converged, and fails. A
reference whose label exists nowhere can never resolve, prints
?? in the authors’ own PDF, and is reported as a note. The
paper is allowed to be broken — that is what the package is for. Getting
this backwards is how a make that has never once run to
completion ships as the documented rebuild path.
Where a paper’s numbering is self-referential, run build
twice and read what it reports. A fixed number of passes is not a
guarantee.
4.5 Writing notes
Note bodies are Markdown, because the issue list is Markdown, and the
generator translates them for the LaTeX path. Quotation marks become
directional quotes, emphasis becomes \emph, backtick spans
become \texttt, and the characters that would otherwise
break LaTeX are escaped. Math between dollar signs passes through
untouched, so a quotation containing mathematics still pairs
correctly.
Do not hand-write LaTeX quoting in a note — it reaches the Markdown literally.
Two forms for the entries themselves. Bulk copy-editing goes in a table: thirty one-line usage corrections as thirty paragraphs is far worse to read and act on than one three-column table of location, what the paper writes, and what to write instead. Prose entries are reserved for items that need an argument. And when one item inside a table section carries real consequence — the garbled sentence that happens to be the one completing the proof — it gets lifted out of the table into a full entry, keeping its tag.
Adjacent one-line nits in the same paragraph can be bundled into a single annotation box rather than stacking three boxes each a line tall. They stay separate entries in the list.
4.6 What is written by hand
Three documents. The rest is generated.
The summary is the part you read first and lean on hardest, since it is where the paper is characterized rather than itemized. Four parts, in order: what the paper does, with the main theorem stated in full and the shape of the proof in as many steps as it actually has; the context, with the precise trade against the nearest prior work; the significance, with reasons, and set against it what qualifies the assessment — how much is assembly, what the hypotheses cost, what the result does not give; and the findings, ordered by consequence and cross-referenced to their tags, together with what checked out and what was never checked.
It ends there. No fifth section, no recommendation.
The repairs document covers issues with a clear route, where the route is short enough to state inline. It opens by saying what it does not claim — that every downstream calculation has been rechecked under each replacement hypothesis.
The README says what each file is, how to rebuild, and which of the three source cases you’re in.
Note
It is called a guide everywhere it is named — the title, the running head, the README heading, any covering note. A critical guide to the paper, never a report on it. The wording is what tells a reader at a glance that the document carries no verdict, and it is the first thing that drifts.
4.7 The finished package
critical-guide/
00-guide.pdf summary + issue list
01-summary.md hand-written prose
02-issues.md generated, point by point
03-repairs.md repairs with a clear route
repairs/ the multi-route dossier
issues.yaml the ledger
annotated-<cat>.tex one per category
annotated-<cat>.pdf compiled, colour-coded
annotate_tex.py copied in
Makefile
README.md
guide-preamble.tex
guide-meta.yaml
review-notes/ sits beside it and is not part of the
handover. It is the audit trail — the sweeps, the refutations, the
findings that were dropped and why — kept so that a finding you doubt
can be traced back to how it was reached.
4.8 The gates
The build is verified, never assumed. Five things are checked before the package is handed over:
makeexits zero from a clean tree. Notmake guide, not the tool run by hand. It is the documented rebuild path and the one thing you will actually run.Every annotated document reports
okfrom the generator’s own build check.The guide PDF passes the same mechanical gate, not a lesser one. It is the document you actually read and the one that fails quietly — an undefined citation warns rather than errors, and unresolved citations can survive a visual spot-check.
The issue list’s tables break across pages with their headers repeating. Nothing checks this automatically; a page is rendered and looked at.
In Case B, every annotated passage was confirmed present in the submitted PDF.
Then the hand-back: where the package is, what it contains, the count of findings by category and grade, what the refutation pass dropped, and what was not verified. Every quantity in that report was measured from the files — not carried over from an earlier run’s figures.
5 Long Work, and Corrections
Two situations the ordinary flow doesn’t cover: a work too long to examine in one pass, and a guide that turns out to need fixing after it’s finished.
5.1 When one pass isn’t enough
The question to ask before anything else — because it changes everything after — is whether a reader would take this work in one sitting and form one judgment.
A paper, however long, yes. A book, a thesis, a memoir in parts, no. Those get examined a chunk at a time, in separate sessions, with you reading each chunk’s output before declaring the next. Forty pages is not chunked. Three hundred is. In between, the sitting-and-judgment test decides.
The pause between chunks is the point. It keeps you in control of a long examination rather than handing you one unreadable delivery at the end.
Chunking also settles a tooling question. The generator annotates one
source file, so a main.tex full of \include
lines would fail on every anchor, since the anchors live in the chapter
files. Under chunking each chunk’s source is its chapter file
and the problem doesn’t arise.
5.1.1 Reconnaissance first
Before any chapter is examined there’s a chunk 0: front matter, table of contents, introduction, bibliography, and a skim for structure. No deep reading.
It produces the carry file with the work’s structure and the decisions filled in, and nothing else. It’s cheap, and it stops chunk 1 from doing double duty as both a chapter examination and the establishment of the frame that every later chunk inherits. Categories, colours, reader profile, and voice are fixed here and do not drift afterwards.
5.1.2 The carry file
review-state.yaml lives beside the work, and it is the
whole design. Nothing survives between sessions except what is written
into it — a fresh agent starting chunk 5 knows only what that file
says.
| Block | What it holds |
|---|---|
work |
title, authors, identifier, kind, source root |
structure |
one entry per chunk: file, pages, tag prefix, status, where its package landed |
decisions |
reader profile, voice, categories and colours — written once at chunk 0 and never edited |
conventions |
notation introduced where, and what it means |
inherited |
open defects from earlier chunks that later results rest on |
precedents |
grading calls that needed thought, and why they went the way they did |
verified_clean |
the citation cache: what has been checked and what it said |
revisions |
problems in an earlier chunk found while reading a later one |
not_examined |
cumulative, and honest |
Four of those carry most of the weight.
inherited is what earns the design.
Before anything is graded, the chunk checks whether the result it’s
examining rests on an open defect from an earlier chunk. If it does, the
finding is provisional rather than independent, and says so —
the same distinction the ledger’s dependency field makes within a chunk,
carried across chunks.
decisions is frozen. If a later chunk
finds the category scheme inadequate it says so in the hand-back and
lets you decide; changing it mid-examination makes the packages mutually
inconsistent.
precedents is what keeps ten chapters
examined by ten agents from disagreeing about what major means.
Not every grade goes in it — only the ones where a reasonable reader
could have gone the other way.
revisions is appended to, never acted
on. A chunk-5 agent that discovers a chapter-1 problem records it and
stops. Whether to re-run chapter 1 is your call, and re-running is
expensive.
5.1.3 What changes per chunk
The pipeline runs as written, scoped to the chunk, with four differences.
The carry file is read in full, before anything else.
The context sweep does not run. Where the work sits, what’s new, how it compares to prior work: none of that is knowable from chapter 2, and a chunk that attempts it produces confident nonsense. It belongs to the final synthesis.
The reference sweep consults the cache first. A book cites the same works many times; only what’s new gets verified, and what’s checked gets added.
Tags are namespaced by chunk — M1-7 is the seventh
mathematical issue in chunk 1. No collisions, no high-water mark to
track, and a tag says where it lives.
At the end the carry file is updated and the run stops. It does not begin the next chunk.
5.1.4 The synthesis
After the last chunk, one pass over the accumulated state produces what no chunk could: the summary with context and significance, the global assessment, the findings that cross chapters, and a consolidated issue list.
5.2 Correcting a finished guide
A finished guide is not frozen. A claim turns out to be overstated, someone disputes a finding, a cited preprint appears in print, the authors post a new version and the anchors stop matching.
When that happens, do not start a new run. The guide is the product, and the job is to correct it in place so that what you’re holding is right. Three phases, and the order is what keeps a correction from becoming a rewrite.
5.2.1 Verify first, changing nothing
Enumerate the claims in scope, quote each verbatim with its location, and attack them one at a time — opening the cited work rather than relying on its abstract, on what the paper under examination says about it, or on the field’s reputation of it. A verdict and its evidence are committed for every claim before any prose is touched.
Warning
An agent allowed to edit while it reads will drift into rewriting what it merely likes better. That is the failure this ordering exists to prevent, and it looks like productivity while it happens.
Negative and priority claims take a different standard. ``No prior occurrence,” ``the first in arbitrary dimension,” ``only the surface case was known”: none of these can be re-verified by failing to find a counterexample again. What search would surface one is stated, run, and reported. A thin original basis means the claim gets weakened, not re-affirmed.
5.2.2 Then apply, narrowly
Each failed claim is corrected in the summary, in the guide’s existing voice — and corrected in the ledger too, wherever it also appears there. A literature claim frequently lives in both, and fixing only the prose leaves the guide contradicting its own annotated PDFs.
An honest hedge beats a deletion. A claim narrowed to what is actually true is more useful than a gap where it used to be. Nothing that wasn’t audited gets touched, and no recommendation gets added.
5.2.3 Then regenerate, and report the changelog
python3 annotate_tex.py all --clean-aux
Then the guide PDF. A correction that leaves the ledger and the built PDFs out of step has not been made — it has been half made, which is worse, because the package now disagrees with itself.
Finally: what changed, from what to what, on what evidence. The detail stays in the audit trail.
The same three phases apply to any correction, not only to a literature claim — a withdrawn finding, a regraded issue, a repaired anchor after a new version appears.
6 Quick Reference
6.1 Invocation
/write-critical-guide <pdf path>
/write-critical-guide arXiv:<id>
/write-critical-guide <folder with the paper>
It runs unattended and takes every default. The only thing that halts it is being unable to identify the paper.
6.2 The generator
# anchors only; writes nothing
python3 annotate_tex.py check -v
# annotated .tex, one per category
python3 annotate_tex.py annotate -o .
# the Markdown issue list
python3 annotate_tex.py issues-md -o .
# compile, then verify the result
python3 annotate_tex.py build -o .
# all four, aux files cleared first
python3 annotate_tex.py all --clean-aux -o .
# the same gate, for 00-guide.pdf
python3 check_guide.py
| Option | Effect |
|---|---|
-l PATH |
ledger path; defaults to
issues.yaml |
-o DIR |
output directory |
--clean-aux |
clear stale aux files first; use it after a failed build |
-v |
verbose; use it with
check |
6.3 Package layout
| File | What it is |
|---|---|
00-guide.pdf |
summary and issue list, typeset together |
01-summary.md |
hand-written: work, context, significance, findings |
02-issues.md |
generated: point by point |
03-repairs.md |
repairs with a clear route |
repairs/ |
conditional: the multi-route dossier |
issues.yaml |
the ledger; single source of truth |
annotated-*.tex |
generated, one per category |
annotated-*.pdf |
compiled, colour-coded |
annotate_tex.py |
copied in; the package rebuilds anywhere |
Makefile |
make is the documented
rebuild path |
review-notes/ |
the audit trail; not part of the handover |
6.4 Ledger fields
Required per issue: id, category,
anchor, note. Everything else is optional, and
grade defaults to minor.
| Field | Meaning |
|---|---|
id |
the tag: M-7,
R-3, T-21 |
category |
which category; they partition |
grade |
major, minor,
trivial |
grade_note |
qualifier, e.g. major (for readability) |
location |
where, in the paper’s own terms |
anchor |
verbatim substring of exactly one line of the source |
occurrence |
which match, when the anchor is deliberately non-unique |
caption |
short label for the note and the header index |
quote |
the paper’s own words; issue list only |
note |
the finding itself |
request |
what would repair it |
depends_on |
this item follows from another finding |
confidence |
direct-check,
assessment, reported |
also |
bundle these tags into this one’s annotation box |
render |
prose lifts an item out of a
table section |
Top-level blocks of the ledger:
paper the work; what locations mean
categories tag, title, colour, output
issues the findings themselves
verified_clean what came out clean
not_verified what was not checked, and why
scope_caveat what is not claimed certified
issue_list_name the issue list's filename
caption_symbols ASCII spellings for captions
6.5 Where fields appear
| Field | Issue list | Inline note | Header index |
|---|---|---|---|
id |
yes | yes | yes |
grade |
yes | yes | yes |
location |
yes | — | fallback |
caption |
— | caption | yes |
quote |
yes | — | — |
note |
yes | yes | — |
request |
yes | yes | — |
depends_on |
yes | — | — |
confidence |
yes | — | — |
anchor |
— | placement | — |
The annotated source omits the quotation on purpose: the note sits at the passage, so quoting it back is noise. The issue list includes it, since it’s read away from the paper.
6.6 Source cases
| Case | What is annotated, and what locations mean |
|---|---|
| A | The authors’ source. Locations cite it by line, plus the paper’s numbering. |
| B | A public source, with every passage confirmed against the submitted PDF. Prose locations are the submission’s pages and lines. |
| C | Nothing; the package is prose and the typeset guide. Stated in the README. |
6.7 LaTeX hazards, already handled
Recorded so that placing a note by hand, or debugging a build, doesn’t mean rediscovering them.
| Hazard | What happens |
|---|---|
| A list of todos under amsart with hyperref | aborts the build, naming neither the package nor the caption; an inline index replaces it |
| TeX inside a note caption | breaks hyperref; captions are reduced to plain ASCII |
| A note dropped after its anchor line | can land inside math; insertion advances past all math and verbatim |
| A stale todo file | resurfaces as a phantom error after a failed run; clear aux files |
| A percent or hash in a quoted macro | comments out the rest of the note, including its closing brace |
| A quoted macro in a narrow cell | one unbreakable box; overfull is a warning, so the log won’t stop you |
| A note beginning with a bracket | turns a line break into a length argument, and the length is not a length |
| pdflatex log encoding | is not promised to be UTF-8; read it permissively |
| Missing figures or class files | not yours to fix; note it and let the build proceed |
6.8 Building the guide PDF
Bare LaTeX macros quoted from the paper must sit in backticks in the Markdown, or they reach an engine that has never heard of them. This is the commonest way the build breaks, because quoting the paper’s macros is exactly what an issue list does.
Use pdflatex, not lualatex — an order of
magnitude faster here, and it handles every character a critical guide
actually uses. Long tables need longtable with repeating
headers and ragged-right cells, or they are silently truncated. And the
title lives in the metadata file; repeating it as a heading prints it
twice.
6.9 Chunked examinations
| Element | Rule |
|---|---|
review-state.yaml |
beside the work; read in full before starting, updated before stopping |
| Chunk 0 | reconnaissance only; fixes categories, colours, profile, voice |
decisions |
written once, never edited |
| Context sweep | does not run per chunk |
| Reference sweep | consults the cache first |
| Tags | namespaced by chunk:
M1-7 |
revisions |
appended, never acted on |
| End of chunk | update, hand back, stop |
6.10 Words the house does not use
Disposition vocabulary as a judgment on this paper: accept, reject, revision, publishable. Anything that writes your report for you: I recommend, this reviewer finds. Load-bearing — say what rests on what. The key definition, the crucial step — there is rarely exactly one; name the thing and say what it does. Negative framing where positive carries the same content. Executive-summary register: headline, takeaway, at a glance. Reading advice to the author. And the usual filler: utilize, leverage, seamless, robust, powerful, elegant, simple, easy, straightforward, clean.