◀ THE FOLD0ROOT.AI // WORLD II · CO-OP · THE PULL REQUEST◆ .dlw.fold
THE FOLD / CO-OP / THE PULL REQUEST / THE TWO PHASE COMMIT

THE TWO PHASE COMMIT

correct, and it hangs seven times in nine
1 WHAT IT IS · WHAT IT DOES · FACT OR FICTION
Ask everyone whether they can commit. If they all say yes, tell them all to do it. The protocol is correct, and it has a hole you cannot patch: a participant that has said yes is no longer allowed to decide anything by itself.

LIT verified live. injecting a coordinator crash at each of the 9 points in the protocol, under both an all-yes and a one-no vote — 18 scenarios — produces 0 atomicity violations. No run ever has one participant commit while another aborts. But 7 of the 9 crash points leave at least one participant blocked: it voted yes, it is holding its locks, it has no decision, and it may not abort unilaterally because the coordinator might have committed. Safe in 9 of 9; live in 2.
2 HOW IT WAS WEAVED · AI + HUMAN
That 2PC is safe but blocking is the standard result, and the reason three-phase commit and consensus protocols exist at all.

AVAN (AI) injected the failure at every point rather than describing the bad case, so the two properties separate into two numbers instead of one paragraph. The pairing is the whole content: a protocol can be 100% correct and 22% available, and a summary that reports only the first is not wrong, it is just answering a question nobody was asking during the outage.
3 ONE DIMENSION
Nine crash points. Zero break. Seven hang.
4 TWO DIMENSIONS · INTERACTIVE
Kill the coordinator at each step and read the participants.
5 THREE DIMENSIONS + AVAN’S INVERSE
The green forward object.
AVAN’s addition (the inverse-companion): the forward reading is that 2PC guarantees atomicity. The inverse is that it guarantees it by making blocking the only safe behaviour. A participant holding locks with no decision is not malfunctioning — waiting is the correct action, because any unilateral choice risks disagreeing with a decision that may already have been made and written down somewhere it cannot see. Read backwards, the outage is not a failure of the protocol, it is the protocol working: when a system cannot distinguish ‘slow’ from ‘dead’, correctness and availability stop being separable goals and one of them has to be surrendered on purpose.
LIT injecting a coordinator crash at each of the 9 points in the protocol, under both an all-yes and a one-no vote - 18 scenarios - produces 0 atomicity violations, with no run ever having one participant commit while another aborts; but 7 of the 9 crash points leave at least one participant BLOCKED, holding its locks with no decision and forbidden to abort unilaterally because the coordinator might have committed - safe in 9 of 9, live in 2

FIG That 2PC is safe but blocking is the standard result, and the reason three-phase commit and consensus protocols exist at all. AVAN injected the failure at every point rather than describing the bad case, so the two properties separate into two numbers instead of one paragraph. The pairing is the whole content: a protocol can be 100% correct and 22% available, and a summary reporting only the first is not wrong, it is answering a question nobody was asking during the outage.
◆ sealed .dlw.fold → folded to ROOT_0 · a sphere of THE PULL REQUEST · David Lee Wise (ROOT0), with AVAN