Contexte: campagne d'idempotence (#2605 #2623 #2624 #2626 #2627 #2632) corrigee sur registry/nexus/gitlab/vault-argocd/keycloak. SonarQube presente le meme defaut.
Constat: ensureUser (sonarqube.service.ts:203) appelle client.createUser (sonarqube-client.service.ts:291) -> POST users/create qui leve sur non-2xx. En double-sync concurrent, le 2e createUser recoit 400 'already exists' et crash le sync. ensureGroup (ligne 359) utilise deja read-then-create ; ensureUser doit appliquer la meme robustesse (tolerrer 400/409 'already exists' ou re-verifier l'existence avant POST).
Correction: ajouter une garde dans createUser/ensureUser cote client tolerant le statut deja-existant ; ajouter un test reproduisant la course.
Perimetre: sonarqube.service.ts (~211), sonarqube-client.service.ts (291), sonarqube.service.spec.ts.
Suit: #2605 #2623 #2624 #2626 #2627 #2632
Contexte: campagne d'idempotence (#2605 #2623 #2624 #2626 #2627 #2632) corrigee sur registry/nexus/gitlab/vault-argocd/keycloak. SonarQube presente le meme defaut.
Constat: ensureUser (sonarqube.service.ts:203) appelle client.createUser (sonarqube-client.service.ts:291) -> POST users/create qui leve sur non-2xx. En double-sync concurrent, le 2e createUser recoit 400 'already exists' et crash le sync. ensureGroup (ligne 359) utilise deja read-then-create ; ensureUser doit appliquer la meme robustesse (tolerrer 400/409 'already exists' ou re-verifier l'existence avant POST).
Correction: ajouter une garde dans createUser/ensureUser cote client tolerant le statut deja-existant ; ajouter un test reproduisant la course.
Perimetre: sonarqube.service.ts (~211), sonarqube-client.service.ts (291), sonarqube.service.spec.ts.
Suit: #2605 #2623 #2624 #2626 #2627 #2632