04a2de0b17
Répare 2 régressions de `38266d9` (les lectures 100% watchShape avaient perdu la visibilité immédiate post-mutation, ce que faisait `registerDoc`) : après `createEvent` l'événement n'apparaissait qu'après le push broker ; après `leaveEvent` le partant restait listé jusqu'au push. Fix = mise à jour OPTIMISTE (pattern mutations useQuery ; PAS de polling) dans `useNgData` : overlay `pendingAddEvents`/`pendingAddParticipations`/ `pendingRemoveIds`. État exposé = merge(réactif, adds) moins removes, dédupé par id. Réconciliation auto : un add dont l'id apparaît dans le réactif est retiré ; un remove dont l'id disparaît du réactif est retiré → auto-nettoyage au push, jamais de poll. Vidé au changement d'identité. Pas de registerDoc/readModel réintroduit. Trouvé PAR `bun run validate` + chasse à la régression — « l'agent trouve les problèmes sans test manuel ». gate : tsc propre, build OK. 6 scénarios @data verts (créateur + désinscription régressés → verts ; inscription/isolation/compteur → verts). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>