πŸ›° TRANSIT Error Intelligence Center ORCH-T111

Questo Γ¨ il cruscotto che intercetta quando e dove l'applicazione TRANSIT smette di fare quello che dovrebbe β€” eccezioni nei router Telegram, bug silenti sul flusso stateless, drop-off nei funnel di dispatch, salute del processo PYBOT. È pensato per darti dati oggettivi prima di intervenire: non patching al buio su segnalazione utente, ma un ranking di nodi critici che ti dice "parti da qui". La Phase 1 mostra il runtime del processo (giΓ  LIVE). La Phase 2 aggiunge il tracking strutturato delle eccezioni: quelle sezioni sono marcate in viola.

Errori 24h
In preparazione
Richiede exception wrapper
Health PYBOT
β€”
Caricamento...
Rate Errori/h
In preparazione
Counter OTel Phase 2
Top Exception
In preparazione
Da traces_raw
PYBOT Version
v1.2.1-observability
OTel dual-layer LIVE

🎯 Dove intervenire β€” Nodi critici ordinati per error rate

Questo Γ¨ il tile che trasforma la telemetry da "osservazione" a azione di patching. Quando popolato (Phase 2), ogni riga corrisponde a un handler/router/RPC con il suo tasso di errore nelle ultime 24h, l'eccezione piΓΉ frequente, e una suggestion basata sul pattern rilevato. L'ordinamento Γ¨ per rank di criticitΓ : dal piΓΉ rotto al piΓΉ stabile.

# Handler / Nodo Error rate 24h Top exception Suggestion
⏳ Phase 2 β€” Popolamento dipende da exception wrapper sui router TRANSIT (webhook.py / slash_router / photo_router) e da tabella telemetry.logs_raw. Ranking pianificato: query SQL finestra 24h su exception counter aggregato per handler.
πŸ’“ Runtime PYBOT Live β€” 4 metriche OTel

Le metriche runtime che PYBOT sta giΓ  emettendo dal pilota OTel (ORCH-T111 Phase 1). Sono indicatori di salute del processo: se il worker Γ¨ vivo, quanta memoria sta usando, se l'event-loop Γ¨ reattivo, se il pool di connessioni Supabase Γ¨ saturo. Non raccontano ancora cosa sta sbagliando a livello applicativo β€” quello Γ¨ il lavoro della Phase 2.

Caricamento metriche...
🎚 Feature Flag Status

Flag attivi su PYBOT che cambiano il comportamento del codice TRANSIT. Osservarne l'error-rate relativo Γ¨ cruciale per decidere rollback.

TRANSIT_STATELESS_ENABLED TRUE
Branch stateless attivo (ORCH-T041 Phase 1). Error-rate comparison vs legacy β†’ Phase 2.
TRANSIT_RPC_GATEWAY_ENABLED TRUE
SupabaseGateway singleton attivo (ORCH-T050). Contract validation β†’ errori RPCValidationError emergenti.
PYBOT_VERSION v1.2.1-observability
πŸ”₯ Top Exception Classes PHASE 2

Tabella delle eccezioni piΓΉ frequenti nelle ultime 24h, aggregate per classe Python (es. RPCValidationError, KeyError, asyncio.TimeoutError). Ogni riga avrΓ  il conteggio, l'ultimo timestamp, l'handler in cui Γ¨ stata catturata, e il link al trace diagnostico. Serve per capire quale tipo di bug sta pesando β€” un KeyError su photo_router significa che un field attendo non arriva piΓΉ, un TimeoutError su SupabaseGateway significa che il direct endpoint Γ¨ lento o saturo.

Exception class Count 24h Ultima vista Handler Azione
⏳ Phase 2 β€” Dati emessi da span.record_exception() + counter transit_handler_errors_total{handler, exception_class}. Aggregazione via RPC telemetry_top_exceptions_24h().
🧭 COMPASS Integration Preview

COMPASS Γ¨ l'observatory di ecosistema (compass.macvspc.cloud). Oggi raccoglie eventi a posteriori: incidenti chiusi, workaround registrati, segnali calcolati dal T1 engine. Con Telemetry Phase 2 in piedi, alimenteremo COMPASS con segnali real-time oggettivi: error-rate di ogni handler, health del processo PYBOT, drop-off dei funnel TRANSIT. Il passaggio Γ¨ da narrative by incident a observation continua con prediction.

I quattro signal nuovi che proporremo nel design ORCH-T112 per COMPASS: S_TRANSIT_ERROR_SPIKE (error rate > 3/min per 5min), S_PYBOT_HEARTBEAT_MISS (nessuna metrica runtime per 3min), S_FLAG_DIVERGENCE (error rate branch stateless diverge > 50% vs legacy), S_FUNNEL_DROPOFF (completamento flusso sotto 85%).

🧭 Apri COMPASS Observatory β†’

πŸ“– Cos'Γ¨ Telemetry e perchΓ© l'abbiamo costruita

Telemetry, detto in una riga, Γ¨ l'insieme degli strumenti che intercettano cosa fa il codice in produzione, in tempo reale, senza fermarlo. Non Γ¨ un tool, Γ¨ un livello dell'infrastruttura: una pipeline che parte dall'applicazione (PYBOT su VIPER), passa da un collector (OTel Collector), atterra su un backend di storage (Supabase schema telemetry), e viene visualizzata da strumenti come Grafana o questa pagina stessa.

Nel contesto GEKO l'abbiamo costruita con un obiettivo specifico: smettere di osservare TRANSIT solo quando qualcosa si Γ¨ giΓ  rotto. Prima β€” e in parte ancora oggi β€” la conoscenza dei problemi arrivava "per incidente": un autista segnalava un comando che non rispondeva, tu aprivi i log del container in SSH, grep-pavi a mano, e nel 60% dei casi i log erano giΓ  stati ruotati. L'informazione dopo l'evento non basta piΓΉ, perchΓ© TRANSIT Γ¨ sul sentiero per diventare un prodotto verticale vendibile, e un prodotto vendibile deve avere osservabilitΓ  industriale, non artigianale.

πŸ” Come si legge un errore con Telemetry Phase 2

La sequenza operativa che stiamo costruendo Γ¨ questa. Un autista ti scrive "il briefing ZTL non Γ¨ arrivato". Tu apri questa pagina. Prima cosa: guardi il KPI Errori 24h β€” se Γ¨ salito rispetto a ieri, c'Γ¨ qualcosa di nuovo. Seconda cosa: il tile Top Exception Classes: ti dice quale tipo di errore sta dominando. Terza cosa: Dove intervenire ti ranka gli handler dal piΓΉ rotto al piΓΉ stabile. A quel punto sai giΓ , con molta probabilitΓ , su quale file di codice mettere le mani. Se serve il dettaglio puntuale dell'evento specifico dell'autista, chiedi il trace_id (che la Phase 2 propagherΓ  nei messaggi di fallback) e con quello apri Grafana Explore β†’ filtro su traces_raw WHERE trace_id = 'abc123' β†’ vedi l'intera timeline della richiesta: ingresso webhook, span del router, eccezione con stack trace, output finale. Quello che oggi richiede 20 minuti di grep su log di container diventa 10 secondi di query.

🧬 Il vocabolario minimo

Metrica β€” un numero che aggreghi nel tempo. Esempi: worker_memory_mb=144, errors_total=37. Basso costo, perfetto per dashboard e alerting, ma perde informazione: un counter di 37 errori non ti dice cosa sono.

Traccia (span) β€” il racconto di una singola richiesta attraverso il codice. Ingresso β†’ funzioni chiamate β†’ eccezioni β†’ uscita. Porta molto contesto (parametri, exception class, stack trace) ma costa di piΓΉ: non la aggreghi, la peschi on-demand con il trace_id.

Log β€” evento narrativo strutturato con livello (ERROR/WARN/INFO) e messaggio. La Phase 2 li correla automaticamente al trace_id della richiesta che li ha generati. Senza questo link, i log restano isola.

La regola d'oro del debug con Telemetry: parti dal counter (cosa sta aumentando?), scendi al trace (cosa Γ¨ successo in quella richiesta?), leggi i log correlati (qual Γ¨ il contesto narrativo?), quindi patcha il codice. Non al contrario.

🏷 CardinalitΓ  β€” perchΓ© non basta "logga tutto"

Ogni label su una metrica moltiplica lo storage. Se metti user_id come label, con 50 autisti già moltiplichi per 50 ogni conteggio. Se metti trace_id esplodi. Per questo il nostro design separa le label basso-cardinality (handler, exception_class, user_role) che vanno sulle metriche aggregate, dalle dimensioni alto-cardinality (trace_id, message_id, driver_code) che vanno su traces e logs come attributi per la ricerca puntuale. È una scelta architetturale: il costo di storage di Supabase cresce linearmente con le righe, e la tabella metrics_raw oggi colleziona già ~119 campioni all'ora solo con le 4 metriche runtime.

πŸ—Ί Roadmap Phase 2 β€” TRANSIT Product-Grade Observability ORCH-T112 CANDIDATE

Ecco i 6 pilastri che trasformano questa pagina da "skeleton didattico" a "cruscotto operativo pieno". Ordine di attacco proposto: logs prima (serve per diagnosi), exception wrapper (quick-win 1 giornata), poi alerting + COMPASS signals, poi dashboard actionable, poi documentazione vendible. Governance: TRIO-GATED (4/6 criteri Triage TRUE).

P1

Logs pipeline β€” schema telemetry.logs_raw + ingest /v1/logs

Schema minimale (ts, service, level, message, exception_class, stack_trace, trace_id, span_id, labels). FastAPI endpoint. OTel LoggingHandler su PYBOT. Retention policy 7/14/30 giorni per INFO/WARN/ERROR. Effort ~2 giornate.

P2

Exception wrapper β€” span.record_exception() sui router TRANSIT

Wrapper di 15 righe su webhook.py, handlers/slash_router.py, handlers/photo_router.py. Counter transit_handler_errors_total{handler, exception_class, user_role}. Deploy PYBOT via Codex CLI su VIPER. Quick-win indipendente dalla pipeline logs.

P3

Alerting β€” 3 regole Grafana β†’ Telegram topic 5

(a) Error rate > 3/min per 5min, (b) Missing heartbeat PYBOT > 3min, (c) Exception class critica singola (RPCValidationError, AssertionError) al primo hit. Webhook Grafana β†’ bot admin.

P4

COMPASS integration β€” 4 signal nuovi + advisory notes

S_TRANSIT_ERROR_SPIKE, S_PYBOT_HEARTBEAT_MISS, S_FLAG_DIVERGENCE, S_FUNNEL_DROPOFF. Advisory prompt template che legge il trend e produce narrative note leggibili.

P5

Actionable dashboard β€” "Dove intervenire" real-time

RPC telemetry_critical_nodes_24h() SECURITY DEFINER che ritorna top-N handler per error-rate con suggestion basata su pattern. Popolazione automatica tile principale di questa pagina + link diretto al file sorgente sul workspace.

P6

Vendible product docs β€” runbook, SLA, data model

Documentazione orientata a TRANSIT come prodotto: SLO/SLA proposte (error budget), schema dati pubblico, runbook per onboarding tenant, disclosure GDPR su traces/logs. Deliverable per il percorso "TRANSIT vendibile".