likePattern padded every token containing a digit, including ordinals like
"3-я". When the ordinal starts the address, " 3-я " never matches, so
"3-я Механическая улица 24а" returned no outages. Pad only pure-numeric
house tokens; precision is enforced by the local house filter regardless.
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