Cómo encajan nuestras plataformas. Cada cometido/una herramienta.
RODMENA desarrolla sus productos a partir de un conjunto de librerías internas y de pequeños servicios alojados con un único propósito cada uno, y asigna cada aspecto a una sola herramienta. Las plataformas cuentan con sus propios equipos y se comunican a través de un bus de correo compartido.
productos
13
plataformas alojadas
8
bibliotecas, motores y CLI
8
bus de correo compartido
1
Principios de diseño
Un cometido, una herramienta
La autenticación es Identity, la autorización es Auth, la medición es TokenGate, el correo electrónico es Mail API, las aprobaciones son Futex, los contenedores son RunFlow y los flujos de trabajo agénticos son Highway. Los productos nunca reimplementan un cometido que ya posee una herramienta interna.
Los equipos se coordinan por correo
Cada plataforma tiene su propio agente, contexto y repositorio. Los equipos se coordinan entre plataformas a través del bus de correo de agentes. Ningún equipo edita el repositorio de otro equipo ni abre tickets en su gestor.
Bases de datos distribuidas por países
Los servicios cuentan con sus propias bases de datos, en diferentes hosts y en diferentes países. Una aplicación se puede volver a desplegar, pero sus datos no, y mantenemos ambos elementos separados. Todas las bases de datos se replican en una tercera región y se realizan copias de seguridad de las mismas fuera de las instalaciones.
/ Where it runs
Hosts y regiones
El parque gestionado alberga 22 bases de datos de producción, cada una propiedad de un servicio, en 4 hosts de bases de datos repartidos en 3 países, y 4 más se ejecutan en un host de aplicaciones. No hay dos servicios que compartan un esquema, y la plataforma no depende de ninguna máquina individual.
bases de datos de producción, cada una propiedad de un único servicio
22
hosts de base de datos
4
países
3
minutos de punto de recuperación como máximo en la flota gestionada
≤5
UKReino Unido
Aplicaciones y dos hosts de base de datos
Aloja el nivel de aplicación y las bases de datos del motor de flujos de trabajo, el servicio de aprobaciones, el bus de mensajes, el correo electrónico, el libro mayor y la plataforma de tareas.
FRFrancia
Host de base de datos
Contiene el plano de identidad y acceso, la autorización, la medición y el proveedor de identidad, mantenidos aparte de los servicios que dependen de él.
DEAlemania
Conjunto de réplicas
Contiene una copia actualizada continuamente de cada base de datos, fuera de las otras dos regiones. No aloja ninguna base de datos primaria, por lo que ningún tráfico depende de ella hasta que se promueva.
Replicación continua
Todas las bases de datos transmiten cambios a nivel de bloque a una instancia en espera fuera de ambas regiones principales. Dado que la replicación es asíncrona, una réplica no puede ralentizar ni bloquear el servicio que tiene delante.
Copias de seguridad externas
Los archivos de copia de seguridad se envían de forma continua a un almacenamiento de objetos en una instalación separada, se cifran antes de salir del host y se pueden recuperar a cualquier punto dentro del periodo de retención. Las restauraciones se prueban de extremo a extremo.
Tres factores en cada conexión
Ninguna base de datos acepta una conexión de red solo con una contraseña. Una conexión requiere cifrado en tránsito, un certificado de cliente emitido por una entidad emisora privada y una contraseña, y el alcance de los servicios está restringido a sus propias bases de datos.
Réplicas y copias de seguridad
Una instrucción errónea llega a todas las réplicas en cuestión de instantes. Las réplicas protegen contra la pérdida de hardware, y el archivo protege contra la pérdida de datos.
En las ocho capas y el bus único del mapa, un ámbito de interés aparece una sola vez. Los productos se sitúan en la parte superior, el stack en la inferior y todo lo que necesita un producto está a un solo salto de distancia.
Desplace el mapa horizontalmente. Cada nodo también tiene una tarjeta debajo.
Explorar
Uso del mapa
Seleccione un nodo o el bus para destacar sus relaciones y ver qué posee, con qué se conecta y por qué no debe sustituirse nunca. Las tarjetas que figuran a continuación también enumeran estos datos.
relación documentada
supuesto: confírmelo antes de basarse en él
el bus de correo de agentes
un producto (borde degradado)
No se representan, ya que se aplican en todas partes:
Todos los productos autentican con Identity y autorizan con Auth.
Todos los equipos de plataforma se coordinan a través del bus de correo de agentes.
Cada repositorio se registra en issuedb-cli, con especificaciones EARS.
Productoa petición
RED9
11 salientes
Plataforma de equipos de agentes en la que cada chat es una tarea autónoma y duradera con una dirección de correo electrónico.
Aprovecha todo el stack. Identity y Auth proporcionan acceso, TokenGate presupuestos, buzones de tareas de Mail API y RunFlow entornos aislados (sandboxes). Highway es el ejecutor duradero, Futex gestiona las aprobaciones y migretti el esquema, sobre Python, PostgreSQL y Redis.
Plataforma de entrada unificada, gratuita y de código abierto que expone servidores locales situados detrás de NAT y cortafuegos a Internet mediante túneles seguros.
Un cliente de Python independiente y CLI, con licencia MIT, que incluye un servidor autohospedable y no depende de ninguna otra plataforma propia.
Ledger de partida doble para dinero, créditos y existencias. Sus asientos están cuadriculados, son permanentes y demostrables conforme a las reglas que aplica la base de datos.
Desarrollado en Python y PostgreSQL, utiliza Auth para credenciales, TokenGate para medición y migretti para el esquema. Superó cuatro controles de auditoría interna y reauditorías adversarias, cuyos resultados están publicados.
Nunca se sustituye por: Un secreto que puede emitir una credencial que aceptaría, o una vía para editar o eliminar asientos del diario.
No indicado para: Cuotas o medición (utilice TokenGate), métricas no conservadas o estado del flujo de trabajo.
Proveedor de OAuth que gestiona el inicio de sesión para personas y servicios. El acceso a todos nuestros productos se realiza a través de Identity.
Identity no depende de ninguna otra plataforma interna. El inicio de sesión se federa con proveedores de identidad públicos como Google, GitHub y Apple.
No indicado para: Permisos o roles, que pertenecen a Auth. Identity gestiona la autenticación y Auth gestiona la autorización.
Proveedores de identidad públicos, como Google, GitHub y Apple, con los que Identity federa el inicio de sesión. Identity no depende de ningún otro servicio.
Recuento, límites máximos y límites de frecuencia por usuario, organización o tenant. Cubre presupuestos de tokens, registros de uso, niveles de planes, flujos de reserva/confirmación (commit), y alertas de umbrales y excesos.
Por norma interna, los límites máximos se prueban en ambas direcciones. Un límite debe bloquear cuando se supera y reanudarse cuando se repone.
Nunca se sustituye por: Contadores INCR de Redis, tablas de uso, middleware de token-bucket o bibliotecas de limitación.
No indicado para: Autorización (use Auth) o protección DDoS en el perímetro de red.
Aprobaciones humanas duraderas impulsadas por políticas. Solicite una decisión, enrútela según la política, escálela o deléguela, y reciba el veredicto mediante webhook.
Se utiliza para despliegues, pagos, concesiones de acceso, operaciones destructivas y continuaciones por exceso de presupuesto.
Nunca se sustituye por: Mensajes de Slack de «por favor, apruebe», prompts bloqueantes de input() o tablas de aprobación a medida.
Motor distribuido y duradero para flujos de trabajo basados en agentes. Proporciona agentes, objetivos, sesiones, programaciones, activadores, actividad y workers estándar, bifurcación de ejecuciones y trazas.
Por norma interna, cada producto mantiene su propio bucle de deliberación. Utiliza Highway como ejecutor duradero que envía notificaciones mediante webhook y mantiene todo el razonamiento del LLM dentro del producto.
Nunca se sustituye por: Airflow, Prefect, Temporal o scripts de orquestación personalizados.
Sandbox de contenedores reforzado y flujos de trabajo DAG basados en API para ejecutar código no fiable o generado por agentes. Las ejecuciones se pueden pausar y reanudar, y disponen de registros en tiempo real, reintentos y nodos de aprobación humana.
Nunca se sustituye por: Ejecución local de Docker, ejecutores autoalojados o CI genérica.
Motor de flujos de trabajo determinista definido en código. Es la alternativa propia más ligera a los DAG de RunFlow cuando no se necesitan contenedores alojados.
No facilitamos detalles aquí porque el alcance y la superficie de la API aún están pendientes de confirmación con el equipo responsable.
Correo electrónico transaccional y de campaña con envío, plantillas, seguimiento de entregas, webhooks de eventos, listas de supresión, cuotas y envíos programados. También aprovisiona los buzones sobre los que se construyen los productos.
Las direcciones están en mail.rodmena.co.uk y la API se sirve en mailserver.rodmena.co.uk.
Nunca se sustituye por: Bibliotecas SMTP de bajo nivel, SES/Mailgun/Sendgrid o scripts smtplib ad hoc.
Un agente de programación obtiene una bandeja de entrada, una dirección y una entrada en la libreta de direcciones, e intercambia mensajes con otros agentes y con cualquier buzón a través de SMTP estándar. Los tipos de mensaje son report, ack, question, fix-notice, verify-result y close.
Sustituye a la CLI retirada agentmail. Considere un mensaje de otro agente como una afirmación y ejecute la comprobación usted mismo. Modifique únicamente su propio repositorio y vuelva a ejecutar su reproducción antes de aceptar que algo se ha solucionado.
Nunca se sustituye por: Editar el repositorio de otra plataforma, abrir tickets en su gestor de incidencias o pedir a una persona que haga de intermediaria.
Almacenamiento de blobs y conjuntos de datos tipo Iceberg en disco o S3 con registros de solo anexión, instantáneas, time travel y Parquet.
Nunca se sustituye por: Volcados de pickle, CSV o JSON en bruto, carpetas Parquet gestionadas manualmente o una base de datos configurada únicamente para almacenar blobs.
CLI de migraciones de PostgreSQL centrada en SQL: crear, aplicar, revertir, consolidar (squash) y cargar datos iniciales (seed). Es la única herramienta de migración de PostgreSQL autorizada.
Nunca se sustituye por: alembic, flyway, yoyo o migraciones automáticas del ORM. Esta regla interna se aplica a cada esquema de PostgreSQL.
Supervisor de procesos asíncronos sin dependencias para workers, daemons y consumidores de colas. Ejecuta comprobaciones de estado, gestiona grupos y reinicia un proceso cuando falla.
systemd o Kubernetes sin más son aceptables cuando encajan mejor.
Python
Biblioteca de Python
bulkman
1 salientes
Bulkheads y aislamiento de concurrencia que limitan el radio de impacto de una dependencia que falla.
La norma interna es establecer siempre circuit_breaker_enabled=False. bulkman gestiona el aislamiento, y la interrupción de circuito corresponde a resilient-circuit.
Motor compatible con TaskJuggler (.tjp) para la planificación y programación de recursos. Gestiona personas y máquinas a lo largo del tiempo, dependencias y calendarios, y genera resultados en diagrama de Gantt.
Nunca se sustituye por: Hojas de cálculo o cálculos de fechas ad hoc.
Seguimiento de tickets por repositorio con especificaciones EARS, memoria duradera y lecciones aprendidas. Todas las solicitudes de ingeniería siguen el ciclo de vida obligatorio abierto → en curso → cerrado.
Todas las solicitudes de ingeniería se convierten en una especificación EARS en un ticket y en una copia dentro del directorio SPECS/ del repositorio.
Pasarela LLM compatible con OpenAI y Anthropic que puede situar a varios proveedores bajo un mismo nombre de modelo. Nuestro despliegue enruta a un único proveedor de origen, sin conmutación por error, y es el proveedor LLM interno para las llamadas a modelos en las herramientas.
Qué posee cada herramienta, cuándo utilizarla y con qué no debe sustituirse nunca.
01/ Productos
RED9
Productoa petición
Plataforma de equipos de agentes en la que cada chat es una tarea autónoma y duradera con una dirección de correo electrónico.
Aprovecha todo el stack. Identity y Auth proporcionan acceso, TokenGate presupuestos, buzones de tareas de Mail API y RunFlow entornos aislados (sandboxes). Highway es el ejecutor duradero, Futex gestiona las aprobaciones y migretti el esquema, sobre Python, PostgreSQL y Redis.
se autentica con Identity · autoriza mediante Auth · mide los presupuestos mediante TokenGate · buzones de tareas mediante RODMENA Mail API · ejecución en entorno aislado en RunFlow · delega flujos de trabajo en Highway · aprobaciones humanas mediante Futex · migra el esquema con migretti · construido sobre PostgreSQL · construido sobre Redis · modelos predeterminados mediante Prism
reTunnel
Producto
Plataforma de entrada unificada, gratuita y de código abierto que expone servidores locales situados detrás de NAT y cortafuegos a Internet mediante túneles seguros.
Un cliente de Python independiente y CLI, con licencia MIT, que incluye un servidor autohospedable y no depende de ninguna otra plataforma propia.
Ledger de partida doble para dinero, créditos y existencias. Sus asientos están cuadriculados, son permanentes y demostrables conforme a las reglas que aplica la base de datos.
Desarrollado en Python y PostgreSQL, utiliza Auth para credenciales, TokenGate para medición y migretti para el esquema. Superó cuatro controles de auditoría interna y reauditorías adversarias, cuyos resultados están publicados.
Nunca se sustituye por: Un secreto que puede emitir una credencial que aceptaría, o una vía para editar o eliminar asientos del diario.
No indicado para: Cuotas o medición (utilice TokenGate), métricas no conservadas o estado del flujo de trabajo.
Proveedor de OAuth que gestiona el inicio de sesión para personas y servicios. El acceso a todos nuestros productos se realiza a través de Identity.
Identity no depende de ninguna otra plataforma interna. El inicio de sesión se federa con proveedores de identidad públicos como Google, GitHub y Apple.
No indicado para: Permisos o roles, que pertenecen a Auth. Identity gestiona la autenticación y Auth gestiona la autorización.
Proveedores de identidad públicos, como Google, GitHub y Apple, con los que Identity federa el inicio de sesión. Identity no depende de ningún otro servicio.
Auth
Servicio alojadoproducto
RBAC alojado para roles, permisos, pertenencias y comprobaciones de «¿puede el usuario X hacer Y?». Los productos definen sus roles en este servicio.
Se distribuye como el paquete de PyPI «auth».
Nunca se sustituye por: Tablas de usuarios/roles/permisos creadas a mano, Casbin, OPA o una biblioteca RBAC.
No indicado para: Inicio de sesión, sesiones, contraseñas o emisión de JWT. La autenticación corresponde a Identity.
Recuento, límites máximos y límites de frecuencia por usuario, organización o tenant. Cubre presupuestos de tokens, registros de uso, niveles de planes, flujos de reserva/confirmación (commit), y alertas de umbrales y excesos.
Por norma interna, los límites máximos se prueban en ambas direcciones. Un límite debe bloquear cuando se supera y reanudarse cuando se repone.
Nunca se sustituye por: Contadores INCR de Redis, tablas de uso, middleware de token-bucket o bibliotecas de limitación.
No indicado para: Autorización (use Auth) o protección DDoS en el perímetro de red.
Aprobaciones humanas duraderas impulsadas por políticas. Solicite una decisión, enrútela según la política, escálela o deléguela, y reciba el veredicto mediante webhook.
Se utiliza para despliegues, pagos, concesiones de acceso, operaciones destructivas y continuaciones por exceso de presupuesto.
Nunca se sustituye por: Mensajes de Slack de «por favor, apruebe», prompts bloqueantes de input() o tablas de aprobación a medida.
se ejecuta en RunFlow · mide el uso mediante TokenGate · envía correo mediante RODMENA Mail API
Motor distribuido y duradero para flujos de trabajo basados en agentes. Proporciona agentes, objetivos, sesiones, programaciones, activadores, actividad y workers estándar, bifurcación de ejecuciones y trazas.
Por norma interna, cada producto mantiene su propio bucle de deliberación. Utiliza Highway como ejecutor duradero que envía notificaciones mediante webhook y mantiene todo el razonamiento del LLM dentro del producto.
Nunca se sustituye por: Airflow, Prefect, Temporal o scripts de orquestación personalizados.
Sandbox de contenedores reforzado y flujos de trabajo DAG basados en API para ejecutar código no fiable o generado por agentes. Las ejecuciones se pueden pausar y reanudar, y disponen de registros en tiempo real, reintentos y nodos de aprobación humana.
Nunca se sustituye por: Ejecución local de Docker, ejecutores autoalojados o CI genérica.
autoriza mediante Auth · mide el uso mediante TokenGate · nodos de aprobación mediante Futex (asumido: confirmar)
Motor de flujos de trabajo determinista definido en código. Es la alternativa propia más ligera a los DAG de RunFlow cuando no se necesitan contenedores alojados.
No facilitamos detalles aquí porque el alcance y la superficie de la API aún están pendientes de confirmación con el equipo responsable.
alternativa a RunFlow
Python
05/ Comunicación
RODMENA Mail API
Servicio alojadoproducto
Correo electrónico transaccional y de campaña con envío, plantillas, seguimiento de entregas, webhooks de eventos, listas de supresión, cuotas y envíos programados. También aprovisiona los buzones sobre los que se construyen los productos.
Las direcciones están en mail.rodmena.co.uk y la API se sirve en mailserver.rodmena.co.uk.
Nunca se sustituye por: Bibliotecas SMTP de bajo nivel, SES/Mailgun/Sendgrid o scripts smtplib ad hoc.
autoriza mediante Auth · se ejecuta en RunFlow · mide las cuotas mediante TokenGate
Un agente de programación obtiene una bandeja de entrada, una dirección y una entrada en la libreta de direcciones, e intercambia mensajes con otros agentes y con cualquier buzón a través de SMTP estándar. Los tipos de mensaje son report, ack, question, fix-notice, verify-result y close.
Sustituye a la CLI retirada agentmail. Considere un mensaje de otro agente como una afirmación y ejecute la comprobación usted mismo. Modifique únicamente su propio repositorio y vuelva a ejecutar su reproducción antes de aceptar que algo se ha solucionado.
Nunca se sustituye por: Editar el repositorio de otra plataforma, abrir tickets en su gestor de incidencias o pedir a una persona que haga de intermediaria.
Almacenamiento de blobs y conjuntos de datos tipo Iceberg en disco o S3 con registros de solo anexión, instantáneas, time travel y Parquet.
Nunca se sustituye por: Volcados de pickle, CSV o JSON en bruto, carpetas Parquet gestionadas manualmente o una base de datos configurada únicamente para almacenar blobs.
CLI de migraciones de PostgreSQL centrada en SQL: crear, aplicar, revertir, consolidar (squash) y cargar datos iniciales (seed). Es la única herramienta de migración de PostgreSQL autorizada.
Nunca se sustituye por: alembic, flyway, yoyo o migraciones automáticas del ORM. Esta regla interna se aplica a cada esquema de PostgreSQL.
Supervisor de procesos asíncronos sin dependencias para workers, daemons y consumidores de colas. Ejecuta comprobaciones de estado, gestiona grupos y reinicia un proceso cuando falla.
systemd o Kubernetes sin más son aceptables cuando encajan mejor.
Python
bulkman
Biblioteca de Python
Bulkheads y aislamiento de concurrencia que limitan el radio de impacto de una dependencia que falla.
La norma interna es establecer siempre circuit_breaker_enabled=False. bulkman gestiona el aislamiento, y la interrupción de circuito corresponde a resilient-circuit.
complementa resilient-circuit
Python
resilient-circuit
Biblioteca de Python
Circuit breaking, reintentos con backoff y gestión failsafe o fallback en llamadas no fiables. Combínelo con bulkman para aislamiento.
Nunca se sustituye por: tenacity, pybreaker o bucles de reintento creados a medida.
Python
scriptplan
Motor + CLIproducto
Motor compatible con TaskJuggler (.tjp) para la planificación y programación de recursos. Gestiona personas y máquinas a lo largo del tiempo, dependencias y calendarios, y genera resultados en diagrama de Gantt.
Nunca se sustituye por: Hojas de cálculo o cálculos de fechas ad hoc.
Seguimiento de tickets por repositorio con especificaciones EARS, memoria duradera y lecciones aprendidas. Todas las solicitudes de ingeniería siguen el ciclo de vida obligatorio abierto → en curso → cerrado.
Todas las solicitudes de ingeniería se convierten en una especificación EARS en un ticket y en una copia dentro del directorio SPECS/ del repositorio.
Nunca se sustituye por: TODOs sin seguimiento.
CLI
08/ Preferencias de stack
Prism
Servicio alojadoproducto
Pasarela LLM compatible con OpenAI y Anthropic que puede situar a varios proveedores bajo un mismo nombre de modelo. Nuestro despliegue enruta a un único proveedor de origen, sin conmutación por error, y es el proveedor LLM interno para las llamadas a modelos en las herramientas.
Nombre la necesidad, utilice la herramienta que la cubre y no vuelva a implementar un cometido que ya cubre una herramienta propia.
Qué herramienta utilizar para cada necesidad de ingeniería y qué no utilizar nunca en su lugar
Necesidad
Utilizar
No utilizar nunca
Inicio de sesión / OAuth / «¿quién es?»
Identity
Escribir su propia autenticación
Roles, permisos, «¿puede X hacer Y?»
Auth
Tablas RBAC, Casbin, OPA
Cuotas, límites de frecuencia, presupuestos, niveles, medición
TokenGate
Contadores de Redis, bibliotecas de limitadores
Envío de correo electrónico, plantillas, campañas
Mail API
smtplib, SES/Mailgun
Hablar con el equipo de otra plataforma
agent-mail
Editar su repositorio o su sistema de seguimiento
Ejecución de código no confiable o generado
RunFlow
Docker local, ejecutores de CI
Canalización determinista / DAG / ETL
RunFlow o stabilize
Airflow, Prefect
Flujo de trabajo agéntico (impulsado por LLM)
Highway
Temporal, bucles personalizados
Aprobación / validación humana
Futex
Peticiones por Slack, tablas de aprobación
Migraciones de esquema de PostgreSQL
migretti
alembic, flyway, yoyo
Conjuntos de datos, blobs, grabaciones, Parquet
datashard
volcados de pickle/CSV, una base de datos como almacén de blobs
Supervisión de los procesos de trabajo
supervice
nohup, relanzamiento escrito a mano
Compartimentos estancos (bulkheads) / aislamiento de concurrencia
bulkman (disyuntor desactivado)
Semáforos ad hoc
Corte de circuito / reintentos / alternativa de respaldo
resilient-circuit
tenacity, pybreaker
Programación de recursos y proyectos
scriptplan
Hojas de cálculo
Tickets, especificaciones, requisitos
issuedb-cli + EARS
TODOs no rastreados
Llamadas a LLM dentro de las herramientas
Prism
SDK y claves por proveedor repartidos entre distintas herramientas
Método de ingeniería
Tres metodologías se aplican a todos los repositorios, independientemente de lo que construyan.
Flujo de trabajo de EARS + issuedb
Todas las solicitudes de ingeniería se convierten en una especificación EARS y en un ticket de issuedb, y la especificación se copia en el directorio SPECS/ del repositorio. Los tickets pasan de abiertos («open») a en curso («in progress») y a cerrados («closed»).
TRUST5
Generación de código por LLM basada en especificaciones y con control de calidad, con autocorrección, bucles acotados de validación/reparación, puertas de calidad ponderadas y mitigación del problema del oráculo.
Auditoría de sistemas críticos
Auditoría por falsación: las comprobaciones se ejecutan a través de la propia interfaz del producto, los hallazgos se reproducen en directo y cada sonda se conserva como línea base ejecutable para la siguiente ronda.
Reglas que se aplican a todas las herramientas.
Verifique a través de la propia interfaz del producto. Lea el estado a través de su API o CLI, y no consulte ni escriba en la base de datos para comprobarlo o corregirlo.
Apunte cada sonda a un caso positivo conocido antes de fiarse de un resultado negativo que dé.
Declare que algo está listo solo si se ha probado, y nombre las rutas no probadas.
Pruebe cada límite en ambos sentidos: debe bloquear cuando se supere y dejar que el trabajo se reanude cuando corresponda.
Productos construidos sobre estas plataformas
Estas plataformas están detrás de todo lo que entregamos: Highway, MailApi, RunFlow, Futex, reTunnel, Ledger, RODMENA L10n, TokenGate, AgentBus, RODMENA ID, Auth, Prism, pdfapi, Container Registry, RODMENA CI, Uptime.Systems, Trust5, RED9, Graphviz Provider, Steward, Tollgate, Haven, RODMENA LRS, RODMENA cmi5, Vellum, supervice, datashard, ScriptPlan, Stabilize, Trace, Provenance y Knowledge base. La empresa también funciona con ellas.