20a2270434
nostrnests publishes kind-30312 without a self-`p`-tag for the room author — they're the implicit host. The lobby card already handles this (NestJoinCard) but the in-room code did not: the author fell into the pure-audience branch with role=null AND was missing from the audio subscription set, so the host appeared as a regular listener and no sound played. buildParticipantGrid now takes hostPubkey and synthesizes a virtual `["p", host, "", "host"]` when absent, so the existing presence-aware onstage/audience rules apply uniformly — including "host leaves stage" (onstage=0 → drops to audience, role stays HOST). NestActivityContent owns the grid now and derives onStageKeys from it, so the StageGrid render and the MoQ subscription set stay in lockstep when anyone (host or speaker) steps off stage.