Step 2 read the refusal from the mutation hooks, which only report their latest change: an add refused while another add was in flight was rolled back with no message, and the same for removals. Each change now records its own refusal, keyed by the change, so it stays shown whatever the other changes in flight do; trying the same change again replaces it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>