You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Here are some key observations to aid the review process:
⏱️ Estimated effort to review: 4 🔵🔵🔵🔵⚪
🧪 No relevant tests
🔒 Security concerns
Reverse tabnabbing: the new external Open link in JobScraper.Web/Features/JobOffers/Scrape/ScrapePage.razor uses target="_blank" without rel="noopener noreferrer". A malicious destination page could access window.opener and potentially redirect or manipulate the original application tab.
The new page counter initialization and limit check appear to skip scraping the first loaded Indeed page when PagesLimit is 1, and also log/page-number subsequent work as if scraping starts from page 2. This should be validated because it can silently return zero results for the most restrictive limit.
Detail scraping now calls the scraper directly without the earlier retry wrapper. Transient Playwright/network failures may now cause more offers to remain unscripted or fail the whole command more often, so the new failure behavior should be reviewed carefully.
Detail scraping now excludes all user offers whose linked company entity is null. If company linking is incomplete or delayed, valid offers may never get their details scraped and can remain stuck in a pending status.
Filtering on j.Details.Company != null will skip details scraping for offers whose company relation is not populated yet. That can leave valid offers permanently stuck in ToScrape, so avoid excluding them here.
Why: The added filter Where(j => j.Details.Company != null) can prevent valid offers from being processed by DetailsScraperBaseHandler, leaving them stuck before details scraping. Removing that condition is a meaningful correctness fix, and the suggested improved_code matches the changed hunk.
Medium
Restore transient failure retry
Removing the retry around ScrapeJobDetails makes a single transient browser or network failure abort scraping for that offer immediately. Restore a retry here so temporary Playwright issues do not cause unnecessary failed scrapes.
Why: Reintroducing a retry around ScrapeJobDetails would improve resilience against transient scraper or browser failures after the PR removed RetryPolicy. This is a useful reliability improvement, but it is still an error-handling suggestion rather than a clearly proven regression in the new code.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR Type
Enhancement, Bug fix
Description
Add configurable scraping page limits
Prevent concurrent scraping tracking issues
Refine AI summary and CV workflows
Normalize scraper naming and queries
DetailsScraperBaseHandlerDiagram Walkthrough
File Walkthrough
2 files
Tighten `Location` column length configurationLimit scheduler concurrency to one worker9 files
Add optional per-source pages limitUnify generated CV naming formatStart pagination at one with limitStart pagination at one with limitStart pagination at one with limitStart pagination at one with limitStart pagination at one with limitStart pagination at one with limitAdd URL open button and pages limit5 files
Sanitize exported CV file namesRename base handler and filter companiesDeduplicate companies and offers before insertRemove shared retry policy from baseScope mediators and skip hidden summaries1 files
Handle missing AI config safely4 files
Align handler with renamed base scraperAlign handler with renamed base scraperAlign renamed base and trim loggingAlign handler with renamed base scraper