v0.3.3
Readability/robustness pass from a full adversarial audit. Mostly internal — drawing/editing/export work as in v0.3.2.
Notable behavior changes:
- Host preflight is stricter and fails with a clearer, more specific error if a pycortex viewer is missing the geometry roidraw needs (now checks both hemispheres' position + uv).
- A blank ROI name now falls back to the default instead of being stored empty.
- Imported ROIs missing a label get one via the same rule as freshly drawn ones (centroid-nearest).
- The ROI delete control is now a real keyboard-accessible button.
Under the hood: extracted pure hit-testing + a unified draw pipeline, named the magic numbers, added a teardown/destroy() path, and grew the test suite to 93 (incl. a real-projection fake adapter and an independent selection oracle). See TESTING.md.