# TUTOR REPORT — Trading Engine Mavis

> **Data**: 2026-07-18 16:25 Europe/Rome
> **Autore**: Mavis (project supervisor / tutore)
> **Status**: REPORT INIZIALE dopo lettura Charter + indagine stato live
> **Destinatari**: Mattia (decision maker), Solver (fix), Verifier (audit)
> **Regola base Mattia (rinfrescata 18/07 16:15)**:
> *"ogni ordine indipendente dalla strategia che l'ha generato dovrà essere in Bybit di 1500 USDT ca."*
> = **margin fisso 500 USDT × leva 3x Charter = nozionale 1500 USDT** per **OGNI** ordine live.

---

## 🔴 CRITICITÀ IMMEDIATE (violazioni attive nel sistema)

### CRIT-1 — **orders.log 18/07 13:50:43 — ordine BTCUSDT 64 USDT nozionale**
```
orderId=37c2f271-5ae4-4d7e-b4d7-1536d19f1437 BTCUSDT buy qty=0.001 price=64007.3
notional=64.0073 strategy=vptr3
```
- **Nozionale 64 USDT** (margin ~21 USDT con leva 3x)
- **VIOLA** regola Mattia "500 margin / 1500 nozionale" — **30x troppo piccolo**
- È un test (qty 0.001 BTC è un importo da smoke-test, non da trade live)
- **Azione**: verificare se ordine di test ancora aperto su Bybit. Se sì, **CHIUDERE**.

### CRIT-2 — **orders.log 18/07 08:00:12 — AEROUSDT 1547 USDT nozionale**
```
orderId=34ecc44b-689e-4b63-b880-d07d2b40ee92 AEROUSDT buy qty=3296.0 price=0.4695
notional=1547.472 strategy=vptr3
```
- Nozionale 1547 → margin **~516 USDT** (sfora di 16 USDT il cap 500)
- **BORDERLINE** rispetto regola Mattia
- Charter `charter_config.py:AERO_4H.margin_usdt=250` autorizza margin 250 → **DOVREBBE essere ~750 nozionale, non 1547**
- **VIOLA** contemporaneamente Charter E regola Mattia
- **Azione**: verificare se l'ordine è ancora aperto. Se sì, **RIPORTARE A 250 margin Charter** (o decidere se la regola Mattia 500 margin è retroattiva).

### CRIT-3 — **CHARTER.md del sub-repo mavis dice "Leverage 1x Charter target"**
- File: `GIT_REPOS\trading-engine-mavis\CHARTER.md`, sezione "Compliance MEMORY Mattia"
- Testo: `✅ Leverage 1x Charter target (impostato via set_leverage PRIMA di create_market_order, paletti P004 + P011)`
- **VIOLA paletto P004** (Leva Charter = 3x per TUTTI gli asset, sempre)
- **BUG DOCUMENTALE GRAVE** — potrebbe fuorviare Solver/Verifier
- **Azione**: correggere CHARTER.md (1x → 3x). Mattia: serve OK?

### CRIT-4 — **charter_config.py:SETUPS AERO_4H/DASH_4H margin=250, non 500**
- `charter_core\charter_config.py`:
  - ZEC_4H: margin 500 ✓
  - AERO_4H: margin **250** ❌ (Mattia oggi: "ogni ordine = 500 fisso")
  - DASH_4H: margin **250** ❌ (Mattia oggi: "ogni ordine = 500 fisso")
- **VIOLA regola Mattia 18/07 16:15**
- **Azione**: portare AERO_4H e DASH_4H a margin 500. Decisione policy (retroattiva? nuovi ordini?).

### CRIT-5 — **Incoerenza semantica 500/1500 tra webhook_config e rettangolo_config**
- `webhook_config.py:MANIFESTO_ORDER_VALUE_USD = 500.0` → commento "USD margin massimo" (= 1500 nozionale)
- `rettangolo_config.py:ORDER_VALUE_USD = 1500.0` → commento "nozionale massimo" (= 500 margin)
- **Stesso numero (500) ha SIGNIFICATI DIVERSI** nei 2 file
- È una **trappola cognitiva** per qualsiasi agente che modifichi uno dei due file
- **Azione**: rinominare `MANIFESTO_ORDER_VALUE_USD` → `MANIFESTO_MARGIN_USD` (è margin, non order value). Stessa cosa per rettangolo se serve.

---

## 🟡 WARNING / ERRATE CORRIGE (non bloccanti ma da correggere)

### WARN-1 — `square_monitor.py` + riga `square` in rettangolo_assets.csv NON documentati
- File: `live_deploy\square_monitor.py` (PID 22144, 17/07 08:14, CPU 245s) — attivo
- `rettangolo_assets.csv` riga: `SOLUSDT,30m,true,square,test 2026-07-17`
- **NON** menzionato in `charter_core` (paletti, SETUPS, CHARTER)
- **NON** menzionato in `STRATEGY_RULES.md`
- **NON** menzionato in `CHARTER.md` sub-repo mavis
- È un **flusso terzo** (Rettangolo + VPTR3 + Square) che gira in live senza essere Charter
- **Azione**: o Square viene integrato nel Charter (paletto, sizing, SL/TP documentati), o viene rimosso dal live.

### WARN-2 — `mavis_supervisor_3.py` (PID 256) non documentato in Charter
- File: `live_deploy\mavis_supervisor_3.py` (PID 256, 17/07 07:23, CPU 22366s = 6.2 ore)
- **NON** menzionato in `charter_core` né in `CHARTER.md`
- 6.2 ore di CPU in 35 ore di uptime = ~18% medio — sta facendo polling o calcolo pesante
- **Azione**: documentare a cosa serve, o archiviare se è un residuo.

### WARN-3 — `email_notifier` module mancante
- Log: `Email notification failed (non blocca): No module named 'email_notifier'`
- **Azione**: aggiungere modulo o disabilitare la notifica esplicitamente.

### WARN-4 — Rettangolo runner attivo DUE istanze contemporaneamente
- `rettangolo_monitor.py` (PID 11716, 18/07 14:32)
- `rettangolo_runner.py` (PID 25780, 17/07 22:39)
- **Possibile** race condition o doppio invio ordini su stesso symbol
- **Azione**: verificare se uno dei due è morto e va killato, o se sono effettivamente due processi con compiti diversi.

### WARN-5 — orders.log: 6 ordini "audit_test" BTCUSDT 60 USDT il 17/07 18:54
- 6 buy BTCUSDT qty=0.001 price=60000 notional=60 strategy=audit_test in 1 secondo
- Sono test, non trade. **OK**, ma sono rimasti nel log orders.log che dovrebbe contenere solo trade reali.

### WARN-6 — STRATEGY_RULES.md nota di lavori pendenti su Rettangolo
- Riga in fondo: *"serve cambio semantico: MARGIN_USD=500 e max_qty = (MARGIN_USD * LEVERAGE) / price. **Da fare separatamente.**"*
- Il cambio **PARZIALMENTE fatto** (ORDER_VALUE_USD ora 1500 = nozionale), ma:
  - Nome variabile ancora `ORDER_VALUE_USD` (semantica confusa)
  - Commenti non aggiornati in tutti i call site
- **Azione**: completare rinomina + aggiornare STRATEGY_RULES.md (togliere "Da fare separatamente" → "Fatto, vedi commit XYZ").

---

## ✅ STATO SISTEMA (sanity check)

| Componente | Stato | Note |
|---|---|---|
| `webhook_receiver.py` | ✅ UP dal 15:50 | Restart risolve bug `place_order` AttributeError |
| `sltp_engine.py` | ✅ UP | Loop 300s |
| `rettangolo_monitor.py` | ✅ UP | + `rettangolo_runner.py` (WARN-4) |
| `mavis_supervisor_3.py` | ✅ UP ma non documentato (WARN-2) | |
| Charter core | ✅ v1.1.0 | 14 paletti definiti |
| Backup `webhook_receiver.py.bak_20260718-120900` | ✅ INTATTO | NON toccare |
| `orders.log` | ⚠️ contiene test | Pulizia consigliata |

---

## 📋 TASK ASSEGNATI DAL TUTORE (in attesa di OK Mattia)

Nessuna azione eseguita. Di seguito le **proposte** che richiedono OK Mattia:

1. **CRIT-3**: correggere `CHARTER.md` sub-repo mavis (1x → 3x)
2. **CRIT-4**: portare AERO_4H/DASH_4H margin 250 → 500 in `charter_config.py` (richiede decisione policy: retroattiva? nuovi ordini?)
3. **CRIT-1/2**: verifica stato posizioni su Bybit (sono ancora aperte AERO 1547 e BTC 64?) + eventuale chiusura/riallineamento
4. **CRIT-5**: rinominare `MANIFESTO_ORDER_VALUE_USD` → `MANIFESTO_MARGIN_USD` in `webhook_config.py`
5. **WARN-1**: decidere il destino di Square (integrare Charter o rimuovere)
6. **WARN-2**: documentare `mavis_supervisor_3.py` o archiviare
7. **WARN-3**: aggiungere `email_notifier` o disabilitare esplicitamente
8. **WARN-4**: verificare duplicazione Rettangolo runner

---

## 📜 POLICY REGISTRATA (da MEMORY project)

Regola Mattia 2026-07-18 16:15 (da scrivere in `charter_core\paletti.py` come paletto P015):

> **P015-FIXED_MARGIN_500_3X**:
> Ogni ordine live su Bybit demo, indipendentemente dalla strategia
> che lo ha generato, deve avere **margin fisso 500 USDT × leva 3x Charter
> = nozionale 1500 USDT** (`qty * price ≈ 1500`). Deroga al Charter SETUPS
> specifico (AERO/DASH storicamente 250): la regola P015 è RETROATTIVA
> dal 2026-07-18 16:15 salvo decisione diversa di Mattia.

**Attendo conferma Mattia** prima di:
- Aggiungere P015 a `charter_core\paletti.py`
- Propagare 500 margin a tutti i SETUPS Charter
- Aggiornare CHARTER.md e STRATEGY_RULES.md

---

**Fine report iniziale.** Prossimo step: aspetto OK/decisioni Mattia su CRIT-1..5 + WARN-1..6.
