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