Files
PolyTraderSharp/docs/PROJEKTSTAND.md
T
RichardandClaude Opus 5 5507db3e32 CI fuer Gitea Actions: Build und Tests auf Linux plus Waechter gegen Rueckfaelle
Die Plattformneutralitaet war nach dem WinForms-Ausbau eine Momentaufnahme: eine
einzige net10.0-windows-Zeile oder ein "using System.Drawing" genuegt, und der
Linux-Build ist kaputt, ohne dass es auf einer Windows-Maschine auffaellt - dort
baut es weiter. Genau das faengt die CI ab, und zwar auf Linux.

.gitea/workflows/ci.yml, zwei Jobs auf ubuntu-latest:

- build-test: restore, build, die 476 Tests (brauchen keine DB, laufen gegen
  EF-InMemory), Linux-Publish. Der Publish ist kein Selbstzweck - dort faellt
  auf, wenn ein Paket doch windows-only ist. Anschliessend wird geprueft, dass
  die Executable, appsettings.json, setup.json und libSkiaSharp.so wirklich im
  Ergebnis liegen.
- guard: keine windows-TFMs, kein UseWindowsForms/UseWPF, keine windows-only
  using-Direktiven, keine versionierten Secret-Dateien, keine anfaelligen Pakete.

Alle Waechter sind in beide Richtungen gegengeprueft: sie schlagen bei
simulierten Regressionen an (windows-TFM, UseWindowsForms, using System.Drawing,
getrackte packager.config.json samt dc_sub_-Token, Newtonsoft 11.0.2) und
schweigen beim Ist-Zustand. Die Namespace-Pruefung trifft bewusst nur echte
using-Direktiven: im Bestand steht an vielen Stellen erklaert, WARUM
System.Drawing nicht verwendet wird, und das darf keinen Fehlalarm ausloesen.

Der Schwachstellen-Check ist Punkt 1 der wiederkehrenden Audit-Checkliste aus
dem Sicherheitskonzept - laeuft ab jetzt bei jedem Push statt quartalsweise von
Hand. Er wuerde zum Beispiel anschlagen, wenn der Newtonsoft-Pin im Core faellt.

Bewusst kein -warnaserror: die 15 vorhandenen Warnungen muessten erst weg, sonst
ist die CI ab dem ersten Tag rot und wird ignoriert.

WICHTIG - die CI laeuft noch nicht: auf der Gitea-Instanz ist kein Actions-Runner
registriert (auf Repo-, Benutzer- und Instanzebene geprueft, ueberall 0).
has_actions ist true, es fehlt nur der Runner. Einrichtung Schritt fuer Schritt
in docs/LEITFADEN-CI.md Abschnitt 3.

.gitattributes neu: erzwingt LF fuer .yml/.sh/.service. Entwickelt wird mit
autocrlf=true auf Windows, ausgefuehrt auf Linux - ein Shell-Skript mit CRLF
scheitert dort mit irrefuehrenden Meldungen. Bisher gab es keine .gitattributes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 11:25:01 +02:00

200 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 05 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 06) — 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 (A1A4),
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 F1F6** — 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 |
|---|---|
| **CI: Workflow da, Runner fehlt** | [`.gitea/workflows/ci.yml`](../.gitea/workflows/ci.yml) ist angelegt (Build + 476 Tests + Linux-Publish auf Linux, dazu Wächter gegen windows-spezifische Rückfälle, versionierte Secrets und anfällige Pakete). **Auf der Gitea-Instanz ist aber kein Runner registriert** — geprüft auf Repo-, Benutzer- und Instanzebene. Bis der Runner steht, läuft der Workflow nicht. Einrichtung: [LEITFADEN-CI.md](./LEITFADEN-CI.md) §3 |
| **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 36 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 P1P11 / L1L5 |
| `LEITFADEN-Avalonia-Portierung.md` | Arbeitsregeln für die Oberfläche. **Vor jeder UI-Arbeit lesen** |
| `LEITFADEN-CI.md` | Was die CI prüft und wie der Gitea-Runner eingerichtet wird |
| `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 scharf schalten** — der Workflow liegt, es fehlt nur der Runner (etwa 10 Minuten,
siehe [LEITFADEN-CI.md](./LEITFADEN-CI.md) §3). Erst dann hält der plattformneutrale
Zustand von allein; bis dahin ist er nur eine Momentaufnahme.
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.