diff --git a/backlog/features.json b/backlog/features.json index a8bc93e..98c522e 100644 --- a/backlog/features.json +++ b/backlog/features.json @@ -6768,13 +6768,15 @@ "description": "Add final Tienda column to inventory, matching product list, linking to storefront product page.", "priority": "med", "risk": "low", - "status": "pending", + "status": "done", "created_at": "2026-08-22", "gates": { - "reviewer": false, - "security": false, - "qa": false - } + "reviewer": true, + "security": true, + "qa": true, + "close": true + }, + "completed_at": "2026-08-22T16:18:38Z" }, { "id": "F-163", diff --git a/project/apps/admin/src/app/(dashboard)/inventory/page.tsx b/project/apps/admin/src/app/(dashboard)/inventory/page.tsx index 2aea539..ea14313 100644 --- a/project/apps/admin/src/app/(dashboard)/inventory/page.tsx +++ b/project/apps/admin/src/app/(dashboard)/inventory/page.tsx @@ -6,6 +6,8 @@ import type { ProductVariant, StockAvailability, VariantPrice } from '@/types'; interface ProductRow { productId: string; productName: string; + productSlug: string; + productActive: boolean; variant: ProductVariant; stock: StockAvailability | null; price: VariantPrice | null; @@ -114,6 +116,8 @@ export default function InventoryPage() { productRows.push({ productId: product.id, productName: product.name, + productSlug: product.slug, + productActive: product.state === 'active', variant, stock: null, price: null, @@ -385,6 +389,7 @@ export default function InventoryPage() { Margen Stock Estado + Tienda @@ -535,6 +540,24 @@ export default function InventoryPage() { + + {row.productActive ? ( + + + + ) : ( + + )} + ); })} diff --git a/work/artifacts/F-162/architect.md b/work/artifacts/F-162/architect.md new file mode 100644 index 0000000..96fb70f --- /dev/null +++ b/work/artifacts/F-162/architect.md @@ -0,0 +1,3 @@ +# F-162 — Diseño + +Extender `ProductRow` local con slug y estado activo obtenidos del listado ya cargado. Añadir la última columna Tienda copiando el patrón visual/accesible de Productos. Sin nuevas peticiones ni lógica duplicada. diff --git a/work/artifacts/F-162/documenter.md b/work/artifacts/F-162/documenter.md new file mode 100644 index 0000000..5745e45 --- /dev/null +++ b/work/artifacts/F-162/documenter.md @@ -0,0 +1,3 @@ +# F-162 + +Inventario incluye columna Tienda con enlace al producto activo en frontend. diff --git a/work/artifacts/F-162/implementer.md b/work/artifacts/F-162/implementer.md new file mode 100644 index 0000000..aad141c --- /dev/null +++ b/work/artifacts/F-162/implementer.md @@ -0,0 +1,3 @@ +# F-162 — Implementer + +Inventario conserva slug/estado del producto ya cargado y añade columna final Tienda con el mismo enlace externo accesible del listado Productos. Sin requests adicionales. Admin build y tsc PASS. diff --git a/work/artifacts/F-162/leader-close.json b/work/artifacts/F-162/leader-close.json new file mode 100644 index 0000000..73f6943 --- /dev/null +++ b/work/artifacts/F-162/leader-close.json @@ -0,0 +1 @@ +{"feature_id":"F-162","agent":"leader","stage":"close","verdict":"APPROVED","checks":[{"item":"all gates/build","ok":true}],"issues":[]} diff --git a/work/artifacts/F-162/qa.json b/work/artifacts/F-162/qa.json new file mode 100644 index 0000000..ffc12f3 --- /dev/null +++ b/work/artifacts/F-162/qa.json @@ -0,0 +1 @@ +{"feature_id":"F-162","agent":"qa","stage":"qa_gate","verdict":"APPROVED","checks":[{"item":"last column Tienda","ok":true},{"item":"active link URL","ok":true},{"item":"inactive fallback","ok":true},{"item":"build","ok":true}],"issues":[]} diff --git a/work/artifacts/F-162/reviewer.json b/work/artifacts/F-162/reviewer.json new file mode 100644 index 0000000..6f6c115 --- /dev/null +++ b/work/artifacts/F-162/reviewer.json @@ -0,0 +1 @@ +{"feature_id":"F-162","agent":"reviewer","stage":"review_gate","verdict":"APPROVED","checks":[{"item":"pattern reused","ok":true},{"item":"no extra requests","ok":true},{"item":"build","ok":true}],"issues":[]} diff --git a/work/artifacts/F-162/security.json b/work/artifacts/F-162/security.json new file mode 100644 index 0000000..4febe73 --- /dev/null +++ b/work/artifacts/F-162/security.json @@ -0,0 +1 @@ +{"feature_id":"F-162","agent":"security","stage":"security_gate","verdict":"APPROVED","checks":[{"item":"noopener noreferrer","ok":true},{"item":"slug from API","ok":true}],"issues":[]} diff --git a/work/current.md b/work/current.md index 6292ce4..97890db 100644 --- a/work/current.md +++ b/work/current.md @@ -1,3 +1,3 @@ -# F-165 — Use brand logo in collapsed sidebar +# F-162 — Add storefront product link to inventory -Sustituir el emoji del sidebar colapsado por `/images/logo-main.png`, con dimensiones icon-only y `alt="mercadodevida"`. Mantener el logo completo en expanded/mobile. +Añadir columna final **Tienda** en Inventario. Cada producto activo enlaza a `http://192.168.18.93:3003/products/{slug}` en nueva pestaña, reutilizando icono, estilos y seguridad `noopener noreferrer` del listado Productos. diff --git a/work/runtime-status.json b/work/runtime-status.json index c9ce730..550df0a 100644 --- a/work/runtime-status.json +++ b/work/runtime-status.json @@ -1,68 +1,68 @@ { - "feature_id": "F-165", + "feature_id": "F-162", "stage": "close", "agent": "leader", - "action": "Close collapsed logo fix", + "action": "Close Inventory link fix", "state": "running", "next_agent": "leader", "waiting_for": "Seleccionar una feature pending y actualizar este estado", - "updated_at": "2026-08-22T16:15:43Z", + "updated_at": "2026-08-22T16:18:19Z", "timeline": [ { - "ts": "2026-08-22T16:13:46Z", + "ts": "2026-08-22T16:16:06Z", "agent": "leader", "stage": "intake", "state": "running", - "message": "Replace collapsed emoji with brand logo" + "message": "Add storefront link column to Inventory" }, { - "ts": "2026-08-22T16:13:57Z", + "ts": "2026-08-22T16:16:31Z", "agent": "architect", "stage": "design", "state": "running", - "message": "Specify collapsed brand mark" + "message": "Reuse Products storefront link pattern" }, { - "ts": "2026-08-22T16:14:08Z", + "ts": "2026-08-22T16:16:54Z", "agent": "implementer", "stage": "build", "state": "running", - "message": "Render logo-main in collapsed sidebar" + "message": "Add Tienda link column to Inventory" }, { - "ts": "2026-08-22T16:14:37Z", + "ts": "2026-08-22T16:17:31Z", "agent": "reviewer", "stage": "review_gate", "state": "running", - "message": "Review collapsed brand logo" + "message": "Review Inventory storefront link" }, { - "ts": "2026-08-22T16:14:54Z", + "ts": "2026-08-22T16:17:46Z", "agent": "security", "stage": "security_gate", "state": "running", - "message": "Check static asset change" + "message": "Check external storefront link safety" }, { - "ts": "2026-08-22T16:15:02Z", + "ts": "2026-08-22T16:17:57Z", "agent": "qa", "stage": "qa_gate", "state": "running", - "message": "Validate collapsed logo acceptance" + "message": "Validate Inventory Tienda column" }, { - "ts": "2026-08-22T16:15:31Z", + "ts": "2026-08-22T16:18:09Z", "agent": "documenter", "stage": "document", "state": "running", - "message": "Document collapsed logo" + "message": "Document Inventory storefront link" }, { - "ts": "2026-08-22T16:15:43Z", + "ts": "2026-08-22T16:18:19Z", "agent": "leader", "stage": "close", "state": "running", - "message": "Close collapsed logo fix" + "message": "Close Inventory link fix" } ] }