▸ Resolve actors (Ama + Esi) ✓ Ama user_id=01m0006p79wp5acj6j0ep0j5zp tenant=01m0006nzm415gpzmpyk336hwj ✓ Esi user_id=01m0006p9fc6phj9mz28e09hs6 tenant=01m0006nzm415gpzmpyk336hwj ▸ Resolve thread Ama ↔ Esi ✓ Existing thread 01m00gg9bvdyesk44fnc3kzps0 ▸ Verify broadcast config ✓ broadcasting.default = reverb ✓ Reverb host:port = localhost:8080 ▸ Probe Reverb TCP listener ✓ Reverb accepts TCP on 127.0.0.1:8080 ✓ Reverb WebSocket handshake 101 Switching Protocols ▸ Persist message + fire MessagePosted broadcast ✓ Message persisted in 3ms (id=01M06QXKRV4RWEPHEW6G4J69E6) ✓ event() returned in 4ms ▸ Inspect last Reverb HTTP-API attempt ✓ No recent BroadcastException in tail of laravel.log ═══════════════════════════════════════════════════════════════ E2E result ═══════════════════════════════════════════════════════════════ Thread id : 01m00gg9bvdyesk44fnc3kzps0 Channel name (Esi) : private-users.01m0006p9fc6phj9mz28e09hs6 Event name : message.posted Message id : 01M06QXKRV4RWEPHEW6G4J69E6 DB persist : 3ms Broadcast call : 4ms On Esi's device (mobile), the subscriber should be listening to channel `users.01m0006p9fc6phj9mz28e09hs6`, event `.message.posted`. If the device did NOT fire its handler, the failure is on the CLIENT side — check: - app.json: realtimeDisabled MUST be false - app.json: reverbHost MUST point at this server (not localhost) - dev console: any [realtime/...] warnings - /broadcasting/auth: hit by Echo with a valid Bearer token Re-run this script while watching `journalctl -u reverb -f` on the server. You should see a `client.event` log for the channel above within ~50ms of `Broadcast call` completing.