## Summary

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

## Checklist

- [ ] Tests pass (`uv run pytest tests/ -v`)
- [ ] New behaviour is covered by tests
- [ ] Descriptive variable names used throughout changed code
- [ ] Docs updated if public API changed (`docs/api/` + `CLAUDE.md` layout table)
