Evidencia
Durante la prueba del flujo Notion → búsqueda → guardado → frontend del 2026-07-21:
- El proyecto Supabase
vvrcwrmghindrbpyxhku respondió con estado ACTIVE_HEALTHY.
- La consulta de migraciones aplicadas devolvió una lista vacía.
- La consulta de tablas del esquema
public devolvió una lista vacía.
- No existen las tablas
ai_radar_runs ni ai_radar_signals esperadas por la aplicación.
- Dos señales recientes pasaron la validación de
contracts/airadar-daily-signals.schema.json y obtuvieron huellas estables, pero no pudieron persistirse.
Pasos para reproducir
- Consultar el proyecto Supabase
vvrcwrmghindrbpyxhku.
- Listar las migraciones aplicadas.
- Listar las tablas del esquema
public.
- Verificar que no aparecen
ai_radar_runs ni ai_radar_signals.
- Preparar un lote válido para
POST /api/ai-radar/ingest con el contrato airadar.daily-signals.
- Intentar la ingesta desde un entorno server-side configurado, sin exponer credenciales al cliente.
Resultado esperado
La migración supabase/migrations/20260721162723_create_ai_radar_persistence.sql está aplicada y crea las tablas de ejecuciones y señales con los índices, restricciones y RLS definidos. Un lote válido se persiste de forma idempotente y devuelve run_id y conteos.
Resultado actual
Supabase está disponible, pero no tiene migraciones ni tablas. La ingesta no puede persistir señales nuevas y no existe una base de datos que el frontend pueda consultar.
Archivos probables
supabase/migrations/20260721162723_create_ai_radar_persistence.sql
docs/ai-radar-persistence.md
api/ai-radar/ingest.js
api/ai-radar/signals.js
api/_lib/airadar.js
tests/airadar-persistence.test.mjs
Criterios de aceptación
- La migración de persistencia figura como aplicada en el proyecto Supabase objetivo.
- Existen
public.ai_radar_runs y public.ai_radar_signals con el esquema esperado.
- RLS está activado y los roles
anon y authenticated no obtienen acceso indebido.
- Una ingesta server-side de un lote válido devuelve
run_id, estado y conteos de creadas, actualizadas, omitidas y errores.
- Reingestar el mismo lote actualiza por
fingerprint sin duplicar señales.
- Existe una consulta administrativa o server-side documentada para verificar las filas guardadas sin exponer la clave de servicio.
- Las pruebas existentes pasan tras aplicar la migración.
Evidencia
Durante la prueba del flujo Notion → búsqueda → guardado → frontend del 2026-07-21:
vvrcwrmghindrbpyxhkurespondió con estadoACTIVE_HEALTHY.publicdevolvió una lista vacía.ai_radar_runsniai_radar_signalsesperadas por la aplicación.contracts/airadar-daily-signals.schema.jsony obtuvieron huellas estables, pero no pudieron persistirse.Pasos para reproducir
vvrcwrmghindrbpyxhku.public.ai_radar_runsniai_radar_signals.POST /api/ai-radar/ingestcon el contratoairadar.daily-signals.Resultado esperado
La migración
supabase/migrations/20260721162723_create_ai_radar_persistence.sqlestá aplicada y crea las tablas de ejecuciones y señales con los índices, restricciones y RLS definidos. Un lote válido se persiste de forma idempotente y devuelverun_idy conteos.Resultado actual
Supabase está disponible, pero no tiene migraciones ni tablas. La ingesta no puede persistir señales nuevas y no existe una base de datos que el frontend pueda consultar.
Archivos probables
supabase/migrations/20260721162723_create_ai_radar_persistence.sqldocs/ai-radar-persistence.mdapi/ai-radar/ingest.jsapi/ai-radar/signals.jsapi/_lib/airadar.jstests/airadar-persistence.test.mjsCriterios de aceptación
public.ai_radar_runsypublic.ai_radar_signalscon el esquema esperado.anonyauthenticatedno obtienen acceso indebido.run_id, estado y conteos de creadas, actualizadas, omitidas y errores.fingerprintsin duplicar señales.