## Learned User Preferences

- When following an attached implementation plan, do not edit the plan file itself.
- Use existing todo items from the plan (mark them in progress in order, complete all); do not recreate the todo list.
- When refactoring or optimizing, prioritize deduplication, simpler structure, and reducing SDK or client drift across parallel code paths.
- For multi-binary workflows, document concrete `cargo run` examples in README (per binary, with `--bin` and `--` before binary args when needed).

## Learned Workspace Facts

- The project is a Rust codebase (`dexter_sentinel`); scraping includes global DB persistence paths.
- Inserts are performed via a remote HTTP database gateway (driver/error paths reference `gateway_insert`); the gateway client id defaults to `dexter` and is overridable via `ATHENA_CLIENT` / `--athena-client` on `dexter-sentinel`.
- Provisioning and schema DDL for the database live under the repository `sql/` folder (e.g. provision scripts).
- registries.io is integrated for European company registry flows (including PL/CZ); mapping and fetch logic live under `src/scrape/` (e.g. `mapping.rs`, `registries_io`).
- Country-level scrapes typically write a normalized row to `global_companies_registry` and a wider country table (e.g. `pl_companies`) for full source-shaped payloads.
- `Cargo.toml` sets `default-run` to `dexter-sentinel`, so bare `cargo run` runs the HTTP server unless another `--bin` is specified.
- Optional env `MAX_WORKER_THREADS` sets Actix HTTP worker thread count when set to a positive integer; when unset, Actix uses its default worker selection.
