Every numeric input rendered through CippFormComponent (type="number") hands its value to the form as a string — the field registers with react-hook-form without a value coercion option, and HTML number inputs always report string values. There are 52 of these fields across the app (schedulers, offboarding, Safe Links, Exchange settings, GDAP invites, retention settings, report builder, and more).
Most of the time this is invisible because the API side coerces loosely, and a few forms convert their own values. It becomes a real bug wherever the value is forwarded verbatim to a strictly-typed Graph property — that's exactly how GitHub issue #396 (CA templates saving signInFrequency.value as a string and failing to deploy) happened, and more of the 52 call sites are likely exposed the same way.
Fix: coerce in the number case itself (setValueAs that maps empty to null and everything else through Number — not valueAsNumber, which turns an empty field into NaN), plus an audit of the consumers that currently compensate on their own, and a regression test on the component.
