Die Betriebsfreigabe wird im Projekt polytrader-managementcenter gebaut; wirken muss sie hier. #621 ist ausschliesslich der Einbau auf der Client-Seite und steht auf deferred, bis SDK (#613) und Freigabe (#614) dort stehen. Damit faellt zugleich die Entscheidung vom 31.07.2026 gegen eine Laufzeit-Revalidierung - fuer die Lizenz bleibt sie gueltig, fuer die Betriebsfreigabe nicht. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
630 lines
32 KiB
Markdown
630 lines
32 KiB
Markdown
# Roadmap PolyTrader
|
||
|
||
**Der Planungsstand steht im Deploymentcenter, nicht in dieser Datei.**
|
||
Was zwischen den `dc:roadmap`-Markern steht, ist eine **erzeugte Kopie** und darf älter sein
|
||
als der echte Stand — dort niemals von Hand etwas ändern, der nächste Lauf überschreibt es.
|
||
Der Live-Stand kommt aus `dc_roadmap`; die Kennung eines Vorhabens ist seine Item-Nummer.
|
||
|
||
Was diese Datei behält, ist die Hälfte, die eine Tabellenzelle nicht trägt: **die Begründung.**
|
||
Warum etwas zurückgestellt wurde, woran man erkennt, dass „später" jetzt ist, und warum ein
|
||
verworfener Vorschlag verworfen blieb. Wer etwas erneut vorschlagen will, findet hier das
|
||
Argument, gegen das er antreten muss.
|
||
|
||
> **Arbeitsteilung:** Was **ist** → [PROJEKTSTAND.md](./PROJEKTSTAND.md) (Architektur,
|
||
> Kennzahlen, Modul-Stand). Was **kommt** → das Deploymentcenter. Warum → diese Datei.
|
||
|
||
Die Detailpläne unter [`archiv/`](./archiv/) sind **nicht tot**: Für die Umsetzung eines
|
||
Vorhabens ist der jeweilige Plan weiterhin die Bauanleitung mit Code-Bezügen und
|
||
Akzeptanzkriterien. Nur der *Status* darin ist überholt.
|
||
|
||
---
|
||
|
||
## Wie die Reihenfolge gemeint ist
|
||
|
||
**Die Themenbereiche A → P → B → C → D sind eine Reihenfolge, keine Termine.** Jeder schafft
|
||
die Voraussetzung für den nächsten. Neue Strategiemodule vor der Abnahme des Bestehenden zu
|
||
bauen, vergrößert nur die Menge an ungeprüftem Code, der echtes Geld bewegt.
|
||
|
||
**Zwei Regeln, die aus Erfahrung in diesem Projekt stammen:**
|
||
|
||
1. **Kein Livegang ohne Messphase.** Jedes Strategiemodul läuft erst read-only oder in Demo,
|
||
bis der Edge gemessen ist. Das hat sich bei ResolutionFarming bewährt und ist bei
|
||
MarketMaking, BundleArbitrage und DataDriven bereits so geplant.
|
||
2. **Was blockiert ist, steht auf „zurückgestellt" mit dem Auslöser, der es freigibt.** Ein
|
||
zurückgestelltes Vorhaben ohne benannten Anlass ist ein vergessenes. Steht im Auslöser eine
|
||
Item-Nummer, ist das die Abhängigkeit.
|
||
|
||
Für alles, was Geld bewegt, gilt zusätzlich [`.agents/rules/clob.md`](../.agents/rules/clob.md).
|
||
|
||
---
|
||
|
||
<!-- dc:roadmap stand=2026-08-30T12:21Z items=44 projekt=polytrader -->
|
||
|
||
<!-- ERZEUGT - nicht von Hand aendern. Dieser Block wird bei jedem Lauf von
|
||
`php cli/roadmap.php --write` ueberschrieben. Der Zustand wird im
|
||
Deploymentcenter gepflegt, nicht hier. Prosa gehoert AUSSERHALB der
|
||
Marker - dort bleibt sie unberuehrt. -->
|
||
|
||
### Als Naechstes
|
||
|
||
1. **[A] #135 — Abnahme der Oberflaeche**
|
||
2. **[A] #136 — Deploymentcenter live abnehmen**
|
||
3. **[A] #137 — Linux-Betrieb auf einer Test-VM**
|
||
4. **[A] #50 — Kalendersymbol im Datumsfeld wird unter Linux als sinnlose Zahl gezeichnet**
|
||
|
||
### A — Abnahme und Fundament
|
||
|
||
| | Vorhaben | Stand | Ziel |
|
||
|---|---|---|---|
|
||
| #135 | Abnahme der Oberflaeche | 📋 Offen | — |
|
||
| #136 | Deploymentcenter live abnehmen | 📋 Offen | — |
|
||
| #137 | Linux-Betrieb auf einer Test-VM | 📋 Offen | — |
|
||
| #138 | Feldtest im Zielland | 🧊 Zurueckgestellt — Ausloeser: sobald #136 und #137 abgeschlossen sind | — |
|
||
| #139 | Master-Key setzen, Zugaenge rotieren | 🧊 Zurueckgestellt — Ausloeser: sobald #138 abgeschlossen ist | — |
|
||
| #50 | Kalendersymbol im Datumsfeld wird unter Linux als sinnlose Zahl gezeichnet | 📋 Offen | — |
|
||
| #51 | Leere Tabellen sagen nicht, warum sie leer sind | 📋 Offen | — |
|
||
| #56 | Master-Trader-Grid: letzte fuenf Spalten werden auf Reststreifen zusammengedrueckt | 📋 Offen | — |
|
||
|
||
### P — Pruefung und Tests
|
||
|
||
| | Vorhaben | Stand | Ziel |
|
||
|---|---|---|---|
|
||
| #140 | CI-Runner registrieren | 🧊 Zurueckgestellt — Ausloeser: sobald auf der Gitea-Maschine oder einer Linux-Test-VM Leistung fuer einen weiteren Container frei ist | — |
|
||
| #52 | --smoke-ui setzt Datenbank und X-Server voraus, laeuft daher nicht in der CI | 📋 Offen | — |
|
||
| #141 | Pruefverfahren nach Deploymentcenter-Konvention verankern | 📋 Offen | — |
|
||
|
||
### B — Module scharf schalten
|
||
|
||
| | Vorhaben | Stand | Ziel |
|
||
|---|---|---|---|
|
||
| #142 | CopyTrading Phase 1 - Marktdaten-Fundament | 📋 Offen | — |
|
||
| #143 | Supervisor: Live-Key-Test | 📋 Offen | — |
|
||
| #144 | CopyTrading Restposten | 🧊 Zurueckgestellt — Ausloeser: sobald #142 abgeschlossen ist | — |
|
||
| #145 | ResolutionFarming live schalten | 🧊 Zurueckgestellt — Ausloeser: sobald #138 abgeschlossen ist | — |
|
||
| #146 | AutoRedeem (On-Chain) | 🧊 Zurueckgestellt — Ausloeser: sobald #145 abgeschlossen ist | — |
|
||
| #147 | Accounting A-3 - US-Steuerschicht | 🧊 Zurueckgestellt — Ausloeser: sobald die CPA den Fragebogen aus docs/steuer/Accounting-US-Tax-Questionnaire.md beantwortet hat | — |
|
||
| #148 | Accounting A-5 - Reconciliation | 🧊 Zurueckgestellt — Ausloeser: sobald #145 abgeschlossen ist | — |
|
||
|
||
### C — Neue Strategiemodule
|
||
|
||
| | Vorhaben | Stand | Ziel |
|
||
|---|---|---|---|
|
||
| #149 | Modul MarketMaking | 🧊 Zurueckgestellt — Ausloeser: sobald #142 abgeschlossen ist | — |
|
||
| #150 | Modul BundleArbitrage | 🧊 Zurueckgestellt — Ausloeser: sobald #142 abgeschlossen ist | — |
|
||
| #151 | StrategieDrift-Erkennung | 🧊 Zurueckgestellt — Ausloeser: sobald #144 abgeschlossen ist | — |
|
||
| #152 | AI-Bewertung der Aufloesequalitaet | 🧊 Zurueckgestellt — Ausloeser: sobald #145 abgeschlossen ist | — |
|
||
|
||
### D — Nicht beschlossen
|
||
|
||
| | Vorhaben | Stand | Ziel |
|
||
|---|---|---|---|
|
||
| #153 | Modul DataDriven | 🧊 Zurueckgestellt — Ausloeser: sobald #145 abgeschlossen ist | — |
|
||
| #154 | Predictalytics-Anbindung | 🧊 Zurueckgestellt — Ausloeser: sobald das Projekt predictalytics eine abfragbare API bereitstellt | — |
|
||
|
||
### T — Technische Schuld
|
||
|
||
| | Vorhaben | Stand | Ziel |
|
||
|---|---|---|---|
|
||
| #155 | 15 Build-Warnungen im Avalonia-Projekt | 📋 Offen | — |
|
||
| #156 | TerminalLogger auf Microsoft.Extensions.Logging umstellen | 📋 Offen | — |
|
||
| #157 | God-Methoden aufteilen | 📋 Offen | — |
|
||
| #158 | CopyTrading-Follow-ups | 📋 Offen | — |
|
||
| #159 | Deploymentcenter.Client von 2.5.0 auf 2.6.0 nachziehen | 📋 Offen | — |
|
||
| #160 | Barlow-Schriften einbetten | 📋 Offen | — |
|
||
|
||
### H — Verlauf
|
||
|
||
| | Vorhaben | Stand | Ziel |
|
||
|---|---|---|---|
|
||
| #161 | Modularisierung (Phasen 0-6) - Core und vier Module | ✅ Erledigt | — |
|
||
| #162 | MySQL-Migration - MongoDB restlos raus | ✅ Erledigt | — |
|
||
| #163 | CopyTrading-Rentabilitaetsplan - Phase 0, 2-Fundament, 3.1, 3.3, 4.1, 4.2 | ✅ Erledigt | — |
|
||
| #164 | Fable-Review-Fixes - Slices 0 bis 6 | ✅ Erledigt | — |
|
||
| #165 | Modul ResolutionFarming - Slices 0 bis 5 | ✅ Erledigt | — |
|
||
| #166 | Modul Supervisor - S-0 bis S-4 | ✅ Erledigt | — |
|
||
| #167 | Modul Accounting - A-1, A-2, A-4 | ✅ Erledigt | — |
|
||
| #168 | Linux-Portierung der Oberflaeche - WinForms zu Avalonia | ✅ Erledigt | — |
|
||
| #169 | Einfenster-Shell - Mehrfenster-Launcher abgeloest | ✅ Erledigt | — |
|
||
| #170 | Deploymentcenter D-0 bis D-5 - code-seitig | ✅ Erledigt | — |
|
||
| #171 | Sicherheit F1 bis F6 - AES-GCM at-rest, Secrets bereinigt | ✅ Erledigt | — |
|
||
| #172 | WinForms-Ausbau (P11/L5) und LicenseLabrador-Abloesung (D-6) | ✅ Erledigt | — |
|
||
| #173 | CI-Workflow angelegt | ✅ Erledigt | — |
|
||
| #174 | Watchdog und LicenseLabrador als getrennte Dienste | ❌ Verworfen | — |
|
||
|
||
<!-- /dc:roadmap -->
|
||
|
||
---
|
||
|
||
# Begründungen
|
||
|
||
*Nicht jedes Vorhaben braucht eine Herleitung — die meisten sind eine Zeile wert und mehr
|
||
nicht. Hier steht, was mehr wert ist.*
|
||
|
||
## A — Abnahme und Fundament
|
||
|
||
*Alles, was zwischen „gebaut" und „im Betrieb bewährt" steht. Nichts davon ist neue
|
||
Entwicklung; es ist die Ernte der Arbeit der letzten Monate.*
|
||
|
||
### [A] #135 — Abnahme der Oberfläche
|
||
|
||
Alle Fenster wurden konstruiert und die App läuft — aber **es wurde nie jedes Fenster mit
|
||
echten Daten durchgeklickt**. Layout-Details zeigen sich erst im Gebrauch: Spaltenbreiten
|
||
(feste Pixel wurden teils in Sternbreiten übersetzt), Umbrüche in Werkzeugleisten bei schmalen
|
||
Fenstern, Splitter-Positionen (Copytrading Master-Trader, Supervisor Dossiers), und ob die
|
||
KPI-Kacheln bei acht Stück (Accounting) sinnvoll umbrechen.
|
||
|
||
Zum Vergleich mit der alten Oberfläche dient
|
||
[UI-SPEZIFIKATION-WinForms.md](./UI-SPEZIFIKATION-WinForms.md) oder ein Arbeitsbaum des Tags:
|
||
|
||
```bash
|
||
git worktree add ../polytrader-winforms winforms-final
|
||
```
|
||
|
||
**Stand 27.08.2026:** Die Sichtprüfung auf der Linux-VM hat stattgefunden und **fünfzehn
|
||
Befunde** ergeben. Bis auf drei bewusst zurückgestellte sind alle behoben — darunter B-10
|
||
(ohne das DataGrid-Theme rendert keine einzige Tabelle) und ein dabei entdeckter Nebenbefund:
|
||
**sämtliche Dezimal-Einstellungen waren in der Oberfläche nicht mehr änderbar**, also die
|
||
komplette Risikokonfiguration. Einzelheiten im Nachtrag 5 von
|
||
[BEFUND-Linux-Betrieb-2026-08-26.md](./pruefplaene/BEFUND-Linux-Betrieb-2026-08-26.md).
|
||
|
||
**Stand 28.08.2026:** Die Gegenprobe am Bild ist gelaufen. Alle Behebungen sind auf der
|
||
Zielplattform bestätigt; B-9 hat sich als **kein Fehler** entpuppt (Avalonia zeichnet die
|
||
heutige Tageszahl — am 26.08. eine „26", am 28.08. eine „28"), und die Spaltenumstellung
|
||
hatte einen eigenen Fehler erzeugt, der ebenfalls behoben ist.
|
||
|
||
**Offener Rest:** Splitterpositionen und Leerzustände im Gebrauch beurteilen. Alles Weitere
|
||
steht als eigenes Item — #50, #51, #52, #56 —, nicht mehr in Befundberichten.
|
||
|
||
Blockiert nichts, ist aber die letzte offene Zusage der UI-Portierung. Regeln für
|
||
Nacharbeiten: [LEITFADEN-Avalonia-Portierung.md](./LEITFADEN-Avalonia-Portierung.md).
|
||
|
||
### [A] #136 — Deploymentcenter live abnehmen
|
||
|
||
D-0 bis D-5 sind code-seitig fertig (#170). Offen ist die Abnahme im Betrieb: Watchdog (D-1)
|
||
und Lizenz (D-2) gegen den echten Server, Erstinstallation über `setup.json` (D-5).
|
||
**Serverseitig fehlen noch** der Release-Signierschlüssel (`/api/updateservice/v1/pubkey`) und
|
||
ein Installationskonto mit der Rolle `installer`. Danach: **erstes Release veröffentlichen** —
|
||
eine offene Entscheidung aus dem Plan.
|
||
|
||
Erst **nach** dieser Abnahme dürfen `watchdog.mhdf.de` und `license.mhdf.de` abgeschaltet
|
||
werden; vorher fehlt die Rückfallebene. Mit dem Abschalten erledigen sich zwei alte
|
||
Sicherheits-Auflagen von selbst — siehe #174.
|
||
|
||
→ [archiv/umsetzungsplaene/UMSETZUNGSPLAN-Deploymentcenter-Integration.md](./archiv/umsetzungsplaene/UMSETZUNGSPLAN-Deploymentcenter-Integration.md)
|
||
|
||
### [A] #621 — Management-Center-Anbindung
|
||
|
||
**Auslöser: sobald #613 (SDK und Testclient) und #614 (Freigabe vollständig) im Projekt
|
||
`polytrader-managementcenter` abgeschlossen sind.**
|
||
|
||
Aus rechtlichen Gründen darf PolyTrader nur handeln, solange ein Mensch den Weiterbetrieb in
|
||
festgelegtem Takt aktiv bestätigt. Bestätigt wird in einem eigenständigen Kundencockpit — eigener
|
||
Server, eigenes Repository, eigenes Deploymentcenter-Projekt. Dieses Item ist **ausschließlich der
|
||
Einbau auf der Client-Seite**: SDK einbinden, Prüfung in
|
||
[`TradingGate`](../src/PolyTrader.Modules.CopyTrading/Logic/TradingGate.cs) hängen — dorthin, wo
|
||
seit #570 alle Sperren liegen —, cockpit-verwaltete Parameter lokal nur noch lesbar anzeigen,
|
||
regelmäßigen automatischen Neustart einbauen, Kennzahlen täglich melden.
|
||
|
||
**Damit fällt die Entscheidung vom 31.07.2026** in `Licensing/LicenseGate.cs`: „eine
|
||
Laufzeit-Revalidierung gibt es bewusst nicht." Betriebsfreigabe ist nicht Lizenz — zwei Fragen,
|
||
zwei Mechanismen, und die neue verlangt eine Prüfung zur Laufzeit. Für die **Lizenz** bleibt die
|
||
alte Entscheidung gültig.
|
||
|
||
Zwei Dinge sind bereits vorhanden und werden nicht neu gebaut: `TradingMode.SellOnly` existiert
|
||
samt Semantik, und die Sperren liegen seit #570 an einer Stelle. Ein zweiter Ort für die Prüfung
|
||
wäre die Wiederholung von #569 mit höherem Einsatz.
|
||
|
||
**Ohne dieses Vorhaben kein Live-Betrieb.** Es geht damit allem in Themenbereich B voraus.
|
||
|
||
→ Konzept im Nachbarprojekt: `PolytraderManagementcenter/docs/KONZEPT.md`
|
||
|
||
### [A] #137 — Linux-Betrieb auf einer Test-VM
|
||
|
||
**War bis zum 23.08.2026 fälschlich als „blockiert durch die DC-Abnahme" geführt. Ist es
|
||
nicht.** Am Code nachgeprüft: Das Lizenz-Gate ruft bei fehlender Lizenz **kein**
|
||
`Environment.Exit` auf — ohne Deploymentcenter startet die Core-Shell im eingeschränkten Modus
|
||
(Terminal, Einstellungen) ohne die Trading-Module. Damit ist der Linux-Betrieb **ohne** #136
|
||
testbar.
|
||
|
||
✅ **PolyTrader läuft auf Linux.** Build (0 Fehler), 476 Tests, Publish und Start funktionieren
|
||
— bei Build und Tests **kein einziger Unterschied zu Windows**. Native GUI-Bibliotheken sind
|
||
für `--headless` nicht nötig, `master.key` bekommt korrekt `0600`.
|
||
|
||
Ein echter Fehler gefunden und behoben: Ohne Datenbankverbindung stürzte die Anwendung mit
|
||
unbehandelter Ausnahme ab, statt zu sagen, was fehlt — im Dienstbetrieb hätte das eine
|
||
Neustartschleife im Zehn-Sekunden-Takt ergeben. Jetzt verständlicher Abbruch mit Exitcode 78
|
||
(`EX_CONFIG`) und `RestartPreventExitStatus=78` in der systemd-Unit.
|
||
|
||
✅ **Vollständig durchgearbeitet.** MariaDB 11.8.6 auf der Test-VM, alle fünf Migrationen durch
|
||
(21 Tabellen), Betrieb mit Datenbank bestätigt — die Anwendung hat **100 echte Märkte von der
|
||
Polymarket-API geholt und geschrieben**. Als systemd-Dienst: `active`, Shutdown in 0,08 s ohne
|
||
`SIGKILL`, Neustart nach Absturz greift, und der Exit-78-Schutz verhindert nachweislich die
|
||
Neustartschleife bei Konfigurationsfehlern. Die D-11-Falle (`server_settings.xml` relativ zum
|
||
Arbeitsverzeichnis, `master.key` relativ zur Programmdatei) ist **kein Problem** — gezielt
|
||
geprüft, keine zweite `server_settings.xml`. Logrotate läuft. Alle neun Views konstruieren
|
||
fehlerfrei.
|
||
|
||
**Der Zeitzonen-Befund ist damit belegt statt behauptet** (siehe #156): Unter UTC meldet die
|
||
Anwendung „Anzeige-Zeitzone: Europe/Berlin" und stempelte in derselben Zeile mit `20:04` statt
|
||
`22:04`.
|
||
|
||
**Einziger Rest: Sichtprüfung der Oberfläche** — braucht jemanden am Bildschirm der VM
|
||
(Schriftrendering, Spaltenbreiten, Dunkelmodus unter GTK). Damit fällt dieser Rest mit **#135**
|
||
zusammen.
|
||
|
||
→ Protokoll: [pruefplaene/PRUEFPLAN-Linux-Betrieb.md](./pruefplaene/PRUEFPLAN-Linux-Betrieb.md)
|
||
· Befund: [BEFUND-Linux-Betrieb-2026-08-26.md](./pruefplaene/BEFUND-Linux-Betrieb-2026-08-26.md)
|
||
· Testumgebung für **alle** Projekte: [TESTUMGEBUNG-Linux-VM.md](./TESTUMGEBUNG-Linux-VM.md)
|
||
|
||
### [A] #138 — Feldtest im Zielland
|
||
|
||
**Auslöser: sobald #136 und #137 abgeschlossen sind.**
|
||
|
||
Echter Dauerbetrieb auf dem Zielsystem mit den scharfgeschalteten
|
||
Deploymentcenter-Funktionen. Erst hier ist der Weg vom Build bis zum laufenden Dienst
|
||
vollständig durchgespielt — vorher fehlt genau das Stück, an dem erfahrungsgemäß die
|
||
Überraschungen sitzen.
|
||
|
||
Beobachtungen aus dem Feldtest sammeln wir in
|
||
[IDEENSAMMLUNG-Feldtest-2026-08.md](./IDEENSAMMLUNG-Feldtest-2026-08.md); was daraus ein
|
||
Vorhaben wird, wird ein Item.
|
||
|
||
### [A] #139 — Master-Key setzen, Zugänge rotieren
|
||
|
||
**Auslöser: sobald #138 abgeschlossen ist** — es braucht das Zielsystem.
|
||
|
||
`POLYTRADER_MASTER_KEY` dort setzen und die Bestandsdaten migrieren; AES-GCM at-rest ist
|
||
gebaut, F1–F6 sind behoben (#171). Zusätzlich **Alchemy- und Mullvad-Zugänge rotieren** — sie
|
||
liegen in der Git-History und sind damit für jeden lesbar, der das Repo je hatte.
|
||
|
||
→ [sicherheit/SICHERHEITSKONZEPT.md](./sicherheit/SICHERHEITSKONZEPT.md)
|
||
|
||
---
|
||
|
||
## P — Prüfung und Tests
|
||
|
||
*Die Teststrecke selbst — nicht die Befunde daraus. Ein Befund ist ein Item wie jedes andere
|
||
und steht in dem Bereich, zu dem er inhaltlich gehört.*
|
||
|
||
### [P] #140 — CI-Runner registrieren
|
||
|
||
Der Workflow [`.gitea/workflows/ci.yml`](../.gitea/workflows/ci.yml) liegt und wird von Gitea
|
||
erkannt (ein Lauf steht auf `queued`), aber **auf der Instanz ist kein Actions-Runner
|
||
registriert** — auf Repo-, Benutzer- und Instanzebene geprüft.
|
||
|
||
> **Zurückgestellt (Entscheidung Richard, 23.08.2026).** Auf der Gitea-Maschine ist derzeit
|
||
> keine Leistung für einen weiteren Container frei. Der Workflow bleibt liegen und ist sofort
|
||
> lauffähig, sobald ein Runner da ist — es geht nichts verloren.
|
||
>
|
||
> **Auslöser:** sobald auf der Gitea-Maschine oder einer Linux-Test-VM Leistung für einen
|
||
> weiteren Container frei ist.
|
||
|
||
Bis dahin ist die Plattformneutralität nur eine Momentaufnahme: Eine einzige
|
||
`net10.0-windows`-Zeile genügt, und der Linux-Build ist kaputt, ohne dass es auf einer
|
||
Windows-Maschine auffällt. **Solange das so bleibt, ersetzt #137 diese Prüfung teilweise** —
|
||
dort läuft dieselbe Software auf echtem Linux, nur von Hand statt automatisch.
|
||
|
||
Einrichtung: **[LEITFADEN-CI.md](./LEITFADEN-CI.md) §3** (~10 Minuten). Der Runner gehört
|
||
nicht auf den Arbeitsrechner — sonst prüft niemand, wenn der Rechner aus ist. **Eine der
|
||
vorhandenen Linux-Test-VMs wäre der naheliegende Ausweichort.**
|
||
|
||
### [P] #141 — Prüfverfahren nach Deploymentcenter-Konvention verankern
|
||
|
||
Die Haltung aus `Deploymentcenter/docs/AGENTEN_ANBINDEN.md` („Was sich lohnt zu übernehmen")
|
||
ist für PolyTrader noch nicht umgesetzt. Sie kostet kein eigenes Testtor:
|
||
|
||
1. **Ein gefundener Fehler bekommt zweierlei** — ein Item im Bugtracker *und* einen Testfall,
|
||
der ihn festhält.
|
||
2. **Bekannte, noch offene Befunde blockieren nicht.** Der Testfall läuft mit und ist als
|
||
bekannt vermerkt — mit Item-Nummer. Ein Eintrag ohne Item-Nummer ist eine Ausrede, kein
|
||
Befund.
|
||
3. **Fehlende Voraussetzung heißt übersprungen, nicht rot.** Der Unterschied zwischen „kaputt"
|
||
und „nicht prüfbar" muss im Bericht sichtbar bleiben — und am Rückgabewert: Ein Lauf, der
|
||
mehr überspringt als prüft, ist kein bestandener Lauf.
|
||
|
||
**Nicht** zu übernehmen sind die Testinstanz `dc-dev.mhdf.de` und `tests/e2e` — die gehören
|
||
dem Deploymentcenter, wir sind dessen Kunde und nicht sein Betreiber.
|
||
|
||
---
|
||
|
||
## B — Module scharf schalten
|
||
|
||
*Vier Module sind gebaut. Sie handeln noch nicht mit echtem Geld bzw. laufen ohne die echten
|
||
Datenquellen. Dieser Bereich schließt die Lücke — und liefert nebenbei das Fundament, auf dem
|
||
Bereich C überhaupt erst möglich ist.*
|
||
|
||
### [B] #142 — CopyTrading Phase 1: Marktdaten-Fundament
|
||
|
||
**Der wichtigste Einzelposten der ganzen Roadmap.** Nicht wegen CopyTrading selbst, sondern
|
||
weil MarketMaking (#149) und BundleArbitrage (#150) **harte Voraussetzungen** darauf haben.
|
||
Ohne diesen Schritt ist Bereich C nicht baubar.
|
||
|
||
| | Inhalt |
|
||
|---|---|
|
||
| **1.1** | **CLOB User-Channel** — echte Fills in Echtzeit statt geschätzter Preise; füllt `ct_fill_log` |
|
||
| **1.2** | **CLOB Market-Channel** — Orderbücher live (`ClobMarketDataService`) |
|
||
| **1.3** | **Pre-Trade-Orderbuch-Check** in der Engine — vor dem Kauf prüfen, ob die Gegenseite überhaupt Tiefe hat |
|
||
|
||
**Akzeptanz:** Fill-Log füllt sich mit echten Fills; TradeReasoning zeigt die Orderbuch-Lage
|
||
zum Entscheidungszeitpunkt.
|
||
|
||
→ [archiv/umsetzungsplaene/UMSETZUNGSPLAN-CopyTrading-Verbesserungen.md](./archiv/umsetzungsplaene/UMSETZUNGSPLAN-CopyTrading-Verbesserungen.md) §Phase 1
|
||
|
||
### [B] #144 — CopyTrading Restposten
|
||
|
||
**Auslöser: sobald #142 abgeschlossen ist** — alle drei hängen an echten Fill-Daten.
|
||
|
||
- **Partial-Fill-Verdrahtung** (Phase 2) — Teilausführungen proportional behandeln
|
||
- **Sniper-/Verhaltensmetriken** (Phase 3.2) — Median-Haltezeit über Activity-Pagination.
|
||
⚠️ Bei Umsetzung mit **#151 (StrategieDrift)** zusammenlegen — die Sniper-Metrik ist ein
|
||
Spezialfall des dortigen Fingerprints. Doppelt bauen wäre Verschwendung.
|
||
- **Echte `fee_rate_bps`** (Phase 0.2-Rest) statt der derzeitigen Annahme
|
||
|
||
### [B] #145 — ResolutionFarming live schalten
|
||
|
||
**Auslöser: sobald #138 abgeschlossen ist** — es braucht das Zielland.
|
||
|
||
Slices 0–5 sind fertig (#165): Logik, Persistenz, Scanner, UI, Demo-Execution, Monitor. Offen
|
||
ist der Livegang nach Plan-Phasen RF-3 bis RF-5: **eigener Account**, kleines Kapital, dann
|
||
Kalibrierung und Skalierung. Der On-Chain-Redeem ist #146.
|
||
|
||
→ [archiv/umsetzungsplaene/UMSETZUNGSPLAN-Modul-ResolutionFarming.md](./archiv/umsetzungsplaene/UMSETZUNGSPLAN-Modul-ResolutionFarming.md)
|
||
|
||
### [B] #146 — AutoRedeem (On-Chain)
|
||
|
||
**Auslöser: sobald #145 abgeschlossen ist.**
|
||
⚠️ **Höchste Kritikalitätsstufe** — On-Chain-Signing mit echten Private Keys.
|
||
|
||
Core-Baustein mit Aktivierung **je Modul** (Richards Anforderung: in Testphasen neuer Module
|
||
gezielt AUS, ohne dass etablierte Module ihren Automatismus verlieren). Architektur: Queue
|
||
statt Direktaufruf — Module erkennen einlösbare Positionen, der Core löst ein.
|
||
|
||
| Phase | Inhalt |
|
||
|---|---|
|
||
| RD-1 | Queue-Tabelle + Schalter + UI-Pending-Liste, **kein On-Chain-Code** — 100 % offline testbar |
|
||
| RD-2 | `OnChainCtfService` gegen Polygon, **read-only** (Balance, Einlösbarkeit) |
|
||
| RD-3 | Erster echter Redeem: **ein** Testmarkt, Kleinstbetrag, manuell getriggert |
|
||
| RD-4 | Worker-Automatik scharf für ResolutionFarming, CopyTrading folgt nach Beobachtung |
|
||
|
||
**RD-3 nie überspringen.** Jede Phase einzeln committen.
|
||
|
||
→ [archiv/umsetzungsplaene/UMSETZUNGSPLAN-AutoRedeem.md](./archiv/umsetzungsplaene/UMSETZUNGSPLAN-AutoRedeem.md)
|
||
|
||
### [B] #147 — Accounting A-3: US-Steuerschicht
|
||
|
||
**Auslöser: sobald die CPA den Fragebogen beantwortet hat.**
|
||
|
||
`UsTaxEngine` mit FIFO-Lot-Matching, Haltefristen, Gain/Loss sowie Form-8949- und
|
||
Schedule-D-Export. **Als einziger Teil des Accounting-Moduls nicht gebaut** — A-1 (Ingest),
|
||
A-2 (Abrechnung/BWA/FX) und A-4 (CSV+PDF-Export) sind fertig (#167).
|
||
|
||
Fragebogen: [steuer/Accounting-US-Tax-Questionnaire.md](./steuer/Accounting-US-Tax-Questionnaire.md)
|
||
|
||
### [B] #148 — Accounting A-5: Reconciliation
|
||
|
||
**Auslöser: sobald #145 abgeschlossen ist** — sinnvoll erst mit echten Live-Daten.
|
||
|
||
Abgleich der unabhängig erhobenen Buchhaltung gegen die eigene Trading-DB. Niedrige Priorität,
|
||
aber der eigentliche Prüfwert des Moduls: **Abweichungen zwischen beiden Quellen sind das
|
||
Signal.**
|
||
|
||
---
|
||
|
||
## C — Neue Strategiemodule
|
||
|
||
*Erst wenn A und B stehen. Alle vier sind vollständig geplant und haben null Zeilen Code.*
|
||
|
||
### [C] #149 — Modul MarketMaking
|
||
|
||
**Auslöser: sobald #142 abgeschlossen ist** — harte Voraussetzung ist die
|
||
Orderbuch-Infrastruktur.
|
||
|
||
Beidseitige Limit-Orders in belohnungsberechtigten Märkten; kombiniert drei Ertragsquellen:
|
||
tägliche Liquidity Rewards (USDC), Maker-Rebates und den Spread. **Eigener Account**, um den
|
||
Konflikt mit CopyTrading zu vermeiden.
|
||
|
||
| Phase | Inhalt |
|
||
|---|---|
|
||
| MM-1 | Fundament-Verifikation (mehrtägiger Soak-Test der WSS-Kanäle!) + Selector, read-only |
|
||
| MM-2 | **Paper-Quoting, 2 Wochen** — misst Adverse Selection. Rewards lassen sich nicht simulieren, diese Phase misst nur die Risikoseite |
|
||
| MM-3 | Live auf 1–2 ruhigen Märkten, 300–500 USDC |
|
||
| MM-4 | Skalierung + Skew-Feintuning |
|
||
| MM-5 | Optional: Reward-Optimierung, Laddering |
|
||
|
||
**Pflicht-Fail-Safe ab MM-3:** Keine Book-Updates > N Sekunden → alle Quotes canceln. Muss
|
||
durch künstliches Trennen der WSS-Verbindung getestet werden — sonst quotet das Modul blind.
|
||
|
||
**Offene Entscheidungen:** Startmärkte (Empfehlung: 1–2 langlaufende Politik-Märkte, wenig
|
||
Newsflow), Kapital für MM-3, beidseitig quoten von Anfang an (empfohlen — einseitig scored
|
||
schlechter und halbiert den Lerneffekt).
|
||
|
||
→ [archiv/umsetzungsplaene/UMSETZUNGSPLAN-Modul-MarketMaking.md](./archiv/umsetzungsplaene/UMSETZUNGSPLAN-Modul-MarketMaking.md)
|
||
|
||
### [C] #150 — Modul BundleArbitrage
|
||
|
||
**Auslöser: sobald #142 abgeschlossen ist.** Startet bewusst als reines **Mess-Modul**.
|
||
|
||
YES + NO < $1.00 bei binären Märkten, Summenverletzungen bei NegRisk-Multi-Outcome.
|
||
|
||
> **Ehrliche Einordnung aus dem Plan:** Auf den großen Märkten ist das ein HFT-Spiel mit
|
||
> Sekundenfenstern, dominiert von spezialisierten Bots; die Taker-Fees seit März 2026 haben
|
||
> viele kleine Anomalien unprofitabel gemacht. Die Chance liegt im **Long Tail** und als
|
||
> **Beifang** der ohnehin laufenden Orderbuch-Streams von #149. Deshalb: erst messen, dann
|
||
> entscheiden.
|
||
|
||
| Phase | Inhalt |
|
||
|---|---|
|
||
| BA-1 | **Detection-only, 2–4 Wochen.** Endet mit dokumentierter Go/No-Go-Empfehlung |
|
||
| BA-2 | Execution klein — **nur bei Go**, zunächst nur binäre Märkte |
|
||
| BA-3 | NegRisk-Execution (mehr Legs = mehr Single-Leg-Risiko) |
|
||
| BA-4 | `OnChainCtfService` (Merge) — gemeinsam mit #146 als **ein** Core-Baustein bauen |
|
||
|
||
Fees je Leg müssen von Anfang an in der Profitrechnung stehen: Ein Bundle mit 2 ¢ Bruttomarge
|
||
kann nach Fees negativ sein.
|
||
|
||
→ [archiv/umsetzungsplaene/UMSETZUNGSPLAN-Modul-BundleArbitrage.md](./archiv/umsetzungsplaene/UMSETZUNGSPLAN-Modul-BundleArbitrage.md)
|
||
|
||
### [C] #151 — StrategieDrift-Erkennung
|
||
|
||
**Auslöser: sobald #144 abgeschlossen ist.** Nicht hart blockiert, aber ohne die echten
|
||
Fill-Daten nur halb so wirksam — und #144 bringt mit der Sniper-Metrik einen Teil davon schon
|
||
mit.
|
||
|
||
Verhaltensänderungen eines Master-Traders erkennen, **bevor** sie sich im Copy-PnL
|
||
niederschlagen. Die bestehende Auto-Pause ist ein nachlaufender Indikator: Bei 95-¢-Tradern
|
||
sieht man den Schaden erst nach mehreren Verlusten. Ein Wetter-Bot, der plötzlich
|
||
Politik-Longshots kauft, hat die Strategie gewechselt, lange bevor das messbar wird.
|
||
|
||
Drei Slices: pure Fingerprint-Logik + Persistenz → Job-Integration (Stunden-Tick ohne
|
||
zusätzliche API-Calls) → Engine-Gate + UI.
|
||
|
||
⚠️ **Mit #144 zusammenlegen.** Ersetzt **nicht** die PnL-Auto-Pause — Drift ist das
|
||
Frühwarnsystem, die PnL-Pause das Sicherheitsnetz.
|
||
|
||
→ [archiv/umsetzungsplaene/UMSETZUNGSPLAN-StrategieDrift.md](./archiv/umsetzungsplaene/UMSETZUNGSPLAN-StrategieDrift.md)
|
||
|
||
### [C] #152 — AI-Bewertung der Auflösequalität
|
||
|
||
**Auslöser: sobald #145 abgeschlossen ist** — vorher fehlen die Live-Märkte, an denen sich die
|
||
Validierungsphase durchführen lässt. Core-Baustein, kein eigenes Modul.
|
||
|
||
Ein LLM (über OpenRouter) bewertet je Markt das **Resolution-Risiko**: subjektive
|
||
Auflösequellen, Regeltext-Fallen, UMA-Dispute-Muster. Ergebnis wird beim Markt-Import
|
||
gespeichert und dient als Entry-Gate — zuerst im ResolutionFarming, dann optional im
|
||
CopyTrading.
|
||
|
||
**Vor dem Scharfschalten ist eine Validierungsphase Pflicht:** ~15–20 bekannte strittige
|
||
UMA-Resolutions plus ~30 unstrittige Vergleichsmärkte durchschicken. Akzeptanz: ≥ 80 % der
|
||
Streitfälle unter der Schwelle, ≤ 10 % der sauberen fälschlich blockiert. Ergebnisse als
|
||
Golden-File einfrieren, damit die CI ohne LLM-Call testen kann.
|
||
|
||
**Leitplanken:** Kostendeckel als Setting (Default 500 Ratings/Tag). Der Rater beeinflusst
|
||
**nie Exits**, nur Entries — keine Panikverkäufe durch ein Sprachmodell.
|
||
|
||
→ [archiv/umsetzungsplaene/UMSETZUNGSPLAN-AI-Aufloesequalitaet.md](./archiv/umsetzungsplaene/UMSETZUNGSPLAN-AI-Aufloesequalitaet.md)
|
||
|
||
---
|
||
|
||
## D — Nicht beschlossen
|
||
|
||
*Hier steht, was durchdacht, aber **nicht entschieden** ist. Vor einer Umsetzung braucht es
|
||
eine ausdrückliche Entscheidung — nicht nur einen freien Nachmittag.*
|
||
|
||
### [D] #153 — Modul DataDriven
|
||
|
||
**Auslöser: sobald #145 abgeschlossen ist** — dann lässt sich der einzige Teilaspekt, der
|
||
schon heute Wert hat, an echten Daten messen, ohne das ganze Modul zu bauen.
|
||
|
||
Ein Strategiemodul, das eigene Handelsentscheidungen aus **externen Datenquellen** ableitet —
|
||
je Marktkategorie eine eigene Datenquelle und ein eigenes Fair-Value-Modell (Wetter über
|
||
Open-Meteo, später Sport-Spielstände).
|
||
|
||
**Warum nicht beschlossen — die drei Gründe aus dem Konzept selbst:**
|
||
|
||
1. **Modell-Risiko ersetzt Master-Risiko.** Ein Bias im Fair-Value-Modell produziert
|
||
*systematisch* falsche Trades, nicht nur einzelne.
|
||
2. **Der Edge schrumpft nachweislich.** Beim Wetter von ~10 auf ~3 Prozentpunkte (2023→2026).
|
||
3. **Jede Kategorie ist ein eigenes kleines Forschungsprojekt.** Der Aufwand skaliert nicht.
|
||
|
||
Es gibt noch **keinen Umsetzungsplan**, nur ein Konzept mit Aufbaupfad (DD-0 bis DD-4, jede
|
||
Kategorie mit eigenem Go/No-Go-Gate). Ein Teilaspekt ist auch ohne das ganze Modul wertvoll:
|
||
der `SportsScoreStateProvider` als **Filter für ResolutionFarming** (Dip-Freigabe bei klarer
|
||
Führung) — das wäre der sinnvolle erste Schritt, falls überhaupt.
|
||
|
||
→ [archiv/konzepte/KONZEPT-Modul-DataDriven.md](./archiv/konzepte/KONZEPT-Modul-DataDriven.md)
|
||
|
||
### [D] #154 — Predictalytics-Anbindung
|
||
|
||
**Auslöser: sobald das Projekt `predictalytics` eine abfragbare API bereitstellt.**
|
||
|
||
Predictalytics ist ein **separates Projekt** zur Master-Trader-Auswahl. Die im
|
||
Supervisor-Konzept vorgesehenen Predictalytics-Werkzeuge lassen sich nicht bauen, solange dort
|
||
keine API existiert. Berührt auch #151 — die Fingerprint-Baseline wäre von dort importierbar.
|
||
|
||
Prüfplan: [pruefplaene/PREDICTALYTICS-PRUEFPLAN-Master-Auswahl.md](./pruefplaene/PREDICTALYTICS-PRUEFPLAN-Master-Auswahl.md)
|
||
|
||
---
|
||
|
||
## T — Technische Schuld
|
||
|
||
*Kein eigener Meilenstein — abzuarbeiten, wenn man ohnehin in der Nähe ist.*
|
||
|
||
### [T] #155 — 15 Build-Warnungen im Avalonia-Projekt
|
||
|
||
13 × `CS8618` (Felder in Fenster-Konstruktoren), 1 × `CS8848` (Vorrang bei `switch`), 1 ×
|
||
`CS8602` (möglicher Nullverweis, `PdfExporter.cs:40`). **Die letzten beiden sind einen Blick
|
||
wert** — dahinter kann ein echter Fehler stecken. Erst wenn sie weg sind, ist `-warnaserror`
|
||
in der CI sinnvoll (#140).
|
||
|
||
### [T] #156 — TerminalLogger auf Microsoft.Extensions.Logging umstellen
|
||
|
||
**Der Zeitzonen-Teil ist am 27.08.2026 erledigt** — vorgezogen, weil #137 den Fehler
|
||
nachgewiesen hat: Zeitstempel sind jetzt `DateTimeOffset` in der Anzeige-Zeitzone,
|
||
Logdatei-Grenzen und Oberfläche passen zusammen, und die `.log`-Dateien heißen wie die
|
||
`.jsonl` (`yyyy-MM-dd`).
|
||
|
||
**Offen bleibt** die eigentliche Umstellung auf `Microsoft.Extensions.Logging`.
|
||
|
||
### [T] #159 — Deploymentcenter.Client von 2.5.0 auf 2.6.0 nachziehen
|
||
|
||
`src/PolyTrader.Core/PolyTrader.Core.csproj:29` referenziert **2.5.0**, das SDK steht auf
|
||
**2.6.0** (`DeploymentcenterSdk.Version`).
|
||
|
||
**Bevor die Anbindung angefasst wird**, erst nachsehen, was seitdem dazugekommen ist:
|
||
|
||
```
|
||
GET /api/updateservice/v1/changelog?since=2.5.0
|
||
```
|
||
|
||
Die Antwort nennt nur die neueren Fassungen, dazu `action_items` (Punkte mit Handlungsbedarf)
|
||
und `breaking`. Kommt `"count": 0` zurück, ist nichts zu tun. Danach die referenzierte Fassung
|
||
hochsetzen und `dc_link_project` mit der neuen `integrated_version` aufrufen — **nicht** eine
|
||
Versionszeile von Hand in einer Datei pflegen.
|
||
|
||
---
|
||
|
||
## H — Verlauf
|
||
|
||
*Was abgeschlossen ist, steht im erzeugten Block. Hier steht nur, was eine Begründung braucht.*
|
||
|
||
### [H] #174 — Watchdog und LicenseLabrador als getrennte Dienste
|
||
|
||
**Verworfen.** Beide waren als eigenständige Fremdprojekte zur Einbindung vorgesehen —
|
||
Monitoring per Heartbeat, Lizenzierung per Ed25519 — und ihre Review-Blocker waren am
|
||
29.07.2026 alle behoben, die Einbindung hätte starten können.
|
||
|
||
**Warum trotzdem verworfen:** Es wären zwei eigene Dienste geworden, mit eigenen Secrets,
|
||
eigener Datenhaltung, eigener Anbindung und eigenem Betrieb. Das Deploymentcenter leistet
|
||
dasselbe an *einer* Stelle und liefert Error-Reporting und Updates gleich mit. Zwei Systeme zu
|
||
betreiben, die dieselbe Frage beantworten, ist die teurere Hälfte von beidem.
|
||
|
||
Mit dem Abschalten von `watchdog.mhdf.de` und `license.mhdf.de` (nach #136) erledigen sich
|
||
zwei alte Sicherheits-Auflagen von selbst: **Watchdog-Secrets rotieren** (sie stehen in der
|
||
History) und der **UTC/`NOW()`-Mix**.
|
||
|
||
Ein erneuter Vorschlag in diese Richtung müsste erklären, was das Deploymentcenter nicht kann
|
||
— nicht, was die beiden Dienste konnten.
|
||
|
||
---
|
||
|
||
## Wiederkehrend
|
||
|
||
Die Audit-Checkliste in [sicherheit/SICHERHEITSKONZEPT.md](./sicherheit/SICHERHEITSKONZEPT.md)
|
||
§6 bei jedem Release und mindestens quartalsweise. Punkt 1 (Schwachstellen-Scan) übernimmt die
|
||
CI, sobald #140 steht.
|
||
|
||
## Archiv
|
||
|
||
[`archiv/`](./archiv/) enthält die Dokumente, aus denen diese Roadmap entstanden ist. Für die
|
||
Umsetzung eines Vorhabens ist der jeweilige Detailplan weiterhin die **Bauanleitung** mit
|
||
Code-Bezügen, Akzeptanzkriterien und Begründungen. Nur der *Status* darin ist überholt.
|
||
|
||
Weiterhin aktiv außerhalb des Archivs:
|
||
[PROJEKTSTAND.md](./PROJEKTSTAND.md) ·
|
||
[LEITFADEN-Avalonia-Portierung.md](./LEITFADEN-Avalonia-Portierung.md) ·
|
||
[LEITFADEN-CI.md](./LEITFADEN-CI.md) ·
|
||
[UI-SPEZIFIKATION-WinForms.md](./UI-SPEZIFIKATION-WinForms.md) ·
|
||
[TESTUMGEBUNG-Linux-VM.md](./TESTUMGEBUNG-Linux-VM.md) ·
|
||
[sicherheit/](./sicherheit/) · [steuer/](./steuer/) · [pruefplaene/](./pruefplaene/) ·
|
||
[IDEENSAMMLUNG-Feldtest-2026-08.md](./IDEENSAMMLUNG-Feldtest-2026-08.md)
|