feat: Web-UI als zweiter Ausgabeweg neben Avalonia-Shell (#490)
- Einheitlicher WebserverWorker in IBKRTrader.Hosting auf Kestrel-Basis - Token-Authentifizierung (AuthService) mit zeitkonstantem Vergleich und HMAC-Session-Tokens - OrderManager im Core fuer Bestands- und Reservierungsabgleich offener Broker-Orders - SettingsSchema fuer reflexionsbasiertes Auslesen und sichere Aktualisierung ohne Klartext-Passwoerter - SSE-Streaming (LogStreamService) fuer Echtzeit-Logs ueber isolierte Channels - Statische Single-Page-Application in wwwroot (Avalonia Fluent / Polytrader Theme) fuer alle 9 Ansichten - Unit-Tests fuer OrderManager, AuthService, SettingsSchema, LogStreamService und WebserverWorker (498 Tests gruen)
This commit is contained in:
+32
-21
@@ -93,7 +93,7 @@ Strike-Wahl delta-basiert im Band 0,15–0,30. Nur Watchlist, kein Screening.
|
||||
|
||||
---
|
||||
|
||||
<!-- dc:roadmap stand=2026-09-01T07:48Z items=68 projekt=ibkrtrader -->
|
||||
<!-- dc:roadmap stand=2026-09-06T16:53Z items=79 projekt=ibkrtrader -->
|
||||
|
||||
<!-- ERZEUGT - nicht von Hand aendern. Dieser Block wird bei jedem Lauf von
|
||||
`php cli/roadmap.php --write` ueberschrieben. Der Zustand wird im
|
||||
@@ -102,21 +102,23 @@ Strike-Wahl delta-basiert im Band 0,15–0,30. Nur Watchlist, kein Screening.
|
||||
|
||||
### Als Naechstes
|
||||
|
||||
1. **[X] #388 — WorkerBase: Intervall ueber 24,85 Tage toetet den Worker still und reisst beim Herunterfahren den Prozess mit**
|
||||
2. **[X] #390 — Fehlgeschlagener DB-Dump gilt als erfolgreicher Backup-Lauf**
|
||||
3. **[X] #389 — BackupWorker sichert eine andere Datenbank als die, mit der die Anwendung arbeitet**
|
||||
4. **[X] #391 — --check meldet "Pruefdurchlauf OK", ohne die Datenbank je zu erreichen**
|
||||
1. **[X] #396 — Die Shell reagiert unter Linux nicht auf SIGTERM - kein geordnetes Herunterfahren ausserhalb des Fensters**
|
||||
2. **[X] #475 — Order-Nachweis auf der Test-VM durch die Lizenzsperre blockiert: kein Schluessel hinterlegt**
|
||||
3. **[B] #289 — DB-Passwort der produktiven MariaDB rotieren**
|
||||
4. **[B] #290 — Gitea-Zugangstoken aus der Remote-URL nehmen**
|
||||
|
||||
### X — Kritische Bugs
|
||||
|
||||
| | Vorhaben | Stand | Ziel |
|
||||
|---|---|---|---|
|
||||
| #388 | WorkerBase: Intervall ueber 24,85 Tage toetet den Worker still und reisst beim Herunterfahren den Prozess mit | 📋 Offen | — |
|
||||
| #390 | Fehlgeschlagener DB-Dump gilt als erfolgreicher Backup-Lauf | 📋 Offen | — |
|
||||
| #389 | BackupWorker sichert eine andere Datenbank als die, mit der die Anwendung arbeitet | 📋 Offen | — |
|
||||
| #391 | --check meldet "Pruefdurchlauf OK", ohne die Datenbank je zu erreichen | 📋 Offen | — |
|
||||
| #394 | CapitolTrades-Scraper behandelt 429 nicht - beide CT-Worker fallen bei jedem Lauf aus | 📋 Offen | — |
|
||||
| #388 | WorkerBase: Intervall ueber 24,85 Tage toetet den Worker still und reisst beim Herunterfahren den Prozess mit | ✅ Erledigt | `1.0.0+b618efa` |
|
||||
| #390 | Fehlgeschlagener DB-Dump gilt als erfolgreicher Backup-Lauf | ✅ Erledigt | `1.0.0+b618efa` |
|
||||
| #389 | BackupWorker sichert eine andere Datenbank als die, mit der die Anwendung arbeitet | ✅ Erledigt | `1.0.0+b618efa` |
|
||||
| #391 | --check meldet "Pruefdurchlauf OK", ohne die Datenbank je zu erreichen | ✅ Erledigt | `1.0.0+b618efa` |
|
||||
| #394 | CapitolTrades-Scraper behandelt 429 nicht - beide CT-Worker fallen bei jedem Lauf aus | ✅ Erledigt | `1.0.0+b618efa` |
|
||||
| #396 | Die Shell reagiert unter Linux nicht auf SIGTERM - kein geordnetes Herunterfahren ausserhalb des Fensters | 📋 Offen | — |
|
||||
| #475 | Order-Nachweis auf der Test-VM durch die Lizenzsperre blockiert: kein Schluessel hinterlegt | 📋 Offen | — |
|
||||
| #479 | Order lief auf die falsche Notierung: Waehrung ging beim Bau der OrderRequest verloren | ✅ Erledigt | `1.0.0` |
|
||||
|
||||
### B — Betrieb und Sicherheit
|
||||
|
||||
@@ -124,34 +126,39 @@ Strike-Wahl delta-basiert im Band 0,15–0,30. Nur Watchlist, kein Screening.
|
||||
|---|---|---|---|
|
||||
| #289 | DB-Passwort der produktiven MariaDB rotieren | 📋 Offen | — |
|
||||
| #290 | Gitea-Zugangstoken aus der Remote-URL nehmen | 📋 Offen | — |
|
||||
| #291 | EF-Schema auf die Datenbank anwenden | 📋 Offen | — |
|
||||
| #291 | EF-Schema auf die Datenbank anwenden | ✅ Erledigt | `1.0.0` |
|
||||
|
||||
### H — Handelspfad (TWS-Broker-Adapter)
|
||||
|
||||
| | Vorhaben | Stand | Ziel |
|
||||
|---|---|---|---|
|
||||
| #293 | PlaceOrderAsync gegen das Paper-Konto verifizieren | 📋 Offen | — |
|
||||
| #293 | PlaceOrderAsync gegen das Paper-Konto verifizieren | ✅ Erledigt | `1.0.0` |
|
||||
| #294 | Asynchrone Order- und Fill-Verfolgung | 📋 Offen | — |
|
||||
| #295 | IBKR-Zugangsdaten mit EncryptedStringConverter ablegen | 📋 Offen | — |
|
||||
| #296 | IBC/IBController einrichten (Auto-Login, taeglicher Gateway-Neustart) | 📋 Offen | — |
|
||||
| #468 | DebugTrading-Modul: erzeugt selbstständig kleine Paper-Trades als Dauerlast | 📋 Offen | — |
|
||||
|
||||
### O — Options-Fundament im Core
|
||||
|
||||
| | Vorhaben | Stand | Ziel |
|
||||
|---|---|---|---|
|
||||
| #298 | InstrumentKind/OptionSpec, IbkrMapping.Option, Positionen mit Multiplikator | 📋 Offen | — |
|
||||
| #299 | Optionskette und Greeks im Core (reqSecDefOptParams, tickOptionComputation) | 📋 Offen | — |
|
||||
| #300 | Positionsabgleich bei Zuteilung/Verfall und RiskService um sell-to-open erweitern | 📋 Offen | — |
|
||||
| #298 | InstrumentKind/OptionSpec, IbkrMapping.Option, Positionen mit Multiplikator | ✅ Erledigt | `1.0.0` |
|
||||
| #299 | Optionskette und Greeks im Core (reqSecDefOptParams, tickOptionComputation) | ✅ Erledigt | `1.0.0+0feeeba` |
|
||||
| #300 | Positionsabgleich bei Zuteilung/Verfall und RiskService um sell-to-open erweitern | ✅ Erledigt | `1.0.0+b618efa` |
|
||||
| #301 | IV-Rank als Core-Baustein | 📋 Offen | — |
|
||||
|
||||
### K — Kapital- und Buchmodell
|
||||
|
||||
| | Vorhaben | Stand | Ziel |
|
||||
|---|---|---|---|
|
||||
| #302 | Buecher und Eigentumsregeln | 📋 Offen | — |
|
||||
| #303 | Ein Pool, Obergrenzen | 📋 Offen | — |
|
||||
| #304 | Margin-Sperre in vier Schichten | 📋 Offen | — |
|
||||
| #305 | Reservierungen ueber den Order-Lebenszyklus inkl. Crash-Recovery | 📋 Offen | — |
|
||||
| #302 | Buecher und Eigentumsregeln | ✅ Erledigt | `1.0.0+b618efa` |
|
||||
| #474 | Eigentumsregeln 3 und 4: Modul kann sich als anderes Buch ausgeben, IBrokerClient ist per DI erreichbar | ✅ Erledigt | `1.0.0+b618efa` |
|
||||
| #303 | Ein Pool, Obergrenzen | ✅ Erledigt | `1.0.0` |
|
||||
| #480 | Kapitalmodell summiert Betraege ueber Waehrungen hinweg ohne Umrechnung | ✅ Erledigt | `1.0.0+b618efa` |
|
||||
| #304 | Margin-Sperre in vier Schichten | ✅ Erledigt | `1.0.0` |
|
||||
| #485 | Positionsverwaltung: Herkunft sichtbar, Zuordnung änderbar, Positionen stufenweise sperrbar | 📋 Offen | — |
|
||||
| #486 | Instrumentenverwaltung: Handelsverbot je Instrument und harte Bestandsobergrenzen | 📋 Offen | — |
|
||||
| #305 | Reservierungen ueber den Order-Lebenszyklus inkl. Crash-Recovery | ✅ Erledigt | `1.0.0` |
|
||||
| #306 | Abgleich (Reconciliation) gegen den Broker | 📋 Offen | — |
|
||||
| #307 | Benachrichtigungen ueber Outbox und Sink-Abstraktion | 📋 Offen | — |
|
||||
| #308 | Startwerte festlegen und in settings.example.json dokumentieren | 📋 Offen | — |
|
||||
@@ -164,7 +171,7 @@ Strike-Wahl delta-basiert im Band 0,15–0,30. Nur Watchlist, kein Screening.
|
||||
| | Vorhaben | Stand | Ziel |
|
||||
|---|---|---|---|
|
||||
| #309 | OptionsWheel: Modul-Geruest | 📋 Offen | — |
|
||||
| #310 | OptionsWheel: reine Strategie-Logik und Tests | 📋 Offen | — |
|
||||
| #310 | OptionsWheel: reine Strategie-Logik und Tests | ✅ Erledigt | `1.0.0` |
|
||||
| #311 | OptionsWheel: Verdrahtung und vollautomatischer Paper-Betrieb | 📋 Offen | — |
|
||||
| #312 | OptionsWheel: Earnings-Sperre ueber den IV-Behelf | 📋 Offen | — |
|
||||
| #314 | OptionsWheel: Live-Freigabe | 📋 Offen | — |
|
||||
@@ -183,6 +190,7 @@ Strike-Wahl delta-basiert im Band 0,15–0,30. Nur Watchlist, kein Screening.
|
||||
| #292 | CI wieder gruen bekommen (SDK als PackageReference statt Cross-Repo-Pfad) | 📋 Offen | — |
|
||||
| #315 | Tokens fuer ibkrtrader vervollstaendigen | 📋 Offen | — |
|
||||
| #316 | Update-Anwenden verdrahten | 📋 Offen | — |
|
||||
| #476 | Test-VM erreicht die Gitea-Instanz nicht - Auslieferung per git pull nicht moeglich | 📋 Offen | — |
|
||||
| #317 | Erstes echtes Release fahren | 📋 Offen | — |
|
||||
| #318 | Deploymentcenter-Baustein in die Projektdatei aufnehmen | ✅ Erledigt | — |
|
||||
| #319 | Lizenzfenster fuer die Shell | 📋 Offen | — |
|
||||
@@ -224,9 +232,12 @@ Strike-Wahl delta-basiert im Band 0,15–0,30. Nur Watchlist, kein Screening.
|
||||
| #326 | Diagramme einloesen oder die Avalonia-11-Pinnung aufgeben | 📋 Offen | — |
|
||||
| #392 | Der Daemon schreibt jede SQL-Anweisung von EF Core auf stdout | 📋 Offen | — |
|
||||
| #393 | Workers-Ansicht: die Spalte "Aktiv" ist wirkungslos - Worker lassen sich zur Laufzeit nicht abschalten | 📋 Offen | — |
|
||||
| #395 | "Letzter Lauf" bleibt bei einem fehlgeschlagenen Worker-Lauf leer | 📋 Offen | — |
|
||||
| #395 | "Letzter Lauf" bleibt bei einem fehlgeschlagenen Worker-Lauf leer | ✅ Erledigt | `1.0.0+b618efa` |
|
||||
| #403 | Die Umgebung des Fehler-Streams steht fest im Kompilat - jede Release-Fassung meldet "production" | 📋 Offen | — |
|
||||
| #409 | --smoke-ui braucht unter Linux doch ein Anzeigegeraet und ist damit nicht CI-tauglich | 📋 Offen | — |
|
||||
| #466 | Meldungen der TWS-API mit Umlauten kommen falsch dekodiert im Log an | 📋 Offen | — |
|
||||
| #477 | Berechnete Eigenschaft ParsedMode wird in settings.json geschrieben | 📋 Offen | — |
|
||||
| #490 | Web-UI als zweiter Ausgabeweg neben der Avalonia-Shell – Abschätzung und Schnitt | 📋 Offen | — |
|
||||
| #333 | Web-UI ueber die interne REST-API | 🧊 Zurueckgestellt — Ausloeser: Fernzugriff auf eine laufende Instanz noetig wird | — |
|
||||
| #337 | InvariantGlobalization=true fuer ein schlankes Linux-Image | ❌ Verworfen | — |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user