report_md._md_kv_lines: многострочное значение (напр. product_tz.summary «Резюме») ломает Markdown-буллет — нет свёртки переводов строк #1632

Closed
opened 2026-06-16 18:44:25 +00:00 by bot-backend · 0 comments
Collaborator

Severity: low · Категория: порча разметки рендера · Файл: backend/app/services/exporters/report_md.py:125-129, 297-299

Файл: backend/app/services/exporters/report_md.py:125-129. _md_kv_lines формирует - **{label}:** {_fmt(value)} без вычистки \n/\r, в отличие от _md_cell (стр.97-98), где переводы строк сворачиваются в пробел. В _build_product_tz (стр.283-286, 299) через _md_kv_lines выводится head_pairs с ("Резюме", product.get("summary")), где summary — потенциально многострочный текст. Импакт: при наличии \n в summary (или любом value) Markdown-буллет разрывается — вторая и последующие строки выпадают из списка / превращаются в отдельный абзац, ломая структуру §13.4 отчёта. Фикс: в _md_kv_lines сворачивать переводы строк, например _fmt(value).replace("\n"," ").replace("\r"," "), по аналогии с _md_cell.

Почему баг: Если product_tz.summary (или любой value в _md_kv_lines) содержит \n, Markdown-буллет разорвётся: вторая и последующие строки выпадут из списка и/или превратятся в отдельный абзац/код-блок, ломая структуру отчёта. _md_cell эту проблему уже решает свёрткой переводов строк, но _md_kv_lines — нет.

Как чинить: В _md_kv_lines свернуть переводы строк в пробел как в _md_cell: _fmt(value).replace("\n", " ").replace("\r", " ").


deep-audit backend v2 (2-й проход, после PR #1543) · verify+harden, confidence 0.78 · unit B20

**Severity:** low · **Категория:** порча разметки рендера · **Файл:** `backend/app/services/exporters/report_md.py:125-129, 297-299` Файл: backend/app/services/exporters/report_md.py:125-129. `_md_kv_lines` формирует `- **{label}:** {_fmt(value)}` без вычистки \n/\r, в отличие от _md_cell (стр.97-98), где переводы строк сворачиваются в пробел. В _build_product_tz (стр.283-286, 299) через _md_kv_lines выводится head_pairs с ("Резюме", product.get("summary")), где summary — потенциально многострочный текст. Импакт: при наличии \n в summary (или любом value) Markdown-буллет разрывается — вторая и последующие строки выпадают из списка / превращаются в отдельный абзац, ломая структуру §13.4 отчёта. Фикс: в _md_kv_lines сворачивать переводы строк, например `_fmt(value).replace("\n"," ").replace("\r"," ")`, по аналогии с _md_cell. **Почему баг:** Если product_tz.summary (или любой value в _md_kv_lines) содержит `\n`, Markdown-буллет разорвётся: вторая и последующие строки выпадут из списка и/или превратятся в отдельный абзац/код-блок, ломая структуру отчёта. `_md_cell` эту проблему уже решает свёрткой переводов строк, но `_md_kv_lines` — нет. **Как чинить:** В _md_kv_lines свернуть переводы строк в пробел как в _md_cell: `_fmt(value).replace("\n", " ").replace("\r", " ")`. --- <sub>deep-audit backend v2 (2-й проход, после PR #1543) · verify+harden, confidence 0.78 · unit B20</sub>
bot-backend added the
week ревью 1
label 2026-06-16 18:44:25 +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#1632
No description provided.