(high) 04_report.py/build_html: HTML-подпись весов противоречит JSON weights_used в том же отчёте #1505

Closed
opened 2026-06-15 05:58:53 +00:00 by bot-backend · 1 comment
Collaborator

Severity: high · Категория: report · Файл: site-finder/04_report.py:248-248

04_report.py:248 — HTML печатает «Веса: образование 20% · здоровье 10% · ритейл 15% · транспорт 15% · досуг 10% · экономика 30%» (совпадает с 03_score.py WEIGHTS), а JSON weights_used на строке 129 того же запуска декларирует образование 30%, здоровье 15%, ритейл 20%, транспорт 20%, досуг 15% без economic. Один артефакт (parcel_.json + parcel_.html строятся из одного dict out) содержит два взаимоисключающих набора весов. Если последним прогонялся 10_score_v2.py (18/10/13/15/9/30 + market 5%), то и HTML-подпись тоже неверна. Импакт: невозможно понять, по каким весам реально посчитан балл. Фикс: единый источник весов для JSON и HTML, читать из scoring_weights / WEIGHTS.

Почему баг: Один и тот же артефакт (parcel_.json и parcel_.html строятся из одного dict out) содержит два взаимоисключающих набора весов. Клиент/аналитик не сможет понять, по каким весам реально посчитан балл. Если последним прогонялся 10_score_v2.py, то и HTML-подпись (20/10/15/15/10/30) тоже неверна (там 18/10/13/15/9/30 + market 5%).

Как чинить: Генерировать строку весов из того же источника, что и сам расчёт (scoring_weights / WEIGHTS), а не хардкодить. Убрать дублирующую жёстко прописанную строку.


deep-audit «армия ботов 2» · verify+harden, confidence 0.92 · unit U114

**Severity:** high · **Категория:** report · **Файл:** `site-finder/04_report.py:248-248` 04_report.py:248 — HTML печатает «Веса: образование 20% · здоровье 10% · ритейл 15% · транспорт 15% · досуг 10% · экономика 30%» (совпадает с 03_score.py WEIGHTS), а JSON weights_used на строке 129 того же запуска декларирует образование 30%, здоровье 15%, ритейл 20%, транспорт 20%, досуг 15% без economic. Один артефакт (parcel_*.json + parcel_*.html строятся из одного dict out) содержит два взаимоисключающих набора весов. Если последним прогонялся 10_score_v2.py (18/10/13/15/9/30 + market 5%), то и HTML-подпись тоже неверна. Импакт: невозможно понять, по каким весам реально посчитан балл. Фикс: единый источник весов для JSON и HTML, читать из scoring_weights / WEIGHTS. **Почему баг:** Один и тот же артефакт (parcel_*.json и parcel_*.html строятся из одного dict out) содержит два взаимоисключающих набора весов. Клиент/аналитик не сможет понять, по каким весам реально посчитан балл. Если последним прогонялся 10_score_v2.py, то и HTML-подпись (20/10/15/15/10/30) тоже неверна (там 18/10/13/15/9/30 + market 5%). **Как чинить:** Генерировать строку весов из того же источника, что и сам расчёт (scoring_weights / WEIGHTS), а не хардкодить. Убрать дублирующую жёстко прописанную строку. --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.92 · unit U114</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:58:53 +00:00
bot-backend added the
scope/backend
label 2026-06-15 11:02:15 +00:00
Owner

🔍 week ревью 1 — верификация (ПОДТВЕРЖДЕНО)

Текущее состояние кода: site-finder/04_report.py:248 (HTML-подпись весов); конфликтует с :129 (JSON weights_used).

Корень: :248 печатает «Веса: образование 20% · здоровье 10% · ритейл 15% · транспорт 15% · досуг 10% · экономика 30%» (совпадает с 03_score.py:50-56 WEIGHTS), а JSON на :129 того же запуска декларирует education 30% / health 15% / retail 20% / transit 20% / leisure 15% без economic. Один артефакт (parcel_*.json + parcel_*.html строятся из одного dict out, :123-132) содержит два взаимоисключающих набора. Если последним прогонялся 10_score_v2.py (18/10/13/15/9/30 + market 5%), то и HTML-подпись неверна.

Что править:

  • Генерировать строку весов на :248 из того же источника, что и расчёт (WEIGHTS из 03_score.py / таблица scoring_weights), форматируя проценты программно — не хардкодить.
  • Решается вместе с #1504 единым источником весов для JSON (:129) и HTML (:248).

Что посмотреть:

  • Код: 04_report.py:248, :129, :123-132; 03_score.py:50-56; 10_score_v2.py.
  • Vault: релевантных заметок не найдено.
**🔍 week ревью 1 — верификация (ПОДТВЕРЖДЕНО)** **Текущее состояние кода:** `site-finder/04_report.py:248` (HTML-подпись весов); конфликтует с `:129` (JSON `weights_used`). **Корень:** `:248` печатает «Веса: образование 20% · здоровье 10% · ритейл 15% · транспорт 15% · досуг 10% · экономика 30%» (совпадает с `03_score.py:50-56` WEIGHTS), а JSON на `:129` того же запуска декларирует education 30% / health 15% / retail 20% / transit 20% / leisure 15% без economic. Один артефакт (`parcel_*.json` + `parcel_*.html` строятся из одного dict `out`, `:123-132`) содержит два взаимоисключающих набора. Если последним прогонялся `10_score_v2.py` (18/10/13/15/9/30 + market 5%), то и HTML-подпись неверна. **Что править:** - Генерировать строку весов на `:248` из того же источника, что и расчёт (`WEIGHTS` из `03_score.py` / таблица `scoring_weights`), форматируя проценты программно — не хардкодить. - Решается вместе с #1504 единым источником весов для JSON (`:129`) и HTML (`:248`). **Что посмотреть:** - Код: `04_report.py:248`, `:129`, `:123-132`; `03_score.py:50-56`; `10_score_v2.py`. - Vault: релевантных заметок не найдено.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
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#1505
No description provided.