0.13.258

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 stripSelectors before extractJsonSource could parse them.
  • Fixed watch check jobs stuck in diffing after pipeline changes introduced timeout wrappers that interfered with synchronous diff computation.
  • Fixed needsBaseline flag not being cleared after pipeline stabilisation, causing unnecessary calibration passes.