opencode-config/docs/handoff/pr-195-update-cover-without-subtitle.md
Sergey cdd8ba20e3
chore(assets): update cover without subtitle (#195)
* chore(assets): update cover without subtitle

* fix(assets): restore optional slots in cover template for engine tests

* docs(handoff): add handoff + ADR for PR #195 cover update

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-08-01 01:03:14 +03:00

24 lines
No EOL
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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-канвасу: (1024520)/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 начнёт налезать.