Files
OmniRoute/docs/adr/001-sqlite-data-store.md
diegosouzapw f44ec7e1f2 feat: complete all 46 tasks — ADRs, eval framework, compliance, a11y, CLI, Playwright specs (Batch B)
T-30 — ADRs:
- 6 ADRs: SQLite, Fallback Strategy, OAuth, JS+JSDoc, Single-Tenant, Translator Registry

T-33 — JSDoc Coverage:
- Full JSDoc on all new modules (100% exported functions documented)

T-35 — Accessibility:
- a11yAudit.js: lightweight WCAG AA checker (aria-label, dialog role, alt text, labels)

T-38 — Password Reset CLI:
- bin/reset-password.mjs: interactive CLI tool for admin password reset

T-39 — Playwright Specs:
- tests/e2e/responsiveSpecs.mjs: viewports (375/768/1280), 4 pages, test matrix

T-42 — Eval Framework:
- evalRunner.js: 4 strategies (exact, contains, regex, custom) + golden set (10 cases)

T-43 — Compliance:
- audit_log table, noLog opt-out per API key, LOG_RETENTION_DAYS cleanup

TASKS.md: 46/46 Concluído 
Tests: 144/144 pass (119 existing + 25 new)
2026-02-14 19:18:02 -03:00

1.3 KiB

ADR-001: SQLite as Primary Data Store

Date: 2025-10-15
Status: Accepted
Deciders: @diegosouzapw

Context

OmniRoute needs to persist usage data, call logs, API keys, and configuration. Options considered:

  • PostgreSQL/MySQL — full RDBMS
  • SQLite — embedded, zero-config
  • JSON files (LowDB) — simple but fragile
  • Redis — in-memory, ephemeral

The project targets self-hosted, single-tenant deployments where operational simplicity is paramount.

Decision

Use SQLite via better-sqlite3 as the primary data store.

  • All usage tracking, call logs, API keys, and settings stored in a single .db file
  • Synchronous reads (no async overhead for simple queries)
  • WAL mode for concurrent read/write performance
  • Automatic migration from legacy JSON format (usageDb.json) on first boot

Consequences

Positive

  • Zero infrastructure — no database server needed
  • Single-file backup (cp data/omniroute.db backup/)
  • Fast queries for dashboard stats (< 5ms typical)
  • Easy migration path from JSON format

Negative

  • Single-writer limitation (acceptable for single-tenant)
  • No built-in replication
  • Would need migration to PostgreSQL for multi-tenant cloud deployment

Neutral

  • File-based storage works well in Docker volumes