mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-02 21:32:10 +03:00
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)
1.3 KiB
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
.dbfile - 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