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>