sei sorveglianti senza registro dei giri: fuori da monitor_health #16
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?
COSA: sei sorveglianti non lasciano traccia dei giri, quindi
monitor_healthnon puo' vederli morire. E' il difetto che ha tenuto mortocc01_regime_watch14 notti (#10, riparato con #12 aggiungendodata/cc01_regime/runs.jsonl).FILE: scripts/live/edge_watch.py, fee_watch.py, scale_watch.py, vrp_f_watch.py, venue_news.py (cron_daily 00:30), venue_watch.py (cron_book :47); src/live/monitor_health.py
MONITORS.Peso:
edge_watchregge il kill del libro;fee_watchla decisione §3 «allerta da solo»;scale_watchil criterio A2 di SCALA-01;vrp_f_watchi criteri §5.18;venue_watchil tripwire di venue orario;venue_newsil debito 8.PROVA:
logs/cron_*.log: zero traceback dal 17/09 in 9 log; ultimi traceback di cron_daily = cc01 (03-16/09) e rebuild_history (07-15/07).data/fee_watch/state.jsonedata/vrp_f_watch/state.jsonscritti 2026-09-21 00:39,data/venue_watch/state.json07:47.edge_watchnon scrive nessun file; in--quiettace se non scatta. Un suo guasto si vedrebbe solo come traceback nel log.Origine:
docs/revisioni/2026-09-21.mdpunto 1 e proposta 2.ANALISI (passo 1, Opus) — goldrake, sessione autorizzata da Adriano 2026-09-21 08:21Z; presa scritta qui perche'
issue prendirifiuta il repo. Ramo lavoro/goldrake, clone ~/lavoro/PythagorasGoal.FILE:
registra_giro(path: Path, **campi) -> boolappende{"ts": <ms epoch int>, **campi}come riga jsonl, crea la cartella; su OSError scrive una riga su stderr e ritorna False. Non solleva mai: un registro che fallisce non deve cambiare l'esito del sorvegliante.RUNS = ROOT/"data"/<dir>/"runs.jsonl"e UNA chiamata dopo una misura completata. Niente riga se la misura non c'e' (P5: «non vedo» non e' un giro).run()→ diredge_watch, campi sharpe, n_alert.save_state→ dirfee_watch, campo level.run_once→ dirscale_watch, campo stato._save_state, solo seRnon e' vuoto → dirvrp_f_watch, campi pairs, ready.venue_news, campi voci, nuove. Feed illeggibile (return 2): nessuna riga.run_onceecheck_specs→ dirvenue_watch, campo livelli.MONITORS: sei MonitorSpec,open_labeled=False; giornalieri cadence 24.0, max_age_h 30.0; venue_watch cadence 1.0, max_age_h 3.0;gate= la decisione che reggono (kill del libro; §3 fee; SCALA-01 A2; §5.18; tripwire venue; debito 8).TEST:
RUNSdel modulo (come tests/test_cc01_regime_watch.py per cc01).Primo giro dopo il deploy: cron_daily lancia i cinque giornalieri PRIMA di monitor_health → stato NUOVO, che non allerta (
alerts_from). venue_watch accumula dal :47.NON TOCCARE: logica di misura, soglie, notifiche dei sorveglianti; scripts/cron_*.sh; config/live.json; src/live/book.py; cc01_regime_watch.
PORTING: tutti i file toccati sono identici in TradingBook (cmp 2026-09-21): stessa patch la'.
Soluzione
ESITO: fatto
/runs.jsonl dopo una misura completata; src/live/monitor_health.py sei MonitorSpec (30h giornalieri, 3h venue_watch); .gitignore; tests/test_giri.py, tests/test_watch_runs.py. CommitFILE: src/live/giri.py (registra_giro, mai un'eccezione); edge_watch, fee_watch, scale_watch, vrp_f_watch, venue_news, venue_watch scrivono data/
1a7f670, portato in TradingBook 03808ca.PROVA: suite 1098 passed; produzione dal 2026-09-21 08:48:42Z; check_all in produzione: i sei ASSENTE come atteso fino al primo giro. venue_watch scrive dal giro delle 09:47; i cinque giornalieri il 2026-09-22 00:3x, prima di monitor_health (stato NUOVO, non allerta).
PROSSIMO: 2026-09-22 dopo le 00:41Z controllare che monitor_health mostri i sei (NUOVO/OK), non ASSENTE.