Prepare v0.2.0 Release Candidate 1 - #1
Merged
Merged
Conversation
- move Tkinter application logic into MainWindow - separate organizer and flattener business services - add centralized application settings - add resource path handling for future packaging - centralize reusable application dialogs - use thread-safe queue for worker-to-UI communication - prevent conflicting file operations - improve system tray and shutdown handling
- add toolbar for common file operations - add selected root and operation target display - add folder browser and activity log panels - add status bar and operation progress indicator - improve action enable/disable states - add explicit minimize-to-tray behavior - make window close exit the application normally - improve activity logging and empty states - refine pane layout and desktop styling
- extract activity log into a reusable component - extract folder summary into a dedicated component - extract status bar and progress handling - extract main toolbar and button state handling - extract folder browser and tree management - simplify MainWindow UI responsibilities - preserve existing organize and flatten behavior
- extract application menu bar and menu state handling - extract system tray management - simplify MainWindow tray coordination - preserve thread-safe tray restore and exit behavior - clean up MainWindow shell responsibilities
- move organizer and flattener worker threads out of MainWindow - centralize active operation state and lifecycle handling - centralize flatten cancellation with threading.Event - isolate worker-to-UI queue dispatch - add clean controller shutdown handling - prevent concurrent file operations - preserve thread-safe Tkinter callbacks - add comprehensive operation controller tests
- move ttk style configuration into dedicated UI module - extract application header into reusable component - simplify MainWindow presentation setup - preserve existing application appearance and behavior
- move organizer result formatting out of MainWindow - move flattener result formatting out of MainWindow - add immutable OperationPresentation model for log and status messages - centralize operation success, failure, and cancellation messaging - add reusable pluralization for operation summaries - keep Tkinter widget updates and dialogs in MainWindow - add tests for organizer and flattener presentations - simplify MainWindow operation result handling
- load only immediate directories when a root folder is selected - populate child directories on demand when folders are expanded - use placeholder nodes to expose expandable folders without recursive scans - prevent duplicate directory loading - preserve nested folder selections across refreshes - restore selections without loading unrelated directory branches - safely fall back to the root when a selected folder disappears - preserve folder selection and open callbacks - add comprehensive lazy-loading folder browser tests
- add organizer-to-flattener workflow integration tests - verify duplicate filenames survive round-trip operations - verify extensionless files survive organize and flatten workflows - verify repeated organize and flatten operations remain safe
- document the new date-and-type organization structure - explain nested file centralization and duplicate protection - document flatten behavior and its limitations - explain lazy-loaded folder browsing and operation targets - document file safety and repeated-operation behavior - update the project architecture and testing sections - clarify Windows-focused platform support - update packaging status and the v0.2.0 roadmap
- add PyInstaller as a development dependency - add reproducible Windows onedir build specification - bundle application image resources with packaged builds - configure the Windows application icon - build the application without a console window - exclude generated build and distribution directories from Git - verify folder browsing, file operations, and system tray behavior in the packaged application
- add Windows version information for packaged builds - set v0.2.0 product and file versions - add product name and file description metadata - add copyright and original filename information - configure PyInstaller to embed version resources - verify metadata in the packaged Windows executable
- add PowerShell release build automation - validate application version consistency before packaging - compile, check source before release builds - run the complete automated test suite - clean previous PyInstaller build output - build the Windows application from the committed spec - validate packaged executable version metadata - create versioned Windows x64 release archives - generate SHA-256 checksums for release artifacts - exclude generated release artifacts from Git
- set the application version to 0.2.0rc1 - assign Windows build version 0.2.0.1 - distinguish package and release version formats - generate human-readable RC artifact filenames - preserve PEP 440-compatible Python versioning - prepare Windows release artifacts for RC1 validation
- run compile and test validation on supported Python versions - test the application on Python 3.12 and 3.13 - add automated Windows x64 release builds - reuse the committed Windows release build script in CI - validate packaged executable metadata during builds - generate versioned Windows release archives and checksums - upload Windows build artifacts for validation - add workflow concurrency and least-privilege permissions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This pull request prepares Documents Organizer v0.2.0 Release Candidate 1.
v0.2.0 is a major update that redesigns the application's file organization behavior, improves filesystem safety, refactors the application architecture, introduces lazy-loaded folder browsing, expands automated testing, and adds a repeatable Windows release build pipeline.
The release candidate is versioned as:
0.2.0rc10.2.0-rc10.2.0.1Highlights
New Organization Structure
Files are now organized using a date-first structure:
The date is based on the file's modified date.
Files without extensions are placed in
other.Nested File Centralization
Files found in nested directories are centralized into the selected operation target's date/type hierarchy.
Original source directories are intentionally preserved, even when they become empty.
Safer Duplicate Handling
Existing destination files are not intentionally overwritten.
Duplicate filenames are preserved using numbered suffixes:
Collision protection is used by both Organize and Flatten operations.
Safer Flattening
Flatten now operates only on recognized organizer-generated date/type structures.
It:
Flatten reverses the organizer-generated structure, but it is not a full undo system and does not restore files to their original nested source directories.
User Interface
The main application interface has been substantially reorganized and refactored.
Changes include:
Lazy-Loaded Folder Browser
The Folder Browser now loads directory contents on demand.
Selecting a root folder loads only its immediate directories. Nested folders are discovered when expanded instead of recursively scanning the entire directory tree during initial load.
Nested selections are also restored during refresh without loading unrelated branches.
Architecture
The original large
MainWindowimplementation has been broken into focused application layers.Services
Filesystem operations are isolated in:
including:
Controllers
Background operation management is isolated in:
The controller manages:
Presenters
Operation result formatting is isolated in:
This keeps user-facing message generation separate from Tkinter rendering.
UI Components
Reusable UI components now include:
ActivityLogFolderBrowserFolderSummaryHeaderMenuBarStatusBarToolbarSystem tray behavior and application styling have also been moved out of
MainWindow.Testing
The automated test suite has been expanded significantly.
Coverage includes:
Filesystem tests use temporary directories rather than real user files.
Windows Packaging
v0.2.0 adds reproducible Windows packaging using PyInstaller.
Release preparation now includes:
The release build script validates version consistency between:
It also validates the metadata embedded in the finished executable.
Continuous Integration
GitHub Actions workflows have been added for:
Tests
Windows Build
Documentation
The README has been rewritten for v0.2.0 and now documents:
Old screenshots representing the previous application interface have been removed from the active documentation until updated v0.2.0 screenshots are captured.
Release Candidate Validation
Local validation completed:
GitHub validation:
Notes
This PR prepares the first release candidate rather than the final v0.2.0 release.
After this PR passes CI and the GitHub-generated Windows artifact is validated, the branch can be merged into
mainand tagged as:Any issues discovered during release-candidate testing will be addressed before the final
v0.2.0release.