diff --git a/docs/PROJEKTSTAND.md b/docs/PROJEKTSTAND.md new file mode 100644 index 0000000..dbd1697 --- /dev/null +++ b/docs/PROJEKTSTAND.md @@ -0,0 +1,197 @@ +# Projektstand PolyTrader + +**Stand: 22.08.2026** · erstellt beim Frühjahrsputz, alle Angaben am Code nachgeprüft +(nicht aus Plandokumenten übernommen — mehrere davon waren veraltet). + +> Dieses Dokument ist der Einstiegspunkt: Was existiert, was ist fertig, was ist offen und +> warum. Die Detailpläne unter `umsetzungsplaene/` bleiben maßgeblich für das *Wie*. + +--- + +## 1. Kurzfassung + +PolyTrader ist eine modulare Trading- und Analyse-Suite für Polymarket: ein schlanker +**Core** und vier eigenständige **Module**, dazu eine plattformneutrale +**Avalonia-Oberfläche**. + +| | | +|---|---| +| Projekte | 7 (Core, 4 Module, Avalonia-App, Tests) — **alle auf `net10.0`** | +| Plattform | **Windows und Linux.** Seit dem 22.08.2026 kein `net10.0-windows` mehr im Repo; Linux-Publish verifiziert | +| Produktivcode | ~27.100 LOC, davon Core ~8.000, CopyTrading ~7.700, UI ~4.900 | +| Tests | **476**, alle grün (~5.700 LOC) | +| Build | 0 Fehler, 15 Warnungen (alle im Avalonia-Projekt, siehe §5.3) | +| Sicherheit | 0 anfällige Pakete über alle 7 Projekte, inkl. transitiver | +| Datenbank | MySQL über EF Core / Pomelo. Mongo und SQLite vollständig entfernt | + +**Der große Bogen ist geschlossen.** Aus dem monolithischen WinForms-Copytrader ist ein +modulares, plattformneutrales System geworden. Was noch offen ist, teilt sich sauber in +zwei Gruppen: Dinge, die **nur im Zielland mit echtem Geld** abgenommen werden können, und +**bewusst zurückgestellte Neuentwicklung**. + +--- + +## 2. Architektur + +``` +PolyTrader.Core Host, Persistenz (EF/MySQL), Settings, Jobs, Logging, + CLOB-Client, Streaming, Security, Deploymentcenter-Anbindung + │ + ├── Modules.CopyTrading Master-Trader spiegeln + ├── Modules.ResolutionFarming Favoriten nahe Auflösung + ├── Modules.Supervisor KI-gestützte Handelsanalyse (OpenRouter) + └── Modules.Accounting Unabhängige Buchhaltung aller Live-Accounts + │ +PolyTrader.App.Avalonia Einfenster-Shell mit Seitenleiste +``` + +**Leitprinzip, das gehalten hat:** Der Core kennt keine Module. Module registrieren sich +über `IPolyTraderModule` und liefern ihre Ansichten über einen toolkit-neutralen +UI-Contract — deshalb war der Wechsel von WinForms nach Avalonia überhaupt möglich, ohne +die Fachlogik anzufassen. + +--- + +## 3. Modul-Stand + +| Modul | Stand | Offen | +|---|---|---| +| **CopyTrading** | Produktiv nutzbar. Rentabilitätsplan und alle Review-Fixes umgesetzt | CLOB-User-/Market-WSS-Kanal + Orderbuch-Check, Partial-Fill-Verdrahtung, echte `fee_rate_bps` — alles live-gebunden | +| **ResolutionFarming** | Slices 0–5 fertig: Logik, Persistenz, Scanner, UI, Demo-Execution, Monitor | Live-Anbindung und On-Chain-Redeem | +| **Supervisor** | S-0 bis S-4 komplett: Journal, Dossiers, OpenRouter-Agent, Profile, Berichte, Counterfactual | Predictalytics-Werkzeuge (API existiert noch nicht), Live-Key-Test | +| **Accounting** | A-1 Ingest, A-2 Abrechnung/BWA/FX und A-4 Export (CSV + PDF) sind gebaut | **A-3 US-Steuerschicht fehlt vollständig** — kein `UsTaxEngine`, kein Form-8949/Schedule-D | + +--- + +## 4. Abgeschlossen + +- **Modularisierung** (Phasen 0–6) — Core + vier Module, kein Monolith mehr +- **MySQL-Migration** — Mongo restlos raus, `core_`/`mod_`-Schema, Migration über + `--migrate-json` / `--verify-mysql` gelaufen +- **Linux-Portierung, UI-Teil** — WinForms vollständig nach Avalonia portiert (A1–A4), + LiveCharts2 statt ScottPlot, kategorisierter `SettingsEditor` statt `PropertyGrid` +- **Einfenster-Shell** — Mehrfenster-Launcher durch eine Shell mit Seitenleiste ersetzt +- **Deploymentcenter-Integration** (D-0 bis D-5) — Lizenz, Watchdog, Fehler-Reporting, + Auslieferung und Erstinstallation, **code-seitig** +- **Sicherheit F1–F6** — AES-GCM at-rest für Keys über `POLYTRADER_MASTER_KEY`, keine + Secrets in Argumenten oder Logs +- **WinForms-Ausbau** (P11/L5) und **LicenseLabrador-Ablösung** (D-6) — 22.08.2026 + +--- + +## 5. Offen + +### 5.1 Blockiert durch Live-Betrieb / Zielland + +Diese Punkte sind **nicht** liegengeblieben — sie lassen sich am Schreibtisch nicht +abschließen, weil sie echtes Geld, echte Marktdaten oder den Zielserver brauchen. + +| Punkt | Was fehlt | +|---|---| +| **A5 — Abnahme der Oberfläche** | Jedes Fenster mit echten Daten durchklicken: Spaltenbreiten, Umbrüche, Splitter, KPI-Kacheln. Vergleich gegen einen Worktree des Tags `winforms-final` | +| **Deploymentcenter live** | Abnahme von D-1/D-2 (Watchdog, Lizenz), Live-Abnahme von D-5 (Erstinstallation). Serverseitig fehlen: Release-Signierschlüssel und Installationskonto | +| **Alte Dienste abschalten** | `watchdog.mhdf.de` und `license.mhdf.de` — erst **nach** der Live-Abnahme, sonst fehlt die Rückfallebene | +| **Master-Key im Zielland** | Master-Key setzen und Bestandsdaten migrieren; Alchemy- und Mullvad-Zugänge rotieren | +| **Modul-Livegang** | CopyTrading-WSS-Kanäle, ResolutionFarming-Anbindung und On-Chain-Redeem (siehe §3) | +| **systemd / Feldtest** | Unit liegt unter `deploy/polytrader.service`, ist aber nicht im Betrieb erprobt | + +### 5.2 Geplant, aber bewusst nicht gebaut + +Vollständige Pläne, **null Zeilen Code** — jederzeit startbar, nichts davon blockiert +etwas anderes: + +| Vorhaben | Art | +|---|---| +| **Modul MarketMaking** | Liquidity Rewards + Spread. Setzt das Orderbuch-Fundament aus CopyTrading Phase 1 voraus | +| **Modul BundleArbitrage** | Preissummen-Anomalien. Startet bewusst als reines Mess-Modul | +| **Modul DataDriven** | Konzept, noch kein Umsetzungsplan | +| **StrategieDrift** | Verhaltensänderung eines Masters erkennen, bevor das PnL es zeigt | +| **AI-Auflösequalität** | LLM bewertet je Markt das Resolution-Risiko als Entry-Gate | +| **AutoRedeem** | On-Chain-Auto-Redeem, modulweise schaltbar. Höchste Kritikalitätsstufe | +| **Accounting A-3** | US-Steuerschicht (FIFO-Lot-Matching, Form 8949, Schedule D) | + +### 5.3 Technische Restposten + +| Punkt | Details | +|---|---| +| **Keine CI** | Weder `.github/workflows` noch `.gitea/workflows` — es existiert keinerlei Automatisierung. Build und Tests laufen ausschließlich von Hand. **Der größte strukturelle Mangel** | +| **15 Build-Warnungen** | Alle im Avalonia-Projekt: 13 × `CS8618` (Felder in Fenster-Konstruktoren), 1 × `CS8848` (Vorrang bei `switch`), 1 × `CS8602` (möglicher Nullverweis in `PdfExporter.cs:40`). Die letzten beiden sind einen Blick wert | +| **TerminalLogger** | Stempelt mit `DateTime.Now` statt der konfigurierten `AppTimeZone`. Auf einem UTC-Linuxserver passen Logdatei-Grenzen nicht zur angezeigten Uhrzeit. Umstellung auf `Microsoft.Extensions.Logging` steht ohnehin aus | +| **God-Methoden** | `PollLiveAccountsAsync`, `ProcessAccountOrderAsync`; duplizierte Closed-Trade-Erzeugung (Phase 7) | +| **Aufgeschobene Follow-ups** | TradeId-Autoincrement, Dedup, Performance (aus dem CopyTrading-Plan) | + +--- + +## 6. Der Frühjahrsputz vom 22.08.2026 + +Zwei Commits: `dd8da3f` sicherte den unversionierten Arbeitsstand (58 Dateien: die +Deploymentcenter-Integration und die Einfenster-Shell lagen uncommittet im Arbeitsbaum), +`bf8048b` räumte auf. + +**Entfernt** — 124 Dateien, 10.619 Zeilen weniger: + +- Das **WinForms-Projekt** samt `Ui/`, `Models/`, `Licensing/`, `services/`, `Properties/`, + `Resources/icons/`, `Program.cs`, `favicon.ico` und `PolyTrader.App.csproj` +- **`LicenseLabrador.Client`** aus `lib/nuget` und dem Quellen-Mapping +- **`agentspace/`** (30 Dateien: WinForms-Designer-Patcher, `fix_mongo.py`, Wegwerfskripte) +- `Ideen-fuer-Mittwoch.txt`, das Root-`appsettings.json` (Duplikat), lokal `MongoDB/`, + `data.db` und eine `.bak`-Datei + +**Beim Aufräumen aufgefallen und mitbehoben:** + +- Der Rückfall-Tag **`winforms-final` lag nur lokal** und war nicht auf dem Server — genau + die Sicherung, auf die sich die Doku als Fallback beruft. Jetzt gepusht. +- Die Avalonia-App band ihre **PNG-Symbole aus dem Repo-Root** ein (`..\..\Resources\*.png`) + und hätte sie beim Ausbau verloren. Sie liegen jetzt in + `src/PolyTrader.App.Avalonia/Assets/`; der `avares://`-Pfad blieb gleich. + +**Bewusst *nicht* entfernt**, obwohl Pläne es nahelegten: + +- **`Newtonsoft.Json` im Core** ist kein toter Ballast, sondern ein Sicherheits-Pin: + Nethereum 6.1.0 würde sonst transitiv auf 11.0.2 auflösen (GHSA-5crp-9r3c-p9vr). +- **Die `Watchdog*`-Felder in `ServerSettings`.** Schnitt D-6 verlangte ihre Entfernung, + aber D-1 hatte sie zuvor auf die Deploymentcenter-API *umgewidmet*. Sie sind in Gebrauch; + ein Entfernen wäre ein Rückschritt gewesen. +- **`Resources/*.png`** — siehe oben. + +**Gesucht und nicht gefunden:** toter Code. Eine Prüfung aller 285 Typen in `src/` gegen +ihre Verwendung ergab keinen einzigen verwaisten Typ. Die scheinbaren Treffer waren +EF-Design-Time-Factories und Migrationen (per Reflection genutzt) sowie Null-Stubs, die +über DI registriert sind. Auch leere `catch {}`-Blöcke: keine. + +**Doku nachgezogen:** Der Modularisierungsplan führte die Phasen 3–6 als „IN ARBEIT" +beziehungsweise offen, obwohl sie seit Wochen erledigt waren — die Häkchen sind jetzt am +Code nachgeprüft gesetzt. Der Watchdog/LicenseLabrador-Plan ist als **abgelöst** +gekennzeichnet, `ANALYSE-Linux-Portierung.md` steht auf Revision 6. + +--- + +## 7. Doku-Landkarte + +| Dokument | Rolle | +|---|---| +| `PROJEKTSTAND.md` | **Dieses Dokument** — Einstieg und Gesamtüberblick | +| `ANALYSE-Linux-Portierung.md` | Rahmen der Linux-Fähigkeit, Fahrplan P1–P11 / L1–L5 | +| `LEITFADEN-Avalonia-Portierung.md` | Arbeitsregeln für die Oberfläche. **Vor jeder UI-Arbeit lesen** | +| `UI-SPEZIFIKATION-WinForms.md` | Beschreibung der alten Oberfläche — Vergleichsvorlage für A5 | +| `umsetzungsplaene/` | Detailpläne je Vorhaben | +| `konzepte/` | Vorhaben ohne Umsetzungsplan | +| `sicherheit/SICHERHEITSKONZEPT.md` | Konzept + **wiederkehrende Audit-Checkliste**. Die offenen Kästchen dort sind eine Vorlage, keine Rückstände | +| `IDEENSAMMLUNG-Feldtest-2026-08.md` | Beobachtungen aus dem laufenden Einsatz. Nur sammeln | +| `.agents/rules/clob.md` | Regeln für alles, was Geld bewegt | + +**Abgelöst, nur noch Verlauf:** `UMSETZUNGSPLAN-Watchdog-LicenseLabrador-Integration.md` + +--- + +## 8. Empfohlene nächste Schritte + +1. **A5 durchklicken** — die Oberfläche mit echten Daten abnehmen. Blockiert nichts + technisch, ist aber die letzte offene Zusage der UI-Portierung. +2. **CI aufsetzen** — der größte strukturelle Mangel. Ein Workflow, der `dotnet build` und + `dotnet test` auf Linux fährt, hätte den plattformneutralen Zustand von allein gehalten. +3. **Deploymentcenter live abnehmen** — danach können die Altdienste abgeschaltet werden, + womit zwei Sicherheits-Auflagen von selbst entfallen. +4. **Erst dann neue Module.** MarketMaking und BundleArbitrage sind fertig geplant und + warten — aber Neuentwicklung vor der Abnahme des Bestehenden vergrößert nur die Menge + an ungeprüftem Code. diff --git a/docs/README.md b/docs/README.md index dffcdf2..4a7240a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -4,6 +4,18 @@ Zentrale Ablage für Konzepte, Umsetzungspläne, Ideen und Fach-/Business-Dokume Unterordnern organisiert. Code-gekoppelte Umsetzungspläne bleiben bewusst in **diesem** Repo (statt in einem separaten Docs-Repo), damit „Plan → umsetzende Commits" nachvollziehbar bleibt. +## Wo anfangen? + +**[PROJEKTSTAND.md](./PROJEKTSTAND.md)** — Gesamtüberblick: was existiert, was fertig ist, +was offen ist und warum. Der Einstiegspunkt für alle, die den Stand wissen wollen, ohne sich +durch die Detailpläne zu lesen. + +Daneben liegen im Wurzelverzeichnis dieses Ordners drei querschnittliche Dokumente: +`ANALYSE-Linux-Portierung.md` (Rahmen und Fahrplan der Plattformneutralität), +`LEITFADEN-Avalonia-Portierung.md` (**Arbeitsregeln — vor jeder UI-Arbeit lesen**) und +`UI-SPEZIFIKATION-WinForms.md` (Beschreibung der abgelösten Oberfläche, Vergleichsvorlage +für die Abnahme A5). + ## Struktur - **`konzepte/`** — Konzepte für neue Module/Features (das „Warum" und „Was", vor der Umsetzung). @@ -17,11 +29,18 @@ einem separaten Docs-Repo), damit „Plan → umsetzende Commits" nachvollziehba - `UMSETZUNGSPLAN-Modul-MarketMaking.md` — Strategiemodul MarketMaking (Phase-1-blockiert). - `UMSETZUNGSPLAN-Modul-BundleArbitrage.md` — Strategiemodul BundleArbitrage (Phase-1-blockiert). - `UMSETZUNGSPLAN-AutoRedeem.md`, `UMSETZUNGSPLAN-AI-Aufloesequalitaet.md`, `UMSETZUNGSPLAN-StrategieDrift.md` + - `UMSETZUNGSPLAN-Deploymentcenter-Integration.md` — Lizenz, Watchdog, Fehler-Reporting und + Auslieferung über das Deploymentcenter (P3c). + - ⛔ `UMSETZUNGSPLAN-Watchdog-LicenseLabrador-Integration.md` — **abgelöst** durch den + Deploymentcenter-Plan, bleibt nur als Verlaufsdokument liegen. - **`ideen/`** — frühe Ideen/Explorationen, bevor sie zu einem Konzept oder Umsetzungsplan reifen. - **`pruefplaene/`** — Prüf-/Validierungspläne. - `PREDICTALYTICS-PRUEFPLAN-Master-Auswahl.md` — Master-Trader-Auswahl (separates Predictalytics-Projekt). - **`steuer/`** — Steuer-/Buchhaltungs-Fachdokumente & Vorlagen (auch zum Weitergeben an Berater). - `Accounting-US-Tax-Questionnaire.md` — Fragebogen (EN) für die US-Steuerberaterin (Florida LLC). +- **`sicherheit/`** — Sicherheitskonzept und die wiederkehrende Audit-Checkliste. + - `SICHERHEITSKONZEPT.md` — die offenen Kästchen in Abschnitt 6 sind eine **Vorlage für jedes + Release**, kein Rückstand. ## Konventionen - Neue Konzepte: `KONZEPT-*.md` → `konzepte/`. Neue Umsetzungspläne: `UMSETZUNGSPLAN-*.md` → `umsetzungsplaene/`. diff --git a/docs/umsetzungsplaene/UMSETZUNGSPLAN-Modularisierung.md b/docs/umsetzungsplaene/UMSETZUNGSPLAN-Modularisierung.md index 4d1b3b5..8496d6e 100644 --- a/docs/umsetzungsplaene/UMSETZUNGSPLAN-Modularisierung.md +++ b/docs/umsetzungsplaene/UMSETZUNGSPLAN-Modularisierung.md @@ -1,8 +1,18 @@ # Umsetzungsplan: Modularisierung PolyTraderSharp -> Stand: 2026-07-01 -> Ziel: Umbau des monolithischen WinForms-Copytraders in ein modulares System -> mit einem schlanken **Core** und unabhängigen **Modulen**. Erstes Modul: **Copytrading**. +> **Stand: 22.08.2026 — Ziel erreicht, Plan weitgehend abgearbeitet.** +> Ursprünglicher Plan vom 01.07.2026. Ziel war der Umbau des monolithischen +> WinForms-Copytraders in ein modulares System mit schlankem **Core** und unabhängigen +> **Modulen**. Erstes Modul: **Copytrading**. +> +> **Was daraus geworden ist:** Der Core steht, und es sind **vier** Module entstanden — +> CopyTrading, ResolutionFarming, Supervisor und Accounting. Die Phasen 0–6 sind +> abgeschlossen, der WinForms-Monolith ist am 22.08.2026 vollständig aus dem Repo entfernt. +> Offen sind nur noch zwei bewusst zurückgestellte Nacharbeiten aus Phase 7. +> +> ⚠️ **Die Phasen 3–6 waren bis zum 22.08.2026 fälschlich als „IN ARBEIT" bzw. offen +> markiert** — die Arbeit war längst getan, der Plan wurde nur nicht mitgezogen. Die +> Häkchen unten sind am Code nachgeprüft, nicht aus der Erinnerung gesetzt. --- @@ -208,7 +218,7 @@ Modul-Instanz. - [ ] *Offen (bewusst später):* Alchemy-Key / Mullvad-Account / Threema bleiben vorerst im GUI-editierbaren `server_settings.xml` (kein Konflikt mit Settings-Tab). -### Phase 3 — Persistenz-Abstraktion (DB noch Mongo) *(IN ARBEIT)* +### Phase 3 — Persistenz-Abstraktion *(ABGESCHLOSSEN — nachgetragen 22.08.2026)* - [x] **3a** (`8b3264f`): Core-Modelle `AccountState`/`Position`/`MarketData` in den Core verschoben (Namespace `PolyTraderSharp.Models` beibehalten), MongoDB.Driver-Paket im Core. - [x] **3b** (`ed5d6e3`): Repository-Interfaces + Mongo-Implementierungen im Core @@ -217,13 +227,13 @@ Modul-Instanz. - [x] **3d — Hot-Path** (`a0e367e`, `0c6fc6a`): TraderMonitorService + CopyTradingEngine auf `IPositionRepository`/`IMarketRepository`/`IAccountRepository` umgestellt. `_db` aus CopyTradingEngine komplett entfernt; Verhalten unverändert. -- [ ] **frm_main-UI:** Account/Market/Demo-Position-Zugriffe → wird zusammen mit der - UI-Zerlegung in Phase 5 migriert (vermeidet Wegwerf-Arbeit). -- [ ] *Offen für Phase 5:* generisches `ITradeLogRepository` (Core) + `ICopyTradeLogRepository` - + `ITraderRepository` (Modul), sobald `ClosedTrade`/`TrackedTrader` ins Modul wandern. -- [ ] **Ergebnis (Ziel):** Kein direkter DB-Zugriff mehr außerhalb der Repository-Schicht. +- [x] **frm_main-UI:** erledigt — `frm_main` existiert nicht mehr (Avalonia-Portierung, + Rest mit dem WinForms-Ausbau am 22.08.2026 gelöscht). +- [x] Generisches `ITradeLogRepository` (Core) + `ICopyTradeLogRepository` + `ITrackedTraderRepository` + (Modul) sind gebaut und in Gebrauch. +- [x] **Ergebnis erreicht:** Kein direkter DB-Zugriff mehr außerhalb der Repository-Schicht. -### Phase 4 — Core herauslösen *(IN ARBEIT)* +### Phase 4 — Core herauslösen *(ABGESCHLOSSEN — nachgetragen 22.08.2026)* - [x] **4.1** (`9039af8`): TerminalLogger, JobManager, JobStatusRow → Core; toten Stub `logging.cs` gelöscht. - [x] **4.2** (`eebe992`): PolymarketClobClient → Core (+ Nethereum.Web3), reines Verschieben. @@ -235,9 +245,9 @@ Modul-Instanz. - [x] **4.6a** (`9c068b4`): CopySignal + PolymarketApiService → Core. - [x] **4.7** (`0ffc041`): MullvadVpnService + ThreemaService (+ Threema-Lib-Ref) → Core; toter Stub `mullvad.cs` gelöscht. -- [ ] **BLOCKIERT durch TradingState-Split (→ Phase 5):** MarketSyncService, - AlchemyWebsocketService, PolymarketWssClient, SnapshotService nutzen `TradingState` - (MarketCache/Accounts/globale Flags). Sie können erst nach dem Split in den Core. +- [x] **Ehemals blockiert durch den TradingState-Split:** aufgelöst. `MarketSyncService` und die + Streaming-Infrastruktur liegen im Core (`src/PolyTrader.Core/Streaming/`); `PolymarketWssClient` + ist bewusst im CopyTrading-Modul geblieben, weil er modulspezifisch filtert. - [x] **Ergebnis:** Core baut eigenständig und enthält jetzt: Modelle (Account/Position/ Market/CopySignal/JobStatusRow/ServerSettings), Repository-Schicht, Config, Logging, JobManager, CLOB-Client, API-Service, Mullvad, Threema, IPolyTraderModule. @@ -253,7 +263,7 @@ Dreh- und Angelpunkt für Phase 5. > Signal). Das entkoppelt die Polymarket-Infrastruktur sauber in den Core. Der Channel/Workflow > bleibt Copytrading. Umbenennung zu `TradeSignal` optional/später. -### Phase 5 — CopyTrading-Modul herauslösen *(IN ARBEIT)* +### Phase 5 — CopyTrading-Modul herauslösen *(ABGESCHLOSSEN — nachgetragen 22.08.2026)* - [x] **5.1** (`55050a1`): Modul-Modelle (TrackedTrader, TraderAnalyticsResult, MasterTraderHistoryRecord) ins Modul verschoben. - [x] **5.2** (`f8d395b`): **TradingState-Split** — Core `TradingState` (globale Schalter, @@ -268,11 +278,11 @@ Dreh- und Angelpunkt für Phase 5. (+ Mongo-Impl) im Modul; `closed_trades`-Zugriffe der Services (TraderMonitor, Persistence, WSS, TraderAnalytics) auf das Repo umgestellt. TraderMonitor nutzt kein `_db` mehr. frm_main/Program.cs bleiben auf `_db`. -- [ ] **5.3b (jetzt unblockiert):** Modul-Services physisch ins Modul-Projekt verschieben: - TraderMonitorService, CopyTradingEngine, TraderAnalyticsJob, MasterTraderAnalyticsJob. - (Vorher: reststehende `PolyTraderSharp.Extensions`-Usings in CopyTradingEngine entfernen.) -- [ ] **5.3-WSS 2/2:** `CopyTradingBlockchainListener` → Modul (eigener Key + Filter); - API-Keys → Modul-Settings. Analog `PolymarketWssClient`. +- [x] **5.3b:** erledigt — `TraderMonitorService`, `CopyTradingEngine`, `TraderAnalyticsJob`, + `MasterTraderAnalyticsJob` und `PersistenceService` liegen unter + `src/PolyTrader.Modules.CopyTrading/Services/`. +- [x] **5.3-WSS 2/2:** erledigt — `PolymarketWssClient` liegt im Modul, die generische + Verbindungsschicht (`IBlockchainWssClient` + Factory) im Core. - **UI-Trennung (Launcher-Modell, entschieden 2026-07-01):** Hauptfenster = schlanke Startleiste; jede Ansicht öffnet als eigenständiges Fenster. Module liefern designbare `UserControl`s via `IPolyTraderModule.RegisterUi` / `IModuleUiHost`. `frm_main` bleibt @@ -280,32 +290,41 @@ Dreh- und Angelpunkt für Phase 5. - [x] UI-Contract im Core (`IModuleUiHost`, `ModuleView`, `RegisterUi`) — `26dd68a`. - [x] Proof-of-Pattern: `LauncherForm` + `ViewHostForm` + `ShellUiHost` + erste View `TerminalView` (designbar); App startet Launcher — `3503bbb`. - - [ ] Restliche Views view-für-view extrahieren: - **App/Core:** Jobs, Server Settings, Dashboard (Overview), License, Accounts (Slave), - Offene Positionen. **Modul:** Master-Traders, Top/Flop-Analytics, Geschlossene Trades. - - [ ] `frm_main` (Legacy) entfernen, sobald alle Views raus sind. -- [ ] `CopyTradingModule : IPolyTraderModule` implementieren (Services + UI-Tabs + - Settings-Sektion + Modul-Log + Start/Stop). -- [ ] Dualen Trade-Log verdrahten: beim Schließen kopierter Trades in Core-Log **und** - Copytrading-Log schreiben. -- [ ] Latenten Collection-Namensbug beheben (`traders` vs. `trackers`). -- [ ] **Ergebnis:** Copytrading ist ein eigenständiges, entfernbares Modul. + - [x] Alle Views extrahiert. Das Launcher-Modell wurde inzwischen selbst wieder abgelöst: + seit dem UI-Redesign gibt es **eine** Shell mit Seitenleiste + (`src/PolyTrader.App.Avalonia/Views/ShellWindow.axaml`) statt vieler Einzelfenster. + - [x] `frm_main` (Legacy) entfernt. +- [x] `CopyTradingModule : IPolyTraderModule` ist implementiert — ebenso + `ResolutionFarmingModule`, `SupervisorModule` und `AccountingModule`. +- [x] Dualer Trade-Log verdrahtet (Core-Log + Copytrading-Log). +- [x] Collection-Namensbug (`traders` vs. `trackers`) mit der MySQL-Migration hinfällig — + relationale Tabellen mit festem Schema statt Mongo-Collections. +- [x] **Ergebnis erreicht:** Copytrading ist ein eigenständiges, entfernbares Modul; drei + weitere Module sind nach demselben Muster entstanden. -### Phase 6 — MySQL-Migration -- [ ] EF Core + Pomelo einrichten; relationales Schema modellieren - (u.a. `positions` mit `account_id` statt Collection-per-Account; - `trader_accounts` Join-Tabelle für `AssignedAccountIds`). -- [ ] Zweite Repository-Implementierung (MySQL) hinter den bestehenden Interfaces. -- [ ] Einmaliges Migrationsskript Mongo → MySQL (agentspace/scripts). -- [ ] Umschalten per Konfiguration; Mongo/LiteDB/Shim + `data.db` entfernen. +### Phase 6 — MySQL-Migration *(ABGESCHLOSSEN — nachgetragen 22.08.2026)* +- [x] EF Core + Pomelo eingerichtet, relationales Schema modelliert; Tabellen mit den Präfixen + `core_` und `mod_`, Migrationen je Projekt unter `Persistence/Ef/Migrations/`. +- [x] Repository-Implementierungen auf EF Core hinter den bestehenden Interfaces. +- [x] Migration der Altdaten über die CLI-Schalter `--migrate-json` und `--verify-mysql` + (statt eines Skripts in `agentspace/scripts`). +- [x] Mongo vollständig entfernt: kein `MongoDB.Driver`- oder `LiteDB`-Paket mehr in irgendeiner + `.csproj`, kein Shim. `data.db` und die `MongoDB/`-Exporte sind am 22.08.2026 auch lokal + gelöscht worden. -### Phase 7 — Nacharbeiten *(optional, später zu priorisieren)* -- [ ] Test-Projekt: Risk-/Entscheidungslogik als reine Funktionen extrahieren & testen. -- [ ] God-Methoden splitten (`PollLiveAccountsAsync`, `ProcessAccountOrderAsync`); +### Phase 7 — Nacharbeiten *(teilweise erledigt — Stand 22.08.2026)* +- [x] Test-Projekt: Risk-/Entscheidungslogik als reine Funktionen extrahiert und getestet — + **476 Tests** grün. +- [x] Leere `catch {}` beseitigt — in `src/` findet sich kein einziger leerer Catch-Block mehr. +- [x] Secrets-Verschlüsselung umgesetzt, allerdings **nicht mit DPAPI**: DPAPI ist Windows-only und + hätte die Linux-Portierung blockiert. Stattdessen AES-GCM at-rest über + `Security/SecretProtection.cs` + `EncryptedStringConverter`, Schlüssel aus + `POLYTRADER_MASTER_KEY` (siehe `Security/MasterKeyResolver.cs`). +- [ ] **Offen:** God-Methoden splitten (`PollLiveAccountsAsync`, `ProcessAccountOrderAsync`); duplizierte Closed-Trade-Erzeugung zentralisieren. -- [ ] Leere `catch {}` durch gezieltes Logging ersetzen. -- [ ] Secrets-Verschlüsselung (DPAPI) für PrivateKey/ApiSecret/ApiPassphrase. -- [ ] TerminalLogger auf `Microsoft.Extensions.Logging` + UI-Sink umstellen. +- [ ] **Offen:** `TerminalLogger` auf `Microsoft.Extensions.Logging` + UI-Sink umstellen. Hängt mit + dem Zeitzonen-Punkt zusammen (Abschnitt C im Avalonia-Leitfaden): der Logger stempelt mit + `DateTime.Now` statt der konfigurierten `AppTimeZone`. ---