dry_run objective-backfill возвращает auto_accepted=0 вместо числа потенциальных auto-accept — preview вводит в заблуждение #1587

Closed
opened 2026-06-16 17:11:27 +00:00 by bot-backend · 0 comments
Collaborator

Severity: low · Категория: misleading-report · Файл: backend/app/services/etl/objective_backfill.py:165-171

Файл: backend/app/services/etl/objective_backfill.py:165-171.

В dry_run ветке логируется корректное число (len(auto)), но в ответ возвращается {"auto_accepted": 0, "review_queue": len(review), "skipped": 0}. Эндпоинт POST /api/v1/admin/etl/objective-backfill (admin_etl.py:38-104, dry_run помечен «Preview без insertions», строка 41) отдаёт этот dict как тело ответа; docstring Returns (admin_etl.py:70) описывает auto_accepted как «сколько строк вставлено» — ключевую preview-метрику. Оператор, гоняющий dry-run перед боевым прогоном #307 (P0), видит auto_accepted=0 и не может оценить, сколько маппингов будет создано — суть preview теряется.

Импакт: только введение в заблуждение по API-контракту (не порча данных, в БД ничего не пишется).

Фикс: в dry_run возвращать {"auto_accepted": len(auto), "review_queue": len(review), "skipped": 0} (число, которое было бы принято, без вставки).

Почему баг: Смысл dry-run/preview — показать, сколько строк БУДЕТ вставлено, не вставляя их. Возврат auto_accepted=0 скрывает фактическое число auto-accept кандидатов (len(auto)) от вызывающего по API: в ответе видно только review_queue, а ключевая метрика «сколько примем» теряется. Оператор, гоняющий dry-run перед боевым прогоном (#307 P0), получает 0 и не может оценить эффект. Это «ложь в отчёте» по API-контракту (в лог число попадает, в ответ — нет).

Как чинить: В dry_run возвращать реальное число: return {"auto_accepted": len(auto), "review_queue": len(review), "skipped": 0} (опционально добавить флаг dry_run=True в dict, чтобы потребитель не принял preview за факт вставки).


deep-audit backend v2 (после PR #1543) · verify+harden, confidence 0.8 · unit B19

**Severity:** low · **Категория:** misleading-report · **Файл:** `backend/app/services/etl/objective_backfill.py:165-171` Файл: backend/app/services/etl/objective_backfill.py:165-171. В dry_run ветке логируется корректное число (`len(auto)`), но в ответ возвращается `{"auto_accepted": 0, "review_queue": len(review), "skipped": 0}`. Эндпоинт POST /api/v1/admin/etl/objective-backfill (admin_etl.py:38-104, dry_run помечен «Preview без insertions», строка 41) отдаёт этот dict как тело ответа; docstring Returns (admin_etl.py:70) описывает auto_accepted как «сколько строк вставлено» — ключевую preview-метрику. Оператор, гоняющий dry-run перед боевым прогоном #307 (P0), видит auto_accepted=0 и не может оценить, сколько маппингов будет создано — суть preview теряется. Импакт: только введение в заблуждение по API-контракту (не порча данных, в БД ничего не пишется). Фикс: в dry_run возвращать `{"auto_accepted": len(auto), "review_queue": len(review), "skipped": 0}` (число, которое было бы принято, без вставки). **Почему баг:** Смысл dry-run/preview — показать, сколько строк БУДЕТ вставлено, не вставляя их. Возврат auto_accepted=0 скрывает фактическое число auto-accept кандидатов (len(auto)) от вызывающего по API: в ответе видно только review_queue, а ключевая метрика «сколько примем» теряется. Оператор, гоняющий dry-run перед боевым прогоном (#307 P0), получает 0 и не может оценить эффект. Это «ложь в отчёте» по API-контракту (в лог число попадает, в ответ — нет). **Как чинить:** В dry_run возвращать реальное число: `return {"auto_accepted": len(auto), "review_queue": len(review), "skipped": 0}` (опционально добавить флаг dry_run=True в dict, чтобы потребитель не принял preview за факт вставки). --- <sub>deep-audit backend v2 (после PR #1543) · verify+harden, confidence 0.8 · unit B19</sub>
bot-backend added the
week ревью 1
label 2026-06-16 17:11:27 +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#1587
No description provided.