Implement search and existing-entry mutation workflows #25

Closed
opened 2026-08-09 19:11:08 +00:00 by hugo · 1 comment
Owner

Objective

Implement the TUI search and mutation workflows for existing entries and folders.

Scope

  • Present name find/filter and decrypted grep results with navigation back to their originating folder and entry.
  • Provide copy, move/rename and recursive remove dialogs for entries and folders.
  • Expose force/overwrite and destination-directory semantics through explicit UI choices rather than hidden defaults.
  • Offer direct hotkeys and equivalent : commands for each workflow.
  • Keep viewer/sidebar selection consistent after successful mutations and display typed storage failures.

Acceptance criteria

  • Search cancellation, no results, decrypt failures and result navigation are tested.
  • Copy/move/remove confirmations, collisions, nested recipient changes and partial-failure responses are represented correctly.
  • Destructive actions cannot execute from an accidental single keypress.
  • The TUI never reads ciphertext, searches plaintext or mutates paths itself.

Prerequisites

Sidebar; authenticated viewer; keymap; command mode.

## Objective Implement the TUI search and mutation workflows for existing entries and folders. ## Scope - Present name find/filter and decrypted grep results with navigation back to their originating folder and entry. - Provide copy, move/rename and recursive remove dialogs for entries and folders. - Expose force/overwrite and destination-directory semantics through explicit UI choices rather than hidden defaults. - Offer direct hotkeys and equivalent `:` commands for each workflow. - Keep viewer/sidebar selection consistent after successful mutations and display typed storage failures. ## Acceptance criteria - Search cancellation, no results, decrypt failures and result navigation are tested. - Copy/move/remove confirmations, collisions, nested recipient changes and partial-failure responses are represented correctly. - Destructive actions cannot execute from an accidental single keypress. - The TUI never reads ciphertext, searches plaintext or mutates paths itself. ## Prerequisites Sidebar; authenticated viewer; keymap; command mode.
hugo added this to the 02 - Mutt-style terminal UI milestone 2026-08-09 19:11:08 +00:00
hugo added the enhancement label 2026-08-09 19:11:08 +00:00
Author
Owner

Implemented and pushed in ce3e4a9.

The TUI now provides complete keyboard-only forms for decrypted grep, copy, move or rename, and recursive removal. Direct hotkeys and equivalent colon commands feed the same typed storage requests. Copy and move expose overwrite handling and existing-directory semantics as explicit choices. Removal retains the two-key d d binding and also requires an explicit permanent-removal confirmation inside the form.

Name find results use the storage-provided filtered tree. Decrypted grep uses storage-owned decryption and matching, renders typed matched entries and lines, supports result cycling and opening the originating entry, and clears plaintext result state on close, refresh, authentication, or lock.

Storage now owns automatic Git selection for tree transactions and returns typed post-transfer selection targets after destination-container rules are applied. The TUI invokes TreeMutator only through this API; it never reads ciphertext, searches plaintext itself, or mutates repository paths. Successful copy, move, and remove operations refresh the storage tree and commit once. Typed failures retain every form choice for retry.

Coverage proves search cancellation, no matches, decryption failure, name and grep navigation, explicit form options, collision rollback, nested-recipient reencryption, destination-directory behavior, move, recursive removal, refresh selection, and isolated automatic Git commits. The README now documents debug and release builds for the workspace, CLI, Ratatui TUI, Iced desktop app, storage library, Apple Rust bridge, and Xcode simulator app.

Verification passed:

  • cargo fmt --all -- --check
  • RUSTFLAGS=-D warnings cargo check --workspace --all-targets
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace
  • git diff --check
Implemented and pushed in ce3e4a9. The TUI now provides complete keyboard-only forms for decrypted grep, copy, move or rename, and recursive removal. Direct hotkeys and equivalent colon commands feed the same typed storage requests. Copy and move expose overwrite handling and existing-directory semantics as explicit choices. Removal retains the two-key d d binding and also requires an explicit permanent-removal confirmation inside the form. Name find results use the storage-provided filtered tree. Decrypted grep uses storage-owned decryption and matching, renders typed matched entries and lines, supports result cycling and opening the originating entry, and clears plaintext result state on close, refresh, authentication, or lock. Storage now owns automatic Git selection for tree transactions and returns typed post-transfer selection targets after destination-container rules are applied. The TUI invokes TreeMutator only through this API; it never reads ciphertext, searches plaintext itself, or mutates repository paths. Successful copy, move, and remove operations refresh the storage tree and commit once. Typed failures retain every form choice for retry. Coverage proves search cancellation, no matches, decryption failure, name and grep navigation, explicit form options, collision rollback, nested-recipient reencryption, destination-directory behavior, move, recursive removal, refresh selection, and isolated automatic Git commits. The README now documents debug and release builds for the workspace, CLI, Ratatui TUI, Iced desktop app, storage library, Apple Rust bridge, and Xcode simulator app. Verification passed: - cargo fmt --all -- --check - RUSTFLAGS=-D warnings cargo check --workspace --all-targets - cargo clippy --workspace --all-targets -- -D warnings - cargo test --workspace - git diff --check
hugo closed this issue 2026-08-10 10:12:24 +00:00
Sign in to join this conversation.