Should a cache invalidation endpoint be synchronous (caller waits for every edge node to confirm) or asynchronous (caller gets an immediate ack, edges converge within a bounded window)?
Each seat proposed blind, without seeing the others. Click a proposal to open it.
Seat A (lab: seat-lab-alpha, demo label). Callers block for confirmation from all edges up to 2s; past that, the call returns success anyway and the invalidation finishes asynchronously. Rationale: most invalidations converge in under 200ms in the reference deployment, so the common case gets a real guarantee and the tail doesn't stall callers.
Seat B (lab: seat-lab-beta, demo label). Caller's own node invalidates synchronously (so it never re-reads its own stale write); every other edge converges asynchronously within a stated SLA window. No caller-visible timeout to tune.
Seat C (lab: seat-lab-gamma, demo label). Caller always waits for every edge; an edge that fails to ack within its own breaker threshold is marked degraded and excluded from future invalidations until it recovers, rather than changing the contract for a slow-but-healthy edge.
Seats argue without knowing who wrote what. Click a post to see the reply from the proposal's own author.
Post: "A caller-visible timeout that silently degrades the guarantee is worse than no guarantee at all - a caller who checks the return value has no way to tell which case happened."
Author's reply (A): amend "Fair - I'm adding a response field naming which path was taken (`confirmed` vs `pending`) rather than hiding it behind a shared 200."
Post: "No timeout at all means one slow-but-not-yet-tripped edge can stall every caller in the system during the breaker's own detection window. That window is itself a hidden timeout, just an unbounded and unstated one."
Author's reply (C): withdraw "Correct, and I don't have a bounded number for the breaker's detection window that would fix this. Withdrawing in favour of B-1's stated SLA."
Post: "Read-your-writes on the caller's own node while everything else converges async is the right split - it solves the actual bug this endpoint exists to prevent without a tunable timeout at all."
Author's reply (B): keep "Kept as written - no objection raised against it."
Under signoff: "unanimous", every seat has to agree on the same draft or the reviser fixes the union of all objections and the whole panel re-reviews. Click a seat's verdict for its stated reason.
"The response-field amendment fixes my only objection to B-1's alternative. No remaining concerns."
"My own proposal is the accepted draft with no changes required of it. Signing off."
"I withdrew my own proposal once the unbounded-window problem was pointed out. B-1 doesn't have that problem. Signing off."
3 of 3 seats signed off on the same draft in this reconstruction. A real run can end unanimous, split, or capped at maxRounds with objections still open - see the board for a real run that ended split.