feat(engagement): engagement_sessions reading-session model (#178)#226
Merged
Conversation
…del (#178) Sustituye el modelo (user_id, post_id)/link_clicked de ADR-001 por uno por sesión de lectura: 1 fila por session_id con focused_seconds, max_scroll_pct y state (viewed → skimmed → read). - migración 20260710000000: dropea la tabla anterior y recrea engagement_sessions (session_id PK, FK post_id/user_id on delete cascade, CHECK en focused_seconds y max_scroll_pct, enum engagement_state, índices, trigger updated_at, enable RLS + grant select). - schema_engagement_sessions.sql: tests pgTAP de estructura, constraints, upsert por session_id y cascades (post y perfil). - rls_engagement_sessions.sql: reemplazado por test de default-deny (las policies reales llegan en EPIC-S00). - ADR-0003 (reading sessions) supersede ADR-001; database.types.ts actualizado al nuevo esquema + enum engagement_state. Alcance: solo tabla + RLS enable + tests SQL. La Edge Function track-engagement queda incoherente hasta #179; policies RLS en EPIC-S00. FK user_id -> profiles(id): #179 y EPIC-S00 deben mapear auth.uid() -> profiles.id. supabase db reset + pgTAP: 144 tests PASS. typecheck + lint en verde. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Surround lists with blank lines (blanks-around-lists) so the ADR markdown lint CI check passes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Collaborator
Author
✅ CI en verde — fallo de Markdown Lint resueltoEl único job en rojo era Markdown Lint (ADRs) ( Fix ( Estado de checks tras el fix
Toda la suite en verde; PR lista para revisión/merge. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Cierra #178 (I-F-N04-02-01).
Qué hace
Reemplaza el modelo
(user_id, post_id)/link_clickedde ADR-001 por el modelo por sesión de lectura de la EPIC-N04: 1 fila porsession_idconfocused_seconds,max_scroll_pctystate (viewed → skimmed → read). Alinea el servidor con el cliente ya mergeado (#173).Cambios
supabase/migrations/20260710000000_replace_engagement_sessions_n04_schema.sql— dropea la tabla anterior y recreaengagement_sessions:session_idPK, FKpost_id/user_idon delete cascade, CHECK enfocused_seconds (>=0)ymax_scroll_pct (0..1), enumengagement_state, 4 índices, triggerupdated_at(reutilizapublic.set_updated_at()),enable RLS+grant select.supabase/tests/rls/schema_engagement_sessions.sql— tests pgTAP (estructura, constraints, upsert porsession_id, cascades de post y perfil).supabase/tests/rls/rls_engagement_sessions.sql— reemplazado por test de default-deny (policies reales en EPIC-S00).docs/adr/0003-engagement-reading-sessions.md— ADR nuevo (Aceptado; supersedes ADR-001);docs/adr/0001-engagement.mdmarcado como superseded.lib/database.types.ts— esquema deengagement_sessions+ enumengagement_stateactualizados.Verificación
pnpm supabase:test:rls→db resetaplica la migración + 19 ficheros pgTAP, 144 tests, Result: PASS.pnpm typecheck✅ ·pnpm lint✅ (0 warnings).Alcance y dependencias
enable RLS+ tests SQL. Policies RLS → EPIC-S00 / I-F-S00-04-05. Edge Function → I-F-N04-02-02 — Edge Function track-engagement (UPSERT + transición viewed/engaged/clicked) #179.track-engagementactual (link_clicked, N03-04) queda rota hasta I-F-N04-02-02 — Edge Function track-engagement (UPSERT + transición viewed/engaged/clicked) #179 (on conflict (user_id, post_id)sobre columnas inexistentes).user_id → profiles(id)(literal de I-F-N04-02-01 — Tabla engagement_sessions (1 fila por session_id) con columnas link_clicked y status #178, requerido por el cascade de perfil): guardaprofiles.id, noauth.uid(). I-F-N04-02-02 — Edge Function track-engagement (UPSERT + transición viewed/engaged/clicked) #179 y EPIC-S00 deben mapearauth.uid() → profiles.id.supabase gen types --localestá bloqueado en el entorno (CLI v2.106 exige login), así quedatabase.types.tsse actualizó a mano con la forma que generaría el CLI.AC (#178)
on conflict (session_id) do updatemax_scroll_pct = 1.5)🤖 Generated with Claude Code