Skip to content

Feat/backup restore - #19

Merged
armedev merged 3 commits into
mainfrom
feat/backup-restore
Aug 25, 2026
Merged

armedev merged 3 commits into
mainfrom
feat/backup-restore

Conversation

@armedev

@armedev armedev commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

No description provided.

khayal backup / khayal restore backed by a new internal/backup package
using filippo.io/age v1.2.0 (embedded, pure Go - no external binary).

- Backup: vault tree copy + dated khayal-YYYY-MM-DD.db / config-*.yaml
  snapshots; --encrypt writes armored age ciphertext instead of plain
- Restore: latest (or --date) db/config back into place, vault merged
  ADDITIVELY - newer notes not in the backup are never deleted;
  existing files need --overwrite; config restore is best-effort with
  a warning so a live config never aborts recovery of the database
- --init-key generates the age identity at ~/.config/khayal/backup.key,
  refusing to overwrite; key file parsing skips comment lines (the
  real age v1.2 API has no ParseX25519IdentityFile)
- Safety contract: backup warns while running (db snapshot risk noted);
  restore hard-refuses with stop-first hint

Tests: key generation guard, plain round trip, armored encrypt→decrypt
cycle with plaintext-leak check, additive merge preserving newer notes,
latest-date selection, encrypted-variant preference. Live verified:
encrypted backup → db deleted → restore → server serves searches from
the recovered database.
@armedev
armedev merged commit d8eb595 into main Aug 25, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant