From 5af052499bb7117ed1e9298ef3cfdcd178693fdd Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Mon, 2 Mar 2026 20:59:37 -0500 Subject: [PATCH] feat(tui-v2): tighten board density by removing redundant headers Remove plain-text section labels above card frames since card titles are self-descriptive. Remove compact-mode noise line. Cap note preview at 100 chars. Saves 2-4 lines per board for better viewport fit. Co-Authored-By: Claude Opus 4.6 --- docs/tui_v2_ui_refresh_plan.md | 30 +++++++++++++++++++ memory-update.md | 11 +++++++ src/seedpass/tui_v2/app.py | 17 +---------- src/tests/test_tui_v2_textual_interactions.py | 7 ++--- 4 files changed, 45 insertions(+), 20 deletions(-) diff --git a/docs/tui_v2_ui_refresh_plan.md b/docs/tui_v2_ui_refresh_plan.md index 8a9d92f4..a52bf4d8 100644 --- a/docs/tui_v2_ui_refresh_plan.md +++ b/docs/tui_v2_ui_refresh_plan.md @@ -1198,3 +1198,33 @@ 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`. diff --git a/memory-update.md b/memory-update.md index c2993aa4..1bee2659 100644 --- a/memory-update.md +++ b/memory-update.md @@ -189,3 +189,14 @@ ### Next - Capture fresh state dump/screenshots for updated boards. - Update strict closeout scoreboard (Password/Stored Password/Note now at card parity; remaining Minor Gap items are density/rhythm only). + +## Session Update (2026-03-03, Slice 7) + +### Board density tightening +- Removed redundant section headers above card frames (saves 2-3 lines per board). +- Removed "Compact: Notes/Tags shown inline." noise from compact mode. +- Capped note preview at 100 chars (was 180) to prevent oversized Content cards. +- Password board now 17 lines (was ~21). All boards similarly tighter. + +### Verification +- Focused TUI v2 gate: `58 passed`. diff --git a/src/seedpass/tui_v2/app.py b/src/seedpass/tui_v2/app.py index e1d55a20..d61ded33 100644 --- a/src/seedpass/tui_v2/app.py +++ b/src/seedpass/tui_v2/app.py @@ -1893,7 +1893,6 @@ def launch_tui2( notes_text if len(notes_text) <= 88 else f"{notes_text[:85]}..." ) return [ - "Compact: Notes/Tags shown inline.", f"Tags: {tags_preview}", f"Notes: {notes_preview}", ] @@ -1973,9 +1972,7 @@ def launch_tui2( f"{self._kind_icon(kind)} {board_name}", f"Kind: {kind} | Modified: {modified} | Archived: {archived}", f"Index Num*: {index_num}", - "Login Fields", *self._board_card("Credentials", credential_rows), - "Operations", *self._board_card("Quick Actions", operation_rows), *self._notes_tags_panel_hint( tags_text=tags_text, notes_text=notes_text @@ -1993,7 +1990,7 @@ def launch_tui2( content = str(entry.get("content") or "") preview = content.strip() if preview: - preview = preview.replace("\n", " ")[:180] + preview = preview.replace("\n", " ")[:100] else: preview = "(empty)" entry_id = ( @@ -2019,9 +2016,7 @@ def launch_tui2( f"{self._kind_icon(kind)} Note Board", f"Kind: {kind} | Modified: {modified} | Archived: {archived}", f"Index Num*: {index_num} | File Type: {file_type}", - "Document Fields", *self._board_card("Content", document_rows), - "Operations", *self._board_card("Quick Actions", ["▣ Edit ▣ Export"]), *self._notes_tags_panel_hint( tags_text=tags_text, notes_text=notes_text @@ -2055,9 +2050,7 @@ def launch_tui2( ] lines = header + [ f"{self._kind_icon(kind)} {board_name}", - "Seed Fields", *self._board_card("Seed Info", seed_rows), - "Operations", *self._board_card("Quick Actions", operation_rows), *self._notes_tags_panel_hint( tags_text=tags_text, notes_text=notes_text @@ -2102,9 +2095,7 @@ def launch_tui2( f"{self._kind_icon(kind)} 2FA Board", f"Kind: {kind} | Modified: {modified} | Archived: {archived}", f"Index Num*: {index_num}", - "2FA Fields", *self._board_card("Parameters", field_rows), - "Operations", *self._board_card("Quick Actions", operation_rows), *self._notes_tags_panel_hint( tags_text=tags_text, notes_text=notes_text @@ -2153,9 +2144,7 @@ def launch_tui2( f"{self._kind_icon(kind)} SSH Board", f"Kind: ssh | Modified: {modified} | Archived: {archived}", f"Index Num*: {index_num} | Entry Num: {entry_id}", - "Key Material", *self._board_card("Keys", key_rows), - "Operations", *self._board_card("Quick Actions", operation_rows), *self._notes_tags_panel_hint( tags_text=tags_text, notes_text=notes_text @@ -2199,9 +2188,7 @@ def launch_tui2( f"{self._kind_icon(kind)} PGP Board", f"Kind: pgp | Modified: {modified} | Archived: {archived}", f"Index Num*: {index_num} | Entry Num: {entry_id}", - "Key Material", *self._board_card("Keys", key_rows), - "Operations", *self._board_card("Quick Actions", operation_rows), *self._notes_tags_panel_hint( tags_text=tags_text, notes_text=notes_text @@ -2244,9 +2231,7 @@ def launch_tui2( f"{self._kind_icon(kind)} Nostr Board", f"Kind: nostr | Modified: {modified} | Archived: {archived}", f"Index Num*: {index_num} | Entry Num: {entry_id}", - "Key Material", *self._board_card("Keys", key_rows), - "Operations", *self._board_card("Quick Actions", operation_rows), *self._notes_tags_panel_hint( tags_text=tags_text, notes_text=notes_text diff --git a/src/tests/test_tui_v2_textual_interactions.py b/src/tests/test_tui_v2_textual_interactions.py index 8d8dd370..acffabf4 100644 --- a/src/tests/test_tui_v2_textual_interactions.py +++ b/src/tests/test_tui_v2_textual_interactions.py @@ -1265,7 +1265,6 @@ async def test_tui2_textual_compact_layout_hides_link_panel_and_can_restore() -> assert link_detail.has_class("hidden") assert "Compact" in _widget_text(app, "#action-strip") detail = _widget_text(app, "#entry-detail") - assert "Compact: Notes/Tags shown inline." in detail assert "Tags: alpha, beta" in detail assert "Notes: compact note" in detail @@ -1541,7 +1540,7 @@ async def test_tui2_textual_note_and_totp_boards_include_common_metadata() -> No assert "Note Board" in board assert "Kind: document | Modified:" in board assert "Index Num*:" in board - assert "Document Fields" in board + assert "+- Content " in board assert "+- Content " in board assert "+- Quick Actions " in board @@ -1551,7 +1550,7 @@ async def test_tui2_textual_note_and_totp_boards_include_common_metadata() -> No assert "2FA Board" in board assert "Kind: totp | Modified:" in board assert "Index Num*:" in board - assert "2FA Fields" in board + assert "+- Parameters " in board assert "+- Parameters " in board assert "+- Quick Actions " in board @@ -1578,7 +1577,7 @@ async def test_tui2_textual_password_board_uses_card_sections() -> None: await pilot.pause() board = _widget_text(app, "#entry-detail") assert "Password Board" in board - assert "Login Fields" in board + assert "+- Credentials " in board assert "+- Credentials " in board assert "Password*: hidden (v reveal, g qr)" in board assert "+- Quick Actions " in board