TrackedObjectAttribute is constructed per attribute (face, license plate,
logo, ...) per frame in process_frames. It holds exactly six fixed fields
and is never mutated beyond __init__, so __slots__ removes the per-instance
__dict__.
Measured in the release image: 352 B/instance (56 B object + 296 B __dict__)
-> ~104 B with __slots__, ~70% smaller, on a high-churn per-frame object.
Adds a test asserting no __dict__ and that undeclared attributes raise.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* CenterFocusString icon
* Add CenterFocusString to multiselect
* Rename CenterFocusString.jsx
* Rename icon and make it smaller
* Rename icon
* Fix lint and use icon
for speech
* remove unused vars
* Remove unused import