Getting all the fit and finish to work.
This is a 3.0.1 release because of the hard work that @colin0brass has done to improve the quaility of all the code and bring it to a properly level of Python model code. In this point release most of the work is around the GUI.
- Handling of color within all aspects of the GUI
- Improvements in Dark/Light mode
- GUI issues relate to rendering fonts of different sizes
What's Changed
- Release v.0.3.0.0 by @D-Jeffrey in #72
- V0.3.0.1 by @D-Jeffrey in #73
Full Changelog: v0.2.8.0...v0.3.0.1
In the 3.0 ... a MAJOR amount of work was completed.
- Total code based refactored the gui, render, models, services
- Added readme to explain the architecture throughtout refactoring
- Background Worker Robustness: Enhanced background processing thread with comprehensive error handling, automatic recovery from failures, and proper state reset. Worker thread now always returns to ready state even when exceptions occur, preventing stuck UI states
- Memory Monitoring Improvements: Memory tracking now shows only NEW allocations since app start using baseline snapshots, providing accurate memory usage analysis. Tracemalloc baseline comparison eliminates misleading cumulative statistics
- File Opening Infrastructure: Fixed KML files opening in correct system default handlers (Google Earth) instead of text editors. All result types (HTML, KML, KML2, SUM) now open in appropriate applications based on platform-specific defaults
- Pedigree Collapse Instrumentation: Added comprehensive tracking for pedigree collapse scenarios where same ancestors appear via multiple paths. Logs unique people vs total Line objects, helping users understand extreme line counts in royal genealogy datasets
- Logging System Refinement: Reorganized logging levels with verbose internal state tracking moved to DEBUG level. Production logs now show only user-relevant information at INFO level, reducing log noise while maintaining full debug capability
- Large Dataset Warnings: Enhanced AllEntities checkbox with two-tier warning system: critical errors for >10K people (prevents crashes) and standard warnings for 200-10K people. Explains memory implications and processing time
- Progress Reporting Enhancements: Added detailed progress logging during KML generation phases and all createothers() operations, reporting every 1000 people to keep users informed during long operations
- Memory Optimizations: Significant performance improvements in genealogical trace generation (creator.py) including event caching and optimized list operations, reducing memory allocations by 205k+ operations and improving performance for large family trees. Fixed double-traversal bug that was creating duplicate Line objects
- Configuration GUI Enhancements: Configuration Options dialog now includes controls for earliest_credible_birth_year (Statistics section) and EnableTracemalloc (Performance section) for detailed memory tracking during development
- Portable Pre-commit Setup: Pre-commit hooks now use .pre-commit-pytest.sh wrapper script that automatically finds Python with pytest installed, making setup portable across different development environments without hardcoded paths
- Statistics Enhancements: Added total_generations field to statistics YAML output (calculated as generation span + 1) for comprehensive genealogy metrics
- Automated Testing Infrastructure: Added GitHub Actions CI/CD, pre-commit hooks, and Makefile commands for automated testing across multiple OS platforms (Ubuntu, Windows, macOS) and Python versions (3.10-3.13). See docs/automated-testing.md
- GUI Service Integration Tests: Added test coverage for GUI-service layer attribute consistency to prevent AttributeError bugs
- Dark Mode GUI Fixes: Fixed grid background colors to refresh reliably when switching between light and dark modes. Fixed Configuration Options dialog contrast issues in dark mode
- Statistics Summary Bug Fix: Fixed AttributeError in Actions → Statistics Summary menu (incorrect attribute name selected_people vs selectedpeople)
- Statistics Configuration: Added configurable earliest_credible_birth_year threshold (default: 1000) in gedcom_options.yaml to filter implausible birth dates from statistics reports. Prevents data entry errors like year "1" from appearing in Executive Summary metrics
- Dark Mode Support: Comprehensive dark mode for HTML statistics reports and wxPython GUI with automatic system appearance detection on macOS. GUI colors use standard X11 color names for better readability and maintainability
- Cross-Platform Testing: Fixed UTF-8 encoding issues in statistics tests to ensure compatibility with Windows (cp1252), macOS, and Linux. All file operations now explicitly specify encoding='utf-8'
- Geocoding UI Improvement: Configuration dialog now uses mutually exclusive radio buttons for geocoding mode (Normal/Geocode only/Cache only) instead of checkboxes, preventing confusing combinations
- Windows Compatibility: Fixed Windows-specific crash during family record processing where accessing partner records could fail with "'NoneType' object has no attribute 'xref_id'" error
- Cache-Only Mode Fixes:
- Cache-only mode no longer retries previously failed geocode lookups, ensuring true read-only behavior
- geo_cache.csv file is not saved in cache-only mode, preventing timestamp updates
- Progress Reporting Infrastructure: Comprehensive progress tracking across all major operations with stop request support
- GEDCOM parsing displays accurate progress metrics (counter, target, ETA) in the GUI
- Statistics pipeline reports progress for all 14 collectors with "Statistics (X/Y): operation" format
- Enrichment pipeline shows progress for all 3 rules with "Enrichment (X/Y): operation" format
- Geocoding operations include progress for cache separation and location processing
- Progress reports every 100 records for optimal UI responsiveness
- Stop button properly interrupts long-running operations at all stages
- Configuration System: Refactored configuration handling with separated concerns - dedicated loader classes for YAML, INI, and logging configuration for better structure, reliability, and testability
- Dependency Injection: Updated GVConfig to support dependency injection pattern, making testing and maintenance easier
- Test Coverage: Added 26 new unit tests for configuration loaders, improving test isolation and coverage
- Logging Improvements: Log file now always writes to application root directory (not dependent on working directory)
- Photo Path Handling: Fixed cross-platform image display in HTML maps (Windows paths with backslashes now work correctly)
- Progress Messaging: Added early progress messages during HTML generation for better user feedback
- Loop Detection: Updated genealogical line creators to support pedigree collapse (same person in multiple branches)
- Logging System: Simplified logging configuration with 12 core loggers, WARNING default level, and Clear Log File option
- Configuration Dialog: Added "Set All Levels" control and improved logging grid display
- ResultType Refactoring: Moved ResultType enum to dedicated render/result_type.py module for better organization
- HTML Generation: Fixed issue where HTML output files weren't being saved during batch processing
- Output File Paths: Corrected file path construction for all output types (HTML, KML, KML2, SUM)
- Image Handling: Fixed cross-platform image loading to handle Windows paths in GEDCOM files
- Architecture: Removed legacy gedcom_options.py dependency; all code now uses services-based architecture