Resource form
- One model-backed Phlex component renders initial and invalid states.
- Rails owns names, values, and errors; Nitro owns presentation.
- Invalid mutations render the same model with
422; success redirects with303. - Use one primary submit: the shell toolbar owns it, or a standalone form keeps it inside
form.group. - Wrap the form in a Turbo Frame only when it needs an independent lifecycle.