<!-- SPDX-FileCopyrightText: 2026 FocusFlow contributors -->
<!-- SPDX-License-Identifier: AGPL-3.0-only -->

# V1 ADR 005: Export & Backup Boundary

Status: **Accepted; updated to match current app state**

Date: 2026-06-26

Last reviewed: 2026-07-07

## Decision

* **Backup**: passphrase-encrypted copy of the local SQLite database bytes.
  Defaults:
  * source DB: `~/ADHD_Scheduler/scheduler.sqlite`
  * backup directory: `~/ADHD_Scheduler/backups`
  * backup filename: `yyyymmdd_hhmm.db.enc`
* **Backup cryptography**: AES-256-GCM with PBKDF2-HMAC-SHA256 key derivation,
  200,000 iterations, random salt, and random nonce. The encoded file is a JSON
  envelope containing format metadata, salt, nonce, ciphertext, and MAC.
* **Restore**: decrypts a `.db.enc` backup and atomically replaces the target
  SQLite file.
* **Readable export**: JSON and CSV are produced through `ExportController` and
  export writer implementations.

## Boundary

Encrypted backup is the restorable binary preservation path for the SQLite
runtime database. JSON and CSV exports are readable user/data-portability outputs
and are not the canonical restore format.

No open questions remain.
