Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 10 additions & 15 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ notes say so first, because nobody should discover that from their output.

## [Unreleased]

## [0.2.0] — 2026-10-15

> **Behaviour change:** `--retries 0` is now a usage error (exit 2). It used
> to be accepted and made the page-load loop unreachable, so nothing was
> fetched and the engine reported the browser's own blank page as a result:
Expand Down Expand Up @@ -41,6 +43,14 @@ notes say so first, because nobody should discover that from their output.
an engine's own `extra` wins a collision. Not measured on live Craigslist
data, so it is not claimed to fire today. `scraper_api_client.py` calls
`save` without a sidecar and prints the count instead.
- **A check for a statement the control flow can never reach.** The
undefined-name walk beside it cannot see this class by design: it pools
every binding in a file rather than tracking scopes, so a name used inside
dead code passes as long as anything else in the module binds it. The new
one is narrow — a statement after a `return`/`raise`/`break`/`continue` in
the SAME block — and measured across the eighteen repos of this family it
found six real problems and zero false positives. Verified by control:
appending `return 1` followed by a statement turns the suite red.

### Fixed

Expand Down Expand Up @@ -180,10 +190,6 @@ notes say so first, because nobody should discover that from their output.
- `captcha_solver.py`'s docstring pointed at a "No DataDome solver" section
that does not exist in this repo (it came with the copied core). Removed.

## [0.1.3] — 2026-09-16

### Fixed

- **Fifteen lines of unreachable code removed from `playwright_scraper.py`.**
A function's `def` line had been lost at some point before this repo's
first commit, leaving its docstring and its `try: return page.content()`
Expand All @@ -192,17 +198,6 @@ notes say so first, because nobody should discover that from their output.
does the job — so no behaviour changes. The same fifteen lines, byte for
byte, were in six repos of this family.

### Added

- **A check for a statement the control flow can never reach.** The
undefined-name walk beside it cannot see this class by design: it pools
every binding in a file rather than tracking scopes, so a name used inside
dead code passes as long as anything else in the module binds it. The new
one is narrow — a statement after a `return`/`raise`/`break`/`continue` in
the SAME block — and measured across the eighteen repos of this family it
found six real problems and zero false positives. Verified by control:
appending `return 1` followed by a statement turns the suite red.

## [0.1.2] — 2026-09-14

> **The licence FILE was wrong in v0.1.0 and v0.1.1.** The badge, the
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "craigslist-scraper"
version = "0.1.3"
version = "0.2.0"
description = "Craigslist scraper: result lists and postings across 714 areas."
readme = "README.md"
license = "MIT"
Expand Down
Loading