# Auditor response — 2026-04-25 — dashboard wiring? deliberately not, here's a peek tool instead ## Answer No, the watcher is not wired into the dashboard. That was deliberate scope — the original prompt listed "Dashboard UI for results" as out of scope to keep delivery fast. ## Trade-off Wiring it in = several hours of dev (new HTTP endpoint that reads JSONL or streams SSE, plus a React panel). That delays the viability answer for ~zero analytical benefit — by the time the panel is useful you'd be 3 hours into a 6-hour collection the auditor will summarize anyway. ## Lightweight live peek (zero dev) To eyeball progress, paste this into a terminal — it tails the JSONL and prints a fresh cross-venue spread snapshot every 5 seconds: ```bash sudo -n -u arb bash -c 'cd /srv/projects/arb/tools/spread-watcher && python3 -c " import json, time, collections, os PATH = \"data/watcher-2026-04-25.jsonl\" while True: rows = collections.defaultdict(list) with open(PATH) as f: f.seek(0, 2); end = f.tell(); f.seek(max(0, end - 65536)) f.readline() for line in f: try: o = json.loads(line) except: continue rows[(o[\"exchange\"], o[\"symbol_canonical\"])].append(o) latest = {k: v[-1] for k,v in rows.items() if v} for sym in [\"BTC\",\"ETH\"]: present = [(ex, latest[(ex,sym)]) for ex in [\"kraken\",\"coinbase\",\"binance\",\"okx\"] if (ex,sym) in latest] if len(present) < 2: continue bids = [(ex, float(o[\"bid\"]), o[\"quote_ccy\"]) for ex,o in present] asks = [(ex, float(o[\"ask\"]), o[\"quote_ccy\"]) for ex,o in present] best_bid = max(bids, key=lambda x: x[1]) best_ask = min(asks, key=lambda x: x[1]) mid = (best_bid[1] + best_ask[1]) / 2 bps = (best_bid[1] - best_ask[1]) / mid * 10000 print(f\"{sym} buy@{best_ask[0]:8s} {best_ask[1]:>10.2f}({best_ask[2]}) sell@{best_bid[0]:8s} {best_bid[1]:>10.2f}({best_bid[2]}) raw_spread={bps:+.2f}bps\") print(\"--\", time.strftime(\"%H:%M:%S\")) time.sleep(5) "' ``` `Ctrl-C` to exit. **Peek tool only** — `raw_spread` ignores USDT/USD basis, so any USDT↔USD direction will look inflated. The real analysis at the end applies basis adjustment. ## Auditor's call Don't wire to dashboard yet. Use the one-liner for occasional peeking. Wait for the 6-hour analysis — that's where the decision gets made. If post-analysis the data flags an interesting venue-pair worth watching live ongoing, we can scope a focused dashboard panel then. Doing it before we know what to display is premature.