Stand: 2026-03-18

J01-18 16-2 Locking für Token-Rotation ausrollen
Typ
Subtask
Status
Erledigt
Priorität
Medium
Bearbeitung
-
Sprint
-
Sprint-Rolle
-
Lösung
Fertig
Aktualisiert
2026-03-18T14:20:19.739+0100
Übergeordnet
J01-16
Kontext J01-16

Inhalts-Schlüssel

Diese Seite

Weitere Seiten

Öffentliche Schritte

Schrittspezifischer öffentlicher Arbeitsstand für 16-2 unter J01-16.

Ziel

Den Runtime-Rahmen aus 16-1 auf TokenService.rotate() ausrollen. Nur der Schreibpfad ist betroffen; Lese-Operationen bleiben unverändert.

Zielbereiche und Lock-Granularität

Bereich Zieloperation Lock-Zuschnitt Write-Verhalten
Token rotate(profile, tokens) pro profile Token-Datei atomar überschreiben unter Lock
Token verify(profile, token) kein Lock nur lesen
Token findProfileForToken(token) kein Lock nur lesen

rotate() ist ein reiner Schreibvorgang (keine Read-Modify-Write-Folge). Der Lock schützt gegen zwei gleichzeitige Rotationen desselben Profils. Der RuntimeAtomicWriter schützt gegen zerrissene Lesezugriffe durch parallele verify()-Aufrufe.

Überprüfungsplan

Prüfpunkt Erwartung Nachweis / Ort Status
rotate() läuft unter Lock Lock-Key token_{profile} pro Profil; gleichzeitige Rotation desselben Profils wird serialisiert TokenService::rotateLocked() Erledigt
Datei wird atomar geschrieben RuntimeAtomicWriter via temp+rename; Leser sehen nie eine halb geschriebene Token-Datei TokenService::rotateLocked() Erledigt
Lese-Operationen unberührt verify(), findProfileForToken(), readHashes() ohne Lock, kein Regressions-Risiko TokenService.php Erledigt
Tests grün 26/26 PHPUnit-Tests nach Änderung php vendor/bin/phpunit Erledigt

Delta 2026-03-20

Der im App-Repo noch offene Rest zu 16-2 wurde heute explizit repo-seitig abgeschlossen:

  • Commit 8ab08e4 zieht TokenService samt letzter Verdrahtung in AppContext auf den in dieser Schrittdoku beschriebenen Stand.
  • php bin/cli config lint dev läuft grün.
  • TokenServiceTest und die zugehörigen ConcurrencyTest-Fälle laufen mit gesetztem TMPDIR grün.