2026-06-03

The feed grew a real table: a Postman-style, sortable / resizable / reorderable column grid for the 1-line view, with a device split, a status dot, humanized durations, and server-side search that finally reports the right "X of N". BusyBro caught up to the MCP surface at 87 tools and gained per-service specialist agents, a ⚡ Performance specialist, web access, and a persistent floating panel you can resize from all eight sides. The status board pivoted its Supabase card to our own per-service health, and the proxy-server absorbed a stack of open-relay-flood hardening plus the issue-#001 source-IP gate. iOS dropped its deployment floor to iOS 16. Dashboard builds 299 → 308; Supabase migrations 215 → 227; proxy-server builds 137 → 141; status builds 3 → 9; iOS build 167.

What changed

Proxyman-grade feed table (dashboard 299 → 308 / supabase 216 → 219)

  • The 1-line feed is now a Postman-style column table (299 / supabase 216) — columns are sortable, resizable, reorderable, and draggable (302 / supabase 217), with chevron sort icons and draggable column chips for picking which columns show (303 / supabase 218).
  • Device split with a per-row status dot and a mobile-first default column set (301), humanized request duration, and sortable Time / Method / ID columns (302 / supabase 217).
  • Counter divergence fix — live host counts are now scope-gated and the double per-device increment was dropped, so the displayed totals stay correct (300).
  • A refined detail layout for the expanded row (304 / supabase 219).

Server-side feed search (dashboard 294 / supabase 215)

  • Feed search moved to the server via the new entries_filtered_list RPC backed by a trigram GIN index, fixing the "0 of N / no entries match" bug and returning the correct "X of N" match count.

BusyBro: full MCP parity → 87 tools (dashboard 308 / supabase 226)

  • BusyBro now reaches full MCP parity at 87 tools (308 / supabase 226), with a jsonb-arg coercion fix so object-typed tool arguments are no longer stored as strings (supabase 227).
  • Per-service specialist agents — BusyBro can spin up and route to per-service specialists (dashboard 306 / supabase 221), distinguishes those agents from the component roster (supabase 222), and supports managing service agents with id deep-links (supabase 224) plus parity-audit fixes — list_tags returns id, and Telegram id deep-link templates (supabase 225).
  • A ⚡ Performance specialist and a cross-cutting performance/ workspace, mirroring the security specialist (supabase 220).
  • Web access via the Anthropic web_search server tool (supabase 223).
  • A persistent floating panel (305) that is resizable from all eight sides — four edges plus four corners (307).
  • Telegram discussion mode with id deep-links (supabase 224 → 225).

Status board (status 3 → 9 / proxy 141)

  • The Supabase Platform card pivoted from upstream Cloud Pro status to our project's per-service health grid (Auth / Storage anon probes plus db / rest / realtime / pooler via the Management API), with project meta and our-region-only maintenance (status 8). The project region is read from the Management API — we are eu-west-1, not eu-west-2 (status 9).
  • A Proxy Security card surfaces flood / abuse signals and the issue-#001 gate, positioned directly under the Host card (proxy 141 / status 3 → 7).

Proxy hardening (proxy 137 → 141)

  • Open-relay flood fixes — a capture freeze + OOM under flood (137) and insert starvation that crowded out legitimate capture (138), plus a per-device enqueue rate cap that protects legit capture from relay floods (139).
  • Issue #001 — source-IP PAC gate — reworked to a durable source-IP binding since the iOS PAC is PROXY-only, shipped in shadow mode with pac-flow logging, plus a PAC apex directive (140). The pool range is documented as 9000–9999.

iOS 16 support (ios 167)

  • BusymateHelper now runs on iOS 16@Observable migrated to ObservableObject, an onChangeCompat shim, and availability gates throughout (#43).

Where it's documented