FlintTrade
Setup

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:

PlatformWorkspace directory
Linux~/.flinttrade/
macOS~/Library/Application Support/flinttrade/
Windows%APPDATA%\flinttrade\
OverrideFLINTTRADE_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.gz

The 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.

On this page