docs: actualizar estado — cierre release v3.0.0 + ETAPA_AUTH + incidente VPS

Sprint 4 completo (widgets Mirada Empresa, tema claro, 4F, 4I/release ya
estaban hechos antes de esta sesión). Documenta el incidente de colisión de
container_name en el VPS y su recuperación, y el cierre de TECH-DEBT-008
(auth de staff) en esta sesión. Próximos pasos quedan abiertos a decisión
del director (dashboard País/Humana, sprint de compliance, o mantenimiento
de dependencias).
This commit is contained in:
markosbenitez
2026-06-27 13:38:10 -03:00
parent dda4b5320a
commit 10bb7299a2
2 changed files with 58 additions and 31 deletions

View File

@@ -77,14 +77,15 @@
## [TECH-DEBT-008] /admin/responses sin autenticación ## [TECH-DEBT-008] /admin/responses sin autenticación
- **Estado:** ABIERTO. - **Estado:** RESUELTO (27 jun 2026, ETAPA_AUTH).
- **Descripción:** la vista de control `/admin/responses` no tiene auth. Por diseño - **Descripción:** la vista de control `/admin/responses` no tenía auth. Se implementó
explícito, excluye preguntas `is_sensitive=true` (14 preguntas de salud/ login con Supabase Auth (`@supabase/ssr`), `middleware.ts` protegiendo
discapacidad) y `text_long`. Para mostrar esas preguntas en la vista, primero `/admin/:path*` y `/dashboard/:path*` con redirect a `/login` sin sesión, y la página
implementar un gate de autenticación para staff (Basic Auth con env var como migrada de `service_role` a la sesión del usuario (`anon` key + RLS). Sigue
mínimo viable). excluyendo preguntas `is_sensitive=true` y `text_long` — ese diseño no cambió.
- **Impacto actual:** ninguno en producción — la URL no está publicada. - **Nota:** la vista no distingue roles dentro de staff todavía (todo usuario con fila
- **Bloqueante para:** ampliar visibilidad de datos en la vista de control. en `user_roles` ve lo mismo). Diferenciar `platform_admin` de `org_admin` ahí sería
una etapa nueva, no parte de este cierre.
--- ---

View File

@@ -1,5 +1,5 @@
# ESTADO DEL PROYECTO — Datos País sobre el Cuidado # ESTADO DEL PROYECTO — Datos País sobre el Cuidado
## Documento de continuidad — 25 junio 2026 ## Documento de continuidad — 27 junio 2026
> Director (Product Owner): Marcos · Claude (Projects) = arquitecto/copiloto · Claude Code = implementación > Director (Product Owner): Marcos · Claude (Projects) = arquitecto/copiloto · Claude Code = implementación
> Metodología: Maria Mersan · Contacto Fundación: Valeria Arce > Metodología: Maria Mersan · Contacto Fundación: Valeria Arce
@@ -7,17 +7,14 @@
--- ---
## 1. Versionado y ramas ## 1. Versionado y ramas
- **Producción:** 2.1.0 (formulario lineal) — los 3 surveys en `draft` - **Producción:** 3.0.0 (wizard + dashboard tres miradas) — tag `v3.0.0` pusheado, los 3 surveys
- **Desarrollo:** 3.0.0 (wizard + dashboard nuevo) en `main`, NO desplegado aún en `live`. Release v3 completado (etapa 4I).
- **Preservación:** `v2.1.0-stable` + tag `v2.1.0` - **Preservación:** `v2.1.0-stable` + tag `v2.1.0`
- SemVer + CHANGELOG + tags. ADRs en `docs/adr/`. - SemVer + CHANGELOG + tags. ADRs en `docs/adr/`.
⚠️ Los 3 surveys están en `draft` a propósito (el frontend v2 desplegado no entiende seed v3).
Se reactivan a `live` al desplegar v3 completo.
--- ---
## 2. Sprint 4 — Wizard v3 — Formulario COMPLETO, falta release ## 2. Sprint 4 — Wizard v3 — COMPLETO, release hecho
| Etapa | Estado | | Etapa | Estado |
|---|---| |---|---|
@@ -28,26 +25,41 @@ Se reactivan a `live` al desplegar v3 completo.
| 4D wizard renderer (layout estable) | ✅ | | 4D wizard renderer (layout estable) | ✅ |
| 4E instancias (emergente del motor) | ✅ | | 4E instancias (emergente del motor) | ✅ |
| 4G submit + validación server-side (RPC transaccional) | ✅ verificado vs Postgres real | | 4G submit + validación server-side (RPC transaccional) | ✅ verificado vs Postgres real |
| 4F autocomplete barrios (UX) | ⏳ pendiente | | 4F autocomplete barrios (UX) | |
| 4I validación e2e + tag v3.0.0 + desplegar + reactivar surveys | ⏳ pendiente | | Widgets Mirada Empresa (frontend) | ✅ |
| Tema claro dashboard (marca Re) | ✅ |
| 4I validación e2e + tag v3.0.0 + desplegar + reactivar surveys | ✅ |
| ETAPA_AUTH — login/middleware/sign-out para `/admin` y `/dashboard` | ✅ (27 jun) |
El formulario v3 funciona end-to-end: motor, wizard, instancias, submit con validación El formulario v3 funciona end-to-end: motor, wizard, instancias, submit con validación
server-side (RPC `rpc_submit_response`, único camino de escritura, verificado). server-side (RPC `rpc_submit_response`, único camino de escritura, verificado). Dashboard
Mirada Empresa con sus 13 widgets, consumiendo las RPCs `rpc_me_*` reales. `/admin/responses`
y `/dashboard` ahora requieren sesión autenticada (antes sin auth — cierra TECH-DEBT-008).
--- ---
## 3. Dashboard v3 — DECISIÓN MAYOR: rediseño de "tres miradas" ## 2.1 Incidente VPS (27 jun) — recuperado
Una segunda instancia de Dokploy desplegada desde el mismo repo (con `container_name` fijos en
docker-compose.yml) colisionó con la producción y vació el esquema `public` de `supabase-db`.
**Sin pérdida de datos reales** (solo seed demo). Se restauró: migraciones completas + seed +
surveys reactivados a `live` + usuario `platform_admin` creado. Verificado end-to-end: login,
sign-out, redirect sin sesión, formulario público (3 links `?s=<survey_id>`) — todo OK.
Detalle completo en memoria `project_vps_container_name_incident`. El director ya separó la
segunda instancia a un repo Gitea propio sin `container_name` fijos, para que no se repita.
---
## 3. Dashboard v3 — "tres miradas"
**Decisión:** NO migrar las RPCs v2 (referencian códigos inexistentes en v3). En su lugar, **Decisión:** NO migrar las RPCs v2 (referencian códigos inexistentes en v3). En su lugar,
dashboard nuevo de tres miradas, fundamentado en marcos reales (OIT 5R, CEPAL, PNCUPA Paraguay). dashboard nuevo de tres miradas, fundamentado en marcos reales (OIT 5R, CEPAL, PNCUPA Paraguay).
### Estado ### Estado
- **Mirada Empresa:** ✅ RPCs implementadas y VERIFICADAS contra 50 respuestas reales. - **Mirada Empresa:** ✅ RPCs + widgets de frontend completos y en producción. E1-E10 + estrella
E1-E4 exactos, estrella "Talento en riesgo" con umbral parametrizable, E9 segmentación "Talento en riesgo", k≥5 en segmentación. Tema claro aplicado.
con k≥5. Migraciones `20260625000001` (fix helper) + `20260625000002` (11 RPCs). Commiteado.
Widgets del frontend: PENDIENTE (etapa siguiente).
- **Mirada País y Mirada Humana:** propuesta + mockup listos, implementación DIFERIDA a - **Mirada País y Mirada Humana:** propuesta + mockup listos, implementación DIFERIDA a
sprint de dashboard post-deadline. sprint de dashboard post-deadline (sin cambios desde el último estado).
### Documentos (en docs/dashboard/) ### Documentos (en docs/dashboard/)
- `PROPUESTA_DASHBOARD_v3.md` — las 3 miradas, ~30 métricas, marcos citados honestamente - `PROPUESTA_DASHBOARD_v3.md` — las 3 miradas, ~30 métricas, marcos citados honestamente
@@ -65,16 +77,25 @@ dashboard nuevo de tres miradas, fundamentado en marcos reales (OIT 5R, CEPAL, P
--- ---
## 4. Deuda técnica y seguridad ## 4. Deuda técnica y seguridad
~~TECH-DEBT-008 (`/admin/responses` sin autenticación)~~**resuelto** por ETAPA_AUTH (27 jun).
| ID | Descripción | Prioridad | | ID | Descripción | Prioridad |
|---|---|---| |---|---|---|
| TECH-DEBT-006 | Backup remoto S3 | Antes de datos reales | | TECH-DEBT-006 | Backup remoto S3 | Antes de datos reales |
| TECH-DEBT-009 | Rotar secrets post-CVE | Antes de datos reales | | TECH-DEBT-009 | Rotar secrets post-CVE | Antes de datos reales |
| TECH-DEBT-010 | E9 lee modalidad por JOIN a answers (2.7) en vez de qi_modalidad. Promover si se usa seguido | Baja | | TECH-DEBT-010 | E9 lee modalidad por JOIN a answers (2.7) en vez de qi_modalidad. Promover si se usa seguido | Baja |
| SEC-001 | Next.js — vuln "Cache Key Confusion" vigente en 15.3.8; última mayor es 16.2.9 (breaking) | Media |
| TECH-001 | `npm audit`: 4 vulns (1 moderate, 3 high) — `form-data`, `next`, `undici` | Pendiente revisión |
| SEC-002 | Sprint compliance (audit log, hashing, cifrado en reposo) | Sprint dedicado | | SEC-002 | Sprint compliance (audit log, hashing, cifrado en reposo) | Sprint dedicado |
| SEC-003 | Agujero TRUNCATE evade ADR-003 | Antes de datos reales | | SEC-003 | Agujero TRUNCATE evade ADR-003 | Antes de datos reales |
| SEC-004 | RPC validable por bypass REST (coherencia de flujo en Server Action) | Sprint futuro | | SEC-004 | RPC validable por bypass REST (coherencia de flujo en Server Action) | Sprint futuro |
| BACKLOG-002 | Fase 2: motor genérico | Post-deadline | | BACKLOG-002 | Fase 2: motor genérico | Post-deadline |
*(SEC-001/TECH-001 verificados 27 jun vía `npm view next version` / `npm audit --json`
los números en BACKLOG.md/TECH_DEBT.md estaban desactualizados, ej. citaban Next 15.3.3
y "2 vulnerabilidades" cuando ya corre 15.3.8 con 4.)*
--- ---
## 5. Infraestructura ## 5. Infraestructura
@@ -87,14 +108,19 @@ dashboard nuevo de tres miradas, fundamentado en marcos reales (OIT 5R, CEPAL, P
--- ---
## 6. Próximos pasos ## 6. Próximos pasos
1. **Widgets de Mirada Empresa** — el frontend del dashboard que consume las RPCs ya verificadas.
La spec (SPEC_MIRADA_EMPRESA.md) define shapes de retorno; el mockup define el aspecto.
2. **4F autocomplete barrios** — subir `geo_paraguay_full.json` (8152 barrios) a public/data/.
3. **4I release** — validación e2e, tag v3.0.0, desplegar v3, reactivar surveys a live.
4. **Sprint de dashboard (post-deadline):** Miradas País y Humana, preguntas faltantes
(bienestar, horas no remuneradas, escolarización), decisión qi_modalidad.
Orden sugerido para go-live: widgets Mirada Empresa → 4F → 4I. **Go-live (widgets → 4F → 4I) está cerrado.** v3.0.0 en producción, surveys `live`, auth para
staff funcionando. No queda ninguna etapa de Sprint 4 pendiente — el roadmap pre-escrito se
agotó. El próximo paso requiere decisión del director entre:
1. **Sprint de dashboard (post-deadline):** Miradas País y Humana, preguntas faltantes
(bienestar, horas no remuneradas, escolarización), decisión qi_modalidad (TECH-DEBT-010).
2. **Sprint de compliance/seguridad (SEC-002):** audit log append-only, hashing de integridad,
cifrado en reposo — bloquea escalar a más empresas/datos reales.
3. **Mantenimiento de dependencias:** SEC-001 (Next.js) + TECH-001 (`npm audit`, 4 vulns).
4. Otro ítem de BACKLOG.md/TECH_DEBT.md no listado arriba.
Ninguno de estos se decide unilateralmente (Nivel 3 — tocan planificación/seguridad).
--- ---