La suite echouait de facon intermittente (~1 run sur 2), faisant planter le
hook pre-commit. Cause racine unique : l'horloge CLOCK_REALTIME du conteneur
n'est pas monotone sous WSL2/Docker (saut arriere sous charge), alors que le
code et les tests supposaient une horloge stable.
- JWT « Invalid JWT Token » (401) : lexik validait iat/nbf/exp avec
clock_skew=0 (LooseValidAt PT0S). Un recul d'horloge apres /login_check
rendait le token « dans le futur ». Ajout de clock_skew: 15 (benefice prod
aussi si les noeuds derivent).
- Horodatages « meme seconde » : colonnes TIMESTAMP(0) + sleep(1) reel.
L'ecart floor-seconde n'etait nul que si l'horloge reculait. Le subscriber
injecte desormais ClockInterface (comportement prod inchange via NativeClock)
et les tests pilotent un MockClock fige/avance (ClockSensitiveTrait), sans
sleep reel -> deterministe et plus rapide. Le mock est seede dans le fuseau
PHP par defaut pour eviter le decalage UTC <-> Europe/Paris au round-trip
des colonnes TIMESTAMP WITHOUT TIME ZONE.
make test : 464 tests verts ; test timestamp 5/5 deterministe.