Full Changelog: v1.1.0...v1.2.0
WABS v1.2.0 Release Notes
I am thrilled to announce the release of WABS v1.2.0! This major update brings a Multi-Layer Defense-in-Depth Security Architecture, an expansive Social Taxonomy & Inter-Person Relationship Graph with GEDCOM/PDF Genealogy Exports, a complete Search Engine & Query Builder overhaul, and seamless Self-Healing Configuration & Sidecar Database Management.
🌟 Highlights & Key Features
🛡️ 1. Multi-Layer Defense-in-Depth Security Architecture
- Localhost Network Isolation by Default (
127.0.0.1): The backend now binds strictly to127.0.0.1by default, blocking unauthorized LAN/Wi-Fi devices from accessing your local archive. An explicit toggle in Settings (Allow LAN Access) enables remote phone/tablet access only when explicitly requested. - CORS Lockdown & Regex Origin Filtering: Removed wildcard CORS origins (
*), enforcing strict localhost regex filtering (^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$) to prevent background web tab data exfiltration. - Master PIN Authentication (4–12 Digits): Numerical PIN protection hashed via
PBKDF2-HMAC-SHA256(100,000 iterations + 16-byte random salt). Non-numeric input is sanitized automatically across both frontend and backend. - Cryptographically Secure Session Tokens & Strict Lock Revocation: Issues 32-byte URL-safe session tokens (
X-Session-Token). Locking the application immediately revokes the session on the backend and wipes tokens fromlocalStorage&sessionStorage. - Protected Background Task Execution: Background workers (file indexing, face recognition, object classification, OCR) continue safely in the background on the local machine when the UI is locked, while unauthorized network/device access remains blocked until unlocked.
- Anti-Brute Force Rate Limiting: Enforces a 5-minute cooldown lockout after 5 consecutive failed PIN attempts with a real-time countdown timer.
- Responsive Lock Screen Overlay (
LockScreen.jsx): Modal PIN overlay featuring an on-screen touch numpad, lockout timer countdown, setup wizard, and instant unlock. - Inactivity Auto-Lock & One-Click Topbar Lock: Automatically locks the session after configurable inactivity (5m, 15m, 30m, 1h, Never) or instantly with the new lock icon in the Topbar.
- Dedicated "Security & Privacy" Settings Tab: Centralized panel to configure/change Master PIN, toggle LAN access, set auto-lock timers, toggle AI PII redaction, and manage cache purges.
- AI Privacy & PII Redaction: Automated regex filter that masks sensitive personal identifiers (phone numbers, emails, IP addresses) before prompts or file metadata are sent to external AI providers.
- Thumbnail Cache Management & DAR Guidance: Options to clear thumbnail caches on demand or auto-purge on exit. Integrated Data at Rest (DAR) notices clarifying database encryption recommendations (BitLocker / LUKS / FileVault).
- Security Audit Logging & Test Suite: Full audit logging (
wabs.security/wabs.auth) inwabs.logand a dedicated test suite (tests/test_security.py) verifying PBKDF2 hashing, session revocation, rate limiting, and PII masking.
👥 2. Social Taxonomy, Inter-Person Graph & Genealogy Exports
- Dedicated Sidecar Database (
relationships.db): Isolates user-curated social classifications and family connections from core file indexing (archive.db) and disposable AI face clusters (ai_metadata.db). - Inter-Person Relationships Graph (
person_connections): Connect spouses, partners, parents, children, and siblings directly from any profile. Reciprocal connections (spouse↔spouse,parent↔child,sibling↔sibling) are synchronized automatically. - GEDCOM 5.5.1 Genealogy Export: Full export compatibility with standard genealogy software (Gramps, Ancestry, FamilySearch). Export the entire tree or family subtrees with individual records (
INDI), family units (FAM), gender inference, and WABS lineage metadata. - PDF & Printable Tree View: Instant vector PDF export and print formatting for the full relationship graph or isolated family sub-branches.
- Rescan & Wipe Protection (Stable Person Registry): Relationship links and social structures remain 100% intact even if AI face metadata is wiped or re-indexed, auto-relinking when profiles are rescanned.
- "Who Am I?" Identity & Badging: Set your own profile (
me_name) in Settings ➔ General to anchor relative kinship branches (Spouse, Parents, Children, Siblings, Grandparents, Cousins, In-laws). Viewing your own card features a distinct blue border and dedicated "Me" badge. - Interactive Multi-Column Tree View (
RelationshipTree.jsx): Multi-column responsive card hierarchy displaying Family, Friends, and Others side-by-side with avatar thumbnails, photo counters, branch badges, subtree exports, instant search, and expand/collapse toggles. - Dedicated Tabbed Navigation for People:
- People Tab (Default): Complete profile grid with Category Filters (
All,Family,Friends,Others,Uncategorized), sorting, and face clustering tools. - Tree View Tab: Dedicated view for the full Multi-Column Relationship Tree.
- People Tab (Default): Complete profile grid with Category Filters (
- Person Gallery Photo Cache & Scroll Retention: Seamless memory caching (
personGalleryCache) and scroll restoration (savePersonScroll) so navigating back and forth between People and photo galleries preserves loaded pages and exact scroll positions. - Explicit Relationship Confirmation: Inline editor in Person view with buffered changes and explicit Save (✓) and Cancel (✕) buttons (with Enter and Escape shortcuts) to prevent accidental database edits.
- Extended Kinship Support: Built-in "In-law" classification (
Father-in-law,Mother-in-law,Brother-in-law,Sister-in-law) integrated directly into the hierarchy tree.
🔍 3. Comprehensive Search Engine & Query Builder Overhaul
The search engine (search.py) has been refactored with a robust tokenization parser supporting advanced search patterns:
- Compound Size & Range Filters: Supports compound comparisons (
size:>100MB, <5GB,size:>100MB <5GB), ranges (size:100MB-5GB), comparisons (size:>100MB,size:<=2GB), and standard/shorthand units (B,KB,MB,GB,TB,PB,k,m,g,t,p). - Duration & Media Length Filters: Filter audio/video by ranges (
length:5m-1h), compound comparisons (length:>5m, <1h), timestamps (length:>01:30,length:>01:30:00), and abbreviations (s,m,h). - Advanced Date & Year Range Filters: Multi-date lists (
date:2020-2022, 2023-10-25), year ranges (2020-2022), comparisons (>2020,<=2023-01-01), exact dates (YYYY-MM-DD,MM-DD-YYYY,DD-MM-YYYY), and specific years/months (2023,2023-10). - Category & Extension Filters (
type:): Filter by category (type:photo,type:video,type:audio,type:document), multi-type lists (type:audio,video), or exact file extensions (type:mp3,type:pdf). - Case-Insensitive Tag, Object & Person Matching: Normalized searches for namespaced (
person:John Doe,object:car), plain (car), quoted (person:"john doe"), or partial (person:john) queries. - Wildcards & Boolean Search Semantics: Full wildcard matching with
*and?(*.mp3,*vacation*). Terms default toOR,+enforces required matches across all attributes, and-excludes terms. - Dynamic Autocomplete & Prefix Suggestions: Real-time suggestion drawer provides autocompletion pills for
object:,person:,tag:, andtype:prefixes along with keyword autocompletion and did-you-mean spell checks. - Instant Search on Enter: Pressing Enter in the search bar executes immediately, bypassing debounce timers.
💾 4. Data Management & Configuration Upgrades
- Self-Healing Configuration Schema:
load_config()automatically backfills missing configuration keys on startup intoconfig.yaml, whilesave_config()safely merges partial frontend updates without dropping untouched fields. - Data Management Exports: Added standalone Export / Import JSON for Relationships & People Categories in Settings, as well as GEDCOM (.ged) and PDF exports directly from the Relationship Tree.
- Unified Backup & Cleanup: Combined backups and Full Database Backups now include
relationships.dbalongsidearchive.db,ai_metadata.db, andconfig.yaml. Database Cleanup now purges dead relationship links and vacuumsrelationships.db.
🐞 Bug Fixes & Refinements
- Tree Subgroup Collision Fix: Resolved a UI crash (
TypeError: familySubgroups.children.push is not a function) when assigning kinship to Children/Sons by renaming internal subgroup keys to avoid property collisions. - Sidecar Database Directory Auto-Creation: Fixed startup failure (
unable to open database file) when starting WABS with clean or custom database folders by ensuring directories exist prior to database initialization. - Python Inner Import Shadowing Fix: Removed shadowing
import sqlite3inside_process_unified_scannersinindexer.pythat causedcannot access local variable 'sqlite3'runtime exceptions. - Frontend Comma Stripping Fix: Removed destructive comma stripping in
useExplorer.jsxandApp.jsxthat interfered with compound search queries (e.g.size:>100MB, <5GB). - Search Pagination Reference Error Fix: Fixed an undefined
safeQueryvariable inloadPreviousinuseExplorer.jsx, restoring smooth reverse-scrolling on search result views. - Automated Search Pattern Test Suite: Integrated a 22-test automated suite (
tests/test_search_patterns.py) into the master test runner (run_all_tests.py).
📦 Upgrading to v1.2.0
- Pull the latest code or download the latest release binary.
- Launch WABS (
python run.pyor executable). - Your database and configuration files will automatically self-heal and initialize
relationships.dband the new security settings seamlessly.