Pipeline Stufe E: Slot-Trennung und Attribut-Reihenfolge (tools/check_slots.py)
User: "Uebernehme die Logikpruefung auf allen Slots in die Deployment pipeline" -
nach dem Ausfall, bei dem der Serverstart komplett abbrach und zwei Minuten lang
kein Close moeglich war.
ZWEI FEHLERKLASSEN, beide binnen zwei Tagen real aufgetreten, beide von KEINER
bestehenden Stufe gefangen (py_compile, ruff F821, ty, pytest: alle gruen):
(A) ATTRIBUT VOR SEINER ZUWEISUNG. `self.trader_brk.history = self.history`
stand in `__init__` VOR `self.trader_brk = TradeManager(...)`.
AttributeError im Konstruktor -> Serverstart brach ab -> "Netzwerkfehler" am
Close-Knopf. Syntaktisch korrekt, und kein Test instanziiert die Engine (sie
braucht MT5). Gefunden hat es erst deploy.py Schritt 2 - also NACH dem Kill
des laufenden Servers. Derselbe Fehler am Vortag mit `_margin_brk` vor
`_load_runtime_state()`, dort sogar still.
Die Pruefung sammelt je `self.X` die ZEILE der ersten Zuweisung und meldet
jede Benutzung davor.
(B) SLOT-VERWECHSLUNG. BRK-Pfade (_check_auto_squeeze, _manage_squeeze_pending,
_check_pending_fill) duerfen den SLOT-ZUSTAND von `self.trader` nicht
anfassen (close/snapshot/open_*/set_open_context/refresh). ⚠ Bewusst eine
WEISSE Liste der Pfade - eine schwarze wuerde jede neue Funktion still
durchlassen. `pending_orders`/`cancel_pending`/`place_stop` sind ausdruecklich
ERLAUBT: magic-basierte Broker-Abfragen ohne Slot-Zustand (geprueft).
Dazu die Invariante, dass `TradingEngine.close` beide Slots erwaehnen muss -
sonst waere eine BRK-Position per Dashboard nicht schliessbar.
DREI RICHTUNGEN VERIFIZIERT: sauber -> gruen; Reihenfolge-Fehler zurueckgebaut ->
"self.trader_brk benutzt, aber erst in Zeile 270 zugewiesen"; Slot-Verwechslung
zurueckgebaut -> "self.trader.close im BRK-Pfad". Danach wieder gruen.
Statisch (AST), kein MT5, Millisekunden. Werkzeugfehler gilt NICHT als sauber.
Laeuft ueber check_nfalle.py im pre-commit-Hook mit.
⚠ Was diese Stufe NICHT kann: ein Startfehler AUSSERHALB von __init__. Dafuer
bliebe ein echter Rauchtest mit gestubbtem MT5 - der ist nicht gebaut.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
a652223a05
commit
2b498fc20e
@@ -420,8 +420,37 @@ print(" keine gefunden." if not sig else f" {sig} Stellen.")
|
||||
|
||||
print()
|
||||
print("=" * 88)
|
||||
|
||||
# ── E) SLOT-TRENNUNG + ATTRIBUT-REIHENFOLGE ──────────────────────────────
|
||||
# ⚠⚠ Beide Fehlerklassen haben binnen zwei Tagen je einmal zugeschlagen, und
|
||||
# KEINE andere Stufe hat sie gefangen (py_compile, ruff F821, ty, pytest:
|
||||
# alle gruen). Der Attribut-Reihenfolge-Fehler brach den Serverstart KOMPLETT
|
||||
# ab — der Nutzer konnte zwei Minuten lang nicht schliessen. Gefunden hat ihn
|
||||
# erst `deploy.py` Schritt 2, also NACH dem Kill des laufenden Servers.
|
||||
# Diese Stufe findet ihn VORHER.
|
||||
def _stufe_slots():
|
||||
print("")
|
||||
print("=" * 88)
|
||||
print(" E) SLOTS — Attribut-Reihenfolge in __init__ + Slot-Trennung")
|
||||
print("=" * 88)
|
||||
try:
|
||||
sys.path.insert(0, str(WURZEL / "tools"))
|
||||
import check_slots
|
||||
import importlib
|
||||
importlib.reload(check_slots)
|
||||
for z in check_slots.pruefe():
|
||||
befunde.append("SLOT " + z)
|
||||
print(" FEHLER " + z)
|
||||
if not check_slots.pruefe():
|
||||
print(" keine Slot-/Reihenfolge-Fehler.")
|
||||
except Exception as e:
|
||||
print(f" ⚠ Slot-Pruefung nicht ausfuehrbar ({e}) — NICHT als sauber gewertet.")
|
||||
befunde.append("SLOT Werkzeugfehler")
|
||||
|
||||
|
||||
_stufe_typen()
|
||||
_stufe_render()
|
||||
_stufe_slots()
|
||||
|
||||
print("")
|
||||
print("=" * 88)
|
||||
|
||||
Reference in New Issue
Block a user