Skip to content

WABS - v1.2.0

Latest

Choose a tag to compare

@wizwin wizwin released this 23 Aug 13:08
· 1 commit to main since this release

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 to 127.0.0.1 by 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 from localStorage & 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) in wabs.log and 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 (spousespouse, parentchild, siblingsibling) 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.
  • 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 to OR, + enforces required matches across all attributes, and - excludes terms.
  • Dynamic Autocomplete & Prefix Suggestions: Real-time suggestion drawer provides autocompletion pills for object:, person:, tag:, and type: 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 into config.yaml, while save_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.db alongside archive.db, ai_metadata.db, and config.yaml. Database Cleanup now purges dead relationship links and vacuums relationships.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 sqlite3 inside _process_unified_scanners in indexer.py that caused cannot access local variable 'sqlite3' runtime exceptions.
  • Frontend Comma Stripping Fix: Removed destructive comma stripping in useExplorer.jsx and App.jsx that interfered with compound search queries (e.g. size:>100MB, <5GB).
  • Search Pagination Reference Error Fix: Fixed an undefined safeQuery variable in loadPrevious in useExplorer.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

  1. Pull the latest code or download the latest release binary.
  2. Launch WABS (python run.py or executable).
  3. Your database and configuration files will automatically self-heal and initialize relationships.db and the new security settings seamlessly.