Repository navigation
Release v2.3.0-alpha
Pre-release
Pre-release
·
214 commits
to main
since this release
Added
- Created
ProgressReporterprotocol for UI decoupling from core modules - Introduced
ServiceContainerfor dependency injection and service lifecycle management - Implemented domain-specific exception hierarchy with
MyUnicornErrorbase class:VerificationErrorwithHashMismatchError,HashUnavailableError,HashComputationErrorWorkflowErrorwithInstallError,UpdateError,PostProcessingErrorNetworkErrorwithDownloadError,GitHubAPIError- Added
is_retryableandretry_afterattributes for retry logic
- Added async file I/O support using
aiofileslibrary for non-blocking downloads - Added
NullProgressReporterimplementing null object pattern for optional progress tracking - Added comprehensive Raises sections to all public method docstrings in workflow modules for better error documentation
- Added async safety documentation to class docstrings explaining thread safety and concurrent access patterns
- Enhanced in-memory caching documentation with performance metrics and thread safety notes
- Extended
app_state_v2.schema.jsonwith new verification fields for enhanced state tracking:overall_passed: Boolean indicating if any verification method succeededactual_method: Enum (digest|checksum_file|skip) indicating which method was usedwarning: Optional warning message for unverified installationsmethods[].digest: Alternative single hash field (replaces separate computed/expected)
- Extended
cache_release.schema.jsonwithchecksum_files[]array for caching downloaded checksum files:- Stores source URL, filename, algorithm, and hash mappings
- Enables verification reuse without re-downloading checksum files
- Added
get_checksum_files(),has_checksum_files(), andget_checksum_file_for_asset()methods toCacheManager - Test support for bulk updates and stronger CLI coverage
- Added
test_update_all_cmdand a--update-alltest flag inscripts/test.pyto validate "update all" workflows.
- Added
- Significant test coverage increases and reorganization
- Dozens of focused unit tests added across progress, verification, update and utils (representative files:
tests/core/progress/test_ascii_format.py,test_ascii_sections.py,test_ascii_output.py,test_display_id.py). - Tests reorganized for clearer scopes and faster discovery (see
tests/cli/,tests/core/,tests/config/,tests/utils/). - Added 100+ tests covering schema validation, cache operations, and verification workflows
- Dozens of focused unit tests added across progress, verification, update and utils (representative files:
Changed
- setup.sh script renamed to install.sh and updated installation commands:
- Production install command updated:
- Use
./install.sh -ior./install.sh --installto perform a standard installation.
- Use
- Development install command updated:
- Use
./install.sh -eor./install.sh --editableto install in editable mode.
- Use
- Production install command updated:
- Refactored core architecture to use dependency injection via
ServiceContainer - Replaced UI dependencies in core modules with protocol-based abstractions (
ProgressReporter) - Refactored
DownloadServiceandVerificationServiceto useProgressReporterprotocol - Replaced generic exceptions with domain-specific error types across all workflow modules
- Added retry logic for transient network errors using
is_retryableexception attribute - Moved blocking I/O operations to executor threads for non-blocking async execution
- Improved docstring quality across install.py and update.py workflow modules
- Standardized exception documentation with detailed error conditions and scenarios
- Implemented async file I/O for improved download performance with
aiofiles - Reduced event loop blocking during downloads and verification operations
- Moved hash computation to executor threads for large files (>100MB threshold)
- Improved progress reporting smoothness with non-blocking updates
VerificationServicenow passes checksum file data toCacheManagerfor persistence- Update workflow recalculates verification state with fresh hashes instead of preserving stale data
- Enhanced
StateVerificationandVerificationMethodTypedDicts with comprehensive docstrings - Large internal refactors to improve modularity and maintainability
- Verification: replaced the monolithic checksum parser with a
checksum_parser/package (specialized parsers + detector/normalizer) and split the verification service into focused modules (detection, helpers, execution, verification methods).- Result:
service.pyshrank from ~1322 → 437 lines; multiple mypy issues fixed.
- Result:
- Update & logging subsystems decomposed into smaller modules:
update.pysplit intocontext.py,catalog_cache.py,manager.py,workflows.py.logger.pysplit into 6 focused modules while preserving the singleton API via re-exports.- Fixes and test updates made during the split (no behavioral changes to public CLI).
- Progress/display rework — moved from
uitocore/progressand extracted many helpers (ascii_format,ascii_sections,ascii_output,display_id,display_registry,display_logger,display_session,display_workflows).- Keeps prior public behavior while improving SRP, testability and code size.
- Import paths updated throughout CLI and tests.
- Verification: replaced the monolithic checksum parser with a
- Documentation & housekeeping
- UI docs clarified and examples expanded (
docs/ui.md). - Minor repo maintenance:
.gitignoreandAGENTS.mdimproved for clarity.
- UI docs clarified and examples expanded (
Fixed
- Critical Bug Fix: Hash Detection in Checksum Verification
- Fixed a critical bug where hexadecimal checksums were incorrectly processed as base64, causing hash detection failure called
binascii.Error: Incorrect paddingduring verification for certain apps (e.g., Heroic, QOwnNotes) that use latest-linux.yml file with hex hashes. - This fix ensures that the normalization function correctly detects and processes both hex and base64 encodings, preventing corruption of hex hashes and allowing all verification methods to function properly.
- Hex hashes (e.g., from Heroic, QOwnNotes) are now preserved without corruption
- Base64 hashes (e.g., from Legcord, Superproductivity) continue to work correctly
- Fixed a critical bug where hexadecimal checksums were incorrectly processed as base64, causing hash detection failure called
- Fixed update command not refreshing verification data when updating to new versions
- Fixed
VerificationErrornot being raised when all verification methods fail - Fixed checksum file references not persisting to cache JSON files
- Corrected asynchronous and protocol issues in progress reporting
ProgressReporterprotocol methods madeasync def;NullProgressReporterand related callers updated; added protocol-compliance tests.
- Reliability fixes in post-download and verification flows
- Guarded hash-retrieval in
PostDownloadProcessorand improved null-safety checks.
- Guarded hash-retrieval in
- Test and typing fixes uncovered by the refactors
- Multiple test failures resolved (including patched instantiation sites for
DownloadService/PostDownloadProcessor);test_update.pysuite fully passing after fixes.
- Multiple test failures resolved (including patched instantiation sites for
Removed
- Legacy venv-wrapper.bash script and install functionality removed from install.sh.
- Removed legacy/monolithic and obsolete modules
- Deleted legacy
checksum_parser.py(replaced by the newchecksum_parser/package). - Removed old monolithic
update.py/logger.pyimplementations (functionality preserved in new modules). - Deleted obsolete UI helper
src/my_unicorn/ui/display_common.pyand other unused legacy files. - Removed several deprecated test-package
__init__files as the test layout was modernized.
- Deleted legacy
Notes
- All new schema fields are optional for backward compatibility
- Existing app state configurations continue to work without migration
- Legacy verification format (passed + methods only) remains valid