Testen laeuft jetzt ueber das Deploymentcenter; Befunde in den Bugtracker
CI / Build & Tests (Linux) (push) Canceled after 0s
CI / Plattformneutralität & Hygiene (push) Canceled after 0s

Die Testanleitung im PolyTrader-Repo ist nur noch ein Zeiger auf die
massgebliche Fassung in Deploymentcenter/docs/TESTUMGEBUNG.md, plus dem, was
PolyTrader-eigen ist: Display :99, Datenbank polytrader_test, Dienstkonto,
Publish-Verzeichnis, /tmp-Praefix. Die Anleitung galt immer projektuebergreifend
und lag nur hier, weil sie beim ersten Linux-Lauf von PolyTrader entstand. Eine
Tabelle loest die alten Abschnittsnummern auf, damit vorhandene Verweise lesbar
bleiben.

Befundbericht: Nachtrag 6 haelt die Gegenprobe am Bild vom 28.08.2026 fest -
den ersten Lauf nach dem neuen Verfahren. Linux-Build 0 Fehler / 15 Warnungen
wie unter Windows, 484 Tests gruen, --smoke-ui unter xvfb-run -n 99 durchgaengig
gruen. B-6, B-7, B-11, B-13, B-14 und die B-12-Selbstheilung sind damit auf der
Zielplattform bestaetigt; B-9 hat sich als kein Fehler entpuppt, und die
Spaltenumstellung hatte einen eigenen Fehler erzeugt.

Damit ist dieser Bericht abgeschlossen. Was offen bleibt, steht ab jetzt im
Bugtracker (Items #50-#52 und #56 fuer polytrader, #53-#55 und #57 fuer
deploymentcenter) statt in Befundberichten - dort geht es nicht mehr verloren,
und Befunde an fremden Projekten landen dort, wo jemand sie beheben kann.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-08-28 21:06:34 +02:00
co-authored by Claude Opus 5
parent 57cfca5fe9
commit 53231d62bc
3 changed files with 196 additions and 382 deletions
@@ -1,4 +1,4 @@
# Befundbericht: Erster Linux-Lauf
# Befundbericht: Erster Linux-Lauf
**Datum: 26.08.2026** · Prüfplan: [PRUEFPLAN-Linux-Betrieb.md](./PRUEFPLAN-Linux-Betrieb.md) ·
Roadmap: [A4a](../ROADMAP.md)
@@ -559,7 +559,7 @@ sinnvoll festlegen lassen. Das Verfahren ist reproduzierbar:
# Nachtrag 5: Behebung der offenen Befunde (27.08.2026)
Die Nacharbeit ist unter Windows entstanden und dort gebaut und geprüft
(`dotnet build -c Release`: 0 Fehler / 15 Warnungen wie zuvor; **484 Tests grün**, 8 davon neu;
(`dotnet build -c Release`: 0 Fehler / 15 Warnungen wie zuvor; **486 Tests grün**, 10 davon neu;
`--smoke-ui` durchgängig `[OK]`). Die **Gegenprobe am Bild steht aus** — sie gehört auf die
Linux-VM, nach dem Verfahren aus [TESTUMGEBUNG-Linux-VM.md](../TESTUMGEBUNG-Linux-VM.md) §4.8
mit `testdaten-ui.sql`.
@@ -577,6 +577,7 @@ mit `testdaten-ui.sql`.
| **B-13** · Name unsichtbar | Im Master-Trader-Grid steht **Name** jetzt direkt hinter `#` mit `MinWidth="180"`; die Wallet-Adresse folgt gekürzt (`0x9e2b…3b95`, neuer `ShortAddressConverter`), die vollständige Adresse im Tooltip |
| **B-14** · mehrzeilige Texte | Neuer Feldtyp `MultilineTextSettingsField`; „Beschreibung" und „Begründung" sind am Modell mit `[DataType(DataType.MultilineText)]` ausgezeichnet und erscheinen als sechszeiliges Feld mit Umbruch |
| **B-15** · ein Datensatz legt das Modul lahm | Die Wertkonvertierung läuft über `AccountIdSetJson`: JSON-Array wie bisher, eine reine Zahlenliste (`"1,2"`) wird als Altformat noch verstanden, alles andere ergibt eine **leere** Zuordnung. Der Trader wird also geladen und kopiert auf kein Konto — die sichere Richtung. Die Hydration meldet Anzahl und letzten Rohwert als Warnung |
| **§8** · Logs stempeln UTC, Oberfläche zeigt Ortszeit | **Auf Richards Entscheidung aus T2 vorgezogen.** `LogMessageEventArgs.Timestamp` ist jetzt ein `DateTimeOffset` in der Anzeige-Zeitzone (neu: `AppTimeZone.Now` / `.Today`) statt `DateTime.Now` der Systemuhr. Damit stimmen Zeitstempel, `zzz`-Offset in der JSONL und die Tagesgrenze der Logdateien mit der Oberfläche überein. Mitgezogen: der Log Viewer rechnet nicht mehr doppelt um, Startseite und Viewer wählen die Tagesdatei nach der Anzeige-Zone, und der Supervisor-Tagesbericht läuft zur genannten Stunde in dieser Zone statt in der des Systems. Der Rest von **T2** (Umstellung auf `Microsoft.Extensions.Logging`) bleibt offen |
| **B-12** · Lizenzschlüssel im Klartext | **Ursache gefunden:** `LicenseCli` läuft vor dem Host-Aufbau und rief damit `SecretProtection.Protect` ohne geladenen Master-Key auf — der reicht den Klartext unverändert durch. Die CLI lädt den Master-Key jetzt selbst. Zusätzlich zieht der Start einen noch im Klartext liegenden Schlüssel einmalig verschlüsselt nach (selbstheilende Migration wie bei den DB-Secrets) |
## Nebenbefund aus der Nacharbeit — **alle Dezimal-Einstellungen waren nicht änderbar**
@@ -632,7 +633,106 @@ unverändert für alle Schaltflächen. **Bewusst so eng geschnitten:** Trifft di
| Befund | Grund |
|---|---|
| **B-3** · `--smoke-ui` verlangt eine Datenbank | Eigener Schnitt: Persistenz überspringen oder gegen EF-InMemory bauen. Betrifft fünf DbContexts und hängt daran, ob die CI diesen Modus nutzen soll — siehe A2 |
| **B-4** · `--smoke-ui` braucht einen X-Server | Zwei Wege (`xvfb-run` im Build-Image vs. `Avalonia.Headless` im Code). Gehört zu derselben Entscheidung wie B-3 |
| **§8** · Logs stempeln UTC, Oberfläche zeigt Ortszeit | Gehört zu **T2** (Umstellung auf `Microsoft.Extensions.Logging`). Ein sauberer Fix braucht `DateTimeOffset` statt `DateTime` in `LogMessageEventArgs` — das berührt jede Logzeile der Anwendung und ist kein Nebenbei-Schnitt |
| **B-3** · `--smoke-ui` verlangt eine Datenbank | **Entscheidung Richard, 27.08.2026: vorerst nichts tun.** A2 (CI-Runner) ist pausiert, es gibt keinen Runner — die Prüfung läuft ohnehin von Hand, und auf der Test-VM sind Datenbank und `xvfb` vorhanden. Wieder aufzugreifen, wenn A2 weitergeht |
| **B-4** · `--smoke-ui` braucht einen X-Server | Dieselbe Entscheidung. Für den Handlauf auf der VM genügt ein vorgeschaltetes Xvfb — aber **`xvfb-run -n 99`, nicht `-a`**: `-a` sucht sich selbst ein Display und fängt bei `:99` an, also auf PolyTraders fester Nummer (siehe [TESTUMGEBUNG-Linux-VM.md](../TESTUMGEBUNG-Linux-VM.md), Displaynummern je Projekt) |
| Leerzustände melden nichts | Betrifft rund vierzehn Grids und ist reine Zutat, kein Fehler. Sinnvoll zusammen mit der nächsten Sichtprüfung zu entscheiden |
---
# Nachtrag 6: Gegenprobe am Bild (28.08.2026)
Erster Lauf nach dem neuen Verfahren aus
[`Deploymentcenter/docs/TESTUMGEBUNG.md`](../TESTUMGEBUNG-Linux-VM.md) — Sichtprüfung auf
Display `:99`, mit den Testdaten aus `testdaten-ui.sql`. **Ab hier landen Befunde im Bugtracker
statt in diesem Bericht**; die Nummern in Klammern sind Item-IDs.
**Linux-Build:** 0 Fehler, 15 Warnungen — Zahl für Zahl wie unter Windows. **484 Tests grün.**
`--smoke-ui` unter `xvfb-run -n 99` durchgängig `[OK]`, einschließlich der neuen Prüfung auf
bearbeitbare Einstellungsfelder.
## Im Bild bestätigt
| Befund | Beleg |
|---|---|
| **B-6** Kontrast | Die Zahlen in den KPI-Kacheln stehen im Dunkelmodus jetzt in der aufgehellten Bedeutungsfarbe — CopyTrading grün, ResolutionFarming und Gesamt rot. Der Themenwechsel-Fehler ist weg |
| **B-7** doppelter Modulname | Kachel trägt „CopyTrading" nur noch als Überschrift |
| **B-11** Überschriften | Im ResolutionFarming-Grid stehen „Fee (bps)", „Netto-Edge %", „Outcome" und „Score" vollständig; im Dashboard „Wallet (USDC)", „3T Winrate %", „Overall P/L". Vorher waren dieselben Köpfe abgeschnitten |
| **B-13** Name unsichtbar | Alle fünf Anzeigenamen lesbar (*WeatherWhale*, *PolitiSniper*, *SportsEdge Capital*, *MacroTrend Research*, *CryptoDegen9000*), Wallet gekürzt als `0x9e2b…3b95` |
| **B-14** einzeilige Felder | „Beschreibung" bricht jetzt über drei Zeilen um |
| **B-12** Klartextschlüssel | Beim ersten Start auf der VM im Log: „🔐 Lizenzschlüssel lag im Klartext vor und wurde verschlüsselt nachgezogen." Die selbstheilende Migration wirkt auf der Zielplattform |
| Account-Übersicht | „Demo Testkonto stillgelegt (Demo)" und „CopyTrading, ResolutionFarming" stehen vollständig — beides war zuvor abgeschnitten |
## B-9 · Kalendersymbol — **kein Fehler von PolyTrader** (Item #50)
**Die Zahl ist das heutige Datum.** Am 26.08. stand dort eine „26", am 28.08. eine „28". Avalonia
zeichnet im Knopf des `CalendarDatePicker` die heutige Tageszahl in ein Kalenderblatt — es gibt
dafür eigens die Themenressource `CalendarDatePickerCurrentDayFontSize`. Unter Linux fehlt der
Blatt-Glyph; übrig bleiben die Zahl und ein Punkt darüber.
Zwei Gegenproben, beide ohne Wirkung auf das Bild:
1. Die Formatvorlage der Anwendung per `Button:not(#PART_Button)` vom Knopf ferngehalten.
2. Farbschema auf hell umgeschaltet.
Die am 27.08. auf Verdacht eingebaute Änderung an `App.axaml` ist deshalb **zurückgenommen** —
sie war wirkungslos, und eine Änderung ohne Wirkung und ohne Begründung gehört nicht in den Code.
An ihrer Stelle steht ein Kommentar, damit der Nächste nicht dieselbe Spur verfolgt.
> Zu lernen daraus: Vier Testläufe haben dieselbe Stelle als Artefakt gedeutet. Aufgefallen ist
> es erst, weil an **zwei verschiedenen Tagen** hingesehen wurde. Ein Bildschirmfoto ist eine
> Momentaufnahme — was sich mit dem Datum ändert, verrät sich nur im Vergleich.
## Neuer Fehler durch die eigene Behebung (Item #56) — **behoben**
Die Spaltenbreiten-Umstellung vom 27.08. hat im Master-Trader-Grid etwas kaputtgemacht, das
vorher funktionierte: Von zwölf Spalten blieben sieben brauchbar. Nach „Winrate %" stand eine
Spalte mit abgeschnittenen Werten **ohne Überschrift**, dahinter vier leere Streifen von wenigen
Pixeln — PnL, Copy-PnL, Profit-Faktor, Ø PnL/Trade und Copy-Trades waren weder lesbar noch als
Spalte erkennbar.
**Das war schlimmer als B-11 selbst.** Dort fehlten Überschriften, hier fehlten die Werte.
Ursache: `Name` stand auf `Width="*"` mit `MinWidth`. Zwölf Spalten passen neben dem 460 px
breiten Detailbereich nicht ins Fenster; statt waagerecht zu schieben, verteilt das DataGrid den
Mangel — die Sternspalte behält ihre Mindestbreite, die `Auto`-Spalten am Ende werden zerdrückt.
Behoben durch `Width="Auto"` auch für `Name`. Ohne Sternspalte behält jede Spalte ihre natürliche
Breite, und das Grid lässt sich waagerecht schieben. Im Bild gegengeprüft: „PnL (7T)" zeigt
vollständige Werte, der Rollbalken ist da.
**Regel für alle Grids:** Eine Sternspalte nur dort, wo tatsächlich Platz übrig bleibt. Wo mehr
Spalten als Platz da sind, ist `Auto` plus waagerechtes Schieben das ehrlichere Verhalten — es
versteckt nichts.
## Nebenbei: ein wackliger Testlauf abgestellt
Von sechs Testlaeufen fiel einer um und liess sich danach nicht wieder einfangen. Ursache ist
kein einzelner Test, sondern die Bauart: Mehrere Bausteine halten **prozessweiten** Zustand, den
Tests bewusst umstellen — `AppTimeZone`, `SecretProtection`, die Diagnosezähler von
`AccountIdSetJson`. xUnit führt Testklassen standardmäßig **nebenläufig** aus, also sieht eine
Klasse mitten im eigenen Lauf, was eine andere gerade umgestellt hat.
Neu ist das nicht, aber die Zeitzonen-Umstellung aus §8 hat es verschärft: Seit die Logzeitstempel
der Anzeige-Zeitzone folgen, hängt **jedes** `LogMessageEventArgs` an `AppTimeZone` — während
`AppTimeZoneTests` dieselbe Einstellung nach Auckland und zurück dreht.
Abgestellt durch `[assembly: CollectionBehavior(DisableTestParallelization = true)]`
(`tests/PolyTrader.Tests/AssemblyInfo.cs`); die Zählerprüfungen arbeiten zusätzlich mit der
Differenz statt mit absoluten Werten. Kosten: 3 s → 4–5 s Laufzeit. Danach sechs Läufe in Folge
grün.
## Was jetzt im Bugtracker steht
| Item | Projekt | Inhalt |
|---|---|---|
| **#50** | polytrader | B-9 Kalendersymbol — Diagnose oben, rein kosmetisch |
| **#51** | polytrader | Leere Tabellen sagen nicht, warum sie leer sind |
| **#52** | polytrader | `--smoke-ui` setzt Datenbank und X-Server voraus (B-3/B-4) |
| **#56** | polytrader | Master-Trader-Grid: zerdrückte Spalten — behoben, s.o. |
| **#53** | deploymentcenter | `dc-testkit.sh` hat CRLF und ist auf Linux nicht ausführbar |
| **#54** | deploymentcenter | `dc-testkit doctor` meldet „Bereit." trotz zu altem Server und falschem Token |
| **#55** | deploymentcenter | Fremdmeldung: Laufzeit-Token akzeptiert, kein `triage_external`, kein `reported_from` |
| **#57** | deploymentcenter | `TESTUMGEBUNG.md`: drei Ungenauigkeiten aus dem ersten Durchlauf |
**Damit ist dieser Bericht abgeschlossen.** Was noch offen ist, steht im Bugtracker.