diff --git a/DOCUMENTACION_TECNICA_VIVA.md b/DOCUMENTACION_TECNICA_VIVA.md index 1874e6f..ed6b153 100644 --- a/DOCUMENTACION_TECNICA_VIVA.md +++ b/DOCUMENTACION_TECNICA_VIVA.md @@ -2643,4 +2643,120 @@ Todos los call sites existentes (`getConfig('DATA_FILES.LOGS')`, `getConfig('DAT - [ ] Setear las 4 Script Properties reales (`DATA_FILES_LOGS_ID`, `DATA_FILES_USUARIOS_ID`, `MAESTRO_PERMISOS_ID`, `PAC_SPREADSHEET_ID`) en el proyecto de Apps Script — sin esto, `diagnosticarSistema()`/auditoría/PAC quedan deshabilitados hasta que el usuario las configure manualmente (paso que esta sesión no puede ejecutar por sí misma, requiere acceso al editor de Apps Script del usuario). - [ ] Revisión manual de permisos de compartición en Drive para los 4 Sheets sensibles (ver 32.4) — pendiente del usuario. - [ ] Revisión manual de permisos/acceso del proyecto Apps Script y su Web App deployment (ver 32.4) — pendiente del usuario. -- [ ] Decisión pendiente del usuario sobre `sembrado_usuarios_grupos.js` (PII de 260 correos) y `consolidacion_colab/uniondatosfinales.py` (Drive folder ID) — fuera del alcance original de esta tarea, solo documentado. \ No newline at end of file +- [ ] Decisión pendiente del usuario sobre `sembrado_usuarios_grupos.js` (PII de 260 correos) y `consolidacion_colab/uniondatosfinales.py` (Drive folder ID) — fuera del alcance original de esta tarea, solo documentado. + +**Nota de continuidad [2026-08-19, sesión Claude Code]:** todo lo de la Sección 32 fue commiteado por una sesión concurrente (`5988745 fix(config): migrate sensitive spreadsheet IDs to Script Properties [SEC-01]`) mientras esta sesión trabajaba en paralelo el flujo de versionamiento (ver ítem 12 de `TODOS.md`). Las 4 Script Properties fueron seteadas y verificadas manualmente por el usuario. Las decisiones pendientes marcadas arriba sobre `sembrado_usuarios_grupos.js` y el Drive folder ID de Colab **sí se resolvieron** más adelante en esta misma sesión — ver Sección 34. + +--- + +## 33. Estrategia de versionamiento Git/GitHub — trunk-based simplificado [2026-08-19] + +**Contexto:** repo vinculado a `github.com/Leon64721/ProyectoPREDIOS`, 64+ commits, sin `main`, sin tags, sin protección de rama, con dos incidentes reales ya documentados de edición concurrente entre agentes (`TODOS.md` ítem 12). El usuario pidió diseñar (no implementar de entrada) una estrategia completa de versionamiento vía `/office-hours` + `/plan-eng-review`. + +**Proceso:** design doc aprobado en `/office-hours` (modo intraemprendimiento) con 3 enfoques comparados (trunk-based / Git Flow / trunk-based + release efímera); revisión de 4 secciones (Arquitectura, Calidad, Test, Performance) con 7 hallazgos; segunda opinión independiente (Claude subagent, Codex no instalado) que encontró 7 huecos adicionales — incluyendo una contradicción directa con la primera recomendación de arquitectura (el guard de `clasp` propuesto inicialmente era la misma disciplina manual que ya había fallado dos veces). + +**Hallazgo raíz confirmado (`.clasp.json:1-16`):** `clasp` no conoce ramas de git — `scriptId` fijo, empuja lo que haya en disco local sin mirar el estado de git. La protección de rama en GitHub no toca este comando. Es la causa exacta del incidente de `TODOS.md` ítem 12. + +**Decisiones finales (17 hallazgos resueltos, 0 pendientes):** +1. Trunk-based simplificado: `main` única rama protegida, ramas cortas por tarea (`feat/-`, `fix/-`), PR obligatorio, **squash-merge**. +2. Guard mecánico antes de `clasp push`/`deploy` (diseñado como `scripts/clasp-deploy.js`: valida rama==main, `git status` limpio, HEAD==origin/main, corre `validateConfig()`/`diagnosticarSistema()`) — **diseñado, no implementado todavía** como interceptor real del binario (ver 33.1). +3. `git worktree` por sesión de agente + registro `AGENTS_ACTIVE.md` para prevenir colisión de archivos Y colisión semántica (dos agentes resolviendo la misma tarea distinto, el segundo incidente real de `TODOS.md` ítem 12). +4. Deploy manual desde `main`, tag solo tras confirmar deploy exitoso — automatización vía Actions diferida a propósito (`TODOS.md` ítem 20). +5. Convención de commits formalizada (no reemplazada): `tipo(módulo): descripción [TICKET]`, vocabulario cerrado `feat|fix|refactor|chore|docs|test|perf|style|ci`. +6. Lint Action debe extraer `