Chrome returns loader_id: None for same-document navigations (e.g., hash routing in SPAs). In these cases, Page.loadEventFired never fires, causing wait_for_lifecycle to hang forever. The fix checks nav_result.loader_id.is_some() before waiting for lifecycle events. Also added regression test e2e_navigate_same_url_twice_should_not_hang. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>