Show Errors Where the Action Happens
MUST: Show errors inline next to where the action happens. Disconnected toasts or top-of-form error summaries force users to hunt for problems.
Put each error next to the thing that caused it: field errors on their field, submit errors by the submit button
Bad
Good
Why it matters
From the Interaction constraints in ibelick's baseline-ui skill. "Where the action happens" is deliberately general and resolves per error: a validation error on the email field happened at the field, so it belongs under the field (wired with aria-describedby and aria-invalid); a submit failure — the request was rejected or the network died — happened at the button, so it belongs by the button.
The anti-pattern is a detached error: a summary parked at the top of the page, or a toast that fires and vanishes, leaving nothing next to the control the user was actually touching. Read this as the placement rule that generalizes forms-error-placement (Vercel: "Errors inline next to fields"), not as a competitor to it — Vercel names the field case, ibelick names the whole family.