- POST /api/me/preferences (actualiza frecuencia/hora)
- POST /api/tasks/:id/claim (reclamar tarea; idempotente; requiere sesión, tarea abierta y gating)
- POST /api/tasks/:id/unassign (soltar tarea; idempotente; requiere sesión, tarea abierta y gating)
- PATCH /api/tasks/:id (actualiza due_date: 'YYYY-MM-DD' | null; valida formato; requiere sesión, tarea abierta y gating)
- POST /api/tasks/:id/complete (marca como completada; idempotente. Si tiene group_id: cualquier miembro activo del grupo allowed; si no, solo un asignado. Devuelve completed y completed_at)
- PATCH /api/tasks/:id (actualiza { due_date: 'YYYY-MM-DD' | null, description?: string }; valida due_date y normaliza/sanea description como texto plano, 1–1000 chars, colapsando espacios; requiere sesión, tarea abierta y gating)
- GET /api/integrations/feeds
- Genera automáticamente (si faltan) tokens B por cada grupo activo del usuario.
- Devuelve URLs para: ICS personal (mis tareas), ICS por grupo (B), y opcional ICS multigrupo (C).