Independent round-5 review of PR #161 (issue #89) found that bulk-PATCH now rejects negatives (NonNegativeInt), but the single-write GamesEndpoints Validate() (lines 225-239) and ApplyDto (line 278) still assign HoursPlayed unchecked — a negative value is rejected via bulk but persistable via create/update, unlike sibling fields (watchCount/listenCount use the bounded Count builder via single-write too, and the game form enforces min=0). Add a non-negative validate to GamesEndpoints Validate() for parity.
Independent round-5 review of PR #161 (issue #89) found that bulk-PATCH now rejects negatives (NonNegativeInt), but the single-write GamesEndpoints Validate() (lines 225-239) and ApplyDto (line 278) still assign HoursPlayed unchecked — a negative value is rejected via bulk but persistable via create/update, unlike sibling fields (watchCount/listenCount use the bounded Count builder via single-write too, and the game form enforces min=0). Add a non-negative validate to GamesEndpoints Validate() for parity.