4.4 KiB
Feature actual
Feature activa: F-094 (in_progress) — Create and explain product variants from Publish tab
Backlog: 162 features (152 done, 9 pending, 1 in_progress).
Últimas features cerradas: F-080, F-081, F-082, F-083, F-084, F-085, F-086, F-087.
Incidencia actual (2026-08-20)
Precios e Inventario indican que las variantes se crean desde Publicar, pero Publicar no ofrece creación ni explicación. F-094 añade la gestión de variantes allí.
Ú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→ adminexited during startup, log:Could not find a production build in the '.next' directory.apps/admin/.next/existe pero no contieneBUILD_IDnirequired-server-files.json.npx tsc --noEmitenapps/admin→error TS2353entax-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.