# Changelog

All notable changes to this project will be documented here. Format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versioning follows
[Semantic Versioning](https://semver.org/).

## [Unreleased]

### Changed

- Mouse post-processing pipeline reworked to remove endpoint artifacts:
  hard forward clip → backtrack-tolerant soft monotonic with tanh
  overshoot compression (`soften_forward`); tail-drag endpoint snapping →
  whole-curve smoothstep residual correction (`warp_endpoints`); abrupt
  start damping → continuous smoothstep damping (`damp_start`);
  gaussian smoothing now applied to both axes.
- `tests/unit/data/golden_mouse.npz` re-baselined against the new
  pipeline (intentional behavior change; scroll goldens unchanged).

## [0.2.0] - 2026-05-12

### Changed (breaking)

- Inference no longer requires PyTorch. Runtime dependencies are now
  `numpy + onnxruntime` only.
- Public API additions: `MouseModel` and `ScrollModel` classes wrapping a
  persistent ORT `InferenceSession`.
- Function signatures `generate()` and `generate_scroll()` are now keyword-only
  past the positional `start`/`end` (or `start_scroll_y`/`target_scroll_y`).
- New parameters: `click=True` (mouse), `seed=` (both), `viewport_height=` (scroll).
- Removed `config=` parameter; use kwargs directly.
- `model_dir=` renamed to `model_path=`; accepts `str` or `pathlib.Path`.
- `start_scrollY` / `target_scrollY` renamed to `start_scroll_y` / `target_scroll_y`.
- Training, web UI, collector, eval, and data adapter code moved to repo-level
  `tools/`; no longer packaged in the wheel.

### Added

- ONNX-format pre-trained weights bundled inside the wheel via
  `importlib.resources` (~3 MB).
- `tools/export_onnx.py` script with PyTorch/ORT parity check.
- Errors namespace `ai_mouse.errors` with `AiMouseError`, `ModelLoadError`,
  `GenerationError`.
- Custom ORT providers parameter for GPU / DirectML.
- Per-process `lru_cache` so `generate()` / `generate_scroll()` reuse the
  default model across calls.

### Removed

- Legacy `JointCVAE` class.
- `ai_mouse.config.GenerateConfig` top-level export (parameters moved to kwargs).
- Source dependency on `scipy.stats.truncnorm` (replaced by numpy rejection sampling).
