Skip to content

release: package set 0.3.0 — HostStats message set, bias_health + derive hook, Zenoh config cleanup - #3

Merged
mbreiser merged 13 commits into
mainfrom
release/0.3.0
Oct 28, 2026
Merged

mbreiser merged 13 commits into
mainfrom
release/0.3.0

Conversation

@mbreiser

@mbreiser mbreiser commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Package set 0.3.0 (one version, both packages; CONTRACT §7: a .msg change is a wire-contract change).

rig_interfaces: the host-pressure message set (new)

HostStats.msg + its four record types DiskStats.msg, NetStats.msg, GpuStats.msg, ProcStats.msg, verbatim from the request written on ww18 (webDisplayTools rig/docs/host-stats-request.md, 2026-10-28; no field renamed). Published on /rig/host at 1 Hz by the generic host monitor rig_nodes.host_monitor, which is being prototyped in webDisplayTools (rig/nodes/host_monitor.py) and moves here once measured; until a rig installs the typed package the node publishes std_msgs/String JSON with the same field names. CONTRACT.md: the /rig/host topic row (RELIABLE / KEEP_LAST 10 / VOLATILE), a §5a with the field semantics, the absent-value rule (NaN float / 0 int). python -m rig_nodes.build_interfaces --check now lists every message the installed package exports.

rig_nodes

  • rig-nodes#1 merged in: rig_nodes.bias_health (CountRate, bias_drops) + the derive(records) hook on foxglove_json.convert (whole-stream derivations, well-known Foxglove schemas). webDisplayTools #269 (okey-cokey) needs both.
  • Zenoh configs: the deprecated keys routing.router.peers_failover_brokering and routing.peer.mode / linkstate removed from both json5 files (they warned on every node start; an empty peer: {} still did, so the block is gone). The router starts with no warning now.
  • SETUP.md (rig-nodes#2) merged in; its recipe pins 0.3.0.
  • pixi manifest: the macOS 14 floor on the platform entry ({ name = "osx-arm64-macos-14-0", platform = "osx-arm64", macos = "14.0" } — pixi requires a name distinct from the subdir for an entry with virtual packages; the deprecated [system-requirements] table is gone), requires-pixi = ">=0.80", lock written by pixi 0.83. Same in the CI acceptance manifest and the SETUP recipe.

Not in 0.3.0 (decided 2026-10-28): the ScanImage ZeroMQ frame-stream node (webDisplayTools #261) and the SiPM node (#266). The imaging (2P / ScanImage) work is being moved out of the public webDisplayTools repository and the inventory is still open; imaging code lands in rig-nodes only after that decision. A first version of this branch carried both ports; they were removed again before tagging.

CI

package-set.yml: PACKAGE_SET_VERSION 0.3.0; the payload check includes bias_health.py; the acceptance manifest uses the platform-entry floor.

Tested here (macOS, pixi 0.83)

  • pixi install builds both packages in place; build_interfaces --check: importable + serializes, msgs = ArenaFrame, ConnectorReply, DiskStats, FicTracFrame, GpuStats, HostStats, NetStats, ProcStats
  • pixi run test-pure 40/40, pixi run test 48/48; the Zenoh router starts with 0 warnings

Release

Tag v0.3.0 on the commit that carries the channel payload (README "Releasing a package set"); consumers: webDisplayTools re-pins in its 2026-10-28 candidate (LAB-338). Linear: LAB-338 (rig-nodes), LAB-303 (bias_health / okey-cokey).

🤖 Generated with Claude Code

mbreiser and others added 10 commits October 26, 2026 21:17
…rive` hook on foxglove_json.convert

* `rig_nodes/bias_health.py` — CountRate (frame rate as the slope of the BIAS frameCount over the
  last 2 s of status polls) and bias_drops (the sum of the loss counters the Atlas10 build reports;
  None when it reports none). Moved verbatim from webDisplayTools `rig/nodes/bias_health.py`
  (PR reiserlab/webDisplayTools#269), where the arena visualization node and the dashboard replay
  import it; pure, no ROS.
* `foxglove_json.convert(..., derive=None)` — a second, whole-stream hook beside the per-message
  `enrich`: `derive(records)` gets every kept record (topic, log_ns, obj) in log order and yields
  new messages (topic, t_ns, obj, schema_name | None). A derived message may name one of
  `WELL_KNOWN_SCHEMAS` (foxglove.CompressedImage today) instead of an inferred schema; an unknown
  name is refused. The report gains `derived`. This is what the arena wrapper's `--stimulus` mode
  needs (rebuilding the expected-display images and health topics from the browser stream), and
  it could not be expressed through `enrich`, which maps one recorded message to one output.
* tests/test_pure.py: bias_health (6 checks) + derive (5 checks); 40/40.

Not a release: the version stays 0.2.1 until the next package set (README "Releasing").

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… ww18, Bergamo PC, ww14)

The living setup note for every machine that installs the package set, seeded from the
2026-10-14/27 Mac runs, ww18 2026-10-15/16, the Bergamo ScanImage days and the ww14
okey-cokey setup. Application-specific setup stays with the application (webDisplayTools
rig/SETUP.md points here).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ce-dependency rule

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… newer pixi, Foxglove PATH on Windows

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…orts, bias_health, Zenoh config cleanup

rig_interfaces: HostStats + DiskStats / NetStats / GpuStats / ProcStats (the host monitor's /rig/host
sample, verbatim from the 2026-10-28 request; no field renamed). CONTRACT: the /rig/host row, §5a,
the new topics and vocabularies (ScanImage frame stream, SiPM, scanimage status `acq`), version 0.3.0.

rig_nodes: scanimage_frames_node + sims.zmq_frames_mock + zmq_latency_report (ex webDisplayTools #261,
Bergamo-validated 2026-10-22; paths and imports only), scanimage_node --frame-counter acqstatus +
the mock's getAcqStatus, _common.spin handles SIGBREAK; sipm_node / sipm_cmd / thorsipm (ex #266,
EXPERIMENTAL, never bench-tested); bias_health + the foxglove_json derive hook (rig-nodes#1) and
SETUP.md (rig-nodes#2) merged in; the dead Zenoh keys routing.router.peers_failover_brokering and
routing.peer.mode/linkstate removed from both json5 configs; run-dependencies pyzmq + numpy;
console scripts rig-scanimage-frames, rig-zmq-frames-mock, rig-zmq-latency, rig-sipm-node,
rig-sipm-cmd, rig-sipm; build_interfaces --check lists every exported message.

Tests (macOS, pixi 0.83): test-pure 40/40, test 48/48, test-frames 44/44, test-sipm 25/25; CI's
acceptance job now also runs the two new harnesses against the installed packages.

LAB-338, LAB-303, LAB-319.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…S floor on the platform entry, requires-pixi >= 0.80

The 0.19 set's Zenoh reports `routing.peer.mode` / `linkstate` as deprecated even for `peer: {}`; the
router now starts with no warning (checked on the Mac). The workspace manifest, the CI acceptance
manifest and SETUP.md's recipe declare the macOS 14 floor on the osx-arm64 platform entry instead of
the deprecated [system-requirements] table, and `requires-pixi = ">=0.80"` keeps an older pixi from
rewriting the lock (webDisplayTools #280). Lock re-written by pixi 0.83. A mangled comment
("rmw_zenoh 0.3.01") from the version bump restored to 0.2.11.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…arm64-macos-14-0)

pixi 0.83 rejects `{ name = "osx-arm64", platform = "osx-arm64", macos = "14.0" }` ("platform entry
rejected: You tried to add a virtual package into a special subdir platform"); the name is the one pixi
0.80 itself wrote on ww18 when it rewrote the old lock. Same in the CI acceptance manifest and the
SETUP.md recipe.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…burst (CI's macOS runner drains faster than the burst)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…stays out of rig-nodes for now)

Michael is moving the imaging (2P / ScanImage) work out of the public webDisplayTools repository and the
inventory of what goes where is still open, so webDisplayTools #261 (frames wrapper) and #266 (SiPM) are
NOT ported in this release: their nodes, mock, report, harnesses, console scripts, tasks, run-dependencies
(pyzmq, numpy), CI steps and CONTRACT rows are removed again; scanimage_node, si_json_mock and _common are
back to main. 0.3.0 = the HostStats message set + bias_health / the derive hook + SETUP.md + the Zenoh
config cleanup + the pixi platform-entry / requires-pixi change.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@mbreiser mbreiser changed the title release: package set 0.3.0 — HostStats messages, ScanImage frame stream + SiPM ports, bias_health, Zenoh config cleanup release: package set 0.3.0 — HostStats message set, bias_health + derive hook, Zenoh config cleanup Oct 28, 2026
mbreiser and others added 3 commits October 28, 2026 17:50
…e on /rig/host), test, doc

Ported from webDisplayTools `rig/host-monitor-port` f5cf5a6 (prototyped on ww18): the sampler is
pure (stdlib ctypes + psutil, no ROS; Windows cycle counters, one NtQuerySystemInformation call,
GetIfEntry2, NVML through ctypes; psutil elsewhere), the node publishes rig_interfaces/HostStats when
the installed package has it, else std_msgs/String JSON with the same field names (--typed auto|on|off).
Changes for the package: py_group's script roots are a parameter (HostSampler(py_roots=…), repeatable
--py-root PATH; `-m rig_nodes.<module>` processes are grouped without it), --log-dir defaults to
./runlogs, imports from rig_nodes.host_sampler, psutil is a run-dependency, console script
rig-host-monitor, `python -m rig_nodes.host_monitor` works. tests/test_host_sampler.py (34 checks, fake
psutil) reads the .msg files from the installed share directory or the source tree; the acceptance job
runs it. docs/host-monitor.md is the design note. CONTRACT's /rig/host row names the node's flags;
SETUP.md's recipe adds the one-minute check.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…gnored; the previous release commit carried only the README)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@mbreiser
mbreiser merged commit f6fdd67 into main Oct 28, 2026
10 checks passed
mbreiser added a commit that referenced this pull request Oct 29, 2026
0.4.0: the ScanImage JSON connector moves to the private 2P rig repo (draft, after #3)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant