Backup and Restore
Ordinary backups are bhavcopy CSV archives, not full workspace or credential snapshots.
The remaining portable path is the Python CLI. It creates a local .tar.gz
of the composition-registered bhavcopy family under the workspace
(data/bhavcopy/{equity,fo,index,full}/*.csv). It does not archive
workspace settings, broker credentials, installation security material, live
databases, tick stores, or service-connection state.
The CLI resolves the workspace directory for you — you never pass it explicitly:
| Platform | Workspace directory |
|---|---|
| Linux | ~/.flinttrade/ |
| macOS | ~/Library/Application Support/flinttrade/ |
| Windows | %APPDATA%\flinttrade\ |
| Override | FLINTTRADE_WORKSPACE_DIR, then FLINTTRADE_HOME (in that precedence order) |
Every command below runs the same way on Windows, macOS and Linux: ~ in the
paths is expanded by Python, not by your shell.
Authority-bearing archives and restores into the live workspace are unavailable
until a coordinated restore transaction exists. Those operations fail with
coordinated_restore_unavailable.
Create an ordinary backup
python -m scripts.backup create --output ~/flint-backups/flinttrade.tar.gzThe archive is written outside the workspace. A destination inside the live workspace or installation-security tree is refused.
--include-credentials is a reserved compatibility flag. It fails immediately
with coordinated_restore_unavailable and does not collect credential stores.
--include-ticks does not add live tick stores. Unclassified live stores
remain unavailable and fail closed with the same code.
Secret seed files such as master_password, api_key_pepper, jwt_secret,
totp_install_key, and safety_gate_secret are never archived.
workspace.json, auth.db, credentials.db, and the other registered
authority namespaces are excluded.
Each archive embeds a manifest.json at the root so list can read metadata
without extracting the payload.
Restore (disjoint target only)
Restore into a directory that is not the active workspace and is not
nested under it. A restore whose destination is the live authority tree fails
with coordinated_restore_unavailable.
The CLI default (no --target) resolves to the live workspace and therefore
fails closed. Always pass --target:
# macOS / Linux
python -m scripts.backup restore --input ~/flint-backups/flinttrade.tar.gz --target /tmp/flinttrade-restore-check# Windows 10/11
python -m scripts.backup restore --input ~/flint-backups/flinttrade.tar.gz --target "$env:TEMP\flinttrade-restore-check"--force only overwrites admitted non-authority files in that disjoint tree.
It never permits a live-workspace or credential restore.
List archives
python -m scripts.backup list --dir ~/flint-backups/What this path is not
- It is not a full workspace backup.
- It is not a credential or installation-security backup.
- It is not the former restic authority snapshot.
make backup and make restore call infra/backup/backup.sh and
infra/backup/restore.sh. Those scripts are the coordinated/authority path
and currently fail closed with coordinated_restore_unavailable (backup.sh
always; restore.sh before any write). They need make and bash, so they are
POSIX-only; they are not a working substitute for the Python CLI.
The HTTP admin routes under /v1/admin/backup/* use the same
WorkspaceBackup rules: ordinary bhavcopy archives only, credential opt-in
unavailable, and no restore into the live workspace.
Email Setup
Email is used only for account recovery and OTP flows when those features are enabled. A local-only single-user install can run without SMTP, but password reset email will not work
Multi-User Mode — removed (out of scope)
FlintTrade is a personal-use, single-operator trading workstation: the operator is the user is the data principal. The multi-user CRUD scaffold (/api/v1/users/, an admin/trader/vie