0f164300f0
Guard the Option-B owner-materializer against overlay-form drift: match inbox deposits to owned events on the CANONICAL base repo id (canonicalEventId strips any ✌️<overlay> suffix), applied at the matching boundary in materializeAttendance / readRegistrationNotifications and to dedup ownedEventIds (ownedKey). The count is still WRITTEN on the real owned NURI — a stripped id is never a write/anchor target. Honest framing: this is DEFENSIVE, not a fix for an active bug. On the current tree create-time, listMyEntityDocs and the read @id already carry the identical NURI (readUnion pins the subject to the input NURI, 63ecfee) — verified: the count converges for an event owned via listMyEntityDocs. A prior investigation's 'never matches' reading was the seeded-but-not-owned artifact (a prior-run identity owned the seed → reached via discovery, not ownedEventIds — correct behavior). Un-@wip the @data convergence scenario (asserts the just-joined uid enters the owner-derived active set — deterministic despite shared-inbox accumulation); it now passes. Fix authParticipationCount already landed separately. Doctrine: knowledge_context-internals (canonical id-form invariant). Build + tsc clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>