## Summary

<!-- 1-3 sentences. What does this PR change and why? Link the issue if there
     is one. -->

## Type of change

<!-- Pick the closest one. -->

- [ ] Bug fix (non-breaking)
- [ ] New feature (non-breaking)
- [ ] Breaking change (note the migration impact below)
- [ ] Refactor / internal cleanup (no behavior change)
- [ ] Documentation only
- [ ] CI / tooling

## Verification

- [ ] `make ci` passes locally (lint, format-check, typecheck, tests + 99% coverage gate).
- [ ] New tests added or existing tests updated to cover the change.
- [ ] Public API or CLI surface changes are reflected in `docs/` and `README.md` (if applicable).
- [ ] Changelog entry added under `## [Unreleased]` in `docs/changelog.md` (for user-visible changes).

## Notes for the reviewer

<!-- Anything specific to look at, tradeoffs you considered, follow-ups you
     deliberately deferred, or context that helps the review. Optional. -->
