Slice 6 (Fable-Fixes): Totcode/Demo-Balance/Settings-Validierung + Plan-Abschluss

- Totcode: services/SnapshotService.cs entfernt (nirgends registriert).
- Demo-Balance/PnL-Reconciliation: Demo-BUY zieht jetzt die Entry-Fee ab, Demo-Close
  schreibt netto (exitUsd - Exit-Fee) gut -> Summe(Balance-Aenderungen) = Summe(PnL)
  statt um die Fees zu driften (Demo als Validierung konsistent).
- Settings-Validierung: SellLogic.IsLadderConfigInverted (Max-Preisabstand >= SELL-Floor
  -> Leiter startet am Floor) + Warnung beim Settings-Laden (StartupHydration).

Bewusst als Follow-up dokumentiert (Live-Verifikation/Risiko): M3-Autoincrement-Migration,
PersistenceService-Dedup-Zeitfenster, Perf (UpsertLive-Dirty-Check, Leiter-Parallelitaet).

Tests: +3 (IsLadderConfigInverted). Build 0 Fehler, 236 gruen, --smoke-ui ok.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-07-09 18:45:52 +02:00
co-authored by Claude Opus 4.8
parent 84b2b276d9
commit 782c08a860
6 changed files with 50 additions and 158 deletions
+15 -4
View File
@@ -6,10 +6,21 @@
> Hintergrund-Services (TraderMonitorService).
## Fortschritt
-**Slice 0** IClobClient-Seam + FakeClobClient (verhaltensneutral). Commit.
-**Slice 1** K1/H2/H1: atomarer Claim, Cleanup+Engine schonen Leitern, Floor-Robustheit. 8 Tests. Commit.
-**Slice 2** K2: Startup-Reconciliation (GetOpenOrders ohne assetId = alle). 3 Tests. Commit.
- Slice 3 (K3+M5) → Slice 4 (H4/M1/M2/M3/M4/M6/Doku) → Slice 5 (H3) → Slice 6.
-**Slice 0** IClobClient-Seam + FakeClobClient (verhaltensneutral).
-**Slice 1** K1/H2/H1: atomarer Claim, Cleanup+Engine schonen Leitern, Floor-Robustheit. 8 Tests.
-**Slice 2** K2: Startup-Reconciliation (GetOpenOrders ohne assetId = alle). 3 Tests.
- **Slice 3** K3 (System-SELL vom Ownership-Check ausgenommen + Resolved-Cache) + M5 (Demo-Score-Anzeige, stündl. Auto-Pause). 5 Tests.
-**Slice 4** H4 (RoundToTick + Dust-Abbruch), M1 (GlobalPnl im Guard), M2 (TokenId), M3-min (serverseitiges Max + lauter Fehlschlag), M4 (Parser 9999), M6 (Fees in Orders), Doku. 10 Tests.
-**Slice 5** H3: BUY-Skip während ExitPending (Entscheidung A).
-**Slice 6** SnapshotService entfernt, Demo-Balance/PnL-Reconciliation, Settings-Validierung (IsLadderConfigInverted + Load-Warnung). 3 Tests.
**Stand: 236 Tests grün, Build/Smoke grün.**
### Bewusst aufgeschobene Follow-ups (Live-Verifikation/Risiko)
- **M3 Autoincrement-Migration**: `TradeId` auf DB-Autoincrement umstellen Schema-Änderung an der Trade-Persistenz, erst im Zielland live verifizieren. (M3-Minimum ist umgesetzt.)
- **PersistenceService-Dedup-Zeitfenster**: `Exists(AccountId,TokenId)` blockt legit Re-Entries; robuster Fix (z.B. OpenedAt-basiert) braucht Live-Daten Duplikat-Schutz nicht unverifiziert brechen.
- **Perf**: `UpsertLive`-Dirty-Check (Schreib-Amplifikation) und Leiter-Parallelität laut Fable bei aktueller Größe unkritisch.
- **M6/K2**: fee-signierte Orders bzw. `/data/orders` ohne asset_id sind API-gated → im Zielland verifizieren.
## Arbeitsgrundsätze (für jeden Slice)