Fruehjahrsputz 2/2: Dokumentation auf den tatsaechlichen Stand gebracht

Die Plandokumente waren durchweg veraltet: 85 von 91 Punkten im
UMSETZUNGSPLAN standen auf offen, obwohl der Code sie enthielt, und in
FIXPLAN-UI-Ranglisten war keine einzige der 18 Aufgaben abgehakt, obwohl
beide zugehoerigen Commits laengst im Zweig stecken. Alles abschnittsweise
gegen den Code geprueft und die Haekchen gesetzt - mit Belegstellen, damit
die naechste Pruefung nicht wieder bei null anfaengt.

Neu: STATUS.md als Einstiegsseite - wo das Projekt steht, was fertig ist,
was offen ist, und was beim Aufraeumen bewusst stehengeblieben ist. CLAUDE.md
verweist darauf.

Nachgezogen:
* UMSETZUNGSPLAN.md - 66 Punkte abgehakt. Offen bleiben A4 (Strategie-
  Klassifikation), B2 (Secrets) sowie C3/D1/D2 (SQL-Arbeiten des Nutzers).
* FIXPLAN-UI-Ranglisten.md - abgeschlossen bis auf den als "Optional"
  markierten Pfeilrichtungs-Punkt.
* FIXPLAN-TODO.md - Teil D und F abgehakt; die Test-Baseline "16 gruen"
  auf die heutigen 126 korrigiert. Offen: F5 und zwei Tests aus F6.
* FIXPLAN-G-Speicher.md - G1 bis G4 als erledigt vermerkt, Baseline "39/1"
  korrigiert, Pfad auf die nicht mehr existierende WinFormsHost/appsettings.json
  richtiggestellt.
* docs/PLAN-Linux-Portierung.md - der Watchdog-Warnhinweis war ueberholt
  (DcHeartbeatService meldet an /api/watchdog/v1/ping). Abschnitt 11 empfahl
  noch, mit Phase 0 zu beginnen; jetzt benennt er Phase 5 und 6 als das, was
  wirklich aussteht. Die Randnotiz zu Zugangsdaten in LicenseGuard.cs ist
  gegenstandslos, die Datei laeuft ueber den Deploymentcenter.Client.

Zwei Befunde, die keine Aufraeumarbeit sind und deshalb nur dokumentiert
wurden - beide in STATUS.md Abschnitt 3:

1. In src/Predictalytics.Api/appsettings.json steht ein echter
   OpenRouter-API-Key im Klartext, versioniert seit 7045002. Nicht
   eigenmaechtig entfernt: ohne Rotation beim Anbieter bringt das nichts
   (die History behaelt ihn), wuerde aber die KI-Analyse abschalten.
   Der Schluessel muss zurueckgezogen und neu ausgestellt werden.
2. Die Portierung ist auf keinem Linux-System je ausgefuehrt worden. Die
   Verifikation vom 2026-08-08 lief unter Windows.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-08-23 12:30:42 +02:00
co-authored by Claude Opus 5
parent 55011644a3
commit 1f230fe12c
7 changed files with 381 additions and 112 deletions
+32 -19
View File
@@ -534,13 +534,14 @@ Predictalytics.Shell --license-deactivate # Aktivierungsplatz freigeben
Die Schalter werden **vor** jeder Avalonia-Initialisierung ausgewertet, wie `--headless`.
Der Schlüssel wird in der Ausgabe maskiert (`LLAB3-*****-*****-*****-AABB2`).
### ⚠️ Offen: Watchdog läuft noch auf dem alten System
### ✅ Nachgetragen: Watchdog ist migriert (Stand 2026-08-23)
Das Deploymentcenter bündelt License, Watchdog, UpdateService und Bugtracker.
`WatchdogHeartbeatService` zeigt weiterhin auf `watchdog.mhdf.de` mit dem Header
`X-Watchdog-Key`. Das funktioniert, ist aber dieselbe Altlast wie eben beim Lizenzsystem.
Migration nach `dc.mhdf.de/api/watchdog/v1` als eigener Schritt einplanen —
Leitfaden liegt unter `Deploymentcenter/docs/WATCHDOG_INTEGRATION_GUIDE.md`.
Der hier notierte Rest — `WatchdogHeartbeatService` gegen `watchdog.mhdf.de` mit dem
Header `X-Watchdog-Key` — ist erledigt. An seiner Stelle steht
`Hosting/DcHeartbeatService.cs`, das gegen `POST /api/watchdog/v1/ping` am
Deployment Center meldet (`:105,143`). Damit laufen Lizenz, Watchdog, UpdateService,
Fehler-Stream und Bugtracker über dieselbe Anbindung; `watchdog.mhdf.de` wird
nicht mehr angesprochen.
---
@@ -679,12 +680,16 @@ Nur relevant, falls Egress-Kanäle produktiv genutzt werden. Proxy-Kanäle sind
* systemd-Unit bzw. Dockerfile (für den Headless-Modus); es existiert bereits ein
`J:\Softwareprojekte\dockerCompose` — vermutlich anknüpfbar.
* Reverse Proxy (nginx/Caddy) mit TLS vor Kestrel.
* **Secrets:** DB-Passwort und Watchdog-API-Key liegen heute im Klartext in `settings.json`.
Unter Linux → EnvironmentFile mit `0600` oder Secret-Store.
*Randnotiz:* In `LicenseGuard.cs:16-17` stehen Basic-Auth-Zugangsdaten im Quelltext —
unabhängig von dieser Portierung überdenkenswert, erst recht mit Blick auf Monetarisierung.
* **Secrets:** DB-Passwort und Deployment-Center-Token liegen im Klartext in
`settings.json` (nicht versioniert). Unter Linux → EnvironmentFile mit `0600` oder
Secret-Store.
*Erledigt:* Die früher hier genannten Basic-Auth-Zugangsdaten in `LicenseGuard.cs`
gibt es nicht mehr — die Datei läuft vollständig über den `Deploymentcenter.Client`.
*Offen und dringlicher:* In `src/Predictalytics.Api/appsettings.json` steht ein
**echter OpenRouter-API-Key im Klartext**, und diese Datei **ist** versioniert.
Schlüssel zurückziehen, neu ausstellen, künftig über `OpenRouter__ApiKey` setzen.
* CI: Build + Test auf Linux **und** Windows.
* `docs/BETRIEB-Watchdog-Lizenz.md` um den Linux-Betrieb ergänzen.
* `docs/BETRIEB-Deploymentcenter.md` um den Linux-Betrieb ergänzen.
---
@@ -742,12 +747,20 @@ auf der vorigen auf; einzig AP 5 (Deployment) kann parallel zu Phase 3 vorbereit
## 11. Nächster Schritt
Alle Vorentscheidungen sind getroffen (Abschnitt 0). Umsetzung kann beginnen:
**Stand 2026-08-23: Phase 0 bis 4 sind abgeschlossen** (jeweils oben mit ✅ vermerkt),
ebenso der Zusatz 5a (Deploymentcenter-Lizenzsystem) und 5b (WinForms-Host abgelöst).
Der ursprüngliche Text an dieser Stelle empfahl noch, mit Phase 0 zu beginnen — das ist
überholt und deshalb ersetzt.
1. **Phase 0** — 0,5 PT, sofort, unabhängig vom Rest. Ergebnis ist ein aufgeräumter
Ausgangspunkt auf `feature/linux-net10`.
2. **Phase 1** — .NET 10 + Paketmatrix. Hier zeigt sich früh, wie groß der
Swashbuckle-Umbau tatsächlich ist.
3. Parallel dazu: **Lizenzaktivierung ohne Dialog** mit der laufenden HardwareID-Arbeit
abstimmen — das ist der einzige Punkt im Plan, der von außen abhängt und dadurch spät
teuer werden kann.
**Offen sind Phase 5 und Phase 6:**
1. **Phase 5 — Deployment und CI** (Abschnitt 7). Nichts davon ist bisher angefasst: kein
`dotnet publish -r linux-x64`, keine systemd-Unit, kein Dockerfile, kein Reverse Proxy,
keine CI. Das ist der eigentliche verbleibende Arbeitsblock.
2. **Phase 6 — Verifikation** (Abschnitt 8, Punkte 8.18.9). Der Dauerlauf unter Linux
(8.1) und die Prüfung unter `LANG=de_DE.UTF-8` (8.3) stehen aus. **Bisher wurde die
Anwendung noch auf keinem Linux-System ausgeführt** — die Portierung ist zwar
vollständig gebaut, aber unter Linux unbewiesen.
3. Unabhängig davon und vorgelagert: den **OpenRouter-API-Key** aus
`src/Predictalytics.Api/appsettings.json` zurückziehen und neu ausstellen (siehe
Abschnitt 7, Secrets).