Zielframework aller Projekte auf net10.0 (WinFormsHost: net10.0-windows),
zentral in Directory.Build.props statt je csproj. SatelliteResourceLanguages
ebenfalls zentralisiert.
Neue Directory.Packages.props mit ManagePackageVersionsCentrally: 21 Pakete,
Versionsangaben aus allen csproj entfernt.
EF Core bleibt bewusst auf 9.0.18 mit Pomelo 9.0.0. Pomelo hat keine
EF-Core-10-Version; 9.0.0 pinnt EntityFrameworkCore.Relational auf
[9.0.0, 9.0.999]. Die EF-9-Pakete zielen auf net8.0 und laufen auf der
net10.0-Runtime. Begruendung als Kommentar in Directory.Packages.props.
Uebrige Pakete auf aktuellen Stand: Swashbuckle 10.2.3 (ohne Bruchstellen),
Serilog 4.4.0, Microsoft.Extensions 10.0.10, Test-SDK 18.8.1, coverlet 10.0.1.
Sicherheits-Pin: SQLitePCLRaw 2.1.12 statt transitiv 2.1.10
(GHSA-2m69-gcr7-jv3q, High). Dazu CentralPackageTransitivePinningEnabled.
Build: 0 Fehler, 8 Warnungen (alle vorbestehend).
Tests: 100 bestanden, 0 Fehler, 1 uebersprungen, Testhost net10.0.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Vorarbeiten fuer die Linux-/NET-10-Portierung (siehe docs/PLAN-Linux-Portierung.md).
DateTime.TryParse ohne DateTimeStyles liefert bei Z-Zeitstempeln Kind=Local und
rechnet in Lokalzeit um. An 13 Stellen in PolymarketProvider und LimitlessProvider
wurden so ISO-Zeitstempel der Plattform-APIs eingelesen, waehrend der Fallback
derselben Zuweisungen (DateTime.UtcNow) korrektes UTC schrieb - die Spalten
enthielten also gemischt verschobene und korrekte Werte. Auf einem Server mit
TZ=UTC haette derselbe Code andere Werte erzeugt als unter Windows.
Neuer Helfer Infrastructure/Helpers/DateParsing.cs kapselt das Parsen mit
InvariantCulture und AdjustToUniversal|AssumeUniversal; alle Fundstellen umgestellt.
Ausserdem:
- LimitlessProvider: Volume-Parsing auf InvariantCulture umgestellt
- EmbeddedWebServer: hartkodierten j:\-Absolutpfad als wwwroot-Fallback entfernt
Ein Backfill der Altdaten erfolgt bewusst nicht.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Shutdown-Event sendet stopped_graceful statt stopping: der Server
kennt "stopping" im Router, aber event_log.kind ist ein ENUM ohne
diesen Wert. Folge war HTTP 500 nach dem Zustandswechsel, das Event
fehlte in der Historie.
- Default-Source auf "Predictalytics" korrigiert (Schreibweise des
bereits angelegten Monitors auf dem Server).
Heartbeat, Metrics-Payload, Lizenzvalidierung und der Startpfad ueber
den Cache sind end-to-end gegen die Produktivserver getestet.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Bindet die beiden neuen Betriebsprojekte an:
- WatchdogHeartbeatService: periodischer POST /api/heartbeat an
watchdog.mhdf.de (Dead-Man's-Switch), stopping-Event beim Beenden,
Konfiguration ueber AppSettings-Kategorie "Watchdog". Fehler sind
best effort und beeintraechtigen die App nie.
- LicenseGuard + LicenseDialog: Lizenzpruefung vor dem Start der
MainForm, 12h-Revalidierung zur Laufzeit, Checksum-Haertung.
Produkt-Slug/Endpoint/Public-Key sind einkompiliert.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- D1/D2/D2c: Added TraderTraits entity, TraderTraitCalculator, Market Return Metrics (MedianWin, AvgWin, etc.), and trait filters
- D3: Implemented HF-Trader Tiering via IngestMode (Full, Aggregated, SnapshotOnly) and updated TradeHistoryWorker to respect tiers
- E1-E5: Added MasterStatus to Trader, TraderWindowMetrics for rolling analytics, Fingerprint metrics (PriceBandProfile, P50/P90), Copyability aggregates (Volume, Drift, Edge)
- E6: Implemented GET /api/traders/{id}/profile and GET /api/traders/correlation
- Replaced FIXPLAN-2026-07-09.md with FIXPLAN-TODO.md and FIXPLAN-DONE.md
- Cleaned up API docs and plan to use generic terms (removed hardcoded PolyTrader references)
- Added respective EF Core Migrations
- TraderDetailDto now exposes PnL7d/WinRate7d/PnL24h/WinRate24h and
CurrentBalance — the engine has computed these all along but the API
never delivered them.
- Removed POST /api/dev/repair-db: its raw SQL referenced non-existent
columns/tables (Trades.Type/Payout, Traders.LastPositionsUpdatedAt,
table "Jobs") and would have deleted ALL TraderPositions including
pruned-history conserves. The supported repair path is the WinForms
"Recalculate All Traders" action.
- Swagger tags for Jobs and Dev groups; full endpoint reference in
docs/API.md (kept generic — external consumers like PolyTrader adapt
to our API, not vice versa).
- FIXPLAN Teil E: master-selection gap analysis as generic extensions
(profile endpoint, out-of-sample window metrics, price-band profile
with per-band win rate, stop-loss ratio, copyability aggregates with
category fees, correlation endpoint, martingale trait).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>