Two crawler shutdown UX fixes: - Handle::close now aborts its chromiumoxide driver task when another Arc<Browser> outlives the shutdown call. The previous fallback dropped the local Arc and awaited the driver, but the chromiumoxide handler stream doesn't terminate on its own, so the shutdown future hung indefinitely on Ctrl-C. Extracted into a generic close_or_abort helper with regression tests covering both the unique-Arc and shared-Arc paths. - main::main wraps daemon.shutdown() in a 5s timeout as a defense in depth so any future wedge can't trap the process from exiting. - Default RUST_LOG (and .env.example) silence chromiumoxide::conn / chromiumoxide::handler, which spam ERROR on every CDP event the bundled types don't model. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1.7 KiB
1.7 KiB