Skip to content

ShellGuard v0.0.2.4

Choose a tag to compare

@github-actions github-actions released this 24 Sep 04:29
· 45 commits to main since this release

🦞 ShellGuard β€” Release v0.0.2.4

"The Reef Polish & Unified Ergonomics Molt" β€” Phase 22: Unified Zero-Knowledge Search Engine, Control Surface Consolidation & Ergonomics Verification
ClawStack Studios Β©β„’ Β· 2026-09-23 Β· AGPL-3.0

The reef achieves unprecedented clarity and navigational velocity. ShellGuard v0.0.2.4 (Build 26) delivers a Robust Unified Client-Side Search Engine, prunes redundant global search bars across the header and sidebar, preserves high-speed local pod tree filtering, and re-verifies Eye-beside-Copy unmasking ergonomics across every secret field.

β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•—   β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•—     β–ˆβ–ˆβ•—              β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—   β–ˆβ–ˆβ•—   β–ˆβ–ˆβ•—   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—    β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—     β–ˆβ–ˆβ•—  β–ˆβ–ˆβ•—
β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘              β–ˆβ–ˆβ•”β•β•β•β•   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—  β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—    β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘
β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—   β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘              β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•    β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘
β•šβ•β•β•β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•   β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘              β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—    β•šβ•β•β•β•β–ˆβ–ˆβ•‘
β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—  β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•  β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘         β–ˆβ–ˆβ•‘
β•šβ•β•β•β•β•β•β•β•šβ•β•  β•šβ•β•β•šβ•β•β•β•β•β•β•β•šβ•β•β•β•β•β•β•β•šβ•β•β•β•β•β•β•    β•šβ•β•β•β•β•β•   β•šβ•β•β•β•β•β•   β•šβ•β•  β•šβ•β•  β•šβ•β•   β•šβ•β•         β•šβ•β•
                                              ~ **ClawStack StudiosΒ©β„’** ~

πŸš€ The Core Summary

Welcome to v0.0.2.4 (Build 26) of ShellGuard! This release delivers a streamlined, ergonomic control experience by eliminating UI clutter and powering the vault with a pure zero-knowledge search engine. Vault items are matched instantly in client memory across titles, usernames, primary and secondary URLs, decrypted note contents, custom field names and values, attachment filenames, and tagsβ€”with zero network leakage and automatic memory purge on lock.


πŸ’Ž Key Themes & Highlights

πŸ” 1. Robust Unified Client-Side Search Engine (src/lib/vaultSearch.ts, Task 43)

  • Deep In-Memory Search Corpus: Queries across the pre-decrypted in-memory corpus (vaultItems) without triggering redundant decryption cycles or disk reads.
  • Multi-Field Matching:
    • Item title (e.g., website, service, or server name)
    • Username or identity handle
    • Primary URL and secondary login URIs
    • Pearl notes text
    • Decrypted Secure Note markdown content (secret)
    • Custom Fields: Matches both field names and field values across text, hidden, checkbox, and linked types
    • Binary attachment filenames (file_name)
    • Assigned bioluminescent tags
  • Zero-Knowledge Invariant: Zero network requests. The search query never touches the wire, query parameters (?q=), or server logs. The server cannot search what it cannot decrypt.
  • Lock Purge: When isLocked flips to true or upon logout, the active searchQuery state and in-memory filtered corpus are purged immediately.

🧹 2. Search Surface Consolidation & Clutter Elimination (Task 44)

  • Header Simplification: Removed the top-right search input, search icon, and floating search dropdown from Header.tsx (-64 lines). The header is restored to a clean utility cluster containing only the + Add Menu, Account Switcher, and Theme Toggle.
  • Sidebar Streamlining: Removed the redundant top search bar and duplicate dropdown under "Dashboard" in Sidebar.tsx (-214 lines).
  • Pruned Dead Plumbing: Cleaned up 71 lines of orphaned search state, refs, keyboard shortcuts (/ and ⌘K), and click-outside listeners in src/App.tsx.

🌲 3. Ergonomic Pod-Scoped Search Preserved

  • Dedicated Pod Tree Filtering (SidebarFolderTree.tsx): In accordance with ergonomic feedback, the dedicated "Search Pods..." input above the folder hierarchy was intentionally preserved. Users with extensive multi-tier pod structures can rapidly filter their folder tree without cluttering the global item feed.

πŸ‘οΈ 4. Eye-beside-Copy Ergonomics Re-Verified

  • Masked Field Consistency: Re-verified across all masked rows (passwords, SSH private keys, and hidden custom fields) that the Eye/EyeOff unmask toggle sits strictly immediately to the left of the Copy button in the action cluster.
  • Mask Invariant: Masked fields maintain full β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’ masking without leaking character counts or exposing sensitive text on row hover.

πŸ§ͺ 5. Comprehensive Unit Testing

  • 10 Dedicated Test Cases (tests/unit/vaultSearch.test.ts): Covers empty/whitespace queries, title matches, username matches, multi-URI array parsing, decrypted note content, custom fields, attachment filenames, tags (JSON array and comma-separated), and resilient malformed JSON handling.

πŸ“š 6. Dedicated VitePress Search Documentation Portal

  • Unified Vault & Pod Search Guide (docs/vault-features/search.md): Comprehensive documentation detailing client-side zero-knowledge search mechanics (vaultSearch.ts), deep multi-field matching, in-memory lifecycle with lock purge, and the separation of concerns between Item List Pane search and Scoped Pod Tree filtering (SidebarFolderTree.tsx).
  • Portal Integration: Fully integrated into docs/.vitepress/config.ts, docs/vault-features/index.md, docs/vault-features/the-grotto.md, and docs/reference/design-system.md.

πŸ—οΈ Architectural Topology Map

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 🌐 Client Layer (React 19 + Vite 6)                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚   SidebarFolderTree     β”‚  β”‚          ItemListPane                β”‚  β”‚
β”‚  β”‚ (Pods, Tags, Pod Search)β”‚  β”‚    (Unified Master Search Bar)       β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚              β”‚                                   β”‚                      β”‚
β”‚              β–Ό                                   β–Ό                      β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚                     vaultSearch Engine (RAM)                      β”‚  β”‚
β”‚  β”‚    (Title, User, URIs, Decrypted Notes, Custom Fields, Tags)       β”‚  β”‚
β”‚  β”‚              Zero-Knowledge β€’ Purged on Lock                      β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                      β”‚                                  β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚                      ItemDetailPane                               β”‚  β”‚
β”‚  β”‚     (Eye-beside-Copy Unmask Cluster, Decrypted Inline Content)    β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“¦ Verification Receipts

  • Unit Test Oracle: 27 test suites, 323 passing tests (1 skipped).
  • TypeScript Strict Check: tsc --noEmit passed with 0 errors.
  • Production Build: Built cleanly via Vite in 54.75s.
  • Documentation Portal: Built cleanly via VitePress in 94.89s.
  • Live Server Handshake: Ports :6464 (Web Shell) and :6565 (API Server) verified live and operational.