- 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
Track only the official .tgz under brainstem_sdk/; ignore extracted trees.
Add docs/brainstem-sdk.md with untar steps, udev, C++ examples, and Reflex/arc notes.
Made-with: Cursor
- Summary line uses Power(N) where N is ports with metrics power ON.
- Port table drops Pwr column; add W column; widen mA; remove executable bit drift.
Made-with: Cursor
- Port table: sort by panel; Power: Total W / mA (per port follows) as sole header;
dash alignment; fiber_map panel column unchanged.
- Add README.md with git hook setup; githooks/post-commit (opt-in push + remote pull);
scripts/install-git-hooks.sh sets core.hooksPath.
Made-with: Cursor
- Per-port table: leading Panel column from fiber_map.json (hub/port/ssh vs consolidated rows).
- Match separator line lengths to table headers; shared _CONSOLIDATED_HUB_HDR / _PER_PORT_PWR_HDR.
- Extract _print_per_port_power_table; run after --powercycle with title override.
- Location/USB column labeling and per-port table layout tweaks.
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
Single banner, SSH summary aligned with check_remote, one USB section with
local hostcards then each remote show_hostcards, PCIe catalog last; exit 1
if any remote SSH run fails.
Made-with: Cursor
OpenSSH runs the remote command through sh -c with space-joined words; passing
bash, -lc, and an if/then/fi script as separate argv tokens broke discover
and stdbuf wrapper. Use bash -lc with shlex.quote(inner) as a single token;
apply in SshNode, probe_remote_hub_readiness, and FiWiRelay._ssh_argv.
Made-with: Cursor
Former tests/test_read_remote.py and tests/test_concentrator_instantiate.py; update
docstring examples and pytest entry test_concentrator.
Made-with: Cursor
SSH remote command uses stdbuf -oL -eL when available so libc-backed I/O
flushes on newlines; fiwi.py enables line_buffering on TextIO stdout/stderr
for Python prints over pipes.
Made-with: Cursor
Without a TTY, libc/BrainStem output can stay block-buffered while the SSH
client captures the remote stdout pipe, so discover could exit 0 with an
empty transcript. Unbuffered mode fixes test_read_remote and invoke_capture.
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
- Keep hub port powered through fiber id + PCIe prompts; power off after.
- Ctrl-C saves fiber_map.json, turns off current port, exits 130; handle during PCIe.
- Remote calibrate: set step_powered only when SSH on succeeds; skip step if remote
ON failed (was incorrectly treating failed ON as powered).
- power() returns False when hubs cannot connect; CLI on/off exits 1 so SSH sees failures.
- remote_hub_port_power: merge stdout+stderr for diagnostics; ssh_forward_capture uses stdin=DEVNULL.
- Warn when calibrate_remotes yields zero remote steps; clarify remote_ssh.env.example.
Made-with: Cursor
Add optional fiber_ports.pcie (board_serial, sfp_serial) and PCIe column in
panel/fiber status. During panel calibrate, prompt to pick known H3 cards 1–6
and SFP lane 1–4 from adnacom_pcie_catalog, or manual/clear/keep.
HUB_MANAGER_CALIBRATE_REMOTES in remote_ssh.env merges into calibrate SSH
hosts so one panel calibrate run can cover local and remotes without repeating
--ssh. Document in remote_ssh.env.example and help.
Made-with: Cursor
Move AcronameManager, CLI, fiber map I/O, USB probe, remote SSH, and path
configuration into hubmgr/. hub_manager.py only configures map paths next to
the script and delegates to hubmgr.cli.main. Clarify remote_ssh.env.example
for Pi-side paths. Add fiber_map and panel_map example presets.
Made-with: Cursor
Support USBHub2x4 and USBHub3p discovery with correct downstream port counts,
patch-panel mapping via panel_map.json, lazy brainstem import and diagnostics,
SSH forwarding with optional remote_ssh.env defaults, and requirements.txt
for brainstem. Ignore local panel_map.json, remote_ssh.env, and __pycache__.
Made-with: Cursor