7736de0d68
Dernier chemin pouvant remettre une barriere deja oubliee. Le rejeu lisait `lastState` a la souscription et le livrait une micro-tache plus tard ; l'etablissement peut echouer dans cet intervalle, et `reportSetupFailure` desavoue son `State` avec lui. La fenetre est d'exactement UN saut de micro-tache, mesuree et non raisonnee : a zero saut l'effacement n'a pas encore eu lieu, a deux ou plus `lastState` est deja nul donc aucun rejeu n'est mis en file et l'arrivant ouvre une tentative neuve. `isCurrentAttempt` ne couvre pas ce cas : cet echec n'incremente pas `attempt`, donc l'entree et la tentative sont toutes deux encore les courantes. DIAGNOSTIC, et cadre comme tel : `getSyncState` lit l'enregistrement et non la poussee, donc il repond toujours `"timed-out"` et aucune lecture ne gagne d'autorite. Ce que la livraison perimee cassait est l'attente bootstrap de `open-repo`, qui franchissait sa barriere dessus et journalisait `BARRIER <nuri> synced` pour une barriere qui n'existait plus - or cette ligne de trace est celle qui distingue une absence reelle d'une lecture non synchronisee. J'avais ecrit ce remede puis l'avais RETIRE, faute de test qui discrimine. L'ordonnancement ci-dessus est ce qui manquait ; le test echoue sans le correctif et passe avec.