Repository navigation
Empty searches exit 4, partial concurrent runs say so, one paid solve per page - #7
Merged
Merged
Conversation
… per page - A search the site answers with search-count:0 exits 4 in every browser engine (it exited 5); a --concurrency run whose workers never fetched some planned pages is partial (exit 6) with pages_unattempted, not complete. - Paid captcha solves go through one per-page budget (page_flow.SolveBudget), checked before the purchase; handle_captcha_if_present requires it. - Selenium/pyppeteer: a dead network exits 5 instead of 3, and proxy rotation relaunches the browser on the new exit. - --retries/--delay/--retry-delay < 0 and --pages/--concurrency < 1 are usage errors naming the flag, in all engines and scraper_api_client. - Output, CSV and sidecar are written atomically with umask-honouring modes; CSV neutralises formula-shaped text cells and records csv_cells_escaped. - diff_runs implements the documented source_changed bucket. - The credential scan tests repo-relative paths, fails on an empty scan, and reads .json/.csv/.toml/.cfg/.sh. - CONTRIBUTING, issue templates and the review prompt describe Indiegogo; exit-code docs match the code; private-notes citations removed, with a suite guard; Scraping Browser lifetime claim corrected. - Canary: a block from a bare runner is now a failure, not a green skip. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
Author
|
CI on head |
jehrr
marked this pull request as ready for review
October 15, 2026 13:02
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes from the 2026-10-14 audit of
cb7123b.mainhas not moved since that audit.Problems and resulting behaviour
--pages 4 --concurrency 2with every worker failing to open a session:exit 0,status complete,pages_failed [], 24 rowspages_failedand the new sidecar keypages_unattempted, and the run ispartial(exit 6).search-count:0→finish_run(..., pages_failed=[1])→ exit 5 in all three browser enginespages_failed=[]andpages_completed=1, andno_resultsis a complete stop reason → exit 4.load_failedandparser_found_nothingare still exit 5.--retries 2on a gated page made 3 solver calls (Playwright, Selenium)page_flow.SolveBudgetwithSOLVES_PER_PAGE = 1. It is checked immediately beforesolve_recaptchaand is a required keyword-only argument ofhandle_captcha_if_presentin every engine. It is not reset by retry or rotation, and each concurrency worker's session open gets its own allowance. Result: 1 solve.json.dumpleftout.jsonas 12 bytes of invalid JSON_atomicwrites a temp file in the target's directory, then flush, fsync,os.replace, with unlink on error andnewline=""kept for CSV. Applies to JSON, CSV and the sidecar. A new file gets0o666 & ~umask; an existing file keeps its mode.= + - @ TAB CR LF(checked after list joining) get a leading'in CSV only. Numbers are untouched.csv_cells_escapedgoes into the sidecar, merged under the caller'sextra.--retries,--delayand--retry-delaymust be ≥ 0, and--pagesand--concurrencymust be ≥ 1. Anything else is an argparse error naming the flag (exit 2). This applies in all engines and inscraper_api_client.py.--retries 0still navigates once.state="blocked", so a dead network exited 3load_failedand set it on every navigation exception, so this case exits 5, as Playwright already did.pool.advance()without a relaunch, so later attempts stayed on the old exitsource_changedchangedprice_sourcedifference is reported assource_changedand ignored by--fail-on-changebug_report.yml,site_changed.ymland theclaude-code-review.ymlprompt described another sitevenv/scanned 0 files and reported "ok"path.relative_to(REPO).parts, and an empty scan fails. The scan now also reads.json/.csv/.toml/.cfg/.sh. Thepyvenv.cfgskip still works.--proxy-block-retrieshad no consumer.gitignorenamed files that do not exist::notice::skip, and the exit 4/5 messages were staleEvidence
Offline suite: 113 passed, 0 failed, run in four venvs:
requirements-playwright.txt: 2 skips;requirements-selenium.txt: 2 skips;requirements-puppeteer.txt: 2 skips.In each engine venv, that engine's behavioural checks ran (no browser was downloaded).
New checks:
json.dump,writerowand the sidecar;csv_cells_escapedmerge order;SolveBudgetunit test, and its wiring (read from disk);diff_runssource_changed;Planted-fault controls: 19, all red on the named check. Each was run with
PYTHONDONTWRITEBYTECODE=1and the cache removed between runs._atomic→open()0o644extramerge reversedno_resultsremoved from the complete listpages_failed=[1]restored--retries type=intstate="blocked"on nav failuresource_changeddisabledpath.partsReal control for the scan: a copy of the repo under
…/venv/clonewith a planted 32-hex string →FAILED: [secret] planted.py:1. Apyvenv.cfgdirectory inside the clone is still skipped (39 files scanned, clean).ci_checks.py --all: help, sample and secret checks all OK.No paid calls, proxies, credentials or live requests. Every solver call in the tests is a stub.
Canary
gh secret listis empty). The scheduled runs on 2026-10-06 and from 2026-10-13 to 2026-10-14 were real bare-runner runs with 72 rows on 3/3 pages (artifacts checked). The runs from 2026-10-07 to 2026-10-12 were red because of the oldpct_fundedcheck, which is fixed onmain. Exit 3 from a bare runner was skipped green.Not changed
[Unreleased].page.authenticate, its hardcoded UA, and Selenium's hint-less UA override. These need a live authenticated-proxy check..env*is already gitignored.--fingerprinttogether with--cdp-endpoint. Low severity, and it would be another behaviour change..env.exampleand builder flags: already compliant (INDIEGOGO_URL=is empty, and there are no URL-building flags)..githubaudit lists nothing for this repo.🤖 Generated with Claude Code