feat(F-132): completed feature

This commit is contained in:
chattie
2026-08-21 17:45:12 +02:00
parent 3058c81b31
commit f37333bb56
16 changed files with 368 additions and 14 deletions

View File

@@ -5235,6 +5235,143 @@
"close": true
},
"completed_at": "2026-08-21T15:36:50Z"
},
{
"id": "F-124",
"type": "fix",
"title": "Two-column layout for Categorías + Atributos in product editor",
"description": "En /products/[id] y /products/new, los bloques Categorías y Atributos se renderizan apilados ocupando todo el ancho. Como ambos son cortos (listas/checkbox grid), deberían ir lado a lado en desktop (grid-cols-2). Móvil sigue apilado.",
"priority": "med",
"risk": "low",
"status": "pending",
"created_at": "2026-08-21",
"gates": {
"reviewer": false,
"security": false,
"qa": false
}
},
{
"id": "F-125",
"type": "feature",
"title": "Allow backward status transitions in /orders/[id] + resend email on SHIPPED↔PROCESSING",
"description": "En /orders/[id] editar pedido, los status no permiten volver atrás (PROCESSING→PENDING, SHIPPED→PROCESSING, etc.). El operador necesita: (1) poder revertir un pedido a un estado anterior si se equivocó; (2) cuando un pedido cambia entre PROCESSING y SHIPPED (en cualquier dirección), reenviar el email al cliente con el transportista/tracking actualizado (no solo en la transición inicial a SHIPPED).",
"priority": "high",
"risk": "low",
"status": "pending",
"created_at": "2026-08-21",
"gates": {
"reviewer": false,
"security": false,
"qa": false
}
},
{
"id": "F-126",
"type": "bug",
"title": "Inventory search by partial EAN or product name",
"description": "El buscador en /inventory no filtra correctamente al escribir parte o todo un EAN o nombre de producto. F-093 añadió búsqueda por nombre/EAN pero el operador reporta que sigue sin funcionar bien. Revisar el endpoint /inventory, el frontend /inventory page y confirmar que el query param q se mapea a un ILIKE correcto sobre el nombre del producto y el EAN de la variante.",
"priority": "high",
"risk": "low",
"status": "pending",
"created_at": "2026-08-21",
"gates": {
"reviewer": false,
"security": false,
"qa": false
}
},
{
"id": "F-127",
"type": "bug",
"title": "Delete brands or categories still fails in admin UI",
"description": "Tras F-120 (DELETE /categories/:id cascade en backend, migración 041) y F-022 (DELETE /brands/:id), el operador sigue reportando que no puede eliminar marcas o categorías. El backend está OK (curl DELETE funciona) pero la UI puede estar mostrando el error antiguo por caché del navegador, o el código frontend hace un check previo (hasChildren, hasProducts) que devuelve 409 y bloquea el botón.",
"priority": "high",
"risk": "low",
"status": "pending",
"created_at": "2026-08-21",
"gates": {
"reviewer": false,
"security": false,
"qa": false
}
},
{
"id": "F-128",
"type": "fix",
"title": "CMS page templates load with current content for in-place modification",
"description": "En /cms, las plantillas del sistema (footer, política de privacidad, etc.) ya tienen contenido por defecto. Al pulsar Editar sobre una plantilla, se debería cargar el contenido actual (no vacío) en el editor Lexical para poder modificarlo, no partir de un textarea en blanco.",
"priority": "high",
"risk": "low",
"status": "pending",
"created_at": "2026-08-21",
"gates": {
"reviewer": false,
"security": false,
"qa": false
}
},
{
"id": "F-129",
"type": "fix",
"title": "Logs viewer: order DESC and remove autoscroll",
"description": "En el visor de logs (/logs), los eventos deben ordenarse DESC (más reciente arriba). El autoscroll debe estar desactivado para que el usuario vea siempre el último evento en la parte superior sin necesidad de scroll. El polling puede seguir actualizando en vivo.",
"priority": "low",
"risk": "low",
"status": "pending",
"created_at": "2026-08-21",
"gates": {
"reviewer": false,
"security": false,
"qa": false
}
},
{
"id": "F-130",
"type": "fix",
"title": "Inventory list: expiration date editable inline",
"description": "En /inventory, el operador quiere editar la fecha de caducidad directamente desde la lista (estilo click-to-edit como SKU/EAN/Stock en F-075), sin necesidad de abrir el editor del producto.",
"priority": "med",
"risk": "low",
"status": "pending",
"created_at": "2026-08-21",
"gates": {
"reviewer": false,
"security": false,
"qa": false
}
},
{
"id": "F-131",
"type": "bug",
"title": "Products list search in admin does not filter",
"description": "El buscador de /products (admin panel) no filtra los productos al escribir. Revisar el input de búsqueda en la lista, el endpoint backend y los query params enviados. Debe buscar por nombre y slug, idealmente con ILIKE case-insensitive.",
"priority": "high",
"risk": "low",
"status": "pending",
"created_at": "2026-08-21",
"gates": {
"reviewer": false,
"security": false,
"qa": false
}
},
{
"id": "F-132",
"type": "bug",
"title": "Frontend home DYNAMIC_SERVER_USAGE: FeaturedProducts and CategoriesGrid use cache: 'no-store'",
"description": "Build del frontend falla con DYNAMIC_SERVER_USAGE en / porque (1) FeaturedProducts hace fetch con cache: 'no-store' a /products/search?limit=8, y (2) CategoriesGrid hace fetch con cache: 'no-store' a /categories/tree. El home estaba intentándose prerenderizar estáticamente. Fix: usar ISR con revalidate=60 en el home page, o quitar cache: 'no-store' de los dos componentes para que la página pueda ser SSG/ISR. Adicionalmente hay 4 warnings de turbopack sobre filesystem access dinámico en frontend/src/app/uploads/[...path]/route.ts (path.join(root, filename)). Añadir turbopackIgnore comments para silenciarlos.",
"priority": "high",
"risk": "low",
"status": "done",
"created_at": "2026-08-21",
"gates": {
"reviewer": true,
"security": true,
"qa": true,
"close": true
},
"completed_at": "2026-08-21T15:45:12Z"
}
]
}