14 lines
972 B
JSON
14 lines
972 B
JSON
{
|
|
"feature_id": "F-063",
|
|
"agent": "reviewer",
|
|
"verdict": "APPROVED",
|
|
"summary": "Minimal, surgical fix. The load effect was the only place where getSnap was used as a dep while also calling setState — exactly the shape that causes an infinite render loop. Moving getSnap into a ref keeps the same snapshot semantics but decouples the load effect from the form state. cancelled guard handles the unmount-during-fetch race. No API change, no payload change.",
|
|
"evidence": [
|
|
"git diff project/apps/admin/src/features/products/components/ProductEditor.tsx — only the load effect deps changed; data-mapping code is untouched",
|
|
"Load effect now has [productId] only (with eslint-disable for exhaustive-deps and a cancelled flag)",
|
|
"getSnapRef introduced to capture the latest snapshot getter without depending on its identity",
|
|
"npx tsc --noEmit (admin) — exit 0",
|
|
"./scripts/verify.sh — exit 0"
|
|
],
|
|
"timestamp": "2026-08-19T15:10:00Z"
|
|
} |