Known Issues
Real problems, not hypothetical risks. P0 items must be fixed before any production use.
Source: docs/SYSTEM_OVERVIEW.md § Known issues.
P0 — Reklamspärr gate not in queue workers
src/queues/workers.ts does not call isScbAdvertisingBlocked(). The check exists in enrichV7() but the worker enqueues the job before that runs. Companies with advertising_block = true get enriched. GDPR compliance gap. See Reklamspärr, Pipeline.
P0 — Article 14 trigger fires at export, not collection
src/api/export.ts fires Article 14 notifications at export time. Legal obligation is within one month of collection. These are different events. Trigger must move to Update_Job. See Article 14.
P0 — Validation layers are random
// src/mocks/validation.ts — imported by production code
export function validateLayer_Registry(orgNr: string): boolean {
return Math.random() > 0.5;
}The four validation layers (Registry, Website, Profiles, News) were scaffolded as mocks and never replaced. Production worker imports from this file. The is_validated field in leads is meaningless until replaced.
P1 — False positive rate at 21.4% in production config
Current extraction-v7 config lets UI phrases through Name Validation: “OSS FÖR”, “LÅT OSS”, “Send Message”, “Best Sellers”, “Plesk Setup Guide”, “Not Found”, “Log In”, “Adding Domains”. Fix: batch additions to INVALID_NAME_STANDALONE_WORDS (see Blocklists). Best achieved FPR is 0% (quick-test), 2.6% (jsonld-v2). See Experiment Results.
P1 — Playwright runs synchronously in BullMQ worker
Each enrichment job spins up Chromium inline in the worker thread. At >40 concurrent jobs this OOMs or deadlocks. Playwright must be decoupled into its own worker pool before scaling. See Pipeline.
P2 — Still using pg.Pool and ioredis
Several files use pg.Pool / ioredis instead of Bun.sql / Bun.redis. Project CLAUDE.md says not to. Two connection pools, inconsistent error handling. See Stack.
P2 — No circuit breaker on external calls
If Google Places returns 429s or times out, the enrichment job fails entirely. No retry-with-backoff or graceful partial-result fallback.
Won’t fix / won’t change
- Serper removed — LinkedIn/news signals gone. ToS issues + exhausted credits.
- Bolagsverket Öppet API — IP-blocked. Cannot get board member fallback until whitelisted.
- ABPI.se — has VD/board/phone data but ToS unclear for commercial use.
- allabolag.se / ratsit.se / proff.se — in Domain Blocklist; ToS prohibits commercial extraction.
See also
System Overview, Pipeline, Reklamspärr, Article 14, Name Validation, Experiment Results.