- Remove CacheCheckResult and simplify Cache::check_cache to return
Option<OrganizationPlan>
- Replace cache_response_with_metadata with cache_response that takes a
base path; update Gemini client and tests to use new API
- Improve load_or_create error handling and early-return when cache file
missing
- Expand README/docs/INSTALLATION.md with detailed per-OS install and
PATH instructions
- Extract mover and undo functionality into dedicated modules (mover/ and undo/ subdirectories)
- Move cross-platform file operations to separate file_ops.rs module for reusability
- Extract batch and categorizer tests into separate test files (batch_test.rs, categorizer_test.rs)
- Refactor orchestrator.rs with extracted helper functions for improved readability
- Separate cache and undo log initialization
- Extract path resolution and offline mode determination logic
- Simplify main organization flow by delegating to helper functions
- Update module exports to expose new types and functions (MoveError, MoveSummary, UndoError, UndoSummary)
- Reduce code duplication of move_file_cross_platform implementation
- PromptBuilder::new now takes &[String] instead of Vec<String>
- GeminiClient::new now takes &str, &[String] instead of owned values
- FileBatch::from_path now takes &Path instead of PathBuf
- categorize_files_offline now takes Vec<String> (ownership) instead of &[String]
- handle_offline_organization now takes FileBatch by value
These changes eliminate ~5-50 KB of unnecessary allocations for typical
file counts, reduce allocator pressure, and improve API clarity by properly
expressing ownership semantics.
No functional changes - all tests pass.
- Extract error handling, path validation, and handlers into separate modules
- Add CacheCheckResult to pre-fetch metadata and avoid double lookups
- Deprecate legacy cache methods in favor of optimized alternatives
- Enable tokio fs feature for async file operations
- Remove debug profile from release build
- Add --offline flag to force offline mode
- Automatic detection when Gemini API is unavailable
- Prompt user to continue with offline mode on API failure
- Extension-based categorization for 80+ file extensions
- Add Video category to default categories
- Skip files with unknown extensions in offline mode
- Switch from sha2 crate to blake3 for faster hashing (4-7x speedup)
- Use Blake3's built-in to_hex() instead of separate hex crate
- Remove hex and sha2 dependencies
- Eliminates 40% CPU bottleneck in generate_cache_key()
- Add PATH argument to command-line options tables
- Add Custom Path Organization section with examples
- Update basic usage examples to include path usage
- Add combined options examples with custom paths
- Add Custom Path Support section to README
- Document path validation, normalization, and use cases
Documentation now fully covers the new custom path functionality
with clear examples and explanations.
Split the 630-line README.md into focused, well-organized documentation:
- README.md: Concise overview with quick start and links
- docs/INSTALLATION.md: Installation instructions and setup
- docs/CONFIGURATION.md: Configuration options and custom categories
- docs/USAGE.md: Command-line options and usage examples
- docs/HOW_IT_WORKS.md: Architecture and internal processes
- docs/TROUBLESHOOTING.md: Common issues and solutions
- docs/DEVELOPMENT.md: Project structure and development guide
- docs/CONTRIBUTING.md: Contribution guidelines and standards
Benefits:
- Main README is now clean and welcoming (~150 lines vs 630)
- Each doc has a clear, focused purpose
- Better navigation with cross-linking between docs
- Follows GitHub best practices with docs/ directory
- Easier to maintain and update specific sections
- Add support for user-defined custom categories in config.toml
- Update Config struct with categories field and default_categories() function
- Thread categories through GeminiClient and prompt builder
- Update AI prompts to use dynamic categories instead of hardcoded ones
- Add comprehensive documentation with examples for different use cases
- Update tests to support new categories field
- Maintain backward compatibility with default categories
- Update version from 1.0.3 to 1.0.4
Closes feature request for custom categories.
- Fix critical HOME variable bug that crashed on Windows
* Replace hardcoded HOME env var with Config::get_data_dir()
* Now uses cross-platform directories crate
* Resolves to %APPDATA% on Windows, ~/.config on Linux/macOS
- Fix Unix-style path separators in display output
* Use std::path::MAIN_SEPARATOR for OS-appropriate paths
* Windows now shows backslashes, Unix shows forward slashes
- Implement batching for large file lists (100+ files)
* Split file processing into batches of 50 files
* Prevents network timeouts and API payload size issues
* Added progress feedback for batch processing
* Increased timeout from 30s to 120s per batch
- Bump version to 1.0.3
All tests passing, clippy clean, fully cross-platform compatible
Extract code into focused modules for better maintainability:
New modules:
- gemini_types.rs (32 lines) - Response type definitions
- gemini_helpers.rs (51 lines) - Prompt builder and conversion helpers
- prompt.rs (130 lines) - User input and validation logic
Refactored files:
- gemini.rs: 278 -> 259 lines (-19 lines)
* Extract response parsing into helper methods
* Extract request building into separate methods
* Extract retry logic into dedicated functions
* Use PromptBuilder for cleaner prompt construction
- config.rs: 275 -> 127 lines (-148 lines)
* Extract all prompting logic to prompt.rs module
* Simplify with Default trait for Config
* Cleaner API methods
Benefits:
- Better separation of concerns
- Easier to test and maintain
- Clearer module boundaries
- Reduced nesting and complexity
- All 31 tests still passing
- Add CLI argument parsing with clap (dry-run, max-concurrent options)
- Replace .env configuration with interactive prompts and TOML config
- Add BaseDirs-based configuration storage in ~/.config/noentropy/
- Improve Gemini API client with configurable model and timeout
- Add concurrent processing with semaphore for rate limiting
- Improve error handling with retry logic and exponential backoff
- Add comprehensive README with installation and usage instructions
- Add config.example.toml template for users
- Update main.rs with better UX and colored output
- Add lib.rs exports for config module
- Refactor error response parsing for cleaner code
- Update API endpoint to use configurable model parameter
- Add proper error type handling in gemini_errors.rs
- Add 31 tests across files, config, and cache modules
- Test file operations (FileBatch, is_text_file, read_file_sample)
- Test configuration (serialization, API key validation, path expansion)
- Test caching (response retrieval, file change detection, eviction)
- Add tempfile dev dependency for test fixtures
- All tests passing with 100% success rate