# Test — Form Hygiene (Numeric Inputs)

**Task**: AZ-475_test_form_hygiene
**Name**: Numeric form input — empty / non-numeric rejection
**Description**: Implement the 2 blackbox tests pinning numeric form input validation per AC-26 — empty input does not silently zero, non-numeric input is rejected; in both cases NO PUT fires.
**Complexity**: 2 points
**Dependencies**: AZ-456_test_infrastructure
**Component**: 03_shared-ui (form components) + 09_settings (Blackbox Tests)
**Tracker**: AZ-475
**Epic**: AZ-455

## Problem

Silent zero-default on empty numeric input is a common regression (because `Number('') === 0`). It causes user settings to drift to 0 invisibly, which then propagates to the server. Both inputs must be REJECTED at the UI layer, not coerced.

## Outcome

- 2 scenarios pass.

## Scope

### Included

| Scenario | Profile | Source file |
|----------|---------|-------------|
| FT-N-11 — numeric field with empty input — no silent zero | fast | blackbox-tests.md |
| FT-N-12 — numeric field with non-numeric input — rejected | fast | blackbox-tests.md |

### Excluded

- Range / min-max validation (out of scope for the baseline; per-feature tasks in Phase B).

## Acceptance Criteria

**AC-1: Empty rejection**
FT-N-11 — when a numeric input is cleared and the user attempts to submit, a validation error is shown; no PUT fires.

**AC-2: Non-numeric rejection**
FT-N-12 — when a numeric input receives "abc", the field surfaces a validation error and no PUT fires.

## System Under Test Boundary

- System under test: every numeric form field in the SPA (Settings, Admin classes, etc.).
- Allowed stubs: MSW for the PUT endpoint (so test can verify ABSENCE of the request).
- Disallowed: stubbing form components.
- Expected observables per `results_report.md` rows 66-67.
