# Changelog of eCourts Case Scraper (`codingfrontend/ecourts-case-scraper`) Actor

- **URL**: https://apify.com/codingfrontend/ecourts-case-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/codingfrontend/ecourts-case-scraper.md

## Changelog

### \[3.0.0] - 2026-08-13

#### Changed

- Restored the configured CodingFrontend CAPTCHA solver with a mandatory secret-only `CAPTCHA_API_KEY` and no hardcoded credential fallback.
- Replaced run-wide browser ownership with fresh sequential sessions per CNR retry; the default budget is 30 sessions cycling GB, US, and IN.
- Emit exactly one final dataset row per unique normalized CNR and report duplicate input counts separately.
- Require consistent parsed case details before marking a lookup successful.

#### Fixed

- Retry HTTP 405/429/5xx, proxy-tunnel failures, browser timeouts, invalid sessions, and exhausted CAPTCHA sessions on a fresh route.
- Prevent later retries from replaying dataset rows produced by earlier CNRs.
- Report exhausted upstream and solver failures explicitly instead of completing with an empty successful dataset.
- Deduplicate parsed parties, acts, history rows, and orders while preserving the established flat result fields.

### \[2.2.0] - 2026-07-25

#### Changed

- Enforced one browser/context/page and serial CNR execution.
- Replaced local OCR with the CodingFrontend CAPTCHA solver integration.
- Capped all CAPTCHA retries at five.
- Added live app-token propagation and the official same-page CNR form flow.
- Matched Playwright package and Docker image versions exactly.

#### Fixed

- Added circuit breaking for upstream 405, 429, and 5xx responses.
- Added structured failure rows and an `OUTPUT` run summary.
- Corrected camelCase dataset-view fields.
- Reused duplicate CNR results within a run.
- Stopped calling the direct CNR CAPTCHA endpoint, which eCourts rejects as an
  invalid request; CAPTCHA refresh and search submission now use the rendered
  official form.
- Captures the already-rendered CAPTCHA element instead of issuing a second
  protected image request.
- Uses one sticky residential proxy route for the complete browser session.
- Propagates the live case-status `app_token` into the CNR navigation link.
- Opens the CNR section directly from the homepage so its token is not reused
  across incompatible eCourts sections.

### \[1.0.0] - 2026-05-20

#### Added

- Initial production release of eCourts Case Scraper
- Full project structure following Brave actor pattern: errors/, extractors/, filters/, routes/, schema/, utils/
- `validate-datasets.js` for local dataset validation
- Proper `.actor/dataset_schema.json` with typed field definitions and table views
- Storage directories: datasets/default, key\_value\_stores/default, request\_queues/default
- Improved README with Apify-focused documentation

#### Changed

- Refactored code into modular structure
- Improved error handling and input validation
- Updated Dockerfile to use `--chown=myuser:myuser` and `--omit=dev --omit=optional`

#### Fixed

- Dockerfile permissions for build reproducibility
