The intent travels on the submitter, and only a submitter has one. `form.insert.getButtonProps({ name: fields.items.name })` returns `{ name, value, form, formNoValidate }` — everything except the type, which comes from your JSX. Conform reads the intent back off `event.submitter`, and its own `isSubmitter` check is `element.type === 'submit'`. A `type="button"` control never fires a submit event at all, so `form.onSubmit` does not run, the intent is never parsed, and the row is never added.
There is no error to see. Nothing throws, nothing warns, nothing appears in the console: the button presses, the ripple runs, and the list does not change. (Force the same props onto a submission another way and Conform's getFormData throws `The submitter must be an input or button element with type submit` — which is the diagnostic this rule exists to give you before you get there.)
react-aria's Button makes the trap easier to fall into, because its default type is `button`. A quebi `<Button {...form.insert.getButtonProps(...)}>` with no type attribute at all is broken in exactly the same way as one that says so — this check can only see the explicit case, which is why the rule is written as "an intent button submits" and not as "do not write type=button".
Calling the operation as a function is the other correct shape and needs no attribute at all: `form.insert({ name: fields.items.name })` from an onPress handler builds its own submitter internally with `document.createElement('button')`, which defaults to type=submit. Reach for it when the control cannot be a submit button; do not reach for the props and then take the submit away.