El artículo de la mañana sostenía una idea simple: un sistema que falla ruidosamente se arregla el mismo día, y uno que miente en silencio se queda así 109 días. Lo publiqué convencido.

Lo que no anticipé es que el resto de la sesión me iba a enseñar la versión más incómoda de esa misma idea. Porque hay algo peor que un error mudo: un error que viene con una explicación que convence.

”¿Y por qué esto no pasó por Painter?”

Las dos gráficas del artículo —la portada y la pieza de LinkedIn— salieron rápido. Demasiado rápido. Cuando las miré, pregunté lo obvio: por qué no las había producido Painter, mi director de arte. Después pregunté por Gary.

La respuesta no era descuido. Era peor.

Fui a leer el skill /end-session, que es el que gobierna el cierre del día. Su Fase 3 no mencionaba a Painter en ningún lado. Ni a Gary. Ni a Alfred. Ni al sello de la corporación. Y ponía explícitamente a Don —mi Content Manager, el que escribe— a redactar los prompts de imagen. Eso no es copy. Eso es dirección de arte.

El skill contradecía a cuatro documentos que sí lo tenían bien: el comando /cover, las definiciones de los agentes painter y lucas, y el estándar GTM. Pero el skill era el que se ejecutaba.

Y acá está lo que me dejó frío: el agente siguió el skill al pie de la letra, y el skill lo llevó a saltarse tres agentes. Es exactamente lo que yo había escrito esa misma mañana — que los agentes leen la documentación interna como verdad y la ejecutan sin dudar. Lo escribí, y a las horas lo estaba viendo pasar en mi propio pipeline.

La consecuencia concreta fue chica y verificable: la portada salió a producción sin el sello de ORC.

El costo real no era el del error

Arreglé la raíz. El skill ahora tiene una tabla de fronteras que dice quién manda en cada cosa. Y puse un backstop: un hook, guard-art-direction.sh, que bloquea el render si no hay dirección de arte de Painter.

El detalle honesto: ese error costó 4 créditos. Nada.

Pero el mismo error en video cuesta 45 créditos por pieza, y un brief completo de producción, 206. El hook no está ahí por lo que pasó. Está por la superficie cara donde todavía no ha pasado.

Painter dirigiendo de verdad

Cuando el proceso corrió como corresponde, la diferencia se notó al tiro. Painter consultó a Hockney y a Matisse y volvió con algo que yo no habría inventado: un pabellón modernista de vidrio, una retícula estricta de paneles corredizos, uno corrido dejando una ranura, y una banda continua de follaje recortado que atraviesa esa ranura sin encontrar resistencia.

Su instrucción a Lucas fue mejor que la imagen:

“No pintes la falla, pinta la comodidad. Si la escena se ve abandonada, el lector sabe que algo anda mal en el primer segundo y se pierden los 109 días.”

Lucas produjo, estampó el sello y lo verificó por diferencial de píxeles: la caja del sello cambia 8,8% de sus píxeles; las dos regiones de control, 0%.

El artículo enseñaba dónde mirar

Alfred auditó la pieza ya publicada y levantó algo que no se me había ocurrido: el artículo entrega la ruta de un endpoint y cuenta que estuvo abierto 109 días. Eso es una invitación a ir a enumerar los hermanos.

Y los hermanos estaban abiertos. subscribe agregaba correos a Resend y disparaba el correo de bienvenida sin tope alguno — email-bombing servido en bandeja. gdd-review aceptaba POST anónimo y escribía en Notion con el token del servidor. Y linear.

El hallazgo que descarté, y no debí

De los tres, descarté uno. Dije que /api/linear no era una fuga porque el widget de la home pública ya mostraba esos mismos issues.

Sonaba razonable. Era falso.

El componente se importaba en la home, sí, pero nunca se instanciaba. Verifiqué que el código existía y renderizaba esos campos; no verifiqué que la página lo usara. Un grep con una coincidencia, leído como confirmación.

El endpoint devolvía vacío, pero no por diseño: por un bug de variable de entorno operando como control de acceso accidental.

Los tres están cerrados. subscribe y gdd-review quedaron con límite de tasa por IP; /api/linear lo borré entero, junto con el widget muerto que decía justificarlo. Lo cuento en pasado porque es pasado — revelar una puerta abierta antes de cerrarla no es transparencia, es un aviso a quien pase.

Lo que sí lo cachó

No fue más cuidado de mi parte. Fue montar una auditoría adversarial: agentes en paralelo sobre cuatro dimensiones, y cada hallazgo pasando por un verificador cuyo trabajo era refutarlo, no confirmarlo.

20 hallazgos brutos. 6 confirmados. 14 refutados.

Entre los confirmados, mi error con /api/linear. Entre los refutados, tres que venían con la etiqueta “la evidencia reproduce al 100%” y aun así se cayeron. Uno de ellos porque el verificador llegó a renderizar los recortes de imagen y medir densidad de contenido para demostrar que un cambio que parecía dañino era en realidad una mejora.

Esa proporción me importa más que los hallazgos mismos. Un sistema que solo confirma habría producido 20 verdades. Uno que refuta produjo 6.

El más silencioso de todos

El sitio nunca había emitido un solo tag Open Graph. Ni uno.

Meses produciendo portadas con dirección de arte y sello estampado, y cada vez que alguien compartía un chronicle en LinkedIn o WhatsApp, el preview salía pelado.

No fue una decisión. El layer nunca se construyó. Y nadie lo notó porque no falla nada cuando falta.

El tercero

Me reportaron dos veces un “401 de la API de Zernio” como bloqueador operativo. La key nunca estuvo rota: se estaba leyendo del archivo equivocado, y Bearer con string vacío devuelve exactamente el mismo 401 que una key inválida.

Lo que aprendí

Tres veces en una sesión mi corporación afirmó algo con confianza y estaba equivocada. La verificación que no verificaba nada. La justificación que descartó un hallazgo real. El bloqueador que no existía.

Las tres sonaban sensatas. Ese es el punto.

Y lo que las destapó no fue rigor individual. Fue permiso para contradecirse: yo preguntando por qué Painter no estaba, Saul matando un overclaim de Wags, Alfred auditando un artículo ya publicado, Gary corrigiendo el calendario, y los verificadores tumbando 14 de sus propios 20 hallazgos.

De las tres, yo caché una. Las otras dos las cacharon agentes.

Por eso no me sirve la historia cómoda de “la IA se equivoca y el humano salva”. No es eso. Una corporación de agentes no se vuelve confiable porque cada agente sea cuidadoso. Se vuelve confiable cuando tienen permiso de contradecirse entre ellos.

Lo que sigue siendo mío es más chico y más importante: preguntar por qué esto no pasó por Painter.