Las cuatro interacciones principales del sistema en notación de comunicación UML 2.5.1. Sonlas mismas cuatro que están enel diagrama de secuencia, con los mismos participantes y los mismos mensajes. En UML ambos diagramas son equivalentes: contienen la misma información y lo único que cambia es qué se pone delante.
La secuencia enseña el tiempo: líneas de vida y un orden de arriba abajo. La comunicación enseña laestructura: qué objeto está enlazado con cuál, con el orden reducido a la numeración decimal de los mensajes. Puestas una al lado de la otra sirven para lo que ninguna sirve sola - contrastarlas. Un mensaje que aparezca en una y no en la otra significa que una de las dos está desactualizada.
Mermaid no tiene este diagrama, así que el SVG se genera en el servidor desde un modelo tipado (src/data/comunicacion.ts) con src/lib/uml-communication.ts. Los tests verifican el dibujo y también la numeración: sin eje de tiempo, un número repetido o un3.1 sin un 3que lo contenga dejan la interacción sin lectura única.
Notación
- nombre:Clase, subrayadoUn objeto es una instancia, no una clase. El subrayado es lo único que los separa.
- «estereotipo»Papel del objeto en la interacción: actor, frontera, control, entidad o externo.
- Línea sin punta - enlaceDice que dos objetos pueden comunicarse. Se dibuja una sola vez por pareja, lleve un mensaje o siete.
- Flecha con número - mensajeViaja sobre un enlace. La numeración decimal (1, 1.1, 1.2) es el único orden del diagrama.
- Punta maciza frente apunta abiertaMaciza: llamada síncrona, el emisor espera. Abierta: asíncrona - el caso del registro de seguridad, que nadie espera.
- Línea discontinua - retornoLa respuesta a una llamada previa, no una llamada nueva.
Login del administrador (GitHub OAuth)
La misma interacción del diagrama de secuencia, vista por su estructura: qué objeto está enlazado con cuál. Se lee de un vistazo que el navegador nunca habla con GitHub ni con la base - solo con el middleware y con Auth.js.
src/middleware.ts · auth.config.mjs · src/lib/auth.ts · src/lib/device-sessions.ts
Ver la misma interacción como diagrama de secuencia
La validación contra la allowlist es un mensaje reflexivo: no sale del objeto. Por eso además se repite en el middleware en cada request - un mensaje que no cruza un enlace tampoco deja rastro que otro objeto pueda verificar.
Chequeo de monitor y apertura de incidente
El ciclo de sondeo disparado por el cron externo. La estructura enseña algo que la secuencia no subraya: el endpoint es el único objeto enlazado con todos los demás, así que es también el único punto donde el ciclo puede romperse.
src/pages/api/cron/uptime-check.ts · src/lib/notify.ts
Ver la misma interacción como diagrama de secuencia
El disparo viene de fuera (cron-job.org) y no de un temporizador interno: no hay proceso residente que mantener vivo, y la autenticación del cron es un Bearer comparado con timingSafeEqual.
Enforcement de seguridad en el middleware
Los tres guardas de seguridad y sus enlaces. La vista estructural deja claro que el sensor no está en el camino del cliente: cuelga del middleware por un enlace propio y escribe en la base por su cuenta.
src/middleware.ts · src/lib/security/{sensor,classify,blocklist,ratelimit-durable}.ts
Ver la misma interacción como diagrama de secuencia
El mensaje 2.2 es asíncrono a propósito: el middleware no espera a que el evento se escriba. Si esa escritura fallara y bloqueara, el sistema de defensa se habría convertido en la causa de la caída del sitio que defiende.
Webhook de pago con idempotencia
La misma interacción que el diagrama de actividades describe por dentro, aquí vista por sus enlaces. El endpoint no toca la máquina de estados ni ella responde a la pasarela: cada objeto habla solo con sus vecinos.
src/pages/api/payments/webhook.ts · src/lib/payments.ts
Ver la misma interacción como diagrama de secuencia
El reintento (mensaje 3.4) viaja por el mismo enlace que la escritura original: no es un camino alternativo sino la misma operación repetida con la versión nueva. Esa es toda la diferencia entre reintentar y cobrar dos veces.