The outages portal appends the district in parentheses, e.g.
"Медкадры улица, 1 (Заельцовский район)". That suffix hid the house number
from the parser, so every portal address failed house matching and /v1/outages
always returned empty.
- address: NormalizeText drops a trailing "(...)" group (root fix, benefits
every source)
- outages: introduce HouseUnit; the ArcGIS adapter parses the (cleaned) address
at the boundary and stores the structured unit; MatchingHouse matches on the
unit (with a parse fallback for sources that only provide text)
- config: portal.url is now optional (core runs without the events module)
- httpapi: always return "outages": [] (no more omitempty); report
"detail" when the events module is not configured
- tests: regression coverage for the portal district format