Implement the authenticated structured entry viewer #20

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

Objective

Implement the authenticated structured entry viewer in the main pane.

Scope

  • Render storage-provided dynamic fields, notes and OTP metadata without assuming a fixed schema.
  • Treat the first password field and storage-marked sensitive fields as masked by default.
  • Use Tab and Shift-Tab to move field focus; provide explicit reveal/hide and copy-focused-field actions.
  • Support scrolling multiline values and closing the entry without changing sidebar selection.
  • Automatically hide revealed fields when focus changes, the pane closes or the authentication lease ends.

Acceptance criteria

  • Arbitrary field counts, duplicate names, long values, multiline notes and Unicode render correctly.
  • Passwords never appear in status lines, help, command history, logs or snapshots unless a reveal assertion explicitly opts in.
  • Focus and masking behavior remains correct through resize, copy, lock and entry changes.
  • The viewer uses only structured storage objects and storage actions.

Prerequisites

Sidebar navigation; authentication and relock UI; structured entry document API.

## Objective Implement the authenticated structured entry viewer in the main pane. ## Scope - Render storage-provided dynamic fields, notes and OTP metadata without assuming a fixed schema. - Treat the first password field and storage-marked sensitive fields as masked by default. - Use Tab and Shift-Tab to move field focus; provide explicit reveal/hide and copy-focused-field actions. - Support scrolling multiline values and closing the entry without changing sidebar selection. - Automatically hide revealed fields when focus changes, the pane closes or the authentication lease ends. ## Acceptance criteria - Arbitrary field counts, duplicate names, long values, multiline notes and Unicode render correctly. - Passwords never appear in status lines, help, command history, logs or snapshots unless a reveal assertion explicitly opts in. - Focus and masking behavior remains correct through resize, copy, lock and entry changes. - The viewer uses only structured storage objects and storage actions. ## Prerequisites Sidebar navigation; authentication and relock UI; structured entry document API.
hugo added this to the 02 - Mutt-style terminal UI milestone 2026-08-09 19:10:41 +00:00
hugo added the enhancement label 2026-08-09 19:10:41 +00:00
Author
Owner

Implemented in cf7a621.

The TUI now loads authenticated entries through EntryDocumentService with the generation-bound authentication handle and renders the storage-owned structured document dynamically. Sensitive fields (including the first password and OTP URIs) are masked by default; Tab/Shift-Tab focus fields, v/V reveal and hide, y copies only the focused structured value through the timed native clipboard lifecycle, j/k and paging scroll wrapped content, and Esc closes the document without changing sidebar selection. Reveal state is cleared on field focus changes, overlays, close, authentication failure, terminal focus loss, manual lock, and lease expiry. OTP kind, issuer, account, algorithm, digits, period/counter metadata is now parsed and supplied by crates/storage rather than inferred by the frontend. Clipboard work is cancellable and joined so process exit cannot skip cleanup.

Verification:

  • cargo fmt --all -- --check
  • RUSTFLAGS="-D warnings" cargo check --workspace --all-targets
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace
  • focused TUI viewer tests: 37 passed
  • structured document integration tests: 4 passed

The review also verifies arbitrary field counts and duplicate names remain ID/order based, long values wrap and scroll across responsive layouts, Unicode renders correctly, sidebar selection survives close, and secrets stay redacted from status/help/debug/default render snapshots unless a test explicitly performs reveal.

Implemented in cf7a621. The TUI now loads authenticated entries through EntryDocumentService with the generation-bound authentication handle and renders the storage-owned structured document dynamically. Sensitive fields (including the first password and OTP URIs) are masked by default; Tab/Shift-Tab focus fields, v/V reveal and hide, y copies only the focused structured value through the timed native clipboard lifecycle, j/k and paging scroll wrapped content, and Esc closes the document without changing sidebar selection. Reveal state is cleared on field focus changes, overlays, close, authentication failure, terminal focus loss, manual lock, and lease expiry. OTP kind, issuer, account, algorithm, digits, period/counter metadata is now parsed and supplied by crates/storage rather than inferred by the frontend. Clipboard work is cancellable and joined so process exit cannot skip cleanup. Verification: - cargo fmt --all -- --check - RUSTFLAGS="-D warnings" cargo check --workspace --all-targets - cargo clippy --workspace --all-targets -- -D warnings - cargo test --workspace - focused TUI viewer tests: 37 passed - structured document integration tests: 4 passed The review also verifies arbitrary field counts and duplicate names remain ID/order based, long values wrap and scroll across responsive layouts, Unicode renders correctly, sidebar selection survives close, and secrets stay redacted from status/help/debug/default render snapshots unless a test explicitly performs reveal.
hugo closed this issue 2026-08-10 06:46:19 +00:00
Sign in to join this conversation.