Рефакторинг рендера [этап 6/6]: косметика (обёртка поста, константы стилей, чистка) #33

Closed
opened 2026-07-05 20:28:39 +03:00 by agent_vscode · 0 comments
Collaborator

Часть эпика «Рефакторинг пайплайна рендера». Спека: plans/2026-07-05-render-pipeline-refactor.md (v5), раздел «Этап 6». Зависимости: этапы 4 (#31) и 5 (#32) завершены. Выполняется ПОСЛЕДНИМ. Line-refs действительны для f9550d8.

Задачи

  1. _wrap_post_html(body, footer) -> str — единая обёртка <div class="message-body">…</div>\n<div class="message-footer">…</div>; сейчас три копии: PostParser._format_html и обе ветки _render_messages_groups (single и merged).
  2. Инлайн-стили 400px/200px → константы модуля (если не закрыто этапом 5 через RENDERERS).
  3. _trim_messages_groups → инлайн-срез [:limit] в _render_pipeline; поправить модульный импорт в test_stage4_eventloop.py (пометка «API relocation, no behavior change»).
  4. Пройтись по комментариям «stage-4»/«4.4 coverage map» в post_parser и rss_generator — переписать под новую границу санитайза (English).
  5. Фильтр exclude_flags → list comprehension с вынесенным предикатом; фильтр exclude_text — оставить циклом или обернуть предикатом, но excluded_post-debug-лог СОХРАНИТЬ (rss_generator.py:316 — единственный след, почему пост выпал из фида).

Ограничение

flags.append(...) не выносить из _extract_flags (эндпоинт /flags парсит исходник через inspect.getsource) — актуально и для косметики.

DoD

  • Обёртка body/footer определена в одном месте;
  • excluded_post-лог жив (тест: пост, отфильтрованный exclude_text, оставляет debug-запись);
  • golden БЕЗ изменений (этап чисто косметический — байты фида не меняются);
  • pytest полностью зелёный.

Общие правила эпика

Ветка refactor/render-pipeline от f9550d8; один этап = один коммит; комментарии — English; точечные правки.

Часть эпика «Рефакторинг пайплайна рендера». Спека: `plans/2026-07-05-render-pipeline-refactor.md` (v5), раздел «Этап 6». Зависимости: этапы 4 (#31) и 5 (#32) завершены. Выполняется ПОСЛЕДНИМ. Line-refs действительны для f9550d8. ## Задачи 1. `_wrap_post_html(body, footer) -> str` — единая обёртка `<div class="message-body">…</div>\n<div class="message-footer">…</div>`; сейчас три копии: `PostParser._format_html` и обе ветки `_render_messages_groups` (single и merged). 2. Инлайн-стили 400px/200px → константы модуля (если не закрыто этапом 5 через RENDERERS). 3. `_trim_messages_groups` → инлайн-срез `[:limit]` в `_render_pipeline`; поправить модульный импорт в test_stage4_eventloop.py (пометка «API relocation, no behavior change»). 4. Пройтись по комментариям «stage-4»/«4.4 coverage map» в post_parser и rss_generator — переписать под новую границу санитайза (English). 5. Фильтр exclude_flags → list comprehension с вынесенным предикатом; фильтр exclude_text — оставить циклом или обернуть предикатом, но `excluded_post`-debug-лог СОХРАНИТЬ (rss_generator.py:316 — единственный след, почему пост выпал из фида). ## Ограничение `flags.append(...)` не выносить из `_extract_flags` (эндпоинт `/flags` парсит исходник через `inspect.getsource`) — актуально и для косметики. ## DoD - Обёртка body/footer определена в одном месте; - `excluded_post`-лог жив (тест: пост, отфильтрованный exclude_text, оставляет debug-запись); - golden БЕЗ изменений (этап чисто косметический — байты фида не меняются); - pytest полностью зелёный. ## Общие правила эпика Ветка `refactor/render-pipeline` от f9550d8; один этап = один коммит; комментарии — English; точечные правки.
Sign in to join this conversation.