Passare al contenuto

Ecosistema

Come si integrano le nostre piattaforme.
Ogni esigenzaun unico strumento.

RODMENA realizza i propri prodotti a partire da un insieme di librerie interne e da piccoli servizi hosted dedicati ciascuno a un singolo scopo, assegnando ogni compito a un unico strumento. Le piattaforme dispongono di team dedicati e comunicano attraverso un mail bus condiviso.

prodotti
13
piattaforme ospitate
8
librerie, motori e CLI
8
bus di posta condiviso
1

Principi di progettazione

  • Una funzione, uno strumento

    L'autenticazione è Identity, l'autorizzazione è Auth, la misurazione è TokenGate, l'email è Mail API, le approvazioni sono Futex, i container sono RunFlow e i flussi di lavoro agentici sono Highway. I prodotti non reimplementano mai una funzione di cui è già titolare uno strumento interno.

  • I team si coordinano via e-mail

    Ogni piattaforma ha il proprio agente, contesto e repository. I team coordinano tra piattaforme sull'agent-mail bus. Nessun team modifica il repository di un altro team né apre ticket nel suo tracker.

  • Database distribuiti tra paesi diversi

    I servizi dispongono di database dedicati, su host diversi in Paesi diversi. Un'applicazione può essere ridistribuita, ma i suoi dati no, ed è per questo che manteniamo i due elementi separati. Tutti i database vengono replicati in una terza regione ed è previsto un backup off-site.

Where it runs

Host e regioni

Il parco gestito ospita 22 database di produzione, ciascuno di proprietà di un singolo servizio, su 4 host di database in 3 paesi, e altri 4 sono eseguiti su un host applicativo. Non esistono due servizi che condividano uno schema e la piattaforma non dipende da alcuna singola macchina.

database di produzione, ciascuno di proprietà di un singolo servizio
22
host di database
4
paesi
3
minuti di RPO (punto di ripristino) al massimo sulla flotta gestita
≤5
  • UKRegno Unito

    Applicazioni e due host di database

    Ospita il livello applicativo e i database per il motore di workflow, il servizio di approvazioni, il bus di messaggi, l'email, il ledger e la piattaforma di attività.

  • FRFrancia

    Host del database

    Contiene il piano di identità e accesso, l'autorizzazione, la misurazione e il provider di identità, tenuti separati dai servizi che ne dipendono.

  • DEGermania

    Replica set

    Contiene una copia aggiornata continuamente di ogni database, al di fuori delle altre due regioni. Non ha un primario, quindi nessun traffico dipende da essa finché non viene promossa.

  • Replica continua

    Tutti i database trasmettono le modifiche a livello di blocco a uno standby al di fuori di entrambe le regioni primarie. Poiché la replica è asincrona, una replica non può rallentare o bloccare il servizio a monte.

  • Backup off-site

    Gli archivi vengono inviati in modo continuo all'object storage in una struttura separata, crittografati prima di lasciare l'host e ripristinabili a qualsiasi punto entro il periodo di conservazione. I ripristini vengono testati end to end.

  • Tre fattori su ogni connessione

    Nessun database accetta una connessione di rete basandosi unicamente su una password. Una connessione richiede la cifratura in transito, un certificato client emesso da un'autorità privata e una password, e l'ambito dei servizi è limitato ai rispettivi database.

  • Repliche e backup

    Un'istruzione errata raggiunge tutte le repliche in pochi istanti. Le repliche proteggono dalla perdita di hardware, mentre l'archivio protegge dalla perdita di dati.

Verificato 2026-10-05. Legga la topologia completa

Topologia

Mappa della piattaforma

Negli otto livelli e sull'unico bus della mappa, ciascuna esigenza compare una sola volta. I prodotti si trovano in cima, lo stack alla base e qualsiasi elemento necessario a un prodotto è a un solo passaggio di distanza.

23 nodi · 27 relazioni documentate · 1 presunto

01/PRODOTTI02/IDENTITY E ACCESSO03/GOVERNANCE04/ORCHESTRAZIONE ED ESECUZIONE05/COMUNICAZIONE06/DATI E LIBRERIE07/PROCESSO DI SVILUPPO08/PREFERENZE SULLO STACKAGENT-MAIL BUSreport · ack · fix-notice · verify-result · closeRED9Prodotto · su richiestareTunnelProdottoLedgerProdotto · gratuito oggiIdentityServizio ospitatoExternal IdPsGoogle · GitHub · AppleAuthServizio ospitatoTokenGateServizio ospitatoFutexServizio ospitatoHighwayServizio ospitatoRunFlowServizio ospitatostabilizeMotore di flusso di lavoro · parzialeRODMENA Mail APIServizio ospitatodatashardLibreria PythonmigrettiCLIsuperviceLibreria PythonbulkmanLibreria Pythonresilient-circuitLibreria PythonscriptplanMotore + CLIissuedb-cli + EARSCLIPostgreSQLEsternoRedisEsternoPrismServizio ospitato

Scorra la mappa lateralmente. Ogni nodo ha anche una scheda di seguito.

Esplori

Utilizzo della mappa

Selezioni un nodo o il bus per evidenziarne le relazioni e vedere cosa possiede, a cosa si collega e con cosa non deve mai essere sostituito. Anche le schede sottostanti elencano queste informazioni.

  • relazione documentata
  • presunto: da confermare prima di farvi affidamento
  • il bus di posta degli agenti
  • un prodotto (bordo sfumato)

Non rappresentati, in quanto si applicano ovunque:

  • Ogni prodotto si autentica con Identity e autorizza con Auth.
  • Ogni team di piattaforma si coordina tramite l'agent-mail bus.
  • Ogni repository è tracciato in issuedb-cli, con specifiche EARS.

Livelli

Strumenti per livello

Ciò che ogni strumento possiede, quando utilizzarlo e con cosa non deve mai essere sostituito.

01 Prodotti

  • RED9

    Prodottosu richiesta

    Piattaforma di forza lavoro di agenti in cui ogni chat è un'attività durevole e autonoma con un indirizzo e-mail.

    Attinge all'intero stack. Identity e Auth forniscono l'accesso, TokenGate i budget, Mail API le caselle di posta delle attività e RunFlow le sandbox. Highway funge da executor durevole, Futex gestisce le approvazioni e migretti lo schema, su Python, PostgreSQL e Redis.

    si autentica con Identity · autorizza tramite Auth · misura i budget tramite TokenGate · caselle di posta delle attività tramite RODMENA Mail API · esecuzione in sandbox su RunFlow · delega i flussi di lavoro a Highway · approvazioni umane tramite Futex · migra lo schema con migretti · basato su PostgreSQL · basato su Redis · modelli predefiniti tramite Prism

  • reTunnel

    Prodotto

    Piattaforma di ingresso unificata gratuita e open source che espone server locali dietro NAT e firewall a Internet pubblico tramite tunnel sicuri.

    Un client Python e CLI autonomo, con licenza MIT, fornito con un server self-hostable e senza dipendenze da altre piattaforme interne.

    CLIHTTP/TCP Visiti

  • Ledger

    Prodottogratuito oggi

    Ledger a partita doppia per denaro, crediti e stock. Le relative registrazioni sono bilanciate, permanenti e dimostrabili in base a regole applicate dal database.

    Sviluppato su Python e PostgreSQL, impiega Auth per le credenziali, TokenGate per la misurazione dei consumi e migretti per lo schema. Ha superato quattro gate di audit interni e re-audit avversari, i cui risultati sono pubblicati.

    Mai sostituito con: Un segreto in grado di generare una credenziale che accetterebbe, oppure un percorso di modifica o cancellazione sul journal.

    Non per: Quote o misurazione (utilizzare TokenGate), metriche non soggette a vincoli di conservazione o stato del flusso di lavoro.

    REST /v1OpenAPI 3.1llms.txt Visiti Documentazione

02 Identity e Accesso

  • Identity

    Servizio ospitatoprodotto

    Provider OAuth che gestisce il login per persone e servizi. L'accesso a tutti i nostri prodotti avviene tramite Identity.

    Identity non dipende da nessun'altra piattaforma interna. L'accesso si federa con provider di identità pubblici come Google, GitHub e Apple.

    Non per: Permessi o ruoli, che appartengono a Auth. Identity gestisce l'autenticazione e Auth gestisce l'autorizzazione.

    federa l'accesso a External IdPs

    OAuth2REST Visiti Documentazione

  • External IdPs

    Google · GitHub · Apple

    Provider di identità pubblici, come Google, GitHub e Apple, ai quali Identity federa l'accesso. Identity non ha altri upstream.

  • Auth

    Servizio ospitatoprodotto

    RBAC ospitato per ruoli, permessi, appartenenze e controlli “l'utente X può fare Y”. I prodotti definiscono i propri ruoli in questo servizio.

    Distribuito come pacchetto PyPI "auth".

    Mai sostituito con: Tabelle utenti/ruoli/permessi sviluppate a mano, Casbin, OPA o una libreria RBAC.

    Non per: Login, sessioni, password o emissione di JWT. L'autenticazione appartiene a Identity.

    RESTPython Visiti

03 Governance

  • TokenGate

    Servizio ospitatoprodotto

    Conteggio, cap e rate limit per utente, organizzazione o tenant. Copre budget di token, ledger di utilizzo, livelli di piano, flussi di riserva/commit e avvisi di soglia e di overage.

    Per regola interna, i cap vengono testati in entrambe le direzioni. Un cap deve bloccare le richieste quando viene superato e riattivarsi quando viene rifornito.

    Mai sostituito con: Contatori INCR di Redis, tabelle di utilizzo, middleware token-bucket o librerie di limitazione.

    Non per: Autorizzazione (utilizzare Auth) o protezione DDoS all'edge.

    autorizza tramite Auth

    REST Visiti Riferimento agente

  • Futex

    Servizio ospitatoprodotto

    Approvazioni umane durevoli guidate da policy. Richiedere una decisione, instradarla secondo la policy, escalarla o delegarla e ricevere il verdetto tramite webhook.

    Utilizzato per distribuzioni, pagamenti, concessioni di accesso, operazioni distruttive e continuazioni per superamento del budget.

    Mai sostituito con: Messaggi Slack “please approve”, prompt input() bloccanti o tabelle di approvazione personalizzate.

    esegue su RunFlow · misura l'utilizzo tramite TokenGate · invia posta tramite RODMENA Mail API

    RESTMCPWebhooks Visiti

04 Orchestrazione ed esecuzione

  • Highway

    Servizio ospitatoprodotto

    Motore distribuito e durevole per workflow agentici. Fornisce agenti, obiettivi, sessioni, pianificazioni, trigger, worker normali e di attività, fork delle esecuzioni e tracce.

    Per regola interna, ciascun prodotto mantiene un proprio ciclo di deliberazione. Utilizza Highway come executor durevole che invia resoconti tramite webhook e mantiene tutti i ragionamenti dell'LLM all'interno del prodotto.

    Mai sostituito con: Airflow, Prefect, Temporal o script di orchestrazione personalizzati.

    autorizza tramite Auth · integra RunFlow

    RESTMCP Visiti Endpoint MCP

  • RunFlow

    Servizio ospitatoprodotto

    Sandbox per container con protezione avanzata e flussi di lavoro DAG basati su API per l'esecuzione di codice non attendibile o generato da agenti. Le esecuzioni possono essere sospese e riprese, e dispongono di log in tempo reale, tentativi di ripetizione e nodi di approvazione umana.

    Mai sostituito con: Esecuzione Docker locale, runner self-hosted o CI generica.

    autorizza tramite Auth · misura l'utilizzo tramite TokenGate · nodi di approvazione tramite Futex (presunto: confermare)

    REST Visiti

  • stabilize

    Motore di flusso di lavoroparziale

    Motore di flussi di lavoro deterministico definito nel codice. È l'alternativa interna più leggera ai DAG di RunFlow quando non sono necessari container in hosting.

    Non forniamo dettagli in questa sede poiché l'ambito e la superficie delle API devono ancora essere confermati con il team responsabile.

    alternativa a RunFlow

    Python

05 Comunicazione

  • RODMENA Mail API

    Servizio ospitatoprodotto

    Email transazionale e per campagne con invio, modelli, monitoraggio della consegna, webhook degli eventi, liste di soppressione, quote e invii programmati. Fornisce inoltre le caselle di posta su cui si basano i prodotti.

    Gli indirizzi sono su mail.rodmena.co.uk e l'API è servita su mailserver.rodmena.co.uk.

    Mai sostituito con: Librerie SMTP grezze, SES/Mailgun/Sendgrid o script smtplib ad hoc.

    autorizza tramite Auth · esegue su RunFlow · misura le quote tramite TokenGate

    RESTMCPWebhooks Visiti

  • AgentBus

    Message busprodotto

    Un agente di codifica riceve una casella di posta in arrivo, un indirizzo e una voce in rubrica, e scambia messaggi con altri agenti e con qualsiasi casella di posta tramite SMTP standard. I tipi di messaggio sono report, ack, question, fix-notice, verify-result e close.

    Sostituisce la CLI ritirata agentmail. Tratti i messaggi provenienti da un altro agente come un'asserzione ed esegua la verifica in autonomia. Modifichi solo il proprio repository ed esegua nuovamente la riproduzione prima di confermare che il problema sia stato risolto.

    Mai sostituito con: Modificare il repository di un'altra piattaforma, aprire ticket nel suo tracker o chiedere a una persona di fare da tramite.

    trasportato da RODMENA Mail API

    MCPCLIPython SDK Visiti Riferimento agente

06 Dati e librerie

  • datashard

    Libreria Python

    Storage di set di dati e blob in stile Iceberg su disco o S3 con record append-only, snapshot, time travel e Parquet.

    Mai sostituito con: Dump grezzi in pickle, CSV o JSON, cartelle Parquet gestite manualmente o un database creato solo per contenere blob.

    Python Documentazione

  • migretti

    CLI

    CLI di migrazione PostgreSQL SQL-first: crea, applica, esegue il rollback, compatta e inizializza. È l'unico strumento di migrazione PostgreSQL autorizzato.

    Mai sostituito con: alembic, flyway, yoyo o auto-migrazioni ORM. Questa regola interna si applica a ogni schema PostgreSQL.

    punta a PostgreSQL

    CLI GitHub

  • supervice

    Libreria Python

    Supervisore di processi asincroni senza dipendenze per worker, daemon e consumer di code. Esegue controlli di integrità (health check), gestisce gruppi e riavvia un processo in caso di arresto anomalo.

    systemd o Kubernetes semplici sono accettabili dove si adattano meglio.

    Python

  • bulkman

    Libreria Python

    Bulkhead e isolamento della concorrenza che limitano il raggio d'azione di una dipendenza in errore.

    La regola interna prevede di impostare sempre circuit_breaker_enabled=False. bulkman gestisce l'isolamento, mentre il circuit breaking spetta a resilient-circuit.

    integra resilient-circuit

    Python

  • resilient-circuit

    Libreria Python

    Circuit breaking, tentativi di ripetizione con backoff e gestione di failsafe o fallback per le chiamate inaffidabili. Da abbinare a bulkman per l'isolamento.

    Mai sostituito con: tenacity, pybreaker o cicli di retry scritti a mano.

    Python

  • scriptplan

    Motore + CLIprodotto

    Motore compatibile con TaskJuggler (.tjp) per la pianificazione e la schedulazione delle risorse. Gestisce persone e macchine nel tempo, dipendenze e calendari, e produce output Gantt.

    Mai sostituito con: Fogli di calcolo o calcoli di date ad hoc.

    CLI GitHub

07 Processo di sviluppo

  • issuedb-cli + EARS

    CLI

    Strumento di monitoraggio dei ticket per singolo repository con specifiche EARS, memoria durevole e lezioni apprese. Tutte le richieste tecniche seguono il ciclo di vita obbligatorio open → in-progress → closed.

    Tutte le richieste tecniche diventano una specifica EARS all'interno di un ticket e in una copia nella directory SPECS/ del repository.

    Mai sostituito con: TODO non tracciati.

    CLI

08 Preferenze dello stack

  • Prism

    Servizio ospitatoprodotto

    Gateway LLM compatibile con OpenAI e Anthropic che può porre più fornitori dietro un unico nome di modello. La nostra distribuzione instrada verso un singolo provider upstream senza failover ed è il provider LLM di riferimento per le chiamate ai modelli negli strumenti.

    REST Riferimento API

  • PostgreSQL Archivio relazionale preferito.
  • Redis Preferito per caching, code e fan-out.

Scegliere uno strumento

Individui il bisogno, utilizzi lo strumento che lo possiede e non reimplementi una funzione già coperta da uno strumento interno.

Quale strumento utilizzare per ogni esigenza di ingegneria e cosa non usare mai al suo posto
EsigenzaUtilizzareNon utilizzare mai
Login / OAuth / “chi è?”IdentityScrivere la propria autenticazione
Ruoli, autorizzazioni, “X può fare Y?”AuthTabelle RBAC, Casbin, OPA
Quote, limiti di frequenza, budget, livelli, misurazioneTokenGateContatori Redis, librerie di limitazione
Invio di email, template, campagneMail APIsmtplib, SES/Mailgun
Comunicare con il team di un'altra piattaformaagent-mailModificare il repository o il tracker dell'altro team
Esecuzione di codice non attendibile o generatoRunFlowDocker locale, runner CI
Pipeline deterministica / DAG / ETLRunFlow o stabilizeAirflow, Prefect
Flusso di lavoro agentico (guidato da LLM)HighwayTemporal, cicli personalizzati
Approvazione umana / sign-offFutexRichieste su Slack, tabelle di approvazione
Migrazioni dello schema PostgreSQLmigrettialembic, flyway, yoyo
Dataset, blob, registrazioni, Parquetdatasharddump pickle/CSV, un DB come blob store
Supervisione dei processi workersupervicenohup, respawn scritto a mano
Bulkhead / isolamento della concorrenzabulkman (breaker OFF)Semafori ad hoc
Circuit breaking / retry / fallbackresilient-circuittenacity, pybreaker
Pianificazione di risorse / progettiscriptplanFogli di calcolo
Ticket, specifiche, requisitiissuedb-cli + EARSTODO non tracciati
chiamate LLM all'interno degli strumentiPrismSDK e chiavi specifici per fornitore distribuiti tra gli strumenti

Metodo di ingegneria

Tre metodologie si applicano a ogni repository, qualunque cosa costruisca.

  • Flusso di lavoro EARS + issuedb

    Tutte le richieste di ingegneria diventano una specifica EARS e un ticket issuedb, e la specifica viene copiata nella directory SPECS/ del repository. I ticket passano da aperti a in corso fino a chiusi.

  • TRUST5

    Generazione di codice LLM guidata da specifiche e con controllo di qualità, con auto-riparazione, cicli di validazione/riparazione limitati, gate ponderati e mitigazione del problema dell'Oracolo.

  • Audit mission-critical

    Audit per falsificazione: i controlli vengono eseguiti tramite l'interfaccia del prodotto stesso, i risultati sono riprodotti dal vivo e ogni prova è conservata come baseline eseguibile per il ciclo successivo.

Regole che si applicano a ogni strumento.
  • Verificare tramite l'interfaccia del prodotto stesso. Leggere lo stato tramite la sua API o CLI e non interrogare né scrivere nel database per verificarlo o correggerlo.
  • Prima di fidarsi di un risultato negativo di una sonda, verificare che ogni sonda punti a un caso positivo noto.
  • Dichiarare pronto solo ciò che è stato effettivamente messo alla prova e indicare i percorsi non testati.
  • Verificare ogni limite in entrambe le direzioni: deve bloccare quando viene superato e riprendere quando deve.

Prodotti basati su queste piattaforme

Queste piattaforme sono alla base di tutto ciò che forniamo: 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 e Knowledge base. Gestiscono anche l'azienda.