Instanzmanager: Lizenz und Sub-Token wandern in den Manager (#528, E-M3)
Neues Projekt ClawdDotNet.Licensing. LicenseGate, LicenseWatch, LicenseInfo und ILicensePrompt sind aus ClawdDotNet.App dorthin gezogen, weil zwei Prozesse dieselbe Lizenzpruefung brauchen und keiner von beiden den anderen kennen darf. In Core konnte es nicht landen - dann zoege jedes der sechzehn Werkzeugprojekte das Deploymentcenter-SDK mit. Dabei ist die Kopplung an SettingsManager verschwunden. LicenseGate kennt jetzt nur ILicenseStore: Serveradresse lesen, Schluessel lesen und schreiben, speichern. Die Anwendung fuehrt ihn in Settings.json, der Manager in manager.json. Der Torwaechter prueft Schluessel; Dateien verwaltet er nicht. Auch die Anwendungsversion kommt als Parameter statt aus einem globalen Zugriff - diese Schicht weiss nicht, welche Anwendung sie benutzt. ManagerCore ist die Klammer: eigene Einstellungen, Lizenz, Register, Meldeweg. Drei Regeln: - Ohne gueltige Lizenz startet er keine Instanz. Laufende werden trotzdem in die Liste genommen - man soll sie sehen und anhalten koennen. - Ein Widerruf haelt alle an. Der einzige Fall, in dem der Manager das von sich aus tut. Ein Serverausfall gehoert ausdruecklich nicht dazu; das SDK trennt Urteil und gescheiterten Versuch, und nur das Urteil kommt hier an. Sonst naehme ein Netzproblem saemtliche Installationen mit. - Ohne hinterlegte Lizenzpruefung sperrt er nichts, sonst gaebe es eine Henne-Ei-Sperre, bevor jemand einen Schluessel eintragen kann. Sub-Token je Instanz: Der Manager haelt das Master-Token und tauscht es beim ANLEGEN einer Instanz gegen ein eigenes (watchdog:ping, bugtracker:report, einzeln widerrufbar). Beim Anlegen und nicht beim ersten Start, weil die Instanzdatei dann zweifelsfrei niemandem gehoert - sie spaeter zu schreiben, waehrend der Instanzprozess laeuft, hiesse zwei Schreiber auf einer Datei. Fuer Instanzen, die es vor dem Manager schon gab, wird es vor dem Start nachgeholt. Danach fragt er ueber whoami nach, ob das Token an ein Projekt gebunden ist (SDK 2.8.1). Ein fehlgeschlagener Tokenbezug haelt die Instanz nicht auf. NOCH NICHT VOLLSTAENDIG: Die Instanzen pruefen die Lizenz weiterhin selbst. Das laesst sich erst abschalten, wenn eine Instanz feststellen kann, ob ein Manager da ist - vorher entstuende eine Fassung ganz ohne Durchsetzung. Und ein Testfehler, der zweimal derselbe war: Die Socket-Antwort war hinterlegt, BEVOR der Manager hochfuhr. Damit sagt man "diese Instanz laeuft bereits", der Manager uebernimmt sie, der Starter wird nie angefasst - und der Test prueft etwas anderes, als er behauptet. Es gibt jetzt eine Hilfsmethode, die das ausschliesst. Build ohne Warnungen, 774 Tests gruen, 8 uebersprungen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -499,3 +499,53 @@ in einem Job-Objekt, das seine Kinder sofort mitnimmt; der Instanzprozess starb
|
||||
bevor er die erste Protokollzeile schreiben konnte. Das ist ein Artefakt der Umgebung und
|
||||
keine Eigenschaft des Managers — aber es heißt, dass ein Abnahmetest dieser Art nicht in
|
||||
die gewöhnliche Testreihe gehört.
|
||||
|
||||
### 9.4 Lizenz und Sub-Token im Manager
|
||||
|
||||
**Ein neues Projekt: `ClawdDotNet.Licensing`.** `LicenseGate`, `LicenseWatch`,
|
||||
`LicenseInfo` und `ILicensePrompt` sind aus `ClawdDotNet.App` dorthin gezogen. Der Grund
|
||||
ist der Schnitt: Zwei Prozesse brauchen dieselbe Lizenzprüfung, und keiner von beiden darf
|
||||
den anderen kennen. In `Core` konnte es nicht landen — dann zöge jedes der sechzehn
|
||||
Werkzeugprojekte das Deploymentcenter-SDK mit.
|
||||
|
||||
Dabei ist die Kopplung an `SettingsManager` verschwunden: `LicenseGate` kennt jetzt nur
|
||||
`ILicenseStore` — Serveradresse lesen, Schlüssel lesen und schreiben, speichern. Die
|
||||
Anwendung führt ihn in `Settings.json`, der Manager in `manager.json`. Der Torwächter prüft
|
||||
Schlüssel; Dateien verwaltet er nicht. Die Anwendungsversion kommt als Parameter statt aus
|
||||
einem globalen Zugriff — diese Schicht weiß nicht, welche Anwendung sie benutzt.
|
||||
|
||||
**`ManagerCore` ist die Klammer:** eigene Einstellungen, Lizenz, Register, Meldeweg. Was
|
||||
darüber liegt — ein Fenster, die eine Weboberfläche für alle — setzt darauf auf.
|
||||
|
||||
- **Ohne gültige Lizenz startet er keine Instanz.** Laufende werden trotzdem in die Liste
|
||||
genommen: Man soll sie sehen — und anhalten können.
|
||||
- **Ein Widerruf hält alle an.** Der einzige Fall, in dem der Manager das von sich aus
|
||||
tut. Ein Serverausfall gehört ausdrücklich nicht dazu; das SDK trennt Urteil und
|
||||
gescheiterten Versuch, und nur das Urteil kommt hier an. Sonst nähme ein Netzproblem
|
||||
sämtliche Installationen gleichzeitig mit.
|
||||
- **Ohne hinterlegte Lizenzprüfung sperrt er nichts.** Sonst gäbe es eine Henne-Ei-Sperre,
|
||||
bevor überhaupt jemand einen Schlüssel eintragen kann.
|
||||
|
||||
**Sub-Token je Instanz.** Der Manager hält das Master-Token und tauscht es beim **Anlegen**
|
||||
einer Instanz gegen ein eigenes — `watchdog:ping` und `bugtracker:report`, einzeln
|
||||
widerrufbar. Beim Anlegen und nicht beim ersten Start, weil die Instanzdatei dann
|
||||
zweifelsfrei niemandem gehört; sie später zu schreiben, während der Instanzprozess läuft,
|
||||
hieße zwei Schreiber auf einer Datei. Für Instanzen, die es vor dem Manager schon gab, wird
|
||||
es vor dem Start nachgeholt.
|
||||
|
||||
Danach wird nachgefragt (`whoami`), ob das neue Token an ein Projekt gebunden ist — seit
|
||||
SDK 2.8.1 erbt ein Watchdog-Monitor das Projekt seines Ping-Tokens, und ohne Bindung landen
|
||||
die Befunde im Scheinprojekt „default". Ein fehlgeschlagener Tokenbezug hält die Instanz
|
||||
nicht auf: Monitoring, das nur bei perfekter Rechtelage läuft, ist genau dann still, wenn
|
||||
man es braucht.
|
||||
|
||||
**Was noch fehlt, damit E-M3 vollständig ist:** Die Instanzen prüfen die Lizenz weiterhin
|
||||
selbst. Das lässt sich erst abschalten, wenn eine Instanz feststellen kann, ob ein Manager
|
||||
da ist (Abschnitt 7) — vorher entstünde eine Fassung ganz ohne Durchsetzung. Bis dahin
|
||||
führen beide ihren eigenen Schlüssel.
|
||||
|
||||
**Ein Testfehler, der zweimal derselbe war.** In den Manager-Tests hatte ich die Antwort des
|
||||
Sockets hinterlegt, *bevor* der Manager hochfuhr — damit sagt man „diese Instanz läuft
|
||||
bereits", der Manager übernimmt sie (E-M6), der Starter wird nie angefasst, und der Test
|
||||
prüft etwas anderes, als er behauptet. Es gibt jetzt eine Hilfsmethode, die genau das
|
||||
ausschließt.
|
||||
|
||||
Reference in New Issue
Block a user