|
| 1 | +# Changelog |
| 2 | + |
| 3 | +All notable changes to this project are documented here. The format is |
| 4 | +loosely based on [Keep a Changelog](https://keepachangelog.com/) and |
| 5 | +this project follows [Semantic Versioning](https://semver.org/). |
| 6 | + |
| 7 | +## [0.2.0] — 2026-04-23 |
| 8 | + |
| 9 | +First public release on Maven Central. Covers EDTF Levels 0, 1, and most |
| 10 | +of Level 2. |
| 11 | + |
| 12 | +### Added |
| 13 | + |
| 14 | +- **Level 0** parsing: ISO 8601-1 dates, datetimes (minute, second, and |
| 15 | + millisecond precision), centuries. |
| 16 | +- **Level 1** parsing: uncertain (`?`), approximate (`~`), and combined |
| 17 | + (`%`) markers; `Y`-notation for five-or-more-digit years; seasons |
| 18 | + (codes 21–24); intervals with bounded, open (`..`), and unknown |
| 19 | + endpoints; `EdtfYear`, `EdtfSeason`, `Endpoint` sealed type, and |
| 20 | + `EdtfInterval` types. |
| 21 | +- **Level 2** parsing: non-progressive partial X-mask patterns in any |
| 22 | + YYYY/MM/DD position; sets (`[2020,2021]`) and lists |
| 23 | + (`{2019..2021}`) including consecutive `start..end` members and |
| 24 | + `earlier`/`later` markers; extended season codes 25–41 |
| 25 | + (hemispheric variants, quadrimesters, half-year divisions); |
| 26 | + three-digit decade notation (`199`, `199?`); `Y`-notation |
| 27 | + exponential (`Y1E5`) and significant-digits (`Y12345S3`) forms; |
| 28 | + positional UA markers on individual date components |
| 29 | + (`2020?-05~`, `?2020-%05`). |
| 30 | +- **Comparison and bounds**: `EdtfTemporal#compareTo`, |
| 31 | + `EdtfTemporal#covers`, and `long`-millisecond `min` / `max` for every |
| 32 | + supported type. |
| 33 | +- **Canonical serialization**: every type implements `toEdtfString()` |
| 34 | + in a form that round-trips with edtf.js for the supported subset. |
| 35 | +- **Build and CI**: Maven build targeting Java 17 bytecode, JPMS |
| 36 | + module descriptor, GitHub Actions CI matrix (Java 17 + 21), release |
| 37 | + workflow that signs with GPG and publishes via Sonatype Central |
| 38 | + Portal, Dependabot, issue and PR templates, Contributor Covenant |
| 39 | + code of conduct, AI-assisted-development disclosure in |
| 40 | + `ATTRIBUTION.md`. |
| 41 | +- **Test coverage**: 247 unit tests including a generated |
| 42 | + parity-vector harness comparing against `edtf.js` v4.11.0 output. |
| 43 | + |
| 44 | +### Known deviations from edtf.js |
| 45 | + |
| 46 | +Documented in code on the affected types. Summary: |
| 47 | + |
| 48 | +- **Datetime canonical form** is normalised to UTC and full |
| 49 | + millisecond precision (matching edtf.js's `toISOString` output); |
| 50 | + the original timezone offset is preserved on the in-memory value |
| 51 | + via `EdtfDate#timeZone()` but not emitted by `toEdtfString()`. |
| 52 | +- **Datetime atomicity**: minute, second, and millisecond precision |
| 53 | + values report `min == max` (atomic instants), matching edtf.js. |
| 54 | +- **Season codes 21–24** use calendar-quarter bounds |
| 55 | + (Q1=Jan–Mar, etc.) rather than meteorological seasons, |
| 56 | + matching the upstream reference. |
| 57 | +- **Consecutive list members** report bounds spanning |
| 58 | + `start.min..end.max` (semantically the full range). edtf.js |
| 59 | + reports `start.max` for the upper bound, which we consider an |
| 60 | + upstream bug and diverge from. |
| 61 | + |
| 62 | +### Deferred to a future release |
| 63 | + |
| 64 | +- Locale-aware formatting via `ResourceBundle` (canonical EDTF |
| 65 | + rendering only at this release). |
| 66 | +- Ant/Ivy consumption smoke test against a real JOSM plugin |
| 67 | + scaffold. |
| 68 | + |
| 69 | +[0.2.0]: https://github.com/OpenHistoricalMap/edtf-java/releases/tag/v0.2.0 |
0 commit comments