WEB-356 · Задача · — · web
Ребренд W2: подключить лого-слот (logo.png) к визуальным точкам — сейчас сайдбар рендерит текст-инициал, PNG не используется
Закрыт
P2
ведёт: —
Суть
Обнаружено при приёмке посадки 47 (owner прислал скрин: свёрнутый сайдбар показывал «N» — старый SW-кэш; на свежей загрузке — «S»).
КОРЕНЬ: REBRANDW1 создала лого-слот public/brand/logo.png + src/lib/brand/logo.ts, НО сайдбар (src/components/layout/Sidebar.tsx:3005-3007) по-прежнему рендерит ТЕКСТОВЫЙ инициал `{t['sidebar.brand']?.[0] || 'A'}` в CSS-круге (bg-primary gradient), а НЕ <img src=logo.png>. Значит обещание owner «подменишь logo.png — обновится везде» пока НЕ выполняется для сайдбара (там текст-буква 'S').
Проверено в браузере: brandImgs=[] (нет <img> лого в сайдбаре), логотип = div с текстом. PDF/email — проверить аналогично (там logo.ts slot заявлен, но убедиться что <img>/встраивание реальное).
W2: во ВСЕХ точках, где owner ждёт подмены файла (сайдбар свёрнутый+развёрнутый, PDF-шапка, email-header, OG, favicon?), рендерить logo.png через logo.ts-слот с graceful fallback на текст-инициал BRAND_NAME[0] (если PNG не загрузился). Тест: подменить logo.png → все точки берут новый файл. Owner подменит одним файлом.
Связки: WEB-353 (ребренд W1 done), src/lib/brand/logo.ts, public/brand/logo.png.
Доказательства
[25.08 ~13:35] Взято в работу: волна web356 (sol xhigh) на A1, worktree wt-web356 от c3fb44e (прод-линия посадки 53). Скоуп: инвентарь всех бренд-точек (сайдбар x2, PDF, email, OG, favicon), рендер через logo.ts-слот с fallback на инициал, негатив-тест на битый PNG, scoped tsc. Сборка — в посадку.
[25.08 ~14:40] СДЕЛАНО волной web356: commit 6629675 (wt-web356 от c3fb44e). Sidebar обе ветки + landing → общий BrandLogo (<img src=/brand/logo.png>, onError → инициал, битый <img> удаляется); PDF: HTML-рендер и pdf-lib переживают отсутствие/битый PNG (initial-layer, logo=null → инициал), экспорт не падает. ЧЕСТНЫЙ скоуп: email-header графической точки НЕ имеет (не добавляли — меняло бы deliverability), OG — отдельный asset 1200x630 (решение owner), file-convention favicon.ico не менялся. Тесты 25 pass/1 skipped (Chromium optional), scoped tsc rc=0. → review; визуальная приёмка глазами в браузере — после посадки 54 (подменить logo.png и пройти точки).
[25.08 ~15:00Z] В ПРОДЕ посадкой 54: релиз arm64-l59-20260825T134818Z, v4-2857a88 (merge-батч 2857a88, все проверки зелёные, Gate D сохранён ON). Визуальная приёмка лого-точек (подмена logo.png) — можно проводить.
📎 Трейл: отчёт /home/ubuntu/waves/WEB356-REPORT.md; ветка web356@6629675 (в проде 54, merge c836ee0). Компонент: src/components/brand/BrandLogo (+тесты).
[2026-08-26 07:05Z] acc356 NO-GO: лого подключено к UI/email/PDF точкам, но SVG-лого не принимается PDF-рендерером (UI и email <img> принимают). Фикс web356fix: растеризация SVG перед вставкой ЛИБО честный fallback без падения.
[2026-08-26 08:30Z] acc356b NO-GO (детали в ACC356B-REPORT.md) — SVG-путь всё ещё не закрыт полностью. Следующий фикс.
[2026-08-26 07:48Z] ФИКС web356fix2: targeted 36 PASS/0 FAIL/1 SKIP, UI+email 5 PASS. -> review (acc356c: безопасность SVG — script/внешние ссылки/XXE, SVG-бомба, и проверка что скрывает SKIP-тест).
[2026-08-26 08:12Z] ✅ ПРИНЯТ acc356c (третья приёмка): GO — все native PDF, HTML-PDF, UI/email и SECURITY-проверки прошли (SVG со скриптом/внешними ссылками/XXE отклоняются, SVG-бомба не вешает рендер); единственный SKIP — опциональный Chromium-render. -> done, ждёт посадки 58.
Починено в
pending-l58
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-356","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-26T08:11:59.440Z