# que-ha-pasado

Novedades de los kanban (creaciones, movimientos y borrados de tarjetas) agregadas desde los MCPs de cada proyecto. Salida en **Markdown**, agrupada en una sección por proyecto, más nuevo primero.

## Rutas

- `GET /novedades` — todo lo disponible; rango absoluto con `?desde=` / `?hasta=`
- `GET /novedades/<ventana>` — relativa: `10min`, `30min`, `1hora`, `12horas`, `1dia`, `7dias`, `1semana`… (unidades: min/m, horas/hs/h, dias/d, semanas/sem)
- `GET /health` — estado del poller (JSON, sin auth)

## Auth

Header `X-Api-Key: <key>` o `?key=<key>`.

## Parámetros opcionales

- `project` — uno o varios (separados por coma o param repetido). Slug inexistente => 400 con la lista válida.
- `limit` — entero 1..1000, default 200. Aplica POR PROYECTO; si una sección se recorta, lo dice ("Mostrando X de Y") y el encabezado muestra el total real ("novedades: X de Y").
- `desde` / `hasta` — ISO 8601 o `YYYY-MM-DD` (= 00:00 UTC). Solo sin ventana relativa; combinarlos con ventana => 400. `since` es alias de `desde`.
- `refresh=1` — sondea los MCPs antes de responder (debounce 30 s).
- `format` — `md` (default) | `json` (eventos estructurados para consumo programático).

Parámetro desconocido o mal formado => 400: nada se ignora en silencio. El histórico de cada proyecto arranca en su primer sondeo (backfill 7 días); en tableros sin feed de movimientos, moves/removes tienen granularidad = intervalo de poll (5 min).

## Evento (format=json)

`{id, ts (ISO UTC), project, type: card_created|card_moved|card_removed, card_id, card_title, from, to, actor}`

## Formato de cada novedad

- 🆕 `<ts UTC>` — #<id> «título» → creada en `columna` · por <actor>
- ➡️ `<ts UTC>` — #<id> «título» → `origen` → `destino` · por <actor>
- 🗑️ `<ts UTC>` — #<id> «título» → eliminada (estaba en `columna`)

Proyectos conectados: iea-crm, iea-eduq, q-company, qautiva, qomunica
