docs(diary): chiusura incidente testnet — flatten + orfani risolti, reconciler OK

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Adriano Dal Pastro
2026-06-12 13:04:56 +00:00
parent 1a0b601fab
commit 6f294e3889
@@ -72,3 +72,37 @@ hourly_report girano da host → già attivi). cerbero-mcp rebuildato (endpoint)
invariante "il conto cambia solo per nostri ordini" è affidabile. Il reconciler invariante "il conto cambia solo per nostri ordini" è affidabile. Il reconciler
orario è l'unico rilevatore; valutare cadenza più fitta in presenza di orario è l'unico rilevatore; valutare cadenza più fitta in presenza di
posizioni reali aperte. posizioni reali aperte.
## Addendum (pomeriggio, v1.1.28): orfani single-leg + circuit-breaker venue-lock
I due punti promossi dall'analisi sviluppi, entrambi figli dell'incidente di oggi:
1. **Orfani anche per i close single-leg.** `REAL_CLOSE_PARTIAL` ora registra la
quota residua in `StrategyWorker.orphan_legs` (stessa semantica dei pairs,
persistita in status.json, letta da `books.real_books`) → il reconciler vede
il drift come SPIEGATO invece che anomalo (il caso MR07 0.102 ETH delle 09:47
restava invisibile ai libri). Inoltre `_close_position` ora persiste lo stato
a fine booking (prima solo al save del tick: un crash li' in mezzo perdeva
capital e orfano). NB: nessun save a meta' chiusura — con `real_in_position`
ancora true l'orfano conterebbe doppio nei libri.
2. **Circuit-breaker venue-lock in `ExecutionClient`.** Dopo `lock_trip=3` reject
'locked' consecutivi (es. `locked_by_admin` di oggi) le APERTURE sono sospese
senza toccare l'API (Fill failed → path REAL_OPEN_FAIL/sim_fallback esistente;
per i pairs entrambe le gambe rifiutate localmente → niente leg parziali da
unwindare, niente fee sprecate). Le CHIUSURE si tentano SEMPRE (path gia'
sicuro: partial/orphan/netting) e un loro reject 'locked' rinfresca il
cooldown. Riarmo: dopo `lock_cooldown_s=900` la prossima apertura fa da probe.
Alert `VENUE_LOCK` al trip + RIENTRATO al primo ordine accettato.
Test: `test_single_leg_orphan.py`, `test_venue_lock_breaker.py` (126 passed).
## Chiusura incidente (13:05): testnet sbloccato, conto riallineato
Sequenza eseguita a venue sbloccato: stop runner → `reset_flatten` (chiusi i due
artefatti del rollback: ETH long 0.141 @1664.25, SOL long 0.7 @66.651, conto FLAT)
→ svuotati gli `orphan_legs` di ETH_SOL (le quote orfane non esistono piu' sul
conto post-flatten; edit a container fermo, altrimenti il worker li riscrive
dalla memoria) → restart. **Reconciler: OK — conto allineato ai libri** (posizioni
e resting), runner healthy, log puliti. Il ledger NON e' stato toccato: i booking
dell'incidente erano gia' dichiarati (`sim_fallback`/real) e l'equity (€2020.82)
resta la verita' contabile del paper.