Skip to content

Candados: conexión de Supabase, tool sql y archivo de turnos - #103

Merged
ErickUser1 merged 1 commit into
mainfrom
fix/candados-supabase-sql
Sep 24, 2026
Merged

ErickUser1 merged 1 commit into
mainfrom
fix/candados-supabase-sql

Conversation

@ErickUser1

Copy link
Copy Markdown
Owner

Qué pasaba

Cosas que no pueden pasar dos veces al mismo tiempo, y pasaban.

  1. Conexión de Supabase. La vuelta de autorizar, la preparación y la renovación del token guardaban la fila completa (INSERT OR REPLACE) desde una copia leída antes.
    • Segunda autorización con la base ya lista (dos pestañas o doble clic): se perdía la contraseña. Si venía de otra cuenta, la sala se cambiaba a un proyecto nuevo y vacío en esa cuenta.
    • La renovación del token podía regresar el proyecto a null si la preparación lo guardaba mientras tanto.
  2. Tool sql. No tenía candado: dos agentes podían cambiar la base al mismo tiempo y el orden quedaba al azar. Tampoco quedaba registro de lo que hacía, así que los demás agentes no se enteraban.
  3. Resumen de otros agentes, bug que ya existía. Filtraba solo por id de agente, y los ids se repiten en cada sala (agente-1). Por eso llegaban archivos de otras salas, con rutas absolutas.
  4. Archivo de turnos, bug que ya existía y es grave. Dos agentes que empezaban turno a la vez compartían el nombre del archivo temporal. El segundo rename tronaba con ENOENT, nadie lo atrapaba, y se caía el server con todas las salas. Cuando no tronaba, un turno borraba al otro.

Cambios

  • actualizarConexionSupabase: un UPDATE que cambia solo los campos que llegan. Lo usan la preparación, la renovación y la re-autorización. sqlite.ts y types.ts conservan sus saltos de línea CRLF.
  • Callback:
    • Guarda en la misma fila que la preparación de la sala.
    • Si ya hay proyecto, solo renueva los tokens cuando esa cuenta puede ver el proyecto. Si no puede, no toca nada y el panel muestra el error, porque el GET ahora devuelve error.
    • Antes de volver a la sala espera a que quede guardado, con un tope de 3 segundos.
  • Renovación del token: una a la vez por sala, releyendo la conexión adentro.
  • sql: corre y escribe su migración bajo fileMutation.conCandado, el mismo candado de los archivos. La sala ve "esperando a agente-1 (migraciones)". Dos migraciones en el mismo segundo ya no se pisan.
  • Resumen: los cambios a la base salen como cambió la base: crea-tabla-tareas, junto con la indicación de revisar con ver_base. Se filtra por la carpeta de la sala y las rutas salen relativas.
  • Turnos: las lecturas y escrituras van en fila por sala, el temporal tiene nombre único, y no se escribe si nada cambió.
  • demo:candados (18 casos) entra al CI.

Cómo se probó

  • npm run typecheck, npm run build y las demos (providers, back, politicas, actividad, modo-de-sala, ver-base, candados, agentes-se-ven).
  • Server real con Supabase simulado (dos cuentas, tokens que rotan), primero en main y luego en la rama:
Escenario main rama
2ª autorización, misma cuenta, base lista contraseña perdida se conserva
2ª autorización de otra cuenta sala pasa a un proyecto nuevo en la cuenta B sin cambios, y el panel explica
Dos agentes empiezan turno a la vez el server se cae (ENOENT) los dos contestan
5 startTurn a la vez (demo) error, quedan 1 de 5 sin error, quedan 5
  • No reproducido: dos renovaciones de token chocando. Con el simulador, la primera terminaba antes de que empezara la segunda, también en main. El candado de la renovación queda como protección y no está probado de punta a punta.

🤖 Generated with Claude Code

https://claude.ai/code/session_01HJ5oT2Xm3VZMvbPAcgKbz4


Generated by Claude Code

Conexion de Supabase: la vuelta de autorizar, la preparacion y la renovacion
del token guardaban la fila completa desde una copia leida antes.
- Una segunda autorizacion (dos pestanas, doble clic) borraba el proyecto y la
  contrasena; si era de otra cuenta, la sala acababa en una base nueva y vacia.
  Ahora con proyecto solo se renuevan los tokens si esa cuenta lo ve, y si no,
  no se toca nada y el panel dice por que.
- actualizarConexionSupabase cambia solo los campos que llegan.
- La renovacion del token va de una en una por sala y relee adentro.

Tool sql: un SQL a la vez por sala con su migracion, con el mismo candado de
los archivos (la sala ve "esperando a agente-1"). La migracion queda anotada,
asi que los demas agentes ven "cambio la base: crea-tabla-x". Dos migraciones
en el mismo segundo ya no se pisan.

Resumen de otros agentes: filtraba solo por id de agente, y los ids se repiten
en cada sala, asi que llegaban archivos de otras salas. Ahora filtra por la
carpeta de la sala y da rutas relativas.

Turnos: dos agentes que empezaban turno a la vez compartian el archivo
temporal; el segundo rename tronaba sin que nadie lo atrapara y tumbaba el
server. Ahora las escrituras van en fila por sala y el temporal es unico.

demo:candados cubre todo esto y entra al CI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HJ5oT2Xm3VZMvbPAcgKbz4
@ErickUser1
ErickUser1 merged commit 090c8f9 into main Sep 24, 2026
2 checks passed
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.

2 participants