Skip to content

feat(engagement): engagement_sessions reading-session model (#178)#226

Merged
Piedra-1988 merged 2 commits into
developfrom
task/n04-02-01-engagement-sessions-table
Jul 9, 2026
Merged

feat(engagement): engagement_sessions reading-session model (#178)#226
Piedra-1988 merged 2 commits into
developfrom
task/n04-02-01-engagement-sessions-table

Conversation

@Piedra-1988

Copy link
Copy Markdown
Collaborator

Cierra #178 (I-F-N04-02-01).

Qué hace

Reemplaza el modelo (user_id, post_id)/link_clicked de ADR-001 por el modelo por sesión de lectura de la EPIC-N04: 1 fila por session_id con focused_seconds, max_scroll_pct y state (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 recrea engagement_sessions: session_id PK, FK post_id/user_id on delete cascade, CHECK en focused_seconds (>=0) y max_scroll_pct (0..1), enum engagement_state, 4 índices, trigger updated_at (reutiliza public.set_updated_at()), enable RLS + grant select.
  • supabase/tests/rls/schema_engagement_sessions.sql — tests pgTAP (estructura, constraints, upsert por session_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.md marcado como superseded.
  • lib/database.types.ts — esquema de engagement_sessions + enum engagement_state actualizados.

Verificación

  • pnpm supabase:test:rlsdb reset aplica la migración + 19 ficheros pgTAP, 144 tests, Result: PASS.
  • pnpm typecheck ✅ · pnpm lint ✅ (0 warnings).

Alcance y dependencias

AC (#178)

  • Migración up probada en local
  • UPSERT on conflict (session_id) do update
  • Constraints rechazan inválidos (max_scroll_pct = 1.5)
  • Cascade al borrar post
  • Cascade al borrar perfil
  • RLS habilitado (default-deny; policies en EPIC-S00)
  • Tests SQL de constraints en CI

🤖 Generated with Claude Code

Piedra-1988 and others added 2 commits July 9, 2026 22:08
…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>
@Piedra-1988

Copy link
Copy Markdown
Collaborator Author

✅ CI en verde — fallo de Markdown Lint resuelto

El único job en rojo era Markdown Lint (ADRs) (pnpm lint:md, markdownlint-cli2): 3 errores MD032/blanks-around-lists en docs/adr/0003-engagement-reading-sessions.md (líneas 54, 64, 69) — listas sin línea en blanco antes.

Fix (ddd67b4): añadida la línea en blanco previa a cada una de las tres listas. Verificado en local (pnpm lint:md → 0 errores). El resto de checks no se vieron afectados (cambio solo-markdown).

Estado de checks tras el fix

Check Estado
Markdown Lint (ADRs) ✅ pass
Lint ✅ pass
TypeScript ✅ pass
Tests (Jest) ✅ pass
RLS Tests (Supabase) ✅ pass
Integration Tests (Supabase) ✅ pass

Toda la suite en verde; PR lista para revisión/merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant