Skip to content

Releases: oxur/rucksack

Rucksack 0.9.0 Release Notes

22 Jan 03:22

Choose a tag to compare

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() and panic() 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% coverage
  • records/v080.rs: 22 tests, 98.33% coverage
  • records/v090.rs: Comprehensive test suite
  • crypto.rs: Complete coverage of encryption/decryption
  • backup.rs: Full CSV and backup operation testing
  • redb backend: 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() with try_get_one()
  • ✅ Made version parsing return Result instead of panicking

Files Hardened:

  • crates/rucksack-db/src/crypto.rs - encryption now returns Result
  • crates/rucksack-db/src/db/manager.rs - database operations handle errors gracefully
  • crates/rucksack/src/command/handlers/*.rs - all handlers use proper error handling
  • crates/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 twyg logging library for beautiful terminal output
  • Enabled kv feature for log crate

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-binstall support for faster tool installation

Quality Gates:
All PRs must pass:

  1. Compilation in debug and release modes
  2. All 492 tests passing
  3. Linting with zero warnings
  4. Format check
  5. Security audit
  6. 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-needed argument 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

⚠️ None - This release maintains full API compatibility with 0.8.x

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 list

From 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 list

Important: 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-cli

Known 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 --oneline

Most Significant Commits:

  • 624821a - Migrate to structured logging with log+kv feature
  • feafacf - Phase 1B: Tasks 7-8 - Fix remaining unwrap() calls and add safety docs
  • 4003cad - Phase 1A: Fix remaining critical unwrap() calls in library code
  • e70d945 - Fix v0.7.0 and v0.8.0 database compatibility
  • 4dc3b9d - 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 tests
  • c982b96 - Significantly improved test coverage from 26.51% to 50.65%
  • f50841a - Added comprehensive tests for util.rs and time.rs modules
  • 53241c3 - Add dependency checking and caching to CI/CD pipeline

Installation

Via Cargo

cargo install rucksack-cli

Via Cargo-Binstall (faster)

cargo binstall rucksack-cli

From Source

git clone https://github.com/oxur/rucksack.git
cd rucksack
git checkout 0.9.0
cargo build --release

Documentation


Support


Thank you for using Rucksack! 🎒

0.8.6

12 Dec 06:31

Choose a tag to compare

Full Changelog: 0.8.4...0.8.6

0.8.4

27 Feb 07:28

Choose a tag to compare

Full Changelog: 0.8.3...0.8.4

0.8.3

27 Feb 07:16

Choose a tag to compare

Full Changelog: 0.8.1...0.8.3

0.8.1

22 Feb 04:27

Choose a tag to compare

Full Changelog: 0.8.0...0.8.1

0.8.0

22 Feb 03:44

Choose a tag to compare

What's Changed

  • Feature/Add support for password history by @oubiwann in #84
  • Make capitalization consistent in readme by @rkuprov in #81

New Contributors

Full Changelog: 0.7.1...0.8.0

0.7.1

08 Feb 07:53

Choose a tag to compare

Full Changelog: 0.7.0...0.7.1

0.7.0

08 Feb 04:57

Choose a tag to compare

What's Changed

Full Changelog: 0.6.0...0.7.0

0.6.4

07 Feb 05:55

Choose a tag to compare

Full Changelog: 0.6.3...0.6.4

0.6.3

18 Jan 05:53

Choose a tag to compare

Full Changelog: 0.6.0...0.6.3