Pruefwerkzeuge Trading Plattform: Abendkontrolle vom Docker-Host (Paket DH), abgedichtete Angriffstreiber; plankritik.js auf LF
- abendkontrolle.py: --quelle und --quelle-ibkr (Vorgabe wsl wie bisher, dockerhost liest das Ergebnis des Hosts ueber SSH), fahre_dockerhost - abendkontrolle_wsl.py: --ibkr-python fuer ibkr_pruefen.py im Container - abendkontrolle_einrichten.ps1: -Quelle und -QuelleIbkr, 23:15 sobald ein Teil vom Host kommt - neue Angriffstreiber abendkontrolle_dockerhost_angriffe.py und abendkontrolle_ibkr_python_angriffe.py - Abdichtung gegen echte WSL- und SSH-Wege in den Treibern, auch in abendkontrolle_angriffe.py und rueckweg_aapl_angriffe.py (nach dem ntfy-Vorfall eines Mutanten am 2026-09-26) - LIESMICH: Abschnitt Paket DH - .claude/workflows/plankritik.js: LF statt CRLF (das CR war die Ursache von "script contains control characters"), meta gekuerzt, Einzelheiten im Kommentar Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
c115a13190
commit
59087fb235
9 files changed
+588
-16
No files matched your search
@@ -8,6 +8,7 @@ Aufruf in WSL (Venv) und unter Windows: python abendkontrolle_angriffe.py
|
||||
Exit 0, wenn jeder Fall so ausgeht wie erwartet; sonst 1 mit der Liste der Abweichungen.
|
||||
"""
|
||||
|
||||
import atexit
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
@@ -291,11 +292,66 @@ def wsl_faelle() -> None:
|
||||
|
||||
# --- Windows-Teil --------------------------------------------------------------------------------
|
||||
|
||||
def abdichten(ak) -> list:
|
||||
"""Sperrt die echten Wege von abendkontrolle.py fuer die Windows-Faelle (Plankritik DH, 2026-09-26).
|
||||
|
||||
Die Faelle laufen mit --ohne-wsl; bricht ein Mutant diesen Schalter, liefe sonst der echte
|
||||
WSL-Teil gegen den echten Projektordner, und seit Paket DH ssh zum Docker-Host. wsl.exe und
|
||||
ssh.exe zeigen ins Leere, fahre_wsl und fahre_dockerhost schreiben jeden Aufruf mit und
|
||||
lehnen ab; jeder Aufruf ist eine Abweichung.
|
||||
"""
|
||||
gerufen = []
|
||||
abdichten.erwartet = False
|
||||
|
||||
def verboten(name):
|
||||
def weg(*argumente, **benannte):
|
||||
gerufen.append(name)
|
||||
zeile = f"FEHL echter Weg {name} gerufen: {argumente}"
|
||||
abweichungen.append(zeile)
|
||||
if not abdichten.erwartet:
|
||||
print(zeile)
|
||||
raise RuntimeError(f"echter Weg {name} in den Angriffsfaellen")
|
||||
|
||||
weg.sperre = True
|
||||
return weg
|
||||
|
||||
leer = Path(tempfile.mkdtemp(prefix="abendkontrolle-angriffe-kein-weg-"))
|
||||
atexit.register(shutil.rmtree, leer, True) # der leere Ordner bleibt nicht im Temp liegen
|
||||
ak.WSL = str(leer / "wsl.exe")
|
||||
ak.SSH = str(leer / "ssh.exe")
|
||||
ak.WSL_SKRIPT = "/nicht-vorhanden/abendkontrolle_wsl.py"
|
||||
ak.fahre_wsl = verboten("fahre_wsl")
|
||||
ak.fahre_dockerhost = verboten("fahre_dockerhost")
|
||||
return gerufen
|
||||
|
||||
|
||||
def windows_faelle() -> None:
|
||||
sys.path.insert(0, str(HIER))
|
||||
import abendkontrolle as ak
|
||||
from datetime import datetime
|
||||
|
||||
gerufen = abdichten(ak)
|
||||
# Die Abdichtung greift: Ohne --ohne-wsl nimmt main den WSL-Weg, und der muss als Abweichung
|
||||
# ankommen, nicht als Lauf. Die erwartete Abweichung wird danach wieder entfernt.
|
||||
vorher = len(abweichungen)
|
||||
abdichten.erwartet = True
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
(Path(tmp) / "Inbox").mkdir()
|
||||
ak.main(["--vault", tmp, "--tag", TAG, "--teil", "alpaca", "--jetzt", "2026-09-23T22:45:00"])
|
||||
abdichten.erwartet = False
|
||||
# Beleg fuer die uebrigen Zeilen von abdichten: beide Programme und das Skript ins Leere,
|
||||
# fahre_dockerhost gesperrt.
|
||||
gesperrt = (not Path(ak.WSL).exists() and not Path(ak.SSH).exists()
|
||||
and ak.WSL_SKRIPT.startswith("/nicht-vorhanden/")
|
||||
and getattr(ak.fahre_dockerhost, "sperre", False))
|
||||
ok = gesperrt and gerufen == ["fahre_wsl"] and len(abweichungen) == vorher + 1
|
||||
del abweichungen[vorher:]
|
||||
del gerufen[:]
|
||||
zeile = f"{'OK ' if ok else 'FEHL'} W Abdichtung: der echte WSL-Weg kommt als Abweichung an"
|
||||
print(zeile)
|
||||
if not ok:
|
||||
abweichungen.append(zeile)
|
||||
|
||||
gut = {"tag": TAG, "befunde": [], "hinweise": ["auto_fortsetzen: fortgesetzt"], "exit": 0,
|
||||
"fakten": {"handelstag": True, "ende": {"grund": "boersenschluss", "exit": "0", "orders": "79", "position": "0"},
|
||||
"laeufe": [{"takte_aktiv": 375}], "broker_offen": 0, "bericht": True,
|
||||
@@ -637,6 +693,8 @@ def ibkr_windows_faelle() -> None:
|
||||
import abendkontrolle as ak
|
||||
from datetime import datetime
|
||||
|
||||
abdichten(ak)
|
||||
|
||||
gut = {"tag": TAG, "teil": "ibkr", "befunde": [], "hinweise": [], "exit": 0,
|
||||
"fakten": {"handelstag": True,
|
||||
"ende": {"grund": "boersenschluss", "exit": "0", "orders": "40", "position": "0"},
|
||||
|
||||
Reference in new issue
Block a user