Added
-
Generate TOTP 2FA codes from stored authenticator secrets. (ROLO-0006)
Store an otpauth:// URI or a 2FA-labelled base32 setup key and Rolodex renders the rotating RFC 6238 code inline with a countdown ring and one-click copy. Pure-stdlib TOTP — no new dependency. -
Password health checkup: flag weak and reused secrets (ROLO-0008)
A new "Password health..." menu item opens a read-only report that scores every stored secret on length and character-class variety (Weak/Fair/Good/Strong) and flags any secret reused across entries, worst first. All analysis runs in-process over the decrypted vault — nothing leaves the app. -
GitHub Actions CI: ruff lint + pytest on every push/PR (ROLO-0020)
New .github/workflows/ci.yml runs ruff and the pytest suite on push and PR to main, installing the system GTK stack from apt soimport rolodexresolves. Pinned actions/checkout@v7. -
Keyboard shortcuts for common actions (ROLO-0007)
Ctrl+F focuses search, Ctrl+N adds an entry, Ctrl+Shift+C copies
the selected entry's password/secret (plain Ctrl+C still copies
selected text), Ctrl+L locks the vault, Escape clears the search
box, and Ctrl+? opens a keyboard-shortcuts reference. -
Unsaved-changes guard (ROLO-0022) — closing the add/edit dialog with edits in flight now confirms before discarding them.
-
Duplicate-name warning (ROLO-0023) — saving an entry whose name matches another (case-insensitive) now asks for confirmation first.
-
Show/hide (eye) toggle on sensitive fields in the add/edit editor (ROLO-0021) — peek at a masked value while editing, view-only so it never changes whether the field is stored as a secret.
Changed
-
Extract shared helpers: single 0600 file-write, container-clear, dialog scaffold (ROLO-0019)
Internal refactor, no behaviour change. The owner-only (0600) write now lives in one write_private_file() used by both the vault save and the plaintext export; a clear_container() replaces three hand-rolled "remove all rows" loops; and make_dialog_scaffold() collapses the ToolbarView+HeaderBar+Clamp boilerplate repeated across all six dialogs. Net 53 fewer lines. -
Debounced sidebar search (ROLO-0018) — the list rebuilds once typing pauses (~150ms) instead of on every keystroke.