- adminAuth: exige Authorization: Bearer <HARDCAP_ADMIN_TOKEN> (o X-Admin-Token). Comparación timingSafeEqual sobre sha256 de ambos valores (sin leak de longitud ni timing). Fail-closed: sin token configurado, TODAS las rutas admin responden 503. - 401s ahora se loguean con método, ruta e IP (primera trazabilidad de acceso que tiene el admin API desde que existe). - token generado (32 bytes hex) y almacenado SOLO en /srv/hardcap-backend/.env — nunca impreso ni versionado. - test-admin-auth.mjs: 6 tests (sin token, incorrecto, vacío, correcto, header alternativo, misma-longitud-distinto) — todos pasan en la VPS. - desplegado en src + dist; servicio reiniciado y activo. Nota de contexto: el admin API carecía de auth desde su creación (index.ts: \x27TODO: add auth middleware before production\x27) y estuvo alcanzable sin credenciales en :3001 hasta la contención de hoy.