# F-131 — Buscador /products (admin) no filtra

## Diagnóstico

Reproducción:
1. Login en `http://192.168.18.93:3004/`
2. Navegar a `/products`
3. Escribir "almendra" en el buscador
4. → La lista sigue mostrando los 13 productos (no filtra)

Investigación:

```
GET http://192.168.18.93:3000/catalog/products?q=almendra&limit=5
  → backend responde: total=1, items=1 ("Almendras Crudas Ecologicas")  ✅ correcto

GET http://192.168.18.93:3004/api/catalog/products?q=almendra&limit=5
  → backend responde: total=13, items=13 (todos)                          ❌ filtro perdido
```

El **frontend y el backend funcionan bien aisladamente**. El problema está en el proxy del admin.

## Causa raíz

`apps/admin/src/app/api/[...path]/route.ts` (catch-all proxy que reenvía al backend) usa:

```ts
const path = req.nextUrl.pathname.replace('/api/', '');
const backendRes = await fetch(`${API}/${path}`, { ... });
```

**Nunca añade `req.nextUrl.search`**, por lo que cualquier query string (`?q=…`, `?limit=…`, `?offset=…`, etc.) se descarta antes de llegar al backend.

Esto afecta a **TODOS los métodos** (GET, POST, PATCH, PUT, DELETE) — todos usan `req.nextUrl.pathname` sin `req.nextUrl.search`.

Consecuencias visibles:
- `/products` no filtra (no llega `q`)
- `/inventory` no filtra (F-126, mismo síntoma)
- Paginación rota si la API espera `?limit=&offset=` (los `totalPages` se calculan con `data.items.length` en frontend, pero el `limit` real siempre cae al default del backend)
- Cualquier filtro futuro basado en query params falla silenciosamente

## Diseño

Extraer `const search = req.nextUrl.search` (ya viene con `?` o vacío) y concatenarlo en las 5 funciones handler.

```ts
const path = req.nextUrl.pathname.replace('/api/', '');
const search = req.nextUrl.search;  // "" o "?q=…&limit=…"
const backendRes = await fetch(`${API}/${path}${search}`, { ... });
```

Aplicar a: GET, POST, PATCH, PUT, DELETE.

## Riesgos

- Bajo. Es un bug donde se omite información; el cambio es añadir lo que faltaba.
- Riesgo residual: si alguna ruta backend asume un orden fijo de query params y se envía en otro orden, podría romper tests, pero nuestro backend usa URLSearchParams en server (orden-independiente).

## Plan

1. Editar `apps/admin/src/app/api/[...path]/route.ts` — añadir `const search = req.nextUrl.search` en cada handler y concatenarlo en la URL.
2. `cd apps/admin && npx tsc --noEmit`.
3. `cd apps/admin && npm run build`.
4. Verificar con `curl`:
   - `curl -b cookies /api/catalog/products?q=almendra` → 1 item
   - `curl -b cookies /api/catalog/products?q=almendra&limit=5` → 1 item, no 13
5. Cerrar gates.