Skip to content

docurip v0.4.0

Choose a tag to compare

@MokuDev MokuDev released this 27 Jun 22:56

v0.4.0 (2026-06-28)

Added

  • Full-text search in ResultBrowser: backend-powered content search via search_job_results — reads .md files from disk with relevance scoring and preview snippets. Triggered at 3+ characters with 300ms debounce.
  • ErrorKind icons in LiveConsole: error events now display visual indicators for error type — red disk icon for Disk, orange cloud for Network, file-x for Parse, stop sign for RobotsBlocked, and generic warning for Unknown.

Changed

  • job.results keeps only metadata in RAM: PageMeta now stores URL, title, HTTP status, and link count — Markdown content no longer sits on the heap. Eliminates O(n·content) RAM growth during large crawls.
  • Persist throttling: persist_job is no longer invoked after every page; it runs at most every 50 pages or 10 seconds, whichever comes first.
  • Introduced JobStatus::Cancelled: cancelled jobs now report status Cancelled instead of Failed.
  • ErrorKind for typed error classification: CrawlEvent::Error now carries kind: ErrorKind (Network / Disk / Unknown), laying the groundwork for differentiated error display in the frontend.

Fixed

  • Blocking tokio::select! in crawl loop: select! { _ = persist_interval.tick() => true, else => false } blocked each loop iteration for up to 10 seconds because _ = future always matches and else never fires. Replaced with a non-blocking Instant::elapsed() check — resolves a ~7× throughput regression.