From 639c76bddc1a3f84210b3d4c8395a31086d8c662 Mon Sep 17 00:00:00 2001 From: Pascal Michel Date: Sun, 11 Oct 2026 19:41:48 +0200 Subject: [PATCH] Trading-Plattform-Pruefung: LIESMICH mit Abschnitt Paket E9 (Trading Plattform 0.39.0, Task 727) Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_0126RDfXiECscXipzf67uypJ --- .../trading-plattform-pruefung/LIESMICH.md | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/.vault-tools/trading-plattform-pruefung/LIESMICH.md b/.vault-tools/trading-plattform-pruefung/LIESMICH.md index 32d5c73..53f2cc3 100644 --- a/.vault-tools/trading-plattform-pruefung/LIESMICH.md +++ b/.vault-tools/trading-plattform-pruefung/LIESMICH.md @@ -5,7 +5,7 @@ title: "Trading Plattform: Prüfwerkzeuge des Koordinators fürs Dashboard" summary: "Eigener Lauf mit echten Daten zum Dashboard der Trading Plattform — Vergleich der Endpunkte gegen Vollparse und pandas, zwei WebSocket-Verbindungen, Browser-Lauf und Wiederaufbau mit Playwright, gefahrlose Proben der zwei Skripte, Mutantenläufe. Entstanden 2026-09-17 (Teil 3b), erweitert 2026-09-18 (Teil 10: Anmeldung, Angriffsfälle, Beobachtung, Kerzenlatenz), bewusst nicht im Projekt-Repo." tags: [vault-tools, trading-plattform] created: 2026-09-17 -updated: 2026-10-08 +updated: 2026-10-11 --- # Prüfwerkzeuge fürs Dashboard der Trading Plattform @@ -180,6 +180,35 @@ Nach dem Umzug auf den Docker-Host (Hyper-V-VM) prüft der Host selbst: `deploy/ Was es nicht tut: Es prüft nicht, ob der Host die Kontrolle überhaupt fährt — bleibt sie dort aus, steht jeden Abend „noch kein Ergebnis“ in der Notiz, und das ist der Hinweis. Steht `-QuelleIbkr` falsch, fällt das nicht immer auf: Prüft die Aufgabe den Teil ibkr in WSL, obwohl die Instanz schon auf dem Host läuft, meldet sie ihn dort nur leise als „nicht gestartet“, weil der Zeitgeber in WSL aus ist. Ein Anmelde-Lauf zwischen 22:30 und dem Ende der Prüfung auf dem Host bekommt einmal „noch kein Ergebnis“, weil die Frist `FRUEHESTENS` für beide Quellen gilt (die Mutanten suchen genau diese Zeile). +## Paket E9 (Trading Plattform 0.39.0): Sicherung nach D: + +Seit Paket E9 sichert der Docker-Host nach jedem Werktag um 16:45 New Yorker Zeit Register, `data/paper` und `artifacts/paper` beider Instanzen in seine Ablage (`deploy/docker-host/sicherung-host.sh` aus dem Repo). Die Werkzeuge hier holen die Sicherung nach `D:\Trading-Sicherung`, bestätigen sie beim Host und melden über die Abendkontrolle des Hosts, wenn sie fehlt oder unbestätigt ist. Plan im Projekt: `docs/plans/2026-10-11-paket-e9-sicherung/`; Codedoku dort in `docs/code/deployment.md`, Unterabschnitt „Sicherung (seit 0.39.0, Paket E9)“. + +- **Gebaut und geprüft, nicht eingespielt.** `SICHERUNG_ERSTER_TAG` in `abendkontrolle.py` steht auf `None`, bis der Koordinator E9 mit Pascals Ja einspielt; bis dahin holt `abendkontrolle.py` nichts ab. +- Beim Einspielen kommt `abendkontrolle_wsl.py` vor `host-einrichten.sh --anwenden` nach `/opt/trading-plattform/werkzeuge/`. Umgekehrt lehnt das alte Werkzeug `--sicherung` ab, und jede Abendkontrolle endet ohne Ergebnis. +- Die Zahlen der Fälle in den Abschnitten oben gelten für den Stand vor E9; wie viele es jetzt sind, sagt die Zählzeile des Laufs. +- Das Fenster von `abendkontrolle.py` (heute und zehn Kalendertage davor) ist kürzer als die Aufbewahrung des Hosts (zehn Sicherungstage). War der Rechner länger aus, fallen ältere Tage still heraus; die holt nur ein Aufruf mit `--tag`. + +| Datei | Was sich ändert | Aufruf | +|---|---|---| +| `abendkontrolle.py` | holt für jeden Teil mit Quelle `dockerhost` nach den Ergebnissen die Sicherungen ab. Je Kalendertag der letzten `SICHERUNG_NACHHOLEN_TAGE` (10) bis heute ab `SICHERUNG_ERSTER_TAG` fragt es die Summe des Hosts (`sicherung-summe`); wo `.tar.sha256` auf D: fehlt oder eine andere Summe trägt, holt es das Archiv in `.tar.teil` (`sicherung`, 600 s), prüft die Summe, benennt nach `\.tar` um, bestätigt beim Host (`sicherung-bestaetigt`) und schreibt zuletzt die Summendatei. Exit 3 des Hosts ist für heute und das Wochenende still, für einen vergangenen Werktag ein Fehlschlag. Zeitbudget 1500 s ab dem Start des Laufs. Je Tag mit Neuem eine Zeile „Sicherung Trading Plattform (automatisch)“ in der Notiz dieses Tags, ein Fehlschlag mit `#needs-review`. Mit `--tag` nur dieser Tag, auch einer vor `SICHERUNG_ERSTER_TAG`. `--sicherung-ziel` lenkt die Ablage um, nur für die Angriffsfälle | `python abendkontrolle.py --quelle dockerhost --quelle-ibkr dockerhost [--tag JJJJ-MM-TT]` | +| `abendkontrolle_einrichten.ps1` | setzt den `StartBoundary` des Abend-Auslösers ohne UTC-Versatz (`JJJJ-MM-TTT23:15:00`), damit die Aufgabe nach Ortszeit startet (S10); wirkt erst, wenn die Aufgabe neu eingetragen ist | `powershell -NoProfile -File abendkontrolle_einrichten.ps1 -Quelle dockerhost -QuelleIbkr dockerhost` | +| `abendkontrolle_wsl.py` | `--sicherung `: prüft für den Teil die Sicherung des vorigen Handelstags nach dem Kalender (zehn Kalendertage vor `--tag` bis zum Vortag; die Spanne setzt das Werkzeug selbst durch, auch für eine Kalenderdatei) gegen den Stand, den `abendkontrolle-host.sh` als JSON schreibt: Eintrag, Summe, Archiv, Bestätigung gleich der Summe, dazu ein fehlender `erster-tag` und einer nach dem geprüften Tag. Jede Abweichung ist ein Befund und geht per ntfy hinaus; still bleibt nur ein voriger Handelstag vor dem ersten Sicherungstag. Ohne den Schalter wie vorher | auf dem Host über `abendkontrolle-host.sh`; von Hand in WSL `python abendkontrolle_wsl.py --tag JJJJ-MM-TT --sicherung --ohne-meldung` (ohne `--ohne-meldung` geht jeder Befund per ntfy hinaus) | +| `abendkontrolle_angriffe.py` | dazu die Fälle zur Sicherung in WSL: Stand unlesbar, `fehler`, `erster_tag` fehlt, kaputt oder nach dem geprüften Tag, jede Abweichung bei Eintrag, Summe, Archiv und Bestätigung, Grenzen des Kalenderfensters mit Kalenderdatei, Kalender in falscher Form, Bedienfehler und ein Meldefall gegen `ntfy_probe_server.py` | in WSL im Venv `python abendkontrolle_angriffe.py --nur-sicherung` (nur diese Fälle) oder ohne Schalter alle | +| `abendkontrolle_mutanten.py` | `--nur TEXT` fährt nur die Mutanten mit TEXT im Namen; ein fünftes Element im Tupel geht als Argument an den Treiber. Neu sind die Mutanten „Sicherung …“ von `abendkontrolle_wsl.py`; sie fahren den Treiber mit `--nur-sicherung`. Ohne `--nur` fährt jeder bisherige Mutant den ganzen Treiber samt Sicherungsfällen und dauert länger | in WSL im Venv `timeout 3600 python abendkontrolle_mutanten.py --nur Sicherung`; Exit 0, wenn keiner überlebt | +| `abendkontrolle_dockerhost_angriffe.py` | Die `ssh.exe`-Attrappe kennt die drei Sicherungsbefehle so streng wie `abendkontrolle-lesen.sh` (Formen, Exit 0 bis 4), gegen eine Host-Ablage im Wegwerf-Ordner. Neue Fälle zu Holen, Prüfen, Ablegen und Bestätigen, falscher Summe, abgebrochener Übertragung, Exit 3, schon vorhandener Datei, fremdem Inhalt im Zielordner, gescheiterter Bestätigung, Fenster, Zeitbudget und dem Auslöser der Aufgabe. Abgedichtet: `lauf()` setzt `SICHERUNG_ERSTER_TAG` auf `None` und `SICHERUNG_ZIEL` in den Wegwerf-Ordner, `sicherungslauf()` lenkt mit `--sicherung-ziel` um; unter `D:\Trading-Sicherung` landet nichts. `--mutanten` fährt erst die Grundlinie, dann `MUTANTEN` auf Kopien von `abendkontrolle.py` und `MUTANTEN_AUFGABE` auf Kopien der `.ps1` (als Text); jeder Mutant nennt die Fälle, die rot werden müssen | unter Windows `PYTHONIOENCODING=utf-8 python -X utf8 abendkontrolle_dockerhost_angriffe.py [--mutanten]`; Exit 0 ohne Abweichung, sonst 2 | + +Was die Kette nicht prüft: + +- Ob das echte `ssh.exe` die Bytes eines Archivs unverändert lässt. Jede Abweichung fiele als falsche Summe auf; den Nachweis bringt erst das erste echte Holen. +- Dass `cmd.exe` stdout der `.cmd`-Attrappe unberührt durchreicht, ist abgeleitet; der Fall mit CR, LF und Strg-Z im Archiv zeigt es. +- Die Units des Hosts, SELinux, das Packen auf dem Host, das Zurückspielen und ob die Kopie auf D: noch liegt; Veeam und die VHDX auch nicht. +- Ein von Hand verändertes Archiv neben passender Summendatei auf D:: `abendkontrolle.py` hasht nicht nach. Das zeigt erst `sha256sum -c` im Tagesordner. +- Eine Bestätigung belegt nur, dass der Absender die Summe des Hosts kennt, nicht, dass er geholt hat; derselbe Schlüssel liest die Summe. +- `abendkontrolle_mutanten.py` zählt jeden Exit ungleich 0 des Treibers als gefangen und zeigt je Mutant nur die ersten zwei `FEHL`-Zeilen. Dass der gemeinte Fall rot wird, belegen dort nur diese Zeilen und der Rot-Nachweis im Plan. +- Ohne eigenen Mutanten: `chmod 0644` der JSON-Datei auf dem Host, die Prüfung vor der Meldung (nur ein Fall belegt sie) und die Spanne auf der Antwort von Alpaca (kein Fall fährt den Netzweg). +- Ein `--tag` in falscher Form: Der Fall dazu prüft nur, dass keine Sicherung geholt wird. Die Abendkontrolle davor prüft die Form nicht und schreibt eine Notiz mit „gescheitert“, bei `../…` außerhalb von `Inbox/` (so schon vor E9). + ## Paket AB (2026-10-07): Abbau des Restbestands nach dem Netzschalter-Abriss Am 2026-10-07 um 20:13 beendete ein Druck auf den Netzschalter beide Paper-Runner mitten im Handel, ohne Glattstellen. Pascal am selben Abend: am 2026-10-08 soweit es geht alles verkaufen, Testläufe bis Dienstag gestoppt. Die Zeitgeber `trading-paper.timer` und `trading-paper-ibkr.timer` sind seitdem aus, die Abendkontrolle ebenfalls; die Meldung dieses Werkzeugs ist in der Pause das einzige Netz. Plan im Projekt: `docs/plans/2026-10-07-paket-ab-abbau-restbestand/`.