Files
SeedPass/docs/tui_v2_ui_refresh_plan.md
T
thePR0M3TH3ANandClaude Opus 4.6 6f2b9a6d18 fix(tui-v2): handle non-existent entries and tree nav focus feedback
Opening a non-existent entry now shows "Entry not found" instead of
rendering a broken empty board. Tree navigation commands now give
clear feedback when focus is on wrong pane or sidebar is collapsed.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-03-02 21:26:30 -05:00

45 KiB
Raw Blame History

TUI v2 UI Refresh Plan (Mockup-Aligned)

Status: Active (2026-03-02)
Branch target: beta
Primary references: UI_mockups/PNG/*.png, UI_mockups/SeedPass_UI-Board.pdf

Latest audit reference: docs/tui_v2_mockup_gap_audit_2026-03-02.md Execution plan reference: docs/tui_v2_integration_execution_plan_2026-03-02.md

1) Purpose

Translate the mockup direction into an implementation-ready, multi-session plan for Textual TUI v2 while preserving SeedPass's green visual identity.

This plan is intentionally detailed so future sessions can continue implementation without re-discovery.

2) Design Direction We Are Targeting

From the mockups, the desired direction is:

  1. Table-first operations with high information density.
  2. Persistent left "seed/account tree" navigation column.
  3. Large, contextual lower "inspector board" that changes by selected entry kind.
  4. Persistent bottom action strip for discoverability.
  5. Strong framed layout (hard borders, segmented panels, explicit labels).
  6. Black/neutral structure language, but with SeedPass green theme colors.

3) Visual System Contract (Keep Green Theme)

Use the existing TUI v2 palette as baseline (already present in src/seedpass/tui_v2/app.py):

  • Base background: #080a0c
  • Panel background: #0d1114
  • Header/footer background: #0b0f13
  • Primary text: #daf2e5
  • Secondary text: #97b8a6
  • Border default: #1a3024
  • Border emphasis: #274533
  • Accent/action: #2abf75
  • Focus highlight: #58f29d

Rules:

  1. Keep semantic role colors stable (focus, warning, success, muted).
  2. Use contrast through brightness and border weight, not unrelated hues.
  3. Keep monochrome mockup geometry and spacing, but render in green palette.

4) Information Architecture (Target Layout)

Target screen structure:

  1. Top status ribbon:
  • fingerprint
  • managed users count
  • entries count
  • active kind/filter
  • last sync timestamp
  1. Main split:
  • Left: seed/account tree + context summary.
  • Right:
    • Top: search + filter controls + dense entry table/grid.
    • Bottom: contextual inspector board for selected entry.
  1. Bottom action strip:
  • Global shortcuts always visible.
  • Context shortcuts appended for selected kind and mode.

5) Interaction Model Contract

Primary modes:

  1. Browse Mode:
  • Grid-focused.
  • Fast navigation/search/filter/sort.
  1. Inspect Mode:
  • Inspector board-focused.
  • Entry-specific actions (reveal/copy/export/edit/link).
  1. Edit Mode:
  • Existing document editor/entry mutation mode.

Behavior rules:

  1. Selected row always drives inspector board content.
  2. Locked vault state must be visible in status ribbon and action strip.
  3. Sensitive actions reflect state chips:
  • HIDDEN, REVEALED, COPIED, LOCKED
  1. If no selection exists, inspector shows onboarding or "select entry" guidance.

6) Component-Level Spec

6.1 Left Navigation Tree

Goal: match mockup's persistent profile/seed hierarchy.

Requirements:

  1. Always visible.
  2. Shows active profile + managed-account context.
  3. Supports keyboard traversal and selection.
  4. Selection changes filter context for center grid.

Initial fallback (if full tree data unavailable):

  1. Render static grouped sections from currently available services.
  2. Keep widget contract stable so backing data can be enriched later.

6.2 Top Entry Grid

Goal: table-like view similar to mockups.

Columns (target):

  1. Index num
  2. Entry num
  3. Title
  4. Kind
  5. Tags (truncated)
  6. Date modified
  7. Archive/blacklist status

Rules:

  1. Compact row density by default.
  2. Overflow truncation with consistent ellipsis behavior.
  3. Sort indicators shown in header (even if only one active sort initially).
  4. Keyboard row selection must stay smooth on large datasets.

6.3 Inspector Board (Lower Panel)

Goal: board-style details by entry kind, matching mockup families.

Common board header:

  1. Entry label + kind.
  2. Modified timestamp.
  3. Archive/blacklist status.
  4. Index/entry IDs.
  5. Right-side primary action button area (Edit, etc).

Common board body:

  1. Field blocks with labels.
  2. Copy/export/reveal controls as command hints/buttons.
  3. Notes area.
  4. Tags panel (right rail when space permits).

6.4 Bottom Action Strip

Goal: persistent discoverability.

Global segment examples:

  1. [S]ettings
  2. [A]dd Entry
  3. [C]reate Seed
  4. [R]emove Seed
  5. [H]ide/Reveal Sensitive
  6. [E]xport
  7. [I]mport
  8. [B]ackup

Context segment examples:

  1. Password: copy password, copy username, reveal, qr.
  2. 2FA: copy code, refresh code, show qr.
  3. SSH/PGP: copy public/private, export key.
  4. Nostr: copy npub/nsec, show public/private qr.

7) Entry-Type Board Templates (Implementation Contract)

Each entry kind gets a formatter/template function returning a structured board text payload.

Template priority order:

  1. password / stored_password
  2. note / document
  3. seed / managed_account
  4. totp
  5. ssh
  6. pgp
  7. nostr
  8. key_value
  9. fallback generic JSON board

Per-kind minimum fields:

  1. Password/stored password:
  • password (masked by default), username, url, tags, notes
  1. Note/document:
  • content preview, tags, notes, file type (document)
  1. Seed/managed account:
  • seed phrase hidden/reveal state, derivation/index metadata where available, tags, notes
  1. TOTP:
  • current code, period, digits, secret hidden/reveal, qr support
  1. SSH:
  • public key, private key hidden/reveal, export hints
  1. PGP:
  • fingerprint, public key, private key hidden/reveal, export hints
  1. Nostr:
  • npub, nsec hidden/reveal, public/private qr modes

8) Keyboard and Command Mapping Plan

Keep existing keybinds; add stronger discoverability and zone consistency.

Add/confirm mappings:

  1. Zone focus:
  • 1 left tree
  • 2 top grid
  • 3 inspector board
  1. Mode emphasis:
  • Tab optional focus advance
  • Shift+Tab reverse focus (if Textual behavior allows cleanly)
  1. Inspector actions:
  • keep v reveal and g qr globally
  • add board-level shortcuts to status/action strip text
  1. Palette aliases:
  • add board/action aliases where needed to mirror strip labels.

9) Delivery Plan (Phased Slices)

Phase 1: Shell Restructure (Layout only)

Deliver:

  1. Split right pane into top grid + lower inspector board.
  2. Add top status ribbon and bottom action strip scaffolding.
  3. Keep existing data behavior unchanged.

Exit criteria:

  1. Layout visually resembles mockup structure.
  2. Existing interaction tests still pass.
  3. No regression in reveal/qr/session behavior.

Phase 2: Grid Modernization

Deliver:

  1. Table-style header row and compact rows.
  2. Column alignment/truncation rules.
  3. Sort indicator placeholders and active filter badges.

Exit criteria:

  1. Large-list navigation remains performant.
  2. Paging/search/filter actions remain deterministic.

Phase 3: Inspector Board Templates (Core Kinds)

Deliver:

  1. Board templates for password, note/document, seed, totp.
  2. Sensitive-state chips + action hints.
  3. Context-aware action strip additions.

Exit criteria:

  1. Selected entry shows board instead of raw JSON for covered kinds.
  2. Reveal/qr flows are explicit and test-covered.

Phase 4: Inspector Board Templates (Advanced Kinds)

Deliver:

  1. SSH/PGP/Nostr/key_value boards.
  2. Copy/export affordance text and command parity hints.
  3. Managed-account board treatment.

Exit criteria:

  1. All major kinds render purpose-built boards.
  2. No loss of existing palette command capability.

Phase 5: Tree Navigation and Polish

Deliver:

  1. Left tree visual and keyboard behavior.
  2. Compact vs expanded density mode.
  3. Final visual polish against mockups (in green theme).

Exit criteria:

  1. Tree + grid + board flow is coherent end-to-end.
  2. User walkthrough of top daily workflows feels parity+ with legacy.

10) Testing and Quality Gates Per Slice

Mandatory per slice:

  1. Update/extend Textual interaction tests in:
  • src/tests/test_tui_v2_textual_interactions.py
  • src/tests/test_tui_v2_action_matrix.py
  1. Run:
  • poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  1. If app logic paths changed meaningfully, run:
  • scripts/tui2_coverage_gate.sh
  1. Update docs:
  • this file
  • docs/tui_v2_legacy_parity_matrix.md
  • docs/dev_control_center.md (if priorities shift)

11) Non-Goals (for this refresh)

  1. Replacing Textual runtime stack.
  2. Reworking core service/data model APIs for cosmetic UI concerns.
  3. Introducing non-deterministic behavior in entry rendering.
  4. Removing legacy TUI fallback before explicit cutover decision.

12) Session Handoff Checklist

Before ending any session touching this refresh:

  1. Mark phase/slice progress in this document.
  2. Record what was implemented and what remains.
  3. Add test evidence and known regressions.
  4. Append summary to memory-update.md.

Current next slice (recommended): Phase 5 - Interactive tree navigation + final visual polish.

13) Progress Update

2026-03-02 - Phase 1 scaffold (initial pass) landed

Implemented in src/seedpass/tui_v2/app.py:

  1. Added top status ribbon (#top-ribbon) with live summary:
  • fingerprint
  • managed session indicator
  • visible entry count
  • active kind/archive filters
  • lock/session state
  • last sync summary
  1. Added structural section framing:
  • Entry Grid heading above center list/search area
  • Inspector Board heading above right detail area
  1. Added persistent bottom action strip (#action-strip) with keyboard hint rail.

  2. Preserved all existing command behavior and service-layer flows.

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 28 passed.

Notes:

  1. This is a layout/chrome scaffold only; no table/board template conversion yet.
  2. Next slice should implement Phase 2 grid modernization without regressing interaction tests.

2026-03-02 - Phase 2 grid modernization (initial pass) landed

Implemented in src/seedpass/tui_v2/app.py:

  1. Upgraded center section heading to a multi-line table scaffold:
  • column header row (Idx, Entry, Title, Kind, Meta, Arch)
  • sort-indicator placeholder row
  • live page/row counts
  1. Updated entry list row formatter to aligned, dense table-style rows:
  • fixed-width columns for index/entry/title/kind/meta/archive.
  • meta column now uses URL or username preview when present.
  1. Kept behavior and command flows unchanged (visual/data-presentational slice only).

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 28 passed.

Next recommended slice:

  1. Phase 3 inspector board templates for core kinds (password, document/note, seed, totp).

2026-03-02 - Phase 3 inspector board templates (core kinds) landed

Implemented in src/seedpass/tui_v2/app.py:

  1. Replaced raw JSON detail rendering for core kinds with structured board layouts:
  • password / stored_password
  • document / note
  • seed / managed_account
  • totp
  1. Added reusable board helpers:
  • entry kind normalization
  • common board header (label/kind/id/modified/archived)
  • tags and notes normalization
  1. Added secure-by-default board copy:
  • sensitive values remain hidden in board body
  • reveal/QR actions remain the explicit path for sensitive disclosure
  1. Kept fallback generic JSON board for non-templated kinds to preserve coverage while templates are expanded.

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 28 passed.

Next recommended slice:

  1. Phase 4 inspector board templates for advanced kinds (ssh, pgp, nostr, key_value) and stronger action-strip context hints.

2026-03-02 - Phase 4 advanced actions (copy workflow) landed

Implemented in src/seedpass/tui_v2/app.py:

  1. Added palette command:
  • copy <field> (optional: confirm)
  1. Added kind-aware copy field resolution for:
  • password/stored_password: password, username, url
  • seed/managed_account: seed|phrase
  • totp: code, secret
  • ssh: public, private
  • pgp: private, fingerprint
  • nostr: npub, nsec
  • key_value: key, value
  • document/note: content|text
  1. Sensitive copy targets now require explicit confirmation (confirm) before clipboard action.

  2. Updated command reference/help coverage to include copy.

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 29 passed.

Next recommended slice:

  1. Extend Phase 4 with explicit file export actions for advanced key kinds (SSH/PGP/Nostr material export paths with confirmation and tests).

2026-03-02 - Phase 4 advanced actions (export workflow) landed

Implemented in src/seedpass/tui_v2/app.py:

  1. Added palette command:
  • export-field <field> <path> (optional: confirm)
  1. Reused kind-aware field resolution from copy workflow and added file export writing:
  • supports same kind/field matrix as copy.
  • writes UTF-8 payloads to absolute or relative paths (relative paths resolve from cwd).
  1. Sensitive export targets now require explicit confirmation (confirm) before writing.

  2. Updated command discoverability/help:

  • palette placeholder
  • help summary
  • full palette reference

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 29 passed.

Next recommended slice:

  1. Continue Phase 5 polish: left tree navigation model + compact/expanded density toggle and final visual alignment pass to mockups.

2026-03-02 - Phase 5 polish (density + profile tree scaffold) landed

Implemented in src/seedpass/tui_v2/app.py:

  1. Added density controls:
  • keybind: d (toggle compact/comfortable)
  • palette: density <compact|comfortable>
  • top ribbon, left panel, and grid heading now show active density mode
  1. Added left-panel profile tree scaffold:
  • new Profiles section in left panel
  • shows known profiles from profile service when available
  • marks active fingerprint line
  1. Expanded command discoverability:
  • palette placeholder/help/reference include density command.

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 29 passed.

Next recommended slice:

  1. Continue Phase 5 by adding explicit keyboard navigation inside the left profile tree and wiring profile-selection actions to update active context.

2026-03-02 - Phase 5 polish (interactive profile tree navigation) landed

Implemented in src/seedpass/tui_v2/app.py:

  1. Added keyboard bindings for left profile tree interactions:
  • Up / Down: move profile cursor
  • Ctrl+O: open/switch to selected profile
  1. Added palette command aliases:
  • profile-tree-next
  • profile-tree-prev
  • profile-tree-open
  1. Updated left-panel rendering:
  • cursor marker (▶) and active profile marker (*) now render together
  • status text confirms selection movement and profile-switch outcomes
  1. Wired profile mutation commands to refresh tree state:
  • profile-switch
  • profile-add
  • profile-remove
  • profile-rename

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 31 passed.

Next recommended slice:

  1. Final visual alignment pass to mockups (spacing, headers, action strip hierarchy) and semantic indicator readability polish.

14) Current Status Snapshot

Completed:

  1. Phase 1 shell restructure scaffold.
  2. Phase 2 grid modernization baseline.
  3. Phase 3 core inspector board templates.
  4. Phase 4 advanced inspector actions (copy, export-field with confirm gates).
  5. Phase 5 initial polish (density controls + profile tree scaffold).
  6. Phase 5 interactive profile tree navigation and open/switch behavior.

Remaining (active queue):

  1. Final alignment pass to mockup spacing/rhythm.
  2. Semantic-state indicator readability pass in ribbon/action strip for upcoming dense-status scenarios.
  3. Continue board-by-board card/action fidelity polish (Password/Stored Password -> Note/2FA -> SSH/PGP/Nostr).
  4. Run focused TUI tests and coverage gate after each polish slice.

16) Progress Update (2026-03-02, Slice: Action Rail + Hotkey Reliability)

Implemented:

  1. Bottom action strip upgraded to a two-line persistent rail:
  • line 1: stable global controls
  • line 2: entry-kind contextual controls
  1. Status bar upgraded to a two-line presentation for better readability:
  • mode/pane + stable shortcut hint
  • latest status message
  1. Center-pane focus behavior changed to list-first:
  • action_focus_center now focuses #entry-list instead of #search
  • on launch, focus defaults to #entry-list
  1. This restores expected immediate hotkey behavior for v/g without requiring a manual focus fix.
  2. Top ribbon readability pass:
  • compacted status labels (FP, M, E, K, SEM, Sync)
  • semantic mode shortened (kw|hyb|sem)
  • fingerprint and sync strings truncated for narrow terminals
  1. Responsive narrow-screen fallback:
  • auto-compact mode when terminal width is narrow
  • link context side panel collapses in compact mode to preserve inspector readability
  • action strip now signals compact mode (Compact: links hidden)
  1. Board-fidelity refresh (current slice):
  • Password/Stored Password boards now use explicit board titles and refined action/field lines
  • Note/Document board now uses explicit board title with clearer preview labeling
  • 2FA board action labels clarified (Copy Code, Reveal Secret, QR)
  1. Added compact-layout regression test:
  • test_tui2_textual_compact_layout_hides_link_panel_and_can_restore

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 31 passed.
  3. Added regression coverage:
  • test_tui2_textual_default_focus_keeps_sensitive_hotkeys_active

17) Progress Update (2026-03-02, Slice: SSH/PGP/Nostr Card Fidelity)

Implemented:

  1. Inspector header readability tweak:
  • changed Edit: [e] to Edit: e (avoids markup-style ambiguity in Textual render output).
  1. SSH board polish:
  • explicit SSH Board title
  • metadata row moved directly under title
  • public-key preview line added (truncated for dense layout)
  • action rows grouped as public/private operations
  1. PGP board polish:
  • explicit PGP Board title
  • metadata-first structure + retained fingerprint prominence
  • action rows grouped as public/private operations
  1. Nostr board polish:
  • explicit Nostr Board title
  • metadata-first structure + npub/nsec lines
  • QR public/private actions shown together
  1. Added board-fidelity regression coverage:
  • test_tui2_textual_ssh_pgp_nostr_boards_show_action_fidelity

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 32 passed.

Artifacts:

  1. artifacts/ui_eval/current_tui2_after32_ssh.png
  2. artifacts/ui_eval/current_tui2_after32_pgp.png
  3. artifacts/ui_eval/current_tui2_after32_nostr.png

18) Progress Update (2026-03-02, Slice: Seed Board Fidelity)

Implemented:

  1. Seed-family board specialization:
  • seed now renders as BIP-39 Seed Board
  • managed_account now renders as Managed Account Seed Board
  1. Seed metadata fidelity:
  • word count now falls back to deriving from seed_phrase when words is absent
  • index metadata remains explicit in the board
  1. Seed action affordances aligned to sensitive workflow:
  • Reveal Seed, QR Seed, Copy Seed(confirm), Export Seed(confirm)
  • clear command hints for confirm-gated copy/export/reveal flows
  1. Added board-fidelity regression coverage:
  • test_tui2_textual_seed_and_managed_seed_boards_show_fidelity

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 33 passed.

Artifacts:

  1. artifacts/ui_eval/current_tui2_after33_seed.png
  2. artifacts/ui_eval/current_tui2_after33_managed_seed.png

19) Progress Update (2026-03-02, Slice: Spacing/Rhythm + Compact Action Strip)

Implemented:

  1. Layout rhythm tuning:
  • top work area increased (#top-work from 5fr to 6fr)
  • inspector area increased (#right from 4fr to 5fr)
  • left rail slightly narrowed (#left from 34 to 32)
  • inspector side rail slightly narrowed (#inspector-side from 30 to 28)
  1. Compact-mode action-strip readability:
  • compact global row now uses shorter labels (Ctrl+P, 1/2/3, p/n, f/h)
  • very narrow widths apply abbreviated context text (Rev, Arch, cfm)
  1. Responsive state tracking:
  • stores viewport width and adapts action-strip wording accordingly.

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 33 passed.

Artifacts:

  1. artifacts/ui_eval/current_tui2_after34_password.png
  2. artifacts/ui_eval/current_tui2_after34_note.png
  3. artifacts/ui_eval/current_tui2_after34_totp.png
  4. artifacts/ui_eval/current_tui2_after34_ssh.png
  5. artifacts/ui_eval/current_tui2_after34_pgp.png
  6. artifacts/ui_eval/current_tui2_after34_nostr.png
  7. artifacts/ui_eval/current_tui2_after34_seed.png
  8. artifacts/ui_eval/current_tui2_after34_managed_seed.png

20) Progress Update (2026-03-02, Slice: Micro-Alignment Tightening)

Implemented:

  1. Tightened top-frame rhythm to better mirror mockup structure:
  • reduced top-ribbon vertical gap
  • removed extra right-panel top gap
  1. Increased dense-table feel in center column:
  • reduced grid heading height and spacing
  • removed quick-jump extra bottom spacing
  1. Tightened panel rhythm in left column:
  • slightly narrower tree rail
  • reduced activity panel height and top gap
  1. Improved inspector rhythm:
  • removed extra spacing under inspector heading

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 33 passed.

21) Progress Update (2026-03-02, Slice: Header/Action Consistency Sweep)

Implemented:

  1. Note/Document board consistency upgrades:
  • now includes common metadata line: Kind | Modified | Archived
  • now includes common ID line: Index Num* | Entry Num
  1. 2FA board consistency upgrades:
  • now includes common metadata line: Kind | Modified | Archived
  • now includes common ID line: Index Num* | Entry Num
  1. Added regression coverage:
  • test_tui2_textual_note_and_totp_boards_include_common_metadata

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 34 passed.

Artifacts:

  1. artifacts/ui_eval/current_tui2_after35_password.svg
  2. artifacts/ui_eval/current_tui2_after35_note.svg
  3. artifacts/ui_eval/current_tui2_after35_totp.svg
  4. artifacts/ui_eval/current_tui2_after35_ssh.svg
  5. artifacts/ui_eval/current_tui2_after35_pgp.svg
  6. artifacts/ui_eval/current_tui2_after35_nostr.svg
  7. artifacts/ui_eval/current_tui2_after35_seed.svg
  8. artifacts/ui_eval/current_tui2_after35_managed_seed.svg

22) Progress Update (2026-03-02, Slice: Final Table/Header Micro-Copy)

Implemented:

  1. Grid heading copy cleanup:
  • removed ambiguous duplicate naming and standardized columns to: Sel | Id | Entry# | Label | Kind | Meta | Arch
  1. Board footer action wording normalized across kinds:
  • consistent verb-first labels with key hints, e.g. Edit (e), Archive (a), Reveal (v), QR (g), Save (Ctrl+S), Cancel (Esc).
  1. Seed/advanced command hints retained where explicit command forms are needed:
  • copy seed confirm
  • export-field seed <path> confirm
  • qr private confirm

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 34 passed.

Artifacts:

  1. artifacts/ui_eval/current_tui2_after36_password.svg
  2. artifacts/ui_eval/current_tui2_after36_note.svg
  3. artifacts/ui_eval/current_tui2_after36_totp.svg
  4. artifacts/ui_eval/current_tui2_after36_ssh.svg
  5. artifacts/ui_eval/current_tui2_after36_pgp.svg
  6. artifacts/ui_eval/current_tui2_after36_nostr.svg
  7. artifacts/ui_eval/current_tui2_after36_seed.svg
  8. artifacts/ui_eval/current_tui2_after36_managed_seed.svg

23) Progress Update (2026-03-02, Slice: 2FA Copy URL Parity Closure)

Implemented:

  1. Added first-class 2FA URL copy command:
  • 2fa-copy-url <entry_id>
  1. Added TOTP URL support to generic copy flow:
  • copy url confirm (for selected TOTP entry) now resolves otpauth URI.
  1. Surfaced URL copy affordance in 2FA UI text:
  • 2FA inspector board action row now includes Copy URL(confirm).
  • 2FA board command hint row now includes 2fa-copy-url <entry_id>.
  1. Updated palette discoverability text:
  • command palette placeholder, help reference, and quick-help example include 2fa-copy-url.
  1. Added/updated regression coverage:
  • extended 2FA board tests to assert:
    • successful URL copy
    • usage and input validation for 2fa-copy-url
    • board command hint visibility

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 34 passed.

Strict closeout impact:

  1. 2FA board moved from Open to Minor Gap (functional parity closed; visual polish remains).

24) Progress Update (2026-03-02, Slice: Compact Discoverability + Board Polish)

Implemented:

  1. Compact-mode notes/tags discoverability upgrade:
  • when compact mode collapses the right notes/tags panel, inspector boards now render notes/tags inline for discoverability.
  1. Applied inline notes/tags fallback across core boards:
  • password/stored_password, note/document, seed/managed_account, totp, ssh, pgp, nostr.
  1. Password + Note polish:
  • password board now has explicit Credentials section.
  • note board now uses clearer Content Preview heading and flow.
  1. Added compact discoverability regression assertions:
  • extended test_tui2_textual_compact_layout_hides_link_panel_and_can_restore to verify inline notes/tags content.

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 34 passed.

Artifacts:

  1. artifacts/ui_eval/current_tui2_after38_note_compact.svg

25) Progress Update (2026-03-02, Slice: Viewport Balance Adaptation)

Implemented:

  1. Added viewport-height adaptive layout balancing:
  • short viewports (height < 32): keeps inspector usable and hides activity panel to recover space.
  • standard viewports: balanced default (top-work / inspector sizing) with activity visible.
  • tall viewports (height >= 52): increases table density while preserving inspector legibility.
  1. Keeps compact-mode width behavior and height behavior coordinated via unified responsive update path.
  2. Added viewport-balance regression coverage:
  • test_tui2_textual_viewport_balance_hides_activity_on_short_height

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 35 passed.

Artifacts:

  1. artifacts/ui_eval/current_tui2_after39_note_compact_short.svg
  2. artifacts/ui_eval/current_tui2_after39_note_standard.svg

26) Progress Update (2026-03-02, Slice: Typography/Icon Polish)

Implemented:

  1. Added consistent kind icons in inspector board titles/headers for stronger visual scanning:
  • password, note/document, 2FA, seed/managed seed, SSH, PGP, Nostr now include their kind icon in board title lines.
  1. Applied icon-enhanced shared entry-header format for template-based boards.
  2. Preserved command and behavior parity while improving visual hierarchy.

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 35 passed.

Artifacts:

  1. artifacts/ui_eval/current_tui2_after40_password.svg
  2. artifacts/ui_eval/current_tui2_after40_note.svg
  3. artifacts/ui_eval/current_tui2_after40_totp.svg
  4. artifacts/ui_eval/current_tui2_after40_ssh.svg
  5. artifacts/ui_eval/current_tui2_after40_pgp.svg
  6. artifacts/ui_eval/current_tui2_after40_nostr.svg
  7. artifacts/ui_eval/current_tui2_after40_seed.svg
  8. artifacts/ui_eval/current_tui2_after40_managed_seed.svg

15) Mockup Board Parity Audit (2026-03-02)

Source set reviewed:

  1. UI_mockups/PNG/UI Board.png
  2. UI_mockups/PNG/Password Board.png
  3. UI_mockups/PNG/Stored Password Board.png
  4. UI_mockups/PNG/Note Board.png
  5. UI_mockups/PNG/2FA Board.png
  6. UI_mockups/PNG/BIP-39 Seed Board.png
  7. UI_mockups/PNG/SSH Board.png
  8. UI_mockups/PNG/PGP Board.png
  9. UI_mockups/PNG/Nostr Board.png

15.1 Shared Layout Contract (from all mockups)

Expected:

  1. Dense table-first upper region with always-visible rows and explicit separators.
  2. Persistent left hierarchy tree with compact, high-signal metadata.
  3. Lower inspector with:
  • shared header row (label, kind, modified, blacklist/archive, index/entry)
  • field cards
  • right-side secondary card (tags/notes/links/sensitive)
  1. Bottom action rail with stable global actions + contextual actions.

Current status:

  1. Implemented in structure, but still needs spacing/density tuning to keep both:
  • sufficient table rows visible
  • full inspector card content visible in same viewport

15.2 Board-by-Board Functional + Layout Parity

Mockup board Required field/layout traits Required actions TUI v2 status
UI Board Dense table, left tree, bottom rail search/filter/paging/navigation Minor Gap
Password password/username/url/tags + notes side panel copy password, create new, edit, reveal/qr Minor Gap
Stored Password password/username/url/tags + notes side panel copy password, edit, reveal/qr Minor Gap
Note large content area + tags side card edit/save/cancel/export Minor Gap
2FA code field + URL field + notes/tags side card copy code, copy URL, reveal/qr, 2FA board Done
BIP-39 Seed seed field + notes + tags side card reveal/confirm, qr, copy/export with confirm Done
SSH public/private rows + notes/tags side card copy public/private, export public/private, reveal private Done
PGP public/private rows + notes/tags side card copy/export public/private, reveal private Done
Nostr npub/nsec rows + notes/tags side card copy npub/nsec, qr public/private, reveal nsec Done

15.3 Closeout Status Definitions (Strict)

  1. Done: matching layout and actions with no user-visible parity gap in normal viewport.
  2. Minor Gap: core behaviors present; remaining differences are visual rhythm/density or secondary affordance polish.
  3. Open: missing required interaction from mockup contract.

15.4 Strict Closeout Notes (2026-03-02)

  1. UI Board -> Minor Gap:
  • structure is correct (left tree + table + inspector + action rail), but table density and lower board visibility balance still need final tuning.
  1. Password/Stored Password -> Minor Gap:
  • core actions and fields are present; remaining gap is closer card geometry fidelity to mockup.
  1. Note -> Minor Gap:
  • edit/save/export flow is complete; remaining gap is larger content-card visual weighting compared to mockup.
  1. 2FA -> Done:
  • code/URL copy, reveal, QR, and board workflows are now first-class and discoverable.
  1. BIP-39 Seed -> Done:
  • reveal/QR/copy/export confirm workflows are present with board-level affordances.
  1. SSH/PGP/Nostr -> Done:
  • required copy/export/reveal/QR workflows are present with explicit board action affordances.

15.5 Current Priority Gap Order (derived from strict closeout)

  1. Keep strict Open count at zero by preserving 2FA copy-URL parity.
  2. Final visual card/rhythm pass for remaining Minor Gap boards (UI Board, Password, Stored Password, Note).
  3. Final action-rail wording polish to match mockup verbs.

15.6 Immediate Next Slice (strict closeout coupled)

  1. Final card geometry pass for Password/Stored Password/Note.
  2. Final UI-board density pass (table rows + lower inspector balance).
  3. Final action-strip verb/microcopy polish.
  4. Re-run focused suite and capture after41 artifacts.

27) Progress Update (2026-03-02, Slice: Strict Closeout Scoring Pass)

Scoring method:

  1. Done: no user-visible functional parity gap and mockup-consistent action discoverability in normal viewport.
  2. Minor Gap: functional parity met, but visual/rhythm mismatch remains.
  3. Open: required interaction missing.

Current strict closeout scoreboard:

  1. Done (5/9): 2FA, BIP-39 Seed, SSH, PGP, Nostr.
  2. Minor Gap (4/9): UI Board, Password, Stored Password, Note.
  3. Open (0/9).

Evidence basis:

  1. Focused validation gate: 35 passed in current run set.
  2. Artifact set: artifacts/ui_eval/current_tui2_after40_*.svg.
  3. Dedicated parity regressions in src/tests/test_tui_v2_textual_interactions.py for:
  • default hotkey focus
  • compact discoverability
  • board fidelity (SSH/PGP/Nostr, Seed/Managed Seed, Note/2FA metadata)
  • viewport balance behavior

28) Detailed UX Audit (2026-03-02, Pre-Implementation Writeup)

Scope:

  1. Compare current TUI v2 runtime states against mockup set in UI_mockups/PNG/*.png.
  2. Focus on:
  • context-aware inspector behavior
  • left tree structure fidelity
  • per-board layout transitions and function-driven UI changes

Evidence captured:

  1. Runtime state dump:
  • artifacts/ui_eval/audit_20260302/state_dump.txt
  1. Board screenshots (vector snapshots):
  • artifacts/ui_eval/audit_20260302/*.svg

28.1 Key User-Reported Concerns: Validation

  1. Concern: inspector panel appears open/populated all the time.
  • Confirmed behavior in current v2:
    • first row is auto-selected on load (Selected: #0 ... in state dump),
    • inspector is therefore always populated by design.
  • Mockup intent:
    • inspector content is contextual and should feel state-driven, not always-active by default.
  • Status:
    • Functional but not matching UX intent; should be revised to delayed/populated-on-explicit-selection behavior.
  1. Concern: left tree does not reflect fingerprint/managed-account hierarchy.
  • Confirmed behavior in current v2:
    • left panel shows profile list scaffold with shallow pseudo-tree lines from profile fingerprints.
    • managed accounts are not rendered as child nodes in this structure.
  • Mockup intent:
    • deep hierarchical seed/account tree with clear parent-child grouping.
  • Status:
    • Partial scaffold only; structural data model + renderer need expansion.

28.2 Board-by-Board Layout/Function Transition Audit

UI Board (global layout):

  1. Present:
  • top ribbon, left rail, center grid, lower inspector, bottom action strip.
  1. Missing vs mockup:
  • tree depth and semantic grouping on left.
  • denser table row packing with richer column semantics (mockup includes blacklist/date emphasis).
  • true “inspect mode” transition behavior (instead of always-populated inspector at startup).

Password / Stored Password:

  1. Present:
  • board titles, metadata, credentials rows, action affordances, right notes/tags side panel.
  1. Gaps:
  • visual card geometry still less segmented than mockup (mockup uses stronger field-card framing and right notes dominance).
  • “create new”/copy controls are textual chips, not distinct button blocks with stronger visual separation.

Note Board:

  1. Present:
  • content preview, metadata, edit/export actions, notes/tags panel, compact inline fallback.
  1. Gaps:
  • mockup shows stronger large-content card emphasis with clearer right notes pane ratio.
  • current board remains text-first and less panelized.

2FA Board:

  1. Present:
  • copy code, copy URL, reveal, QR, dedicated 2FA board commands and hints.
  1. Gaps:
  • visual treatment of URL/code cards not yet equivalent to mockup’s framed field blocks.

BIP-39 Seed Board:

  1. Present:
  • reveal/QR/copy/export confirm paths, word-count/index metadata, managed vs non-managed board variants.
  1. Gaps:
  • card visual hierarchy still lighter than mockup’s framed block style.

SSH / PGP / Nostr:

  1. Present:
  • required copy/export/reveal/QR action coverage and metadata lines.
  1. Gaps:
  • action chips and field block segmentation still not as bold as mockup button/card composition.

28.3 Layout State Changes (Function-Driven) vs Mockup Expectations

Current implemented state transitions:

  1. Selection changes board content.
  2. Compact width hides side notes/links panel and now inlines notes/tags.
  3. Short height hides activity panel to preserve core content area.
  4. 2FA board toggles into dedicated live-code table view.

Still needed to match mockup behavior intent:

  1. Startup with no forced selection state (or a true neutral “select entry” inspect state).
  2. Explicit browse-mode vs inspect-mode layout emphasis:
  • browse: denser table, reduced inspector prominence
  • inspect: fuller lower board prominence after explicit open/select action
  1. Left tree deep hierarchy with managed-account child nodes and clearer expand/collapse semantics.

28.4 Font Size Request Constraint

  1. Terminal font size itself is controlled by the terminal emulator, not Textual app CSS.
  2. App-side equivalent for “smaller font feel” is:
  • tighter spacing/margins/heights,
  • shorter labels,
  • denser row/column presentation,
  • reduced decorative padding.
  1. Next implementation slices should target this density path to effectively fit more content per viewport.

29) Progress Update (2026-03-03, Slice: Password/Stored Password/Note Card Geometry)

Completed:

  1. Password and Stored Password inspector boards now use stronger card sections:
  • Credentials
  • Quick Actions
  1. Note/Document board now uses the same card section framing:
  • Content
  • Quick Actions
  1. Increased note preview payload from 120 to 180 chars for better content-card parity in standard density.

Code references:

  1. src/seedpass/tui_v2/app.py (_board_card, password/stored_password board, note/document board)

Regression coverage:

  1. Updated note board metadata test to assert card framing.
  2. Added password board card-section regression test.

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 57 passed.

Remaining strict-closeout slice order unchanged:

  1. Final UI-board density pass (table rows + lower inspector balance)
  2. Final action-strip verb/microcopy polish

30) Progress Update (2026-03-03, Slice: UI-Board Density Rebalance)

Completed:

  1. Dense/high-res layout now rebalances vertical space by context:
  • Idle (no selected entry, no editor, no 2FA board): top-work=9fr, right=3fr
  • Active inspect/edit/2FA: top-work=8fr, right=4fr
  1. Added explicit layout rebalance hook so selection and pane-mode transitions re-apply split without requiring window resize.
  2. Rebalance path wired through:
  • page render transitions (empty/non-empty)
  • entry selection/open flow
  • right-pane mode switches (view/edit/2FA)

Code references:

  1. src/seedpass/tui_v2/app.py (_update_responsive_layout, _refresh_layout_balance, _set_right_pane_mode, _render_current_page, _show_entry)

Regression coverage:

  1. Added dense-mode split behavior test:
  • test_tui2_textual_hires_density_rebalances_idle_vs_selected

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 58 passed.

Remaining strict-closeout slice:

  1. Final action-strip verb/microcopy polish.

31) Progress Update (2026-03-03, Slice: Action-Strip Verb/Microcopy Polish)

Completed:

  1. Context row wording standardized to verb-first labels with key hints:
  • Reveal (v)
  • QR (g)
  • Edit (e) / Edit Doc (e)
  • Archive (a)
  • Save (Ctrl+S)
  • 2FA Board (6)
  1. Managed account row now retains explicit session controls while matching the same style:
  • managed-load
  • managed-exit
  • plus reveal/qr/edit/archive with key hints.
  1. Click routing remains compatible after copy update:
  • row-2 parser now recognizes both symbol-led and verb-led tokens (v/Reveal, g/QR, etc.).

Code references:

  1. src/seedpass/tui_v2/app.py (_update_action_strip, _action_strip_context_action)

Regression coverage:

  1. Updated action-strip click + context-update tests to assert verb-led labels.

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 58 passed.

32) Progress Update (2026-03-03, Slice: Universal Card Framing)

Completed:

  1. Extended _board_card framing to all remaining inspector boards:
    • TOTP: Parameters (period/digits/code/secret) + Quick Actions
    • SSH: Keys (public/private) + Quick Actions
    • PGP: Keys (fingerprint/public/private) + Quick Actions
    • Nostr: Keys (npub/nsec) + Quick Actions
    • Seed/Managed Account: Seed Info (phrase/word count/index) + Quick Actions
  2. All boards now use consistent card-section visual language matching the Password/Note treatment from Slice 29.

Code references:

  1. src/seedpass/tui_v2/app.py (TOTP, SSH, PGP, Nostr, Seed board sections)

Regression coverage:

  1. Updated SSH/PGP/Nostr board test to assert +- Keys and +- Quick Actions card framing.
  2. Updated Seed/Managed Seed board test to assert +- Seed Info and +- Quick Actions card framing.
  3. Updated TOTP board test to assert +- Parameters and +- Quick Actions card framing.

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 58 passed.

Strict closeout impact:

  1. All 9 board types now have consistent card-section framing.
  2. SSH/PGP/Nostr/Seed boards moved from visual-gap to card-parity with Password/Note.

33) Progress Update (2026-03-03, Slice: Board Density Tightening)

Completed:

  1. Removed redundant plain-text section headers above card frames:
    • "Login Fields", "Document Fields", "2FA Fields", "Seed Fields", "Key Material", "Operations"
    • Card titles (Credentials, Content, Parameters, Seed Info, Keys, Quick Actions) are self-descriptive.
  2. Removed "Compact: Notes/Tags shown inline." noise line from compact mode boards.
  3. Capped note/document preview length from 180 to 100 chars to prevent oversized Content cards.

Density improvement:

  1. Password board: ~21 lines -> 17 lines (-4 lines per board).
  2. All boards save 2-3 lines from removed section headers.
  3. Note board Content card width reduced by ~45%.

Code references:

  1. src/seedpass/tui_v2/app.py (all board sections + _notes_tags_panel_hint)

Regression coverage:

  1. Updated assertions from section headers to card-frame prefixes.
  2. Removed "Compact:" noise assertion.

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 58 passed.

34) Progress Update (2026-03-03, Slice: Action Strip + Hint Line Tightening)

Completed:

  1. Normal-mode global action strip now uses verb-first labels with key hints:
    • Settings (Shift+S), Add (Shift+A), Seed+ (Shift+C), etc.
    • Added Cmd (Ctrl+P) to normal mode for discoverability parity with compact/dense modes.
  2. Shortened Seed board Actions hint:
    • Before: copy seed confirm | export-field seed <path> confirm
    • After: Copy Seed (confirm) | Export (confirm)
  3. Shortened TOTP board Actions hint:
    • Before: 2fa-copy <id> | 2fa-copy-url <id>
    • After: Copy Code (Ctrl+P) | Copy URL (Ctrl+P)
  4. Action hints now consistently use user-facing verbs instead of raw palette commands.

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 58 passed.

35) Progress Update (2026-03-03, Slice: Final Micro-Polish)

Completed:

  1. Added max-width cap (72 chars) to _board_card renderer:
    • Content cards no longer stretch across the full viewport.
    • Long rows are truncated with ellipsis character.
    • Note board max line width reduced from ~112 to 76 chars.
  2. Capitalized Nostr action hint:
    • Before: qr private confirm
    • After: QR Private (confirm)
  3. Compact mode global strip now uses verb-first labels:
    • Before: S Settings A Add C Create Seed R Remove Seed H Hide/Reveal E Export I Import B Backup Ctrl+P Cmd Compact
    • After: Settings (S) Add (A) Seed+ (C) Seed- (R) Reveal (H) Export (E) Import (I) Backup (B) Cmd (Ctrl+P)

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 58 passed.

36) Progress Update (2026-03-03, Slice: UX Bug Fixes from Walkthrough)

Completed:

  1. Fixed open <non-existent-id> showing broken empty board:
    • Now checks for empty dict (not just None) from retrieve_entry.
    • Shows clear "Entry #N not found" message in inspector.
    • Clears selection state so action strip doesn't show stale context.
  2. Fixed tree navigation silently ignoring commands when focus is on wrong pane:
    • profile-tree-next, profile-tree-prev, profile-tree-open now show "Focus left pane first (press 1)" instead of silently returning.
    • Also shows "Sidebar is collapsed. Press Ctrl+B to expand." when sidebar is collapsed.

Regression coverage:

  1. Added test_tui2_textual_open_nonexistent_entry_shows_not_found.
  2. Added test_tui2_textual_tree_nav_feedback_when_wrong_pane.

Validation:

  1. poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py
  2. Result: 60 passed.