Plandokumente auf den tatsaechlichen Codestand gezogen
Beide Portierungsdokumente hingen dem Code hinterher. Commit 7f0b05e setzte A1
bis A4 um, ohne eine einzige Markdown-Datei mitzuziehen - der Leitfaden wies die
vier Punkte weiter als offen aus. Ein Agent, der ihn als Arbeitsanweisung nimmt,
haette sie ein zweites Mal gebaut.
LEITFADEN-Avalonia-Portierung.md:
- A1 bis A4 als erledigt markiert, mit Ist-Tabelle: wo der Code liegt und dass
auch die Feinheiten sitzen (nullables GetService fuer Supervisor, LaunchUriAsync
statt Process.Start, DialogWindow.Confirm vor Delete, ContextMenu mit beiden
Eintraegen). Die Soll-Beschreibungen bleiben als Pruefvorlage fuer A5 stehen.
- A5 (Durchsehen mit echten Daten) als einziger offener Punkt ausgewiesen.
- Abschnitt B um das Lizenz-Gate und den Watchdog-Heartbeat ergaenzt. Wichtig fuer
den Naechsten: die Avalonia-App setzt derzeit GAR KEINE Lizenz durch, waehrend
die WinForms-Fassung das Gate weiter hat. Beides kommt mit dem Deploymentcenter
neu, also dort nichts mehr investieren.
- Neuer Abschnitt C fuer Folgepunkte ohne Blockerwirkung.
ANALYSE-Linux-Portierung.md (Revision 5):
- P5 bis P8 als erledigt, Stufen L3 und L4 entsprechend; Restaufwand von 33-51 PT
auf 7-13 PT korrigiert.
- Offen bleiben P3c (Deploymentcenter, steht als Naechstes), CI, systemd/Feldtest,
WinForms-Ausbau und die Abnahme A5.
- Historische Aufwandszahlen als Rueckblick gekennzeichnet statt geloescht.
Nachgeprueft statt uebernommen: A1-A4 gegen den Code verifiziert, ebenso dass es
keinerlei CI-Konfiguration gibt (weder .github noch .gitea) und dass --headless in
App.Avalonia/Program.cs bereits existiert.
Beim Pruefen aufgefallen, kein Fehler: TerminalLogger schreibt die Tagesdatei mit
DateTime.Now und der Launcher liest sie mit DateTime.Now - konsistent, aber beide
ignorieren die in P2 eingefuehrte AppTimeZone. Als Folgepunkt C notiert, relevant
erst beim Headless-Betrieb auf einem UTC-Server.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Portierungsleitfaden Avalonia (Fortsetzung)
|
||||
|
||||
**Stand:** 06.08.2026 · **Zielgruppe:** KI-Agent, der die UI-Portierung fortsetzt
|
||||
**Stand:** 13.08.2026 (A1–A4 abgehakt, Deploymentcenter-Hinweis) · **Zielgruppe:** KI-Agent, der die UI-Portierung fortsetzt
|
||||
**Vorgänger-Dokumente:** [`UI-SPEZIFIKATION-WinForms.md`](UI-SPEZIFIKATION-WinForms.md) (wie die alte
|
||||
Oberfläche aussah), [`ANALYSE-Linux-Portierung.md`](ANALYSE-Linux-Portierung.md) (Gesamtplan)
|
||||
|
||||
@@ -171,11 +171,26 @@ public MeinFenster(IModuleUiHost host, /* Abhängigkeiten */) : this()
|
||||
|
||||
## 3. Was noch fehlt — die Aufgabenliste
|
||||
|
||||
Der Stand ist ehrlich gesagt: **alle acht Fenster existieren und konstruieren, aber mehrere sind
|
||||
inhaltlich unvollständig.** Ich habe sie gegen den Tag `winforms-final` verglichen. Sortiert nach
|
||||
Wichtigkeit:
|
||||
> **Stand 13.08.2026 (nachgeprüft am Code):** A1–A4 sind mit Commit `7f0b05e` **umgesetzt**. Der
|
||||
> Commit hat dieses Dokument seinerzeit nicht mitgezogen, weshalb die Liste unten zwei Wochen lang
|
||||
> Arbeit als offen auswies, die längst erledigt war. **Real offen ist nur noch A5.**
|
||||
>
|
||||
> Die Beschreibungen von A1–A4 bleiben als *Soll-Spezifikation* stehen — sie sind die Vorlage, gegen
|
||||
> die bei A5 geprüft wird. Was tatsächlich gebaut wurde:
|
||||
|
||||
### A1 — Launcher: Live-Überblick fehlt vollständig ⚠️ größte Lücke
|
||||
| | Soll | Ist (geprüft) |
|
||||
|---|---|---|
|
||||
| **A1** ✅ | Drei Widgets + Modul-KPIs | [`LauncherWindow.axaml`](../src/PolyTrader.App.Avalonia/Views/LauncherWindow.axaml) — „Auffällige Trades (24h)", „Warnungen & Fehler (heute)", „Supervisor-KI", `Modul-KPIs` als `ItemsControl`. Supervisor korrekt über nullables `GetService<ISupervisorReportRepository>()`. |
|
||||
| **A2** ✅ | Account-Übersicht mit Profil-Schaltfläche | Spalten inkl. „3T Winrate %" / „Overall P/L"; `OnOpenPolymarketProfileClick` nutzt wie empfohlen `TopLevel.Launcher.LaunchUriAsync`, mit Hinweis bei fehlender Wallet-Adresse. |
|
||||
| **A3** ✅ | „Neu" + „Löschen" für Master-Trader | [`CopyTradingWindow.axaml.cs`](../src/PolyTrader.App.Avalonia/Views/Modules/CopyTradingWindow.axaml.cs) — `DeleteSelectedTrader()` mit `DialogWindow.Confirm` vor `_traderRepo.Delete(id)`. |
|
||||
| **A4** ✅ | Kontextmenü im Terminal | [`TerminalWindow.axaml`](../src/PolyTrader.App.Avalonia/Views/TerminalWindow.axaml) — `<ContextMenu>` am `ScrollViewer` mit „Kopieren" und „Alles auswählen". |
|
||||
|
||||
**Wenn du hier etwas änderst, zieh dieses Dokument im selben Commit mit.** Genau das ist beim
|
||||
letzten Mal unterblieben.
|
||||
|
||||
---
|
||||
|
||||
### A1 — Launcher: Live-Überblick ✅ ERLEDIGT (Commit `7f0b05e`)
|
||||
|
||||
Die WinForms-Fassung hatte unter den Fenster-Buttons ein `LauncherWidgetsPanel` (205 + 244 LOC) mit
|
||||
drei Bereichen nebeneinander in einem `TableLayoutPanel`:
|
||||
@@ -193,7 +208,7 @@ Dazu die **Modul-KPIs** (`UpdateModuleKpis`): je Modul PnL/Winrate aus dem Trade
|
||||
**Achtung:** Der Supervisor-Teil darf nur erscheinen, wenn das Modul geladen ist — nutze
|
||||
`services.GetService<…>()` (nullable) statt `GetRequiredService`.
|
||||
|
||||
### A2 — Launcher: Account-Übersicht fehlt vollständig ⚠️
|
||||
### A2 — Launcher: Account-Übersicht ✅ ERLEDIGT (Commit `7f0b05e`)
|
||||
|
||||
Grid mit: Account, Module, Polymarket, Wallet (USDC), 3T PnL, 3T Winrate %, Overall P/L.
|
||||
Die Spalte „Polymarket" war ein **Button**, der das Polymarket-Profil des Kontos im Browser öffnet.
|
||||
@@ -206,7 +221,7 @@ funktioniert auch auf Linux, ist aber unnötig — nimm stattdessen
|
||||
`TopLevel.GetTopLevel(this)!.Launcher.LaunchUriAsync(new Uri(url))`. Das ist Avalonias
|
||||
plattformneutraler Weg.
|
||||
|
||||
### A3 — Copytrading: „Neu" und „Löschen" für Master-Trader fehlen
|
||||
### A3 — Copytrading: „Neu" und „Löschen" für Master-Trader ✅ ERLEDIGT (Commit `7f0b05e`)
|
||||
|
||||
Die WinForms-`MasterTradersView` hatte vier Werkzeugleisten-Schaltflächen: Aktualisieren, **Neu**,
|
||||
Speichern, **Löschen**. Im Avalonia-Fenster sind nur Aktualisieren und Speichern verdrahtet.
|
||||
@@ -217,16 +232,16 @@ Speichern, **Löschen**. Im Avalonia-Fenster sind nur Aktualisieren und Speicher
|
||||
Löschen mit `DialogWindow.Confirm` absichern, danach `ITrackedTraderRepository.Delete(id)` und den
|
||||
Eintrag aus `CopyTradingState.Traders` entfernen.
|
||||
|
||||
### A4 — Terminal: Kontextmenü fehlt
|
||||
### A4 — Terminal: Kontextmenü ✅ ERLEDIGT (Commit `7f0b05e`)
|
||||
|
||||
Vorhanden sind Schaltflächen für „Alles kopieren" und „Terminal leeren". Es fehlen die Einträge
|
||||
**„Kopieren" (nur Auswahl)** und **„Alles auswählen"** als Kontextmenü auf der Log-Ausgabe.
|
||||
|
||||
In Avalonia deklarativ über `<ContextMenu>` am Container, gebunden an Befehle im Code-Behind.
|
||||
|
||||
### A5 — Durchsehen mit echten Daten
|
||||
### A5 — Durchsehen mit echten Daten ⬅️ **der einzige noch offene Punkt**
|
||||
|
||||
Ich habe alle Fenster **konstruiert** und die App laufen lassen, aber **nicht jedes Fenster mit
|
||||
Alle Fenster wurden **konstruiert** und die App lief, aber es wurde **nicht jedes Fenster mit
|
||||
echten Daten durchgeklickt**. Layout-Details siehst du erst im Gebrauch:
|
||||
|
||||
- Spaltenbreiten (feste Pixel wurden teils in Sternbreiten übersetzt)
|
||||
@@ -238,11 +253,24 @@ echten Daten durchgeklickt**. Layout-Details siehst du erst im Gebrauch:
|
||||
|
||||
### B — Bewusst zurückgestellt (NICHT anfassen)
|
||||
|
||||
> **Stand 13.08.2026:** Die Deploymentcenter-Integration steht unmittelbar bevor und ersetzt
|
||||
> **Lizenzverwaltung, Watchdog und Error-Reporting** noch einmal grundlegend. Alles, was unten
|
||||
> steht, wird davon berührt — fass es nicht an, sonst ist es Wegwerfarbeit.
|
||||
|
||||
| Was | Warum |
|
||||
|---|---|
|
||||
| **Lizenzdialog** (`LicenseDialog`) | Hängt am alten LicenseLabrador-SDK, das durch die Deploymentcenter-Anbindung ersetzt wird. Eine Portierung wäre Wegwerfarbeit. Die Schaltfläche „Lizenz prüfen / setzen …" fehlt deshalb im Einstellungsfenster. |
|
||||
| **Lizenzdialog** (`LicenseDialog`) | Hängt am alten LicenseLabrador-SDK, das durch die Deploymentcenter-Anbindung ersetzt wird. Die Schaltfläche „Lizenz prüfen / setzen …" fehlt deshalb im Einstellungsfenster. |
|
||||
| **Lizenz-Startprüfung** (`LicenseGate`) | In der Avalonia-App **bewusst nicht verdrahtet**. Konsequenz, die man kennen muss: der Avalonia-Build setzt derzeit **gar keine Lizenz durch** — alle Module laufen ungeprüft. In der WinForms-Fassung ([`Program.cs`](../Program.cs)) gibt es das Gate weiterhin. Kommt mit dem Deploymentcenter neu. |
|
||||
| **Watchdog-Heartbeat** | `WatchdogHeartbeatService` **ist** in der Avalonia-App registriert und läuft. Wird vom Deploymentcenter abgelöst — keine Erweiterungen mehr investieren. |
|
||||
| **WinForms-Projekt entfernen** | Erst wenn die Avalonia-Fassung abgenommen ist. Betrifft `PolyTrader.App` und `Ui/`. |
|
||||
|
||||
### C — Kleinere Folgepunkte (kein Blocker)
|
||||
|
||||
| Was | Befund |
|
||||
|---|---|
|
||||
| Logging kennt `AppTimeZone` nicht | [`TerminalLogger.cs:23`](../src/PolyTrader.Core/Services/TerminalLogger.cs) stempelt mit `DateTime.Now`, und der Launcher liest die Tagesdatei mit `DateTime.Now`. Schreiber und Leser stimmen also überein — **kein Fehler**. Beide ignorieren aber die in P2 eingeführte konfigurierbare Zeitzone, sodass auf einem UTC-Linuxserver mit Anzeigezone `Europe/Berlin` die Dateigrenzen nicht zur angezeigten Uhrzeit passen. Beim Headless-Schritt (L2) mitbehandeln. |
|
||||
| Ungenutzte Designer-Felder | Der Solution-Build wirft 23 Warnungen, überwiegend `CS0169` aus WinForms-Designer-Resten. Verschwinden mit dem WinForms-Ausbau von selbst. |
|
||||
|
||||
---
|
||||
|
||||
## 4. Wie du prüfst, ob es funktioniert
|
||||
|
||||
Reference in New Issue
Block a user