Trading-Plattform-Pruefung: LIESMICH mit Abschnitt Paket NT (Trading Plattform 0.39.1, Task 731)

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_0126RDfXiECscXipzf67uypJ
This commit is contained in:
Pascal MichelandClaude Opus 5.5 committed 2026-10-12 01:03:44 +02:00
1 parent ef8059903c
commit 8b53bf7a74
1 file changed
+29 -3
@@ -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." 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] tags: [vault-tools, trading-plattform]
created: 2026-09-17 created: 2026-09-17
updated: 2026-10-11 updated: 2026-10-12
--- ---
# Prüfwerkzeuge fürs Dashboard der Trading Plattform # Prüfwerkzeuge fürs Dashboard der Trading Plattform
@@ -188,7 +188,7 @@ Seit Paket E9 sichert der Docker-Host nach jedem Werktag um 16:45 New Yorker Zei
- 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. - 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. - 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`. - 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`.
- Ist der Host bei einem Lauf nicht erreichbar, scheitert jeder Tag des Fensters mit einer eigenen Zeile `#needs-review`, auch ein Tag, der schon vollständig auf D: liegt (Quorum 4 zur Trading Plattform, Befund G1). Eine Zeile statt vieler ist als Task 729 geplant. - Bis 0.39.0 scheiterte bei einem Lauf ohne erreichbaren Host jeder Tag des Fensters mit einer eigenen Zeile `#needs-review`, auch ein Tag, der schon vollständig auf D: lag (Quorum 4 zur Trading Plattform, Befund G1). Seit 0.39.1 steht dann genau eine Zeile in der Notiz von heute (Abschnitt „Paket NT“ unten).
| Datei | Was sich ändert | Aufruf | | Datei | Was sich ändert | Aufruf |
|---|---|---| |---|---|---|
@@ -208,7 +208,33 @@ Was die Kette nicht prüft:
- Eine Bestätigung belegt nur, dass der Absender die Summe des Hosts kennt, nicht, dass er geholt hat; derselbe Schlüssel liest die Summe. - 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. - `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). - 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). - Ein `--tag` in falscher Form: Bis 0.39.0 prüfte der Fall dazu nur, dass keine Sicherung geholt wird, und die Abendkontrolle davor schrieb eine Notiz mit „gescheitert“, bei `../…` außerhalb von `Inbox/`. Seit 0.39.1 endet der Lauf gleich mit Exit 2, und der Fall `ein_tag_ausser_der_form_endet_mit_zwei_ohne_notiz_und_ohne_ssh` prüft das (Abschnitt „Paket NT“ unten).
## Paket NT (Trading Plattform 0.39.1): Sicherung bei Hostausfall, `--tag` früh geprüft
Seit Paket NT bricht `abendkontrolle.py` die Sicherung ab, wenn der Docker-Host nicht erreichbar ist, und prüft `--tag`, bevor es etwas anfängt. Plan im Projekt: `docs/plans/2026-10-11-paket-nt-nachtraege/` (Task 729 und 739); Codedoku dort in `docs/code/deployment.md`, Unterabschnitt „Sicherung (seit 0.39.0, Paket E9)“, Absatz „Abholen unter Windows“.
- **Wirkt ab dem nächsten Start der Windows-Aufgabe,** nicht erst beim Einspielen: Sie führt `abendkontrolle.py` aus diesem Ordner aus, abends und fünf Minuten nach jeder Anmeldung. Solange `SICHERUNG_ERSTER_TAG` `None` ist, holt sie keine Sicherung; sofort wirkt nur die frühe Prüfung von `--tag`.
- **Host nicht erreichbar:** Endet `sicherung-summe` oder `sicherung-bestaetigt` mit ssh-Exit 255 oder im Zeitlimit `SSH_TIMEOUT_S` (120 s), schreibt der Lauf genau eine Zeile „… **gescheitert** #needs-review. Docker-Host nicht erreichbar (…), Sicherung abgebrochen. … Der nächste Lauf versucht es erneut.“ in die Notiz von heute und endet mit Exit 1. Fertige Tage behalten ihre Zeilen; was ein angefangener Tag schon hat, steht hinter „Bis dahin am …“.
- **Abbruch im Archiv:** Exit 255 oder Zeitlimit `SICHERUNG_TIMEOUT_S` (600 s) bei `sicherung` lässt nur diese Instanz scheitern, mit „Archiv nicht geholt (…)“; der Lauf macht weiter.
- **`--tag`** außer der Form `JJJJ-MM-TT`, ohne gültiges Datum oder leer: eine Zeile auf stderr, Exit 2, keine Notiz, kein `lauf.log`, kein ssh, kein WSL.
- `abendkontrolle_wsl.py` nennt im Kopf-Docstring die zwei neuen `fehler`-Gründe aus `abendkontrolle-host.sh` (Summendatei oder Bestätigung nicht lesbar); sein Verhalten ändert sich nicht.
- Stand 0.39.1: Der Treiber hat 39 Fälle und 57 Mutanten. Weicht die Zählzeile eines Laufs davon ab, gilt sie.
| Datei | Was sich ändert | Aufruf |
|---|---|---|
| `abendkontrolle.py` | `ssh_lauf` erkennt den Ausfall (`HostNichtErreichbar`); `hole_sicherungen` bricht bei Summe und Bestätigung ab und schreibt die eine Zeile, beim Archiv scheitert nur die Instanz; `main` prüft `--tag` über `tag_gueltig` gleich nach dem Zerlegen, `sicherungstage` prüft den Tag nicht mehr selbst; der Kommentar über `SICHERUNG_NACHHOLEN_TAGE` beginnt nicht mehr mit „(S3).“; der Docstring von `ssh_lauf` sagt, dass Exit 255 bei einem Signal auf dem Host nur für OpenSSH-portable 9.5p1 nachgelesen ist, nicht für Win32-OpenSSH 9.5p2 | `python abendkontrolle.py --quelle dockerhost --quelle-ibkr dockerhost [--tag JJJJ-MM-TT]` |
| `abendkontrolle_dockerhost_angriffe.py` | Die `ssh.exe`-Attrappe kennt drei Störungen mehr: `ANGRIFF_HOST_WEG=<n>` lässt jeden Aufruf nach den ersten n mit Exit 255 enden wie ssh ohne Host, `ANGRIFF_SICHERUNG=langsam` hält jeden Sicherungsbefehl 5 s auf, `ANGRIFF_SICHERUNG=archiv_unlesbar` endet beim Archiv wie `abendkontrolle-lesen.sh` ohne Leserecht (Exit 1). `lauf()` nimmt `ANGRIFF_HOST_WEG` aus der Umgebung, `sicherungslauf()` setzt es über den Schalter `host_weg`. Neue Fälle: `ein_unlesbares_archiv_auf_dem_host_scheitert_nur_fuer_seine_instanz`, `ein_unerreichbarer_host_gibt_eine_zeile_von_heute_und_keine_weitere_notiz`, `ein_host_der_mitten_im_lauf_wegfaellt_laesst_die_zeilen_davor_stehen`, `ein_zeitlimit_beim_host_zaehlt_wie_ein_unerreichbarer_host`, `ein_zeitlimit_beim_archiv_laesst_nur_diese_instanz_scheitern`, `eine_bestaetigung_ohne_host_bricht_die_sicherung_ab` (Task 739) und `kein_kommentar_beginnt_mit_s3`. `ein_tag_ausser_der_form_endet_mit_zwei_ohne_notiz_und_ohne_ssh` ersetzt `ein_tag_ausser_der_form_holt_keine_sicherung`; `eine_abgebrochene_uebertragung_hinterlaesst_nichts` erwartet einen Grund mit dem Befehl. In `MUTANTEN` ersetzen E729-01 bis E729-15 und E729-25 die Mutanten „Tag ungeprueft“ und „Datum ungeprueft“; dazu kommt E739-01, und „Exit des Archivs egal“ zielt jetzt auf den Fall mit dem unlesbaren Archiv | unter Windows `PYTHONIOENCODING=utf-8 python -X utf8 abendkontrolle_dockerhost_angriffe.py [--mutanten]`; Exit 0 ohne Abweichung, sonst 2 |
| `abendkontrolle_wsl.py` | nur der Kopf-Docstring: die zwei neuen `fehler`-Gründe | wie im Abschnitt Paket E9 |
Was die Kette nicht prüft:
- Ob Exit 255 unter Win32-OpenSSH 9.5p2 auch kommt, wenn auf dem Host ein Signal `abendkontrolle-lesen.sh` beendet. Laut Quelltext von OpenSSH-portable 9.5p1 ja; dann hieße die Zeile bei Summe oder Bestätigung „Docker-Host nicht erreichbar“, obwohl er erreichbar war.
- Lässt sich `lauf.log` nicht schreiben, fehlt auch die Zeile in der Notiz; übrig bleibt Exit 1 (kritische Prüfung NT, Befund 3, so seit E9). Ein Fall dazu fehlt, die Abhilfe steht im `todo.md` des Projekts.
- Bricht das Archiv der letzten Instanz des letzten Tags ab, weil der Host gerade wegfällt, folgt keine Frage nach einer Summe mehr; die Zeile nennt dann nur „Archiv nicht geholt (… Exit 255 …)“, nicht „Docker-Host nicht erreichbar“.
- Bricht das erste Archiv eines Tags ab, bleibt der leere Tagesordner auf D: zurück (so seit E9).
- Ohne eigenen Fall: die ASCII-Darstellung des Tags in der Meldung zu `--tag` (ein Mutant `!a` nach `!r` überlebte), und „kein WSL“ bei falschem `--tag` misst der Fall nur mit `--quelle dockerhost`.
- Ein Abend mit ausgeschaltetem Host über das echte `ssh.exe`.
## Paket AB (2026-10-07): Abbau des Restbestands nach dem Netzschalter-Abriss ## Paket AB (2026-10-07): Abbau des Restbestands nach dem Netzschalter-Abriss