intents.py: при наличии headline подавляется честная пометка о пустом разделе product_tz (what_to_build) #1586

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

Severity: low · Категория: logic/report-completeness · Файл: backend/app/services/chat/intents.py:254-257

Файл: /Users/anton/Птица/gendesign/backend/app/services/chat/intents.py:254-257. Guard if len(sections_used) == 1 and not any(section.get(k) for k in ('obj_class','mix','commercial','usp','summary')) должен ловить случай «product_tz присутствует, но все поля пусты» и добавлять «Раздел рекомендации продукта в отчёте пуст». Но sections_used==['product_tz'] (len 1) только когда у exec_summary НЕТ headline; при наличии headline sections_used==['exec_summary','product_tz'] (len 2) и условие ложно. ИМПАКТ (low): на intent what_to_build при verdict-headline + целиком пустом product_tz ответ покажет только «Вердикт: ...» без честного признания отсутствия продуктовой рекомендации — нарушение graceful-контракта модуля (числа/секции честно, отсутствующее → честно). ФИКС: завязать условие на пустоту самой секции product_tz, а не на длину sections_used, напр.: if isinstance(section, dict) and not any(section.get(k) for k in ('obj_class','mix','commercial','usp','summary')): lines.append('Раздел рекомендации продукта в отчёте пуст.') (проверка выполняется после ветки if not isinstance(section, dict) на line 228, поэтому section гарантированно dict).

Почему баг: Когда у участка есть verdict-headline, но раздел продукта product_tz целиком пуст (obj_class/mix/commercial/usp/summary отсутствуют), на intent what_to_build ответ покажет только «Вердикт: ...» и НЕ добавит честное «Раздел рекомендации продукта в отчёте пуст». Пользователь, спросивший «что строить», получает обрезанный ответ без признания, что именно продуктовая рекомендация в отчёте отсутствует. Условие должно опираться на пустоту product_tz, а не на длину общего списка секций (которая зависит от наличия headline).

Как чинить: Заменить len(sections_used) == 1 на проверку именно пустоты product_tz: завести флаг product_empty = not any(section.get(k) for k in (...)) после append('product_tz') и добавлять строку при product_empty независимо от наличия headline.


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

**Severity:** low · **Категория:** logic/report-completeness · **Файл:** `backend/app/services/chat/intents.py:254-257` Файл: /Users/anton/Птица/gendesign/backend/app/services/chat/intents.py:254-257. Guard `if len(sections_used) == 1 and not any(section.get(k) for k in ('obj_class','mix','commercial','usp','summary'))` должен ловить случай «product_tz присутствует, но все поля пусты» и добавлять «Раздел рекомендации продукта в отчёте пуст». Но sections_used==['product_tz'] (len 1) только когда у exec_summary НЕТ headline; при наличии headline sections_used==['exec_summary','product_tz'] (len 2) и условие ложно. ИМПАКТ (low): на intent what_to_build при verdict-headline + целиком пустом product_tz ответ покажет только «Вердикт: ...» без честного признания отсутствия продуктовой рекомендации — нарушение graceful-контракта модуля (числа/секции честно, отсутствующее → честно). ФИКС: завязать условие на пустоту самой секции product_tz, а не на длину sections_used, напр.: `if isinstance(section, dict) and not any(section.get(k) for k in ('obj_class','mix','commercial','usp','summary')): lines.append('Раздел рекомендации продукта в отчёте пуст.')` (проверка выполняется после ветки `if not isinstance(section, dict)` на line 228, поэтому section гарантированно dict). **Почему баг:** Когда у участка есть verdict-headline, но раздел продукта product_tz целиком пуст (obj_class/mix/commercial/usp/summary отсутствуют), на intent what_to_build ответ покажет только «Вердикт: ...» и НЕ добавит честное «Раздел рекомендации продукта в отчёте пуст». Пользователь, спросивший «что строить», получает обрезанный ответ без признания, что именно продуктовая рекомендация в отчёте отсутствует. Условие должно опираться на пустоту product_tz, а не на длину общего списка секций (которая зависит от наличия headline). **Как чинить:** Заменить `len(sections_used) == 1` на проверку именно пустоты product_tz: завести флаг `product_empty = not any(section.get(k) for k in (...))` после append('product_tz') и добавлять строку при product_empty независимо от наличия headline. --- <sub>deep-audit backend v2 (после PR #1543) · verify+harden, confidence 0.8 · unit B18</sub>
bot-backend added the
week ревью 1
label 2026-06-16 17:11:26 +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#1586
No description provided.