El mapa
Las diez soluciones son los bloques —son lo que se construye y se vende—. Las seis etapas son el eje de arriba: nomenclatura del recorrido, no módulos. Cada bloque abarca las etapas donde opera: por eso Agent Registry es un solo bloque sobre dos etapas y no dos cosas.
Para quién es esto, y por qué existe.
El problema que resuelve
Cada vez más gente pregunta, compara y decide dentro de un asistente de IA. El asistente solo puede responder con lo que alcanza, y a la mayoría de las organizaciones no llega: la venta se la lleva quien sí alcanzó —casi siempre el catálogo más grande, nunca la tienda más cercana—. Y no queda rastro: no es un carro abandonado ni una visita perdida, es no haber aparecido nunca en la propia analítica.
Qué es, en una línea
El análisis muestra qué ve un asistente de IA cuando busca lo que ofreces. Si hay
brechas, armamos tu agente —el ARTwin— y lo
publicamos donde los asistentes lo encuentren. Los asistentes de las personas preguntan, tu agente
responde, y cuando corresponde, transacciona. Una conexión cubre todas las superficies,
incluidas las que aún no existen.
Tres industrias, un mismo camino
El análisis y quedar legible van para las tres. Lo que cambia es qué significa el catálogo (etapa Existir) y los ejemplos individualizados de Responder y Operar.
| Industria | Qué es | Qué es su catálogo |
|---|---|---|
| Retail | Tiene checkout: carro y posibilidad de comprar. | Productos, con precio y stock. |
| Servicios | Presta un servicio, tangible o intangible. | Servicios disponibles — sin stock, necesariamente. |
| Sistemas | Da software: licencias o servicios relacionados. | Servicios y licencias — sin stock. |
En la landing esas tres industrias se presentan como cuatro perfiles —tienda en línea, empresa de servicios, software y SaaS, institución o sitio informativo—: el cuarto es una Servicios que no vende, y publica qué informa, a quién atiende y dónde se hace cada trámite.
Agent Score
«Mide qué tan preparada está tu empresa.»
Opera en
01, gratis · ARAIS
Estado
En producción.
Piezas
y no la bloquea
Qué hace
Recorre un sitio una sola vez y responde qué encuentra un asistente de IA cuando alguien pregunta por lo que esa organización hace. Devuelve un puntaje sobre 26 puntos en 4 capas, con la evidencia citable y el instante en que se observó. Es gratis y el informe es del comercio aunque nunca siga.
Requerimiento técnico
- Contrato de entrada:
POST /api/analizar {correo}— el dominio sale de lo que va después del arroba. El resultado no se devuelve ahí: se manda un enlace al correo, y abrirlo es el acto de verificación. - Una sola pasada a la red (
ADR-0013). Todo lo demás se deriva de la captura. - Invariante: el puntaje se calcula solo sobre los puntos aplicables y no se publica bajo
MINIMO_PUBLICABLE = 8. - Deuda crítica, cerrada en rama (2-sep-2026):
render.ts:288ya sale deinf.puntaje.totaldesde el 26-ago (commitd8e7420); el stream y el correo de reenvío (analizar.ts:220y:111) desde el PR #3, con la prueba de identidadpruebas/denominador.mts—identidad de los dos valores, no solo numerador ≤ denominador—, pendiente de merge.
Consumo en tokens
Tablero de avance
| Subfuncionalidad | Pieza | Estado | Qué falta |
|---|---|---|---|
| Captura del sitio | — | Listo | Una pasada, respetando robots.txt bajo el mismo user-agent con que se identifica. |
| Clasificación de perfil | — | Listo | Retail, servicios, sistemas o institución. Define qué puntos aplican. |
| Capa Legibilidad L01–L06 | — | Listo | Completa. |
| Capa Transaccionabilidad T07–T14 | — | Listo | Completa. |
| Capa Resolución R15–R22 | — | Listo | Completa. |
| Capa Sondas S23–S26 | P23 | Listo | Los cinco asistentes verificados contra su API real. El veredicto deja de ser binario: con cinco existe parcial. grok entró el 4-sep tras reescribir su adaptador contra la Agent Tools API —el anterior mandaba search_parameters, que xAI descontinuó, y apuntaba a grok-3, que ya no existe—. Se eligió la variante no-reasoning midiendo: la de razonamiento gastó 2.517 tokens de salida contra 1.114, con 1.812 de razonamiento puro. Llamada real: 7 dominios citados, USD 0,052040. El cobro por búsqueda sigue sin modelar en los cinco (A14): xAI no lo publica y su cost_in_usd_ticks no documenta la escala, así que inferirla sería inventar una cifra. |
| Cálculo con denominador | — | Listo | MINIMO_PUBLICABLE = 8 respetado. |
| Entrega del informe | — | Listo | render.ts:288 corregido el 26-ago (d8e7420, verificado 2-sep). El stream (analizar.ts:220, :111) y listar-blobs.mts:8 corregidos el 2-sep en el PR #3 con prueba de identidad, mergeado a main el 2-sep. Cifra reconciliada el 2-sep: 92 de los 279 informes en disco (23-ago) tienen evaluados > 16 y sus 279 HTML imprimían /16; describe el estado anterior al 26-ago. |
| Pruebas | P21 | Listo | 16 suites pasan y hay gate en CI en verde sobre un push real (PR #1, 2-sep-2026). Cobertura de criterio de los 26: 26 de 26 (PR #5). Mergeado a main el 2-sep, con protección de rama activa y el check requerido: un PR sin el gate en verde queda bloqueado. |
AI Radar
«Descubre si tu empresa existe para las IA.»
Opera en
01, gratis · ARAIS
Estado
En producción.
Piezas
y no la bloquea
Qué hace
Corre el mismo análisis sobre los actores principales de cada industria en América Latina y publica el resultado. Ubica a una organización frente a su industria y su país. Nadie paga por aparecer ni por salir: se publica lo que se midió, con la fecha.
Requerimiento técnico
- El directorio vive en
radar-latam.tsv: 372 organizaciones, 20 países. src/data/public-scores.tsse genera. El motor lo reescribe entero en cada corrida —varias por semana—, así que toda edición manual se pierde: el copy se cambia en la plantilla del generador.- Dos reglas que ya costaron una corrección: se excluyen los sitios propios de la medición, y se usa un solo motor por medición para que dos puntajes sean comparables.
- Decisión pendiente: al encender los cinco asistentes, los 203 ya medidos dejan de ser comparables. O se recorre el directorio completo, o se marca la fecha de corte —mezclarlos sin decirlo rompe la regla del denominador—.
Consumo en tokens
Tablero de avance
| Subfuncionalidad | Pieza | Estado | Qué falta |
|---|---|---|---|
| Directorio de organizaciones | — | Listo | 372 en 20 países. |
| Corrida masiva del análisis | — | Listo | 203 medidos. |
| Publicación del puntaje | — | Listo | Con denominador y fecha. |
| Mapa por país | — | Listo | Medidos sobre total del directorio. |
| Derecho a réplica | — | Listo | Canal publicado en /bot. |
| Comparabilidad entre corridas | P23 | A medias | Los 203 se midieron con 1 asistente. Al pasar a 5 hay que decidir qué pasa con lo ya publicado. |
AI Presence
«Que te encuentren y te entiendan.»
Opera en
02, gratis 3 meses · ARTwin
Estado
Parte construida.
Piezas
para completarla
Qué hace
Toma lo que la organización ya publica, lo normaliza con procedencia y lo sirve en los formatos que un agente lee —JSON-LD, llms.txt, catálogo, páginas sin JavaScript y servidor MCP—. Las brechas que se pueden cerrar por él se cierran; las que no, se entregan con la instrucción exacta.
Requerimiento técnico
construirGemelo(c: Captura): Gemeloes pura y sincrónica: no toca la red ni pide credenciales. Sale de la misma captura del Agent Score.- Invariante
ADR-0007: ningún dato entra sin procedencia —verificado/declarado/inferido— con el instante en que se observó. publicable()descarta lo inferido. Con solo 13 de 237 sitios sirviendo feed o API, esto recorta mucho: publicar a escala sería publicar dato inferido bajo el nombre de otro.- Las superficies se generan en cada solicitud, nunca como archivo estático: es lo que hace que el corte sea real (
ADR-0008). El estado vive en el nombre del objeto, no en un registro con caché. - Activación: el
ARTages un archivo en/.well-known/agentroom.jsony elARDoorsu sello visible. No un script —un agente no ejecuta JavaScript—.
Consumo en tokens
| Línea | Se cobra | Tarifa | Nota |
|---|---|---|---|
| — primeros 3 meses | — | 0 | El ARTwin es gratis por 3 meses a cambio de instalar el ARTag. |
| Catálogo en la sala | por producto al mes | TBD | Mantener productos, precios y stock vivos para todos los asistentes. |
| Que te encuentren | por coincidencia calificada | TBD | Cuando un agente muestra la organización como respuesta a una necesidad. |
Tablero de avance
| Subfuncionalidad | Pieza | Estado | Qué falta |
|---|---|---|---|
| Construcción del ARTwin | P22 | Listo | Corre en cada análisis y se guarda, con el fallo aislado. |
| Procedencia por dato | — | Listo | ADR-0007. Es lo que lo hace defendible. |
| Filtro de lo inferido | — | Listo | publicable(). |
| Superficies para agentes | — | Listo | JSON-LD, llms.txt, catálogo, páginas, MCP. |
| Servicio por Puerta C | — | Listo | Sin que el comercio toque nada. |
| Corte real del servicio | — | Listo | ADR-0008. Dar de baja apaga de verdad. |
| Avisar que el ARTwin existe | — | Falta | Lo más barato con más efecto: hoy el panel muestra el problema y esconde el remedio ya construido. |
| Revisar y completar | — | Falta | Sin esto no se puede publicar dato inferido: es la condición legal y comercial. |
| ARTag y ARDoor | P40 | Falta | La señal que activa. Sin ella el ARTwin existe y no se sirve. |
| Verificación del ARTag | — | Falta | Botón que sondea el dominio y responde en el momento. |
| Puerta D en dominio propio | P7 | A medias | Hay Puertas D desplegadas; falta como pieza de producto. Mientras viva en la C, la cita se la lleva AgentRoom. |
| Dueño del ARTwin | P1 | Falta | Hoy no hay a quién pertenece ni quién pueda darlo de baja. |
| Ingesta continua | P2 | Falta | La captura es puntual: el catálogo se queda viejo sin aviso. |
| Frescura con vencimiento | P3 | Falta | Sin TTL, dato de hace un mes y dato de hoy son indistinguibles. |
| Métricas de distribución | P18 | Falta | Crawlers, citas y conexiones MCP: sin ellas se entrega a ciegas. |
Agent Registry
«Publica el agente oficial de tu empresa.»
Opera en
03 y 04 · ARDoorMan TalkRoom
Estado
Su página está publicada.
Piezas
para completarla
Qué hace
Cuando un asistente llega buscando resolver un problema —no una marca—, la recepción responde quién puede atenderlo. La organización aparece en esa respuesta, en el orden en que llegó a AgentRoom. Queda declarado qué agente la representa y quién lo opera.
Requerimiento técnico
- Contrato de entrada: lenguaje natural, no un dominio. «Necesito un plan de teléfono prepago» tiene que funcionar sin que el asistente conozca ninguna marca.
- Devuelve organizaciones, no catálogo. El counter nombra; consultar es el paso siguiente y es otra llamada.
- Orden por antigüedad, determinista y auditable: dos consultas iguales dan el mismo orden. Ningún parámetro puede alterarlo —no hay relevancia, ni puja, ni destacados—. Si aparece una razón técnica para ordenar distinto, se escala, no se implementa.
- La fecha de llegada es un dato inmutable del agente.
- El counter no consume tokens. El contador arranca al abrir sala, no antes.
- Depende de Agent Identity: hay que saber quién llega antes de nombrarle a nadie.
Consumo en tokens
| Línea | Se cobra | Tarifa | Nota |
|---|---|---|---|
| El counter | por consulta | 0 | Preguntar quién puede atenderte no cuesta. El contador arranca al abrir sala, no antes. |
| Apertura de sala | por sala | TBD | Acá empieza el cobro. Es la frontera del modelo. |
Tablero de avance
| Subfuncionalidad | Pieza | Estado | Qué falta |
|---|---|---|---|
| Consulta de catálogo por MCP | — | Listo | 3 herramientas. Exige que el asistente ya sepa a quién preguntar. |
| Counter conversacional | P27 | Falta | Pregunta abierta → quién puede atenderla. Es la etapa entera. |
| Orden por antigüedad | P28 | Falta | El primer lugar no se vende. Es lo que separa esto de un directorio pagado. |
| Registro de agentes | P5 | Falta | Hoy se publica un catálogo, no un agente. Es lo que se le vende al comercio. |
| Credencial del agente | P25 | Falta | Publicar el agente y darle credencial son el mismo acto. |
| Registro de demanda no servida | P29 | Falta | El motor de adquisición, no una métrica. Funciona con cero comercios adheridos. |
| Elección múltiple | P30 | Falta | Abrir varias salas de una: comparar es lo que la persona pidió. |
| Apertura de sala | P31 | Falta | Ahí arranca el contador de tokens. |
Agent Identity
«Verifica quién está detrás de un agente.»
Opera en
03 en adelante · transversal
Estado
Su página está publicada.
Piezas
para completarla
Qué hace
Responde quién está detrás de un agente. Los que viven en AgentRoom están autenticados; los que llegan deben autenticarse. Es la pregunta que hoy no responde nadie, y de ella dependen la auditoría, la reputación y la certificación.
Requerimiento técnico
- Estado verificado en vivo:
POST /api/mcpaceptatools/listytools/callsin credencial alguna. - No es una fuga: el corte por
tenantfunciona —un dominio sin servicio activo no entrega nada, comprobado—. Lo que falta es saber quién preguntó. - Decisión abierta para el CTO: API key por asistente, OAuth client-credentials o mTLS. Tiene que aguantar que del otro lado hay software, no personas.
tools/listpuede seguir abierto si se decide explícitamente: descubrir qué herramientas existen no expone datos de nadie.- Migración: los asistentes ya conectados no pueden caerse sin aviso. Definir período de gracia.
Consumo en tokens
Tablero de avance
| Subfuncionalidad | Pieza | Estado | Qué falta |
|---|---|---|---|
| Autenticación del asistente que llega | P24 | Falta | El MCP responde sin credencial. Bloquea todo lo que dependa de auditoría. |
| Credenciales de agentes propios | P25 | Falta | Se mueve a Agent Registry: publicar y acreditar son el mismo acto. |
| Identidad en la minuta | P26 | Falta | Lo que convierte un registro en evidencia. Sin esto la constancia no sirve en una disputa. |
Agent Reputation
«Construye una reputación verificable.»
Opera en
03 en adelante · transversal
Estado
Su página está publicada.
Piezas
para completarla
Qué hace
Un historial que se acumula y se puede consultar: lo que las estrellas hicieron por los marketplaces, para agentes. Permite que una organización decida con quién opera mirando cómo se comportó antes.
Requerimiento técnico
- Precondición dura: sin
P24no hay reputación. Un historial sin identidad verificada es un promedio de anónimos. - Decisión de negocio antes de diseñar: ¿quién la escribe? Si la escribimos nosotros, somos juez y parte. Si la escriben las partes, hay incentivo a mentir. Es lo primero que hay que resolver.
- Alimentación natural: las minutas de
P36—lo que efectivamente pasó— en vez de opiniones. - Ley 21.719: un historial sobre terceros con efectos sobre su acceso puede ser decisión automatizada. Revisar antes de diseñar.
Consumo en tokens
| Línea | Se cobra | Tarifa | Nota |
|---|---|---|---|
| Consulta de reputación | por consulta | TBD | Sin definir: depende de quién escriba la reputación, que es decisión pendiente. |
Tablero de avance
| Subfuncionalidad | Pieza | Estado | Qué falta |
|---|---|---|---|
| Modelo de qué se acumula | P41 | Falta | Definir si son hechos de la minuta o valoraciones. |
| Quién escribe la reputación | — | Sin definir | Decisión de negocio pendiente, no de ingeniería. |
| Consulta pública del historial | P41 | Falta | Y qué parte es visible para quién. |
| Dependencia de identidad | P24 | Falta | Sin esto no se puede construir. |
Agent Certification
«Certifica que cumple estándares.»
Opera en
03 en adelante · transversal
Estado
Su página está publicada.
Piezas
para completarla
Qué hace
Niveles de certificación sobre identidad, seguridad, políticas, gobernanza y auditoría, para que la confianza entre dos partes no dependa de conocerse.
Requerimiento técnico
- Es la que más compromete a AgentRoom: certificar es afirmar algo sobre otro. Antes de diseñarla hay que decidir quién responde si un agente certificado se porta mal.
- Precondición: los niveles se apoyan en
P24(identidad),P33(capacidades declaradas) yP36(auditoría). Sin esas tres no hay nada que certificar. - Vigencia y revocación: una certificación sin fecha de vencimiento ni forma de retirarla es peor que ninguna.
Consumo en tokens
| Línea | Se cobra | Tarifa | Nota |
|---|---|---|---|
| Certificación | por emisión y vigencia | TBD | Sin definir. Tampoco está resuelto quién responde por lo certificado. |
Tablero de avance
| Subfuncionalidad | Pieza | Estado | Qué falta |
|---|---|---|---|
| Definición de niveles | P42 | Falta | Identidad, seguridad, políticas, gobernanza, auditoría. |
| Quién responde por lo certificado | — | Sin definir | Decisión de negocio pendiente. Es responsabilidad legal, no una tabla. |
| Emisión y vigencia | P42 | Falta | Con fecha de vencimiento. |
| Revocación | P42 | Falta | Sin forma de retirarla, certificar es un riesgo. |
| Dependencias | P24 P33 P36 | Falta | Sin identidad, capacidades y auditoría no hay materia certificable. |
Policy Engine · ARSteward
«Define las reglas de interacción.»
Opera en
04 en adelante · transversal
Estado
Su página está publicada.
Piezas
para completarla
Qué hace
La organización declara qué puede hacer un tercero al operar con ella —y qué no—, y AgentRoom lo hace cumplir en cada interacción. Sus reglas internas siguen viviendo en sus sistemas; acá se declaran las de interacción.
Requerimiento técnico
- Dos piezas, en este orden: primero
P33, la declaración legible por máquina; despuésP37, el controlador que contrasta. Sin declaración no hay contra qué comparar. - Lo que queda fuera no ocurre —y queda anotado que se intentó—. Ese registro del intento fallido vale tanto como el de lo que sí pasó.
- Empieza en la etapa 04 y no antes: antes de que exista una sala no hay interacción que gobernar. El counter es gratis y no compromete nada.
- No es confianza en la contraparte: es enforcement. Si la regla se puede saltar, no es una regla.
Consumo en tokens
| Línea | Se cobra | Tarifa | Nota |
|---|---|---|---|
| Control de fraude y abuso | por solicitud filtrada | TBD | Servicio opcional: se activa por organización y solo se paga si se activa. |
| Handshake de agentes | por handshake | TBD | Términos acordados antes de que un agente opere. |
Tablero de avance
| Subfuncionalidad | Pieza | Estado | Qué falta |
|---|---|---|---|
| Declaración de capacidades | P33 | Falta | Legible por máquina: qué puede y qué no cada agente. |
| Contraste en cada operación | P37 | Falta | Lo que queda fuera no ocurre. |
| Registro del intento fallido | P37 | Falta | Tan valioso como el registro de lo que sí pasó. |
| Reglas del comercio | — | A medias | La landing ya las describe —zonas, devoluciones, qué asistentes pueden vender—. Declaradas en copy, sin motor que las aplique. |
Trust & Audit · ARScribe
«Demuestra qué ocurrió.»
Opera en
04 en adelante · transversal
Estado
Su página está publicada.
Piezas
para completarla
Qué hace
Constancia consultable de qué se preguntó, qué se respondió, qué se acordó y qué se cobró. La escribe y la custodia AgentRoom, no las partes: cuando hay desacuerdo, el registro de uno de los dos lados no sirve.
Requerimiento técnico
- Depende de
P24. Una constancia sobre «alguien» no sirve en una disputa, que es exactamente para lo que se vende. Es la dependencia que la bloquea entera. - Criterio de neutralidad, y es lo que la hace vendible a las dos partes: no vendemos el producto ni representamos al asistente; nos pagan por el servicio, nunca por cómo termine una disputa.
- Retención y revocación: definir cuánto se guarda y cómo se accede. Hoy no hay un solo
del()en el repo —lo que se guarda, se guarda para siempre—. - Ley 21.719: registros sobre terceros, con retención y derecho de acceso. Revisar antes de que haya volumen.
Consumo en tokens
| Línea | Se cobra | Tarifa | Nota |
|---|---|---|---|
| Recibo verificable | incluido | 0 | Va en la base: un recibo en cada orden, sin activar nada. |
| Retención extendida | por recibo al año | TBD | Más retención y evidencia exportable, para auditoría o regulación. |
Tablero de avance
| Subfuncionalidad | Pieza | Estado | Qué falta |
|---|---|---|---|
| Registro de la interacción | P36 | Falta | Qué se preguntó, respondió, acordó y cobró. |
| Identidad de las partes | P24 | Falta | Sin esto la auditoría nace vacía. |
| Custodia por AgentRoom | P36 | Falta | No por las partes: es lo que la hace servir en una disputa. |
| Consulta por el comercio | P39 | Falta | Que vea lo que pasa en su nombre. |
| Retención y revocación | — | Sin definir | Sin definir. No existe del() en el repo. |
Agent Exchange
«Que los agentes trabajen entre ellos.»
Opera en
05, tokens · A2ARoom
Estado
Su página está publicada.
Piezas
para completarla
Qué hace
Dos organizaciones resolviendo lo mismo —una integración, un incidente, una diferencia de facturación— a través de sus agentes. Acá AgentRoom deja de ser un lugar donde se publica y pasa a ser infraestructura de interacción.
Requerimiento técnico
- Lo que la distingue de todas las anteriores: en las otras siempre hay una persona en un extremo. Acá no —las dos partes son organizaciones y ninguna puede confiar en que la otra se porte bien—. Por eso identidad, términos y constancia no son funcionalidades: son la condición para que la etapa exista.
- Handshake bilateral antes de operar: qué puede hacer cada agente, hasta dónde, con qué límites. Ya es línea de cobro en Pricing, sin nada detrás.
- El caso es un objeto compartido que vive entre dos organizaciones y no le pertenece a ninguna. Eso es nuevo en el modelo de datos.
- Aislamiento verificable entre salas paralelas, con una prueba. No una promesa.
Consumo en tokens
| Línea | Se cobra | Tarifa | Nota |
|---|---|---|---|
| Handshake de agentes | por handshake | TBD | Es la línea que ya existe en la tabla de precios, sin nada detrás todavía. |
Tablero de avance
| Subfuncionalidad | Pieza | Estado | Qué falta |
|---|---|---|---|
| Identidad de ambas partes | P24 P25 | Falta | Precondición. |
| Handshake bilateral | P34 | Falta | Términos aceptados antes de empezar. |
| Caso compartido | P35 | Falta | Un objeto entre dos organizaciones. |
| Trabajo de los agentes | P35 | Falta | Cada uno sobre lo suyo, dentro de lo acordado. |
| Constancia bilateral | P36 | Falta | Qué dijo e hizo cada parte. |
| Cierre o escalamiento | P35 | Falta | Con el resultado anotado de las dos partes. |
| Aislamiento entre salas | P32 | Falta | Verificable con una prueba, no prometido. |
CustomerRoom
El panel donde la organización administra su propio agente. No se vende como solución aparte —y está bien, porque es dónde se administran las otras—. Pero eso significa que todo lo que se vende pasa por acá: activar el ARTwin, revisar el registro, mirar la auditoría, pagar. Es la pieza P4.
De quién es
no el comprador
Estado
4 de 16 pasos, más 2 a medias
Se vende como
ninguna solución
Qué hace
Su promesa es que no hay panel que aprender. Lo que cambia el comportamiento del agente se dice conversando —desde el asistente que la organización ya usa—, y el panel web se mantiene chico a propósito: sirve para mirar, no para configurar. Esa división no es una limitación, es la tesis: si administrar el agente exigiera aprender un panel, AgentRoom sería otro SaaS con onboarding en vez de infraestructura que se enchufa.
/entrar y /panel están en producción desde el 22-ago, y lo que
resuelven es el tramo de mirar: entrar y leer el informe. El tramo de administrar
—donde vive la tesis— sigue siendo promesa de la landing. Conviene tenerlo claro al
planificar: la base está hecha, el producto no.Requerimiento — qué tiene que poder hacer el cliente acá
Dieciséis cosas, en este orden. No es una lista de funciones sueltas: es una secuencia, y cada tramo desbloquea el siguiente.
- Entrar sin contraseña que recordar. Correo de trabajo del dominio analizado, código de cinco caracteres, sesión en cookies firmadas con HMAC. Abrir el correo es la verificación de que trabaja ahí: no se pide un documento aparte.
- Leer su informe completo, los 26 puntos abiertos capa por capa, cada uno con qué se revisó, qué se encontró y con qué evidencia. Es más que la vista gratis, que solo muestra el puntaje y una brecha.
- Enterarse de que su ARTwin ya existe —y no recibirlo todavía—. Ve cuántos productos trae, qué políticas y qué canales; no el contenido. Que exista y no se entregue es lo que le da valor a activarlo.
- Aceptar el trato y activarlo: gratis por tres meses a cambio de instalar el ARTag. Es la decisión que abre todo el resto.
- Revisar y completar el ARTwin dentro del panel, sin export. Recién acá ve el contenido: corrige lo que el motor infirió mal y agrega lo que falta. Es lo que impide publicar dato inferido bajo su nombre sin que lo haya mirado.
- Recibir su ARTag con los pasos exactos de su plataforma —un archivo para
/.well-known/agentroom.json—. No un snippet: un agente no ejecuta JavaScript, y por eso no puede ser un tag al estilo Google o Meta. - Apretar «Verificar» y saberlo en el momento. Mandamos una sonda a su dominio y le decimos si quedó bien o qué falta. Sin este botón instalar es a ciegas, y ahí se cae la gente.
- Ver subir su ARAIS, en el mismo número que le mostró el problema. Es lo que cierra la venta: el puntaje que dolía es el que mejora.
- Tener una cuenta de organización, no una dirección de correo. Hoy la cuenta es el correo verificado: alcanza para entrar y ver lo tuyo, y no alcanza para decir a quién pertenece el ARTwin ni quién puede darlo de baja.
- Conectar su catálogo por feed, marcado o API, para que el ARTwin deje de depender de una sola captura. Es el salto de dato inferido a verificado.
- Administrar hablando. Recibe un token, lo pega en el asistente que ya usa, y desde ahí configura: precios y stock, zonas y plazos de despacho, devoluciones, qué asistentes pueden vender, presupuestos y alertas, medios de pago. «Deja de vender carpas hasta el lunes», y aplica al instante.
- Ponerle techo al gasto. Presupuesto mensual, límite diario y límite por conversación, con alertas en los umbrales y corte automático. Pagar por uso solo funciona si el techo lo pone la organización, no nosotros.
- Revisar qué le costaron los agentes: qué se vendió, qué se preguntó, cuánto costó, recibos y descarga de facturas. Nada más: el panel se mira, no se opera.
Consumo en tokens
| Línea | Se cobra | Tarifa | Nota |
|---|---|---|---|
| Entrar y ver el informe | — | 0 | El panel no se cobra. Es dónde se administran las soluciones, no una de ellas. |
| Activar y editar el ARTwin | — | 0 | Gratis los primeros 3 meses; después cae en la cuota de AI Presence, no en una del panel. |
| Administrar hablando | — | 0 | Configurar nunca se cobra. Se cobra lo que el agente hace, no lo que la organización le ordena. |
| Ver el consumo y descargar facturas | — | 0 | Cobrar por mirar la cuenta sería cobrar dos veces. |
Tablero de avance
| # | Paso | Pieza | Estado | Qué falta |
|---|---|---|---|---|
| 01 | Pide su informe gratis | P2 | Listo | Solo el dominio, sin tarjeta y sin instalar nada. |
| 02 | Prueba que trabaja ahí | P4 | Listo | Abrir el enlace del correo es la verificación. |
| 03 | Entra con un código de cinco caracteres | P4 | Listo | /entrar, en producción desde el 22-ago. |
| 04 | Ve el informe completo | P4 | Listo | /panel: los 26 puntos capa por capa, con evidencia. |
| 05 | Se entera de que su ARTwin ya existe | P4 | Falta | Ya no está bloqueado: P22 se cerró y el ARTwin se guarda en cada análisis. Es lo más barato que se puede construir hoy —ni cuenta, ni OAuth, ni metering—. |
| 06 | Le ofrecemos activarlo y dice que sí | P4 | Falta | Acá se explica el trato: 3 meses gratis a cambio del ARTag. |
| 07 | Lo revisa en detalle y lo completa | P5 | Falta | Dentro del panel y sin export. Evita publicar dato inferido sin que lo mire. |
| 08 | Recibe su ARTag y las instrucciones | P6 | Falta | Pasos exactos por plataforma. Archivo, no snippet. |
| 09 | Aprieta «Verificar» | P6 | Falta | Sonda al dominio y respuesta en el momento. Sin esto, instalar es a ciegas. |
| 10 | Ve subir su ARAIS | P7 | Falta | Recalcular el puntaje en el mismo número que mostró el problema. Ojo con el
tamaño real: el histórico ya está en disco —guardar()
no borra e informesDe() lista por correo con su fecha—; lo que falta no es empezar a
guardarlo sino leerlo como serie por dominio. La trampa está en el denominador:
recienteDe() ya descarta informes de otra version_motor porque comparar
instrumentos distintos no es comparar, y una serie que mezcla denominadores miente igual. |
| 11 | Entra con Google | P4 | A medias | El código ya está expuesto —EntrarForm muestra el botón si hayGoogle()—, pero en producción no aparece: faltan GOOGLE_CLIENT_ID y GOOGLE_CLIENT_SECRET en Vercel. Se destraba poniendo dos variables, no escribiendo código. |
| 12 | Tiene una cuenta de verdad | P1 | A medias | La cuenta es el correo verificado. Falta la entidad organización: sin ella no hay a quién pertenece el ARTwin ni quién lo da de baja. |
| 13 | Conecta su catálogo | P13 | Falta | Feed, marcado o API. Es el salto de inferido a verificado. |
| 14 | Recibe su token de AgentRoom | P14 | Falta | El puente entre el panel y la administración conversacional. |
| 15 | Administra hablando | P15 | Falta | La tesis del producto, y no existe. Las diez capacidades siguen siendo promesa de la landing. |
| 16 | Revisa qué le costaron los agentes | P19 | Falta | Depende de metering, que no existe. Sin él tampoco hay control de gasto. |
Maqueta navegable — los requerimientos que fijó (4-sep-2026)
Se dibujó el panel entero en agentroom.io/panel/muestra —noindex,
rotulada, y con datos reales: el informe que el motor 2.2.0 corrió ese día
sobre www.junngla.com, 23 páginas, 48 de 100 sobre 16 puntos aplicables—. No es
una maqueta aparte: es el mismo componente, los mismos tokens y el mismo tema que el sitio, así que
lo que falta para que sea el panel de verdad es de dónde vienen los datos, no
volver a dibujar.
llms.txt que responde 200
y no está. La maqueta con datos de relleno habría validado un panel que no
funciona.- Se navega con el mismo mapa que explica el producto. Arriba las seis etapas, a la izquierda las herramientas de la etapa elegida: el mapa de dos capas puesto de canto. Así el cliente aprende un solo vocabulario y no uno para la web y otro para el panel. Las diez herramientas y sus tramos salen del mapa; ninguna se bautiza en el panel.
- El sujeto es el dominio, no el correo. El correo es cómo entraste; el dominio es de lo que se está hablando. Va en la cabecera de la franja lateral.
- Los estados son del CLIENTE, no nuestros. Listo / Te toca a ti / Esperando hablan de su avance. Cómo va nuestro desarrollo se cuenta acá, en el BBP, y no en el panel de un cliente.
- Cada brecha dice de quién es la pelota, leído del campo
arregladel motor —vado,comercio,ambos— y no de una clasificación propia. Si el panel dijera otra cosa habría dos verdades sobre quién hace qué. - Cada punto que falla dice cómo se corrige. El motor no
lo emite: tiene
que_significayarregla, ninguno dice qué hacer. Ver la nota de abajo. - El informe se filtra por resultado, con la cuenta a la vista. Todos 26 · aprueba 7 · parcial 1 · falla 8 · no aplica 10. Un filtro en cero se deshabilita pero no se esconde: saber que hay cero parciales también es una respuesta.
- Semáforo en el informe: verde aprueba, amarillo parcial, rojo falla, gris no aplica. Es la única parte del sistema que usa color como código, y solo dentro del panel, que es privado: un informe de 26 puntos se recorre salteado y con peso y borde hay que leerlos todos para hallar las ocho fallas. No aplica se queda gris a propósito —sale del denominador y no reprueba—, y el rótulo repite el color del icono para que se lea aunque el color no se distinga.
- La fecha de la corrida, destacada. Un puntaje sin fecha es una afirmación sobre el presente que puede tener semanas, y acá se mide un sitio que cambia solo.
- El puntaje muestra su dirección, no solo su valor. Cuánto subió
desde la corrida anterior. No hay dónde leerlo: no se guarda
histórico por dominio, así que hoy el panel dice «Primer informe» en vez
de dibujar un
+0, que insinuaría que no se movió. - «Quién te leyó»: qué agente pasó por el dominio, qué pidió y qué se llevó. Es la única parte del panel que cambia sola, y por eso es la que hace volver a abrirlo. No existe: en la maqueta el bloque queda vacío y explica por qué.
- Billing & consumo, en este orden: cuánto llevas, con qué se cobra, y después el historial. Incluye alta de medio de pago —con el aviso de que hoy no hace falta, porque pedir la tarjeta en una etapa gratis es la forma más rápida de que alguien crea que el informe se cobra—, cartola mes a mes que se despliega al presionar el mes, y por cada mes resumen en PDF y factura. Los dos documentos no son lo mismo: el resumen lo generamos nosotros y siempre se puede pedir; la factura es un documento tributario que existe solo si hubo cobro. Un mes en cero igual aparece: la cartola tiene que poder mostrar que no se cobró, no solo callarse.
- Consentimiento para salir en el Radar. El cliente elige país e industria y
publica; es gratis. El bloque enumera qué queda público —dominio,
puntaje, su denominador y la fecha— y qué no —evidencia, informe completo,
catálogo—, y el botón está deshabilitado hasta aceptar: un botón
que publica sin que nadie haya aceptado convierte el consentimiento en decorado. Las listas salen
de
public-scores.ts, que es el mismo dato con el que se dibuja el Radar.
1. La «instrucción exacta». La landing dice, en la etapa Existir, que las brechas que solo puede cerrar el cliente «te las decimos con la instrucción exacta» (
src/data/stages.ts:70), y esta misma página lo
repite en AI Presence. El motor no emite ninguna instrucción. En la maqueta
están escritas a mano las nueve que fallan en junngla.com, en
src/data/customerroom.ts; las otras diecisiete muestran el hueco en vez de disimularlo, porque
una instrucción inventada para un check que nadie revisó es peor que ninguna. El
requerimiento correcto es un campo como_se_corrige en el check, con las 26 escritas y
una prueba que falle si alguna queda vacía —hoy son dos archivos que hay que acordarse de
editar juntos, y ya sabemos cómo termina eso—.
2. Las cuatro sondas no tienen remedio propio, y hay que decirlo. S23–S26 son la lectura de las otras tres capas: suben cuando se cierra lo demás. Prometer que se «arreglan» sería vender humo, e invita a que alguien pida gestionarlas asistente por asistente.
src/data/customerroom.ts, no leído del almacén. Enchufarlo es
cambiar de dónde vienen los datos: la forma —qué bloques hay, en qué orden y
qué pregunta contesta cada uno— ya está decidida. Lo que no se resuelve
cambiando el origen es el histórico del puntaje y el registro de lecturas: esos hay que construirlos.Fuente en el código:
src/data/manager.ts (capacidades y alcance del panel),
src/config/pricing.ts (spendingControls, spendingBehaviours),
motor/cuentas.ts y motor/sesion.ts (la media cuenta),
motor/google.ts (OpenID Connect, alcance openid email).Plataforma
Lo que no pertenece a ninguna solución pero todas necesitan. Sin este lugar estas piezas quedarían huérfanas —y son las que hoy impiden cobrar—.
Qué falta
P1Cuenta de la organización
Existe media: cuentas.ts y sesion.ts resuelven acceso por correo verificado, sin base de datos. Falta la entidad organización, la que responde de quién es el ARTwin.
P19Metering y billing
La tabla de precios no tiene nada detrás. Medir sin tarifa no cobra, y fijar tarifa sin medir tampoco.
P17Persistencia real
Hoy Blob. ADR-0018 pospuso el esquema a propósito; la transacción lo va a exigir.
P21Pruebas
Ya no es cero: cuatro suites corren y pasan. Falta el gate —una prueba que no bloquea un merge es documentación—.
P20CI/CD
No hay .github/. Y vercel --prod despliega el working tree, no el HEAD.
P18Métricas de distribución
Crawlers, citas y conexiones MCP: las tres señales que prueban la tesis.
Diccionario
Todas las palabras que usamos en AgentRoom. Solo entra lo que no existe fuera:
si alguien puede buscarlo y encontrar la definición de otro —JSON-LD, MCP,
robots.txt, .well-known— no es nuestro. La norma completa, con reglas de
uso, está en 03-Documentos/NOMENCLATURA.md.
Los actores — quién es quién
| Término | Qué significa entre nosotros | Dónde se usa |
|---|---|---|
| asistente de IA | El de la persona: donde pregunta. Ajeno a nosotros: ChatGPT, Gemini, Claude, Perplexity, Grok. | Nunca llamarlo agente. |
| agente | El de la organización, el que se publica en AgentRoom. | Nombre comercial del ARTwin publicado. |
| organización | El cliente. Paraguas de los cuatro perfiles: tienda, empresa de servicios, software, institución. | «Tienda» solo en ejemplos de comercio. |
| persona | Quien pregunta a su asistente. Nunca es cliente de AgentRoom. | No hay app de consumidor ni marca frente a ella. |
| AgentRoom | El lugar donde se encuentran unos y otros. Una oficina tipo cowork. | Evitar «la sala» salvo que se defina antes. |
Las seis etapas — el recorrido, no módulos
| Término | Qué significa entre nosotros | Dónde se usa |
|---|---|---|
| 01 · Ver | El análisis: qué encuentra un asistente hoy. Gratis. | Técnico: ARAIS |
| 02 · Existir | Quedar publicado y entendible. Gratis 3 meses. | Técnico: ARTwin |
| 03 · Catálogo | Te ofrecen cuando alguien pregunta. Gratis. | Técnico: ARDoorMan |
| 04 · Responder | El agente contesta por cada persona. Acá empieza la tarifa. | Técnico: TalkRoom |
| 05 · Colaborar | Agentes de distintas organizaciones entre ellos. | Técnico: A2ARoom |
| 06 · Operar | El agente transacciona: comprar, pagar, reservar, resolver. | Técnico: TrxRoom |
Los nombres propios del sistema
| Término | Qué significa entre nosotros | Dónde se usa |
|---|---|---|
| ARAIS | AgentRoom AI Score. El análisis: 26 puntos en 4 capas. | Público |
| ARTwin | AgentRoom Twin. Lo que la organización ofrece, normalizado y con procedencia. | Público |
| ARDoorMan | El counter de la oficina, y la etapa 03. Recibe al asistente y nombra a quien puede atenderlo. | Público |
| ARDoor | La cara visible del ARTag: el sello en el sitio del comercio. Dice «Soy un agente» donde el CAPTCHA decía «No soy un robot». | Público |
| ARTag | La señal que el comercio deja en su web para activar su ARTwin. Es un archivo, no un script. | Público |
| ARSteward | AgentRoom Steward. El controlador de marco. Hace cumplir dentro de la sala los límites que la organización fijó: qué puede hacer el agente, qué no está autorizado, y cortar cuando se sale. Comercial: Policy Engine. | Público |
| ARScribe | AgentRoom Scribe. La auditoría. Levanta la minuta de lo que pasó en la sala. Su valor es de prueba, no de analítica. Comercial: Trust & Audit. | Público |
| CustomerRoom | El panel donde la organización administra su agente. No es del comprador. | Público |
| token | La unidad de cobro por uso. Minúscula, plural normal. Reemplazó a ARU el 26-ago. | Público |
El vocabulario del análisis
| Término | Qué significa entre nosotros | Dónde se usa |
|---|---|---|
| Legibilidad L | Primera capa: ¿puede un asistente entender qué ofreces? L01–L06. | Público |
| Transaccionabilidad T | Segunda capa: ¿puede un agente cerrar la compra? T07–T14. | Público |
| Resolución R | Tercera capa: ¿puede resolver algo contigo? R15–R22. | Público |
| Sondas S | Cuarta capa, y la única que no mira el sitio: le pregunta a un asistente. S23–S26. | Público |
| denominador | Sobre cuántos puntos se calculó. Nunca se publica una cifra sin él. | Público |
| sin evaluar | Lo que no se pudo medir. No es lo mismo que reprobado. | Público |
| evidencia citable | Cada hallazgo con su fuente y el instante en que se observó. | Público |
| veredicto | aprueba con mayoría estricta, falla con cero, parcial el resto. Con un solo asistente no existe «parcial». | Interno |
| MINIMO_PUBLICABLE | Ocho. Bajo ese número se muestra el detalle pero no la cifra. | Interno |
| cascarón | Sitio bajo 1.000 caracteres de texto: el HTML no trae la página, la arma el navegador. | Interno |
| captura | Lo que se descarga en la única pasada a la red. Todo lo demás se deriva de ella. | Interno |
El vocabulario de la publicación
| Término | Qué significa entre nosotros | Dónde se usa |
|---|---|---|
| procedencia | De dónde salió cada dato, con qué confianza y cuándo. Ningún dato entra sin ella. | Público |
| verificado | Lo dijo una API. La única fuente con stock de verdad. | Público |
| declarado | Lo dijo su marcado. | Público |
| inferido | Lo dedujimos del texto. No se publica. | Público |
| Puerta C | El ARTwin servido desde nuestro dominio, sin que el comercio toque nada. | Interno |
| Puerta D | El comercio enruta una ruta de su propio dominio. Es donde vale. | Interno |
| Puertas A y B | App instalada (A) y credenciales de API (B). Existen como concepto, no en el código. | Interno |
| tenant | Estado de servicio de un dominio: por qué puerta publica, qué ARTwin sirve, si está activo. | Interno |
| el corte | Dar de baja y que deje de servirse en la misma solicitud. El estado vive en el nombre del objeto. | Interno |
| superficies | Lo que se genera desde el ARTwin: JSON-LD, llms.txt, catálogo, páginas sin JS, servidor MCP. | Interno |
El vocabulario del cowork
| Término | Qué significa entre nosotros | Dónde se usa |
|---|---|---|
| counter | Donde el asistente llega y pregunta. Es ARDoorMan, y es gratis. | Público |
| sala | Donde ocurre la interacción. Abrirla arranca el contador de tokens. | Público |
| antigüedad | El orden en que ARDoorMan nombra. El primer lugar no se vende. | Público |
| handshake | Términos y permisos acordados antes de que un agente opere contigo. | Público |
| minuta | La constancia de lo que pasó en una sala. La custodia AgentRoom, no las partes. La levanta el ARScribe. | Público |
| controlador de marco | El ARSteward. Contrasta cada operación contra lo acordado. Lo que queda fuera no ocurre, y queda anotado que se intentó. | Público |
| aislamiento | Las salas son ciegas entre sí: un competidor no ve al otro. Verificable, no prometido. | Público |
| demanda no servida | Cada «no hay a quién ofrecerte» queda anotado. Es el motor de adquisición, no una métrica. | Público |
Los códigos y prefijos
| Término | Qué significa entre nosotros | Dónde se usa |
|---|---|---|
| P## | Las 49 piezas de software. Es lo único que se desarrolla. | BacklogTI |
| AR-## | Las fichas del backlog de gestión: decisiones y deuda, no código. | Gestión |
| RC-# | Las reglas comerciales que no se rompen. Cinco. | Comercial |
| I## | Las invariantes: reglas de diseño que se escalan, no se resuelven en el código. Trece. | Técnico |
| D-## | Deuda técnica que no es una pieza de producto. | BacklogTI |
ADR-#### | Decisiones de arquitectura registradas dentro del código. | Código |
Las diez soluciones
Sus nombres son en inglés y no se traducen. Cada una tiene su ficha.
| Solución | Qué hace | Etapa |
|---|---|---|
| Agent Score | Mide qué tan preparada está la organización. 26 puntos. | 01 |
| AI Radar | La ubica frente a su industria y su país. | 01 |
| AI Presence | Que la encuentren y la entiendan: publica su ARTwin. | 02 |
| Agent Registry | Publica el agente oficial, para que nadie adivine cuál es. | 03–04 |
| Agent Identity | Verifica quién está detrás de un agente. | 03+ |
| Agent Reputation | Historial que se acumula y se puede consultar. | 03+ |
| Agent Certification | Niveles de cumplimiento sobre identidad, seguridad y gobernanza. | 03+ |
| Policy Engine | Define y hace cumplir qué puede hacer cada agente. | 04+ |
| Trust & Audit | Constancia de qué ocurrió, custodiada por AgentRoom. | 04+ |
| Agent Exchange | Agentes de distintas organizaciones trabajando entre ellos. | 06 |
Lo que ya no se dice
| No escribas | Escribe | Por qué existió |
|---|---|---|
AgentRoom-AIScore, AIScore | ARAIS | Nombre largo del puntaje antes de tener sigla. |
gemelo, gemelo digital | ARTwin · agente | Nombre interno heredado de VADO. Sigue en los identificadores del código hasta que exista la red de pruebas. |
| «Agent Room Manager» | CustomerRoom | Nombre del panel en la landing de agosto. |
ARU, AgentRoom Unit | token | La unidad de cobro hasta el 26-ago. Los identificadores TypeScript todavía dicen ARU, a propósito. |
VADO, vado | AgentRoom | Marca anterior, absorbida el 20-ago-2026. |
VadoBot/1.0 | AgentRoomBot/1.0 | Ya renombrado el 20-ago. Queda avisar a quien lo tuviera permitido. |
| «los cuatro niveles», «las cinco etapas» | las seis etapas, 01–06 | Numeraciones previas. La última cayó al entrar Catálogo. |
| «policía» | controlador de marco | No se entiende a quién se vigila, y sugiere que la contraparte es sospechosa cuando lo que se cuida es el acuerdo. |
/apps/vado se sirve tal cual —hay Puertas D desplegadas en dominios de clientes
apuntando ahí, y renombrarla rompe clientes en producción—. Y la
nomenclatura de AgentRoom no rige sobre VADO: hasta el cutover es un producto distinto con su
marca y su vocabulario. En su BBP, «gemelo digital» era el nombre correcto.
gemelo y formatARU: no es descuido, es orden.
Arquitectura general
Un solo repo Next.js con la landing, el motor heredado de VADO, las funciones y el CLI. La fusión del 20-ago se hizo sin reescribir lo que ya corría en producción.
| Pieza | Dónde y cómo |
|---|---|
| Landing (secciones, copy, config) | src/ — el copy vive en data/ y config/; app/page.tsx solo compone. |
| Motor de análisis y ARTwin | motor/ |
| Funciones (route handlers) | src/app/api/ |
| CLI | cli/ |
Decisiones que la definen
- Los handlers no se reescribieron. Los nueve venían corriendo con la firma
(req, res)de Vercel; viven enmotor/handlers/ysrc/lib/handler-vercel.tslos adapta a route handlers. Reescribir 900 líneas probadas era riesgo innecesario. - Dos
tsconfiga propósito:tsconfig.jsonvalida la web,tsconfig.node.jsonvalida motor y CLI.npm run typecheckcorre los dos. - La mudanza es por configuración, no por código:
motor/marca.tsleeAGENTROOM_BASE,AGENTROOM_RUTA_D,AGENTROOM_NOMBREyAGENTROOM_SLUG. Sin variables, todo responde como antes. /apps/vadose sirve para siempre. Hay Puertas D desplegadas en dominios de clientes apuntando ahí. Las nuevas usan/apps/agentroom. Nunca renombrar la vieja.
agentroom.junngla.com redirige
con 308 permanente y no se apaga: hay enlaces publicados. La dirección vive en
AGENTROOM_BASE, así que mudarse de nuevo no exige tocar código.
Auditoría As-Is / To-Be
Corrida con el skill SuperArqDev el 20-ago-2026 sobre el commit inicial del repo. El diagnóstico completo —con diagramas C4, secuencia y modelo de datos— vive en bbp.agentroom.io/arquitectura. Acá va el resumen.
Score
SQALE C. Baja por ausencia de pruebas y CI, no por la calidad del código.
Cobertura de pruebas
Al 20-ago era cero. Hoy npm test corre cuatro y pasan; falta el gate, no las pruebas.
Piezas por construir
14 son bloqueantes para la promesa de la landing.
La regla que ordena todo el plan: verificar precio y stock en vivo antes de crear cualquier orden (P9 antes que P11). Prometer desde una copia es vender lo que no existe — y con agentes eso escala más rápido que con personas.
Hallazgos
| Sev. | Hallazgo |
|---|---|
| Alta H1 | Dependencias vulnerables. 4 high + 1 moderate. next se arregla sin salto mayor (16.2.12 → 16.3.1). |
| Media H2 | Cero pruebas automatizadas. (Superado en parte el 25-ago: cuatro suites corren y pasan; falta el gate.) Ni un test, incluidos los 16 checks que producen el puntaje que se le vende al comercio. |
| Alta H3 | Sin CI/CD. No hay .github/; el deploy es manual, sin gate de typecheck, lint ni auditoría. |
| Media H4 | Fixtures fuera de control de versiones. 78 MB de capturas reales que serían el insumo para escribir los tests de H2 sin tocar la red. |
| Media H5 | El motor estuvo en producción sin repositorio. Corregido el 20-ago con el commit inicial. |
| Baja H6 | Deuda de nombres tras la absorción. Quedan referencias a la marca anterior; ojo con el user-agent VadoBot/1.0, puede estar en listas de permitidos. |
Lo revisado a mano y limpio: guardas de destino y presupuesto (SSRF tratado como superficie hostil, ADR-0016), corte de servicio (410 verificado en vivo, ADR-0008), promociones emitidas en servidor, y cero secretos (gitleaks limpio, fuente única en Infisical). Herramientas ausentes en el equipo (semgrep, trivy, checkov): la revisión de inyección fue manual sobre los nueve puntos de entrada, sin afirmar exhaustividad.
Plan de migración por fases
| Fase | Qué |
|---|---|
| 0 · 30d | La red de seguridad. No construye producto: hace que construir sea seguro. Next a 16.3.1, tests de los 16 checks con las fixtures reales, CI con typecheck de ambos tsconfig. (Cierra H1, H2, H3.) |
| 1 · 60d | Que la adhesión exista. Cuenta del comercio (P1), ingesta continua (P2), frescura con vencimiento (P3), declaración .well-known en el dominio del comercio (P7) y métricas de distribución (P18). |
| 2 · 90d | La caja. Registro de agentes (P5), postventa y atención (P16, P15) —la demanda que ya existe—, vínculo cliente-tienda (P14), recibo verificable (P13) y metering (P19), para que la tabla de precios deje de ser decorativa. |
| 3 · 6-12m | La transacción. Verificación en vivo (P9) y reserva (P10), en ese orden; checkout y orden (P11); persistencia real (P17); MCP ampliado y adaptadores (P6, P8). |
almacen.ts ya es la interfaz); las superficies crecen por Strangler Fig
(/apps/agentroom junto a /apps/vado); y los pagos se recompran
—se integran, no se construyen— para no entrar al perímetro regulado.
v2.2.0. Las correcciones
viven en BacklogTI, que es el documento
que sí se mantiene al día.
Estrategia de arquitectura
Veredicto del squad al 1-sep-2026, sobre un reconocimiento de los dos sitios en vivo y del repo completo. Documentos de respaldo en 05-Notas/analisis-arquitectura-20260901/.
Estado real, en una frase: un motor de ingeniería genuinamente bueno, hoy además rodeado de un producto comercial completo —diez soluciones, veinte páginas, un mapa coherente—, corriendo todavía sobre una operación que no existe: sin CI, sin monitoreo, sin identidad de quien consulta, sin forma técnica de borrar un dato, y a 91 días de que la Ley 21.719 sea exigible. El 24-ago el problema era que la operación no existía; hoy sigue sin existir y encima hay más superficie que operar.
La decisión de arquitectura: almacén de objetos más índice. No una migración
El disparador de ADR-0018 para dejar Blob era «la primera cuenta de comercio» y no ha llegado: cero comercios adheridos. Se cambia el disparador, y ya se cumplió por otra vía —no la de los clientes, sino la de P22 más el calendario regulatorio—. Dos gatillos, cualquiera basta: D1, la primera obligación de borrado (ya disparado); D2, la primera operación que exija conteo atómico (tramo 5).
Pero cambiar el disparador no significa migrar el almacén. Lo que se guarda son objetos grandes, inmutables y servibles por CDN —informes de ~27 KB, ARTwins de ~8 KB—: para eso el Blob es la herramienta correcta. Lo que falta no es un lugar donde guardar: es un lugar donde saber. Qué objetos existen, de quién son, cuándo vencen, qué se contó, quién preguntó.
| Problema que hoy parece propio | Cómo lo cierra el índice |
|---|---|
AR-31 ARTwins archivados sin retención ni del() | El índice sabe qué ARTwin no tiene tenant activo y desde cuándo. La purga es una consulta, no un barrido |
| AR-20 el nombre del ARTwin es calculable | El nombre del blob pasa a ser opaco; la resolución la hace el índice tras autorizar. La defensa deja de ser que la URL no se adivine |
| AR-21 el informe no se puede revocar | Revocar es marcar una fila, no borrar una CDN |
Barridos O(n) y el techo de 1000 en entitlement.ts | Desaparecen: son consultas indexadas |
| Metering, cuenta de organización, demanda no servida, auditoría | Todos piden lo mismo —contar, agregar, atribuir— y ninguno se sostiene sobre un barrido sin transacciones |
Alcance deliberadamente chico: tres tablas —organizacion, artwin, evento_uso— y ni una más hasta que su requerimiento llegue. Entra por Branch by Abstraction detrás de motor/almacen.ts, que ya es la interfaz; los handlers no se tocan. Postgres gestionado y estándar, sin extensiones propietarias en la lógica de negocio, por reversibilidad. ADR-0018 no se deroga: se enmienda con un ADR nuevo.
Esquema de base de datos
El DDL del tramo 2
Postgres estándar, sin extensiones propietarias ni funciones de plataforma: el criterio es reversibilidad, porque la relación con el hosting actual no está aislada (AR-32) y un esquema portable es lo único que mantiene barato mudarse. citext es la única extensión, y es estándar en cualquier Postgres gestionado.
CREATE EXTENSION IF NOT EXISTS citext;
CREATE TABLE organizacion (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
dominio citext NOT NULL UNIQUE,
dueno_correo citext NOT NULL,
creada_en timestamptz NOT NULL DEFAULT now()
);
CREATE TYPE artwin_estado AS ENUM ('borrador','revisado','publicado','suprimido');
CREATE TABLE artwin (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
organizacion uuid NOT NULL REFERENCES organizacion(id) ON DELETE CASCADE,
dominio citext NOT NULL,
blob_ref text NOT NULL UNIQUE, -- opaco y aleatorio: cierra AR-20
estado artwin_estado NOT NULL DEFAULT 'borrador',
construido_en timestamptz NOT NULL,
expira_en timestamptz NOT NULL -- 90 días sin tenant: cierra AR-31
);
-- La purga deja de ser un barrido y pasa a ser una consulta.
CREATE INDEX artwin_por_vencer ON artwin (expira_en)
WHERE estado <> 'suprimido';
CREATE TABLE analisis (
id uuid PRIMARY KEY, -- el mismo Informe.id que ya existe
organizacion uuid REFERENCES organizacion(id) ON DELETE SET NULL,
dominio citext NOT NULL,
blob_ref text NOT NULL,
version_motor text NOT NULL,
evaluados smallint NOT NULL,
total smallint NOT NULL,
generado_en timestamptz NOT NULL,
revocado_en timestamptz, -- revocar es marcar: cierra AR-21
-- I5 en la base, no en el render: la fila 22/16 no se puede escribir.
CONSTRAINT denominador_coherente CHECK (evaluados <= total),
CONSTRAINT total_positivo CHECK (total > 0)
);
CREATE INDEX analisis_recientes ON analisis (dominio, generado_en DESC)
WHERE revocado_en IS NULL;
CREATE TYPE uso_tipo AS ENUM ('sala_abierta','consulta','verificacion','orden');
CREATE TABLE evento_uso (
id bigserial PRIMARY KEY,
organizacion uuid NOT NULL REFERENCES organizacion(id) ON DELETE CASCADE,
tipo uso_tipo NOT NULL,
cantidad integer NOT NULL DEFAULT 1 CHECK (cantidad > 0),
ocurrido_en timestamptz NOT NULL DEFAULT now()
);
CREATE INDEX uso_por_organizacion ON evento_uso (organizacion, ocurrido_en DESC);
-- Auditoría de acceso. El correo deja de ser la llave del recurso: cierra AR-25.
CREATE TABLE acceso (
id bigserial PRIMARY KEY,
correo_hash bytea NOT NULL,
ocurrido_en timestamptz NOT NULL DEFAULT now()
);
CREATE INDEX acceso_por_correo ON acceso (correo_hash, ocurrido_en DESC);Tres decisiones del esquema que conviene no deshacer. CHECK (evaluados <= total) pone I5 en la base y no en la vista: es la razón por la que un 22/16 deja de ser posible, y no depende de que nadie se acuerde. El dinero va en centésimos enteros y nunca en punto flotante, como ya hace el ARTwin. Y ON DELETE CASCADE desde organizacion es deliberado: cuando una organización ejerce su derecho de supresión, la cascada es lo que hace que el borrado sea acreditable en vez de una promesa.
Lo que el esquema no resuelve solo, y hay que decirlo: borrar la fila no borra el objeto en Blob. La supresión real es de dos pasos —marcar la fila y borrar el objeto que apunta blob_ref—, y hoy no existe una sola llamada a del() en el repositorio. El job de purga es parte del tramo 2, no un extra: sin él, el esquema promete una capacidad que el sistema no tiene.
Secuencia de construcción
El orden no lo pone el valor comercial sino la dependencia real entre piezas más I4: verificar antes de comprometer.
| Tramo | Qué | Por qué ahí |
|---|---|---|
| 0 · La red | CI desde un commit y no del disco · /api/salud que diga la verdad, con monitor y alerta a un humano · techo de gasto verificado · /informe/:id a no-store · total: 16 → TOTAL_CHECKS | Sin esto, todo lo demás es una apuesta |
| 1 · La puerta | Identidad del asistente en el MCP · el MCP deja de presentarse como vado · AgentRoom publica su propio ARTag | Habilita todo lo agéntico y toda la auditoría |
| 2 · El índice | Las tres tablas · pasada de indexación · job de purga · nombres de blob opacos · revocación de informe | Habilita retención, cuenta, metering y demanda |
| 3 · Cerrar la venta del tramo gratis | Avisar del ARTwin → revisar → ARTag → recalcular | Donde está el dinero más cercano. El orden interno no se invierte: revisar antes de activar |
| 4 · Que la etapa 03 exista | Demanda no servida primero · counter · antigüedad · salas con aislamiento verificable | La demanda no servida rinde más mientras menos clientes haya: es el argumento con evidencia para salir a vender |
| 5 · Que se pueda cobrar | Cuenta de organización · metering · TalkRoom | Bloqueado además por la tarifa, que no es desarrollo |
| 6 · Transacción | Verificar → reservar → ordenar → recibo, en ese orden | Es I4. No empieza sin aprobación del CTO |
Dónde se aparta del orden de REQUERIMIENTOS-DESARROLLO.md §12: el índice se mete antes de cerrar la venta. Activar clientes sobre un almacén sin índice, con el CLI manual como único camino de alta y sin forma de dar de baja, es vender activaciones que no se pueden revertir —con una fecha regulatoria encima—. El costo del adelanto es de días, porque son tres tablas.
Qué se construye, qué se compra y qué no se construye nunca
| Nunca — es identidad del producto, no una etapa | Por qué |
|---|---|
| Procesamiento de pagos, custodia de fondos, KYC | El pago se integra, no se construye, sobre los rieles que el comercio ya usa. Es lo que mantiene a AgentRoom fuera del perímetro regulado. Si alguien lo propone, no se evalúa: se escala |
| Un asistente de consumidor propio | AgentRoom es complemento de las superficies, nunca competidor, y no tiene marca frente a la persona que pregunta |
| Un checkout que compita con el del comercio | Si la superficie ya tiene checkout, se le entrega oferta, reserva y postventa |
| Vender el orden del counter | I9. No es deuda técnica: vender el primer lugar convierte la recomendación en publicidad y se cae la tesis entera |
Se compra lo que es commodity: Postgres gestionado, GitHub Actions, un monitor externo gratuito, Resend, el hosting actual. Se construye lo que es el activo: el motor ARAIS —no se terceriza ni un check—, la identidad del asistente —porque es lo que hace vendible la auditoría—, el ARTwin, el ARTag y el índice. Criterio anticipado para el counter: nada de infraestructura de vectores ni búsqueda semántica hasta que la demanda no servida haya medido que se justifica.
Lo que bloquea desarrollo y no es desarrollo
Cinco decisiones que no entran en ninguna secuencia hasta que Francisco las tome, y las cinco bloquean código: AR-27 ¿el ARTag admite DNS TXT? —sin ella no se escribe una sola instrucción de instalación— · AR-02 la tarifa · AR-17 el nombre técnico de la auditoría y del controlador de marco, que se encarecen cada día porque ya están indexados · AR-28 los 201 puntajes publicados · AR-32 la cuenta Vercel compartida. Se suma qué sociedad es el responsable del tratamiento: la agent-card declara Junngla y el proyecto es de Quanntum —no se corrige por marketing, se deriva de esa decisión y se propaga en un solo acto a agent-card, política de privacidad y DPA—.
BacklogTI
El trabajo de ingeniería que separa lo que el motor ya hace de lo que la landing promete. Son las 21 piezas del catastro de SuperArqDev —con su estado real y la fase en que tocan— más la deuda que dejaron los hallazgos. El backlog de Gestión contiene las decisiones; este contiene la construcción.
Piezas
38 no existen y 9 están a medias. De la P22 en adelante ninguna viene de la auditoría del 20-ago.
El catastro creció
De 21 a 47 en cinco días sin escribir código: aparecieron al definir los modelos y al cruzar la web contra el BBP.
Construidas fuera del plan
P4 nunca tuvo fase y se construyó igual, el 22-ago.
03-Documentos/REQUERIMIENTOS-DESARROLLO.md baja todo lo pendiente de esta
sección a 34 requerimientos con criterios de aceptación, restricciones,
qué no entra y orden sugerido por dependencias. Sale de estos mismos recorridos, así que
cuando un paso cambie de estado acá, hay que actualizarlo allá —o
se despegan, que es lo que este BBP existe para evitar—.
El orden que no se negocia: P21 y P20 antes que cualquier pieza de producto —con 0% de cobertura nada se construye seguro—, y P9 antes que P11: verificar precio y stock en vivo antes de crear una orden. Prometer desde una copia es vender lo que no existe, y con agentes eso escala más rápido que con personas.
Las diez soluciones publicadas, y qué las construye
La landing vende diez soluciones con página propia. Esta tabla es el puente entre lo que se vende y lo que existe. Ninguna está completa, y dos no tenían piezas en el catastro hasta hoy.
| Solución | Bloque | Qué la construye | Estado |
|---|---|---|---|
| AI Radar | ARAIS | Ya funciona. Le falta P23 para que el puntaje sea comparable entre corridas. | Vendible |
| Agent Score | ARAIS | Los 26 puntos. Le falta P23 y el recálculo del paso 11. | Vendible |
| AI Presence | ARTwin | La adhesión entera: P40 (ARTag), P7 (Puerta D), P2, P3. | A medias |
| Agent Registry | ARDoorMan | P5, P27, P28. | No existe |
| Agent Identity | transversal | P24, P25, P26. Es AR-16: hoy el MCP responde sin saber quién pregunta. | No existe |
| Policy Engine | transversal | P33 (declaración de capacidades) y P37 (el controlador de marco). | No existe |
| Trust & Audit | A2ARoom | P36, y depende de Agent Identity: sin saber quién estuvo, la constancia no sirve. | No existe |
| Agent Reputation | — | P41 — nueva. No tenía pieza en el catastro. | No existe |
| Agent Certification | — | P42 — nueva. No tenía pieza en el catastro. | No existe |
| Agent Exchange | A2ARoom | Los seis pasos de esa sección. Se parte de cero. | No existe |
| ID | Pieza | Estado | Por qué importa |
|---|---|---|---|
| P41 | Reputación de agentes. Un historial que se acumula y se puede consultar —«lo que las estrellas hicieron por los marketplaces, para agentes»—. | No existe | Necesita identidad (P24) y constancia (P36) antes: una reputación sin identidad verificada no es reputación, es un promedio de anónimos. Y define quién la escribe: si la escribimos nosotros, somos juez; si la escriben las partes, hay que resolver el incentivo a mentir. |
| P42 | Certificación de agentes. Niveles sobre identidad, seguridad, políticas, gobernanza y auditoría. | No existe | Es la pieza que más compromete a AgentRoom como tercero de confianza: certificar es afirmar algo sobre otro. Antes de construirla hay que definir quién responde si un agente certificado se porta mal, y eso es decisión de negocio, no de ingeniería. |
El recorrido del asistente — modelo cowork
Las piezas del modelo que Francisco cerró el 24-ago. Ninguna existe, salvo el endpoint MCP con tres herramientas, que es el único pedazo de sala construido —y responde sin saber quién pregunta—.
| ID | Pieza | Estado | Por qué importa |
|---|---|---|---|
| P24 | Autenticación del asistente que llega. | No existe | Cierra la contradicción de AR-16. Sin esto la auditoría nace vacía, así que bloquea todo lo que dependa de ella. |
| P25 | Credenciales de los agentes que viven en AgentRoom. | No existe | La otra mitad de «nadie entra anónimo». Depende de la cuenta del comercio (P1). |
| P26 | Identidad en la minuta. Que la constancia diga quién estuvo. | No existe | Es lo que convierte un registro en evidencia. Sin P24 y P25 no tiene qué anotar. |
| P27 | El counter conversacional. Pregunta abierta → quién puede atenderla. | No existe | Es ARDoorMan, el acto que antecede a toda sala. |
| P28 | Orden por antigüedad, con la fecha de llegada como dato del agente. | No existe | El primer lugar no se vende. Es la regla que separa el counter de un directorio pagado. |
| P29 | Registro de demanda no servida. Cada «no hay a quién ofrecerte» queda anotado. | No existe | No es una métrica, es el motor de adquisición. Y es la única pieza que funciona con cero comercios adheridos: mientras menos haya, más señal produce. |
| P30 | Elección múltiple: abrir varias salas de una. | No existe | Comparar es lo que la persona le pidió al asistente. Sin esto el counter obliga a elegir a ciegas. |
| P31 | Apertura de sala por organización. | No existe | Donde arranca el cobro. Hoy el MCP responde sin sala: no hay objeto que abrir ni cerrar. |
| P32 | Aislamiento entre salas paralelas. | No existe | Que Entel no vea lo que ofreció WOM, verificable y no prometido. Es condición para que un competidor se adhiera. |
| P33 | Declaración de capacidades legible por máquina: qué puede y qué no cada agente. | No existe | Es lo que el controlador de marco contrasta después. Sin declaración no hay nada contra qué comparar. |
| P34 | Handshake bilateral: las dos partes aceptan antes de empezar. | No existe | Ya es línea de cobro en Pricing, sin nada detrás. Arranca los dos servicios. |
| P35 | Cierre de sala y minuta. | No existe | El acto final del recorrido. Es lo que queda cuando el asistente se va. |
| P36 | Auditoría: constancia consultable de qué se preguntó, respondió, acordó y cobró. Custodiada por nosotros. | No existe | Se anuncia en días. Depende de P24: una constancia de que «alguien» preguntó no sirve en una disputa. Sin nombre normado (AR-17). |
| P37 | ARSteward — el controlador de marco: contrasta cada respuesta contra lo acordado en el handshake. | No existe | Lo que queda fuera no ocurre, y queda anotado que se intentó —ese registro del intento fallido vale tanto como el de lo que sí pasó—. Sin nombre normado (AR-17). |
| P38 | Medición de token arrancando en la apertura de sala, y que el counter no consuma. | No existe | La frontera del cobro del modelo cowork. Se solapa con P19, que es el metering general. |
| P39 | La misma reunión desde el lado de la organización, en CustomerRoom, con acceso a sus minutas. | No existe | Sin esto el comercio no ve lo que pasa en su nombre: la auditoría le sirve a la disputa pero no a él. |
| P40 | ARTag: la señal que activa el ARTwin. | No existe | Es la contraprestación del ARTwin gratis, o sea que sostiene el modelo comercial completo (AR-03). Verificado: no hay nada en el repo. |
Prometido en la web, sin pieza
Salidas de un cruce entre agentroom.io en vivo y este documento, el 25-ago. La web va por delante del backlog, y la distancia crece cada vez que se publica.
| ID | Pieza | Estado | Por qué importa |
|---|---|---|---|
| P48 | Techo de gasto que corta. Presupuesto mensual, límite diario y por conversación, alertas por umbral y corte automático. | No existe | La brecha más seria del cruce. P19 y P38 miden; ninguna corta. Y el argumento con que se vende es «pagar por uso solo funciona si el límite es tuyo»: sin corte lo que hay es un medidor sin llave de paso, que es justo la garantía que un comercio necesita para atreverse a encender el cobro por uso. |
| P49 | Control de fraude y abuso: límites de tasa, reputación de agentes y filtrado antes de llegar al comercio. | No existe | Anunciado como servicio del nivel pagado. «Reputación de agentes» y «límites de tasa» se nombran en la web y no existían en el BBP hasta hoy. Depende de identidad (P24): no hay reputación de un anónimo. |
| P43 | Monitoreo del agente publicado. | No existe | De los seis servicios del nivel 03 que AR-04 declara «nombrados y no construidos». |
| P44 | Reportes para la organización. | No existe | Ídem. Se solapa con P39, la vista de la reunión desde el lado del comercio. |
| P45 | Sala cerrada. | No existe | Ídem. Con el modelo cowork por fin tiene un significado preciso —una sala que no admite a cualquiera—, pero sigue sin definirse quién decide. |
| P46 | Retención extendida: más retención y evidencia exportable para auditoría o regulación. | No existe | Está en la tabla de tarifas con precio TBD. Es el único servicio que insinúa cumplimiento normativo, así que la promesa no debería crecer sin revisión legal —y menos con la Ley 21.719 entrando en vigencia plena en diciembre—. |
| P47 | Autorización de pago para tiendas sin checkout agéntico propio. | No existe | En la tabla de tarifas con precio TBD. No es P11: esa es CheckoutSession y Order, el objeto compra. Esta es autorizar sobre rieles ajenos. |
Fase 0 · La red de seguridad
| ID | Pieza | Estado | Por qué sigue ahí |
|---|---|---|---|
| P21 | Pruebas. Tests del motor con las fixtures reales. Hallazgo H2. Dejó de estar en cero el 24-ago: npm test corre cuatro suites —costo, sondas, acceso, invariantes— y pasan, verificado el 25-ago. |
A medias | Ya no es «0% de cobertura», que era el argumento que bloqueaba todo el plan. Lo cubierto son las piezas que deciden: la agregación de la capa Sondas, el contador de costo, el acceso al CustomerRoom, y las invariantes del motor sobre 25 capturas reales de 279. Lo que sigue faltando es la prueba de cada uno de los 26 puntos del ARAIS uno por uno, que es lo que decía el hallazgo original. |
| P20 | CI/CD. Typecheck de ambos tsconfig, lint y auditoría como gate. Hallazgo H3. |
No existe | No hay .github/: el deploy es manual y nada impide publicar algo que no compila. Se postergó porque el repo nació recién el 20-ago. |
| D-01 | Dependencias vulnerables. 4 high + 1 moderate; next 16.2.12 → 16.3.1. Hallazgo H1. |
No existe | Es la línea más barata del plan —no hay salto mayor de versión— y sigue abierta solo porque no hay CI que la haga fallar. |
Fase 1 · Que la adhesión exista
| ID | Pieza | Estado | Por qué sigue ahí |
|---|---|---|---|
| P23 | Encender las sondas de los cinco asistentes. Cuatro de cinco encendidos y verificados contra su API real el 28-ago-2026 (commits 11d12f0 y 3a7c155): gemini, perplexity, claude y openai, cada uno con su fecha en PROBADOS. Falta grok, y no por credencial —la tiene y funciona—: su adaptador manda search_parameters y xAI lo descontinuó («Live search is deprecated, switch to the Agent Tools API»), y grok-3 tampoco existe ya. Requerimiento escrito en 05-Notas/req-grok-agent-tools/. |
4 de 5 | Ya no es un veredicto roto: con cuatro asistentes S26 mide. veredicto() da falla con cero y aprueba con mayoría estricta, así que con un solo asistente el estado «parcial» no existe: son 10 puntos de peso (S23=4, S24=3, S25=3) decididos de forma binaria por un modelo, una vez. Un «falla» se le entrega al comercio como no apareces cuando lo que pasó fue no apareciste en Gemini esa corrida. S26 ya se protege solo —exige 2 y sale no_evaluado—; los otros tres no. Se destraba con cuatro credenciales, no con código. Requerimiento en 05-Notas/req-sondas-multiasistente.md. |
| P1 | Cuenta y sesión del comercio. | No existe | Hoy no hay a quién pertenece un ARTwin. Es la primera pieza del dominio Comercio y bloquea todo lo demás de la fase. |
| P2 | Ingesta continua. Sincronización, webhooks y conectores de plataforma. | A medias | La captura existe pero es puntual. Se parte con un conector de plataforma, no cinco: el objetivo es probar el flujo continuo, no cubrir el mercado. |
| P3 | Frescura con vencimiento. TTL y marcar lo viejo como no publicable. | A medias | La procedencia ya se registra; falta que caduque. Es la condición para poder prometer algo después: sin vencimiento, publicar dato viejo es indistinguible de publicar dato bueno. |
| P7 | Declaración estándar .well-known en el dominio del comercio. |
A medias | La pieza de distribución: convierte cada comercio adherido en un nodo en su propio dominio. Va en la Fase 1 porque es lo que hace que adherirse rinda sin esperar la transacción. |
| P18 | Métricas de distribución. Crawlers, citas y conexiones MCP. | No existe | Son las tres señales que prueban la tesis del producto. Sin ellas la Fase 1 se entrega a ciegas: no hay cómo saber si adherirse sirvió. |
Fase 2 · La caja
| ID | Pieza | Estado | Por qué sigue ahí |
|---|---|---|---|
| P5 | Registro de agentes. | No existe | Hoy se publica un catálogo, no agentes —y el agente es justamente lo que se le va a vender al comercio desde el nivel 03. Sin esto la tarifa por token no tiene objeto que contar. |
| P16 | Postventa. Estado, devoluciones y reclamos. | No existe | Es la demanda que sí existe hoy, antes que la compra: la gente le pregunta al asistente por un pedido que ya hizo. Entra en la Fase 2 y no en la 3 por eso. |
| P15 | Atención sobre producto. | A medias | Cubierta en parte por el MCP de catálogo. Falta el tramo que necesita contexto del cliente, y ese depende de P14. |
| P14 | Vínculo cliente-tienda. | No existe | Condición de P16: sin saber quién es el cliente para esa tienda no existe el escenario de postventa. Se postergó a la 2 porque antes no había a quién vincular (P1). |
| P13 | Recibo verificable. Qué se ofreció, qué se acordó y qué se cobró. | No existe | El activo defendible del producto. Nace en la Fase 2 aunque la compra llegue en la 3: lo que sostiene es el registro de lo acordado, y eso ya aplica a la postventa. |
| P19 | Metering y billing. | No existe | La tabla de precios de la landing no tiene nada detrás. Cruza con AR-02: medir sin tarifa fijada no cobra, y fijar tarifa sin medir tampoco. |
Fase 3 · La transacción
| ID | Pieza | Estado | Por qué sigue ahí |
|---|---|---|---|
| P9 | Verificación en vivo de precio y stock. | No existe | La más crítica de las 21. Sin esto se promete desde una copia y se sobrevende. Es la que manda el orden de toda la fase. |
| P10 | Reserva. Sostiene el ítem mientras se confirma la compra. | No existe | Va inmediatamente después de P9 y antes del checkout: verificar sin reservar deja una ventana en la que el ítem se puede vender dos veces. |
| P11 | CheckoutSession y Order. | No existe | No existe el objeto compra. Se postergó a propósito detrás de P9 y P10: crear órdenes sin verificación en vivo es la falla que el producto promete evitar. |
| P17 | Persistencia real. Hoy Blob. | A medias | ADR-0018 pospuso el esquema a propósito mientras el objeto de dominio podía cambiar. P9–P14 lo van a exigir, y recién ahí se justifica pagarlo. Se refactoriza por Branch by Abstraction: almacen.ts ya es la interfaz. |
| P6 | MCP ampliado. Pedido, postventa y disponibilidad en vivo. | A medias | Hoy solo expone catálogo. Cada verbo nuevo depende de que exista la pieza detrás: ampliar el MCP antes que P9–P11 sería publicar una interfaz vacía. |
| P8 | Adaptadores por superficie. Un conector por protocolo, sin tocar el núcleo. | No existe | Multiplicar superficies antes de tener qué ofrecer en ellas multiplica el mantenimiento, no la distribución. Las superficies crecen por Strangler Fig. |
| P12 | Mandato del consumidor. La autorización con límites. | No existe | Territorio de Pepe, no de AgentRoom. Puede que no se construya nunca acá: AgentRoom es el lado del comercio. Queda anotada para que la decisión sea explícita y no un olvido. |
Construida fuera del plan
| ID | Pieza | Estado | Por qué sigue ahí |
|---|---|---|---|
| P4 | CustomerRoom. El acceso y el informe de los 26 puntos, en producción desde el 22-ago. Falta la administración conversacional, que es la tesis del producto. | A medias | Era la única de las 21 sin fase asignada y se construyó igual, antes que piezas priorizadas. Lo entregado es el tramo de mirar; el de administrar sigue sin empezar, y la facturación depende de P19. El plan quedó atrás de la construcción, no al revés. |
Deuda que no es pieza
| ID | Qué falta | Estado | Por qué sigue ahí |
|---|---|---|---|
| D-02 | Fixtures fuera de control de versiones. 78 MB de capturas reales. Hallazgo H4. | A medias | Son justamente el insumo para escribir los tests de P21 sin tocar la red. Mientras vivan fuera del repo, la red de seguridad depende de una carpeta en un solo computador. |
| D-03 | Deuda de nombres tras la absorción. Quedan referencias a la marca anterior. Hallazgo H6. | A medias | El user-agent ya se renombró a AgentRoomBot/1.0 el 20-ago, antes de que existiera esta ficha; lo que queda de esa parte es operativo y vive en AR-14. Sigue pendiente la prosa y los identificadores que aún nombran la marca vieja, y /apps/vado, que no se toca hasta el cutover (AR-01). |
Pricing
Se cobra por uso, en tokens, y solo desde la etapa 04. Las tres primeras son gratis. Paga el comercio, y solo el comercio: el comprador no paga por comprar y el asistente no paga por vender.
Cuánto vale un token
Valor del token
La decisión comercial que falta (AR-02). Sin número no se puede cerrar una venta.
Tramo gratis
Sobre la tarifa hay una franja de actividad sin costo, que se renueva.
Líneas publicadas
El informe, en cero. Las otras doce en TBD.
- Nunca se hardcodea una tarifa en un componente: todo sale de
pricing.ts. Sin publicar =null=TBD. Publicar precios reales es editar un archivo, no tocar código. - Medir y cobrar tienen que cerrarse juntos: hoy no existe P19, el metering. Medir sin tarifa no cobra, y fijar tarifa sin medir tampoco.
- El techo lo pone el cliente: presupuesto mensual, límite diario y límite por conversación, con corte automático.
Qué consume tokens en cada solución
| Solución | Etapa | Qué se cobra | Tarifa |
|---|---|---|---|
| Agent Score | 01 | Nada. El informe de brechas no se cobra nunca. | 0 |
| AI Radar | 01 | Nada. Nadie paga por aparecer ni por salir. | 0 |
| AI Presence | 02 | Los primeros 3 meses, a cambio del ARTag | 0 |
| Catálogo en la sala — por producto al mes | TBD | ||
| Que te encuentren — por coincidencia calificada | TBD | ||
| Agent Registry | 03–04 | El counter — preguntar quién puede atenderte | 0 |
| Apertura de sala — acá arranca el contador | TBD | ||
| Agent Identity | 03+ | Incluida. Es condición del sistema, no un servicio que se activa. | 0 |
| Agent Reputation | 03+ | Consulta de reputación. Sin definir. | TBD |
| Agent Certification | 03+ | Emisión y vigencia. Sin definir. | TBD |
| Policy Engine | 04+ | Control de fraude — por solicitud filtrada | TBD |
| Handshake — por handshake | TBD | ||
| Trust & Audit | 04+ | Recibo verificable — va en la base | 0 |
| Retención extendida — por recibo al año | TBD | ||
| Agent Exchange | 06 | Handshake de agentes — por handshake | TBD |
El embudo
Cómo se vende AgentRoom y —lo que más importa hoy— hasta dónde se puede vender. El embudo comercial es el mismo de las seis etapas: no hay un recorrido de ventas paralelo al del producto. Lo que cambia por etapa no es el discurso, es qué se puede entregar de verdad.
El gancho
Informe de brechas de 26 puntos con evidencia. Gratis y es del comercio aunque nunca siga.
Techo de entrega hoy
El ARTwin publicado y legible. Se entrega a mano, sin medición ni corte automático.
Primera venta
El nivel 03 no se puede cotizar: la tarifa en token sigue en TBD.
La restricción que ordena todo lo comercial: hoy se puede entregar hasta el nivel 02 y no se puede cobrar el 03. No es una decisión de precio pendiente de comunicar: es que no hay número (AR-02) y los servicios que justifican el nivel —Handshake, auditoría, monitoreo, reportes, sala cerrada, control de fraude— están nombrados y no construidos (AR-04). Se prospecta y se adhiere; no se cotiza.
Del nivel del producto a la etapa comercial
| Nivel | Etapa comercial | Qué significa que avanzó | Hoy |
|---|---|---|---|
| 01 | Adquisición. Se corre el análisis y se entrega el informe de brechas. | La organización recibió su informe con evidencia. No hay compromiso de ninguna parte. | Operativo |
| 02 | Adhesión. Se arma el ARTwin y la organización queda legible para los agentes. | Hay ARTwin publicado y la organización aportó la contraprestación acordada: su información, políticas, procedimientos y catálogo. | A pulso |
| 03 | Primera venta. Agente publicado que responde por cada persona, con tarifa en token. | Hay contrato y tarifa. Es el primer peso que entra por AgentRoom. | Bloqueada |
| 04 | Expansión. El agente transacciona: compras, pagos, reservas, tickets. | La cuenta sube de nivel sin cambiar de proveedor. Es donde el token crece. | No aplica aún |
Reglas comerciales que no se rompen
| ID | Regla | Por qué |
|---|---|---|
| RC-1 | Mostrar sí, prometer no. No se compromete con fecha nada que no esté en producción. | Es la misma regla del producto llevada a la conversación de venta. Las etapas ya publican su estado real; el discurso comercial no puede ir más adelante que el BacklogTI. |
| RC-2 | El informe del nivel 01 se entrega igual. Aunque la conversación no siga. | Es el gancho de adquisición y la prueba de que el análisis vale. Condicionarlo lo convierte en otra cosa y quema el activo. |
| RC-3 | No se cotiza el nivel 03 mientras la tarifa sea TBD. Ni con un rango, ni «a confirmar». | Un número dicho en una reunión queda como ancla aunque después se publique otro. Hasta que AR-02 se cierre, la respuesta honesta es que el nivel pagado aún no se vende. |
| RC-4 | Complemento, nunca competidor. AgentRoom no se presenta como alternativa al canal del comercio ni al asistente de la persona. | No hay app de consumidor ni marca frente a la persona. Si la conversación deriva a «reemplazo», se corrige en la reunión: se pierde el encuadre y con él la venta. |
| RC-5 | Paga el comercio, y solo el comercio. | Ni el comprador ni el asistente pagan. El modelo bilateral C-token / P-token quedó archivado; reabrirlo es una decisión de producto, no una concesión de negociación. |
Acciones
El registro de lo que se hizo para vender: a quién, por dónde, qué pasó y qué sigue. Igual que la bitácora deja anotada la decisión y no solo el resultado, acá queda anotado qué se aprendió de cada contacto, que es lo que se pierde cuando el seguimiento vive en la cabeza.
Acciones registradas
El seguimiento parte hoy, 23-ago-2026. Nada anterior está documentado.
Cuentas en seguimiento
Sin organizaciones en conversación registradas.
Ventas cerradas
Estructural, no comercial: el nivel 03 todavía no se puede cobrar.
Registro
| ID | Fecha | Organización | Qué se hizo y qué resultó | Siguiente paso |
|---|---|---|---|---|
| Sin acciones registradas todavía. La primera queda anotada apenas ocurra. | ||||
Cuentas
| Organización | Industria | Nivel | Dónde está y qué la traba | Estado |
|---|---|---|---|---|
| Sin cuentas en seguimiento. La industria se anota como Retail, Servicios o Sistemas, igual que en el producto. | ||||
src/data/stages.ts · la tarifa, de src/config/pricing.ts
Backlog
Lo que falta y por qué no se hizo todavía, que es el dato que se pierde con el tiempo. Acá van las decisiones: producto, negocio y orden. La construcción —las 21 piezas y la deuda de los hallazgos— tiene su propia lista en el BacklogTI. El backlog del motor (B-01…B-30) vive en la bitácora de VADO mientras no haya cutover.
Producto y negocio
| ID | Qué falta | Por qué sigue ahí | Prioridad |
|---|---|---|---|
| AR-02 | Fijar la tarifa en token. Todas las líneas de pricing salen null = TBD. |
Es la decisión comercial que falta, no un bug: el código ya muestra «TBD» a propósito. Sin número no se puede cerrar una venta del nivel 03, y por eso RC-3 prohíbe cotizarlo (embudo). | Bloquea |
| AR-03 | Mecanismo del nivel 02. Francisco cerró el modelo el 23-ago: ARAIS gratis siempre, ARTwin gratis 3 meses y después token. La contraprestación ya tiene nombre y forma: el comercio instala su ARTag —un archivo en /.well-known/agentroom.json— y eso activa el ARTwin. Falta construirlo entero, y nada corta a los 3 meses. |
La decisión comercial ya no está abierta. El ARTag es la bisagra: antes de él el ARTwin es nuestro activo —construido con una captura que pagamos— y el comercio sabe que existe sin poder llevárselo; después es suyo y se publica. Eso hace que activar sea un acto voluntario y verificable, y de paso resuelve la autorización para publicar su catálogo, que el correo por sí solo no da. Riesgo de nombre: «Tag» evoca el Google Tag, y un snippet sería incoherente —un agente no ejecuta JavaScript, L04 mide eso—; la norma lo advierte en mayúsculas. | Importa |
| AR-04 | Los servicios del nivel 03 están nombrados, no construidos: Handshake, auditoría, monitoreo, reportes, sala cerrada y control de fraude. | Se anuncian en la landing como lo que trae el nivel pagado. «Mostrar sí, prometer no»: mientras no existan, no se cobran ni se prometen con fecha. | Importa |
| AR-05 | Colisión de marca. Hay homónimos de «AgentRoom». Falta verificar registrabilidad y despeje antes de invertir en la marca. | El dominio ya está en vivo y hay enlaces publicados. Cambiar de nombre después cuesta; verificar antes de escalar el gasto en marca. | Importa |
| AR-06 | Las 21 piezas de producto por construir (14 bloqueantes). La landing describe un recorrido cuyo tramo pagado aún es promesa. Desglose pieza por pieza en el BacklogTI. | Es el mapa de lo que separa la narrativa de la operación. Se prioriza por fases (adhesión → caja → transacción), no en bloque. | Importa |
Análisis por industria
| ID | Qué falta | Por qué sigue ahí | Prioridad |
|---|---|---|---|
| AR-07 | Checks propios de Sistemas/SaaS y de perfil financiero. La capa de Resolución (22-ago) cubre servicios e instituciones, pero un banco o un SaaS necesitan puntos propios. | Hereda el B-29 del motor: el clasificador entiende «producto» como bien con precio y carro. La transacción equivalente —simular un crédito, contratar una licencia— necesita checks propios. | Importa |
Infraestructura y orden
| ID | Qué falta | Por qué sigue ahí | Prioridad |
|---|---|---|---|
| AR-01 | Cutover de vado.junngla.com → AgentRoom. Hoy este repo es una copia, no una mudanza; VADO sigue sirviendo su dominio. | Copiar y no mudar fue deliberado: mientras VADO tenga clientes en Puertas D, apagarlo es una decisión aparte que hay que planear, no un efecto colateral de la fusión. | Cuando toque |
| AR-08 | El backlog del motor (B-01…B-30) vive en el BBP de VADO. Cuando haya cutover hay que traerlo o unificar los dos documentos. | Duplicar 30 líneas que aún pueden moverse en VADO invita a que se desincronicen. Se cruza por enlace hasta el cutover (AR-01). | Cuando toque |
| AR-10 | Bajar la nomenclatura al código y a la landing. La norma quedó fijada el 23-ago (NOMENCLATURA.md), pero el producto todavía dice AgentRoom-AIScore, «Agent Room Manager» y token separado, y el motor sigue llamando gemelo al ARTwin. |
Los tres primeros son copy y se cierran cuando se toque cada archivo. El renombre de gemelo a ARTwin atraviesa el motor: se hace después de la red de pruebas (P21), no antes, porque hoy no hay cómo verificar que un renombre masivo no rompió nada. |
Importa |
| AR-13 | vercel --prod despliega el working tree, no el HEAD. Y el repo vive en Dropbox, compartido por varias sesiones a la vez: cualquier deploy publica lo que haya en disco en ese instante, incluidos los cambios sin commitear de otro. |
Descubierto el 23-ago al investigar por qué llms.txt se veía distinto desde dos sesiones, y sigue vivo: al cierre del día hay cinco cosas publicadas y sin versionar en el repo de la landing, incluida src/app/bot/ sin trackear —el caso más frágil, porque un checkout limpio se lleva la carpeta entera y agentroom.io/bot vuelve a dar 404—. El riesgo no es el obvio: lo que se edita ya está publicado sin pasar por git, así que un checkout limpio o un deploy desde CI lo revertiría en silencio. Mientras no haya CI (P20), la regla es commitear antes de desplegar y no dar por versionado lo que se ve en producción. |
Importa |
| AR-14 | Avisar a quien tuviera permitido el rastreador viejo. El motor manda AgentRoomBot/1.0 desde el 20-ago (motor/guardas.ts); un WAF que tenía VadoBot en su regla de excepción ahora ve un bot desconocido y le sirve una página de bloqueo. Mitigado en parte el 23-ago: el +URL del user-agent apuntaba a agentroom.io/bot y daba 404; ya existe esa página, con el user-agent exacto, cómo permitirlo o bloquearlo y el aviso del cambio de nombre. Queda el aviso activo a quien corresponda. |
El síntoma calza exacto. En la última corrida hubo 42 sitios de 385 ilegibles y ninguno fue por robots.txt: los 42 son cascarón —WAF o portada sin JavaScript—, que es lo que produce un user-agent que dejó de estar en la lista. Ojo con el universo: esos 42 son del Radar —sitios que medimos sin que nadie lo pidiera—, así que dimensionan el fenómeno y no son una lista de afectados. Los destinatarios de un aviso salen de leads, y hoy hay uno. Que la página de identificación exista importa igual: es lo primero que mira un administrador que ve un bot desconocido en sus logs, y hasta hoy encontraba un 404. Avisar activamente es decisión de Francisco. |
Importa |
| AR-15 | «Puerta» está por significar dos cosas. Las Puertas A/B/C/D viven en comentarios del código, heredadas de VADO y fuera de la norma. Y ahora llega ARDoor, cuyo nombre comercial es literalmente «tu puerta» y va a material de venta. | Dejó de ser deuda de prolijidad y pasó a ser un choque con fecha: en cuanto ARDoor se publique, «puerta» significará el sello del comercio para el cliente y el modo de servir el ARTwin para nosotros. Se resuelven juntas o no se resuelve ninguna. Lo natural es retirar el uso interno —las letras no dicen nada y app, api, archivo y ruta se entienden solas— y dejar «puerta» libre para el cliente. Tenant solo acepta C o D, así que el cambio es acotado. |
Importa |
| AR-16 | El MCP responde sin saber quién pregunta. agentroom.io/api/mcp acepta tools/list y tools/call sin credencial alguna —verificado en vivo el 24-ago—. No hay autenticación en motor/handlers/mcp.ts. |
No es una fuga: es una ausencia de identidad. El corte por tenant sí funciona —un dominio sin servicio activo devuelve «el comercio no tiene el servicio activo», comprobado—, así que nadie saca el catálogo de quien no autorizó. Lo que falta es saber quién preguntó. Contradice una regla del modelo —«los que llegan deben autenticarse», textual de Francisco— y además choca con el producto que se está por vender: se anuncia auditoría en días, y Y eso vacía la auditoría antes de construirla: una constancia de que «alguien» consultó algo no sirve en una disputa, que es exactamente para lo que se vende. Bloquea todo lo que dependa de auditoría, no es una historia más de la lista. |
Bloquea |
| AR-17 | La auditoría y el controlador ya tienen nombre técnico. Francisco
los bautizó el 5-sep-2026: ARScribe para la auditoría
—comercial Trust & Audit— y ARSteward para el controlador de
marco —comercial Policy Engine—. Ambos en NOMENCLATURA.md:50-51. |
Cerrado, y con 18 días de retraso en este documento: la norma se
actualizó el 5-sep y el BBP siguió diciendo solo «controlador de marco»
hasta el 23-sep. Ninguno de los dos nombres aparecía una sola vez acá.
No fue un olvido puntual: cuando la norma cambia, nada avisa a los documentos que la
citan, y este es el que la explica. La defensa barata es revisar el diccionario contra
NOMENCLATURA.md cada vez que se toque la norma —son dos archivos, no
veinte—. |
Cerrado |
| AR-18 | La landing publica un paso que el backlog declara ajeno. En el flujo de consulta, el paso 02 dice «Prueba que actúa por tu cliente». El BBP dice de P12, el mandato del consumidor: «territorio de Pepe, no de AgentRoom; puede que no se construya nunca acá». | No es una brecha de planificación, es una inconsistencia entre dos documentos nuestros, y las dos no pueden tener razón. O P12 entra al alcance de AgentRoom, o ese paso sale del recorrido publicado. Mientras siga así, la web promete algo que el backlog dice que quizá no hagamos. | Importa |
| AR-19 | El «gratis» del counter nació como inferencia y terminó siendo producto. «La puerta es gratis» se publicó el 24-ago deducida de que el contador de token parte al abrir la sala. El 25-ago quedó formalizada: src/data/stages.ts declara la etapa 03 con precio: Gratis y free: true. |
Ya no es una frase suelta en la landing: es una línea de la escalera, y la frontera del cobro se movió de la 03 a la 04 por su causa. Queda cerrado como riesgo de copy. Lo que vale conservar es cómo pasó: una deducción entre sesiones se publicó, y dos días después el producto se acomodó a ella. Salió bien —la etapa gratis es buena idea—, pero el camino fue al revés del que corresponde: primero se dijo, después se decidió. | Cuando toque |
| AR-20 | El nombre del ARTwin se puede calcular. Se guarda como blob público con addRandomSuffix: false y su id es sha1(dominio|construido_en) truncado a 12 hex. Como /api/analizar es público, quien dispara el análisis conoce las dos entradas: la ventana no son 48 bits, colapsa a milisegundos. |
Contradice I7 justo donde el modelo comercial promete que el ARTwin es nuestro activo hasta que el cliente instale su ARTag. La vía no es el handler —handlers/gemelo.ts exige tenant activo, comprobado— sino el blob. La defensa no puede ser que la URL no se adivina, porque se calcula. |
Bloquea |
| AR-21 | El enlace del informe no se puede revocar. También es blob público, pero su id es randomUUID() —122 bits, no derivable—. El problema es otro: se guarda con cacheControlMaxAge: 31_536_000 (un año) y el handler lo sirve con s-maxage=3600, y no hay un solo del() en el repo. |
No es la misma falla que AR-20 y conviene no confundirlas. Un id de 122 bits que no se deriva de nada es una capability URL, patrón legítimo —el mismo de cualquier «ver mi documento» sin login—. Acá la defensa sí es que la URL no se adivina, y sería suficiente si se pudiera revocar. No se puede: un enlace filtrado una vez queda filtrado para siempre, y además cacheado en la CDN. El informe lleva datos del comercio. Revisar contra Ley 21.719. | Importa |
| AR-33 | Un valor que describe un estado, escrito a mano el día que era cierto.
Tres apariciones en una semana, en tres archivos sin relación entre sí: el denominador
16 del informe cuando el análisis ya medía 26 (AR-30),
llms.txt diciendo «dieciséis puntos», y /api/salud
afirmando sondas: 'apagadas' después de encender cuatro asistentes.
Cuarta el 4-sep: Model.tsx escribía los nombres técnicos
de las etapas y MapaMini.tsx no, siendo el mismo mapa sobre el mismo dato
(corregido en f43c683). |
No son tres descuidos, es un patrón con una causa única: el valor
se afirma en vez de consultarse, así que envejece en silencio y
ninguna prueba falla cuando deja de ser cierto —sigue siendo un literal
válido—. Un endpoint de salud que miente es peor que no tenerlo: se consulta
justamente cuando hay que decidir rápido. La regla, y sirve de criterio de revisión:
si un dato describe el estado del sistema, se calcula; si es un literal, tiene fecha de
vencimiento y nadie la anotó. Y una variante en el otro extremo, la de la
verificación: se dio por presente el llms.txt de un dominio porque la
ruta responde 200, y lo que devuelve es el HTML de la portada —el sitio trata la
ruta como segmento de idioma—. El código de respuesta no prueba que el recurso
exista, prueba que el servidor contestó; hay que mirar el cuerpo. Es el mismo defecto
visto al revés: allá se afirma sin consultar, acá se consulta la señal
equivocada. La cuarta llegó en tres días, y trae una
variante peor: no es un literal desactualizado sino dos vistas del mismo dato que
divergieron —compartir el dato no basta si cada vista decide por su cuenta qué
campos muestra—. Va a haber una quinta. |
Importa |
| AR-34 | La web promete una instrucción exacta que el motor no tiene cómo dar.
stages.ts:70 y la ficha de AI Presence dicen que las brechas que solo puede
cerrar el cliente «te las decimos con la instrucción exacta». Verificado en
motor/tipos.ts:112-119: el check tiene que_significa —qué
quiere decir la brecha— y arregla, que es un enum de tres valores
(vado | comercio | ambos) y solo dice
quién la cierra. Ningún campo dice cómo. |
Es la única de este grupo que ya está publicada y prometida, y por
eso va primero: no es una función que falta, es una afirmación comercial en vivo sin
respaldo técnico. Se cierra con un campo como_se_corrige en cada check
y una prueba que falle si queda vacío —sin esa prueba el campo se
llena en los primeros y se abandona en los últimos, que es como se llegó acá—.
Mientras no exista, la alternativa honesta es bajar la promesa del copy: prometer
menos es reversible, incumplir no. |
Urgente |
| AR-35 | El registro de lecturas no existe, y es lo único del panel que cambiaría solo. Quién consultó el ARTwin, cuándo y qué preguntó. Todo lo demás que muestra el CustomerRoom —el informe, el puntaje, el catálogo— solo cambia cuando el cliente hace algo. | Se anota como decisión, no como pieza, porque la afirmación de fondo —que esto es lo que hace volver a abrir el panel— es una hipótesis de retención sin evidencia todavía, y abrir pieza daría por decidido que se construye. Tiene una dependencia dura: sin P18 no hay de dónde leer las consultas. Decisión de Francisco: si el registro de lecturas entra al alcance del panel o queda para después de que haya tráfico real que registrar. | Importa |
| AR-22 | «token» significa tres cosas, y la peor colisión es con toda la industria. Desde el 26-ago es la unidad de cobro. Ya era los tokens de los modelos (motor/llm.ts, tipos.ts:211-225) y el token de acceso que la organización pega en su asistente. |
La colisión externa no se arregla renombrando nada nuestro: en un producto de IA token ya significa unidad de texto de un modelo, así que «cobramos por tokens» se leerá como que facturamos consumo de LLM. Y la familiaridad que hace atractiva la palabra es la misma que la vuelve engañosa: el cliente ya sabe qué es un token, y lo que sabe es que se factura por volumen de texto.
Estado verificado de las otras dos: el costo en tokens_entrada/salida viaja en el JSON del informe pero no se renderiza —la ambigüedad es interna, y se vuelve visible el día que alguien exponga ese campo—. La que sí ve el cliente es la credencial: render.ts la llama token, y el onboarding entrega «tu token» dos pantallas antes de cobrar «por tokens». Esa es la más fácil de mover.
Tres salidas, y es decisión de Francisco: dejarlo tal cual, ponerle apellido a la unidad, o mirar créditos —unidad establecida en herramientas de IA; AthenaHQ cobra «US$ 295/mes, 3.600 créditos»—, que es la única palabra que resuelve las tres colisiones de una vez. Se eligió token por una buena razón —no tener que explicar la unidad—; el costo de esa ventaja es lo que queda anotado acá. |
Importa |
| AR-23 | El árbol quedó en un estado intermedio consciente: el copy dice token, los identificadores TypeScript siguen diciendo ARU —merchantARU, formatARU, ARURate, ARUSide, CustomerARU, ProviderARU— en tres archivos: types/models.ts, config/pricing.ts y sections/Pricing.tsx. |
No es una inconsistencia, es una decisión: Francisco lo derivó al squad. Se anota para que nadie lo «arregle» a medias ni lo lea como descuido. Mismo criterio que gemelo → ARTwin, que también espera. Regla general que este BBP ya viene aplicando: el copy se renombra cuando se decide; los identificadores, cuando hay pruebas que respalden el cambio. |
Cuando toque |
| AR-24 | El comparador que existe no compara lo que hay que mostrar. compararAntesYDespues() (motor/comparar.ts:73-78) recibe un informe y un gemelo, no dos mediciones. Su único llamador es cli/comparar.ts. |
Es una proyección de lo que la publicación resolvería, no un delta entre el antes y el después. Si alguien la reusa para mostrarle al comercio que su puntaje subió, publicaríamos una proyección como si fuera una medición —exactamente lo que I5 prohíbe—. El recálculo necesita comparador propio y captura nueva forzada. | Importa |
| AR-25 | El correo del solicitante viaja en la ruta del objeto. motor/cuentas.ts:70-72 escribe en cuentas/<correo>/<timestamp>.json, con access: 'public' y addRandomSuffix: false. |
El dato personal es el nombre del recurso, así que no se puede minimizar sin cambiar la llave. Falla de minimización frente a la Ley 21.719, y es distinta de AR-21: ahí el problema es no poder revocar, acá es que el identificador expone a la persona. | Bloquea |
| AR-26 | Los seis espacios de Blob no tienen namespace de proyecto. informes/, leads/, gemelos/, tenants/, ofertas/ y cuentas/ son constantes planas. Nadie ha comprobado si agentroom-web y comprable-web comparten el token de Blob. |
Si lo comparten, informesDe() filtra por correo pero no por producto: el panel le listaría a una persona sus análisis del otro producto. No es fuga hacia un tercero, es fuga entre productos bajo la misma persona. Comprobarlo es entrar a la consola y mirar; hasta entonces siguen congelados entitlement.ts y gemelo.ts. Prefijar es barato hoy y caro después de la primera cuenta pagada. |
Bloquea |
| AR-27 | ¿El ARTag admite un segundo canal, DNS TXT, además del archivo? La norma funde dos trabajos distintos: probar la propiedad del dominio —que un registro DNS hace mejor y de forma universal— y ser señal legible en el sitio, que sí exige el archivo por I12. | Es la decisión que más bloquea: sin ella no se escribe una sola instrucción de instalación y el paso queda construido sin que nadie sepa usarlo. Si es sí, cambia NOMENCLATURA.md §2 y un comercio en Shopify o Wix queda activo servido por Puerta C —pierde la señal en su propio dominio, que es menos valiosa—. Si es no, Shopify y Wix quedan fuera, y eso sí cambia a quién se le puede vender y habría que decirlo en la landing. La fija Francisco. |
Bloquea |
| AR-28 | Se publican los puntajes de 201 organizaciones que no lo pidieron. El archivo lista 373 dominios y 201 traen puntaje publicado —conteo exacto verificado el 1-sep—. La cifra de ~548 que circuló hasta ahora era incorrecta y se había propagado desde el veredicto del 24-ago; el riesgo se dimensiona sobre 201. src/data/public-scores.ts, desde un snapshot que además ya no se puede regenerar porque el generador no está en el repo. |
Cruza con la comparabilidad: esos puntajes se midieron con un asistente, así que al encender más dejan de ser comparables con los nuevos —publicar las dos poblaciones mezcladas sin decirlo rompe I5—. Recomendación del squad: despublicar los nombres y dejar agregados por país y categoría, que conserva la demostración de escala y elimina casi todo el riesgo. | Importa |
| AR-29 | No hay acuerdo de tratamiento de datos con ninguno de los cinco proveedores de modelo. El motor manda extractos de sitios de terceros a modelos fuera de Chile, y esos extractos pueden contener correos y teléfonos de personas que nunca consintieron nada. | Es transferencia internacional de datos personales sin base de licitud ni cláusulas, con la vigencia plena de la Ley 21.719 el 1-dic-2026. Es el único tramo que no depende de nosotros —lo firma cada proveedor—, así que hay que empezarlo aunque cierre último. | Bloquea |
| AR-30 | El «16» tiene una tercera superficie. Además de render.ts:288 y del stream NDJSON en handlers/analizar.ts:220, pruebas/listar-blobs.mts:8 imprime el mismo denominador fijo. |
Esta no se sirve, así que no afecta al cliente, pero importa por el criterio de cierre: un grep "total: 16" no captura la forma /16 y deja pasar las otras dos. El invariante correcto no es «numerador ≤ denominador» sino denominador impreso idéntico a puntaje.total, porque el total varía legítimamente entre versiones del motor: en disco hay informes con 26 y con 24. |
Cuando toque |
| AR-31 | Guardar el ARTwin en cada análisis cambia el perfil de datos del producto. Con P22, cada análisis gratis archiva de forma permanente el catálogo y los contactos de una organización que no pidió nada. No hay un solo del() en el repositorio. |
Guardar no es publicar —I7 se respeta—, pero significa tener en reposo datos inferidos bajo el nombre de otra empresa, sin retención declarada. La condición de salida a producción propuesta por el squad es suprimir a los 90 días todo ARTwin sin tenant activo. |
Importa |
| AR-32 | Los ~30 proyectos del portafolio comparten una sola cuenta de Vercel. El orgId de AgentRoom es el mismo de Junngla, Quanntum, TheRoK3T y los no asignados. |
No hay aislamiento entre un proyecto en producción con datos de clientes y cualquier experimento del portafolio: mismo alcance de permisos y de facturación. Es decisión de holding, no del squad, y por eso se anota acá en vez de resolverse. | Importa |
| AR-22 | El informe que se le entrega al cliente lleva la marca anterior. No es un residuo interno: son siete apariciones en páginas que se sirven, y dos de ellas son el encabezado y el pie del informe (motor/render.ts:182 y :455). Otras tres son títulos de pestaña (render.ts:60, :356, handlers/resultado.ts:39) y dos, páginas de error (handlers/informe.ts:36, handlers/confirmar.ts:39). |
El comercio abre su informe y la pestaña dice Vado, el encabezado dice Vado y el pie dice Vado. La excepción de la norma no lo cubre: NOMENCLATURA.md §5 deprecó VADO con una sola salvedad —la ruta /apps/vado, intocable porque hay Puertas D de clientes apuntando ahí—, y estas siete no son esa ruta sino copy servido. Cae en el mismo archivo que el 22/16, así que se corrige en la misma pasada. |
Importa |
| AR-09 | La red de seguridad (Fase 0 de la auditoría): tests de los 26 puntos del ARAIS con las fixtures reales, CI/CD con typecheck de ambos tsconfig, y subir next a 16.3.1. Cierra los hallazgos H1, H2 y H3 (P21, P20, D-01 del BacklogTI). |
Es lo primero del plan: hasta el 25-ago no había una sola prueba sobre un motor en producción, y las que hay aún no bloquean un merge, y ninguna de las 21 piezas se puede construir con seguridad sin esto. No construye producto, pero desbloquea todo lo que sí. | Bloquea |
Bitácora
Lo que ya pasó en AgentRoom, en orden inverso. Cada entrada deja anotada la decisión, no solo el resultado. La historia del motor (jul–ago) está en la bitácora de VADO.
Dos inconsistencias del propio documento: un naming que no bajó y dos identificadores usados dos veces
ARScribe y ARSteward no aparecían una sola vez en el BBP. Francisco los
bautizó el 5-sep y quedaron en NOMENCLATURA.md:50-51; el
diccionario de este documento siguió diciendo «controlador de marco» a secas
durante dieciocho días. Ya están: los dos con entrada propia, las
filas de minuta y controlador de marco apuntando a ellos, el par
comercial/técnico en los títulos de Policy Engine y Trust & Audit,
y P37 renombrada. AR-17 queda cerrado.
Lo que hay que aprender no es que se olvidó: cuando la norma cambia, nada
avisa a los documentos que la citan, y este es justamente el que la explica. Son dos
archivos —el diccionario y NOMENCLATURA.md—, así que la defensa es
barata: revisarlos juntos cada vez que se toque la norma.
Y P41 y P42 estaban usados dos veces, con contenido
distinto. Una vez para Agent Reputation y Agent Certification, otra para
«techo de gasto que corta» y «control de fraude y abuso». La
bitácora desempata sin ambigüedad: la entrada del 30-ago dice que Reputation y
Certification «entran al catastro recién hoy como P41 y P42», y las fichas
#s-reputation y #s-certification y el mapa ya los usaban así.
Ese par se queda. El bloque «Prometido en la web» había numerado
su propia serie desde P41 ignorando que los dos primeros estaban tomados; sus dos chocados pasan a
P48 y P49. Se movió lo mínimo:
P43–P47 no chocaban con nada y no se tocaron, aunque eso le rompa la contigüedad al
bloque. Catastro: 49 piezas.
Por qué se decidió acá y no se escaló: no era una elección entre dos versiones que Francisco hubiera confirmado, era un error de numeración con evidencia documental fechada de un solo lado. Una colisión de identificadores no se resuelve preguntando cuál gusta más, sino cuál llegó primero y quién ya lo está citando.
Dos fichas nuevas de tres candidatos, y la tercera resultó más barata de lo que parecía
AR-34 —y va primero de todo el backlog—: la web
promete que las brechas que solo puede cerrar el cliente «te las decimos con la
instrucción exacta». Verificado contra motor/tipos.ts: el check tiene
que_significa, que explica la brecha, y arregla, que es un enum de tres
valores y solo dice quién la cierra. Ningún campo dice
cómo. No es una función que falta: es una afirmación comercial ya
publicada sin respaldo técnico, y mientras no exista el campo, la salida honesta es
bajar la promesa —prometer menos es reversible, incumplir no—.
AR-35, el registro de lecturas, entra como decisión y no como pieza. Que sea «lo único que hace volver a abrir el panel» es una hipótesis de retención razonable y sin evidencia todavía; abrirle pieza daría por decidido que se construye. Además depende de P18: sin métricas de distribución no hay consultas que registrar.
El tercero no lleva ficha, y por una razón que conviene dejar escrita:
venía como «no se guarda histórico de puntaje», y al verificarlo resultó
que sí se guarda —guardar() nunca borra e
informesDe() ya lista los informes de un correo con su fecha—. Los datos para
dibujar «subiste 9» están en disco desde hace semanas; lo que falta es
leerlos como serie. Eso no es una pieza nueva, es alcance del paso 10 del tablero,
donde quedó anotado —junto con la trampa real, que no es técnica sino de
método: recienteDe() ya descarta informes de otra versión del motor porque
comparar instrumentos distintos no es comparar, y una serie que mezcla denominadores miente
igual que un puntaje sin denominador—. Un hallazgo verificado puede achicar el
trabajo, no solo agrandarlo.
Y el llms.txt que respondía 200 devolviendo la portada entra a
AR-33 como variante, no como incidencia suelta: es el mismo defecto visto
al revés. En los cuatro casos anteriores el valor se afirma sin consultarse;
acá se consulta, pero la señal equivocada —el código de
respuesta prueba que el servidor contestó, no que el recurso exista—. Vale para
nosotros tanto como para el motor: media docena de verificaciones de esta bitácora se
hicieron con curl -o /dev/null -w '%{http_code}', y funcionaron por suerte, no
por método.
El CustomerRoom se dibuja entero, y con datos de verdad cambian los requerimientos
Maqueta navegable en agentroom.io/panel/muestra —noindex y
rotulada—, con el mismo componente y los mismos tokens del sitio. Se llenó con el
informe real de www.junngla.com, corrido ese día con el motor 2.2.0 y
sondas: 23 páginas, 48 de 100 sobre los 16 puntos aplicables, y
cero de cinco asistentes. Los requerimientos quedaron anotados en
CustomerRoom.
La idea que ordena el panel: no es el informe con login. El informe contesta «cómo estoy»; el panel contesta «qué me falta y qué hago ahora». De ahí sale que cada brecha lleve dueño y que cada bloque termine en una acción o en el motivo de que no haya ninguna. Y se navega con el mismo mapa de dos capas que explica el producto: etapas arriba, herramientas al lado.
Dibujarlo con datos reales corrigió tres cosas que con una tienda inventada
calzaban. No hay histórico contra qué comparar el puntaje, así que dice
«Primer informe» en vez de un +0; no hay registro de lecturas, así que
ese bloque queda vacío explicando por qué; y las brechas muestran la
severidad que trae el motor y no un «+8 de puntaje» que el motor nunca
calculó. Una maqueta con datos de relleno habría validado un panel que no
funciona.
Apareció una promesa sin respaldo: la landing dice que las brechas que solo
puede cerrar el cliente «te las decimos con la instrucción exacta», y
el motor no emite ninguna instrucción —tiene que_significa y
arregla, ninguno dice qué hacer—. Se escribieron a mano las nueve que fallan en
junngla.com y las otras diecisiete muestran el hueco. El requerimiento correcto es un campo en el check.
Y dos errores propios, encontrados por el motor y por el reloj. Se daba
llms.txt por presente en junngla.com porque responde 200: devuelve el HTML de
la portada —el sitio trata la ruta como segmento de idioma—, o sea que
comprobar por código de respuesta da falso positivo. Y la fecha de la corrida se
mostraba un día antes: new Date("2026-09-04") es medianoche UTC, que en
Chile es el día anterior. Una fecha ISO sin hora es un día, no un instante,
y habría envejecido mal justo en el dato que ahora va destacado.
Entran dos colores de estado —verde listo y rojo falla— como tokens en los tres temas, solo dentro del CustomerRoom. En la web pública el estado se sigue diciendo con peso, opacidad y borde, porque ahí ámbar y azul ya significan lados de una conversación. El panel es privado y un informe de 26 puntos se recorre salteado: es el caso donde el color hace el trabajo.
Colaborar se adelanta a Operar: la escalera cambia de orden en el tramo de pago
Colaborar · A2ARoom pasa a ser la 05 y Operar · TrxRoom la 06. El tramo gratis no se toca —Ver, Existir y Catálogo siguen 01, 02 y 03— y la frontera del cobro tampoco: sigue en 04, Responder. Lo que se invierte es el orden de las dos últimas.
Por qué importa el orden y no es cosmético. La escalera no es una lista de funcionalidades: es lo que le decimos a un cliente que viene después de lo que ya tiene. Con Operar en la 05, el paso siguiente a que tu agente conteste era que tu agente cobre —lo que exige medios de pago, compromiso de stock y precio, y disputas—. Con Colaborar en la 05, el paso siguiente es que tu agente hable con el agente de otra organización, que no mueve dinero y no necesita nada de eso. Es el escalón más corto de los dos, y transaccionar queda al final, que es donde está el riesgo.
Qué se corrigió y qué no. Se reordenó todo lo que afirma el estado actual: el eje del mapa, las columnas (Agent Exchange se corre a la 05 y el hueco «sin solución» a la 06, que sigue siendo Operar), la ficha de Agent Exchange, la tabla de las seis etapas y la equivalencia del embudo viejo. No se tocaron las entradas de bitácora anteriores: la del 25-ago dice «Operar es 05 y Colaborar 06» y así se queda, porque era cierto ese día. Esta entrada es la que manda.
Ojo con lo que quedó fuera. Ninguna de las 42 piezas cambia de dueño ni de estado: A2ARoom sigue en 0 de 6 y TrxRoom en 2 de 8. Adelantar Colaborar en el relato no la adelanta en el catastro, y conviene no confundir las dos cosas: hoy la etapa 05 es la que menos código tiene.
Reducir la web a lo gratis dejó el mapa grande sin página, y el chico intacto
Al publicar solo lo gratis se borraron /profundidad, /tarifas y las seis
páginas de solución de pago. El mapa de dos capas vivía en
/profundidad, así que salió de la web con ella:
sections/Model.tsx y ProfundidadPage.tsx siguen en el repositorio y
ya no los monta nadie. Es código vivo sin ruta, y conviene saberlo antes de
que alguien lo dé por publicado.
El mapa chico sí sobrevivió, y bien. Verificado en vivo: las cuatro
páginas que quedan lo llevan, enlazan a las cuatro que existen y ninguna apunta a un 404,
porque data/mapa.ts se recortó junto con el catálogo. Ese es
exactamente el motivo por el que los tramos se habían sacado del componente a un dato
compartido: con la lista escrita dentro de cada mapa, el recorte habría dejado seis
enlaces rotos en producción sin que nada fallara al compilar.
Fechas corregidas, y no es cosmético. Tres entradas escritas hoy figuraban como 28-ago y quedaban por encima de las del 02-sep: en una bitácora ordenada al revés, una fecha equivocada no solo miente sobre cuándo pasó algo —rompe el orden y hace ilegible el resto—. También subió la del CustomerRoom, que es de hoy y decía 01-sep. Es el mismo error que ya se había corregido el 01-sep: en una sesión que dura días, la fecha se copia de la entrada anterior por inercia. La defensa es fecharla contra los commits, no contra la memoria.
Y el patrón del literal ya tiene ficha propia: AR-33.
Tercera aparición en una semana —el denominador 16, el
llms.txt, y ahora /api/salud declarando las sondas apagadas con cuatro
encendidas—. Tres archivos sin relación y una sola causa: el valor se afirma en
vez de consultarse, y ninguna prueba falla cuando deja de ser cierto. Se anota como
patrón y no como tres incidencias porque la cuarta ya está escrita en alguna parte.
Las sondas se encienden: cuatro de cinco asistentes verificados contra su API real, y el costo resultó ser 58 veces distinto entre ellos
Hasta hoy los cinco adaptadores estaban escritos desde la documentación y solo gemini se había ejecutado alguna vez. Francisco cargó saldo y las claves, y se probó uno por uno, una llamada cada uno, con la misma pregunta y sin nombrar la marca. PROBADOS queda en cuatro de cinco (commits 11d12f0, 3a7c155).
| asistente | modelo | entrada / salida | costo medido |
|---|---|---|---|
| AR-36 | Nuestro propio robots.txt le prohíbe el ARTwin a los rastreadores de IA. agentroom.io/robots.txt declara Disallow: /gemelo/ en los quince bloques, incluidos los que nombra uno por uno —GPTBot, OAI-SearchBot, ChatGPT-User—. Y /gemelo/<dominio> es exactamente donde la Puerta C sirve el ARTwin publicado. Verificado en producción el 5-sep-2026. |
La solución que se llama «que te encuentren y te entiendan» le está diciendo a quien la buscaría que no entre. No es un detalle de configuración: es el producto contradiciéndose en la primera superficie que un agente lee, y es justo lo que mide nuestro propio L05. Hay que separar lo que se protege —/api/, /panel, /entrar— de lo que existe para ser leído. Mientras siga así, cada ARTwin que se publique por Puerta C nace invisible. |
Bloquea |
| AR-27 · al día | Respondida el 2-sep-2026: el ARTag admite DNS TXT además del archivo (F-09). El BBP la seguía publicando como decisión abierta. | Mientras figuró abierta mantuvo congeladas las instrucciones de instalación, que es el único paso del recorrido que ocurre fuera de AgentRoom. Lo que queda no es decidir sino ejecutar: cambiar NOMENCLATURA.md §2, que hoy describe un solo canal en singular. Consecuencia ya evaluada y aceptada: un comercio en Shopify o Wix queda activo servido por Puerta C. |
Decidida |
| AR-34 | El sitio ya declara qué hace con los datos, y qué no puede deshacer. Se publicaron /terminos y /privacidad en los dos idiomas, y el aviso quedó junto al botón del formulario, no en un enlace escondido. Antes el footer enlazaba a href="#" mientras se pedía el correo sin decir para qué; hoy el sitio no tiene ningún enlace muerto. |
Dos decisiones de Francisco quedaron escritas. Pedir el informe es, en sí mismo, la autorización para analizar el dominio y enviar extractos a los proveedores de modelo. Y el borrado no se ejerce sobre sistemas de terceros: los asistentes a los que va la sonda no son nuestros, así que se suprime en lo propio y se deja de enviar. Lo que esto no reemplaza son los DPA con los cinco proveedores, que siguen sin firmar (B6), ni la capacidad técnica de borrar: sigue sin haber un solo del() en el repositorio, y la política ya promete supresión a los 90 días. Eso lo cierra el índice. |
Importa |
| perplexity | sonar | 27 / 760 | USD 0,000787 |
| claude | claude-haiku-4-5-20251001 | 15.447 / 808 | USD 0,019487 |
| openai | gpt-4.1 | 17.356 / 1.390 | USD 0,045832 |
Las 58 veces de diferencia no vienen de la tarifa sino de dónde ocurre la búsqueda. Perplexity la resuelve de su lado y cobra la pregunta; Claude y ChatGPT devuelven el contenido de los resultados dentro de la entrada, y esos tokens sí se cuentan. En el Radar completo eso es USD 0,29 con Perplexity contra USD 16,73 con ChatGPT, por la misma corrida. Quedó escrito en llm.ts junto a la tabla de tarifas, porque extrapolar de un proveedor a otro se equivoca por siete o por cincuenta —pasó dos veces el mismo día—.
Grok queda fuera, y no por saldo ni por clave: las dos funcionan. Su adaptador manda search_parameters y xAI lo descontinuó —«Live search is deprecated, switch to the Agent Tools API»—. Sin ese bloque el modelo responde pero no busca ni cita, y S25 mide justamente cuál es la fuente citada. Además grok-3 ya no existe: hoy hay grok-4.3, 4.5 y 4.6. Son dos cosas rotas, no una; el requerimiento está en 05-Notas/req-grok-agent-tools/.
De cinco adaptadores escritos contra el docsite, dos resultaron desactualizados. Ese es el costo de escribir contra documentación en vez de contra la API, y la razón por la que PROBADOS guarda fechas.
El hallazgo que no es técnico: los cuatro asistentes, con la misma pregunta y sin decir la marca, citaron entre 13 y 17 dominios cada uno —AWS, IBM, Microsoft, Salesforce—. AgentRoom no aparece en ninguno. Cero de cuatro. Es exactamente lo que S23 mide, y es el diagnóstico que le vendemos a los clientes, aplicado a nosotros.
Las claves dejan de vivir en Vercel: la aplicación las lee de Infisical en caliente
Regla de Francisco: una sola fuente de verdad. Tener las claves copiadas en las variables de Vercel significa que rotar una exige acordarse de dos lugares, y el que se olvida es siempre el segundo.
motor/secretos.ts (commit d8d0e77) las trae del proyecto agentroom de Infisical y las deja en process.env antes de que alguien las pida. Se engancha en desdeHandlerVercel, la única puerta por la que entran todas las rutas del motor. No hubo que tocar ninguno de los veinticinco puntos donde se lee process.env: todos leen dentro de funciones, no al importar, así que alcanzaba con llegar antes.
En Vercel quedan dos variables —la identidad de máquina— en vez de cinco claves de proveedor. Tres decisiones que valen más que el código: no pisa lo que ya está definido (un valor del shell manda sobre el remoto, así la migración es incremental), falla blando (si Infisical no responde se sigue con lo que hubiera; una capa de secretos que tumba el sitio cuando su proveedor tiene un mal día es peor que el problema que vino a resolver) y devuelve nombres, nunca valores.
Y apareció otro literal escrito a mano. /api/salud decía sondas: 'apagadas' con el texto fijo, y siguió diciéndolo después de encender cuatro asistentes —porque nunca lo consultaba, lo afirmaba—. Es el mismo defecto que el /16 del informe y por la misma causa: un valor que describe un estado, escrito el día que era cierto, que deja de serlo sin que nada falle. Ahora se calcula: "sondas": "4 de 5 verificados, 5 con credencial".
La web publica solo lo que hoy es gratis
Decisión de Francisco: mientras lo pagado no exista, no se anuncia. El sitio queda con el análisis, el Radar y publicar la organización en el formato que los agentes leen. Nada más, y nada de eso cuesta.
Se retiraron las etapas Responder, Operar y Colaborar; siete de las diez soluciones; las secciones de qué cubre, casos y catálogo; y las rutas /tarifas y /profundidad con sus pares en inglés. Con ellas se fue el nav de Tarifas, la línea que marcaba dónde empieza el cobro y los botones de precios. Agent Registry volvió después, gratis, dentro de la etapa Catálogo: para que ARDoorMan te nombre hay que estar registrado, y eso no se cobra.
Antes de tocar nada quedó el respaldo en la etiqueta respaldo-antes-de-solo-gratis-20260828, empujada a GitHub, más las ocho páginas servidas archivadas en 99-Archivo/web-completa-20260828/.
Tres textos se reescribieron en vez de borrarse, porque prometían lo que ya no se muestra: el lede de la escalera, el cierre y «¿Cuándo empieza a costar?». La pregunta «¿Quién paga?» se retiró: no aplica todavía. Se limpiaron también llms.txt y el agent-card, que es lo que leen los agentes.
Dos cosas que casi se pasan. Al filtrar los niveles por industria se tomaron por número, y el 03 es «responder», que es pagado —había que filtrar por free—. Y el mapa que va al pie de cada página de solución seguía dibujando las diez, porque no sale de solutions.ts sino de data/mapa.ts: una solución vive en dos archivos, y el recorte alcanzó solo a uno. La sección mostraba tres piezas y el mapa diez.
El CustomerRoom vuelve a tener sección propia, y el requerimiento se escribe como secuencia
Con la reestructura de tres niveles, el CustomerRoom había quedado absorbido dentro de Plataforma. Era un error de encaje: no es una solución —no se vende aparte— pero tampoco es una pieza huérfana, es dónde se administran todas las demás. Ahora tiene su propio grupo, OtrosDesa, debajo de Soluciones.
El requerimiento no se escribió como lista de funciones, sino como secuencia de dieciséis pasos, porque así se comporta: cada tramo desbloquea el siguiente. Escrito como funciones sueltas se pierde lo único que importa para priorizar —que el paso 09 sin el 08 no sirve de nada—.
Dos cosas cambiaron al verificar contra el código, y ninguna se podía saber leyendo el BBP anterior:
El paso 05 —avisarle al comercio que su ARTwin ya existe— figuraba bloqueado por P22. P22 ya se cerró: el ARTwin se guarda en cada análisis. Sigue sin construirse la vista, pero dejó de estar bloqueado, y es lo más barato que se puede construir hoy sobre lo que ya corre en producción. Es el paso que separa mostrar el problema de vender el remedio.
El paso 11 —entrar con Google— estaba anotado como
«escrito y no expuesto». Ya no: EntrarForm muestra el botón cuando
hayGoogle() es verdadero. Lo que falta son dos variables de entorno en
Vercel —GOOGLE_CLIENT_ID y GOOGLE_CLIENT_SECRET—,
verificado en vivo: la página en producción no ofrece Google.
Un desarrollo terminado que no está configurado se ve exactamente igual que uno que no
existe, y se prioriza distinto.
Los tres pendientes de #s-score, con archivo y línea: el gate en verde, el denominador con prueba, y las sondas hasta donde llegan sin credenciales
Lo primero que se encontró cambió el requerimiento. motor/render.ts:288 —la superficie «grave» del /16— ya estaba corregida desde el 26-ago (commit d8e7420), y este tablero, REQUERIMIENTOS-DESARROLLO.md y el veredicto del 1-sep seguían declarándola rota. Un arreglo sin prueba y sin registro deja tres documentos afirmando un estado falso durante una semana; por eso la red de pruebas fue primero. La cifra «92 de 279» se remidió sobre los informes en disco: 92 de 279 tienen más puntos evaluados que 16, y los 279 HTML generados el 23-ago imprimían /16. Describe el estado anterior al 26-ago, no lo que se entrega hoy.
El gate existe y está en verde sobre un push real (PR #1, corrida 33643062152, 2-sep): lint, typecheck de los dos tsconfig, las suites y una auditoría contra línea base fechada, sin secretos y con un paso que falla si el runner trae alguna credencial. Corre sobre fixtures versionados de dominios propios (6 capturas y 8 informes, 1,6 MB; ningún tercero). No está pagado: faltan el merge a main y la protección de rama con el check requerido, que son un clic de Francisco. Sin eso el gate informa y no bloquea.
El denominador ya no se inventa en ninguna superficie (PR #3): una sola función pura entrega evaluados, total y brechas del mismo informe, null los tres si no hay informe; el stream y el correo la consumen, y TOTAL_CHECKS salió del handler. Una prueba de identidad verifica render, correo y stream con informes de 26 y de 24, y se vio fallar dos veces antes de cerrarse: con el literal 16 y con un literal 26, que es justo el que habría seguido mintiendo en los ocho informes de 24. Antes, la invariante de capas pasó a contar las cuatro (PR #2): con Sondas apagada una suma de tres pasaba igual, y el día que se encendiera un segundo asistente la suite se habría puesto roja por un defecto de la prueba, no del motor.
Las sondas avanzaron todo lo que se puede sin gastar: parseo de los cuatro adaptadores sin red (PR #4), cobertura de criterio de los 26 puntos, 26 de 26 (PR #5), y el informe distingue ahora sin credencial, sin respuesta y no verificado contra API real, con el registro de verificaciones datado (PR #6). Dos cosas para revisar al encender, no antes: la documentación de xAI ya describe otra API y otro modelo que los que el adaptador de Grok asume, y Perplexity retira sonar el 27-sep. B0, B1, B2, C1 y C2 de P23 siguen bloqueados por gasto, techo en consola y DPA, que no son desarrollo.
Aprobación B7 registrada: los cambios en motor/handlers/analizar.ts, motor/tipos.ts, motor/informe.ts, motor/asistentes.ts y motor/render.ts son exactamente los que autoriza el guardrail G7 de 05-Notas/specs/s-score-informe-defendible/decisions.md §5. Todo entró por rama y PR, apilados en orden; ningún merge se hizo desde el squad y nada se publicó a producción.
Dos cosas distintas dibujadas igual se leen como la misma cosa
En el mapa recién publicado, las etapas y las soluciones usaban la misma caja —mismo borde, mismo fondo, mismo radio—. Toda la separación conceptual que costó establecer —la etapa es el recorrido, la solución es la pieza— se perdía en el dibujo: si dos cosas se ven iguales, son iguales para quien mira.
La corrección no fue cambiarles el color, fue cambiarles la naturaleza. La etapa dejó de ser un objeto: ahora es un rótulo sobre una línea, como la marca de un eje —sin caja, sin borde, sin fondo—, y esa línea va gris mientras es gratis y amarilla desde donde se cobra. La solución quedó como la única que es caja: con borde, sombra, elevación al pasar por encima y una flecha siempre visible, porque se abre. Entre las dos capas entra un rótulo que dice dónde termina el eje y empiezan las piezas.
La lección vale para lo que viene: cuando dos conceptos hay que explicarlos con una leyenda, el problema no está en la leyenda. Un mapa que necesita que le expliquen la diferencia todavía no la está mostrando. La nota al pie ahora la dice en una línea —las etapas no se compran, las soluciones sí—, pero es un refuerzo, no el mecanismo.
El mapa sale del BBP y entra a la web — y al llevarlo aparecieron cuarenta 404
La sección El modelo de agentroom.io/profundidad era un embudo de
cinco pasos que mezclaba etapas con soluciones en una sola lista: al lector le
quedaba que cada escalón era una pieza distinta que se compra por separado. Fue reemplazada
por el mismo mapa de dos capas que ordena este BBP —seis etapas arriba con su nombre comercial
y su nombre técnico, diez soluciones abajo dibujadas sobre las etapas donde operan—, y
cada bloque abre la página de su solución. En vivo desde hoy, en los dos idiomas.
Lo que no se llevó a la web: los semáforos de avance. En el BBP dicen qué está construido y qué no, y esa es información interna: en una landing, un bloque marcado «no existe» es una objeción de venta escrita por nosotros mismos. El corte de cobro sí se lleva, porque no hay nada que esconder en decir dónde empieza a pagarse: es una banda sobre las etapas 04–06.
Hallazgo, y no era el encargo. Al verificar el mapa publicado apareció
que los enlaces a las páginas de solución en inglés apuntaban a
/solutions/[slug], y esa ruta no existe —la buena es
/en/solutions/[slug]—. Estaba roto en el menú, en el menú
móvil y en la grilla de la landing, o sea treinta enlaces a 404 en toda la
versión en inglés, más los diez del mapa nuevo que heredó el
mismo patrón al copiarlo. Corregido y desplegado. El resto de las rutas en
config/site.ts tenían el prefijo bien; lo que fallaba era el único lugar
donde la ruta se armaba a mano con el slug, que es exactamente donde una convención deja de
vigilarse.
Y una nota operativa: .claude/launch.json tenía
24 entradas apuntando a rutas que ya no existen —los padres de
Proyectos/ se renombraron a 01 Junngla, 02 Quanntum,
03 TheRoK3T y nadie actualizó el archivo—. Se corrigieron las dos de
AgentRoom para poder levantar el dev; las otras 22 siguen rotas y son de otros
proyectos.
El BBP se reestructura en tres niveles, y lo que se ordena no es la web: es qué se vende
Hasta hoy el BBP estaba organizado por etapas —una sección por ARAIS, ARTwin, TalkRoom, TrxRoom—, y eso hacía creer que cada etapa era un módulo de software por construir. No lo es. Las etapas son el recorrido, no piezas. Desde esta versión hay tres capas separadas y no se mezclan: las seis etapas son nomenclatura del journey; las diez soluciones son lo que se construye y se vende; las 42 piezas P## son lo único que un desarrollador toma.
Soluciones pasa a ser su propio grupo, con El mapa como entrada: las diez como bloques que abarcan las etapas donde operan. Cada una trae cuatro cosas en el mismo orden —qué hace, requerimiento técnico para construirla, consumo en tokens y un tablero de avance por subfuncionalidad—. Son 66 subfuncionalidades con 112 semáforos: es la primera vez que el estado de avance no se cuenta por módulo sino por lo que efectivamente falta hacer.
Pricing se reescribió en torno al token: primero cuánto vale uno, después cómo se consume en cada solución. Las gratis muestran cero, que es la forma más corta de decir dónde empieza a facturar el producto.
Se eliminó la sección Inicio. Su escalera ya vivía en el mapa y su glosario, en el diccionario; lo que no estaba repetido —el problema que resuelve, qué es en una línea y las tres industrias— quedó al pie del mapa. Borrar una sección no puede significar perder lo que decía.
Diccionario ahora es exhaustivo: 71 términos en siete familias —actores, etapas, nombres propios, análisis, publicación, cowork, códigos—, más las diez soluciones y una tabla de lo que ya no se dice. Cada entrada marca si es pública o interna, que es la distinción que faltaba: no hay términos secretos, hay términos que no significan nada para un cliente. Solo entra lo que no existe fuera de AgentRoom: JSON-LD y MCP no son nuestros y no se definen acá.
Los ids de sección cambiaron, así que un enlace viejo del tipo
/#bitacora o /#arais apuntaba a nada. Se agregó un mapa de alias en el
propio HTML que los redirige al destino nuevo. El costo de reordenar lo paga quien reordena, no
quien guardó el enlace.
Riesgo que se corrió y conviene dejar escrito: la maqueta tenía
marcadores vacíos donde el BBP real tenía la bitácora, los dos backlogs, el embudo
y la arquitectura —casi 156 KB—. Publicarla tal cual habría borrado todo el registro
histórico de un solo cp. Se rescató sección por sección desde
el archivo en disco antes de reemplazar, con respaldo previo. Una maqueta se juzga por lo que
muestra; un reemplazo, por lo que no destruye.
Un mapa de los seis componentes y las diez soluciones — y lo que muestra
Nueva sección Overview en Técnico: el sistema en una pantalla. Los seis componentes de la escalera en columnas, y cada solución puesta donde efectivamente opera. Cuatro no caben en una columna porque cruzan varias, así que van en bandas con su rango: Identity, Reputation y Certification desde la 03; Policy Engine y Trust & Audit desde la 04.
Puesto todo junto aparece algo que en las secciones separadas no se ve: las dos únicas soluciones vendibles están en la misma columna, la 01, que es donde no se cobra. Todo lo verde vive en el tramo gratis y todo lo que factura está en rojo. El producto tiene su parte terminada exactamente donde no gana plata.
Y una dependencia que el mapa vuelve obvia: tres de las cinco transversales —Reputation, Certification y Trust & Audit— dependen de Agent Identity, que hoy es AR-16. Es una sola pieza que no existe sosteniendo tres soluciones ya publicadas. También queda escrita la restricción que el mapa hace cumplir: auditoría y controlador nunca cuelgan de Ver ni de Existir, porque antes de que exista una sala no hay interacción que gobernar ni que registrar.
Fe de erratas de fechas. Esta sesión lleva días abierta y las últimas entradas se fecharon por inercia. Corregidas contra los commits: el rediseño de las diez soluciones fue el 30-ago y el ARDoor el 31-ago, no el 27. Las de 23 a 26 pueden tener el mismo corrimiento y no hay commit que las fije. En una bitácora la fecha es la mitad del contenido, y la única defensa es fecharla contra algo externo —un commit, un archivo— y no contra lo que uno recuerda.
ARDoor: el sello que invierte el CAPTCHA
Nombre nuevo de Francisco. El ARDoor es la cara visible del ARTag, no una pieza aparte: un solo acto de activación con dos manifestaciones —el archivo que lee el agente por servidor, y el sello que ve la persona—. Dice «Soy un agente» donde el CAPTCHA decía «No soy un robot», y lo marca la máquina en vez del humano.
El argumento, textual de Francisco: «el CAPTCHA protege excluyendo; el ARDoor protege gobernando». Invitar agentes a entrar solo es sensato si sabes quién entra (P24), si solo pueden hacer lo autorizado (P34, P37) y si queda constancia (P36). O sea que el sello no es decoración: es la promesa cuyo respaldo son las tres piezas que faltan.
Y resuelve un problema de venta que el ARTag tenía solo: pedirle a un comercio que instale algo que nadie ve es difícil. Con sello obtiene además una insignia de «listo para agentes». Cierra también la analogía del cowork: el comercio tiene su ARDoor; AgentRoom tiene su ARDoorMan en el counter.
El matiz que hay que decir en voz alta: un agente por servidor no hace clic en botones. Si esto se vende como «un botón que los agentes presionan», la mayoría nunca lo presiona y quien revise se da cuenta. El sello es para humanos y para agentes con navegador; lo que realmente encamina es la declaración. Quedó escrito así en la norma y en la ficha.
Y desbloquea una colisión que venía durmiendo: «puerta» ya significaba otra cosa —las Puertas A/B/C/D del código—, y era AR-15, deuda de prolijidad. Con ARDoor pasa a ser un choque con fecha: en cuanto se publique, la misma palabra va a nombrar el sello del cliente y el modo de servir el ARTwin. Se resuelven juntas o no se resuelve ninguna.
Nota que vale por el contraste: esta vez el nombre llegó a la norma antes que a producción —está en la maqueta, no en el repo ni en la web—. Es lo contrario de lo que pasó ayer con Agent Reputation y Agent Certification, y de lo que pasó con el «gratis» del counter.
La web ordena la oferta en diez soluciones, y el backlog se entera después
El rediseño dejó diez soluciones con página propia, todas en vivo: AI Radar, Agent Score, AI Presence, Agent Registry, Agent Identity, Policy Engine, Trust & Audit, Agent Reputation, Agent Certification y Agent Exchange. Cada sección de Técnico lleva ahora, arriba de todo, cuál es la solución que vende lo que ahí se describe, y el BacklogTI tiene la tabla puente completa: qué pieza construye cada una.
Solo dos de las diez son vendibles hoy —las dos del ARAIS—. Las otras ocho describen algo que no existe, en distintos grados: AI Presence está a medias, las seis restantes en cero.
Y dos se publicaron sin pieza que las construyera. Agent Reputation y Agent Certification entran al catastro recién hoy como P41 y P42, después de que su página estuviera publicada. Es el mismo patrón del «gratis» del counter (AR-19): primero se dijo, después se decidió. Las diez páginas ordenan bien la oferta —el problema no es el diseño—, pero conviene que el backlog se entere antes que la web.
Las dos nuevas traen preguntas que no son de ingeniería. Una reputación sin identidad verificada no es reputación, es un promedio de anónimos, así que P41 depende de P24; y hay que definir quién la escribe, porque si la escribimos nosotros somos juez. Y certificar es afirmar algo sobre otro: antes de construir P42 hay que decidir quién responde si un agente certificado se porta mal.
AR-17 quedó resuelto a medias: Trust & Audit y Policy Engine son nombres comerciales, y la norma exige un par. Si no se fija el técnico, el código va a inventar el suyo.
El ARU pasa a llamarse token
Decisión de Francisco. La unidad de cobro deja de ser ARU y pasa a ser
token: minúscula, plural normal, sin reglas de sigla. El cambio se
aplicó en el BBP (41 ocurrencias), en la norma y sus copias, en el CLAUDE.md del
repo, en la skill y en la web —pricing.ts centraliza el rótulo, así
que casi todo salió de ahí—. Verificado: cero ARU en agentroom.io y en
bbp.agentroom.io, y el agent-card lo declara deprecado.
Deja dos cosas abiertas. AR-22: token ahora significa tres cosas —la unidad de cobro, los tokens de los modelos y el token de acceso—, y la colisión visible es de pantallas contiguas: el onboarding entrega «tu token» como credencial y dos pantallas después se cobra «por tokens» como dinero. Hay una peor y es externa: en un producto de IA token ya significa unidad de texto de un modelo para todo el mundo, así que «cobramos por tokens» va a leerse como que facturamos consumo de LLM. Eso no se arregla renombrando nada nuestro.
Ampliado al verificarlo: el costo en tokens de modelo viaja en el JSON del informe pero no se renderiza —la ambigüedad con la industria es real y la interna todavía no llega al cliente, aunque se vuelve visible si alguien expone ese campo—. La que sí ve el cliente es la credencial. Y quedó anotado el precedente de la categoría: «créditos» resuelve las tres colisiones de una vez. La familiaridad que hace atractiva a «token» es la misma que la vuelve engañosa.
AR-23: los identificadores TypeScript siguen en ARU a
propósito —Francisco lo derivó al squad—. Copy en tokens, código en
ARU: estado intermedio consciente, no descuido.
Y un detalle de método que vale guardar: el reemplazo automático
dejó cinco frases mal, y la peor metió token en la lista de
deprecados del agent-card —declarando obsoleto justo el término que se
acababa de adoptar—. Se revisaron una por una en el diff. Un sed no distingue
cuando un texto habla de la palabra en vez de usarla, y en un documento de nomenclatura
la mitad de las apariciones son del primer tipo.
El informe entrega 22/16: aritmética rota en lo que se le da al cliente
Lo que el BBP anotó ayer como un rótulo desactualizado resulta ser peor. Sobre
279 informes generados, 92 —un tercio— muestran un numerador mayor que el
denominador, y el peor caso dice 22/16. Reproducido acá
contra los informes en disco. motor/render.ts:288 imprimía {evaluados}/16 [corregido el 26-ago en d8e7420; verificado el 2-sep-2026, ver bitácora]
mientras el análisis mide 26, y el correo manda el total correcto: los dos se
contradicen. Rompe I5 justo donde el producto promete que el puntaje
siempre va con denominador.
Corregido al verificarlo: no hay que regenerar nada. Los 279 informes
no tienen el 16 guardado —271 llevan total: 26, ocho llevan
24, ninguno 16—. El literal vive solo en el render, al lado del dato bueno, así
que cambiarlo por inf.puntaje.total arregla todo lo ya entregado. La
disyuntiva que este mismo BBP planteó hace un rato —regenerar o corregir al vuelo—
se disuelve. «Un tercio de lo entregado quedó mal» y «un tercio se arregla
con una línea» son dos noticias muy distintas para quien prioriza.
Y los ocho informes de 24 revelan lo de fondo: el denominador varía
legítimamente entre versiones del motor, o sea que el literal estaba mal desde que se
escribió, no desde que el análisis creció. Por eso la prueba correcta no
es «numerador ≤ denominador» —un 26 fijo la pasaría y
seguiría mintiendo en los de 24— sino denominador impreso idéntico a
puntaje.total.
Y los dos blobs públicos resultaron ser dos riesgos distintos, no uno. Publicarlos juntos habría sobredimensionado el menor y escondido el grave:
AR-20 — el ARTwin se puede calcular. Su id es
sha1(dominio|construido_en) a 12 hex, y quien dispara el análisis conoce las dos
entradas. Acá la defensa no puede ser que la URL no se adivina, porque se calcula.
AR-21 — el informe no se puede revocar. Su id es
randomUUID(), 122 bits, no derivable de nada: eso es una capability URL,
patrón legítimo. El problema es que se guarda con caché de un
año, se sirve con s-maxage=3600, y no hay un solo
del() en el repo. La defensa sí es que no se adivina, y
sería suficiente si se pudiera revocar. Un enlace filtrado queda filtrado para
siempre.
La distinción es del squad y es la que hace defendible el hallazgo. Vale como método: dos cosas que comparten la causa técnica —blob público— no comparten el riesgo, y juntarlas en una ficha habría llevado a priorizar mal.
El squad auditó el documento de requerimientos, y tenía razón
La corrección que más urgía: el BBP publicaba
«Cobertura de pruebas 0%» de cara a terceros. Es falso.
Corrí npm test y pasan cuatro suites: sondas
prueba resumir() directo, invariantes recorre 25 capturas reales,
más acceso y costo. La cifra honesta es «cuatro
suites, sin gate»: lo que falta no son pruebas, es que nadie está
obligado a correrlas —una prueba que no bloquea un merge es documentación—.
Verificando sus hallazgos aparecieron dos que nadie había visto completos.
El ARTwin y también el informe se guardan como blobs
públicos con addRandomSuffix: false, y el nombre del ARTwin se deriva de
dominio|construido_en, datos que conoce quien disparó el análisis.
Contradice I7 justo donde el modelo promete lo contrario. El
reporte apuntaba al handler; el handler exige tenant y está bien —la
vía es el blob—. Es AR-20.
Y el «16» vive en tres superficies, no dos. La que faltaba es
la peor: motor/render.ts:288 imprimía {evaluados}/16 [corregido el 26-ago en d8e7420; verificado el 2-sep-2026, ver bitácora] en el informe que
se le entrega al cliente, mientras el correo manda el total correcto. Los dos se contradicen,
y rompe I5.
Tres correcciones más que acepté: RQ-CR-1
decía que no dependía de nada —depende de P22, y es barato
porque P22 ya está escrito—; D-01 daba un número de
vulnerabilidades que se mueve solo, así que ahora va con fecha al lado; y dos de los cinco
modelos por defecto de las sondas tienen problema antes de encenderse
—grok-3 salió del catálogo de xAI y sonar se soporta hasta
el 27-sep-2026—.
Los 44 pasos pendientes bajan a requerimientos
Se construyó 03-Documentos/REQUERIMIENTOS-DESARROLLO.md para el squad, desde
los siete recorridos de Técnico: 73 pasos mapeados, 44
pendientes, bajados a 34 requerimientos con criterios de aceptación
verificables, lo que no entra en cada uno, y el orden por dependencias.
Lo que más cuesta transmitir a un equipo nuevo no son las tareas sino las razones, así que el documento abre con 13 reglas invariantes: ningún dato sin procedencia, lo inferido no se publica, verificar antes de comprometer, el primer lugar no se vende, el counter es gratis, un agente no ejecuta JavaScript. Cada una con el motivo, porque una regla sin motivo se salta la primera vez que estorba.
Y termina con cómo verificar lo que él mismo afirma —cuatro comandos que cualquiera puede correr—, más el aviso del cache-buster. Un documento de requerimientos que no se puede auditar envejece igual de mal que un BBP que no se contrasta contra el código.
Queda una dependencia que conviene no perder: el documento sale de estos recorridos, así que cuando un paso cambie de estado acá hay que actualizarlo allá. Anotado también en la cabecera del BacklogTI.
La escalera crece a seis: entra Catálogo, y es gratis
Commit 85c1a56. ARDoorMan dejó de ser solo el counter y pasó a
ser una etapa propia: la 03, Catálogo, entre Existir y Responder. Su
promesa es «te ofrecen cuando alguien pregunta»: un asistente llega buscando
un problema, no tu marca, y la recepción responde quién puede
atenderlo, en el orden en que llegaste.
Y es gratis, lo que mueve la frontera del cobro: la tarifa ya no empieza en la 03 sino en la 04. Todo texto que diga «empieza en Responder» sigue valiendo; el que diga «en el nivel 03» quedó falso. Las etapas de más arriba se corrieron: Operar es 05 y Colaborar 06.
Con eso ARDoorMan sale de cero. Está parcial, no en construcción, porque una parte sí existe: el endpoint MCP permite que un asistente pregunte qué tienes y en qué condiciones. Lo que falta es el counter conversacional —y la distinción es la etapa entera: hoy el asistente puede consultar a un comercio, pero solo si ya sabe a cuál preguntarle. Descubrir quién puede atenderlo es justo lo que no existe. Su recorrido quedó en 1 de 7, con el corte en el paso 02.
Un efecto lateral que ordena TalkRoom: sus dos pasos que funcionaban —encontrar y leer el catálogo— pertenecen ahora a Catálogo, que es gratis. Se dejan en su recorrido porque sin ellos no se entiende, pero marcados: de TalkRoom, que es la primera etapa que cobra, no hay nada construido.
Y AR-19 se cierra de una forma que conviene recordar: el «gratis» que el 24-ago era una deducción publicada sin decidir, el 25-ago quedó formalizado en el código como precio de la etapa 03. Salió bien —la etapa gratis es buena idea—, pero el camino fue al revés: primero se dijo, después se decidió.
Revisión de estado: el análisis dejó de botar el ARTwin
Se auditaron los siete recorridos de Técnico contra el código y la
web en vivo. P22 está construida y se cierra:
analizar.ts arma el ARTwin desde la misma captura, deja el gemelo_id en el
informe y lo guarda, con el fallo aislado —si el gemelo no se puede construir, el informe se
entrega igual—. Se implementó tal cual el requerimiento, y el código lleva escrita
la regla que importa: «guardar no es publicar: sin tenant activo nada de esto
se sirve». ARAIS sube a 9 de 11 y le queda un solo
hueco, el 11: nunca vuelve a medir.
En CustomerRoom apareció media cuenta que no estaba anotada.
motor/cuentas.ts y motor/sesion.ts existen: la sesión vive en cookies
firmadas con HMAC y sin base de datos, y la cuenta es la dirección de
correo verificada. Alcanza para entrar y ver lo tuyo, no para P1 —la cuenta de
la organización, la que respondería de quién es el ARTwin—. Y
motor/google.ts implementa OpenID pidiendo solo openid email, pero
/entrar no lo ofrece: escrito y no expuesto.
Lo demás sigue igual, y ahora está verificado uno por uno: no existe ARTag, ni counter, ni apertura de sala, ni handshake, ni minuta, ni registro de demanda no servida, ni verificación en vivo, ni reserva, ni orden, ni metering. ARDoorMan 0/6 y A2ARoom 0/6 no tienen una sola línea.
Nota de método, porque casi se cuela: el primer barrido se hizo con una
función que respondía sí/no, y falló en las dos
direcciones —dio «no» a guardarGemelo, que sí
existía, y «sí» a sala, minuta y handshake, que no—: las palabras
aparecían en comentarios. Se rehizo pidiendo la línea como evidencia en
vez de un booleano. Un barrido que solo dice sí o no no se puede auditar, y esta revisión
existía justamente para auditar.
Auditar una cita encontró una política de precios que nadie decidió
Al incorporar el modelo cowork se compararon las reglas escritas contra las palabras textuales de Francisco. Tres calzaban. Dos hallazgos salieron de las que no.
Uno se resolvió a favor del respaldo: la regla de identidad sí es de él —«los agentes que viven en AgentRoom están autenticados; los que llegan deben autenticarse»—; lo que era síntesis ajena es el eslogan «nadie entra anónimo». La regla quedó con el enunciado original, que dice lo mismo y envejece mejor, y AR-16 recuperó ese apoyo.
El otro es más serio y sigue abierto. «El counter es gratis» tampoco es de Francisco: es una deducción —si el contador de token parte al abrir la sala, antes no corre—. La deducción es sólida, pero «gratis» es una palabra comercial, y al verificarla apareció que ya está publicada: agentroom.io dice hoy «La puerta es gratis — preguntar no cuesta». Una inferencia entre sesiones llegó a la web como política de la empresa sin que nadie la aprobara. Queda como AR-19, y hay una tercera lectura que nadie descartó: que el counter no consuma token no obliga a que sea gratis para siempre —podría tener tramo, cuota o tarifa propia—.
Lo que hay que conservar es el método, no el caso. Los dos aparecieron porque alguien mandó la cita en vez de su paráfrasis, y porque del otro lado se auditó en vez de copiar. Si el reporte hubiera dicho solo «Francisco dijo que nadie entra anónimo», hoy habría una frase ajena anotada como suya y nadie lo sabría nunca. Confirmar un supuesto cuesta una frase; desdecirse de un «gratis» ya publicado cuesta mucho más.
Se acabó el 0% de cobertura, y el requerimiento de las sondas destapó un bug de plata
npm test corre y pasa. Cuatro suites —costo,
sondas, acceso, invariantes—, verificadas hoy junto con
npm run typecheck. P21 pasa de no existe a
a medias, y con eso cae el argumento que bloqueaba el plan entero: la
auditoría decía que nada se podía construir con seguridad sin la red de pruebas.
Lo cubierto son las piezas que deciden —la agregación de las Sondas, el contador
de costo, el acceso, y las invariantes sobre 25 capturas reales de 279—; lo que
falta es la prueba de cada uno de los 26 puntos, que era el hallazgo original.
Y al escribir P23 apareció un bug que costaba plata.
TARIFA solo conocía los modelos de Anthropic y Gemini; los adaptadores de
Perplexity (sonar), ChatGPT (gpt-4.1) y Grok (grok-3)
llamaban al contador con modelos que la tabla no tenía, caían a
{entrada: 0, salida: 0} y sumaban USD 0,00. Las llamadas y los tokens
sí se contaban; el dinero no. Lo mejor del hallazgo es cuándo se
habría manifestado: exactamente al encender el segundo asistente. Un
requerimiento que se escribió para pedir credenciales terminó encontrando el bug que
esas credenciales iban a destapar (86b3828).
Un cruce entre la web en vivo y este documento sumó siete piezas más (P41–P47). La más seria es P41: el techo de gasto se promete, se describe y no lo hace cumplir ninguna pieza. P19 y P38 miden; ninguna corta. Y se vende con «pagar por uso solo funciona si el límite es tuyo»: sin corte es un medidor sin llave de paso. También apareció AR-18, que no es una brecha sino una contradicción entre dos documentos nuestros: la landing publica «prueba que actúa por tu cliente» como paso del recorrido, y el backlog dice de esa pieza que quizá no se construya nunca acá.
El catastro va en 49 piezas. Eran 21 el 20-ago. Ninguna de las 26 nuevas apareció escribiendo código: salieron de definir los modelos y de comparar lo publicado contra lo anotado. La web va por delante del backlog, y la distancia crece cada vez que se publica.
AgentRoom es un cowork: counter, salas y minuta
Francisco cerró el modelo del recorrido del asistente. AgentRoom es una oficina tipo cowork: un counter con recepcionista —ARDoorMan, nombre nuevo—, salas que se arriendan por rato (TalkRoom, TrxRoom, A2ARoom), alguien que levanta la minuta y un controlador de marco que cuida que la reunión no se salga de lo acordado. El recorrido son cuatro actos: llega y se autentica → counter → sala → se va y queda la minuta.
Cuatro reglas que son requisitos, no adorno: nadie entra anónimo; el orden lo da la antigüedad y el primer lugar no se vende; las salas son ciegas entre sí; y el contador de token parte al abrir la sala, porque el counter es gratis. La segunda es la que separa a AgentRoom de un directorio pagado: vender el orden convertiría la recomendación en publicidad, y con eso se cae la tesis entera.
El catastro pasó de 21 a 40 piezas en cuatro días sin escribir una línea de código: diecisiete entraron con este modelo (P24–P40), dos venían del modelo comercial. No es que el producto haya crecido: es que recién ahora está escrito lo que siempre faltó. De todas ellas la que más vale por su tamaño es P29, el registro de demanda no servida: no es una métrica sino el motor de adquisición —«treinta y siete asistentes preguntaron por esto y no había nadie» es el argumento para ir a buscar al comercio—, y es la única pieza que funciona con cero adheridos: mientras menos haya, más señal produce.
Y una contradicción en producción, verificada en vivo: el MCP
responde tools/call sin credencial mientras el modelo declara que
nadie entra anónimo. No es una fuga —el corte por tenant funciona y un
dominio sin servicio activo no entrega nada—, es ausencia de identidad de la
contraparte, y eso vacía la auditoría antes de construirla:
una constancia de que «alguien» preguntó no sirve en una disputa, que es para lo
que se vende. Es AR-16, en Bloquea. Quedan dos piezas sin bautizar —la
auditoría y el controlador— en AR-17.
Aparte: se decidió que en las sondas el detalle informa y el
agregado puntúa —el comercio ve en qué asistente aparece, sin que se
convierta en un score por chat—, y la nomenclatura quedó versionada en
el repo (0a538c4) después de días publicada sin commitear.
Las sondas: no falta cobertura, está roto el veredicto
Al escribir el requerimiento del paso 07 apareció que el problema es peor y más
barato de arreglar de lo que decía el BBP. veredicto() da falla con cero
y aprueba con mayoría estricta, así que con un solo asistente el
estado «parcial» no existe: 0/1 falla, 1/1 aprueba.
No hay punto medio.
Eso son 10 puntos de peso decididos de forma binaria por un modelo, una vez —S23 pesa 4, S24 y S25 pesan 3—. Un «falla» se le entrega al comercio como no apareces cuando preguntan por lo que haces, cuando lo que ocurrió fue no apareciste en Gemini, en esa corrida. Y la respuesta de un asistente ya demostró ser inestable entre corridas: es la razón por la que la posición dejó de puntuar. Con una sola credencial, esa inestabilidad salta de aprueba a falla sin escala.
S26 es el único que se protege: exige MINIMO_PARA_COMPARAR = 2
y sale no_evaluado declarando el motivo. Los otros tres no tienen esa guarda. Y
no hace falta tocar veredicto(): con dos asistentes la regla ya funciona bien,
el problema desaparece solo al encender el segundo.
Queda como P23, y es la única pieza del backlog que se destraba
con una decisión administrativa y no con código: cuatro credenciales. Los cinco
adaptadores están escritos y se activan solos al encontrar su variable. Requerimiento en
05-Notas/req-sondas-multiasistente.md, con un riesgo que conviene decidir antes:
los puntajes ya publicados en el Radar se midieron con un asistente y al pasar a
cinco dejan de ser comparables —o se recorre el Radar de nuevo, o se marca la fecha de
corte—.
Diccionario propio, y el ARAIS cierra el círculo
Nueva sección Diccionario en Overview con las palabras que inventamos, en
cinco bloques: los nombres del sistema, las del análisis, las de la publicación, las de
uso obligado y las que ya no se dicen. El criterio de entrada es simple: solo lo que no
existe fuera de AgentRoom —si alguien puede buscar JSON-LD o .well-known y
encontrar la definición de otro, no es nuestro—. El glosario que vivía suelto
dentro de Inicio se movió, no se copió: dos listas del mismo
vocabulario en el mismo documento era exactamente lo que la norma vino a evitar.
Lo más útil del cuadro es la columna del medio: qué es
público y qué es interno. Veinte términos se pueden decir en una
reunión; ocho —cascarón, tenant, las Puertas, el corte,
MINIMO_PUBLICABLE— no, y no porque sean secretos sino porque no significan nada
para un cliente. Esa distinción no estaba escrita en ninguna parte y se resolvía por
instinto.
Y el recorrido del ARAIS se completó con lo que definimos hoy. Ganó un paso 11: volver a correr cuando el ARTwin se activa. Ahí el ARAIS deja de ser un diagnóstico y pasa a ser la medida del progreso —el comercio ve subir el número que le mostró el problema—. Con eso el recorrido abre y cierra en el mismo lugar: empieza cuando alguien quiere saber qué ven las IA de él, pasa por ARTwin y CustomerRoom, y termina cuando ese número cambia. Hoy solo existe la apertura: se entrega un diagnóstico y ahí termina todo. Sus dos huecos son el 04 —botar el ARTwin ya pagado— y el 11, no volver a medir nunca.
Corrección de fecha: esta entrada y las dos siguientes se registraron primero como 23-ago. La sesión cruzó la medianoche y se siguió fechando con el día anterior; los archivos en disco lo delatan. Corregido a 24-ago —en una bitácora, cuando pasó algo no es un detalle—.
Nace el ARTag, y con él la frontera entre lo nuestro y lo suyo
La contraprestación del ARTwin gratis ya tiene nombre: ARTag, la señal que el comercio deja en su web para activar su ARTwin. Y con ella quedó definida una regla que faltaba: el ARTwin se le avisa, no se le entrega. Lo construimos con una captura que pagamos nosotros, así que antes del ARTag es nuestro activo —el comercio sabe que existe, ve cuántos productos y políticas trae, y no puede llevárselo—. Después del ARTag es suyo y se publica. Sin ARTag el ARTwin existe pero no se sirve, que es lo que hace que activar signifique algo.
El orden del flujo importa y quedó fijado: avisar → ofrecer → revisar y completar → entregar el ARTag → instalar → verificar con un botón que sondea su dominio → publicar → recalcular el ARAIS. Revisar viene antes de recibir el ARTag, no después: así nadie publica dato inferido sin haberlo mirado —y en el 95% de los sitios el precio sale de heurística—, y el comercio llega a instalar habiendo invertido trabajo en su propio ARTwin. Invertir ese orden convierte la revisión en un trámite que se salta.
Una salvaguarda escrita en la norma, en mayúsculas: el ARTag
es un archivo, no un script. El nombre evoca el Google Tag y el Meta Pixel, y ese
es justamente el riesgo: un agente no ejecuta JavaScript —nuestro propio motor
tampoco, y L04 mide exactamente eso—, así que implementarlo como
snippet entregaría un ARTwin que nuestro análisis declara invisible. Es un estático
en /.well-known/agentroom.json. Los recorridos de ARTwin (16 pasos) y
CustomerRoom (16) se rehicieron con este flujo.
El paso 04 tiene requerimiento, y el catastro crece a 22
Se detalló qué hay que construir para que el análisis deje de botar el
ARTwin. Al bajarlo a código quedó claro cuán cerca está:
construirGemelo() es una función pura y sincrónica sobre la captura, y
guardarGemelo() ya existe. En el flujo web la primera no se llama nunca
—solo se usa a mano por CLI—, y la captura vive dentro del bloque de
analizar.ts y se pierde al salir. En lo esencial son dos líneas
después de guardar el informe.
Lo que no es trivial es el borde. El análisis reutiliza informes recientes del mismo dominio —cortesía con el comercio— y en ese camino no hay captura, así que no habría ARTwin. Y el informe guarda solo un resumen de la captura, no los documentos. Quedaron las tres salidas escritas con su costo: aceptar el hueco, persistir la captura, o recapturar bajo demanda. La recomendación es aceptarlo para partir y persistir cuando el CustomerRoom necesite la vista previa.
Queda como P22, la primera pieza que no viene del catastro del
20-ago: no la encontró la auditoría, la hizo aparecer el modelo comercial.
Requerimiento completo —alcance, criterios de aceptación, riesgos y qué destraba—
en 05-Notas/req-artwin-en-el-analisis.md. Dos riesgos anotados que no son de
código: el volumen de guardar dos objetos por análisis con el Radar corriendo, y tener
dato inferido en reposo bajo el nombre de otra empresa, que conviene mirar contra la Ley 21.719
antes de que sea masivo.
Los recorridos se rehacen contra el modelo comercial
Los journeys se habían escrito antes de que Francisco cerrara el modelo, así que describían el sistema y no el recorrido del cliente. Tres cambiaron.
ARAIS pasa de 9 a 10 pasos: se sumó el 04, armar el borrador del ARTwin desde la misma captura, y entra en rojo. Esa sección decía «hasta acá está en producción, es la única etapa completa»; ya no lo es. Su único hueco es botar algo que ya está pagado.
ARTwin pasa de 11 a 15: se le insertó entera la adhesión —vista previa, revisar lo inferido, subir el archivo, verificar el dominio— más el paso 10, recalcularle el ARAIS, que es el que cierra la venta, y el 15, el cobro a los tres meses. Su corte se movió del 07 al 04: el problema ya no es que nadie sea dueño de lo publicado, es que el ARTwin se construye y nadie se lo muestra al dueño.
CustomerRoom pasa de 10 a 13, con el mismo tramo visto desde el cliente, y su corte baja del 06 al 05. La frase que queda es la que resume el estado del producto: le muestra al comercio su problema y le esconde el remedio que ya tenemos armado.
TalkRoom, TrxRoom y A2ARoom no se tocaron:
el modelo comercial no cambia lo que les falta, solo confirma que su tarifa sigue en
TBD.
El modelo comercial queda cerrado, y el ARTwin resulta ser un subproducto
Decidido por Francisco: el ARAIS es gratis siempre, el ARTwin gratis por 3 meses y después token, y la contraprestación del tramo gratis es que el comercio ponga algo en su sitio, «tras bambalinas, como el pixel de Meta o el tag de Google». Eso precisa AR-03, que hasta hoy decía «a cambio de acciones» sin que nadie supiera cuáles.
El hallazgo que cambia cómo se lee el modelo:
construirGemelo() es una función pura sobre la misma captura del ARAIS
—no necesita app, API ni credenciales—. Cada análisis gratis ya produce
todo lo necesario para armar el ARTwin, y hoy se desecha. Los tres meses gratis no cuestan
una construcción: cuestan dejar de botar lo que ya se hizo.
Y una advertencia con número: solo 13 de 237 sitios
—un 5%— tiene catálogo por API o feed. En el resto el precio sale de
heurística, así que publicar ARTwins gratis a escala sería publicar poco o
publicar inferido bajo el nombre de otro. publicable() ya lo impide, pero la
tensión comercial queda: el producto que se regala es justo el que menos dato verificado
tiene.
A quién conviene armarle uno, con números. De los 42 sitios con
puntaje bajo 35 —conjunto distinto de los 42 sin puntaje, sin un dominio en común—,
23 son legibles y solo declaran mal: el mejor caso comercial, número feo y
remedio en la misma pantalla. 16 tienen páginas que piden navegador
—pero L04 no es binario: mide cuántas páginas de cuántas, y
sobre 40% marca falla—, así que en realidad son 5 graves, a los
que corresponde diagnóstico y no ARTwin, y 11 leves con una o dos páginas
sueltas, a los que sí se les puede armar con menos cobertura. Y 3 se leen
perfecto pero están cerrados con noindex —Utaru, BEXER e Inmediatos,
los tres nuestros y los tres cerrados a propósito—: tienen contenido de sobra y
ningún asistente los va a encontrar mientras esa línea siga puesta.
Repone cae entre los leves, con 1 página de 8.
Ese cuadro se escribió mal dos veces, las dos por tratar como una sola cosa lo que el motor distingue: primero «ilegible» mezclando dos umbrales, después L04 leído como sí/no —lo que mandaba a diagnóstico a dieciséis cuando eran cinco, once conversaciones que sí se pueden tener—. Lo que lo destapó no fue volver a medir, sino discutir la palabra.
Recomendación técnica, aún no decidida: que la
«acción» sea un archivo en /.well-known/agentroom.json y
no un snippet de JavaScript —un agente no ejecuta JS, nuestro propio motor
tampoco, y L04 mide exactamente eso: pedir un pixel sería entregar un ARTwin
que nuestro producto declara invisible—. Se abrió además
AR-15: las Puertas A/B/C/D no están en la norma y ya aparecen en este
documento.
Cada bloque técnico muestra su recorrido y dónde se corta
Las seis secciones de Técnico tienen ahora una vista del recorrido completo, paso a paso, con el estado real de cada uno y una línea que marca dónde termina lo construido. En total 52 pasos, de los cuales funcionan 23.
Puestos uno al lado del otro, el producto se lee distinto: ARAIS 8 de 9 —la única etapa completa—, ARTwin 6 de 11, CustomerRoom 4 de 10, TalkRoom 3 de 8, TrxRoom 2 de 8 y A2ARoom 0 de 6. La escalera de la landing sugiere avance parejo; el recorrido muestra que lo construido se concentra en el tramo gratis y se desploma justo donde empieza el cobro.
Los cortes dicen más que los conteos. ARTwin publica bien pero nadie es dueño de lo publicado; TalkRoom responde sobre la oferta pero no sobre el cliente; TrxRoom sabe mostrar y no sabe comprometer; y CustomerRoom se entra a mirar, no a administrar —el paso 09, administrar hablando, es la tesis del producto y no existe—. Cuatro de los seis se cortan en el mismo punto: donde la relación dejaría de ser anónima.
Una excepción de la norma protegía algo que ya había pasado
La norma escrita esta mañana decía que el user-agent VadoBot/1.0
no se renombraba todavía, porque podía estar en listas de permitidos
de comercios. Al revisar el código apareció que ya estaba renombrado:
motor/guardas.ts manda AgentRoomBot/1.0 desde el 20-ago,
tres días antes de que la norma existiera. La excepción venía del hallazgo
H6 de la auditoría, que miró el commit inicial y quedó
congelada —el mismo problema de tomar una foto por un estado—.
Lo que queda no es una regla de nomenclatura sino una acción operativa.
Un WAF que tenía VadoBot en su regla de excepción ahora ve un bot
desconocido y le sirve una página de bloqueo. El síntoma calza exacto: en la
última corrida hubo 42 sitios de 385 ilegibles y ninguno fue
por robots.txt —los 42 son cascarón—. Y un sitio ilegible
no obtiene ARAIS, no uno más bajo: el techo es 6 puntos (o 1, si nos prohiben
en robots.txt) contra un mínimo publicable de 8. Es aritmética del motor,
no suerte de la corrida.
La ficha se escribió mal dos veces antes de quedar bien, y eso vale
anotarlo. Primero dijo que esos sitios tenían «un ARAIS calculado sobre menos
puntos», cuando no tienen ninguno. Después explicó el techo con un mecanismo que
no era el del código. Y sobre todo: los 42 son del Radar —sitios que
medimos sin que nadie lo pidiera—, así que no son clientes afectados
sino la medida del fenómeno. Quienes sí pidieron un análisis salen de
leads, y hoy hay uno. Confundir las dos listas habría llevado a
escribirle a cuarenta y dos organizaciones que nunca nos pidieron nada.
Lo que sí se pudo cerrar hoy: el user-agent declara
(+https://agentroom.io/bot) como página de identificación y esa dirección
daba 404. Un administrador que veía un bot desconocido en sus logs y seguía
el enlace no encontraba nada —el peor escenario posible para pedir que te dejen entrar—.
Ya existe: explica qué es, por qué aparece, cómo permitirlo o bloquearlo en
robots.txt, y avisa del cambio de VadoBot a AgentRoomBot.
Su primera versión decía que un sitio bloqueado «sale con menos puntos
evaluados» —el mismo error que esta bitácora acababa de corregir, esta vez de cara
al cliente—; ahora dice que no obtiene puntaje, con el rango real de uno a
seis puntos evaluables. Es además mejor argumento para pedir que actualicen su lista de
permitidos.
La otra mitad de la excepción sigue vigente: /apps/vado se
sirve tal cual y no se toca hasta el cutover, porque hay Puertas D desplegadas en dominios de
clientes apuntando ahí. La norma y la skill quedaron corregidas.
La landing también cerró: pricing.ts con
token junto, manager.ts hablando de CustomerRoom y
stages.ts con las cinco etapas pareadas —A2ARoom
incluida—, todo versionado. El único archivo sin commitear en el repo es
CLAUDE.md.
Un solo BBP en el dominio, y dónde termina la norma
AR-12 cerrado: agentroom.io/bbp hace ahora
308 a bbp.agentroom.io (commit bd35c5e). Deja de haber dos
BBP públicos en el dominio de la marca nueva, y el que llevaba el título
«Vado · BBP» ya no se alcanza desde ahí. El archivo no se borró: sigue
en public/bbp/ del repo, y el backlog del motor
B-01–B-30 se sigue consultando en
vado.junngla.com/bbp, que
es la fuente hasta el cutover (AR-08).
De paso quedó fijado un límite de la norma. Revisando ese documento apareció un título de bitácora que dice «Gemelo digital y publicación por Puertas C y D», con un término hoy deprecado. No se corrige, por dos razones que conviene tener escritas: es una entrada fechada —y las fotos fechadas no se tocan hacia atrás—, y sobre todo la nomenclatura de AgentRoom no rige sobre VADO, que hasta el cutover es un producto distinto con su propia marca y su propio vocabulario. La norma empieza el 23-ago y empieza acá.
El deploy publica el disco, no el commit — y por eso nadie veía lo mismo
AR-11 cerrado: agentroom.io/llms.txt dice
veintiséis puntos y trae el bloque de vocabulario. Commit 9b3c98e.
Lo que quedó en el camino vale más que la corrección. Dos
sesiones verificaron el mismo archivo en vivo y vieron cosas distintas —una
«dieciséis», otra «veintiséis»—, y no era caché:
vercel --prod despliega el working tree, no el HEAD de git, y
el repo vive en Dropbox compartido por varias sesiones. Cada deploy publica lo que haya en disco en
ese instante, incluidos los cambios sin commitear de otra sesión. El riesgo real resultó
ser el inverso del que parecía: no faltaba desplegar el archivo —ya estaba
publicado—, faltaba versionarlo, y un checkout limpio o un deploy
desde CI habría devuelto «dieciséis» a los asistentes sin que nadie lo
notara. Queda como AR-13: commitear antes de desplegar, y no dar por versionado lo
que se ve en producción. Se cierra solo con CI (P20).
La advertencia sobre public-scores.ts se cumplió dentro de la misma
hora. Una sesión editó el titular del Radar a mano y la siguiente corrida del
generador lo borró. Se recuperó en 6f9bd69 y se adoptó ese titular
—«Cómo se ve un continente entero en IA», que dice lo que hace la
sección sin usar la sigla—, ahora sí en la plantilla del generador, que es lo
único que sobrevive.
Precisión de crédito: el vocabulary del
agent-card.json no existía antes; se agregó hoy en 769c4ee,
junto con corregir un «veinticuatro puntos» que también arrastraba.
CustomerRoom deja de ser promesa, y el análisis muestra qué mide de verdad
P4 se construyó. /entrar y
/panel están en producción desde el 22-ago: acceso con un código de
cinco caracteres y el informe de los 26 puntos abierto capa por capa, con su evidencia. Google OAuth
está escrito y espera credencial. La pieza pasa de no existe a a medias: lo
que funciona es el tramo de mirar; el de administrar conversando
—que es la tesis del producto— sigue sin empezar. Vale anotar cómo pasó:
era la única de las 21 piezas sin fase asignada y se construyó igual,
antes que piezas priorizadas. El plan quedó atrás de la construcción, no al
revés.
Las Sondas ya tienen números, y uno de ellos obligó a una decisión. Sobre 70 dominios: S24 «te nombran» al 99%, S25 «citan tu sitio» al 89%, y la posición en la lista al 70%. La posición se informa pero dejó de puntuar: varía demasiado entre corridas y no es una propiedad del sitio sino del asistente que contestó. Sigue habiendo una sola credencial —Gemini—; los adaptadores de Perplexity, Claude, OpenAI y Grok están escritos y nunca se ejecutaron, así que S26 no se puede evaluar de verdad todavía.
Dos cosas de operación. src/data/public-scores.ts
se genera: el motor lo reescribe entero en cada corrida —cuatro esta
semana—, así que el copy del radar se cambia en la plantilla del generador y toda
edición manual se pierde. Y agentroom.io/bbp sigue sirviendo el BBP heredado,
titulado «Vado · BBP», en el dominio de la marca nueva
(AR-12).
La norma se instala donde los agentes la leen — y aparece una cifra falsa en producción
Para que la nomenclatura no dependa de que alguien se acuerde, quedó enganchada en tres
lugares: el CLAUDE.md del workspace —el único archivo que toda sesión
lee al arrancar—, una skill agentroom-nomenclatura cuyos disparadores incluyen los
términos deprecados (así salta cuando alguien está por escribir
un nombre viejo, no solo uno nuevo), y un @NOMENCLATURA.md en el
CLAUDE.md del repo que carga la norma entera al trabajar ahí.
Revisando la capa que mira al producto apareció algo peor que un nombre mal
puesto. agentroom.io/llms.txt —el archivo que existe para que los
asistentes de IA citen bien a AgentRoom— dice que el informe «analiza un sitio en
dieciséis puntos». Son 26. El producto que vende ser legible para
las IA les está entregando una cifra equivocada sobre sí mismo. Queda como
AR-11, por delante de la deuda de nomenclatura, y se corrige junto con declarar
ahí el vocabulario para que los agentes aprendan los nombres desde la fuente.
Se homologa el lenguaje: un nombre comercial y uno técnico
Cada etapa queda con dos nombres y ninguno más:
Ver · ARAIS, Existir · ARTwin,
Responder · TalkRoom, Operar · TrxRoom y
Colaborar · A2ARoom, más dos transversales:
CustomerRoom —el panel donde la organización administra su
agente, no el comprador— y token, token, la unidad de
cobro por uso. La regla de uso: en la web y los portales van los dos —el comercial en
titulares y botones, el técnico junto a él en la primera mención de cada
sección, para que el usuario se familiarice—; en código, API, MCP, IDs y
documentación técnica, solo el técnico.
La norma es un archivo, no un acuerdo verbal:
03-Documentos/NOMENCLATURA.md, con copia en el repo
(01-agentroom-web/NOMENCLATURA.md) y resumen en su CLAUDE.md. Trae la
tabla, las reglas de presentación, el glosario, la lista de deprecados y un
bloque de prompt listo para pegarle a cualquier sesión o persona que escriba código o
copy. Se dan de baja AgentRoom-AIScore, gemelo digital, «Agent Room
Manager» y token separado.
Dos cosas que aparecieron al fijarlo. La etapa 05 no tenía sección
propia: ahora existe A2ARoom, y al escribirla quedó a la vista que
ninguna de las 21 piezas del catastro le corresponde —las cuatro fases cubren
de Ver a Operar, y Colaborar parte de cero—. Y el renombre de gemelo a
ARTwin en el motor no se hace todavía: atraviesa el código
y hoy no hay cómo verificar que no rompió nada, así que espera a la red de
pruebas (P21). Queda en AR-10. Tampoco se toca
VadoBot/1.0 ni /apps/vado: hay comercios con ese agente en listas de
permitidos y Puertas D desplegadas en esa ruta.
El BBP se reordena por bloques del sistema
El documento pasa de cuatro grupos a cinco y deja de estar ordenado por cómo se fue construyendo para estarlo por de qué parte del sistema habla. Overview queda en una sola sección, siguiendo a la landing (entrada siguiente): Inicio reúne la oferta de valor, el problema, las tres industrias y la escalera de cinco etapas. Técnico se abre en siete: ARAIS, Gemelo, TalkRoom, TrxRoom, CustomerRoom, Arquitectura general y BacklogTI. Y el modelo de negocios sale a su propio grupo, Pricing, porque estaba escondido como subtítulo de Overview. Comercial y Gestión no se tocaron.
Lo que apareció al reordenar importa más que el orden. El BBP
decía 24 puntos en 3 capas cuando el motor ya va en v2.2.0 con
26 puntos en 4: se agregó Sondas
(S23–S26), que en vez de mirar el marcado le pregunta de verdad a un
asistente y mide si la organización aparece, y la numeración se corrió sin huecos
(L01–L06 · T07–T14 ·
R15–R22). Tampoco figuraba el radar de LatAm: 203
organizaciones medidas de 372 en veinte países, publicadas sin que nadie pague por aparecer ni
por salir. Las cifras viejas se corrigieron donde eran dato vivo y se dejaron intactas en la
auditoría y en esta bitácora, que son fotos fechadas.
Deuda que abre este cambio: los cinco nombres técnicos son de este
documento y de ninguna otra parte —en el código el puntaje es
AgentRoom-AIScore y el panel es Agent Room Manager; TalkRoom, TrxRoom y
CustomerRoom no existen en el repo ni en la landing—. Queda como AR-10, para
decidirlo antes de que lleguen a material comercial.
Una sola oferta de valor: se fusionan «Cómo funciona» y «Las cinco etapas»
En la landing vivían como dos secciones separadas —«Cómo
funciona» (los cuatro niveles por industria) y «Las cinco etapas» (Ver, Existir,
Responder, Operar, Colaborar)—, pero eran la misma escalera contada dos veces. No son dos
cosas: son la oferta de valor. Se fusionaron en una sola sección
(#how-it-works): las cinco etapas como la escalera, cada una con su nivel de precio
(Gratis / Gratis 3 meses / token), su estado real y sus ejemplos por industria, con la línea de
tarifa marcando dónde deja de ser gratis. Stages.tsx quedó como la sección
única y HowItWorks salió del Landing; el nav colapsó los dos
ítems en uno. Este BBP también unió sus dos secciones equivalentes.
Se abre el seguimiento comercial
Nuevo grupo Comercial con dos secciones: El embudo, que mapea los cuatro niveles del producto a etapas de venta, y Acciones, el registro de a quién se contactó, qué pasó y qué sigue. Parte en cero a propósito: no hay nada anterior documentado y no se va a rellenar hacia atrás.
Lo que obligó a escribir el embudo antes que el registro: hoy se puede entregar hasta el nivel 02 y no se puede cobrar el 03. No es precio pendiente de comunicar —no hay número (AR-02) y los servicios que justifican el nivel no están construidos (AR-04)—, así que el cero de ventas es estructural, no comercial. Quedaron fijadas cinco reglas RC-1–RC-5; la más dura es RC-3: no se cotiza el nivel 03 mientras la tarifa sea TBD, ni con un rango, porque un número dicho en una reunión queda de ancla aunque después se publique otro.
Backlog técnico: las 21 piezas salen del informe y entran al BBP
El catastro de piezas vivía solo en el informe de arquitectura, y el backlog de Gestión lo resumía en una línea (AR-06). Ahora tiene sección propia en Técnico, ordenada por las fases del plan y con la misma columna que el resto del backlog: por qué sigue ahí. La división quedó explícita —Gestión decide, Técnico construye— y se sumaron D-01–D-03 para la deuda de los hallazgos que no es una pieza de producto.
Dos cosas que aparecieron al ordenarlo. P4, el Agent Room Manager, no está en ninguna de las cuatro fases pese a estar anunciado en la landing: hay que ubicarlo o sacarlo del copy. Y la Fase 0 sigue diciendo «los 16 checks» porque se escribió el 20-ago, un día antes de que el análisis creciera a 24 puntos en 3 capas; el alcance real de P21 es 24. La auditoría no se toca —es una foto fechada—, la corrección va anotada en el backlog.
Cómo funciona, por industria; y el scan deja de repetir códigos
«Cómo funciona» ahora se elige por industria —Retail, Servicios,
Sistemas— y muestra el camino adaptado: el catálogo del nivel 02 y los ejemplos de 03 y 04
cambian según el rubro. El recorrido se reencuadró en cuatro niveles: 01 y 02
gratis (02 por 3 meses, con acciones de la empresa), y la tarifa en token desde el 03, cuando hay un
agente que responde por cada persona. La frontera del cobro se movió del 02 al 03 en la
línea de tarifa, en pricing.ts y en el panel; Stages y Tarifas ya calzaban.
Bug del análisis: las capas Transaccionabilidad y Resolución imprimían
los mismos códigos T09–T16, por una lógica vieja de cuando había dos
capas. Ahora el prefijo vive en los datos (scan.ts) y cada capa reinicia en 01:
L01–L09 · T01–T08 · R01–R08.
Tercera capa del análisis: de 16 a 24 puntos
Se agregó Resolución a las dos capas originales. Las dos primeras solo sabían preguntarle a una tienda: a un banco, un ministerio o una universidad les aplicaban cuatro puntos de dieciséis. El instrumento estaba mal, no los sitios. El análisis quedó en 24 puntos, 3 capas.
Dominio propio y redefinición del producto
agentroom.io pasó a ser la dirección; agentroom.junngla.com
redirige con 308 permanente sin apagarse. El producto se redefinió: no es solo para
tiendas —comercio, servicios, software e instituciones—, y el amarillo señal
pasó a vestir también el llamado principal.
Fusión con VADO
AgentRoom absorbió a VADO: un gemelo digital es un agente en AgentRoom. El
repo pasó a ser uno solo —landing, motor, funciones y CLI—, copiado del de VADO. Los
nueve handlers no se reescribieron: se adaptan con src/lib/handler-vercel.ts. Dos
tsconfig para validar web y motor por separado. La mudanza es por configuración
(motor/marca.ts), no por código. El repo original de VADO quedó intacto y sigue
sirviendo vado.junngla.com; el cutover es una decisión aparte (AR-01).
Ese mismo día se corrió SuperArqDev sobre el commit inicial: score 68/100 (SQALE C), 0% de cobertura de pruebas y el catastro de las 21 piezas que faltan con su plan por fases. Ver la auditoría As-Is/To-Be.
01-agentroom-web/CLAUDE.md
· historia del motor en vado.junngla.com/bbp