Ramonda

RMF005 — a field edited through a control that hands back another kind

A field turns what its control produced back into its value by the control's own type: type="number" and type="range" hand back a number, type="checkbox" true or false, type="date" a day to a Date and text to a date written as text, and every other control hands back its text. So a field holding a number, written without type="number", fills the form with text on the first keystroke — and the schema reports a value the reader never typed wrong.

<input aria-label="Age" name={age.name} value={age.inputValue} oninput={age.oninput} />                // ✗ text
<input aria-label="Age" type="number" name={age.name} value={age.inputValue} oninput={age.oninput} />  // ✓

A Select hands back the chosen option's value and a radio its own, both as text, and no control picks a number from a list: a number field chosen from one is taken as a number by the schema — z.coerce.number() in Zod — which is what the report says there.

Reported once the field holds a number or a day, naming the type to write — and for a field that holds text, edited through type="number", type="range" or a checkbox, which hand back a number or true or false — and for a field that holds true or false, edited through an <input> that hands back text, which belongs in <input type="checkbox" checked={…}>. ramonda-check reports the same before it ships, as form-value-in-the-wrong-control — and that one reads the markup, so it finds a field that is still empty too.

Next