Upgrade Notes
-
The box now serves net and box metadata over HTTP, and the control plane
starts syncing it. The control plane has had its half of this since May. It
gates each push on two capability flags, and nothing advertised them, so it
skipped every push in silence. A description typed into the dashboard went to
its own database and no further, and
lager nets describeon the box stayed invisible to it. Update your boxes to turn the sync on. After the update, a description written on either side reaches the other. -
The endpoint rejects the pre-0.24.0 field names. A client that sends
description,dut_connectionortest_hintsgets an error rather than a stored key that nothing reads back. Sendpurpose,notesandtags, the fieldslager nets describewrites and the MCP server reads. -
lager usb <net> cyclenow waits for the device to come back. It used to return as soon as power returned. It now confirms re-enumeration from the USB topology, so a successful cycle takes up to five seconds longer. A script that assumed an instant return will run slower and will not break. - A U3 DAC refuses an out-of-range value. The range is 0.04 V to 4.95 V, not 0 V to 5 V. The hardware used to clamp such a value in silence. Code that relied on that clamp must send a value inside the range.
Features
-
lager adc,dac,gpiandgpowork against a LabJack U3. The box drives the T-series through LJM, which does not support the U3 at all, so this is a second driver stack: the Exodriver plus LabJackPython’su3module. The T7 path is untouched and the two families share a box. Validated on a U3-HV with both DACs looped back to analog inputs: all 16 analog channels, all 16 usable digital lines, and both DACs linear to within 20 mV. SPI and I2C are not supported on the U3, andlager instrumentsadvertises only the roles that have a driver behind them. -
lager uart --sessionsandlager uart <net> --force. A held UART net had no recovery path.--sessionslists which nets are held and whether each holder is still connected.--forcereleases the holder before it connects. The “already in use” error now names the take-over command.
Bug Fixes
- A UART net stayed held forever, and only a container restart freed it. The box reclaimed a session by asking whether its read loop still made progress. The loop writes that heartbeat itself, so it proves the loop iterates, never that anyone still listens. The read loop now asks whether its client is still connected and exits on the first iteration where it is not.
-
lager usb <net> cyclereported “no device on this port” on ports that had one. Only one of the three hub drivers observed re-enumeration. On an Acroname or YKUSH hub that message printed every time, whatever was plugged in. During a hardware fault a false “no device here” points the investigation at the device rather than at the tool. The verdict now comes from the kernel’s USB topology, so every driver reports a real answer. A box that cannot read its own topology says that instead. -
lager logic <net> trigger spifailed withFunction not found: get_trigger_spi_width. The mapper called a name that no driver defined. The whole SPI trigger surface behind it was missing the same way, and all of it is now implemented. Every query was confirmed against an MSO5074, because this instrument accepts some queries that it never answers. -
setup_battery(soc=0)set nothing and reported nothing. A state of charge of 0 is falsy, and a truthiness test discarded it before the instrument saw it. There was no exception and no log line. 0 is the interesting end of the range for a discharge test. - A LabJack that is not a T7 no longer lands on the T7’s code paths.
-
DebugNet.flash()and.erase()take the DA1469x flash-loader path. The CLI took it and the Python Net API did not, so the same operation worked one way and failed the other. -
The
authorized_keysprobe withdrew the operator’s own SSH identities. It failed to answer for the boxes it exists to repair, and both callers read that silence as success. - A box without a pigpio container gets the default pigpio address.
- Editing a net in the Net-Manager TUI no longer discards the rest of the record.
Improvements
- A second role on a dual-role instrument is a notice rather than a block. One battery net and one supply net on the same chip is a supported setup.
- The bench watchdog reports a late night instead of filing an issue about it.
- The supply suite prints its bench-fixture note on a failure, not on a pass.
Known Limitations
-
setup_battery(soc=0)is not confirmed on hardware. The Keithley 2281S used for this work has AC power and never appears on the USB bus, so:BATTery:SIMulator:SOC 0is unverified on a real instrument. The unit tests cover the code path, and the driver already handled 0 correctly. - The MSO5000 SPI trigger surface is not confirmed end to end. Every SCPI node was verified against an MSO5074, but the logic-analyzer suite was not run against the merged code.
- SPI and I2C are not supported on the LabJack U3. The T7 drives both through firmware registers that the U3 does not have.
-
LJM fails outright when a U3 is present. Asked for device type
"ANY"it returnsLJME_U3_NOT_SUPPORTED_BY_LJMrather than skipping the device it does not support. Every T7 path in Lager names the device type explicitly and is unaffected. Your own code that callsljm.openS("ANY", ...)orljm.listAllS("ANY", ...)will stop working once you plug in a U3.

