By: Michael Lynch <git@mtlynch.io>
Use ItemName type for grocery item names throughout core logic Item names were passed around as plain strings, so the validated ItemName type only existed momentarily inside the sqlite layer before being converted back. This widens ItemName usage so names stay typed across the store interface, business logic, and shared types, matching how the Section type already flows through the codebase. Strings are now used for item names only at the true boundaries: - handlers parse user-controlled form/path input into ItemName and render names back to strings (templates, JSON) - the sqlite package converts ItemName to/from string immediately adjacent to SQL reads and writes types.StoredListItem.Name now uses ItemName (types.ItemSection.Name already did), and the Store interface methods that take/return item names use ItemName rather than string. Adds MustCreateNewItemName as a test helper, mirroring MustCreateNewSection.