venue_watch BLIND esce col titolo 🚨 'prelievo di prova' invece che come guasto delle referenze #31
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Revisione 2026-09-27 (goldrake): rilievo Opus 5.5, verifica avversariale fable. Sola lettura, nessun codice toccato.
Rilievo B7 [bug]
FILE: pg:scripts/live/venue_watch.py:27-36 + src/live/venue_watch.py:343-348
COSA: un BLIND di consenso (>=12h senza referenze concordi) esce con severity None e prende il titolo 🚨 «possibile stress su Deribit. PRIMO PASSO: prelievo di prova», e si RIPETE ogni ora (BLIND non ha marcatore).
SCENARIO: Kraken e Coinbase via ccxt irraggiungibili dalla VPS per 13h (o spread fra referenze > 100 bps) -> dalla 12a ora un 🚨 orario che chiede un prelievo di prova per un guasto delle referenze, non di Deribit. E' esattamente il difetto che il docstring di _titolo dice di aver chiuso il 19/08 (P9).
PROVA: VERIFICATO: lettura — _titolo ritorna ⚠️ solo se severity=="warn"; run_once imposta severity solo per ALERT/MAINT/RIENTRATO; step() ritorna BLIND a ogni ora >= BLIND_ALERT_HOURS.
grep -c "consenso NON misurabile" logs/cron_book.log-> 0 (mai accaduto: latente).PROPOSTA: severity "warn" per BLIND con titolo proprio («referenze non concordi, nessuna azione su Deribit»), e un marcatore blind_detto per dirlo una volta per episodio.
Verifica fable B7 VERDETTO: CONFERMATO-RIDIMENSIONATO
GRAVITA': medio (latente: 0 occorrenze nel log)
PERCHE':
src/live/venue_watch.py:343-346BLIND entra inreport["alerts"]conseverityche resta None (severity si imposta solo a 348, 359, 366, 369);scripts/live/venue_watch.py:35-36_titolo-> «🚨 ... PRIMO PASSO: prelievo di prova» per severity != "warn". Confermato il titolo sbagliato. RIDIMENSIONATO sulla ripetizione:venue_watch.py:324dichiara «Restano fuori BLIND (si ripete ogni ora da solo)» — e' una scelta documentata nel codice, non un difetto; il difetto e' che il 🚨 con prelievo esce per un guasto delle referenze.CORREZIONE: severity "warn" o meglio un terzo livello ("blind") con titolo proprio; il marcatore per episodio e' opzionale, e se si aggiunge va dichiarato nel docstring di run_once che oggi dice il contrario.
ANALISI (passo 1, Opus) — unita' U3, ramo lavoro/goldrake-u3, repo gitea:Adriano/PythagorasGoal
RIF: #26 (B1), #29 (B2, B8), #31 (B7), #35 (solo B3, B4)
FILE: scripts/live/usde_convert.py, scripts/live/usde_watch.py, scripts/live/fee_watch.py, src/live/venue_watch.py, scripts/live/venue_watch.py, tests/
a) funzione
cancella_residui(c) -> list[str]: legge gli ordini aperti sullo spot U.SPOT (USDE_USDC) e cancella SOLO quelli con label che inizia per "usde-quota-". Per sapere come chiedere gli ordini aperti di uno spot leggi (SOLA LETTURA) /opt/docker/cerbero-mcp/src/cerbero_mcp/exchanges/deribit/tools.py e client.py (get_open_orders: parametri accettati; cancel_order: {"order_id"}). Se la lettura fallisce -> solleva (non si ordina al buio).b) in main() con --esegui: chiamare cancella_residui PRIMA del ciclo (stampare quanti) e, nel ciclo, dopo ogni ordine con filled < amt cancellare quell'order_id (
c._post("/mcp-deribit/tools/cancel_order", {"order_id": ...})), registrarlo nel record (cancellato: true/errore). Se la cancel fallisce: stampa, registra e FERMA il ciclo (break) — mai un secondo ordine con un residuo vivo.c) il record finale e l'exit code non cambiano significato.
allertati= condizioni il cui invio e' riuscito;nuove = att_now - {c in att_prev se c in prev.get("allertati", att_prev)}— compatibilita': un record vecchio senzaallertativale come tutto allertato. fee_watch: save_state solo se l'invio (quando serviva) e' riuscito.TEST (tests/test_usde_u3.py ecc., client finto, nessuna rete, time.sleep patchato):
Suite completa:
cd <worktree> && /opt/docker/PythagorasGoal/.venv/bin/python -m pytest -q -p no:cacheprovider(baseline 1098 passed, 3 skipped).NON TOCCARE: src/live/usde.py (formula del cuscino: e' #28, altra unita'), cuscino_watch.py (salvo leggerlo), config/live.json, /opt/docker/cerbero-mcp (sola lettura), /opt/docker/PythagorasGoal. Nessuna rete, nessun ordine, nessun Telegram (notify va mockato nei test).
ESITO: fatto sul ramo, non in produzione
RIF: gitea:Adriano/PythagorasGoal#31
COSA: correzione su lavoro/goldrake (pushato), analisi Opus, codice Sonnet, controllo finale Opus
FILE: commit
5acc31ePROVA: /home/adriano/lavoro/PythagorasGoal pytest -q → 1166 passed, 3 skipped
MANCA: merge su main — richiede ok esplicito di Adriano (libro vivo). Chiusura con --soluzione dopo il merge.
PROSSIMO: ok di Adriano → merge lavoro/goldrake su main → git pull in /opt/docker/PythagorasGoal
Soluzione
venue_watch: severity 'blind' propria, titolo CIECO senza invito al prelievo.
COMMIT:
5acc31e, su main dal 27/09/2026 (merge con ok di Adriano). Produzione aggiornata.