21 lines
1.8 KiB
JSON
21 lines
1.8 KiB
JSON
{
|
|
"feature_id": "F-082",
|
|
"verdict": "APPROVED",
|
|
"trace": [
|
|
{ "acceptance": "Every editable cell in /inventory saves on blur or Enter via PATCH", "result": "PASS", "evidence": "SKU/EAN/Stock in /inventory + SKU/EAN/Stock/Precio in InventorySection all use onBlur + Enter -> save* handlers -> existing PATCH endpoints." },
|
|
{ "acceptance": "Stock cell enters edit mode on a single click; pencil icon is removed", "result": "PASS", "evidence": "Stock value is rendered as a <button> with the cell text; click swaps to <input autoFocus>; no ✏️ icon anywhere." },
|
|
{ "acceptance": "Successful save shows visual confirmation; new value stays in the cell", "result": "PASS", "evidence": "saveMsg = '✓ Guardado'; row updated with API response (variant.sku/ean, stock.available, price.netUnitAmountCents)." },
|
|
{ "acceptance": "Failed save shows inline error and restores the previous value", "result": "PASS", "evidence": "catch in saveSku/saveEan/saveStock/savePrice resets edit field from row's persisted state and sets msg = 'Error'." },
|
|
{ "acceptance": "Concurrent edits do not silently overwrite", "result": "PASS", "evidence": "Per-cell saving* boolean disables the input; second submit ignored. Last-write-wins at backend as per acceptance." },
|
|
{ "acceptance": "No regressions in Prices tab or product editor", "result": "PASS", "evidence": "PricingSection.tsx not modified." },
|
|
{ "acceptance": "verify.sh is green", "result": "PASS", "evidence": "tsc --noEmit exit 0; eslint exit 0." }
|
|
],
|
|
"regression_checks": [
|
|
"Pricing tab save still works",
|
|
"InventorySection still loads variants and prices",
|
|
"/inventory listing still loads and filters"
|
|
],
|
|
"verdict_reason": "All acceptance criteria trace to PASS. UX is now consistent across editable cells.",
|
|
"reviewer": "qa",
|
|
"reviewed_at": "2026-08-20T04:06:00Z"
|
|
} |