|
| 1 | +# Changelog |
| 2 | + |
| 3 | +All notable changes to this project will be documented in this file. |
| 4 | + |
| 5 | +Format follows [Keep a Changelog](https://keepachangelog.com/). |
| 6 | +Numerical changes are marked with [NUMERICAL]. |
| 7 | + |
| 8 | +## [Unreleased] |
| 9 | + |
| 10 | +## [0.2.0] - 2026-03-23 |
| 11 | + |
| 12 | +### Added |
| 13 | +- CLAUDE.md development standards (12 sections covering full workflow) |
| 14 | +- CI pipeline (GitHub Actions, pytest across Python 3.10-3.13) |
| 15 | +- Automated release pipeline (tag-triggered PyPI publish + GitHub Release) |
| 16 | +- Pre-commit hooks (ruff lint + format, pytest) |
| 17 | +- PR template with numerical impact checklist |
| 18 | +- Dev dependencies (pytest, ruff, pre-commit) |
| 19 | +- `elvers/ops/_dev.py` for experimental operators |
| 20 | +- `elvers/ops/_validation.py` input validation helpers |
| 21 | +- `load()` now accepts `interval` parameter for sub-daily data (e.g., "1h", "5m") |
| 22 | +- Factor constructor validates required columns [timestamp, symbol, factor] |
| 23 | +- Tests for `divide()`, `reverse()`, `ts_product` (negative/zero), `ts_regression` (lag>0) |
| 24 | + |
| 25 | +### Fixed |
| 26 | +- [NUMERICAL] `ts_product`: silently returned null for negative inputs; now correctly handles negative values via sign-magnitude decomposition |
| 27 | +- [NUMERICAL] `ts_covariance`: used ddof=0 (population) inconsistent with `ts_corr` (ddof=1); aligned to ddof=1 (sample) |
| 28 | +- [NUMERICAL] `divide()`: no zero-denominator protection; now returns null where abs(divisor) < 1e-10 |
| 29 | +- [NUMERICAL] `inverse()`: no zero protection; now returns null where abs(x) < 1e-10 |
| 30 | +- `ts_regression` rettype=7 (MSE): implicit Inf-to-null on window=2; now has explicit guard |
| 31 | +- `ts_count_nans`: used min_samples=1 unlike all other ts_* operators; aligned to min_samples=window |
| 32 | +- `_balance()`: hardcoded daily frequency; now accepts interval parameter |
| 33 | + |
| 34 | +### Changed |
| 35 | +- DEV operators (hump, ts_arg_max, ts_arg_min) moved from public API to `_dev.py` |
| 36 | +- Factor class now explicitly declares `__hash__ = None` |
| 37 | +- Ruff auto-formatted all source files (import sorting, Union -> X | Y syntax) |
0 commit comments