Releases: oxur/rucksack
Rucksack 0.9.0 Release Notes
Overview
Version 0.9.0 represents a major quality and reliability milestone for Rucksack. This release includes 175 commits focused on improving code robustness, test coverage, database compatibility, and development infrastructure. While there are no major new features, the codebase is now significantly more stable, maintainable, and production-ready.
Key Achievements:
- Test coverage improved from 26.51% to 95%+
- Eliminated all critical
unwrap()andpanic()calls in library code - Fixed database compatibility issues across all versions (v0.5.0 through v0.9.0)
- Migrated to structured logging with key-value pairs
- Enhanced CI/CD pipeline with comprehensive checks
Major Changes
🧪 Test Coverage Overhaul
Impact: Massive improvement in code reliability and confidence
- Coverage increased from 26.51% to 95%+ across the entire codebase
- Added 39+ test-focused commits with comprehensive test suites
- All modules now have extensive unit tests:
- Cryptography operations (100% coverage)
- Database records (all versions: v0.2.0 through v0.9.0)
- File operations and utilities
- CLI argument parsing and command handlers
- CSV import/export functionality
- Password generation
- Output formatting
Key Test Additions:
records/v070.rs: 36 tests, 95.37% coveragerecords/v080.rs: 22 tests, 98.33% coveragerecords/v090.rs: Comprehensive test suitecrypto.rs: Complete coverage of encryption/decryptionbackup.rs: Full CSV and backup operation testingredbbackend: Comprehensive integration tests
🛡️ Code Robustness & Safety (AP-06 Anti-Pattern Elimination)
Impact: Eliminated potential crashes and improved error handling
Phase 1A and 1B of the Rust Anti-Patterns audit completed, addressing AP-06 (unsafe unwrap() usage):
Critical Fixes:
- ✅ Removed all
unwrap()calls from encryption operations (security-critical) - ✅ Fixed database lock panic in
db/manager.rs - ✅ Converted command handler panics to proper Result returns
- ✅ Added safety documentation for remaining justified
unwrap()calls - ✅ Replaced CLI argument
get_one()withtry_get_one() - ✅ Made version parsing return Result instead of panicking
Files Hardened:
crates/rucksack-db/src/crypto.rs- encryption now returns Resultcrates/rucksack-db/src/db/manager.rs- database operations handle errors gracefullycrates/rucksack/src/command/handlers/*.rs- all handlers use proper error handlingcrates/rucksack-db/src/records/*.rs- all version modules use Result types
Result: Zero panic risk in library code for recoverable errors.
🗄️ Database Compatibility & Migration
Impact: Seamless upgrades from any previous version
- ✅ Fixed backwards compatibility for v0.5.0 and v0.6.0 databases
- ✅ Fixed v0.7.0 and v0.8.0 database decryption issues
- ✅ Added comprehensive migration tests for all versions
- ✅ Fixed cross-platform database format tests (Linux/macOS/Windows)
- ✅ Improved version detection and automatic migration
Upgrade Path:
Users can now upgrade from any Rucksack version (0.5.0+) to 0.9.0 without data loss. The database migration system automatically detects and upgrades old formats.
Migration Support:
- v0.5.0 → v0.9.0 ✅
- v0.6.0 → v0.9.0 ✅
- v0.7.0 → v0.9.0 ✅
- v0.8.0 → v0.9.0 ✅
- v0.8.6 → v0.9.0 ✅
📊 Structured Logging Migration
Impact: Better observability and debugging capabilities
- Migrated all 161 log statements to structured logging format
- Added key-value pairs for contextual information
- Compatible with
twyglogging library for beautiful terminal output - Enabled
kvfeature forlogcrate
Before:
log::debug!("Creating encrypted DB");After:
log::debug!(operation = "decrypt", db_file = db_file.as_str(); "Creating encrypted DB");Benefits:
- Logs are now parseable and machine-readable
- Better filtering and searching in log aggregators
- Contextual information preserved for debugging
- Performance tracing with operation identifiers
🔧 CI/CD Pipeline Enhancements
Impact: Faster feedback and higher quality assurance
New Capabilities:
- ✅ Debug and Release build matrix (catch platform-specific issues)
- ✅ Dependency vulnerability checking with
cargo-audit - ✅ Outdated dependency detection with
cargo-outdated - ✅ Smart caching for faster builds
- ✅ Cross-platform testing (Linux, macOS, Windows)
- ✅ Comprehensive linting with
clippy - ✅ Format checking with
rustfmt - ✅
cargo-binstallsupport for faster tool installation
Quality Gates:
All PRs must pass:
- Compilation in debug and release modes
- All 492 tests passing
- Linting with zero warnings
- Format check
- Security audit
- Dependency compatibility check
🐛 Bug Fixes
CLI & Command Handling:
- Fixed clap CLI argument conflicts and validation errors
- Added CLI validation tests to prevent configuration errors
- Fixed
db-neededargument missing from root command - Removed redundant global flags causing conflicts
Database Operations:
- Fixed database file path handling
- Improved error messages for decryption failures
- Fixed backup directory creation
- Enhanced record key generation
Compatibility:
- Updated dependencies and fixed API compatibility issues
- Fixed compiler warnings for unused variables
- Resolved linting issues across the codebase
Breaking Changes
While internal changes are significant, the public API remains stable. All existing scripts, integrations, and workflows will continue to work unchanged.
Performance
No significant performance changes in this release. The focus was on stability and reliability rather than optimization.
Testing
Test Suite Statistics:
- Total Tests: 492
- Pass Rate: 100%
- Coverage: 95%+
- Test Files Added/Enhanced: 50+
Test Categories:
- Unit tests: 450+
- Integration tests: 40+
- Database migration tests: 20+
CI/CD Test Matrix:
- Ubuntu (latest)
- macOS (latest)
- Windows (latest)
- Debug builds
- Release builds
Upgrade Instructions
From 0.8.x
No special steps required:
# Install new version
cargo install rucksack-cli
# Your existing database will work immediately
rucksack listFrom 0.5.x, 0.6.x, 0.7.x
The database will be automatically migrated on first use:
# Install new version
cargo install rucksack-cli
# First command will auto-migrate
rucksack listImportant: Make a backup before upgrading from very old versions:
# Backup your database first
cp ~/.local/share/rucksack/data/secrets.db ~/.local/share/rucksack/data/secrets.db.backup
# Then upgrade
cargo install rucksack-cliKnown Issues
None at this time. Please report any issues at:
https://github.com/oxur/rucksack/issues
Contributors
This release includes contributions from:
- Duncan McGreggor (@oubiwann)
- Claude Sonnet 4.5 (AI pair programming assistant)
Special thanks to the Rust community for excellent tools and libraries.
What's Next
Version 0.10.0 will focus on:
- Breaking API changes (String → PathBuf migration)
- Further code modernization
- Performance optimizations
- Additional features
See the project roadmap in CLAUDE.md for detailed plans.
Full Changelog
For a complete list of all 175 commits, see:
git log 0.8.6..0.9.0 --onelineMost Significant Commits:
624821a- Migrate to structured logging with log+kv featurefeafacf- Phase 1B: Tasks 7-8 - Fix remaining unwrap() calls and add safety docs4003cad- Phase 1A: Fix remaining critical unwrap() calls in library codee70d945- Fix v0.7.0 and v0.8.0 database compatibility4dc3b9d- Fix backwards compatibility for old database formats (v0.5.0, v0.6.0)e7bc876- Complete Phase 1A: Fix all critical unwrap/panic issues and flaky testsc982b96- Significantly improved test coverage from 26.51% to 50.65%f50841a- Added comprehensive tests for util.rs and time.rs modules53241c3- Add dependency checking and caching to CI/CD pipeline
Installation
Via Cargo
cargo install rucksack-cliVia Cargo-Binstall (faster)
cargo binstall rucksack-cliFrom Source
git clone https://github.com/oxur/rucksack.git
cd rucksack
git checkout 0.9.0
cargo build --releaseDocumentation
- User Guide: https://github.com/oxur/rucksack/blob/main/README.md
- API Documentation: https://docs.rs/rucksack-db
- Developer Guide: https://github.com/oxur/rucksack/blob/main/CLAUDE.md
Support
- Issues: https://github.com/oxur/rucksack/issues
- Discussions: https://github.com/oxur/rucksack/discussions
- Email: oubiwann@gmail.com
Thank you for using Rucksack! 🎒
0.8.6
Full Changelog: 0.8.4...0.8.6
0.8.4
Full Changelog: 0.8.3...0.8.4
0.8.3
Full Changelog: 0.8.1...0.8.3
0.8.1
Full Changelog: 0.8.0...0.8.1
0.8.0
0.7.1
Full Changelog: 0.7.0...0.7.1
0.7.0
0.6.4
Full Changelog: 0.6.3...0.6.4
0.6.3
Full Changelog: 0.6.0...0.6.3