Eine Roadmap statt neun Plandokumente; alte Plaene ins Archiv

Die offenen Punkte lagen ueber neun Dokumente verstreut, teils widersprechend,
teils mit Punkten, die laengst umgesetzt waren. ROADMAP.md fuehrt sie zusammen:
sechs Stufen, jeder Punkt gegen den Code geprueft.

Markierung ueber eine Legende, damit Konzepte nicht mit Aufgaben verwechselt
werden: dringend, eingeplant, Backlog, Konzept (durchdacht, aber bewusst nicht
eingeplant), liegt beim Nutzer, verworfen.

Stufen: 0 Sofort (OpenRouter-Key) - 1 Aufraeumen abschliessen (Merge nach main,
Nullable-Warnungen, Startup-Backfill) - 2 Portierung abschliessen (Linux-Erstlauf
und Verifikation, dann Deployment/CI) - 3 Analytik schaerfen (Strategie-
Klassifikation, Backtest-Harness, Track-Record im Score, Ranking) - 4 Daten-
haushalt (SQL des Nutzers) - 5 Ingest skalieren - 6 Monetarisierung vorbereiten.

Ein Anhang haelt fest, was geprueft und bewusst NICHT auf die Roadmap kam, damit
es nicht versehentlich wieder als Aufgabe auftaucht (Azuro/Limitless, die
Marketing-Seiten, Kaltarchiv, EF Core 10).

Archiv: FIXPLAN-DONE, FIXPLAN-G-Speicher, FIXPLAN-TODO, FIXPLAN-UI-Ranglisten,
UMSETZUNGSPLAN sowie ANALYSE-Linux-Portierung, PLAN-Linux-Portierung,
PLAN-Architektur-WebUI-Backend und PLAN-DatenIngest-Skalierung liegen jetzt
unter docs/archiv/ mit einer README, die jedes Dokument einordnet. Sie bleiben
als Begruendungs- und Detailquelle - die Roadmap nennt jeden Punkt knapp, die
Herleitung steht dort.

Dabei aufgefallen: die beiden nie gepflegten Plaene (Architektur, DatenIngest)
zeigten 40 offene Punkte, von denen die Haelfte umgesetzt war - Read/Control-
Split, /api/capabilities, CORS-Whitelist, Egress-Kanaele mit Cooldown und
Per-Kanal-Limiter, Ingest-Tiering. Nachgeprueft, abgehakt und mit Statusblock
eingeordnet, sonst waere das Archiv selbst eine Fehlerquelle.

Was dabei nur teilweise umgesetzt war, ist als Roadmap 5.3 aufgenommen
(Health-Statistik je Kanal, multi-homed pruefen, DB-Guard, Plausibilitaets-
pruefung), ebenso der nie durchgefuehrte Audit auf versteckte Writes in
Read-Endpunkten (6.1). Header-Rotation ist als verworfen markiert statt offen
zu bleiben: Verschleierung gegenueber Polymarket riskiert genau den Zugang, auf
dem das Projekt aufsetzt.

STATUS.md beschreibt jetzt nur noch den Ist-Stand und verweist fuer die offenen
Punkte auf die Roadmap, damit nichts doppelt gepflegt wird. CLAUDE.md nennt
beide Einstiege.

Build gruen, 126 Tests gruen, keine toten Links.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-08-23 18:46:00 +02:00
co-authored by Claude Opus 5
parent 1f230fe12c
commit 6975720dc6
14 changed files with 429 additions and 73 deletions
+24 -51
View File
@@ -4,8 +4,9 @@
> gegen den Code geprüft, nicht aus den Plandokumenten übernommen — die waren zu diesem
> Zeitpunkt durchweg veraltet.
>
> Dieses Dokument ist die Einstiegsseite. Die Detailpläne bleiben bestehen und tragen
> jetzt jeweils oben einen eigenen Statusblock.
> Dieses Dokument beschreibt den **Ist-Stand**. Was ansteht, steht in
> [`ROADMAP.md`](ROADMAP.md); die abgelösten Plandokumente liegen unter
> [`docs/archiv/`](docs/archiv/).
---
@@ -46,27 +47,28 @@ dem Predictalytics-Checkout liegen, sonst bricht der Build mit einer erklärende
## 2. Was fertig ist
Alles Folgende ist im Code belegt die Belegstellen stehen in den jeweiligen Plandokumenten.
Alles Folgende ist im Code belegt; die Belegstellen stehen in den archivierten Plandokumenten
unter [`docs/archiv/`](docs/archiv/).
* **Kernanalytik** (`UMSETZUNGSPLAN.md`, Phase 1): positionsbasierte PnL-Engine nach
* **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** (`FIXPLAN-G-Speicher.md`): budgetabhängiges Retention-Fenster,
* **Speicher-Haushalt** ([`archiv/FIXPLAN-G-Speicher.md`](docs/archiv/FIXPLAN-G-Speicher.md)): budgetabhängiges Retention-Fenster,
Burst-Kompaktierung, Per-Kategorie-Edge.
* **Kategorie-Erkennung** (`FIXPLAN-TODO.md`, Teil F): kanonische Tag-Tabelle,
* **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** (`FIXPLAN-UI-Ranglisten.md`): Showcase-Sektionen, serverseitige Sortierung
* **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** (`docs/PLAN-Linux-Portierung.md`, Phasen 04): .NET 10, extrahierter
* **Portierung** ([`archiv/PLAN-Linux-Portierung.md`](docs/archiv/PLAN-Linux-Portierung.md), Phasen 04): .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
@@ -76,47 +78,17 @@ Alles Folgende ist im Code belegt — die Belegstellen stehen in den jeweiligen
## 3. Was offen ist
Nach Dringlichkeit:
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:
### 3.1 ⚠️ OpenRouter-API-Key liegt im Klartext im Repository
`src/Predictalytics.Api/appsettings.json` enthält einen **echten** OpenRouter-Schlüssel,
versioniert seit Commit `7045002` und damit auf dem Gitea-Server.
**Zu tun:** Den Schlüssel bei OpenRouter zurückziehen und neu ausstellen. Ihn nur aus der
Datei zu entfernen genügt nicht — der Git-Verlauf behält ihn. Anschließend über die
Umgebungsvariable `OpenRouter__ApiKey` setzen; eine Codeänderung braucht es dafür nicht,
`WebApplication.CreateBuilder` liest Umgebungsvariablen bereits mit Vorrang.
Der Schlüssel wurde bewusst **nicht** eigenmächtig entfernt: ohne Rotation bringt das
keinen Sicherheitsgewinn, würde aber die KI-Strategieanalyse stillschweigend abschalten.
### 3.2 Die Portierung ist unter Linux nie gelaufen
Phase 5 (Deployment, systemd/Container, Reverse Proxy, CI) und Phase 6 (Verifikation) des
Portierungsplans sind unangetastet. Der Code ist plattformneutral gebaut, aber **auf keinem
Linux-System je ausgeführt worden**. Die Ende-zu-Ende-Prüfung vom 2026-08-08 lief unter
Windows. Solange das aussteht, ist „läuft unter Linux" eine Annahme, kein Befund.
### 3.3 A4 — Strategie-Klassifikation
Der einzige größere unerledigte Block aus Phase 1. `StrategyType` entsteht weiterhin aus
zwei Signalen — `avgSize > 10000` ergibt `Whale`, `hedgingRate > 30` ergibt `Hedger`, sonst
`Bot`/`Unknown` — weshalb der Großteil der Trader strukturell auf `Unknown` landet. Die
Bausteine für eine bessere Einstufung liegen fertig herum (`StrategyMetricsCalculator`,
`TraderTraitCalculator`, `FingerprintSnapshotService`), sie speisen die Klassifikation nur
nicht.
Die Logik steht außerdem **doppelt** da: `AnalyticsService.cs:418` und
`ScoringService.cs:89`. Beim Anfassen zusammenführen.
### 3.4 Kleinere Reste
* `FIXPLAN-UI-Ranglisten.md`: Pfeilrichtung ▲/▼ in der aktiven Sortierspalte (war als
„Optional" markiert).
* `FIXPLAN-TODO.md` F5/F6: gezielter Nachlade-Schritt für fehlende Event-Tags, zwei Tests.
* `UMSETZUNGSPLAN.md` C3 und D1/D2: DB-Arbeiten auf SQL-Ebene und die Entscheidung über
einen Datenbank-Neustart — beides liegt beim Nutzer.
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.
---
@@ -142,16 +114,17 @@ 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:
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**. Entweder anschließen oder bewusst verwerfen — beides eine fachliche Entscheidung. |
| `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 und sollte eine bewusste Entscheidung sein. |
| 65 Migrationsdateien | Die Schemahistorie. Zusammenfassen ginge, ist aber riskant — siehe Roadmap 4.4. |
Ein Nebenbefund ohne Handlungszwang: der Kategorie-Backfill beim Start
(`PredictalyticsHost.cs:116`) lädt **alle** Märkte samt Event in den Speicher. Bei