A refusal is not a failure — but only if the client says so. Phase 5c made the server refuse to delete a block that grounds recorded facts, answering 409 with the blast radius. Studio wrapped that in a confirm modal (5d). Flutter did not: it fired the plain delete and swallowed the refusal, so a grounded block simply failed to delete — an error toast carrying the server's message and nothing else, no enumeration of what depended on the block and no way to proceed. The blast radius the server had carefully computed was thrown on the floor.
5e is the client half of refuse-by-default. It models the refusal as an outcome, not an exception: the 409 payload is the actionable part, so it is decoded into a sealed BlockDeleteOutcome type — refused-with-blast-radius, or done. The user sees what would break, and can proceed on a second, explicit confirm.