Repository navigation
No-proxy crashes, one paid solve per page, scope-aware diffs, stricter credential scan - #13
Merged
Merged
Conversation
…solve - Selenium and pyppeteer read the proxy pool on a retry with no pool configured and exited 1 on a refused, empty or unloadable page; they now re-fetch through the same access path, as Playwright does. - Both captcha call sites per attempt go through one per-page allowance checked before any purchase (was 2 solves with no pool, up to 5 with a pool of four, against a limit of 1). - Playwright and pyppeteer pass the navigation's HTTP status to the classifier. - --pages/--concurrency 0 and negative --delay/--retry-delay/ --proxy-block-retries are usage errors; scraper_api_client rejects a negative --retries/--retry-delay. - diff_runs refuses runs of different listings (area, category, filters) unless --force, and warns when a run hit the result ceiling. - The credential scan matches exclusions inside the repo, fails on 0 files scanned, and reads .env copies and JSON/CSV/HTML. - README, Scraper API help and canary messages corrected; .gitignore covers page dumps and scratch directories by kind; private citations removed with a suite guard. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… parser The one-batch run's non-zero exit was a warning on a green job; it is now an error. Core identity columns must be on every row, and the price-share floor moves from 90% (red on 4 of 32 scheduled runs from unpriced adverts) to 60%, which a broken price read still falls under. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A dispatch on this branch read 243 rows from one served response, every one parsed, and failed a floor of 250. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
jehrr
marked this pull request as ready for review
October 15, 2026 13:00
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
mainatfe2a381.Problems and resulting behaviour
--proxypool.current/pool.advanceonNone:AttributeError, exit 1page_flow.SolveBudgetper page, checked immediately before purchase at both call sites, not reset by retry or rotation (budgetis a required keyword, so a new call site cannot skip it)goto()'s response discarded; a branded 403/429/503 would read as "unpainted" and be waited onclassify; reset toNoneafter a solve reloads the page. Selenium has no status. Nonot_foundstate added--pages 0,--concurrency 0, negative--delay/--retry-delay/--proxy-block-retriesacceptedscraper_api_client.pyrejects negative--retries/--retry-delay(0 stays legal there: it counts extra attempts)diff_runs.pyscope--forcewhen sidecarstart_urls differ in host, path or query (order-free, fragment ignored); a warning when a run hit the result ceilingpath.parts: a clone undervenv/or.venv/scanned 0 files and passed;.env.baknever read.env.*copies (not.envitself) and.json/.csv/.html; venvs are still skipped bypyvenv.cfg--concurrency>1 "refused", a "653 checks" count, nothing about--locale; the Scraper API help and challenge message described another site.gitignorelive/,results/,foo.page3, rootx.htmlnot ignored*.page[0-9]*,/*.html, scratch dirs by kind;.github/,tests/, samples and.env.examplestill tracked (checked withgit check-ignore)Also fixed: pyppeteer's "grid still had not painted" log used
found <= need, so it fired on a page that had painted (log only).Evidence
test_fetch_loop_without_a_pool_and_within_the_solve_budgetruns each engine's real_fetch_one_pagein a subprocess with every driver module stubbed. It runs in every venv, the bare one included. Against oldmainit reproduced the audit: Playwright 2/4/5 solves, and Selenium and pyppeteerAttributeError. On this branch every case raises nothing and buys ≤1 solve.ci_checks.py --allgreen (36 files scanned).PYTHONDONTWRITEBYTECODE=1,__pycache__cleared). Each one turned the suite red on the check it was meant to trip, and the restored tree is green:.envcopiesCanary (owner request: a canary must actually test the site)
::warning::withexit 0, so the served list and its JSON-LD alignment could go untested on a green badge. The walking run's 90% price-share floor went red on 4 of 32 scheduled runs (79–90%), and the artefacts show free and "make offer" adverts behind it.::error::;sku,urlandtitle;CRAIGSLIST_PROXYstays optional.Not changed, and why
--allow-empty(L3), sidecartotal_results/source(L4): owner decision.--proxy/--fingerprintwith--cdp-endpointand for--concurrency > 1(L6): owner decision. The docs now describe the warning.[Unreleased], with behaviour changes in leading blockquotes.CRAIGSLIST_URLin.env.example: kept. This repo has no URL-builder flags for it to hijack, and the audit's round-trip found it fine.🤖 Generated with Claude Code