peregrine/app/pages
pyr0ball a893ba6527 feat(cloud): fix backup/restore for cloud mode — SQLCipher encrypt/decrypt
T13: Three fixes:
1. backup.py: _decrypt_db_to_bytes() decrypts SQLCipher DB before archiving
   so the zip is portable to any local Docker install (plain SQLite).
2. backup.py: _encrypt_db_from_bytes() re-encrypts on restore in cloud mode
   so the app can open the restored DB normally.
3. 2_Settings.py: _base_dir uses get_db_path().parent in cloud mode (user's
   per-tenant data dir) instead of the hardcoded app root; db_key wired
   through both create_backup() and restore_backup() calls.

6 new cloud backup tests + 2 unit tests for SQLCipher helpers (pysqlcipher3
mocked — not available in the local conda test env). 419/419 total passing.
2026-03-09 22:41:44 -07:00
..
0_Setup.py feat(peregrine): wire cloud_session into pages for multi-tenant db path routing 2026-03-09 20:22:17 -07:00
1_Job_Review.py chore: seed Peregrine from personal job-seeker (pre-generalization) 2026-02-24 18:25:39 -08:00
2_Settings.py feat(cloud): fix backup/restore for cloud mode — SQLCipher encrypt/decrypt 2026-03-09 22:41:44 -07:00
4_Apply.py feat(cloud): add compose.cloud.yml and telemetry consent middleware 2026-03-09 22:10:18 -07:00
5_Interviews.py feat: extract hard-coded personal references from all app pages via UserProfile 2026-02-24 19:00:47 -08:00
6_Interview_Prep.py feat: extract hard-coded personal references from all app pages via UserProfile 2026-02-24 19:00:47 -08:00
7_Survey.py chore: seed Peregrine from personal job-seeker (pre-generalization) 2026-02-24 18:25:39 -08:00