restart_server.bat prueft jetzt auch - und zwei cmd-Fallen dabei behoben

Korrektur meiner eigenen Einordnung von vorhin: ich hatte restart_server.bat
als "Wiederanlauf-Pfad" ausgenommen. Falsch. Die Aufgabenplanung startet
start_server_hidden.vbs -> start_server.bat; restart_server.bat wird von NICHTS
automatisch aufgerufen (geprueft) und ist damit ein absichtliches Deployment.
Es prueft jetzt vor dem Kill, Notausgang --ohne-pruefung.

Nur start_server.bat bleibt ungeprueft - das ist der echte Wiederanlauf-Pfad.

Zwei cmd-Fallen, beide NUR durch den Positiv-Test gefunden:

1) `if errorlevel 1` innerhalb eines geklammerten if/else-Blocks wird zur
   PARSE-Zeit ausgewertet, nicht zur Laufzeit. Der erste Entwurf brach deshalb
   auch bei SAUBEREM Code ab - der Neustart haette nie mehr funktioniert.
   Behoben mit Sprungmarken statt Klammer-Bloecken.

2) `echo ... ^(x^)` maskiert im Block anders -> "Der Befehl [0] ist falsch
   geschrieben". Text jetzt ohne runde Klammern.

Der Negativ-Test allein sah in beiden Faellen voellig in Ordnung aus: kaputter
Code -> Abbruch, Server unangetastet, Exit 1. Erst der Positiv-Test hat es
entlarvt. Eine Sperre muss man in beide Richtungen pruefen.

Alle drei Zweige verifiziert (sauber -> weiter/rc 0, kaputt -> Abbruch/rc 1,
--ohne-pruefung -> weiter/rc 0), gegen eine Attrappe, deren Kill/Start durch ein
echo ersetzt ist - so liess sich der Durchlauf-Zweig pruefen, ohne den
laufenden Server anzufassen.

Auch der Testaufbau hatte einen Fehler: die Attrappe lag zuerst in %TEMP%, dort
macht `cd /d "%~dp0"` das Temp-Verzeichnis zum Arbeitsordner und
%~dp0tools\pre_commit.py existiert nicht -> scheinbarer Fehlschlag.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-07 12:07:41 +02:00
co-authored by Claude Opus 5
parent 0ab79f1876
commit b14d81f412
3 changed files with 69 additions and 17 deletions
+31 -7
View File
@@ -4938,15 +4938,39 @@ abgeschossen werden. Notausgang `--ohne-pruefung` (Philosophie wie
Exit **1**, und die **Server-PID vorher/nachher identisch** (20892) — der
laufende Prozess wurde nachweislich nicht angefasst; ohne Fehler läuft es durch.
⚠⚠ **BEWUSST NICHT in `restart_server.bat` und die Aufgabenplanung** — das ist
die wichtigere Hälfte der Entscheidung. Das sind **Wiederanlauf**-Pfade. Würde
ein fehlschlagender Test dort den Start verhindern, stünde eine offene Position
ohne Trailing, Time-Stop und Notfall-Stop da — nur mit dem Broker-SL. **Eine
Prüfung, die den Bot offline lässt, ist schlimmer als der Fehler, den sie
sucht.** Der Batch gibt stattdessen einen **Hinweis** aus und verweist auf
`deploy.py`; ein Kommentarblock hält die Begründung im Skript fest.
**AUCH `restart_server.bat` prüft jetzt** (Korrektur am selben Tag): mein
erster Entwurf hatte es als „Wiederanlauf-Pfad" ausgenommen — **falsch**. Die
Aufgabenplanung startet `start_server_hidden.vbs`**`start_server.bat`**;
`restart_server.bat` wird von **nichts** automatisch aufgerufen (geprüft) und
ist damit ein **absichtliches Deployment**. Es prüft jetzt vor dem Kill,
Notausgang `restart_server.bat --ohne-pruefung`.
⚠⚠ **NUR `start_server.bat` bleibt ungeprüft** — das ist der echte
**Wiederanlauf**-Pfad (Reboot/Logon). Würde ein fehlschlagender Test dort den
Start verhindern, stünde eine offene Position ohne Trailing, Time-Stop und
Notfall-Stop da — nur mit dem Broker-SL. **Eine Prüfung, die den Bot offline
lässt, ist schlimmer als der Fehler, den sie sucht.**
**Regel: absichtliches Deployment blockieren, Wiederanlauf niemals.**
⚠⚠ **ZWEI cmd-FALLEN DABEI, beide nur durch den POSITIV-Test gefunden:**
**(1)** `if errorlevel 1` **innerhalb eines geklammerten `if/else`-Blocks** wird
zur **PARSE-Zeit** ausgewertet, nicht zur Laufzeit — der erste Entwurf brach
deshalb auch bei **sauberem** Code ab, der Neustart hätte **nie mehr
funktioniert**. Behoben mit **Sprungmarken statt Klammer-Blöcken**.
**(2)** `echo ... ^(x^)` maskiert im Block anders → „Der Befehl [0] ist …
falsch geschrieben". Text jetzt ohne runde Klammern.
**Der Negativ-Test allein sah in BEIDEN Fällen völlig in Ordnung aus**
kaputter Code → Abbruch, Server unangetastet, Exit 1. Erst der Positiv-Test
(sauberer Code muss DURCHLAUFEN) hat es entlarvt. **Eine Sperre muss man in
beide Richtungen prüfen; „blockiert korrekt" ist nur die Hälfte.**
✅ Alle drei Zweige verifiziert (sauber → weiter/rc 0 · kaputt → Abbruch/rc 1 ·
`--ohne-pruefung` → weiter/rc 0), gegen eine **Attrappe**, deren Kill/Start
durch ein `echo` ersetzt ist — so liess sich der Durchlauf-Zweig prüfen, ohne
den laufenden Server anzufassen.
⚠ Auch der Testaufbau selbst hatte einen Fehler: die Attrappe lag zuerst in
`%TEMP%`, dort macht `cd /d "%~dp0"` das Temp-Verzeichnis zum Arbeitsordner und
`%~dp0tools\pre_commit.py` existiert nicht → scheinbarer Fehlschlag. **Der Test
gehört ins Projektverzeichnis.**
## ✅ LIVE↔BACKTEST-VERGLEICH IST JETZT TEIL DER PIPELINE (2026-08-07)
Konsequenz aus dem Messfehler direkt darunter: der Vergleich lief nur, wenn