---
pr: 195
title: "chore(assets): update cover without subtitle"
---

## Что сделано
Обновил обложку репозитория (issue #194) — три правки в существующих файлах, без структурных изменений:

1. **`cover.svg` — увеличен icon-слот** — `.opencode/draw-image/templates/cover.svg`: слот `icon` 400×400 → 520×520, позиция x=312 → x=252 (центрирование по 1024-канвасу: (1024−520)/2=252). Заголовок `{{title}}` переведён в lowercase (`opencode config`), font-size 72 → 80, позиция y=870 → y=830 (компенсация роста icon-слота, чтобы title не налезал на логотип).
2. **Опциональные слоты движка сохранены** — `<text>` с `{{subtitle}}` и слоты `sub-icon`/`badge` оставлены в шаблоне. Удаление `<text>` сломало бы тесты `render.optional.test.ts` / `e2e.optional.test.ts` (PR#144), которые проверяют, что пустой subtitle → нет `<text>` элемента. Финальный `assets/cover.png` отренерен БЕЗ subtitle-аргумента — `render.ts` conditional-regex (PR#144) удаляет `<text>` строку с `{{subtitle}}` при falsy `args.subtitle`.
3. **Регенерация `assets/cover.png` + `cover.meta.json`** — перерендерено через `draw-image` CLI (template=cover, icon=opencode, title="opencode config", без subtitle). Новый хеш `646197c4…` (был `de803675…`), `generatedAt` 2026-07-31. Размер 1024×1024 сохранён (density:72, PR#161).

Изменены 3 файла: `cover.svg`, `cover.png`, `cover.meta.json`. README, brand.json, тесты — не затронуты.

## Почему
Финальный вариант обложки (без subtitle, с крупным логотипом 520×520 и lowercase-заголовком) выглядит чище и лучше подходит для showcase на slaid098.dev. Сохранение опциональных слотов движка (`sub-icon`/`badge`/`subtitle`) в шаблоне — сознательное решение: шаблон остаётся универсальным для других репо, а conditional-логика `render.ts` (PR#144) гарантирует, что незаполненные слоты не оставляют пустых элементов в финальном PNG.

## Pending
— (после merge: при желании можно применить тот же шаблон к другим репо slaid098 через `draw-image` — отдельный шаг, как после PR#158)

## Watch out
- **PR body vs фактический diff** — PR body утверждает «Убрал subtitle из шаблона», но `<text>` с `{{subtitle}}` остался в `cover.svg`. Это не расхождение с intent: subtitle убран из финального PNG (через отсутствие аргумента), а не из шаблона. Шаблон сохраняет слот для переиспользования.
- **Хэш `cover.meta.json` изменился** — `computeHash` (sha256) зависит от SVG-контента и `generatedAt`. Все cached PNG будут перерендерены при следующем вызове CLI, если файл удалён (meta.json hash не меняется, но пиксели differ).
- **icon-слот 520×520 при x=252** — нижний край иконки на y=180+520=700, title на y=830 (font-size 80, baseline). Зазор ~130px — достаточно для Geist Sans. Если увеличить icon дальше (>560), title начнёт налезать.