Files
seedPass/post-refactor-to-do.md
2025-07-02 18:21:05 -04:00

6.8 KiB
Raw Blame History

# SeedPass Feature BackLog (v2) > Encryption invariant   Everything at rest and in export remains ciphertext that ultimately derives from the profile masterpassword + parent seed. No unencrypted payload leaves the vault. > > Surface rule   UI layers (CLI, GUI, future mobile) may display decrypted data after user unlock, but must never write plaintext to disk or network.

Track vocabulary

Label Meaning
Core API seedpass.api headless services consumed by CLI / GUI
Profile A fingerprintscoped vault: parentseed + hashed pw + entries
Entry One encrypted JSON blob on disk plus Nostr snapshot chunks and delta events
GUI MVP Desktop app built with PySide 6 announced in the v2 roadmap

Phase A  •  Corelevel enhancements (blockers for GUI)

 Prio  Feature Notes
 🔥 Encrypted Search API VaultService.search(query:str, *, kinds=None) -> List[EntryMeta]
• Decrypt only whitelisted metafields per kind (title, username, url, tags) for inmemory matching.
 🔥 Rich Listing / Sort / Filter list_entries(sort_by="updated", kind="note")
• Sorting by title must decrypt that field onthefly.
 🔥 Custom Relay Set (per profile) StateManager.state["relays"]: List[str]
• CRUD CLI commands & GUI dialog.
NostrClient reads from state at instantiation.
  Session Lock & Idle Timeout • Config SESSION_TIMEOUT (default 15min).
AuthGuard clears inmemory keys & seeds.
• CLI seedpass lock + GUI menu “Lock vault”.

Exitcriteria : All functions green in CI, consumed by both CLI (Typer) and a minimal Qt test harness.


Phase B  •  Data Portability (encrypted only)

 Prio  Feature Notes
  Encrypted Profile Export • CLI seedpass export --out myprofile.enc
• Serialise encrypted entry files → single JSON wrapper → EncryptionManager.encrypt_data()
• Always require active profile unlock.
  Encrypted Profile Import / Merge • CLI `seedpass import myprofile.enc [--strategy skip overwrite-newer] <br>• Verify fingerprint match before ingest. <br>• Conflict policy pluggable; default skip`.

Phase C  •  Advanced secrets & sync

 Prio  Feature Notes
 ◇ TOTP entry kind kind="totp_secret" fields: title, issuer, username, secret_key
secret_key encrypted; handler uses pyotp to show current code.
 ◇ Manual Conflict Resolver • When checksum mismatch and both sides newer than last sync → prompt user (CLI) or modal (GUI).

Phase D  •  Desktop GUI MVP (Qt 6)

Features here ride on the Core API; keep UI totally stateless.

 Prio  Feature Notes
 🔥 Login Window • Unlock profile with master pw.
• Profile switcher dropdown.
 🔥 Vault Window • Sidebar (Entries, Search, Backups, Settings).
QTableView bound to VaultService.list_entries()
• Sort & basic filters builtin.
 🔥 Entry Editor Dialog • Dynamic form driven by kinds.py.
• Add / Edit.
  Sync Status Bar • Pulsing icon + last sync timestamp; hooks into SyncService bus.
 ◇ Relay Manager Dialog • CRUD & ping test per relay.

Binary packaging (PyInstaller matrix build) is already tracked in the roadmap and is not duplicated here.


Phase E  •  Later / Research

• Hardwarewallet unlock (SLIP39 share) • Background daemon (seedpassd + gRPC) • Mobile companion (Flutter FFI) • Federated search across multiple profiles


Reminder: No plaintext exports, no ondisk temp files, and no writing decrypted data to Nostr. Everything funnels through the encryption stack or stays in memory for the current unlocked session only.