From a39ad671810cca175c5b5b7d0fb3e928e5a6a923 Mon Sep 17 00:00:00 2001 From: Richard Date: Wed, 26 Aug 2026 22:31:41 +0200 Subject: [PATCH] Modulfenster geprueft; Screenshot-Verfahren in die Testanleitung aufgenommen Nach der Lizenzaktivierung durch Richard sind alle vier Module aktiv - die Anwendung meldet "Lizenz gueltig (online geprueft)", der Cache steht auf valid, die Statusleiste zeigt vier Module. Damit ist D-2 live abgenommen, inklusive HWID v2 auf Basis der Linux-machine-id. Ein Stueck von Roadmap A3 nebenbei. Vier weitere Befunde: - B-9: In den Datumsfeldern erscheint statt des Kalendersymbols ein Artefakt. Die Icon-Schriftart fehlt unter Linux, Fontconfig ersetzt sie stillschweigend durch eine andere. Nur im Bild zu sehen, nie im Log. - B-10 (schwerwiegend, im vorigen Commit behoben): kein einziges DataGrid wurde gerendert. - B-11: Spaltenueberschriften werden abgeschnitten, die letzten drei Spalten zeigen gar keinen Text mehr. Genau der A5-Punkt Spaltenbreiten: die festen Pixelwerte stammen aus der WinForms-Fassung mit schmalerer Schrift. Nicht behoben - Spaltenbreiten legt man sinnvoll erst mit echten Daten fest. - B-12: Der Lizenzschluessel liegt im Klartext in server_settings.xml, obwohl die Projektkonvention Verschluesselung at-rest vorsieht und der Code beides unterstuetzt. Positiv: Die acht KPI-Kacheln im Accounting brechen sinnvoll um - eine offene A5-Frage ist damit beantwortet. docs/TESTUMGEBUNG-Linux-VM.md Abschnitt 4.7 neu: wie ein Agent Oberflaechen eigenstaendig begutachtet - Xvfb dauerhaft starten, mit xdotool navigieren, mit import aufnehmen, Ausschnitte vergroessern, Kontraste nachmessen. Mit den Lehren aus diesem Durchgang: grosszuegige Wartezeiten, nur eine Instanz gleichzeitig (sonst kollidiert die zweite mit dem systemd-Dienst in der Datenbank), und auf Zeichen achten, die falsch aussehen. Co-Authored-By: Claude Opus 5 --- docs/TESTUMGEBUNG-Linux-VM.md | 77 ++++++++++++- .../BEFUND-Linux-Betrieb-2026-08-26.md | 106 +++++++++++++++++- 2 files changed, 177 insertions(+), 6 deletions(-) diff --git a/docs/TESTUMGEBUNG-Linux-VM.md b/docs/TESTUMGEBUNG-Linux-VM.md index 0421ac5..4290f85 100644 --- a/docs/TESTUMGEBUNG-Linux-VM.md +++ b/docs/TESTUMGEBUNG-Linux-VM.md @@ -77,7 +77,9 @@ Test: `ssh testvm "hostname"` | .NET SDK | 10.0.111 (Runtime 10.0.11) | SDK, nicht nur Runtime — auf der VM kann gebaut werden | | MariaDB | 11.8.6 | Dienst `mariadb`, lauscht auf `localhost:3306` | | Git | 2.53.0 | | -| Xvfb | vorhanden | Virtueller Framebuffer für GUI-Tests ohne Bildschirm | +| Xvfb | vorhanden | Virtueller Framebuffer für GUI-Tests ohne Bildschirm (siehe 4.7) | +| xdotool | vorhanden | Klicks und Tastatureingaben skripten | +| ImageMagick | vorhanden | `import` für Bildschirmaufnahmen, `convert` zum Zuschneiden | | JetBrains Rider | vorhanden | | | Docker | **nicht** installiert | | | Node.js | **nicht** installiert | | @@ -159,14 +161,78 @@ nicht dauerhaft und niemals auf einer Produktivmaschine. ### 4.6 GUI-Anwendungen ohne Bildschirm testen -Braucht eine Anwendung X11, scheitert sie über SSH mit `XOpenDisplay failed`. Lösung: +Braucht eine Anwendung X11, scheitert sie über SSH mit `XOpenDisplay failed`. Für einen einzelnen +Durchlauf genügt: ```bash xvfb-run -a ./MeineAnwendung --irgendein-schalter ``` -Für einen Test **mit sichtbarem Fenster** muss jemand am Desktop der VM sitzen (oder RDP nutzen, -Port 3389 ist offen) und Bildschirmfotos machen. +### 4.7 Oberflächen selbst begutachten — ohne Bildschirm, ohne fremde Hilfe + +**Ein Agent kann die Oberfläche eigenständig prüfen.** Kein Mensch muss am Bildschirm sitzen und +Bildschirmfotos schicken. Das Verfahren hat sich am 26.08.2026 bewährt und **sieben Befunde +zutage gefördert**, darunter einen, der sämtliche Tabellen der Anwendung unsichtbar machte. + +Drei Werkzeuge, alle installiert: **Xvfb** (virtuelles Display), **xdotool** (Klicken und Tippen), +**ImageMagick** (`import` für Aufnahmen, `convert` zum Zuschneiden). + +Anders als `xvfb-run` wird das Display hier **dauerhaft** gestartet, damit sich zwischen den +Aufnahmen navigieren lässt: + +```bash +#!/bin/bash +cd ~/-test +export DISPLAY=:99 + +pkill -f "Xvfb :99" 2>/dev/null; sleep 1 +Xvfb :99 -screen 0 1600x1000x24 >/dev/null 2>&1 & +sleep 3 + +nohup ./MeineAnwendung > /tmp/gui.log 2>&1 & +APP=$! +sleep 25 # Startzeit großzügig bemessen + +# Fenster-ID ermitteln (bestaetigt, dass die Oberflaeche ueberhaupt erscheint) +xdotool search --name "^MeinFenstertitel$" | head -1 + +# navigieren und aufnehmen +shoot() { sleep 5; import -window root /tmp/v_$1.png; } +shoot 1_start +xdotool mousemove 127 205 click 1; shoot 2_zweite_ansicht +xdotool mousemove 127 237 click 1; shoot 3_dritte_ansicht + +kill $APP 2>/dev/null; sleep 2; pkill -f "Xvfb :99" 2>/dev/null +``` + +Danach die Bilder abholen und ansehen: + +```bash +scp testvm:'/tmp/v_*.png' . +``` + +**Was sich dabei bewährt hat:** + +- **Großzügige Wartezeiten.** 25 Sekunden nach dem Start, 5 Sekunden nach jedem Klick. Wird zu + früh aufgenommen, entsteht ein halb gezeichnetes Fenster, und man sucht Fehler, die keine sind. +- **Klickpunkte aus dem ersten Bild ablesen.** Erst eine Aufnahme machen, dort die Koordinaten der + Menüpunkte bestimmen, dann das Skript damit bestücken. +- **Details vergrößern statt raten.** Bei einem Verdacht den Ausschnitt herausschneiden: + ```bash + convert v_1_start.png -crop 560x130+265+540 +repage -resize 200% /tmp/detail.png + ``` +- **Kontraste nachmessen statt schätzen.** Ob Text lesbar ist, lässt sich ausrechnen — Pixelfarben + auslesen und das WCAG-Verhältnis bestimmen (4,5:1 für normalen Text). So wird aus „wirkt blass" + ein belegter Befund. +- **Nur eine Instanz gleichzeitig.** Läuft der systemd-Dienst noch, schreiben zwei Prozesse in + dieselbe Datenbank und es entstehen Fehler, die nichts mit der Oberfläche zu tun haben. Vorher + `sudo systemctl stop `. +- **Auf Zeichen achten, die falsch aussehen.** Fehlt eine Icon-Schriftart, ersetzt Fontconfig sie + stillschweigend durch etwas anderes — ein Kalendersymbol wird dann zu einer sinnlosen Zahl. Das + fällt nur im Bild auf, nie im Log. + +Für einen Test **mit echtem Bildschirm** kann trotzdem jemand am Desktop der VM sitzen (oder RDP +nutzen, Port 3389 ist offen) — nötig ist es für die Sichtprüfung nicht. --- @@ -205,7 +271,8 @@ Port 3389 ist offen) und Bildschirmfotos machen. | 5000 | vorhandener Dienst (nur IPv6-localhost) | | 631 | CUPS | -**Nachträglich installiert:** MariaDB 11.8.6, Xvfb (beide am 26.08.2026 für PolyTrader). +**Nachträglich installiert:** MariaDB 11.8.6, Xvfb, xdotool, ImageMagick, x11-utils +(alle am 26.08.2026 für PolyTrader). --- diff --git a/docs/pruefplaene/BEFUND-Linux-Betrieb-2026-08-26.md b/docs/pruefplaene/BEFUND-Linux-Betrieb-2026-08-26.md index acd03d3..5640aee 100644 --- a/docs/pruefplaene/BEFUND-Linux-Betrieb-2026-08-26.md +++ b/docs/pruefplaene/BEFUND-Linux-Betrieb-2026-08-26.md @@ -290,7 +290,8 @@ bleiben. Für deren Prüfung wird ein Lizenzschlüssel gebraucht. Im Einstellungsfenster steht bei **Mullvad CLI Path**: ``` -C:\Program Files\Mullvad VPN esources\mullvad.exe +C:\Program Files\Mullvad VPN +esources\mullvad.exe ``` Auf einem Linux-System ist das sinnlos — dort liegt die ausführbare Datei üblicherweise unter @@ -346,3 +347,106 @@ Frage, ob die acht KPI-Kacheln im Accounting sinnvoll umbrechen. (HTTP/2 302), und die Lizenz-CLI läuft bereits — sie meldet eine **HWID v2 auf Basis der Linux-machine-id**. Ein Aktivierungsversuch wäre damit zugleich die Live-Abnahme von **D-2** (Roadmap A3). + + +--- + +# Nachtrag 3: Modulfenster (nach Lizenzaktivierung) + +Richard hat den Lizenzschlüssel auf der VM hinterlegt. Die Anwendung meldet +**„Lizenz gültig (online geprüft)"**, `--license-status` zeigt `Cache: valid`, Statusleiste +**„Module: 4"**. + +> **Damit ist D-2 live abgenommen** — Lizenzaktivierung gegen das echte Deploymentcenter, +> einschließlich HWID v2 auf Basis der Linux-`machine-id`. Ein Stück von Roadmap **A3** ist +> nebenbei erledigt. + +## B-9 · Kalendersymbol wird als sinnlose Zahl dargestellt · offen + +In den Datumsfeldern des Accounting-Fensters erscheint rechts statt eines Kalendersymbols ein +Artefakt, das wie **„26" mit einem Punkt darüber** aussieht — in beiden Feldern („Von", „Bis"). + +**Ursache:** Das Symbol stammt aus einer Icon-Schriftart, die unter Linux fehlt. Fontconfig +ersetzt sie stillschweigend durch eine andere Schrift, in der derselbe Zeichencode etwas ganz +anderes bedeutet. Ein typischer Portierungsfehler: Es gibt keine Fehlermeldung, das Zeichen ist +einfach falsch. + +**Nur im Bild zu sehen, nie im Log.** Unter Windows sieht dieselbe Stelle korrekt aus. + +## B-10 · Kein einziges DataGrid wurde gerendert · **behoben** · **schwerwiegend** + +**Der wichtigste Befund dieses Durchgangs.** + +**Beobachtet:** Sämtliche Tabellen der Anwendung waren leer — keine Zeilen, keine Spaltenköpfe, +nur eine leere Fläche. Betroffen: Master-Trader, Offene Trades, Geschlossene Trades, +Account-Übersicht, Ledger, Jobs, schlicht alle. + +**Ursache:** `Avalonia.Controls.DataGrid` liegt in einem **eigenen Paket** und bringt sein Theme +**nicht** über `` mit. In `App.axaml` fehlte: + +```xml + +``` + +Die vorhandenen Anpassungen für `DataGrid` und `DataGridColumnHeader` in derselben Datei bauen auf +diesem Basis-Theme auf und liefen bisher ins Leere. + +**Warum das monatelang unbemerkt blieb** — drei Gründe, die zusammenkamen: + +1. **Keine Fehlermeldung, keine Bindungswarnung.** Das Steuerelement existiert, es zeichnet nur nichts. +2. **Die Konstruktionsprüfung bleibt grün**, weil das Fenster ja aufgebaut wird — sie prüft + Konstruktion, nicht Darstellung. +3. **Die Abnahme mit echten Daten (A5) stand noch aus.** Ohne Daten sieht eine leere Tabelle aus + wie fehlende Daten, nicht wie ein Fehler. + +**Der Fehler war nicht linuxspezifisch** — er bestand unter Windows genauso. Er ist nur hier +aufgefallen, weil zum ersten Mal jemand systematisch hingesehen hat. + +**Behoben und gegengeprüft:** Nach dem Fix erscheinen die Spaltenköpfe („#", „Wallet", +„Kategorie", „Trades", „Winrate", „PnL", „Copy-PnL" …). Vorher war die Fläche komplett leer. + +## B-11 · Spaltenüberschriften werden abgeschnitten · offen + +Direkt sichtbar, sobald B-10 behoben war — und **genau der A5-Punkt „Spaltenbreiten"**: + +``` +Trades (7 statt Trades (7T) +Winrate ' statt Winrate % +Copy-PnL statt Copy-PnL (30T) +``` + +Die letzten drei Spalten (Profit-Faktor, Ø PnL/Trade, Copy-Trades) zeigen **gar keinen Text +mehr** — für sie reicht die Breite des Fensterbereichs nicht. + +**Ursache:** Die festen Pixelbreiten in +[`CopyTradingWindow.axaml`](../../src/PolyTrader.App.Avalonia/Views/Modules/CopyTradingWindow.axaml) +(50, 170, \*, 110, 50, 90, 90, 100, 110, 100, 100, 90) stammen aus der WinForms-Fassung. Die dort +verwendete Schrift war schmaler als die Avalonia-Standardschrift, sodass dieselben Werte jetzt +nicht mehr ausreichen. + +**Nicht behoben** — Spaltenbreiten lassen sich sinnvoll erst mit echten Daten festlegen, sonst +optimiert man auf leere Zellen. Gehört zur A5-Abnahme. + +## B-12 · Lizenzschlüssel liegt im Klartext · offen, klein + +`--license-status` meldet: **„Gespeicherter Schlüssel (server_settings.xml): gesetzt (Klartext)"**. + +Die Projektkonvention ist Verschlüsselung at-rest über den Master-Key (`enc:v1:` …), und der Code +unterstützt beides — `SecretProtection.Unprotect` reicht Klartext unverändert durch. `--license-set-key` +verschlüsselt aber offenbar nicht. + +Ein Lizenzschlüssel wiegt weniger schwer als ein Wallet-Schlüssel, aber die Konvention sollte +einheitlich gelten. Zumal `server_settings.xml` auch den Watchdog-Token trägt. + +## Bewertung der Modulfenster + +| Fenster | Beobachtung | +|---|---| +| **Accounting** | **Die acht KPI-Kacheln brechen sinnvoll um** — sieben in einer Reihe, die achte darunter. Eine der offenen A5-Fragen ist damit beantwortet. Tabs, Datumswahl, Währungswahl und die drei Schaltflächen sitzen sauber | +| **Copytrading** | Alle vier Tabs vorhanden, die in A3 nachgerüsteten Schaltflächen „Neu" und „Löschen" sind da. Splitter funktioniert. Der rechte Bereich wirkt im Leerzustand zerrissen: „Zugewiesene Accounts" klebt am unteren Rand, weil es fest auf `DockPanel.Dock="Bottom"` mit `Height="220"` steht, während das Detailformular darüber leer bleibt. **Mit Daten neu zu beurteilen** | +| **ResolutionFarming, Supervisor** | Aufgenommen, aber im Leerzustand ohne Aussagekraft — beide leben von Tabellen, die vor B-10 ohnehin unsichtbar waren | + +**Empfehlung:** Die Sichtprüfung der Modulfenster **mit echten Daten wiederholen**, sobald B-10 +ausgeliefert ist. Erst dann lassen sich Spaltenbreiten (B-11), Splitter-Positionen und +Leerzustände sinnvoll beurteilen. Das Verfahren dafür ist dokumentiert und wiederholbar: +[TESTUMGEBUNG-Linux-VM.md](../TESTUMGEBUNG-Linux-VM.md) §4.7.