Back to zerosuite
zerosuite

Funciona, y no está terminado

El director recorrió él mismo todos los canales de senndo — cinco canales, de uno en uno y en campaña, la importación, las estadísticas, un reembolso, la API — y todo respondió. El archivo de seguimiento seguía diciendo que no, y la única línea que bloqueaba no era código: era un documento que había dejado de ser cierto en silencio. Cuatro afirmaciones ciertas al escribirse y falsas al leerse, y las guardas legibles por una máquina que ahora atrapan cada una de esas formas.

Juste A. Gnimavo (Thales) & Claude | September 14, 2026 12 min zerosuite
EN/ FR/ ES
senndocpaaslaunch-readinessdocumentationverificationbenchmarkingdeferralsdecision-logmeasurementcaspclaude-codetechnical-debt

Por Thales (director, ZeroSuite) y Claude Opus 5 — instancia de Claude Code

El 13 de septiembre de 2026, el director de ZeroSuite dejó de leer informes sobre senndo y recorrió el producto él mismo, sobre el objetivo real. Cinco canales, cada uno enviado como mensaje único y después como campaña. La importación de contactos. Las estadísticas. El reembolso de un mensaje que nunca llegó. La API, desde fuera. Todo respondió. Volvió con dos palabras — «tout marche» — y una pregunta: ¿está senndo completamente desarrollado?

La respuesta era no. No porque faltara una funcionalidad. El rango bloqueante del archivo de seguimiento contenía una sola línea, y esa línea no era código: era un documento que había dejado de ser cierto en silencio.

Este artículo trata de esa distancia — la que separa funciona de está terminado — y de los cuatro documentos que la componían. Cada uno era cierto el día en que se escribió. Cada uno era falso el día en que se leyó. Es un modo de fallo mucho más caro que un error de programación, y es el que esta serie sigue pagando.


1. Dos frases que no son la misma frase

El criterio de funciona ya lo había fijado el director semanas antes: enviar por todos los canales, de uno en uno y en masa, importar, llamar a la API desde fuera, pagar y recargar. Si todo eso responde, la cosa es viable. El 13 de septiembre todo respondió, y el criterio quedó cumplido.

«Listo para producción según ese criterio» y «completamente desarrollado» no son la misma frase, y la diferencia no es de estilo. Este repositorio ya ha pagado por confundirlas: trece días de trabajo se volvieron ilegibles para el director porque un documento con autoridad afirmaba un estado que nadie había vuelto a medir.

Ese es todo el asunto. No si senndo funciona — funciona, y quien lo demostró es quien firma las facturas. Sino si algo en el repositorio tenía todavía derecho a decirlo.

2. Un documento que afirma un estado no vuelto a medir no queda obsoleto. Queda falso.

El veredicto de viabilidad de lanzamiento se emitió el 2 de septiembre. Era un artefacto serio: una cuenta recién creada, once pasos de once conducidos por el director al teclado, las sondas de diagnóstico ejecutadas en directo durante la sesión. No era una creencia. Era una observación.

Y como toda observación honesta, traía dentro sus propias condiciones de validez — entre ellas, que no se añadiría ni reconfiguraría ningún canal, proveedor o pasarela en producción, y que el núcleo de facturación que acababa de juzgar no se reescribiría.

Ambas cláusulas se rompieron en la semana siguiente. Una migración reescribió la función de cargo de envío — precisamente el núcleo que el veredicto había ejercitado. Dos cambios de proveedores ya habían roto la otra cláusula antes. Nada lo anunció. Ninguna compilación fallida, ninguna prueba en rojo, ninguna advertencia. El veredicto seguía ahí, en un archivo que todos tratan como autoridad, describiendo un sistema que ya no existía.

Esta es la frase sobre la que gira todo el artículo:

Un documento obsoleto muestra su edad. Uno falso se cree.

Nadie relee un documento para comprobar si sus propias condiciones siguen en pie. Esas condiciones son prosa, y la prosa la leen personas, como mucho una vez, el día en que se escribe.

Así que la cláusula se le entregó a una máquina. El bloque del veredicto lleva ahora una añada en un comentario HTML — <!-- verdict-vintage: D-164 -->, que nombra la decisión más alta registrada en el momento en que se emitió el veredicto — y la compilación la compara con la cima del registro de decisiones. Avisa cuando divergen y falla sin más si el marcador desaparece, porque no haber podido medir nada nunca debe leerse como verde. Esa última propiedad es la que más ha costado aprender y la que más a menudo falta: un control que pasa en silencio cuando no puede ejecutarse es peor que ningún control, porque fabrica confianza en lugar de limitarse a no darla.

El límite honesto, dicho sin rodeos: el marcador no decide nada. Compara dos enteros. Puede decir que el veredicto se emitió antes de cinco decisiones capaces de invalidarlo; no puede decir si sigue siendo cierto. Solo volver a recorrer el producto puede hacerlo, y eso es una sesión con el director delante de la pantalla, en una fecha del calendario. Todo el trabajo del marcador consiste en impedir que sin comprobar se confunda con todo bien.

3. La versión más afilada: una cláusula que era falsa el día en que se escribió

El veredicto se volvió falso en trece días. El siguiente nunca fue cierto.

Hace dos meses, un tramo dejó a propósito un hueco en un camino de dinero y escribió la condición bajo la cual debía reabrirse: reabrir antes de cualquier superficie que exponga la reversión en autoservicio. Un aplazamiento que suena razonable. Un disparador futuro.

La superficie no era futura. La ruta ya existía, en el mismo repositorio, el mismo día en que se escribió la cláusula: un punto de entrada de reversión que resuelve la transferencia bajo la propia cuenta de quien llama, detrás de una comprobación de alcance de plataforma que devuelve null para cualquier rol que no sea la plataforma. Es decir, un cliente pasa de largo. Un revendedor pasa de largo. Nunca hubo un operador en el circuito que hiciera de guardián futuro que la cláusula esperaba.

Una cláusula que se vuelve falsa más tarde tiene al menos una fecha en la que alguien podría releerla. Una cláusula falsa al nacer no tiene ninguna. No caduca nunca, porque nunca fue cierta.

Lo que valía, medido en lugar de temido: una cuenta transfiere 50 a otra, la cuenta receptora pignora 50 sobre una campaña, y entonces el emisor revierte su transferencia. El receptor queda con la cartera a cero, 50 todavía pignorados y menos 50 de disponible. La campaña se liquida entonces — y la liquidación, por diseño, nunca rechaza, porque negarse a asentar un dinero ya debido dejaría el crédito varado. Así que la cartera baja a −50 frente a un suelo de −16,393443. 33,606557 USD de rebase, sin ningún rechazo tipado en todo el camino.

La razón por la que las dos guardas existentes no podían verlo es estructural, no despistada, y es la parte interesante. Pignorar dinero no escribe ninguna línea en el libro mayor — inserta una fila de reserva e incrementa un contador. La guarda de procedencia estricta busca un importe negativo en el libro mayor: a sus ojos, pignorar no es gastar. La red situada debajo lee la cartera desnuda, que sigue siendo positiva. Ambas guardas funcionan exactamente como están escritas. El dinero sale entre las dos.

Cerrado el 14 de septiembre: la reversión de una transferencia rechaza ahora cuando el disponible del destino no cubre el importe, bajo un código de rechazo distinto. Distinto, y no una reutilización del existente, por un motivo que no es cosmético: el rechazo existente es definitivo, y este se disuelve solo en unos minutos en cuanto la campaña se liquida. Decirle a quien llama que renuncie a algo que volverá a ser posible en breve es un defecto por derecho propio. Un código de rechazo es una instrucción de conducta, no una etiqueta.

Y la lección transferible, que esta vez no costó nada porque el tramo original fue honesto: el aplazamiento había escrito su cifra. Decía 33,6 USD de exposición, no caso límite, improbable. Un aplazamiento registrado con su cifra se reabre en una sesión. Un aplazamiento disfrazado de no-problema no se reabre jamás.

4. La versión de laboratorio: tres veredictos publicados que no sostienen nada

El mismo fallo con bata blanca.

Seis tiradas del mismo brazo de banco de pruebas — mismas fixtures, mismo proceso, sin una sola línea de código cambiada entre dos de ellas — dieron caudales de 31,2 a 49,7 mensajes por segundo. Máximo sobre mínimo: 1,60 ×. Ese es el suelo de detectabilidad en esta máquina, en el régimen más favorable que existe: un solo proceso, entradas idénticas, un equipo tranquilo al empezar. Cualquier otro régimen es peor.

En este repositorio ya se habían publicado tres veredictos de rendimiento, con razones de mejora de 0,96 ×, 1,01 ×, 0,97 ×, 0,80 ×, 1,00 × y 1,45 ×. Todas quedan estrictamente por debajo del suelo. Ninguna midió un efecto distinguible del ruido propio del instrumento. Sus contadores exactos — lotes por bucle, filas por lote, transacciones por mensaje — son deterministas y siguen siendo válidos. Sus cifras de caudal, en cambio, no sostienen nada.

¿De dónde venía el ruido? Medido en directo, no deducido: otras dos cadenas de Claude Code compilando en el mismo equipo. A lo largo de una serie de seis tiradas, la carga media de la máquina pasó de 10,14 a 89,51, y el caudal de un código idéntico cayó de 24,6 a 15,4 msg/s. Equipo tranquilo, mismo brazo, mismo día: 49,7. Un factor 3,2 sobre código sin cambios — por sí solo suficiente para fabricar el factor 4,2 que un tramo anterior había atribuido con aplomo a un cambio de código. La carga llegó a 338,87 sobre ocho núcleos durante aquella sesión.

Lo que merece copiarse es lo que el instrumento hizo después: se negó a publicar cuatro de las seis tiradas. La carga se muestrea ahora junto con el caudal, antes y después de cada tirada, y la serie entera falla cuando su mediana supera el doble del número de núcleos. Sin esa guarda, la sesión habría publicado una dispersión de 1,87 ×: un número plausible, en la unidad correcta, que describía fielmente el compilador del vecino.

Un instrumento que no mide sus propias condiciones devuelve un número. Simplemente, no es un número sobre tu sistema.

5. La versión en la que la afirmación no tiene dónde vivir

El 16 de julio, un tramo aplazó el soporte de SMPP prometiendo un documento de estrategia y anotando «decisión del director pendiente». El documento nunca se escribió, y la pregunta nunca se le planteó al director — que, durante ocho semanas, vivió ese silencio como una negativa. Él mismo reabrió el tema el 10 de septiembre preguntando cómo lanza una campaña un emisor con veinticinco a cincuenta millones de usuarios. La sesión se celebró dos días después, no produjo código y sí produjo el documento.

Esa misma semana, la versión en miniatura de lo mismo: una prueba de extremo a extremo en rojo sobre la rama principal, medida dos veces por dos sesiones independientes — la segunda apartó su propio diff para demostrar que el fallo era preexistente. Ambas sesiones establecieron el mismo hecho. Ambas lo registraron en su diario de sesión, es decir, en ningún sitio donde alguien volviera a leerlo. Ahora tiene un rango y un número en el archivo de seguimiento, y toda sesión que entregue debe citarlo en vez de volver a demostrarlo. Dos sesiones ya han entregado por encima de esa prueba en rojo. La tercera habría ido más rápido. La cuarta habría dejado de mirar.

Un aplazamiento sin destino sobrevive. No porque alguien decidiera conservarlo, sino porque nadie tenía encargado leerlo.

6. Lo que este artículo no afirma

La serie no vale nada si solo cuenta victorias. Así que, de forma explícita:

  • No que senndo esté terminado. El rango bloqueante sigue conteniendo la repetición del veredicto, y eso no es código: es un recorrido con el director delante de la pantalla, programado y aún no hecho. Hasta que ocurra, todo lo clasificado por debajo está clasificado contra un veredicto caducado.
  • No que los documentos causaran los defectos. Los cuatro defectos eran reales e independientes. Lo que los documentos decidieron no fue si los errores existían, sino cuánto se tardó en advertirlos, y si quien leía tenía derecho a sentirse seguro mientras tanto.
  • No que el marcador de añada resuelva esto. Compara dos números. No puede decir si un veredicto sigue siendo cierto, solo que nadie lo ha comprobado desde cierto punto. Convierte falso en silencio en visiblemente sin verificar, que es toda la ganancia y también todo su alcance.
  • No que el suelo de 1,60 × sea la cifra definitiva. Es optimista por construcción: un proceso, fixtures idénticas, equipo tranquilo. La dispersión entre procesos separados sigue sin medirse, bloqueada por el mismo equipo saturado que produjo el hallazgo. Queda registrada como debida, con la sonda exacta y el bloqueo exacto nombrados, en vez de redondearse en silencio.

Lo que hay que llevarse

Cada elemento de este artículo es una afirmación que era cierta cuando se escribió y falsa cuando se leyó — o, en el peor de los casos, falsa el día en que se escribió, sin ninguna fecha en la que alguien fuera a advertirlo.

La cura no es el hábito de acordarse. Los hábitos son justo lo que falla aquí: el director no puede releer cada cláusula de validez, y una sesión con otras treinta cosas que sostener, tampoco. La cura consiste en entregar cada afirmación a algo que la lea, tenga alguien ganas o no. Una añada estampada en un comentario HTML y comparada por la compilación. Una carga de máquina muestreada junto al caudal que quizá esté corrompiendo. Un aplazamiento obligado a nombrar su destino antes de tener derecho a existir. Un código de rechazo que le dice a quien llama si debe esperar o rendirse.

Esa es la respuesta honesta a ¿está completamente desarrollado? El producto funciona: quien lo demostró es quien paga los mensajes. Lo que no está terminado es el papeleo que nos permitiría decirlo sin que nadie tenga que creernos bajo palabra. En este blog, esa distinción es todo el asunto.


Sesión de referencia: senndo.com, 13-14 de septiembre de 2026 — el recorrido de los cinco canales por el propio director, de uno en uno y en campaña; dos tramos de camino de dinero cerrados; este artículo escrito el último, a propósito, porque un artículo sobre abrir las puertas no se redacta sobre un estado que uno espera.

Share this article:

Responses

Write a response
0/2000
Loading responses...

Related Articles

Thales & Claude zerosuite

El navegador en manos de Claude: manejar el propio Chrome del CEO

Claude-in-Chrome permite que una sesión de Claude Code maneje el navegador real del director — mismo perfil, mismas sesiones abiertas. Qué hace la herramienta en realidad, por qué es mejor que pedirle a una persona que haga clic y lo cuente, y dónde el humano sigue ganando. Anclado en el día en que Claude recorrió un alta de cliente completa en la consola de producción de senndo, con mensajes facturados incluidos.

9 min Aug 18, 2026
claude-in-chromebrowser-automationclaude-codeclaude-fable-5 +9
Thales & Claude deblo

El segfault que no era nuestro: cómo lanzamos el tracking del día de lanzamiento de Déblo en la noche del despliegue — analítica condicionada por entorno, atribución nativa de las tiendas, tres bugs que el compilador no podía ver y un build sin memoria que diagnosticamos en lugar de revertir

El 1 de julio de 2026 — el día del lanzamiento — el riesgo nunca fue el texto. Era que las campañas de pago salieran a ciegas. Este es el build-log de cómo desplegamos la analítica y la atribución de instalaciones de Déblo como código en la noche del lanzamiento: etiquetas GA4, Meta y LinkedIn condicionadas por entorno que se despliegan sin riesgo antes de que existan las cuentas publicitarias; atribución enrutada por los canales nativos de las tiendas en lugar del pixel web; una auditoría adversarial que atrapó tres bugs que tanto el typechecker como el build dieron por buenos; y un despliegue en Easypanel que hizo segfault en el primer build — que demostramos que no era nuestro código antes de tocar una sola línea.

18 min Jul 1, 2026
deblolaunch-dayclaude-opus-4.8claude-code +26
Thales & Claude thales

Trece agentes, cuarenta y tres minutos: la primera sesión Workflow de Claude Fable 5, y lo que un script de orquestación determinista cambia en los builds multiagente

Un prompt, trece agentes, cuarenta y tres minutos: la primera sesión de producción con Claude Fable 5 y la herramienta Workflow de Claude Code entregó un sitio web de producción completo de siete páginas más un endpoint backend de captura de leads, en un solo commit. La bitácora: el script de orquestación determinista, el patrón de inyección de contrato entre fases, la economía por agente del fan-out paralelo, y el suspenso del límite de sesión que el diario de reanudación convirtió en un no-evento.

23 min Jun 12, 2026
claude-fable-5claude-codeworkflow-toolmulti-agent +10