96 lines
5.0 KiB
Markdown
96 lines
5.0 KiB
Markdown
# Feature actual
|
|
|
|
## Feature activa: ninguna — F-096 cerrada
|
|
|
|
Backlog: 164 features (155 done, 9 pending, 0 in_progress).
|
|
|
|
Últimas features cerradas: **F-080**, **F-081**, **F-082**, **F-083**, **F-084**, **F-085**, **F-086**, **F-087**.
|
|
|
|
## Última incidencia resuelta (2026-08-20)
|
|
|
|
F-096 cerrada con todos los gates aprobados. Ajustes permite configurar modelo IA, API key y prompts SEO; los campos vacíos se generan sin sobrescribir los manuales.
|
|
|
|
## Última incidencia resuelta (2026-08-20)
|
|
|
|
F-095 cerrada con todos los gates aprobados. Las imágenes URL se descargan y almacenan en uploads locales antes de adjuntarse.
|
|
|
|
## Incidencia anterior (2026-08-20)
|
|
|
|
Añadir una imagen por URL devolvía 400 porque el flujo hacía un PATCH vacío del producto y adjuntaba directamente la URL remota.
|
|
|
|
## Última incidencia resuelta (2026-08-20)
|
|
|
|
F-094 cerrada con todos los gates aprobados. Publicar permite crear variantes y explica SKU/EAN, precios y stock.
|
|
|
|
## Incidencia anterior (2026-08-20)
|
|
|
|
Precios e Inventario indicaban que las variantes se creaban desde Publicar, pero Publicar no ofrecía creación ni explicación.
|
|
|
|
## Última incidencia resuelta (2026-08-20)
|
|
|
|
F-093 cerrada con todos los gates aprobados. Inventario busca ahora por EAN o nombre de producto.
|
|
|
|
## Incidencia anterior (2026-08-20)
|
|
|
|
La búsqueda de Inventario enviaba `q`, pero el listado admin solo filtraba por nombre de producto.
|
|
|
|
## Última incidencia resuelta (2026-08-20)
|
|
|
|
F-092 cerrada con todos los gates aprobados. `Fecha de caducidad` está ahora en General; backend y admin fueron reconstruidos y desplegados.
|
|
|
|
## Incidencia anterior (2026-08-20)
|
|
|
|
`Fecha de caducidad` estaba en la pestaña SEO de la ficha de producto. F-092 la movió a General sin cambiar el estado, payload ni guardado.
|
|
|
|
## Última incidencia resuelta (2026-08-20)
|
|
|
|
F-091 cerrada con todos los gates aprobados. Los conflictos de SKU/EAN indican ahora qué campo está duplicado y Enter + blur no generan PATCH simultáneos.
|
|
|
|
## Incidencia anterior (2026-08-20)
|
|
|
|
El PATCH de variantes devolvía `409 PRODUCT_VARIANT_CODE_EXISTS` cuando el SKU o EAN ya estaba usado por otra variante. El editor mostraba solo `Error` y la combinación Enter + blur podía intentar enviar dos veces.
|
|
|
|
## Última incidencia resuelta (2026-08-20)
|
|
|
|
F-090 cerrada con todos los gates aprobados. El listado ya recibe marca/caducidad y los valores SKU/EAN guardados permanecen visibles tras salir del campo.
|
|
|
|
## Incidencia anterior (2026-08-20)
|
|
|
|
El listado admin mostraba `—` para marca/caducidad porque la serialización del catálogo omitía ambos campos. En el editor de producto, SKU/EAN se guardaban en `rows` pero la vista no editable usaba el array `variants` inicial y volvía a mostrar valores antiguos.
|
|
|
|
## Última incidencia resuelta (2026-08-20)
|
|
|
|
F-089 cerrada con todos los gates aprobados. El enlace del listado admin apunta ahora a `http://192.168.18.93:3003/products/<slug>`, ruta del frontend customer.
|
|
|
|
## Incidencia anterior (2026-08-20)
|
|
|
|
El enlace de producto del listado admin apuntaba a `http://192.168.18.93:3003/productos/<slug>`, pero el frontend customer usa `/products/<slug>`. F-089 corrigió únicamente ese path.
|
|
|
|
## Última incidencia resuelta (2026-08-20)
|
|
|
|
F-088 cerrada con todos los gates aprobados. El admin responde HTTP 200 en `http://192.168.18.93:3004/`.
|
|
|
|
## Symptom reportado por el operador (2026-08-20)
|
|
|
|
`http://192.168.18.93:3004/` → `ERR_CONNECTION_REFUSED`. El servicio admin del monolito no se mantiene en pie. Diagnóstico:
|
|
|
|
- `monolith.sh prod status` → admin `exited during startup`, log: `Could not find a production build in the '.next' directory`.
|
|
- `apps/admin/.next/` existe pero no contiene `BUILD_ID` ni `required-server-files.json`.
|
|
- `npx tsc --noEmit` en `apps/admin` → `error TS2353` en `tax-rates/page.tsx(59,33)`: `'appliesTo' does not exist in type 'Partial<{ name: string; ratePercent: number; active: boolean; }>'`.
|
|
|
|
## Root cause
|
|
|
|
F-085 añadió el handler `saveTipo` que llama a `taxApi.update(id, { appliesTo })` y extendió la página con UI de edición inline, pero olvidó extender la firma de `taxApi.update` en `apps/admin/src/lib/api-client.ts`. Resultado: `next build` aborta por typecheck, no se genera `BUILD_ID`, `next start` falla y el admin no puede servir nada en :3004. El backend en `pricing.routes.ts` ya valida y persiste `appliesTo`, así que el fix es 100% frontend (type only).
|
|
|
|
## Fix
|
|
|
|
Ampliar la firma `Partial<{...}>` de `taxApi.update` para aceptar `appliesTo: 'general' | 'reduced' | 'super-reduced'` (mismo enum que el backend). Después: `npm run build` en `apps/admin` produce `BUILD_ID`, `monolith.sh prod` mantiene el admin vivo y `http://192.168.18.93:3004/` responde 200.
|
|
|
|
## Pending tickets
|
|
|
|
No quedan tickets F-* pendientes. El backlog mantiene nueve tickets de otras líneas para futura selección.
|
|
|
|
## Nota de intake (2026-08-20)
|
|
|
|
El operador reportó `ERR_CONNECTION_REFUSED` en :3004. El triage lo une a F-085 (cambio parcial sin actualizar la firma TS). Se crea F-088 para reparar la regresión sin reabrir F-085, y se ejecuta por orquestra secuencial.
|