feat(F-090): completed feature

This commit is contained in:
chattie
2026-08-20 21:40:41 +02:00
parent 760b4d0be2
commit 84bf380987
11 changed files with 169 additions and 12 deletions

View File

@@ -0,0 +1,17 @@
# 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.

View File

@@ -0,0 +1,15 @@
{
"feature_id": "F-090",
"agent": "leader",
"verdict": "APPROVED",
"summary": "F-090 restores brand and expiration data in the admin product list and keeps successful SKU/EAN edits visible from updated row state.",
"evidence": [
"reviewer.json verdict=APPROVED",
"security.json verdict=APPROVED",
"qa.json verdict=APPROVED",
"scripts/verify.sh exit 0",
"Root and admin typechecks exit 0",
"Root test suite: 133 passed, 56 skipped"
],
"timestamp": "2026-08-20T19:40:40Z"
}

View File

@@ -0,0 +1,14 @@
{
"feature_id": "F-090",
"agent": "qa",
"verdict": "APPROVED",
"summary": "Product metadata serialization and updated SKU/EAN row rendering pass backend, admin, unit, and harness checks.",
"evidence": [
"Root npm run typecheck exit 0",
"Admin npx tsc --noEmit exit 0",
"Admin ESLint on InventorySection exit 0",
"Root npm test: 42 files passed, 133 tests passed, 15 files/56 tests skipped",
"scripts/verify.sh exit 0"
],
"timestamp": "2026-08-20T19:40:30Z"
}

View File

@@ -0,0 +1,13 @@
{
"feature_id": "F-090",
"agent": "reviewer",
"verdict": "APPROVED",
"summary": "The catalog response now exposes existing brand and expiration data, and SKU/EAN cells render the row state that is updated by the existing variant PATCH flow.",
"evidence": [
"serializeProduct includes brand and expirationDate without changing persistence or routes",
"SKU and EAN non-editing cells use r.variant values updated after save",
"Existing PATCH /products/:id/variants/:variantId remains the persistence path",
"Root and admin TypeScript checks pass"
],
"timestamp": "2026-08-20T19:40:00Z"
}

View File

@@ -0,0 +1,13 @@
{
"feature_id": "F-090",
"agent": "security",
"verdict": "APPROVED",
"summary": "The change exposes only existing product fields already authorized by the admin endpoint and changes no authorization, validation, SQL, or client input boundaries.",
"evidence": [
"brand and expirationDate are existing domain fields from the authenticated admin catalog response",
"SKU/EAN still use the existing authenticated admin PATCH endpoint and backend validation",
"No new dependencies, secrets, routes, SQL, or authorization behavior",
"No unsafe URL or HTML handling added"
],
"timestamp": "2026-08-20T19:40:10Z"
}