Implement the Mutt-style password-store tree sidebar and keyboard-first navigation.
Scope
Render storage-provided folders and entries as an indented, collapsible tree with a clear current selection.
Support j/k and arrow navigation, page up/down, first/last, parent/child movement, expand/collapse and Enter to open.
Add incremental filtering and find navigation without decrypting entries.
Preserve selection and expansion state across refreshes, mutations and Git synchronization when the selected object still exists.
Provide locked, changed and conflict indicators supplied by storage state without inferring them from names.
Acceptance criteria
Navigation is deterministic for empty, deep, Unicode and very large trees.
Selection never points at a deleted or filtered-out object.
Sidebar actions call storage APIs and never access the vault filesystem directly.
Snapshot tests cover hierarchy, scrolling, focus, filtering and terminal resizing.
Prerequisites
Mutt-style TUI shell and action model.
## Objective
Implement the Mutt-style password-store tree sidebar and keyboard-first navigation.
## Scope
- Render storage-provided folders and entries as an indented, collapsible tree with a clear current selection.
- Support `j`/`k` and arrow navigation, page up/down, first/last, parent/child movement, expand/collapse and Enter to open.
- Add incremental filtering and find navigation without decrypting entries.
- Preserve selection and expansion state across refreshes, mutations and Git synchronization when the selected object still exists.
- Provide locked, changed and conflict indicators supplied by storage state without inferring them from names.
## Acceptance criteria
- Navigation is deterministic for empty, deep, Unicode and very large trees.
- Selection never points at a deleted or filtered-out object.
- Sidebar actions call storage APIs and never access the vault filesystem directly.
- Snapshot tests cover hierarchy, scrolling, focus, filtering and terminal resizing.
## Prerequisites
Mutt-style TUI shell and action model.
hugo
added this to the 02 - Mutt-style terminal UI milestone 2026-08-09 19:10:34 +00:00
Loads the storage-owned TreeModel asynchronously through Config, Repository, KeyStore, and VaultReader APIs; the TUI never reads the vault filesystem itself.
Renders indented folders and entries with stable path-plus-kind identities, collapse/expand state, clear selection, scrolling, and typed locked/changed/conflict indicators supplied by storage.
Adds j/k and arrow navigation, page up/down, first/last, parent/child, Enter open-or-toggle, refresh, incremental slash filtering, and n/N match navigation through the central action registry.
Executes refresh and each incremental find off the input thread. Find uses VaultReader::find without decryption, retains storage-reported matches separately from ancestor folders, and rejects stale out-of-order results.
Preserves selection and expansion across replacement trees when objects still exist and deterministically repairs selection when an object disappears.
Implemented in commit 91f58ba and pushed to main.
Implementation:
- Loads the storage-owned TreeModel asynchronously through Config, Repository, KeyStore, and VaultReader APIs; the TUI never reads the vault filesystem itself.
- Renders indented folders and entries with stable path-plus-kind identities, collapse/expand state, clear selection, scrolling, and typed locked/changed/conflict indicators supplied by storage.
- Adds j/k and arrow navigation, page up/down, first/last, parent/child, Enter open-or-toggle, refresh, incremental slash filtering, and n/N match navigation through the central action registry.
- Executes refresh and each incremental find off the input thread. Find uses VaultReader::find without decryption, retains storage-reported matches separately from ancestor folders, and rejects stale out-of-order results.
- Preserves selection and expansion across replacement trees when objects still exist and deterministically repairs selection when an object disappears.
Verification:
- cargo fmt --all -- --check
- RUSTFLAGS="-D warnings" cargo check --workspace --all-targets
- cargo clippy --workspace --all-targets -- -D warnings
- cargo test --workspace
- 27 focused TUI tests pass, covering empty, Unicode, 128-level deep, 1,000-item, and entry/directory-collision trees; navigation, paging, filtering, actual-match cycling, refresh repair, hierarchy, scrolling, focus, indicators, and resizing.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Objective
Implement the Mutt-style password-store tree sidebar and keyboard-first navigation.
Scope
j/kand arrow navigation, page up/down, first/last, parent/child movement, expand/collapse and Enter to open.Acceptance criteria
Prerequisites
Mutt-style TUI shell and action model.
Implemented in commit
91f58baand pushed to main.Implementation:
Verification: