## Summary
### New Features
- Improved Hatari launch configuration with {cfg} placeholder validation in args template
- Enhanced path traversal protection in overlay directory browser
- Added support for more joystick configurations
- Improved demo setup with folders G-Z
### Fixes
- Fixed hatari config file path handling to use bundled config by default
- Improved favorites service with positional constructor for better initialization
- Fixed Modal display logic for Hatari launches
- Enhanced error handling and validation throughout
- Fixed various typos and code style issues
- Improved menu rendering with better handling of console dimensions
### Documentation
- Updated README with Hatari setup instructions
- Updated AGENTS.md with enhanced release process
### Changes
This release updates the Marcer GameDVD Launcher with the following changes:
#### Bug Fixes
- Fix the placeholder handling when empty - now properly uses the bundled config file
- Add validation for in constructor
- Fix bounds checking on console resize
- Fix key binding documentation in AGENTS.md
#### Features
- Add bundled Hatari configuration file ()
- Make optional with automatic fallback to bundled config
- Update documentation to reflect new optional config behavior
- Add key support (alias for Enter)
#### Documentation
- Update AGENTS.md module overview to include new RightArrow key binding
- Update README.md to clarify optional with bundled fallback
- Create documentation file with known issues and fixes
#### Code Improvements
- Centralize magic strings and constants
- Add helper for console height management
- Make color scheme fully configurable via JSON
- Improve Win32 constants documentation
The launcher now provides a more robust and configurable experience with proper error handling and improved documentation.
Marcer GameDVD Launcher v0.9.3 - Major refactoring with configurable color scheme and centralized code organization
- Refactor: Decompose LauncherApp ~300-line class into separate InputController for key handling and ReloadGameEntries; Lifecycle & Main-loop remain in AppHost
- Centralize hardcoded magic strings/constants: FavoritesRootName, DefaultFileName, DefaultTitle, scroll fractions, AvailableLines helper; remove redundant ArgsTemplate fallback
- Make color scheme configurable via 'Colors' section in launcher.config.json with Enum.TryParse<ConsoleColor> + default fallback
- Update MenuRenderer: remove dead maxRow logic, unify cache sizing via EnsureCache
- Document intentional error swallowing in FavoritesService.Save/UIErrorService
- Update README + AGENTS.md with configurable color docs
- Update launcher.config.example.json with new Colors section
- Update README.md with /create-release command
Release v0.9.2: MIT License + automated release notes
- Add MIT License to project root and license headers across all source files (C#, shell, batch)
- Include LICENSE in publish output via .csproj so it ships in release ZIPs
- Update GitHub Actions to latest versions (checkout v7, setup-dotnet v6, upload/download-artifact v7/v8, action-gh-release v3)
- Release workflow now uses the commit message body as release notes (via /create-release command)
- Add renovate.json for automated dependency updates
- Fix demo.sh setup script
- Update README.md and AGENTS.md with License sections and refreshed module overview
- Add .gitignore entry for Python virtual environments (.venv/)