# X_SCRAPE_WATCHDOG_STOPPED

## Means

the wedge watchdog stopped measuring and the run was ended

## Typical cause

the clock the scrape definition (or `apps/<app>/runtime.ts`) supplied has a `sleep()` that **rejects**, so the guard's poll loop died and nothing was left watching for a wedged browser. Ended rather than run unwatched: a guard that stopped measuring is the first incident with nothing armed. A separate code from `X_SCRAPE_WEDGED` on purpose — that one means the page stopped answering, and sending a reader there to investigate a page that is fine is the whole cost of reusing it. **Terminal, where its sibling is retryable**: attempt 2 reaches the same clock identically, so retrying buys five browser launches that die at the first poll — and on an authenticated target, five arrivals at a login

## Fix

`drop the custom clock: from the scrape() definition and any clock: line in apps/<app>/runtime.ts — @ultimat3/core's systemClock is the only SleepClock whose sleep() cannot reject — then re-run`

[Scraping](/error-codes#scraping)
