You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Browser router phase 1 follow-ups from PR #121 review #122
PR #121 (merged as 8037810) shipped the browser tool router and the external Playwright tier. This is phase 1, PR 1 of the browser tiers design in docs/adr/browser-tiers.md and docs/requirements/browser-tiers.md (issue #118). Review found no HIGH findings. This issue collects the MEDIUM and LOW follow-ups.
Out of scope here and tracked in #118: the stdio managed Playwright child (later phase 1 PRs), the wizard page, on-demand install, and the Apple Events tier.
MEDIUM
1. PortOwnerProbe matches only the local port. It checks neither address family nor loopback address, so a same-uid listener on 127.0.0.1:<port> can approve a request to ::1:<port>. Pass the validated endpoint into the probe. Add a test with simultaneous IPv4 and IPv6 listeners.
2. ExternalPlaywrightClient.healthCheck re-runs initialize every 30 s.
It overwrites the session id.
It never sends DELETE for old sessions.
It uses the 90 s request timeout, while R2 allows 2 s.
LOW
Health check timeout should be 2 s (R2), not 90 s (PlaywrightBackend / ExternalPlaywrightClient).
BrowserRouter does three owner probes plus an extra tools/list per tools/call. Reduce.
PlaywrightBackend.tools() turns a transient error into []. Propagate or keep the last known list.
R1.6 and R7.5.5 reporting is not wired up: mode and ownerSummary are missing from sys_info and the menu, and there is no structuredContent.backend.
The BrowserRouter guard map last is never pruned.
The browser upstream port is not range-checked in main.swift.
A repeated --upstream browser= flag is dropped silently. Reject it or take the last value, and say so.
The Host header for ::1 is sent without brackets. It should be [::1]:<port>.
The BrowserCatalogTests tailscale scan is case-sensitive, while the shell guard uses grep -i. Make the Swift scan case-insensitive.
Activity