releasecloudperformanceaccessibility

OmniMon v5.2.0 - CrabNebula Cloud, Rust 1.93 Optimizations & Accessibility

v5.2.0 adds CrabNebula Cloud integration, Rust 1.93 clippy compliance, focus trap accessibility, O(1) process lookups, and 198 tests with 85% coverage.

OmniMon v5.2.0

v5.2.0 consolidates the v5.1.0 features into a production-ready release with cloud integration, Rust 1.93 compliance, accessibility improvements, and performance optimizations. 53 files changed, +4,273 lines across 7 commits.

CrabNebula Cloud Integration

OmniMon now integrates with CrabNebula Cloud for distribution and auto-updates:

  • Cloud tier detection - Free, Premium, or Unknown tier based on API response
  • OS keyring storage - API keys stored securely in macOS Keychain, Windows Credential Manager, or Linux Secret Service
  • Key format validation - rejects empty, oversized (>512 chars), or non-ASCII keys
  • Async validation - authenticated GET to api.crabnebula.dev/v1/account with 10-second timeout
  • Silent fallback - the app works fully without cloud features. No crash, no nag screen
  • 13 tests covering all validation and error paths

Rust 1.93 Compliance

The entire Rust codebase was updated for Rust 1.93 with full cargo fmt and cargo clippy compliance:

  • Fixed all new clippy lints introduced in Rust 1.93
  • Formatted all .rs files to current rustfmt standards
  • Homebrew formula updated with new version and SHA256

Performance Optimizations

  • O(1) blocked process lookup - is_immutable_blocked_process_name() now uses a OnceLock<HashSet> initialized once at startup, replacing O(N) linear scan on every watcher tick
  • Memory leak fix - rules_engine::last_matched HashMap now evicts stale entries after 60 seconds, preventing unbounded growth
  • App icons cache cap - limited to 2,048 entries to prevent unbounded memory allocation
  • #[inline] on hot network::scale_to_per_sec function for better codegen
  • RwLock poison recovery - all .unwrap() on RwLock replaced with graceful recovery functions that handle poisoned locks

Accessibility Improvements

  • Focus trap utility (focusTrap.ts) - proper Tab/Shift+Tab cycling for all modal dialogs
  • SecurityReportView calls focusFirstFocusable() on mount for keyboard navigation
  • Settings modal gets the same focus trap treatment
  • ARIA attributes throughout - aria-controls, aria-label, aria-expanded, role="status" on skeleton loaders

Code Quality

  • 25+ constants extracted from magic numbers in ai.rs (API URLs, keyring services, max tokens, model names)
  • 3 helper functions - add_anthropic_headers(), add_openrouter_headers(), check_response_status() eliminate ~90 lines of duplicate code
  • Store operation failures now logged instead of silently swallowed
  • Full OmniMon branding - all legacy “macmon” references renamed across HTML titles, APPDATA paths, GitHub URLs, install scripts, and AI prompts

Test Coverage

  • 198 total tests: 109 unit + 85 integration + 4 CLI
  • 85% coverage enforcement on macOS and Linux CI
  • New test modules: audit_trail, cloud, process_identity, rate_limit, telemetry
  • Integration tests grew from 120 lines to 1,200 lines (10x increase)

Install

# macOS
brew tap chochy2001/omnimon && brew install --cask omnimon

# Linux
curl -fsSL https://get.omnimon.com.mx | bash

# Windows
winget install chochy2001.omnimon

Full changelog on GitHub