Tags: StarlightDaemon/BIND
Tags
test: raise coverage gate to 75%; add storage and resilience test suites T4 — Coverage threshold raised from 40% to 75%. tests/test_storage_extended.py (27 tests, real SQLite via tmp_path): - Schema: magnets + scrape_runs tables present after init - add_magnet: insert, count, idempotency on duplicate hash - has_hash: true/false/case-insensitive - recent(limit=N): count and ordering - search(): FTS match, empty-string returns all - stats(): today, last_7_days, last_30_days keys - record_scrape_run: row inserted, values correct - WAL probe: succeeds on local path tests/test_resilience_extended.py: - retry.py: _parse_retry_after valid/invalid/absent header; 429 uses header wait - migrate.py: _parse_line valid/invalid; migrate() no-files, single file, deduplication, wrong filename, multi-file - security.py: log_security_event write path and OSError suppression; _rotate_log_if_needed trim; _migrate_credentials v1→v2; get_base_dir branch Result: 273 tests passing, 77% coverage. mypy clean. ruff clean.
feat: BIND v2.0.0 — metrics dashboard, domain resilience probe, CI ha… …rdening T1 — CI: add pip-audit step for dev dependencies (catches CVEs in test toolchain) T2 — Domain resilience: BindScraper.probe_target() classifies target health as reachable / cloudflare_block / wrong_content / unreachable without touching the circuit breaker. Daemon logs WARNING at startup for unreachable or wrong_content. /health endpoint includes cached target_probe field (5-minute TTL). T3 — Metrics dashboard: scrape_runs table added to MagnetStore schema; record_scrape_run() called by daemon after every cycle; stats() extended with last_7_days and last_30_days counts; /metrics route added (auth-gated) with Vesper-theme HTML template showing counts, color-coded scrape history, and success rate; nav link added to all five templates. Tests: 223 passing (test_scraper_probe.py × 7, test_metrics.py × 18). mypy clean. ruff clean. v2-completion prompts archived to .raiden/local/prompts/v2-completion/.
fix: add job timeout wrapper, remove stale scraper.metrics call - Wrap job() in ThreadPoolExecutor (max_workers=1) with BIND_JOB_TIMEOUT env var (default 3600s); scheduler loop no longer blocks on hung jobs - Remove scraper.metrics.report() — BindScraper.metrics removed in EgressManager refactor; would have raised AttributeError on every job completion
PreviousNext