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 <noreply@anthropic.com>
This commit is contained in:
@@ -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 |
|
| .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` |
|
| MariaDB | 11.8.6 | Dienst `mariadb`, lauscht auf `localhost:3306` |
|
||||||
| Git | 2.53.0 | |
|
| 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 | |
|
| JetBrains Rider | vorhanden | |
|
||||||
| Docker | **nicht** installiert | |
|
| Docker | **nicht** installiert | |
|
||||||
| Node.js | **nicht** installiert | |
|
| Node.js | **nicht** installiert | |
|
||||||
@@ -159,14 +161,78 @@ nicht dauerhaft und niemals auf einer Produktivmaschine.
|
|||||||
|
|
||||||
### 4.6 GUI-Anwendungen ohne Bildschirm testen
|
### 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
|
```bash
|
||||||
xvfb-run -a ./MeineAnwendung --irgendein-schalter
|
xvfb-run -a ./MeineAnwendung --irgendein-schalter
|
||||||
```
|
```
|
||||||
|
|
||||||
Für einen Test **mit sichtbarem Fenster** muss jemand am Desktop der VM sitzen (oder RDP nutzen,
|
### 4.7 Oberflächen selbst begutachten — ohne Bildschirm, ohne fremde Hilfe
|
||||||
Port 3389 ist offen) und Bildschirmfotos machen.
|
|
||||||
|
**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 ~/<projekt>-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 <projekt>`.
|
||||||
|
- **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) |
|
| 5000 | vorhandener Dienst (nur IPv6-localhost) |
|
||||||
| 631 | CUPS |
|
| 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).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -290,7 +290,8 @@ bleiben. Für deren Prüfung wird ein Lizenzschlüssel gebraucht.
|
|||||||
Im Einstellungsfenster steht bei **Mullvad CLI Path**:
|
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
|
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
|
(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**
|
Linux-machine-id**. Ein Aktivierungsversuch wäre damit zugleich die Live-Abnahme von **D-2**
|
||||||
(Roadmap A3).
|
(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 `<FluentTheme />` mit. In `App.axaml` fehlte:
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml" />
|
||||||
|
```
|
||||||
|
|
||||||
|
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.
|
||||||
|
|||||||
Reference in New Issue
Block a user