🔧 Critical Bug Fixes
MQTT Messages Missing Occurrence Values (#1229)
- Problem: MQTT messages weren't including occurrence probability values due to invalid JSON tag and missing calculation
- Root Cause: Invalid
omitzero
JSON tag and processor not calculating occurrence values during detection creation - Solution: Fixed JSON tag to
omitempty
and addedGetSpeciesOccurrenceAtTime
method with on-demand calculation - Impact: MQTT messages now properly include time-aware species occurrence probabilities (0.0-1.0) for better rarity-based alerting
- Test Evidence: Comprehensive tests confirm occurrence values appear correctly in MQTT payloads
RTSP URL Parsing Regression Fix (#1222)
- Problem: Fixed critical regression introduced in #1161 where RTSP URLs with complex passwords containing special characters (like colons) would fail validation despite working perfectly with FFmpeg
- Root Cause: Audio Source Registry refactor introduced strict Go
url.Parse()
validation that broke existing working configurations - Solution: Replaced strict URL parsing with basic string validation that maintains security while preserving compatibility
- Impact: Existing RTSP configurations with complex passwords now work again without requiring password changes
- Affected Users: Anyone using RTSP streams with passwords containing special characters like
:
,(
,)
,=
, etc.
Database Search Query Fix (#1226)
- Problem: Search functionality failed with "no such column: notes.source_safe" error on new installations
- Root Cause: Search query was trying to SELECT a non-existent database column that was never stored due to
gorm:"-"
tag - Solution: Removed non-existent
notes.source_safe
from SELECT query and cleaned up unused fields - Impact: Search functionality now works correctly on fresh installations without database errors
Frontend Timezone Bug Resolution (#1219) 🌟 Collaborative effort with @farski
- Problem: Widespread timezone-related date parsing bugs causing YYYY-MM-DD date strings to shift to different days due to UTC conversion issues
- Root Cause: Direct use of
new Date(dateString)
with YYYY-MM-DD format strings, which JavaScript interprets as midnight UTC, causing timezone boundary problems - Key Insight: Issue correctly identified by @farski who explained JavaScript's YYYY-MM-DD parsing behavior
- Solution: Updated all date formatting functions to use
parseLocalDateString()
which parses dates at noon local time - Comprehensive Coverage: Fixed 14 files across components, analytics pages, dashboard, and utilities with 112+ tests
- Impact: Consistent date behavior across all timezones - no more date shifting in analytics, date pickers, CSV exports, or charts
🚀 Major Features & Performance Improvements
Version-Based Cache Busting for Svelte Assets (#1225)
- Smart Cache Management: Implements ETag headers using
version-buildDate
format for automatic browser cache invalidation - Deployment Optimization: Ensures users get fresh assets immediately on new deployments while maintaining efficient caching
- Technical Approach: Uses version-based ETags instead of file hashing to maintain compatibility with embedded Go filesystem
- Cache Policy: 1-hour cache with
must-revalidate
+ ETag validation for optimal performance - Impact: Eliminates stale asset issues while maintaining fast load times and reducing server bandwidth
Comprehensive Version Management & Rollback System in Install Script (#1224)
- Advanced Logging Infrastructure: Timestamped log files (
install-YYYYMMDD-HHMMSS.log
) with comprehensive system state tracking - Complete Version History: Captures Docker image hashes and config backups before every upgrade with SHA256 integrity checking
- Interactive Rollback System: Full revert functionality accessible from all installation menus with optional config restoration
- Privacy-Safe Logging: Detailed system monitoring while excluding sensitive information (coordinates, passwords, RTSP credentials)
- Security Enhancements: Uses
mktemp
for secure temp files, restrictive permissions, and proper cleanup traps - System Monitoring: Comprehensive tracking of disk space, memory, Docker states, network connectivity, and service status
- Impact: Safe upgrades with confidence - full rollback capability and detailed troubleshooting information
🚀 Installation & Deployment Improvements
Enhanced Location & Timezone Detection in Install Script
- Improved IP Geolocation: Enhanced
get_ip_location
function now includes timezone information when using ipapi.co fallback service - Smart Timezone Configuration: Prioritizes location-based timezone detection with better user context during confirmation prompts
- Input Validation: Enhanced user input handling with normalization and validation against available system timezones
- User Experience: Location configuration now displays detected timezone information for better user awareness
- Port Validation: Refactored port configuration logic to validate all required ports upfront, preventing installation failures
- Impact: Significantly smoother installation process with more accurate location/timezone detection and fewer configuration errors
🎯 Developer Notes
This release focused on critical bug fixes affecting core functionality (MQTT messages, RTSP parsing, search queries, timezone handling) and major infrastructure improvements for deployment reliability. The timezone fixes represent a collaborative community effort with significant testing coverage.
Full Changelog: nightly-20250825...nightly-20250826