- main.py: _pending_record_id locks resolved DB key at Add/Update time;
show original barcode in update frame; auto-focus mass field on open;
clear all fields and return focus to ID input after confirm/reset
- database_manager.py: buffered=True cursors on all SELECTs; no
fetchall() after DML; replace ON DUPLICATE KEY UPDATE VALUES() with
explicit UPDATE then INSERT fallback; add app_actions.log with
structured per-action entries; purge_old_action_logs(30) on startup
- dist/DatabaseApp.exe: rebuilt single-file Windows binary (30.9 MB)
- remove unused files: README, WINDOWS_README, run_app.sh,
setup_database.sh, setup_user.sql, test_database.py, sept.csv"
- Save/load DB host from config.json (works both in dev and built .exe)
- All DB operations moved to background threads to prevent UI blocking
- Connection timeout set to 5s to avoid long hangs on unreachable host
- Added Test Connection button to Settings popup
- Added red Exit button fixed to bottom-right corner of main screen
- Updated DatabaseApp.spec with full Kivy deps (sdl2, glew, angle) and hidden imports
- PyInstaller-aware base path using sys.frozen for config.json persistence