A Cast reconnect to an unknown route fails with Chrome's message
Under the Google Chrome brand on desktop: the reconnect() promise rejects with NotFoundError 'Route not found'. N/A when PresentationRequest is absent, for other brands and engines, on Android, and for any other outcome (severity: warn).
What a detector infers
Chrome's Presentation API hands Cast requests to the media router in the browser process. When a page asks to reconnect to a Cast session that does not exist, with new PresentationRequest(['cast:']).reconnect(id) and an id nobody has used, the media router looks for the route and rejects the promise with a NotFoundError whose message is 'Route not found'.
Start Chrome with --disable-features=MediaRouter and the request never reaches a router: the promise is rejected with the same error name and a different message, 'Error joining route: No matching route'.
Measured on 1 November 2026 on Windows, three calls in each of four setups: genuine Chrome 156 and Clearcote with the media router on gave 'Route not found' every time; genuine Chrome started with the switch and Clearcote launched through an SDK that passed it gave the second message every time. Every other Presentation and Remote Playback value probed was identical in both.
The common automation drivers put MediaRouter in their default --disable-features list, so a page can tell from one rejected promise that the browser was very likely started by one of them, and at least one commercial bot detector reports exactly this as automation. An enterprise policy that turns Cast off may produce the same message, which is why the row is a warning.
How to resolve it
Leave the media router on. Remove MediaRouter from the --disable-features list the driver passes (Clearcote's SDK does this from 0.68.5); DialMediaRouteProvider can stay disabled, which keeps Cast discovery off the local network.
Nearby checks in Automation surface
- A fresh frame has none of Node's, Deno's, Bun's or Pyodide's globals
runtime-globals-absent-in-fresh-frameA new about:blank frame starts with the browser's own globals and nothing else, because no page script has run in it. process, module… - history.replaceState to another origin throws SecurityError
history-replacestate-cross-origin-throwshistory.replaceState may change the URL shown for a document only within its own origin; the HTML standard requires a SecurityError for any… - No automation extension has written its marker into the page
automation-extension-markupSome automation tools announce themselves in the pages they control. - No interface stable Chrome keeps behind a developer switch is exposed
flag-only-surfaces-absentStable Chrome keeps unfinished web platform features behind developer switches, and some of them add global interfaces as soon as the switch… - A burst of history updates is rate-limited, as Chrome's IPC flooding protection does
history-updates-rate-limitedEvery history.pushState or replaceState call sends a message from the page to the browser process. - No debugger client attached to this tab after it loaded
console-replay-trapV8 keeps the console messages a page logs, which is why DevTools can show messages logged before it was opened. - navigator.webdriver does not assert WebDriver control
webdriver-offThis check is intentionally one-way. The WebDriver specification defines navigator.webdriver as the browser's assertion that it is under… - navigator.webdriver is a native prototype getter returning false
webdriver-descriptor-integrityRather than reading the value, this check inspects the property's shape: it requires a getter on Navigator.prototype whose…
Clearcote is a browser built for fingerprint coherence
It is a Chromium fork, maintained by the same people who wrote this reference. It ships as a compiled browser rather than as a stealth script injected into someone else's — which is a description of how it is built, and is not an argument about how it behaves on this check.
This audit takes no position on how Clearcote scores on Automation surface checks, on this one, or anywhere else. It has no baseline corpus of other people's fingerprints to rank you against and no vendor scoreboard — nearly every check is self-referential, asking one browser the same question through two independent APIs and reporting whether both answers can be true at once. It runs identically on any browser, including ours. Run it on yours and read the result yourself.
See the other checks in Automation surface — the family presentation-cast-reconnect-error belongs to.
