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"
}
]
}