Stream ingest → validatori de feature → persistență
↓
Event bus (PG LISTEN/NOTIFY)
↓
┌──────────────────┐
│ Decision daemon │ (config per tenant)
└────────┬─────────┘
↓
Acțiune validată
↓
Outcome feedback
↓
Training de model / tuning
Platforma transformă fluxuri brute de date printr-un pipeline deliberat etajat în decizii convergente. Fiecare etapă are o singură responsabilitate și emite durable events pentru următoarea.
Event bus. PostgreSQL LISTEN/NOTIFY transportă evenimente între daemoni. Evenimentele sunt persistate într-un tabel durable, nu doar broadcastate — consumatorii pot replay-a după reconectare de la un cursor.
Livrare at-least-once. Consumatorii confirmă evenimentele procesate. Evenimentele neconfirmate sunt livrate din nou după timeout. Idempotența este responsabilitatea consumatorului.
Replay cursor-tracked. Fiecare consumator își ține propriul cursor. După o fază de deconectare, continuă unde a rămas — nu se pierd evenimente, niciuna nu este procesată duplicat dincolo de semantica de retry configurată.
Izolarea tenanților este aplicată pe două niveluri:
Stored procedures. Toate operațiile pe partea tenantului trec prin stored procedures care impun ownership. Scrieri directe în tabele de către codul tenantului nu sunt permise.
Row-level security. Postgres RLS ca backstop dur. Chiar dacă logica de aplicație are un bug, RLS împiedică accesul cross-tenant la date.
Configurația per tenant include:
Chei și rate limits.
Kill switch. Override de operator pentru a dezactiva instantaneu un tenant fără redeploy.
Profil de risc. Parametri de prag per clasă de decizie.
Înainte de persistență. Evenimentele de stream care nu trec validarea sunt marcate, nu droppate tăcut. Operatorii le văd pe dashboard.
Înainte de training-ul modelului. Feature-urile pentru training sunt revalidate împotriva schemei. Drift-ul declanșează o alertă înainte ca modelele să fie reantrenate.
La runtime. Validatorii de feature rulează continuu cu auto-recovery DATAMISSING — când lipsește un feature așteptat, daemonul cade pe un default documentat și emite un eveniment structurat.
Circuit breakere per sursă de date — căderile degradează grațios în loc să se propage în cascadă.
Alerting prin e-mail și XMPP pentru evenimente relevante operatorului.
Default-uri universale config-driven. Maparea surselor de date, lanțurile de fallback, conversiile de unități, pragurile — toate în JSON. Fără magic numbers în cod.
Izolare de proces prin tmux + Devuan — daemonii pot fi restartați individual fără coordonare.
Nu este o platformă de autoscaling tip Kubernetes. Asta rulează pe un număr mic de mașini bine înțelese, cu plasare deliberată a daemonilor.
Nu este o soluție „pune și uită". Seturile de token-uri, versiunile de model, configurațiile de tenant și dashboard-urile au nevoie de atenție din partea operatorului.
Nu este generică. Platforma reflectă o clasă specifică de probleme decizionale de înaltă frecvență — adaptarea la un workload foarte diferit este serviciul de
Dezvoltare.