Skip to content

Chapter 31: the proof that it cannot be done - #92

Open
SamuelXing wants to merge 1 commit into
mainfrom
feat/papers-ch31-flp
Open

Chapter 31: the proof that it cannot be done#92
SamuelXing wants to merge 1 commit into
mainfrom
feat/papers-ch31-flp

Conversation

@SamuelXing

Copy link
Copy Markdown
Owner

Season 3 opens. FLP — Impossibility of Distributed Consensus with One Faulty Process, Fischer, Lynch & Paterson, JACM 32(2), 1985 — read from the PDF, with every hard number and quotation extracted from it rather than recalled.

The problem this chapter had to solve. The format was built for systems: a paper, a mechanism, a bill. This one has no system in it. The way through is that a proof is a design — an adversary is a thing you build — so the DesignIt walks the reader through the argument rather than around it. Three decisions: what you do about a process that has gone quiet, where you start a run you intend never to finish, and what you do about the message you owe. They are the paper's three moves in order, and getting the third one right is Lemma 3.

The line the chapter is built on. Almost nobody who cites this paper mentions that the run it constructs contains no crash. Every process takes infinitely many steps; every message is delivered. The protocol was required to survive one stopped machine, the machine never stops, and what breaks it is having had to be ready — because readiness means the decision can never hang on any single process, which is exactly the freedom the schedule needs.

Also in here, and also rarely quoted. §4 contains a working consensus protocol. Its assumption is that no process dies during execution, which isolates the difficulty about as precisely as anything in the literature: the problem was never that machines fail, it is that one may fail while you are mid-conversation with it.

What is new

  • src/papers/chapters/flp.tsx — the chapter (7 steps, DesignIt, 5 sources, all URLs verified live)
  • src/papers/chapters/flp-trace.ts — the adversary's stage loop, run one stage at a time
  • three figures in diagrams.tsx — the bivalence frontier, the four exits, and §4's initial clique
  • ActS3I in actDiagrams.tsx — the floor with a hole in it and a plank across the hole, which is Act I's whole argument

Two things worth reading the diff for

The clique figure's first draft drew the group as an arc over the row, and it ran straight through the label above it. The geometry lint had no opinion — it measures straight segments against text boxes, and a Bézier is neither. Caught by screenshotting it. Redrawn as a dashed frame, which is also the better picture: an initial clique is a set with no incoming edges, so a frame with nothing entering it draws the definition instead of illustrating it.

And Season 3's Act I now has a figure. That is the guard added in #91 for exactly this transition — an act may have a summary and no drawing while it is unwritten, and must not once a reader can read into it. Broken on purpose to confirm it bites: removing the figure key fails three assertions in book.test.ts.

Checks — 380 tests, tsc -b clean, geometry lint clean across 178 diagrams on 55 pages, [trace-lint] silent, 102 routes with cards, production build passes.

Unrelated, found by the link checker, not fixed here: https://www.cs.wustl.edu/~jain/papers/ftp/cong_av.pdf, cited in read/comics/backpressure.tsx, no longer resolves. Worth its own small PR.

🤖 Generated with Claude Code

Season 3 opens, and the first chapter in this book whose subject is a proof
rather than a system. FLP — Fischer, Lynch & Paterson, JACM 1985 — read from
the PDF, with every number and quotation taken out of it rather than recalled.

The chapter's problem is that the format was built for systems. The fix is
that the proof genuinely is a design, so the DesignIt walks the reader through
the argument itself: how you handle a process that has gone quiet, where you
start a run you intend never to finish, and what you do about the message you
owe. The three moves are the paper's three moves, and the reveal states the
thing almost nobody carries away from it — the run the proof constructs has no
crash in it at all. Every process takes infinitely many steps, every message
arrives. What breaks the protocol is having been obliged to be ready for a
failure that never happens.

The trace runs that schedule one stage at a time. Nothing in it is faulty,
which is why every process box is the same blue and the amber sits on the
bookkeeping rather than on a machine — there is no coordinator here to paint.

Also included, because almost nothing that cites this paper mentions it:
Section 4 contains a working consensus protocol. Its assumption is that no
process dies *during* execution, which isolates the difficulty with unusual
precision — the problem was never that machines fail, it is that one may fail
while you are in the middle of talking to it.

Three figures and an act opener. The clique diagram's first draft drew the
group as an arc over the row, which ran straight through the label above it —
a curve the geometry lint has no opinion about, since it measures straight
segments. Redrawn as a frame, which is also the better picture: an initial
clique is a set with no incoming edges, and a frame with nothing entering it
draws the definition rather than an illustration of it.

Season 3's Act I now has a figure, which is the guard that fires the moment a
season's first chapter goes live. Broken on purpose to confirm it: removing
the figure key fails three assertions in book.test.ts, including the one added
in #91 for exactly this transition.

380 tests, 178 diagrams measured clean, 102 routes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Sep 6, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
ddia-live-comic d55b3f3 Sep 06 2026, 07:25 AM

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants