Resolves eight conflicts from main's SSH e2e lane restructure and the mobile
relay stream-cancellation fix.
- e2e.yml / run-ssh-docker-e2e.mjs / pr-e2e-gate-contract.test.mjs: keep main's
lane structure and re-express only the hosted-mobile-webview SSH exclusion.
- reliability-gates.jsonc: main's file plus the branch's mobile-hybrid gate.
- mobile-relay-rpc-streams.ts: main's cancellation machinery replaces the
branch's equivalent, generalized to every server-assigned-id method.
- docker-ssh-relay-connection.ts: main's delegation to connectSshTestTarget,
with the branch's connect timeout moved into that shared helper.
- mobile-session-route-parity.test.ts: digest re-frozen for main's #12772.
Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
Merging main pushed three files past their oxlint max-lines budget. Each is split by concept rather than exempted.
- terminal-links.ts: the spaced-path pass moves to terminal-spaced-path-link-detection.ts and the URL-vs-path boundary check to terminal-uri-scheme-boundary.ts, which both passes share.
- docker-ssh-relay-connection.ts: reconnect and post-fault authority recovery move to docker-ssh-relay-reconnect.ts; 14 callers updated. The connect and reconnect timeout races stay duplicated because page.evaluate serializes its callback, so a shared helper cannot cross that boundary.
- MobileNativeChatView.tsx: the tools-disclosure and Stop chrome row moves to MobileNativeChatChromeRow.tsx.
No behaviour change.
Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb