# F-090 — Implementer evidence

## Changes

- `project/src/modules/catalog/api/catalog.routes.ts`
  - `serializeProduct` now includes `brand` and `expirationDate`, which are already present on the domain/repository product.
  - This fixes `/catalog/products` responses consumed by the admin listing.
- `project/apps/admin/src/features/products/components/sections/InventorySection.tsx`
  - SKU and EAN display/edit controls now use `rows[variant.id].variant`, the state updated after a successful PATCH, instead of the immutable initial `variants` array.
  - This keeps the newly saved value visible after leaving edit mode and when opening the editor again.

## Validation

- Root `npm run typecheck` → exit 0
- Admin `npx tsc --noEmit` → exit 0
- Admin ESLint on `InventorySection.tsx` → exit 0
- Backend PATCH route remains `/products/:id/variants/:variantId`; no API contract or schema change.
