Repository navigation
CSV formula escaping, JUSTJOIN_URL as a default, facets diff, scan from any directory - #6
Merged
Merged
Conversation
…iff facets runs - CSV: a string cell starting with = + - @ TAB CR LF gets a leading apostrophe (CSV only; JSON and numbers untouched); the count is recorded in the sidecar as csv_cells_escaped, under caller extra. - JUSTJOIN_URL from .env no longer makes --mode offer/facets exit 2: the engines capture the typed --url before env_config.apply and only check a typed URL against --mode. .env.example shows the variable commented. - diff_runs compares facets runs on their own columns (offer_count, ...) instead of the job columns, which a facet row does not have. - The credential scan matches its skip list against the path inside the repo, so a clone under build/, env/ or venv/ is scanned. - Comments, docstrings and changelog entries state their rules in place instead of citing internal notes; a suite check guards it. - Small: --dump-html help link, engine comments about the solve state, .gitignore for page dumps of any extension, CI on Python 3.13, canary comment no longer repeats a retracted credential-lifetime claim. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
jehrr
marked this pull request as ready for review
October 15, 2026 21:15
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 the findings from the 2026-10-14 audit that the owner's draft PR #5 does not already cover. Base:
mainat3222f2e(the audited SHA).Covered by #5, deliberately not touched here
Atomic output writes (F1),
--retries 0(F3), the pyppeteer no-proxy crash (F4), the missing Scraper API sidecar /diff_runswithout a sidecar (F10), offer mode in Selenium/pyppeteer and the queue stopping on a 404 (F11),--route ssrfilters (F12). The 2026-10-08 and 2026-10-10 canary failures were both that 404-ends-the-queue bug (logs: page 1 / page 4not_found, then exit 5 /pages_completed: 4), so #5 is what turns the offer canary reliably green.What changes
=HYPERLINK(...)in a title reached the CSV as a live formula= + - @ TAB CR LFget a leading'in CSV only (after list joining); numbers and JSON untouched;csv_cells_escapedin the sidecar, merged under the caller'sextrabuild/,env/orvenv/scanned 0 files, exit 0path.relative_to(REPO).parts;pyvenv.cfgdetection and untracked-file scanning unchangedJUSTJOIN_URL.env.examplemade--mode offer/--mode facetsexit 2 in all three engines although nobody typed--url--urlbeforeenv_config.apply; an env URL naming another mode is ignored with an info line, a typed one is still refused..env.exampleshows the variable commented outTRACKED_FIELDSis allJobPostingcolumns, sooffer_count100 -> 250 reported "0 changed", exit 0FACET_TRACKED_FIELDS(title,offer_count,is_cumulative,overlaps_other_keys) chosen by the sidecar's mode, or by row shape without one.site_totaldeliberately not tracked (same on every row)check_no_private_document_is_cited(tokens assembled from pieces)--dump-htmlhelp pointed at a nonexistentTROUBLESHOOTING.mdchallengestate that does not existSTATE_POLICYas it iscanary_dump.json.page3,live/x.html,root.htmlnot ignored*.page[0-9]*,live/,/*.html(checked withgit check-ignore)shop_ratingexample inrun_metaBehaviour changes are led with a blockquote under
[Unreleased].Evidence
PYTHONDONTWRITEBYTECODE=1,__pycache__removed between runs):a formula title is escaped in the CSVa caller's value wins a name collision with the countthe scan finds a planted key in a clone under build/a facets diff (mode 'facets') sees an offer_count changeCLAUDE+.mdplanted in env_config.py ->env_config.py cites no private ...JUSTJOIN_URLuncommented ->the example ships JUSTJOIN_URL commented outselenium_scraper --mode facets ignores a listings JUSTJOIN_URLfinish_run,offer_count100 -> 250,diff_runs.py --fail-on-change->1 changed, exit 1 (was 0 changed, exit 0)..github/ci_checks.py --secret-checkon this tree: 33 files scanned, clean.Conflict with #5
Merging this with #5 conflicts in 5 files, one hunk each:
CHANGELOG.md(both append under[Unreleased]),output_writer.py(both editwrite_csv/around_csv_value), and the three engines (a comment where a citation was removed, adjacent to code #5 rewrote). #5 also ADDS about 12 new private-citation lines; once both land,check_no_private_document_is_citedwill flag them, so whichever merges second should drop those citations (it names each file).Not changed
page.authenticate/ignoreHTTPSErrors) needs a live proxy and Chromium to verify first; not touched.🤖 Generated with Claude Code