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 |
|
||||
| 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 ~/<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) |
|
||||
| 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**:
|
||||
|
||||
```
|
||||
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 `<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