(high) 04_report.py/main: JSON weights_used не соответствует реальным весам скоринга и не содержит economic #1504

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

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

04_report.py:129 — в JSON-отчёт зашит литерал weights_used={"education":0.30,"health":0.15,"retail":0.20,"transit":0.20,"leisure":0.15} (сумма 1.0, без economic). Фактический скоринг считается в 03_score.py (WEIGHTS: education 0.20, health 0.10, retail 0.15, transit 0.15, leisure 0.10, economic 0.30) либо в 10_score_v2.py (education 0.18 ... economic 0.30, market 0.05). Декларированные веса противоречат реальным И скрывают самый тяжёлый компонент economic (30%). Импакт: потребитель JSON не может воспроизвести weighted_total из заявленной методики; образование подаётся как 30% вместо 18-20%. Фикс: брать веса из источника истины (таблица scoring_weights / WEIGHTS), а не хардкодить устаревший набор; включить economic (и market при v2).

Почему баг: weighted_total в том же JSON считается в 03/10 по WEIGHTS с economic=0.30; weights_used декларирует другой набор без economic. Это прямое расхождение цифр и текста в клиентском отчёте — невозможно воспроизвести итоговый балл из заявленных весов.

Как чинить: Не хардкодить веса в отчёте: читать их из таблицы scoring_weights (как делает 10_score_v2.py) или из единого источника констант, и включать economic/market. Синхронизировать JSON weights_used, HTML-подпись (стр.248) и реальный WEIGHTS.


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

**Severity:** high · **Категория:** report · **Файл:** `site-finder/04_report.py:129-129` 04_report.py:129 — в JSON-отчёт зашит литерал weights_used={"education":0.30,"health":0.15,"retail":0.20,"transit":0.20,"leisure":0.15} (сумма 1.0, без economic). Фактический скоринг считается в 03_score.py (WEIGHTS: education 0.20, health 0.10, retail 0.15, transit 0.15, leisure 0.10, economic 0.30) либо в 10_score_v2.py (education 0.18 ... economic 0.30, market 0.05). Декларированные веса противоречат реальным И скрывают самый тяжёлый компонент economic (30%). Импакт: потребитель JSON не может воспроизвести weighted_total из заявленной методики; образование подаётся как 30% вместо 18-20%. Фикс: брать веса из источника истины (таблица scoring_weights / WEIGHTS), а не хардкодить устаревший набор; включить economic (и market при v2). **Почему баг:** weighted_total в том же JSON считается в 03/10 по WEIGHTS с economic=0.30; weights_used декларирует другой набор без economic. Это прямое расхождение цифр и текста в клиентском отчёте — невозможно воспроизвести итоговый балл из заявленных весов. **Как чинить:** Не хардкодить веса в отчёте: читать их из таблицы scoring_weights (как делает 10_score_v2.py) или из единого источника констант, и включать economic/market. Синхронизировать JSON weights_used, HTML-подпись (стр.248) и реальный WEIGHTS. --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.95 · unit U114</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:58:52 +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:129 (JSON weights_used); источник истины — site-finder/03_score.py:50-56 (WEIGHTS).

Корень: :129 зашит литерал weights_used={"education":0.30,"health":0.15,"retail":0.20,"transit":0.20,"leisure":0.15} (сумма 1.0, без economic). Реальный скоринг — 03_score.py:50-56: education 0.20, health 0.10, retail 0.15, transit 0.15, leisure 0.10, economic 0.30 (есть и v2 10_score_v2.py с market). weighted_total в том же JSON (:127, :238) считается по WEIGHTS с economic=0.30, а декларированные веса противоречат и скрывают самый тяжёлый компонент. Потребитель JSON не может воспроизвести балл; education подаётся как 30% вместо 20%.

Что править:

  • Не хардкодить веса — импортировать WEIGHTS из 03_score.py (или читать из scoring_weights, как 10_score_v2.py) и сериализовать их в weights_used, включая economic (и market при v2).
  • Синхронно с #1505 (HTML-подпись :248) — единый источник для JSON и HTML.

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

  • Код: 04_report.py:123-132; 03_score.py:50-56 (WEIGHTS); 10_score_v2.py (чтение scoring_weights).
  • Vault: релевантных заметок не найдено.
**🔍 week ревью 1 — верификация (ПОДТВЕРЖДЕНО)** **Текущее состояние кода:** `site-finder/04_report.py:129` (JSON `weights_used`); источник истины — `site-finder/03_score.py:50-56` (`WEIGHTS`). **Корень:** `:129` зашит литерал `weights_used={"education":0.30,"health":0.15,"retail":0.20,"transit":0.20,"leisure":0.15}` (сумма 1.0, без economic). Реальный скоринг — `03_score.py:50-56`: education **0.20**, health 0.10, retail 0.15, transit 0.15, leisure 0.10, **economic 0.30** (есть и v2 `10_score_v2.py` с market). `weighted_total` в том же JSON (`:127`, `:238`) считается по WEIGHTS с economic=0.30, а декларированные веса противоречат и скрывают самый тяжёлый компонент. Потребитель JSON не может воспроизвести балл; education подаётся как 30% вместо 20%. **Что править:** - Не хардкодить веса — импортировать `WEIGHTS` из `03_score.py` (или читать из `scoring_weights`, как `10_score_v2.py`) и сериализовать их в `weights_used`, включая economic (и market при v2). - Синхронно с #1505 (HTML-подпись `:248`) — единый источник для JSON и HTML. **Что посмотреть:** - Код: `04_report.py:123-132`; `03_score.py:50-56` (`WEIGHTS`); `10_score_v2.py` (чтение `scoring_weights`). - 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#1504
No description provided.