Goal:
Separate boundary data and validation state from rendering and engine logic.
Tasks:
- Introduce a boundary state manager / store
- Manage:
- current boundary (GeoJSON)
- empty / dirty state
- validation result
- Remove direct boundary mutation from engine adapter
Acceptance:
- Boundary logic is testable without a map engine
- Engine adapters only emit boundary change events
- Core editor owns boundary state lifecycle