Files
motor-de-encuestas/sprints/sprint-1/ETAPA_1B_PROMPT.md

4.1 KiB

ETAPA 1B — Corrección del seed + ejecución/validación real

Prompt versionado (Patrón B.1). Cierra los huecos que la auditoría encontró en la Etapa 1: seed inventado/incompleto y nada ejecutado. Claude Code lo ejecuta tras leer CLAUDE.md, DATA_MODEL.md, SEED_SPEC.md y este prompt.

1. Objetivo

Reescribir supabase/seed.sql para que refleje el instrumento real (34 preguntas) según SEED_SPEC.md, y ejecutar la base contra el proyecto Supabase Cloud ya vinculado (sin Docker) para verificar de verdad lo que la Etapa 1 dejó sin correr.

2. Contexto previo

La Etapa 1 creó esquema, RLS, triggers, agg_segment y un seed incorrecto (9 de 34 preguntas; B1/C1/D1 tipadas como yes_no; supuesto inválido C1→G4; D1 sin reglas; falta Sección A). El esquema NO se ejecutó (no había Docker). Ahora hay un proyecto Supabase Cloud vinculado (supabase link).

3. Decisiones ya tomadas (no consultar de nuevo)

  • Las 34 preguntas, tipos, opciones y condicionales están en SEED_SPEC.md — es el contrato.
  • conditional_rules van en la pregunta dependiente ({if_question, op:'eq', value:'Sí', action:'show'}).
  • B1/C1/D1 = single_choice de 3 opciones; solo "Sí" dispara el bloque.
  • is_sensitive=true en las preguntas marcadas en SEED_SPEC.md. Encuesta = sensible, anónima, Modo A.
  • qi_age_bucket←A2, qi_sector←A1, qi_zone=NULL (no se pregunta zona).
  • respondent_id sigue NULL (encuesta anónima).

4. Tareas

  1. Reescribir supabase/seed.sql: 1 organización demo, 1 consent_version v1 (scopes ["operativo","macro_n1"]), 1 survey (anónima/sensible/confidencial/Modo A/k=5), y las 34 preguntas con sus tipos, opciones, max_select (H1=3), is_sensitive, y conditional_rules en las dependientes (B2-B5, C2-C5, D2-D5).
  2. Aplicar a Cloud: supabase db push y luego cargar el seed contra el proyecto vinculado.
  3. Ejecutar las validaciones de la sección 6 contra la base real.

5. Definition of Done

  • seed.sql con 34 preguntas que coinciden 1:1 con SEED_SPEC.md.
  • supabase db push aplica limpio en Cloud (reportar si algún GRANT/policy falla — la auditoría sospechaba de 003/006).
  • Seed cargado y consultable en el proyecto Cloud.
  • Validaciones de la sección 6 verdes.
  • git diff --name-only HEAD solo con supabase/seed.sql (+ tests si los tocás).

6. Validaciones automatizadas mandatorias (contra la base Cloud)

  • Conteo: SELECT count(*) FROM questions = 34; condicionales = 12 (B2-B5, C2-C5, D2-D5), cada una con if_question correcto y value='Sí'.
  • Tipos: B1/C1/D1 son single_choice (no yes_no); H1 multiple_choice con max_select=3; F3/G4 rating; H3 text_long.
  • is_sensitive=true en exactamente las preguntas marcadas en SEED_SPEC.md.
  • RLS: como rol de organización, SELECT * FROM responses y FROM answers0 filas.
  • Constraint: INSERT en responses con respondent_id no nulo en encuesta anónima → ERROR.
  • k-anonimato: agg_segment sobre un segmento sembrado con 3 respuestas → "n insuficiente"; con ≥5 → valor.
  • Inmutabilidad: UPDATE/DELETE sobre consent_records → ERROR.
  • Si CUALQUIERA falla: NO declarar lista la etapa. Reportar el fallo y esperar instrucciones.

7. Qué reportar

  • Verificado: salida concreta de cada validación (conteos, resultado de agg_segment n=3 y n=5, comportamiento de RLS, errores esperados que efectivamente saltaron).
  • Asumido: cualquier supuesto (ej. textos exactos de opciones que hayas normalizado).
  • Hallazgos no esperados y Decisiones por iniciativa (clasificadas por nivel).
  • git diff --name-only HEAD pegado.

8. Qué NO hacer

  • NO tocar el esquema (migraciones 001-006) salvo que una validación revele un bug — y si lo revela, reportar antes de corregir (cambiar esquema es Nivel 3 si toca RLS/privacidad).
  • NO agregar columnas qi_gender/qi_modality (hay un hallazgo abierto en SEED_SPEC.md para el director — es decisión Nivel 3, no la tomes acá).
  • NO exponer texto libre (H3) en ninguna vista/función analítica.
  • NO usar respondent_id. NO usar service_role en nada de cara al cliente.