diff --git a/meshterm/core/models.py b/meshterm/core/models.py index ec19dff..ddc1bf8 100644 --- a/meshterm/core/models.py +++ b/meshterm/core/models.py @@ -539,14 +539,6 @@ class TraceResult: return None return min(h.snr for h in self.hops) - @property - def path_str(self) -> str: - """A compact ``a -> b -> c`` rendering of the resolved path.""" - if not self.hops: - return self.target - nodes = [h.node or f"hop{h.index}" for h in self.hops] - return " -> ".join(nodes) - def edges(self, device_label: str = LOCAL_DEVICE_LABEL) -> list["HopEdge"]: """Frame the per-hop SNR as directed ``origin -> destination`` edges. diff --git a/meshterm/ui/records_screen.py b/meshterm/ui/records_screen.py index dccce77..b3be13e 100644 --- a/meshterm/ui/records_screen.py +++ b/meshterm/ui/records_screen.py @@ -680,6 +680,7 @@ async def open_records(ctx: "AppContext") -> dict: items, footer_hint="↑↓ move · Enter open · Esc back", wrap=False, + hscroll=True, # a long walk's row slides under ←→ instead of dying at the fold ) picked = await session.run_screen(browser) if picked is CANCEL or picked is None or picked[0] == "back": diff --git a/meshterm/ui/widgets.py b/meshterm/ui/widgets.py index 839f4c5..8284893 100644 --- a/meshterm/ui/widgets.py +++ b/meshterm/ui/widgets.py @@ -1091,7 +1091,7 @@ def tx_opt_table(result: TxOptResult) -> Table: A Rich :class:`Table` of TX level, target SNR, success rate, and sample count. """ table = Table( - title=f"TX sweep · {result.admin_node} -> {result.target}", + title=f"TX sweep · {result.admin_node} → {result.target}", border_style="muted", expand=False, )