From 1fd3671b422800085ccc2a59b5e6e8550b60e042 Mon Sep 17 00:00:00 2001 From: Richard Date: Sat, 22 Aug 2026 11:04:02 +0200 Subject: [PATCH] Projektstand dokumentiert; Modularisierungsplan auf den Iststand nachgezogen docs/PROJEKTSTAND.md neu: Einstiegsdokument mit Gesamtueberblick - Architektur, Modul-Stand, was abgeschlossen ist und was offen. Alle Angaben am Code nachgeprueft, nicht aus den Plandokumenten uebernommen. Die offenen Punkte sind danach getrennt, ob sie am Schreibtisch erledigt werden koennen oder echtes Geld/den Zielserver brauchen - das war vorher nirgends zusammengefasst. Modularisierungsplan korrigiert: Die Phasen 3 bis 6 standen auf "IN ARBEIT" beziehungsweise offen, obwohl die Arbeit seit Wochen getan war. Nachgeprueft und abgehakt sind unter anderem: - Phase 5: alle Modul-Services liegen im Modulprojekt, frm_main ist weg, alle vier Module implementieren IPolyTraderModule - Phase 6: komplett - kein MongoDB.Driver/LiteDB mehr in irgendeiner csproj - Phase 7 teilweise: 476 Tests, keine leeren catch-Bloecke mehr, Secrets-Verschluesselung umgesetzt (AES-GCM statt DPAPI, da DPAPI Windows-only ist und die Linux-Portierung blockiert haette) Offen bleiben aus Phase 7 nur God-Methoden und die TerminalLogger-Umstellung. Beim Nachpruefen aufgefallen: Accounting A-3 (US-Steuerschicht, Form 8949) ist entgegen der bisherigen Annahme nicht gebaut - es gibt keinen UsTaxEngine. A-2 und A-4 dagegen sind da. Im Projektstand vermerkt. docs/README.md verweist jetzt auf den Projektstand und fuehrt die bisher fehlenden Ordner sicherheit/ und den Deploymentcenter-Plan auf. Co-Authored-By: Claude Opus 5 --- docs/PROJEKTSTAND.md | 197 ++++++++++++++++++ docs/README.md | 19 ++ .../UMSETZUNGSPLAN-Modularisierung.md | 103 +++++---- 3 files changed, 277 insertions(+), 42 deletions(-) create mode 100644 docs/PROJEKTSTAND.md 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`. ---