- Target delete failed when scan data existed: scans.target_id and
activity_logs.target_id FKs had no ON DELETE rule. Add ondelete CASCADE
(scans) / SET NULL (activity_logs) to the models + a migration that
alters the existing constraints. Deleting a target now cascades its
scans (and their subdomains/activities/commands) and nulls audit-log refs.
- Targets list: clicking the row checkbox bubbled to the row and navigated
to the target summary. Wrap the checkbox in a stopProp container.
- Scan history: add per-row + select-all checkboxes and a bulk action bar
(cancel running / delete selected) mirroring the targets pattern, backed
by scansStore.removeMany/cancelMany.
- Added `clean_name` function to `validation.py` for name validation with max length.
- Simplified docstrings in `dnsx` client, parser, and service files for clarity.
- Enhanced error handling in `ViewDNSService` to prevent disabling keys on rate limits.
- Improved WHOIS service to handle concurrent inserts gracefully with integrity checks.
- Updated `Settings` class in worker config to inherit from `BaseAppSettings`.
- Added new dependencies in `pyproject.toml` for `apprise` and `cryptography`.