- Panel calibrate: Ctrl-C saves map during patch panel; skip/quit aliases (s/skip/., q/quit/exit); clearer prompts and help.
- PCIe prompt: s/skip keeps metadata; note Ctrl-C in calibrate.
- check_concentrator: --panel-calibrate, --inrush and options; compact Power line with 120V/220V AC amp hint from total W.
- docs/brainstem-sdk.md: find How_To_Build.txt examples.
Made-with: Cursor
- usb_probe: sysfs scan for 24ff hubs (bus/dev, VID:PID, strings) plus ttyUSB/ttyACM;
usb_acroname_hub_identity_list(); usb-hub-tty-json returns full records.
- check_concentrator: Location stays host+TTY; new USB column (lsusb-style line);
enrich via local sysfs and remote usb-hub-tty-json per SSH host.
- Add --powercycle: all ports OFF/verify then ON/verify (local + remotes), restore on failure.
Made-with: Cursor
Expose FiWiConcentrator.port_metrics_snapshot() for machine-readable
per-port power, current (mA), and voltage (V). Add fiwi.py
port-metrics-json for SSH checks. check_concentrator prints a second
table aligned with the consolidated hub list; stale remotes get
upgrade instructions when the subcommand is missing.
Made-with: Cursor
Move SSH transport into fiwi.ssh (replacing fiwi.ssh_node) and add fiwi.fiwi_relay
with FiWiRelay for venv and pip bootstrap over SSH or locally. Update imports,
docs, and remote_ssh.env.example for python -m fiwi.fiwi_relay.
Extend test_read_remote with a single-SSH readiness probe (brainstem via
FIWI_REMOTE_PYTHON and env/bin/python3), clearer setup hints, and --list-only.
Add probe helpers on fiwi.fiwi_relay.host and unittest for marker parsing.
Merge [remote_hubs] hosts in config INI; set uax24 remote_python to the hub
venv after relay setup.
Made-with: Cursor
Replace the hubmgr layout with the fiwi package and fiwi.py entry point.
Add SshNode with deferred remote subprocess overlap, async capture helpers,
and a central diag timeline (dmesg, lspci, kernel-dump event placeholder).
Document design, CLI, and test/automation authoring under docs/.
Refresh fiber_map.example.json and remote_ssh.env.example; widen .gitignore
for Python tooling and local operator files.
Made-with: Cursor