HIGH: - face detection: guard OpenCV builds lacking CascadeClassifier and isolate per-submission analysis failures in BatchAnalyzer, so a broken cv2 or one bad image no longer takes down every seed/reload/import/upload/rerun with no HTTP response - risk scoring: gate Google custom image search (match=search_image) to 0 points so the persistence round-trip (result_url aliased to url) can no longer flip the same evidence to +45 and inflate bands - serialization: exclude SEARCH_SKIPPED/ENRICHMENT_FAILURE rows from the auto search dedup signatures so a quota-skipped query stays retryable instead of being treated as already done forever - external_policy: add a daily-window reset + lock (mirrors SearchApiPolicy) so Vision is not permanently disabled once the daily limit is hit - image_store: skip a malformed manifest row (and coerce bad width/height) instead of letting one ValueError paralyse loading/re-analysis for the queue MEDIUM/LOW: - enrichment: only count a face crop as transmitted when it actually left the system, removing false usage debits and a false "personal image sent to external provider" audit record; pick lastFailure from the failing item; preserve the collection set when every search was quota-skipped; dedup candidate counts; attribute Vision failures to the google provider badge - store: search coverage requires a real result, not a failure row - scoring: FACE_PERSON contributes once regardless of how many rows exist - fingerprints: refuse near-matches on degenerate (near-uniform) average hashes while keeping identical-hash matches - preprocessing: apply EXIF orientation for external derivatives, face crops, pHash and the PIL decode fallback - promoter: scan title/description only, never the URL path/host tokens - integrations: map Vision responses inside the adapter try; cap HTTPError bodies; skip the connect probe when a proxy applies; reservation-style quota accounting (try_reserve/release) to make the check-then-act atomic - governance/admin: enforce the LLM-summary rule on the real persistence path; reject unknown manual-entry fields; upsert the rejected_image knowledge entry on repeat rejections; split policy skips out of the failures group - env_file: strip a trailing inline comment from unquoted values Environment drift fixed out-of-tree: removed the user-site OpenCV 5.0.0 that shadowed the pinned opencv-python-headless==4.13.0.92. Regression tests added; pytest tests/rights_filter is green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E6GD9gxUtfUiVB3JHejGpU
43 lines
659 B
Text
43 lines
659 B
Text
# Python
|
|
__pycache__/
|
|
*.py[cod]
|
|
*.egg-info/
|
|
.pytest_cache/
|
|
.mypy_cache/
|
|
.ruff_cache/
|
|
.coverage
|
|
.coverage.*
|
|
htmlcov/
|
|
|
|
# Offline dependency wheelhouse (built on staging machine, not committed)
|
|
wheelhouse/
|
|
|
|
# Secrets & local environment (keep .env.example)
|
|
.env
|
|
.env.local
|
|
|
|
# Node
|
|
node_modules/
|
|
|
|
# Runtime data, databases, logs, generated artifacts
|
|
data/
|
|
outputs/
|
|
artifacts/
|
|
*.sqlite3
|
|
*.sqlite3-journal
|
|
*.log
|
|
|
|
# Temp / scratch
|
|
tmp_*
|
|
tmp_dbg_img/
|
|
|
|
# Local tool state (do not rely on the machine-global gitignore)
|
|
.claude/settings.local.json
|
|
.impeccable/
|
|
|
|
# OS
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# PowerShell module-analysis cache written into cwd by some automation
|
|
Microsoft/
|