## Description

<!-- Describe what this PR does and why. -->

## Type of change

- [ ] Bug fix
- [ ] New feature
- [ ] Refactor / cleanup
- [ ] Documentation
- [ ] CI / tooling

## Checklist

- [ ] Tests added / updated for all changed behaviour
- [ ] `ruff check .` passes with no errors
- [ ] `ruff format .` applied
- [ ] `pytest` passes locally
- [ ] `shield.core` has no new imports from `shield.fastapi`, `shield.dashboard`, or `shield.cli`
- [ ] All new public functions and classes have docstrings

## Related issues

<!-- Closes #... -->
