Repository navigation
Exit 5 for content never obtained, one paid solve per page, readable outputs, canary without excuses - #9
Merged
Conversation
…able output files - A zero-row run exits 4 only when the listing is shown empty; a timeout, an unpainted or unparsable page, a lost worker or an API error is 5. - One captcha-solve allowance per page in every engine, checked before the purchase and not reset by retries or exit rotation (3 solves -> 1). - Playwright/pyppeteer pass the goto() status to the classifier; the Scraper API reads http_code, sends waitFor as an object, redacts x-debug. - Outputs and sidecar get 0o666 & ~umask (existing files keep their mode). - CSV guard escapes a leading LF; csv_cells_escaped in the sidecar. - Credential scan uses paths relative to the repo and fails on 0 files. - --fingerprint refused where it is not applied. - Canary: exit 3 and 5 are errors; the site serves GitHub runners. - No citations of private instruction files; a suite check guards it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… urllib3 pip-audit had been red since 2026-10-05 on two new urllib3 1.x advisories in the pyppeteer lock, PYSEC-2026-4175 and PYSEC-2026-4177. Both are fixed only in urllib3 2.8.0; pyppeteer 2.0.0 still requires urllib3<2 and 1.26.20 is the last 1.x release, so no compatible pin clears them. They are ignored by ID beside the five already listed; any other advisory still fails. The README now says what that means for someone running the pyppeteer engine: requests in that virtualenv shares the vulnerable urllib3, so the proxy preflight and captcha API calls do too; prefer Playwright with proxy credentials. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
jehrr
force-pushed
the
fix/audit-2026-10-14
branch
from
October 15, 2026 21:53
472b304 to
a83ac5c
Compare
jehrr
marked this pull request as ready for review
October 15, 2026 21:55
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 (base
main=6524017, same SHA as the one audited). The live site breakage (F1) is in a separate PR, #8.Changes
finish_run: a zero-row run returns 4 only when its stop reason shows the listing is empty (no_results,listing_exhausted,no_new_listings,completed). Every other reason returns 5, including reasons added later, because the list names what proves emptiness rather than the failures.EXIT_API_ERRORmoves intooutput_writer._atomic_writechmods the temp file beforeos.replace: a new file gets0o666 & ~umask, an existing file keeps its mode.write_csvreturns its escape count, andcsv_cells_escapedgoes into the sidecar under the run's own keys.page_flow.SolveBudget(SOLVES_PER_PAGE = 1) is created once per page outside the retry/rotation loop and claimed beforesolve()in all three engines._fetch_one_pagewith a 3-exit pool and an always-challenged page: 3 solves onmain, 1 here. An AST check (read off disk, so it runs without the drivers) covers all three engines.goto()'s status intoclassify. A captcha reload clears it. Selenium passesstatus_code=Noneexplicitly. The Scraper API readshttp_code.classifycall.waitForis now an object;stateis validated;x-debuggoes throughredact_secret_patterns. The docstring is corrected.requests.postcheck. No paid calls made..gitignore,tests.yml, CHANGELOG (released 0.2.1 section: citations only) and the v0.2.1 release notes (two citations removed, otherwise byte-identical). New checkno shipped file cites a private instruction file, built from assembled tokens.path.relative_to(REPO).parts. 0 files scanned is now a failure.…/legacy/clonewith a planted key is caught; an empty tree fails.--fingerprintis refused with exit 2 in pyppeteer and Selenium, and in Playwright together with--cdp-endpoint.~/.cacheanswering instead of the dead proxy, not only the missing binary.HAS_PROXYnotice path is gone. No secret is required;FLIPPA_PROXYstays optional.gh repo editControls (fault planted in a copy, suite run, named check required red)
All 13 went red on the expected check:
if not budget.spend(): returnahead ofsolve())http_codeback tostatuswaitForback to a stringx-debugunredactedThe harness ran with
PYTHONDONTWRITEBYTECODE=1, on copies with no__pycache__.Suites
Not changed
--retriessemantics: owner decision.--locale/--mode: owner decision.Conflicts
CHANGELOG.md(both PRs add[Unreleased]), and possiblysmoke_test.pyandcanary.yml. Whichever PR lands second needs a rebase.🤖 Generated with Claude Code