# Changelog
All notable changes to this project are documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.0.0] - 2024-07-03
First public release.
### Added
- `sonnenstand` module with the public API: `day_of_year/1`, `declination/1`,
`equation_of_time/1`, `hour_angle/2`, `elevation/3`, and `azimuth/3`.
- Type specs and EDoc documentation for all public functions.
- EUnit test suite, including reference values for Berlin and a regression test
for the azimuth quadrant.
- Validation suite against the NOAA Solar Calculator (Berlin, Johannesburg, and
Sydney at the solstices and equinoxes), confirming solar noon to within ~30 s
and sunrise/sunset to within a few minutes. See `test/sonnenstand_noaa_tests.erl`.
- `rebar3` project setup with Dialyzer and `ex_doc` configuration.
### Changed
- English public API replacing the previous mixed German/English names
(`hoehe` → `elevation`, `azimut` → `azimuth`, `zeitgleichung` →
`equation_of_time`, `stundenwinkel` → `hour_angle`).
- Degree-to-radian conversion now uses `math:pi()/180` instead of a hardcoded
constant, improving precision.
- Date/time inputs are now interpreted as **UTC** (the original algorithm was
fixed to the 15° E / UTC+1 meridian). The seconds component of the time is
now taken into account.
### Fixed
- Azimuth quadrant bug: afternoon azimuths were mirrored onto the morning
(eastern) side because `math:acos/1` only returns `0..180°`. Azimuths now
correctly fall in the western half after solar noon.
### Removed
- Unused OTP application/supervisor scaffolding (`sonnenstand_app`,
`sonnenstand_sup`); `sonnenstand` is now a pure library application.
- Exploratory `playground_calendar/0` function.