v0.13.258
Released 2 April 2025.
Highlights
Watch check pipeline stabilisation
The watch check pipeline was reverted to its stable v0.13.218 baseline and rebuilt with only proven additions:
- One watch per job β every watch check runs as a single isolated job. No more multi-watch batches that could strand an entire batch on one slow target.
- Concurrency reduced to 2 β prevents CPU starvation when multiple large diffs run simultaneously.
- Retry from Operations β failed watch check jobs can be retried directly from the Operations page.
- Heartbeat β long-running jobs emit periodic heartbeats to prevent false orphan detection.
JSON auto-detection fix
JSON API responses (application/json) are now correctly detected before any HTML-oriented transforms run. Previously, the global subtractive selectors step would load raw JSON into Cheerio (wrapping it in <html><body> tags), breaking JSON parsing downstream and producing false change alerts on every check.
Content extraction
- User-Agent presets β set a workspace-level User-Agent from browser presets (Chrome, Safari, Firefox) or a custom string. Watches can override via custom headers.
- IPv4-first DNS β outbound requests prefer IPv4 to avoid connectivity issues on dual-stack hosts.
Reliability
- Background worker forwarding restored for Netlify deployments β watch checks run on the API function which gets full CPU allocation, preventing diff timeouts on large pages.
- Dispatch timeout cascades no longer crash the scheduler β failures are logged and jobs stay queued.
- Stale watch locks are recovered before new checks are queued.
Infrastructure
- Storage migration validates backend configuration before starting.
- System CA certificates used by default for outbound HTTPS.
- Build versioning computed from git metadata (
major.minor.commitCount+shortSha).
Bug fixes
- Fixed JSON responses being wrapped in HTML by Cheerioβs
stripSelectorsbeforeextractJsonSourcecould parse them. - Fixed watch check jobs stuck in
diffingafter pipeline changes introduced timeout wrappers that interfered with synchronous diff computation. - Fixed
needsBaselineflag not being cleared after pipeline stabilisation, causing unnecessary calibration passes.