Documentation Index
Fetch the complete documentation index at: https://docs.lagerdata.com/llms.txt
Use this file to discover all available pages before exploring further.
Bug Fixes
lager uart <net>no longer returns404 — UART net not found. The v0.16.6 battery-handler consolidation (commitf277402) deleted the two-line UART handler registration inbox/lager/box_http_server.pyas collateral damage. The imports stayed in place, so the file still parsed cleanly; the/uart/nets/listFlask route just was never registered, so every UART CLI command 404’d. Restored theregister_uart_routes(app)/register_uart_socketio(socketio)calls alongside the supply and battery registrations.lager supply <net> state(and other one-shot supply/battery commands) no longer fail with[Errno 16] Resource busyimmediately after exiting the TUI. Root cause:/supply/commandand/battery/commandreturned 404 when no active WebSocket session was found, forcing the CLI’s_run_backendinto a direct-pyvisa subprocess fallback (cli/impl/power/supply.py→ dispatcher) that opened its own pyvisa session against the same USB devicehardware_service.pywas still caching. Both endpoints now build a transientDeviceproxy viaresolve_net_proxy()when no active WS session exists, routing throughhardware_service.py:/invokelike the WS monitor already does. There is now exactly one pyvisa session per(device_name, address)regardless of TUI lifecycle. This completes v0.16.6’s “VISA session ownership unified” promise.- Concurrent TUI + CLI access on the same supply no longer cascades
Resource busyerrors across subsequent commands. Previously, a single transient kernel-level USB-claim collision (the kind that can momentarily occur when two pyvisa-issued USB transfers overlap on the same device) would be mis-classified as a stale pyvisa session:_is_visa_session_error()matched the substring'resource'inside'Resource busy', the retry path then popped the live cache entry and calledmodule.create_device()on the same address, and the new open hitResource busyagain because the original session was still alive in the same process. The result was that an isolated USB-busy error turned into a chain of failures across every following command. Removed'resource'from_VISA_SESSION_ERROR_KEYWORDSinbox/lager/hardware_service.py; retry now fires only for genuine stale-session signals ('session','closed','invalid'). An isolated USB-busy collision is still possible on heavily-contended USB transfers but is now returned to the caller cleanly without disturbing the cache, so the next command immediately succeeds.
Known Limitations
- Keithley 2281S dual-role nets must be used one at a time. When the same physical Keithley 2281S has both a
power-supplynet (e.g.supply1) and abatterynet (e.g.battery1) configured,box/lager/hardware_service.pycaches them under two different keys (("keithley", address)vs("keithley_battery", address)) and tries to open two pyvisa sessions on the same USB device — the second hits[Errno 16] Resource busy. Workaround: configure only the role you need on the Keithley 2281S, or restart the box’s lager container between switching roles. The proper fix (shared pyvisa Resource between supply and battery driver instances, or a merged dual-role driver class) is targeted for v0.16.8. - Concurrent battery TUI + CLI on the Keithley 2281S can surface
[Errno 16] Resource busy. Runninglager battery <net> tuiin one terminal while runninglager battery <net> state(or any other one-shot battery CLI command against the same net) in another terminal can fail withResource busy, even when only the battery role is configured on the Keithley (so this is distinct from the dual-role limitation above). v0.16.7’s Bug-B retry-classification fix prevents this from cascading across subsequent commands but does not eliminate the initial collision; the underlying contention appears to live in the Keithley pyvisa session itself rather than inhardware_service.py’s lock. Workaround: do not invoke battery CLI commands while a battery TUI is open against the Keithley 2281S — close the TUI first, or run TUI-only or CLI-only on the Keithley battery net. Root-cause investigation tracked for v0.16.8.

