All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- CI: Updated
github/codeql-actionfrom 4.32.3 to 4.32.4 (Dependabot PR #34) - Dependencies: Updated
clapto 4.5.60 andanyhowto 1.0.102 (Dependabot PR #35)
- Release: Bumped crate version to
0.3.3, which updates CLI/TUI application banners viaCARGO_PKG_VERSION - Dependencies: Updated
clapto 4.5.56 andchronoto 0.4.43 (Dependabot PR #24) - Dependencies: Updated
serde_jsonto 1.0.149 andreqwestto 0.12.28 - Dependencies: Updated
ratatuito 0.30.0 (brings inlru0.16.3) - Dependencies: Updated
bytesto 1.11.1 (PR #25) - Dependencies: Updated
timeto 0.3.47 (Dependabot PR #26) - Dependencies: Updated
clapto 4.5.57 andanyhowto 1.0.101 (Dependabot PR #27) - Dependencies: Updated
clapto 4.5.58 (Dependabot PR #29) - CI: Added Rust CI and security workflows with SHA-pinned actions and required checks (
Build,Clippy,Rustfmt,Feature Tests,Documentation,Rust Security Audit,Security Workflow Audit) - Security: Hardened GitHub Actions policy to selected actions with SHA pinning required
- CLI: Improved manual timezone handling by surfacing invalid timezone values as errors instead of silently falling back to UTC
- Time Sync: Improved source reporting to preserve the queried server identity in sync results
- Documentation: Simplified and modernized
README.mdquick start, feature, and usage sections - Algorithm: Refined moon batch rise/set sweep to scan the full day with contiguous crossing brackets
- CI: Fixed
clippyviolations in moon batch optimization code to restore Rust CI green status (PR #31) - CI: Added scheduled/manual USNO drift validation workflow that runs fixed-city
--validatechecks with caution/fail/missing thresholds
- Developer Safety: Added
scripts/safe_local_test.shfor safer local testing (offline by default, credential scrubbing, isolated target directory) - Security: Added workflow pin drift check to verify pinned action SHAs against tracked major tags
- Dependencies: Updated
lruto 0.16.3 to address GHSA-rhfx-m35p-ff5j (low severity)
- Code Quality: Refactored
print_text_outputin main.rs, reducing code duplication by ~60%- Created helper functions:
print_header(),print_location_section(),print_events_section(),print_position_section(),moon_size_class(),print_moon_section(),print_lunar_phases_section(),print_ai_section()
- Created helper functions:
- Code Quality: Split
tui/app.rsinto smaller, focused modules- New
src/tui/drafts.rs(~600 lines):LocationInputDraft,CalendarDraft,AiConfigDraft,SettingsDraftand their field enums - New
src/tui/cache.rs(~90 lines):CachedEvents,CachedPositions,CachedMoonDetails,MoonAltitudeTrend - Reduced
app.rsby ~400 lines for better maintainability
- New
- Code Quality: Added
#[must_use]attributes to pure functions across astronomical modulessrc/astro/mod.rs:julian_day(),julian_century(),normalize_degrees(),normalize_degrees_signed()src/astro/sun.rs:equation_of_time(),solar_noon(),solar_position()src/astro/moon.rs:lunar_position(),lunar_phases(),phase_name(),phase_emoji()
- Accuracy: Enhanced lunar distance calculation with additional Meeus periodic terms in
moon.rs
- Safety: Changed
jd_to_datetimereturn type fromDateTime<Utc>toOption<DateTime<Utc>>to prevent potential panics- Uses
.single()instead of.unwrap()for safe date construction - Updated
lunar_phases()to handleNonewith let-else pattern
- Uses
- Comprehensive Module Documentation: Significantly improved crates.io documentation coverage (from 37.5% baseline)
- Module-level docs: Added detailed module documentation for
ai,time_sync,benchmark,location_source, andusno_validation - Struct documentation: Documented all public structs in
output(14 structs),config(4 structs),ai(9 structs), andusno_validation(3 structs) with field-level descriptions - Function documentation: Added comprehensive docs for:
ai:fetch_insights,probe_server,build_ai_data,prepare_event_summariestime_sync:check_time_sync,check_time_sync_with_servers,format_offset,describe_direction,direction_codecalendar:generate_calendaroutput:generate_json_output(both AI and non-AI variants)benchmark:run_benchmark,generate_html_report
- Enum documentation: Documented
ValidationStatus,TimeSyncDirection,LocationMode,AiRefreshMode,LocationSource,CalendarFormat - Usage examples: Added practical examples for all major public functions showing real-world usage patterns
- Error documentation: Documented error cases and return values for all fallible functions
- Configuration examples: Added JSON configuration examples for
ConfigandAiSettings - Fixed broken intra-doc links for better documentation navigation
- Documentation now builds without warnings (0 warnings, 33 tests passing)
- Module-level docs: Added detailed module documentation for
- Binary Size Optimization: Made
rayondependency optional, reducing minimal build size by 59% (#17)- New
parallelfeature flag for optional Rayon parallelization in calendar generation - Minimal build (
--no-default-features): 2.4 MB vs 5.8 MB full build parallelfeature is disabled by default to minimize binary size- Calendar generation works with or without the
parallelfeature
- New
- Added comprehensive library usage documentation in README
- Documented all feature flags (
cpu-portable,usno-validation,ai-insights,parallel) - Added feature flag examples for different use cases (minimal, core + parallel, full)
- Clarified binary size and compilation benefits of disabling optional features
- Updated Dependencies section to distinguish core vs optional dependencies
- Resolved cross-compilation issues by making
rayonoptional (addresses #17)
- Optional Features:
reqwestdependency is now optional, allowing minimal builds without OpenSSL- New feature flags:
usno-validationandai-insights(both enabled by default) - Build without reqwest:
cargo install solunatus --no-default-features - Solves cross-compilation issues (#17)
- New feature flags:
- Security: Switched from OpenSSL to
rustls-tlsbackend for HTTP requests (pure Rust TLS) - Events Display: Filter events to ±12h sliding window from current time for cleaner output
- Updated
clapfrom 4.5.51 to 4.5.53 (#15) - Updated
actions/checkoutfrom 5 to 6 in CI workflow (#16)
- Security: Improved HTTP client security with explicit TLS verification enforcement
- Security: Replaced
unsafecode in M1 optimizations with safe explicit initialization - Robustness: Replaced
.unwrap()call in date parsing with proper error handling - Robustness: Improved configuration path detection using
dirscrate instead of manual environment variable checks - Code Quality: Removed hardcoded version strings - now uses
CARGO_PKG_VERSIONthroughout - Code Quality: Removed hardcoded city count - now dynamically loaded from database
- Validation: Added CLI-level input validation for AI refresh interval (enforces 1-60 minute range)
- Updated
clapfrom 4.5.50 to 4.5.51
- Comprehensive README improvements with expanded feature descriptions and usage examples
- Added detailed solar and lunar calculation documentation in
docs/development/ - Enhanced troubleshooting guide with additional common issues and solutions
- Improved AI insights documentation
- Better crates.io documentation coverage
- Updated Code of Conduct
- Better error messages when date/time parsing fails
- More reliable home directory detection across platforms
- Actually fixed benchmark binaries being listed for installation - removed benchmark
[[bin]]entries from Cargo.toml - Now only the
solunatusbinary is installed viacargo install(benchmarks can still be built locally withcargo build --bin <name>)
- Fixed README.md title displaying "Astrotimes" instead of "Solunatus" on crates.io
- Fixed broken screenshot link in README.md
- BREAKING: Renamed project from "astrotimes" to "solunatus" to avoid naming conflict with existing crate
- Updated crate name, binary name, and all documentation to reflect new name "Solunatus"
- Configuration file path changed from
~/.astro_times.jsonto~/.solunatus.json - NTP cache file path changed from
~/.astrotimes_ntp_cache.jsonto~/.solunatus_ntp_cache.json - Environment variable changed from
ASTROTIMES_SKIP_TIME_SYNCtoSOLUNATUS_SKIP_TIME_SYNC - Benchmark binaries now excluded from
cargo install(only mainsolunatusbinary installed) - Updated
clapfrom 4.5.48 to 4.5.50 - Updated
reqwestfrom 0.12.23 to 0.12.24 - Updated
ratatuifrom 0.28.1 to 0.29.0 - Updated
crosstermfrom 0.28.1 to 0.29.0 - Updated
chrono-tzfrom 0.9.0 to 0.10.4
- Users migrating from astrotimes 0.1.x will need to reconfigure their location settings
- Previous astrotimes versions have been yanked from crates.io
- Install with:
cargo install solunatus
- Fixed doctest example in
batch_calculatefunction missingTimeZoneimport
- First public release to crates.io
- Repository made public on GitHub
- Initial release of AstroTimes as a Rust library and CLI application
- NOAA solar position and event calculations (sunrise, sunset, twilight times)
- Meeus lunar position and phase calculations
- Interactive terminal UI (watch mode) with keyboard controls
- City database with 570+ worldwide locations
- JSON output mode for programmatic access
- HTML calendar generation for date ranges
- AI-powered insights via local Ollama integration
- System clock synchronization verification
- Configuration persistence (~/.astro_times.json)
- Library API for integration into Rust projects
- Pure Rust implementation with no external astronomical calculation dependencies
- Accuracy within 1-3 minutes of U.S. Naval Observatory reference data
- Cross-platform support (macOS, Linux, Windows)
- Single self-contained binary with embedded city database
- Offline-first design with optional online features
- The roadmap is subject to change based on various factors.
- Planetary positions (Mercury, Venus, Mars, Jupiter, Saturn)
- Eclipse predictions (solar and lunar)
- Performance optimization for batch processing
- Additional city database expansion