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

11 KiB
Raw Blame History

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 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 §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 §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.