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 Exit **1**, und die **Server-PID vorher/nachher identisch** (20892) — der
laufende Prozess wurde nachweislich nicht angefasst; ohne Fehler läuft es durch. laufende Prozess wurde nachweislich nicht angefasst; ohne Fehler läuft es durch.
⚠⚠ **BEWUSST NICHT in `restart_server.bat` und die Aufgabenplanung** — das ist **AUCH `restart_server.bat` prüft jetzt** (Korrektur am selben Tag): mein
die wichtigere Hälfte der Entscheidung. Das sind **Wiederanlauf**-Pfade. Würde erster Entwurf hatte es als „Wiederanlauf-Pfad" ausgenommen — **falsch**. Die
ein fehlschlagender Test dort den Start verhindern, stünde eine offene Position Aufgabenplanung startet `start_server_hidden.vbs`**`start_server.bat`**;
ohne Trailing, Time-Stop und Notfall-Stop da — nur mit dem Broker-SL. **Eine `restart_server.bat` wird von **nichts** automatisch aufgerufen (geprüft) und
Prüfung, die den Bot offline lässt, ist schlimmer als der Fehler, den sie ist damit ein **absichtliches Deployment**. Es prüft jetzt vor dem Kill,
sucht.** Der Batch gibt stattdessen einen **Hinweis** aus und verweist auf Notausgang `restart_server.bat --ohne-pruefung`.
`deploy.py`; ein Kommentarblock hält die Begründung im Skript fest. ⚠⚠ **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.** **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) ## ✅ LIVE↔BACKTEST-VERGLEICH IST JETZT TEIL DER PIPELINE (2026-08-07)
Konsequenz aus dem Messfehler direkt darunter: der Vergleich lief nur, wenn Konsequenz aus dem Messfehler direkt darunter: der Vergleich lief nur, wenn
+38 -10
View File
@@ -17,19 +17,47 @@ set "PY=C:\Users\ah\AppData\Local\Programs\Python\Python312\python.exe"
set "HLDIR=%~dp0..\HyperLiquid-WTI Trader" set "HLDIR=%~dp0..\HyperLiquid-WTI Trader"
REM ------------------------------------------------------------ REM ------------------------------------------------------------
REM ⚠ HIER LAEUFT BEWUSST KEINE CODE-PRUEFUNG (2026-08-07). REM CODE-PRUEFUNG VOR DEM KILL (2026-08-07).
REM Dieser Batch ist ein WIEDERANLAUF-Pfad (auch per Aufgabenplanung REM Dieser Batch wird von NICHTS automatisch aufgerufen (geprueft:
REM nach Reboot/Logon ueber start_server_hidden.vbs). Wuerde ein REM die Aufgabenplanung startet start_server_hidden.vbs -> start_server.bat).
REM fehlschlagender Test den Start verhindern, staende eine offene REM Er ist also ein ABSICHTLICHES Deployment - und dort gehoert die
REM Position ohne Trailing, Time-Stop und Notfall-Stop da - nur mit REM Pruefung hin. Sie laeuft VOR dem Beenden, damit ein laufender,
REM dem Broker-SL. Eine Pruefung, die den Bot offline laesst, ist REM funktionierender Server nicht fuer kaputten Code abgeschossen wird.
REM
REM ⚠⚠ NICHT verwechseln mit start_server.bat: DAS ist der
REM WIEDERANLAUF-Pfad (Reboot/Logon) und prueft bewusst NICHTS. Wuerde
REM ein fehlschlagender Test dort den Start verhindern, staende eine
REM offene Position ohne Trailing, Time-Stop und Notfall-Stop da - nur
REM mit dem Broker-SL. Eine Pruefung, die den Bot offline laesst, ist
REM schlimmer als der Fehler, den sie sucht. REM schlimmer als der Fehler, den sie sucht.
REM Fuer ein ABSICHTLICHES Deployment gibt es tools\deploy.py: REM Regel: absichtliches Deployment blockieren, Wiederanlauf niemals.
REM das prueft VOR dem Kill und bricht bei Rot ab. REM
REM Notausgang: restart_server.bat --ohne-pruefung
REM ------------------------------------------------------------ REM ------------------------------------------------------------
REM ⚠⚠ SPRUNGMARKEN STATT KLAMMER-BLOECKE - das ist hier kein Stilfrage.
REM cmd wertet `errorlevel` INNERHALB eines geklammerten if/else-Blocks zur
REM PARSE-Zeit aus, nicht zur Laufzeit. Der erste Entwurf brach deshalb auch
REM bei SAUBEREM Code ab - der Neustart haette nie mehr funktioniert.
REM Gefunden nur, weil die Positiv-Richtung mit getestet wurde; der
REM Negativ-Test allein sah voellig in Ordnung aus.
REM Ausserdem maskiert cmd runde Klammern im Block anders -> Text ohne "( )".
if /I "%~1"=="--ohne-pruefung" goto :pruefung_aus
echo [0] Code pruefen mit check_nfalle + pytest ...
"%PY%" -X utf8 "%~dp0tools\pre_commit.py"
if errorlevel 1 goto :pruefung_rot
echo [0] Code ist sauber - weiter mit dem Neustart.
goto :pruefung_fertig
:pruefung_rot
echo. echo.
echo [i] Hinweis: dieser Weg fuehrt KEINE Code-Pruefung aus. echo [X] ABBRUCH - der laufende Server bleibt unangetastet.
echo Absichtliches Deployment bitte ueber: python tools\deploy.py --feld ^<feld^> echo Beheben, oder bewusst uebergehen: restart_server.bat --ohne-pruefung
exit /b 1
:pruefung_aus
echo [0] Code-Pruefung UEBERSPRUNGEN wegen --ohne-pruefung
:pruefung_fertig
echo. echo.
echo Beende laufende Server (8000 + 8001) ... echo Beende laufende Server (8000 + 8001) ...
View File