## Summary

<!-- What does this PR do? Why? -->

## Changes

<!-- Bullet list of the key changes -->

## Checklist

- [ ] `make lint` passes (ruff format, ruff check, pyrefly)
- [ ] `uv run pytest` passes
- [ ] New tests added for new functionality
- [ ] Documentation updated if the public API changed
- [ ] Commit messages follow [Conventional Commits](https://www.conventionalcommits.org/)

## Related Issues

<!-- Closes #123 -->
