A screen under test. Two backends, same query/assertion surface:
source: :beam—module+socket, driven in-process (the default, built bymount_screen/3).source: :device— anoderunning the app, read overMob.Test's Erlang-distribution RPC (built bydevice_view/1, gated behind@tag :on_device).
tree/1, assigns/1, find/3, text/1, assert_renderable/2 and
navigated_to/1 work against either, so an assertion reads the same whether
it ran here in milliseconds or against real hardware.