(low) Air quality берёт hourly[0] (00:00 forecast-дня), а не текущий час — docstring обещает «текущий час» #1377

Closed
opened 2026-06-14 18:09:59 +00:00 by bot-backend · 0 comments
Collaborator

Описание

_fetch_air_quality_remote запрашивает hourly с forecast_days=1 и возвращает hourly['pm2_5'][0] — значение за 00:00 текущих суток (первый bucket массива), НЕ текущий час, как заявлено в docstring (строки 17, 291, 326) и комментарии к _AIR_TTL_S. Open-Meteo Air Quality с forecast_days=1 отдаёт 24 hourly-бакета начиная с 00:00 местного времени; индекс [0] всегда даёт 00:00. Реальное значение может расходиться с фактическим часом запроса на десятки мкг/м³ (пик утром/вечером). ts = hourly['time'][0] технически честно отражает 00:00, но текст docstring и UX («качество воздуха сейчас») вводят в заблуждение.

Корень

Хардкод индекса [0] вместо поиска bucket текущего часа. Код перенесён без изменения формата (комментарий строки 293), что объясняет происхождение, но не делает семантику корректной.

Evidence

/Users/anton/Птица/gendesign/backend/app/services/weather_cache.py:313-318

"pm2_5": hourly["pm2_5"][0] if hourly.get("pm2_5") else None,
...
"ts": hourly["time"][0],

Suggested fix

Выбирать индекс текущего часа: найти в hourly['time'] ближайший к now (Europe/Moscow) bucket и брать его, либо честно поправить docstring/ts-метку на «00:00 forecast-дня».

Обоснование severity

Low: значение информационное (показывается пользователю в air_quality), на scoring не влияет — _build_environmental_score использует только bool(air_q), а не числовые pm2_5/pm10/no2. Дефект достижим в проде, но не ломает production-решения.


week ревью 1 · multi-agent аудит 2026-06-14 · severity=low · category=correctness

Затронутые файлы:

  • /Users/anton/Птица/gendesign/backend/app/services/weather_cache.py
## Описание `_fetch_air_quality_remote` запрашивает hourly с `forecast_days=1` и возвращает `hourly['pm2_5'][0]` — значение за 00:00 текущих суток (первый bucket массива), НЕ текущий час, как заявлено в docstring (строки 17, 291, 326) и комментарии к `_AIR_TTL_S`. Open-Meteo Air Quality с `forecast_days=1` отдаёт 24 hourly-бакета начиная с 00:00 местного времени; индекс [0] всегда даёт 00:00. Реальное значение может расходиться с фактическим часом запроса на десятки мкг/м³ (пик утром/вечером). `ts = hourly['time'][0]` технически честно отражает 00:00, но текст docstring и UX («качество воздуха сейчас») вводят в заблуждение. ## Корень Хардкод индекса [0] вместо поиска bucket текущего часа. Код перенесён без изменения формата (комментарий строки 293), что объясняет происхождение, но не делает семантику корректной. ## Evidence `/Users/anton/Птица/gendesign/backend/app/services/weather_cache.py:313-318` ```python "pm2_5": hourly["pm2_5"][0] if hourly.get("pm2_5") else None, ... "ts": hourly["time"][0], ``` ## Suggested fix Выбирать индекс текущего часа: найти в `hourly['time']` ближайший к now (Europe/Moscow) bucket и брать его, либо честно поправить docstring/ts-метку на «00:00 forecast-дня». ## Обоснование severity Low: значение информационное (показывается пользователю в `air_quality`), на scoring не влияет — `_build_environmental_score` использует только `bool(air_q)`, а не числовые pm2_5/pm10/no2. Дефект достижим в проде, но не ломает production-решения. --- _week ревью 1 · multi-agent аудит 2026-06-14 · severity=**low** · category=`correctness`_ Затронутые файлы: - `/Users/anton/Птица/gendesign/backend/app/services/weather_cache.py`
bot-backend added the
week ревью 1
label 2026-06-14 18:09:59 +00:00
bot-backend added the
scope/backend
label 2026-06-15 11:01:55 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1377
No description provided.