resolve_lazy() only unwraps a Proxy (checks for __resolved__/
__wrapped__); handed a bare NamespaceComponent instead - which this
property built directly rather than receiving as a replace_Namespace
Components-processed constructor argument, unlike pgroup/checker/
run_table - it just returned that same unresolved instance unchanged.
Every real call site (start_scan_monitoring/end_scan_monitoring) got a
NamespaceComponent with no start_monitoring/stop_monitoring of its own,
raising AttributeError on every scan - caught and silently turned into
"status server: start monitoring failed ... falling back" by
_status_server_failed, so the server-side path this session's status-
server work was meant to exercise has never actually run from a real
scan. Fix: call .get() ourselves before resolve_lazy().
tests/test_daq_status_server.py's FakeStatusServerComponent stood in
directly for the already-resolved object and had no .get() of its own,
relying on the old code never calling it - added one (returns self).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>