El cliente solo pinta
El navegador dibuja. Todo lo demás —dónde está tu cuerpo, si ese golpe te alcanzó, cuántos cruzasteis la puerta y qué estaba midiendo— ocurre a mil kilómetros de tu máquina.
La tabla de tecnología lo enuncia en una línea: servidor autoritativo, sin excepción. Este cuaderno es esa línea desarrollada. La frontera se dibuja así: el cliente puede predecir, pero no puede decidir, y cualquier cosa que prediga es corregible sin aviso al tic siguiente.
| Qué | Quién lo decide | Por qué ahí |
|---|---|---|
| Posición y colisión | Servidor | Es la base de todo lo demás. Un cliente que decide dónde está puede estar en cualquier sitio. |
| Impacto y daño | Servidor, con 150 ms de tolerancia | La ventana la abre y la cierra la máquina. El cliente solo dice hacia dónde miraba y cuándo, y ese cuándo vale: la entrada se coloca en el instante en que se dio, hasta 150 ms atrás. |
| Cruce de Umbral | Servidor | La puerta cuenta cuerpos. Es el acto que da sentido al juego entero: no puede depender de un navegador. |
| Cálculo de Métrica | Servidor, y el resultado no viaja | No es que el cliente no la calcule: es que nunca recibe con qué. Lo que no se manda no se puede leer. |
| Inventario y Dispensa | Servidor | Lo que paga la puerta es economía. La economía se escribe en el historial, no en tu memoria RAM. |
| Predicción del cuerpo propio | Cliente | Para que andar no se sienta a 100 ms de distancia. Se reconcilia contra el estado autoritativo en cuanto llega. |
| Interpolación de los demás | Cliente | Los otros cuerpos se pintan un pelo en el pasado, con un búfer corto. Nadie lo nota; todos lo agradecen. |
| Luz, sonido y sombra | Cliente | Es pintura. La luz que se ve la calcula tu tarjeta; la luz que importa —quién ve a quién— la resuelve la zona. |
La última fila tiene letra pequeña. Que el sonido lo pinte el cliente no significa que lo decida: qué suena sale del mismo estado que baja en el tic, y hay un dato —el que no viaja— que tampoco puede sonar. La música y el sonido se cuentan en su propio cuaderno, porque la frontera se dibuja ahí otra vez y con más filo.
Un juego de navegador no tiene antitrampas de cliente nativo, así que no puede defenderse detectando. Solo puede defenderse no mandando el dato. Esa es una limitación severa y es la primera decisión de arquitectura del proyecto.
Y resulta que el juego trata exactamente de eso: de deducir, desde fuera, qué está midiendo una máquina que no te enseña sus tripas. La postura defensiva del servidor y la premisa de la ficción son la misma frase escrita dos veces. No hay ninguna decisión importante en este cuaderno donde la restricción técnica y la intención estética se peleen.
Un solo lenguaje, y aburrido
El servidor se escribe en Go. Entero. Y la razón que decide no es el rendimiento: es quién escribe el código.
Hay tres razones técnicas y una de producción. Las tres primeras bastarían para justificarlo; la cuarta es la que hace que no haya discusión.
- La concurrencia calca el problema
Una gorutina por conexión, un bucle por zona, un canal por frontera. El modelo del lenguaje y el modelo del juego son el mismo dibujo, así que no hay que traducir el diseño a la herramienta: se escribe tal como se piensa. Cien mil gorutinas dormidas cuestan memoria y poco más.
- La unidad de despliegue es un fichero
Un binario estático, sin tiempo de ejecución que instalar ni intérprete que arrastrar. Eso es lo que hace barato encender y apagar zonas, que es la operación más frecuente de este servidor: un mundo que crece con las hogueras enciende procesos todo el rato.
- El recolector de basura aquí no molesta
Lo que descarta a Go para un motor de render es irrelevante con un presupuesto de 50 ms por tic. Con memoria reutilizada por zona y sin asignar en el bucle caliente, las pausas quedan dos órdenes de magnitud por debajo de lo que un jugador puede percibir.
- Y la que decide: lo escribe una máquina
Este proyecto ya declaró que compone con IA generativa y filtra a mano. Con el código pasa lo mismo. Go tiene un corpus enorme y, sobre todo, uniforme —un solo estilo, un solo formateador, una biblioteca estándar que cubre casi todo—, así que la máquina produce código idiomático y el humano lo revisa de un vistazo. El cuello de botella del equipo no es escribir: es revisar. Se elige el lenguaje que hace barata la revisión.
El lenguaje se elige por el revisor, no por el procesador
| Descartado | Lo que ofrecía | Por qué no |
|---|---|---|
| Rust | Lo más rápido y lo más seguro en memoria, sin recolector. | El préstamo y la asincronía son justo donde la iteración asistida va más despacio y donde el revisor humano rinde peor. Queda como puerta abierta para una sola ruta caliente, si algún día una medición la pide. No como punto de partida. |
| Node y TypeScript | Un solo lenguaje en cliente y servidor, y el equipo ya lo escribe. | Un hilo por proceso y pausas impredecibles justo donde hay densidad. La tentación de compartir código con el cliente es además el camino más corto a mover lógica al navegador. |
| C++ | El estándar histórico del género. | Todo lo que tiene de rápido lo tiene de irrevisable. Con un equipo pequeño y código asistido, es la peor combinación posible. |
| Elixir sobre BEAM | El mejor encaje conceptual que existe: un proceso por jugador, aislamiento real, supervisión por árbol y millones de conexiones como caso de uso de fábrica. | La máquina virtual ya hace lo que aquí hay que construir a mano, y aun así se descarta: corpus pequeño, la IA acierta mucho menos y contratar es más difícil. Es la decisión que más duele. |
Go en el servidor, TypeScript en el navegador, y pocas dependencias en ambos lados. No es minimalismo de manual: cada dependencia es código que nadie del equipo ha revisado nunca, y este proyecto ha decidido que lo que no se puede revisar no entra al mundo. Vale para una lámina generada y vale para una biblioteca de terceros.
Cuatro clases de proceso
Cuatro clases de proceso y una sola regla para entenderlas: solo una de las cuatro tiene autoridad, y solo una de las cuatro guarda algo que duela perder.
Termina la conexión —WebTransport sobre HTTP/3, con retroceso a WebSocket donde no llegue—, autentica, comprime y encamina hacia la zona que toque. No sabe nada del juego. Se escala poniendo más detrás de un balanceador, y se puede tirar una entera sin que nadie muera: el cliente reconecta y sigue.
Un bucle de un solo hilo, dueño de unos cientos de cuerpos y de todo lo que les pasa. Toda mutación entra por un canal, así que no hay cerrojos y no hay carreras: el estado del mundo lo toca un hilo y nada más. Un asentamiento, un tramo de borde o un ancla de dominio (definición: Región gobernada por una IA; antiguo territorio operativo de una megacorporación. Hay siete.).
Una zona de usar y tirar con la puerta cerrada por dentro. Nace cuando un grupo cruza un Umbral (definición: La condición de entrada de una Prueba. Objetiva, comprobable y siempre honesta: la puerta no miente sobre lo que pide.) y muere cuando sale el último que la puerta contó: con la Dispensa (definición: La recompensa que otorga una Prueba. Se calcula siempre desde la Métrica, no desde lo que creías estar haciendo.) casi siempre, y si alguien se queda dentro, cuando otro grupo cumple el Umbral o el ciclo (definición: El periodo de reposición de un motor de ración: entre cuarenta y ciento veinte horas, constante hasta el minuto. Aquí no se cuentan días, se cuentan repartos.) le abre la puerta. Es la clase más numerosa y la más barata de repartir.
Asignación de zonas, censo de presencia, arbitraje de traspasos y matrícula de mundos. Redis para lo que hay que consultar en un milisegundo, NATS para hablar entre procesos. No simula nada: dice quién simula qué.
Solo una franja tiene autoridad, y no es la que toca el jugador
Queda el punto delicado: pasar de una zona a la vecina sin que se note. El traspaso continuo que el mapa como servidor daba por hecho se hace en cuatro tiempos, y el jugador no ve ninguno.
| Tiempo | Qué ocurre | Qué ve el jugador |
|---|---|---|
| Aproximación | El cuerpo entra en el perímetro solapado de dos zonas. La destino recibe una copia de solo lectura. | Nada. Empieza a ver cuerpos de la zona vecina antes de estar en ella. |
| Reserva | La zona destino confirma plaza. Si no la hay, no se suelta la origen: no existe el limbo entre zonas. | Nada. |
| Entrega | La origen congela el cuerpo un tic, lo firma y lo manda. La autoridad cambia de proceso. | Un tic de 50 ms que la predicción del cliente tapa entera. |
| Suelta | La origen olvida el cuerpo. El grafo del mundo anota la arista recorrida. | Nada, y esa es la medida del éxito. |
Un reto es un mundo de usar y tirar
Un reto no ocurre en el mundo: ocurre en una copia del mundo hecha para ese grupo, que dura lo que dura el reto y después no existe.
Es la pieza que hace barato todo lo demás. Una Prueba (definición: Estructura-experimento dejada por una IA para medir a quien entra. La unidad fundamental de contenido del juego.) con ocho personas dentro no necesita saber nada de las otras cuatro mil que hay en el servidor, y no lo sabe.
- Convocatoria
Un grupo se planta ante una puerta. El control comprueba el censo —quién entra, con qué cuerpo, con qué deudas— y reserva una instancia en la máquina más desahogada del mundo.
- Nacimiento
Se arranca un bucle nuevo con la semilla de esa Prueba (definición: Estructura-experimento dejada por una IA para medir a quien entra. La unidad fundamental de contenido del juego.): su recinto, su Protocolo (definición: Las reglas internas de una Prueba, a menudo crueles por diseño.), su Métrica (definición: Lo que la Prueba mide en realidad. Oculta. El gran objeto de estudio del juego.) enterrada, su censo cerrado y su reloj propio. Tarda milisegundos, porque es un proceso, no una máquina.
- Vida
Aislada del todo. Nadie de fuera entra, nada de dentro sale hasta la Dispensa (definición: La recompensa que otorga una Prueba. Se calcula siempre desde la Métrica, no desde lo que creías estar haciendo.). Eso es lo que la hace trivialmente paralela: una instancia no habla con ninguna otra, así que diez mil instancias son diez mil problemas pequeños y no un problema grande.
- Cierre
La Métrica (definición: Lo que la Prueba mide en realidad. Oculta. El gran objeto de estudio del juego.) se resuelve en el servidor y no se anuncia. La Dispensa se paga, se escribe el suceso en el historial del mundo y los cuerpos vuelven a la zona de la que salieron —vivos, o no—.
- Muerte
El proceso desaparece con todo dentro. Lo único que sobrevive es lo anotado en el registro, y lo que la gente se llevó en la cabeza. De ahí sale, más tarde, lo que se escribe en un Cuaderno (definición: Objeto físico donde se registran entradas e hipótesis sobre una Prueba. La moneda del saber. Lo que cabe en él depende de la Letra de quien lo lleva: croquis, hechos, hipótesis o el cruce de dos manos.) y lo que se vende como página.
Las instancias son la parte fácil del escalado. Se pican en trozos perfectos, se reparten por máquinas sin coordinación y desaparecen sin dejar deuda. Si el juego fuera solo Pruebas, esto escalaría sin arquitectura.
La parte cara es el asentamiento: trescientos cuerpos en una plaza que se ven, se oyen y se estorban entre sí, y donde el coste crece con los pares que se perciben, no con la gente que hay. Por eso el diseño concentra la densidad en un solo sitio y deja el resto del mundo disperso por decisión, no por pobreza. La geografía del juego es el plan de capacidad.
El tic y lo que viaja
El servidor piensa veinte veces por segundo y habla diez. Todo el diseño de combate cabe en ese desajuste.
| Pieza | Ritmo | Motivo |
|---|---|---|
| Simulación de zona | 20 Hz · 50 ms por tic | Suficiente para un combate de ventanas largas y demasiado poco para que se note. Duplicarlo dobla el coste y no mejora nada que un jugador perciba. |
| Instantánea al cliente | 10 Hz, delta contra lo último reconocido | Se manda lo que cambió, no lo que hay. El cliente interpola entre dos instantáneas y nadie ve escalones. |
| Entrada del cliente | A tasa de fotogramas, agrupada | Lo que sube es intención —hacia dónde, con qué, cuándo—, nunca resultado. |
| Ventana de golpe | 300–500 ms telegrafiados | Lo que hace que 150 ms de latencia sean tolerables sin rebobinar los cuerpos. Está en la doctrina de combate desde antes que en el servidor. |
| Reconciliación | En cada instantánea | El cliente rebobina su predicción y la vuelve a aplicar desde el estado autoritativo. Si acertó, no se ve nada; si falló, se corrige en un fotograma. |
Hay una tolerancia y hay una cosa que no se hace, y conviene no confundirlas. La entrada sube con su marca de tiempo y el servidor la juzga en el instante en que se dio, hasta 150 ms atrás: por eso la parada perfecta puede ser de un octavo de segundo a rango bajo y seguir siendo posible con red normal. Lo que el servidor no hace es rebobinar los cuerpos: dónde estaba cada cual se decide una vez, en el tic, y no se reabre. Pasado el margen la entrada se coloca 150 ms atrás y no más, y la ventana se le estrecha sola al que llega tarde; ninguna otra pieza del combate castiga la red.
El servidor piensa veinte veces por segundo y habla diez
El presupuesto de red no lo resuelve la compresión: lo resuelve el mundo. A un jugador solo se le manda lo que su luz alcanza. En un juego donde se ve a seis metros con una lámpara de sebo, la gestión de interés —la parte que en otros MMO es un problema difícil— sale casi gratis: la instantánea de un jugador en la Escarcha (definición: La primera de las dos franjas frías del mundo: se cruza, con hogueras y prisa. La segunda es el Vidrio, y esa mata.) contiene, muchas veces, a nadie.
Lo que se manda es siempre mucho menos que lo que existe
Un MMO iluminado tiene que decidir a quién le manda qué, y esa decisión es cara y siempre está mal. Aquí la decide la ficción: si no lo ves, no te llega, y no lo ves casi nunca.
El ancho de banda de este juego escala con la luz encendida, no con el tamaño del mundo ni con la gente que hay dentro. El tema del juego y su factura de red son la misma variable.
De ocho personas a un millón
La pregunta no es cómo se sostiene un millón de jugadores a la vez. Es cómo se sostienen cuarenta mundos de veinticinco mil, que es una pregunta que sí tiene respuesta.
La ficción ya tomó la decisión de arquitectura más importante, y hace mucho: el mundo es la clave de partición. Los Vestigios (definición: Fragmento de ciencia humana recuperada; nodo del árbol tecnológico que comparte todo el servidor.) son de servidor, el año de servidor (definición: Un año de reloj del servidor, no de la ficción. Es la única unidad con la que se puede decir cuán raro es algo —un puñado de semidioses, tres o cuatro emisiones del Callado—, porque dentro del mundo nadie sabe qué año es.) es de servidor, los estados finales son de servidor. Ninguna consulta cruza mundos, nunca. Eso es lo que hace que la curva de coste sea una recta.
| Pieza | Cómo crece | Qué la limita |
|---|---|---|
| Pasarelas | Se replican sin coordinarse. Cada una lleva decenas de miles de conexiones dormidas. | Ancho de banda y descriptores de fichero. Es el problema más aburrido de la lista, y por eso se resuelve con dinero. |
| Instancias | Paralelismo puro: una máquina más son cien retos más. | CPU total y nada más. No hay coordinación que rompa. |
| Zonas de borde | Con el perímetro de calor. La Escarcha exterior no se simula. | Baratas por definición: la oscuridad entre casas es hardware apagado. |
| Asentamiento | Mal: el coste va con los pares que se perciben, no con los cuerpos. | Es la única zona densa del juego. Se subdivide por hoguera y se acota la percepción a la luz. Si algo revienta, revienta aquí. |
| Historial | Sin parar, para siempre. | Almacenamiento, no cómputo. Se compacta por temporada y se archiva en frío. |
| Mundos | Se siembra uno nuevo con una Reapertura. | Nada técnico. Lo limita cuánta gente hace falta para que un mundo tenga vida propia. |
Un MMO clásico paga su mundo entero desde el primer día. Aquí un mundo dormido —una casa muerta, una región que nadie ha reabierto— cuesta almacenamiento y nada más: cero procesos, cero tics, cero red.
La factura de infraestructura tiene la forma del mapa nocturno del juego: manchas encendidas sobre negro. Cuando un servidor prospera, la factura crece con él; cuando un servidor se apaga, se apaga también la factura, y lo que queda es un archivo que se puede volver a encender años después tal como quedó.
Historia, no estado
El estado del mundo no es el dato. El dato es todo lo que ha pasado en él, por orden, y el estado es solo el resumen más reciente.
La tabla de tecnología pedía «historia, no solo estado» y no explicaba cómo. Así: un registro de sucesos de solo-añadido, particionado por mundo, es la fuente de verdad. Quién cruzó, qué pagó la puerta, quién encendió esa hoguera, qué clan se partió y en qué fecha. El estado jugable es una proyección de ese registro, y se puede tirar y reconstruir.
| Almacén | Qué guarda | Qué pasa si se pierde |
|---|---|---|
| Memoria de zona | El mundo vivo del tic actual: cuerpos, luces, cargas, lo que está pasando ahora mismo. | Se reconstruye desde el último punto de guardado y el registro. Se pierden segundos, nunca historia. |
| Base relacional | Cuentas, personajes, inventario, clanes, deudas. Lo que hay que consultar por clave y cambia poco. | Es lo único que no se puede perder. Postgres, replicado, particionado por mundo. |
| Registro de sucesos | Todo lo que ocurrió, íntegro y en orden. Solo se añade; nunca se corrige. | Se pierde el Osario, el árbol de Vestigios y el mapa de quién encendió qué. Es decir: se pierde el juego largo. |
| Objeto frío | Casas muertas, instancias terminadas, temporadas cerradas. | Se pierde el pasado profundo. Se replica en almacenamiento de objetos y se rehidrata bajo demanda. |
El estrato más grueso es el que nadie consulta a diario
El objeto más literario de este juego —el Osario (definición: Donde un dominio deja a sus muertos. Territorio neutral por acuerdo universal.), la pared donde se lee lo que fue un servidor: quién murió, quién mintió, qué casa aguantó— es, por debajo, un informe sobre el registro de sucesos. No hay un sistema de Osario. Hay un registro que no se borra y una consulta que lo lee.
Pasa lo mismo con el árbol de Vestigios (definición: Fragmento de ciencia humana recuperada; nodo del árbol tecnológico que comparte todo el servidor.), con la procedencia de una página y con las seis señales de que esto funciona. La ficción no se apoyó en el esquema de datos: la ficción y el esquema de datos se decidieron a la vez, y por eso encajan sin adaptadores.
Lo que no se le manda al cliente
Aquí no se detectan trampas. Se hace que la mayoría no tengan nada que leer.
Sin cliente nativo no hay antitrampas de cliente, así que la defensa entera es una decisión de qué información sale del servidor. Es más aburrido de construir y mucho más difícil de romper.
| Trampa clásica | Qué la haría posible | Por qué aquí no existe |
|---|---|---|
| Ver a través de la pared | Recibir las posiciones de quien no ves. | No se mandan. La gestión de interés recorta la instantánea a lo que la luz alcanza, así que no hay nada que revelar en el cliente. |
| Leer la Métrica en memoria | Que el cliente conozca la condición de la puerta. | La Métrica no viaja, ni siquiera cifrada. El cliente ni la calcula ni la recibe: se entera del resultado, como todo el mundo, por la Dispensa. |
| Falsear el cruce del Umbral | Que el cuerpo diga «he entrado». | Cuenta la puerta, no el cuerpo. El cliente no tiene forma de afirmar nada sobre sí mismo que la zona no verifique. |
| Teletransporte y velocidad | Autoridad de posición en el cliente. | La zona valida cada entrada contra el tic anterior. Lo imposible se descarta y se anota; lo dudoso se corrige en silencio. |
| Inundar el servidor | Mandar mil entradas por segundo. | Límite por conexión en la pasarela, antes de tocar la zona. Una pasarela saturada no arrastra a nadie más. |
Queda la voz, que es el único sistema del juego donde el dato no pasa por el servidor. El audio abierto entre pares es barato y suena bien, pero la conexión directa entre navegadores expone direcciones IP entre desconocidos. Por eso el reenvío selectivo desde servidor, cuando una sala crece, no es solo una decisión de escala: es la decisión de privacidad. En expedición pequeña, malla; en el asentamiento, servidor. Y como en la malla el servidor no oye, el nivel de cada boca no lo afirma quien habla sino quienes lo oyen, y la zona se queda con la mediana: es la única medida del juego que nace en el cliente, avalada por los clientes de al lado, y por eso ninguna Métrica paga más por ella que por las demás.
Este es un juego donde falsificar una página de Cuaderno es contenido, donde acusar a un clan de inventarse una Métrica es la capa política y donde una refutación pública puede hundir a una casa. Engañar a otros jugadores es el metajuego.
La distinción es limpia y no admite matiz: se puede mentir a cualquiera sobre lo que la puerta midió. No se puede mentirle a la puerta.
Desplegar sin apagar la noche
Un mundo persistente es un servicio que nunca se apaga, y aun así hay que cambiarle piezas todas las semanas.
- Desplegar
- Una zona no se reinicia: se drena. Se levanta la versión nueva, se traspasan los cuerpos uno a uno por el mismo camino que usa un jugador al cruzar de zona, y la vieja se apaga vacía. Para el jugador es un tic.
- Instancias en vuelo
- No se tocan. Una instancia vive lo que dure la entrada —un puzle de dos minutos, una mazmorra de varias rondas largas (definición: La unidad de tiempo del Vivero: unos veinte minutos de recinto, lo que tarda en reponer una cría hecha. Es lo que hay detrás de la regla de bolsillo del mundo — «una, y espera».), y hasta un ciclo (definición: El periodo de reposición de un motor de ración: entre cuarenta y ciento veinte horas, constante hasta el minuto. Aquí no se cuentan días, se cuentan repartos.) entero si alguien se quedó dentro—: se la deja terminar en su versión y muere sola. Por eso un despliegue no es un instante sino una marea: las zonas se drenan en horas y las instancias viejas se apagan por su pie a lo largo de un ciclo, cada una con la versión que la parió, y dos versiones conviven ese tiempo sin hablarse porque una instancia no habla con nadie. Nunca se corta un reto por un despliegue.
- Pasarelas
- Se rotan sin ceremonia. El cliente reconecta y retoma la sesión donde estaba, porque la pasarela no guardaba nada.
- Observabilidad
- Sale del mismo registro de sucesos que el juego. No hay una tubería de analítica aparte: las señales que dicen si esto funciona son consultas sobre lo que ya se está guardando por razones de ficción.
- Coste
- Se mide por mundo y por hoguera encendida, no por servidor físico. Un mundo dormido aparece en la factura como almacenamiento y en ningún otro sitio.
El pipeline de arte de este proyecto tiene un paso humano que no se salta nunca. El del código, también, y por la misma razón: la máquina compone bien y no decide qué merece existir.
De ahí salen las reglas de ingeniería, que no son higiene sino consecuencia: servicios pequeños, porque lo que no cabe en una cabeza no se revisa; un solo lenguaje, porque la atención del revisor es el recurso escaso; pocas dependencias, porque cada una es código sin revisar; y pruebas exhaustivas, porque son la única forma de que revisar sea leer y no adivinar.
Lo que no se puede revisar, no entra. Vale para una lámina y vale para un fichero .go.
Dónde se rompe esto
Los cinco sitios por donde se rompe una arquitectura así. Ninguno se resuelve del todo, y el primero es el único donde el diseño y la máquina se pelean de verdad.
| Riesgo | Por qué es serio | Mitigación |
|---|---|---|
| La densidad del asentamiento | Es el único sitio donde el juego quiere trescientos cuerpos juntos, y el coste crece con los pares que se perciben. | Subdivisión por hoguera, percepción acotada a la luz, y voz por reenvío selectivo cuando la sala se llena. Si aun así no aguanta, se recorta el aforo de la plaza antes que la calidad del tic. |
| La costura del traspaso | Un salto visible al cambiar de zona rompe la inmersión más que cualquier tirón de latencia. | Perímetros solapados, reserva antes de soltar y traspaso en un solo tic. Se mide como métrica de producto, no de infraestructura. |
| El historial que no para de crecer | La fuente de verdad es lo único que nunca se borra, y eso es una bomba de relojería de almacenamiento. | Compactación por temporada, archivo en frío de lo cerrado y proyecciones materializadas para lo que se consulta a diario. El Osario lee un resumen, no el registro entero. |
| Concurrencia mal escrita | Es el riesgo propio de Go: escribir una carrera es fácil, y en un servidor de estado compartido es catastrófico. | Ninguna zona comparte memoria con otra, toda mutación entra por un canal y el detector de carreras corre en integración continua. La arquitectura hace difícil la clase de error que el lenguaje hace fácil. |
| Mover lógica al cliente | La tentación llega siempre, y siempre con un buen argumento: «así el combate se siente mejor». | No hay mitigación técnica, solo una regla escrita: el cliente predice, el cliente nunca decide. Es la línea que, si se cruza, convierte el juego en otro juego. |
«El cliente puede predecir.
El cliente nunca decide.»

