diff --git a/.opencode/draw-image/templates/cover.svg b/.opencode/draw-image/templates/cover.svg index 3f6e2d7..8f206ee 100644 --- a/.opencode/draw-image/templates/cover.svg +++ b/.opencode/draw-image/templates/cover.svg @@ -1,8 +1,8 @@ - + - {{title}} + {{title}} {{subtitle}} \ No newline at end of file diff --git a/assets/cover.meta.json b/assets/cover.meta.json index 2c3121b..90fcd24 100644 --- a/assets/cover.meta.json +++ b/assets/cover.meta.json @@ -1,5 +1,5 @@ { - "hash": "de8036758f935399699ef01446e3b9c8d23d211863dae052932d0ffc1a298120", - "generatedAt": "2026-07-30T20:22:54.851Z", + "hash": "646197c49cf21f46fcaa8fef8d602dce5d35a51556d969c7e3977fa59486407f", + "generatedAt": "2026-07-31T21:56:42.585Z", "size": 1024 } diff --git a/assets/cover.png b/assets/cover.png index acd763f..b9ca403 100644 Binary files a/assets/cover.png and b/assets/cover.png differ diff --git a/docs/decisions/086-pr-195-update-cover-without-subtitle.md b/docs/decisions/086-pr-195-update-cover-without-subtitle.md new file mode 100644 index 0000000..abf3769 --- /dev/null +++ b/docs/decisions/086-pr-195-update-cover-without-subtitle.md @@ -0,0 +1,21 @@ +# ADR-086: Cover without subtitle — larger icon + lowercase title (PR#195) + +## Статус +Accepted (2026-07-31) + +## Контекст +Обложка репозитория (issue #194) нуждалась в визуальном обновлении: логотип OpenCode казался мелким (400×400 на 1024-канвасе), заголовок `opencode config` в Title Case выглядел тяжеловесно для showcase-карточки на slaid098.dev. Требовался более чистый, минималистичный вариант без subtitle. + +Рассматривались варианты: +- Увеличить icon + убрать subtitle из шаблона (удалить ``) — ломает тесты `render.optional.test.ts` / `e2e.optional.test.ts` (PR#144), проверяющие conditional-удаление пустого subtitle. +- Увеличить icon + оставить subtitle-слот в шаблоне, рендерить PNG без subtitle-аргумента — conditional-логика `render.ts` (PR#144) удаляет `` строку при falsy `args.subtitle`, шаблон остаётся универсальным. + +## Решение +1. **icon-слот 400×400 → 520×520**, позиция x=312 → x=252 (центрирование: (1024−520)/2=252), y=180 без изменений. Нижний край иконки на y=700. +2. **title: lowercase `opencode config`**, font-size 72 → 80, позиция y=870 → y=830 (компенсация роста icon-слота, зазор ~130px до baseline). +3. **Опциональные слоты движка сохранены** в `cover.svg` (`sub-icon`, `badge`, `{{subtitle}}`) — шаблон остаётся переиспользуемым для других репо. Финальный `assets/cover.png` рендерится без subtitle-аргумента → conditional-regex `render.ts` (PR#144) удаляет `` строку с `{{subtitle}}` из финального SVG до рендера. Тесты PR#144 не затронуты. + +## Альтернативы +- **Удалить `` с `{{subtitle}}` из шаблона**: отвергнуто — ломает `render.optional.test.ts` / `e2e.optional.test.ts` (PR#144), которые проверяют, что пустой subtitle → нет `` элемента через conditional-regex. Удаление слота из шаблона делает эти тесты бессмысленными (regex нечего удалять). +- **Уменьшить icon вместо увеличения**: отвергнуто — мелкий логотип (400×400) терялся на 1024-канвасе, визуально слабый для showcase-карточки. +- **Title Case заголовок (`Opencode Config`)**: отвергнуто — lowercase выглядит чище и современнее для dev-tooling репозитория, соответствует brand-стилю slaid098. \ No newline at end of file diff --git a/docs/handoff/pr-195-update-cover-without-subtitle.md b/docs/handoff/pr-195-update-cover-without-subtitle.md new file mode 100644 index 0000000..afc91b7 --- /dev/null +++ b/docs/handoff/pr-195-update-cover-without-subtitle.md @@ -0,0 +1,24 @@ +--- +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. **Опциональные слоты движка сохранены** — `` с `{{subtitle}}` и слоты `sub-icon`/`badge` оставлены в шаблоне. Удаление `` сломало бы тесты `render.optional.test.ts` / `e2e.optional.test.ts` (PR#144), которые проверяют, что пустой subtitle → нет `` элемента. Финальный `assets/cover.png` отренерен БЕЗ subtitle-аргумента — `render.ts` conditional-regex (PR#144) удаляет `` строку с `{{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 из шаблона», но `` с `{{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 начнёт налезать. \ No newline at end of file