767a18e98c
The three us-7 count assertions encoded the OLD increment model (participantCount = baseline ± 1 via a fictional 'au départ N' step). Under Option B the count is owner-derived, not baseline±1 and not the joiner's to write, so those lines were false. Drop them; keep the real @data contract (join persists + participant + in list; leave is authoritative + gone). Move count convergence to a @data @wip scenario with an inline rationale (single-session can't derive the absolute count — shared-inbox accumulation + create-vs-read NURI-form; the @multibrowser reactive scenario is the real validation). Fix a harness bug: authParticipationCount enumerated protected docs via the all-accounts listEntityDocs (returned 0 for a fresh per-scenario virtual account — a false 0); use the bounded listMyEntityDocs(currentUser,'protected') (the same read-by-need path the app's idempotence check uses), and poll to absorb index lag. Full @data suite green: 18 scenarios / 89 steps. Désinscription contract untouched (caveat_participation-deletion). Build + tsc clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>