0.1 OpenRouter-Schluessel aus appsettings.json entfernt. Laut Nutzer war er bereits inaktiv, eine Rotation beim Anbieter also nicht mehr noetig. Das Feld bleibt leer stehen, mit Hinweis daneben: der Schluessel gehoert in die Umgebungsvariable OpenRouter__ApiKey, die ohnehin Vorrang hat. Damit die Anwendung ohne Schluessel sauber laeuft, steigt OpenRouterApiClient jetzt frueh aus, statt zu senden. Vorher haette jeder Analyseversuch einen 401 erzeugt - der als Error im Fehler-Stream des Deployment Centers gelandet waere, worauf der Aufrufer die Fehlermeldung als JSON zu parsen versucht und einen zweiten Fehler erzeugt haette. Der Zustand wird einmal als Warning gemeldet. Die Konstante NotConfigured liegt im Interface, weil Application die Infrastructure-Schicht nicht referenziert. 1.2 Alle acht Nullable-Warnungen behoben, der Build ist jetzt warnungsfrei. Es waren durchweg Annotationsfragen, kein Verhalten aendert sich: * TradeRepository (6x) - die Parameterliste nimmt bewusst null auf, damit nullable Spalten als SQL-NULL geschrieben werden. Jetzt List<object?>. * TraderAnalyticsWorker - ThenInclude(o => o!.Market); der Lambda ist ein Ausdrucksbaum fuer EF und laeuft nie. * PolymarketProvider - raw.Question ?? ""; TruncateMarketStrings normalisierte den Wert einen Schritt spaeter ohnehin auf "". 1.3 Der Kategorie-Backfill holte den gesamten Marktbestand samt Event in den Speicher und verwarf den Grossteil sofort wieder. Die Einschraenkung auf Maerkte mit gefuellten Event-Tags steht jetzt in der Abfrage statt in der Schleife. Ergebnis unveraendert. Dabei einen eigenen Fehler in der Roadmap korrigiert: dort stand, dieser Backfill laufe "bei jedem Start". Das stimmt nicht - er gehoert zu RunRecalculateAllTradersAsync, der manuellen Wartungsaktion, die nur auf Knopfdruck laeuft. Die Startzeit war nie betroffen. Die falsche Aussage stand auch in STATUS.md und ist dort ebenfalls richtiggestellt. Build warnungsfrei, 126 Tests gruen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
133 lines
7.0 KiB
Markdown
133 lines
7.0 KiB
Markdown
# Predictalytics — Stand des Projekts
|
||
|
||
> Bestandsaufnahme vom **2026-08-23**, erstellt beim Frühjahrsputz. Jede Aussage hier ist
|
||
> gegen den Code geprüft, nicht aus den Plandokumenten übernommen — die waren zu diesem
|
||
> Zeitpunkt durchweg veraltet.
|
||
>
|
||
> Dieses Dokument beschreibt den **Ist-Stand**. Was ansteht, steht in
|
||
> [`ROADMAP.md`](ROADMAP.md); die abgelösten Plandokumente liegen unter
|
||
> [`docs/archiv/`](docs/archiv/).
|
||
|
||
---
|
||
|
||
## 1. Wo wir stehen
|
||
|
||
Predictalytics analysiert Polymarket-Trader auf ihre Eignung fürs Copytrading. Die
|
||
Anwendung ist **funktional vollständig und läuft im Betrieb**: 151.094 Trader und
|
||
38,2 Mio. Trades in der Produktivdatenbank (Stand 2026-08-08).
|
||
|
||
Der aktuelle Zweig ist `feature/linux-net10`. Er trägt die Portierung auf .NET 10 und
|
||
Avalonia und ist **noch nicht nach `main` gemerged** — `main` steht neun Commits zurück.
|
||
|
||
| | |
|
||
|---|---|
|
||
| Zielframework | net10.0, ein einziges für alle Projekte |
|
||
| Oberfläche | Avalonia 12.1.1 (Windows + Linux), zusätzlich ein Headless-Modus |
|
||
| Datenzugriff | EF Core **9** (bewusst; Pomelo hat keinen EF-10-Provider), 32 Migrationen |
|
||
| Tests | **126 grün, 1 bewusst übersprungen** |
|
||
| Build | fehlerfrei, 8 Nullable-Warnungen (siehe Abschnitt 5) |
|
||
|
||
### Aufbau
|
||
|
||
```
|
||
Predictalytics.Domain 1.321 Z. Entities, Enums, Repository-Interfaces
|
||
Predictalytics.Application 3.036 Z. Analytik, Scoring, Kalkulatoren
|
||
Predictalytics.Infrastructure 4.966 Z. EF-Kontext, Repositories, Provider (+65 Migrationsdateien)
|
||
Predictalytics.Worker 2.449 Z. 13 Hintergrunddienste
|
||
Predictalytics.Api 896 Z. Minimal-API-Endpunkte + WebUI (3.247 Z. HTML/JS/CSS)
|
||
Predictalytics.Hosting 1.972 Z. Plattformneutraler Kern: Kestrel, Worker, Lizenz, Heartbeat
|
||
Predictalytics.Shell 1.305 Z. Avalonia-Bedienhülle
|
||
Predictalytics.Application.Tests 3.216 Z. 126 Tests
|
||
```
|
||
|
||
`Predictalytics.Hosting` hängt an einem **Schwester-Repo**: `Deploymentcenter` muss neben
|
||
dem Predictalytics-Checkout liegen, sonst bricht der Build mit einer erklärenden Meldung ab.
|
||
|
||
---
|
||
|
||
## 2. Was fertig ist
|
||
|
||
Alles Folgende ist im Code belegt; die Belegstellen stehen in den archivierten Plandokumenten
|
||
unter [`docs/archiv/`](docs/archiv/).
|
||
|
||
* **Kernanalytik** ([`archiv/UMSETZUNGSPLAN.md`](docs/archiv/UMSETZUNGSPLAN.md), Phase 1): positionsbasierte PnL-Engine nach
|
||
Average-Cost mit sauberer Behandlung jeder `TradeSide`, marktbasierte Win-Rate,
|
||
Deep-Dive-Kennzahlen aus echter Preishistorie, Copytrading-Score aus gemessenem
|
||
Alpha-Verfall gegen das Markt-Tape.
|
||
* **Robustheit** (Phase 2): EF-Migrationen statt handgeschriebener `ALTER TABLE`,
|
||
entkoppelte Scoring-Pipeline, Log-Retention, Testprojekt. Alle fünf Bugs aus dem
|
||
Review-Pass vom 2026-07-01 sind behoben.
|
||
* **Speicher-Haushalt** ([`archiv/FIXPLAN-G-Speicher.md`](docs/archiv/FIXPLAN-G-Speicher.md)): budgetabhängiges Retention-Fenster,
|
||
Burst-Kompaktierung, Per-Kategorie-Edge.
|
||
* **Kategorie-Erkennung** ([`archiv/FIXPLAN-TODO.md`](docs/archiv/FIXPLAN-TODO.md), Teil F): kanonische Tag-Tabelle,
|
||
Rausch-Filter, Tag-Nachladen für On-Demand-Märkte, Offline-Backfill beim Start.
|
||
* **HF-Trader-Tiering** (Teil D): `IngestMode` mit Hysterese, wöchentliche Biopsie,
|
||
Aggregations-Buckets.
|
||
* **Web-UI** ([`archiv/FIXPLAN-UI-Ranglisten.md`](docs/archiv/FIXPLAN-UI-Ranglisten.md)): Showcase-Sektionen, serverseitige Sortierung
|
||
und Filterung.
|
||
* **Copytrading-Analytik**: Co-Movement samt Clusterung, Strategie-Drift, Edge-Freshness,
|
||
Copy-Portfolio, Insider-Feed — alle fünf Vorschläge der Roadmap sind umgesetzt und
|
||
in diesem Zweig enthalten.
|
||
* **Portierung** ([`archiv/PLAN-Linux-Portierung.md`](docs/archiv/PLAN-Linux-Portierung.md), Phasen 0–4): .NET 10, extrahierter
|
||
Hosting-Kern, Avalonia-Shell, abgesicherte Steuerendpunkte, plattformfeste Kultur- und
|
||
Log-Pfade. Der WinForms-Host ist entfernt.
|
||
* **Betriebsanbindung**: Lizenz, Watchdog, UpdateService, Fehler-Stream und Bugtracker
|
||
laufen alle über das Deployment Center.
|
||
|
||
---
|
||
|
||
## 3. Was offen ist
|
||
|
||
Die offenen Punkte stehen vollständig und nach Reihenfolge sortiert in
|
||
**[`ROADMAP.md`](ROADMAP.md)** — hier nur die drei, die den Blick aufs Ganze bestimmen:
|
||
|
||
1. **Ein echter OpenRouter-API-Key liegt im Klartext im Repository**
|
||
(`src/Predictalytics.Api/appsettings.json`, versioniert seit `7045002`). Er muss beim
|
||
Anbieter zurückgezogen und neu ausgestellt werden — ihn nur zu löschen hilft nicht, die
|
||
Git-Historie behält ihn. Roadmap 0.1.
|
||
2. **Die Portierung ist auf keinem Linux-System je gelaufen.** Der Code ist plattformneutral
|
||
gebaut, die Ende-zu-Ende-Prüfung vom 2026-08-08 lief aber unter Windows. Roadmap Stufe 2.
|
||
3. **Die Strategie-Klassifikation ist faktisch wirkungslos** — zwei Signale, der Großteil
|
||
der Trader landet auf `Unknown`, und die Logik steht doppelt da. Roadmap 3.1.
|
||
|
||
---
|
||
|
||
## 4. Zweige
|
||
|
||
`feature/linux-net10` enthält alle Feature-Zweige. Die folgenden sind vollständig darin
|
||
aufgegangen und können gelöscht werden:
|
||
|
||
```
|
||
copy-portfolio edge-freshness fingerprint-drift-foundation insider-follow-feed
|
||
integration smart-money-comovement smart-money-graph ui-ranglisten-showcases
|
||
ops-watchdog-license fix-event-description-truncation
|
||
```
|
||
|
||
`fix-event-description-truncation` war der einzige mit eigenem Stand; sein Fix und sein
|
||
Regressionstest stecken seit Commit `cb58e09` im Hauptzweig.
|
||
|
||
**Offen: der Merge nach `main`.** `main` steht neun Commits zurück und kennt weder die
|
||
Avalonia-Shell noch die Deploymentcenter-Anbindung.
|
||
|
||
---
|
||
|
||
## 5. Bewusst stehengelassen
|
||
|
||
Beim Aufräumen geprüft und **nicht** entfernt, weil Löschen hier Funktionsverlust wäre und
|
||
nicht Entrümpelung. Dieselbe Liste steht im Anhang der [`ROADMAP.md`](ROADMAP.md), damit sie
|
||
nicht versehentlich als Aufgabe wieder auftaucht:
|
||
|
||
| Was | Warum es bleibt |
|
||
|---|---|
|
||
| `Providers/Azuro/AzuroProvider.cs` | Platzhalter mit `IsImplemented => false`. Die Worker überspringen ihn sauber; er kostet nichts und markiert den Ausbaupfad. |
|
||
| `Providers/Limitless/` (3 Dateien) | **Voll implementierter** zweiter Marktplatz mit `IsImplemented => true`. Wird produktiv nur nicht bespielt. |
|
||
| `Services/CopytradingBacktestHarness.cs` (123 Z.) | Fertig implementierter Latenz-Sweep, per DI registriert, aber **von niemandem aufgerufen**. Entscheidung steht aus, siehe Roadmap 3.2. |
|
||
| `wwwroot/landing.html`, `wwwroot/docs.html` | Marketing-Seiten mit Preis-Abschnitt, vom Dashboard aus nicht verlinkt. Passen zur später angedachten Monetarisierung. |
|
||
| 8 Nullable-Warnungen | `TradeRepository.cs:94-102`, `PolymarketProvider.cs:357`, `TraderAnalyticsWorker.cs:152`. Bestehen seit Längerem; sie zu beheben ist Logikarbeit, kein Aufräumen. |
|
||
| 65 Migrationsdateien | Die Schemahistorie. Zusammenfassen ginge, ist aber riskant — siehe Roadmap 4.4. |
|
||
|
||
*(Ein hier zuvor notierter Nebenbefund — der Kategorie-Backfill lade beim Start alle Märkte
|
||
in den Speicher — war in zwei Punkten falsch: er läuft nicht beim Start, sondern nur in der
|
||
manuellen Aktion „Recalculate All Traders", und die Abfrage ist seit dem 2026-08-24
|
||
eingeschränkt. Siehe Roadmap 1.3.)*
|