Storage rules
AlphaLedger uses MySQL 8/InnoDB. All timestamps are UTC and all money uses fixed-scale DECIMAL columns with ISO currency codes.
Core records
userswith unique usernames,business_settings, hashedsessions,login_attempts, and five-minutepassword_reset_tokensprojectsandproject_assignmentstime_entries,time_breaks,timer_locks, andbreak_lockstime_entry_revisionsandpay_accrualsaudit_eventsintegration_installations,remote_people,outbox_messages,inbox_messages,sync_conflicts, andremote_financial_statuses
timer_locks.user_id and break_locks.time_entry_id are primary keys, providing database-level one-running-timer and one-open-break guarantees without generated columns that make portable restores unreliable. Projects record origin, PA identity/version, code, and preserved local alias. Approved entries retain a project display-name snapshot for historical stability.
Migration policy
The clean-install baseline is database/baseline.sql. Every later SQL migration uses a unique numeric prefix and is recorded with a SHA-256 checksum. Applied migrations are immutable.