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>
This commit is contained in:
parent
f0701558d3
commit
cdd8ba20e3
5 changed files with 49 additions and 4 deletions
|
|
@ -1,8 +1,8 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024">
|
||||
<!-- slot: name=icon, x=312, y=180, w=400, h=400, fit=contain, recolor=accent -->
|
||||
<!-- slot: name=icon, x=252, y=180, w=520, h=520, fit=contain, recolor=accent -->
|
||||
<!-- slot: name=sub-icon, x=412, y=600, w=200, h=200, fit=contain, recolor=accent -->
|
||||
<!-- slot: name=badge, x=780, y=780, w=180, h=180, fit=contain, recolor=none, bg=surface, border=accent, radius=0.5 -->
|
||||
<rect width="1024" height="1024" fill="{{base}}" />
|
||||
<text x="512" y="870" font-family="Geist Sans, sans-serif" font-size="72" font-weight="700" fill="{{fg}}" text-anchor="middle">{{title}}</text>
|
||||
<text x="512" y="830" font-family="Geist Sans, sans-serif" font-size="80" font-weight="700" fill="{{fg}}" text-anchor="middle">{{title}}</text>
|
||||
<text x="512" y="930" font-family="Geist Sans, sans-serif" font-size="36" font-weight="400" fill="{{muted}}" text-anchor="middle">{{subtitle}}</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 744 B After Width: | Height: | Size: 744 B |
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"hash": "de8036758f935399699ef01446e3b9c8d23d211863dae052932d0ffc1a298120",
|
||||
"generatedAt": "2026-07-30T20:22:54.851Z",
|
||||
"hash": "646197c49cf21f46fcaa8fef8d602dce5d35a51556d969c7e3977fa59486407f",
|
||||
"generatedAt": "2026-07-31T21:56:42.585Z",
|
||||
"size": 1024
|
||||
}
|
||||
|
|
|
|||
BIN
assets/cover.png
BIN
assets/cover.png
Binary file not shown.
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 18 KiB |
21
docs/decisions/086-pr-195-update-cover-without-subtitle.md
Normal file
21
docs/decisions/086-pr-195-update-cover-without-subtitle.md
Normal file
|
|
@ -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 из шаблона (удалить `<text>`) — ломает тесты `render.optional.test.ts` / `e2e.optional.test.ts` (PR#144), проверяющие conditional-удаление пустого subtitle.
|
||||
- Увеличить icon + оставить subtitle-слот в шаблоне, рендерить PNG без subtitle-аргумента — conditional-логика `render.ts` (PR#144) удаляет `<text>` строку при 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) удаляет `<text>` строку с `{{subtitle}}` из финального SVG до рендера. Тесты PR#144 не затронуты.
|
||||
|
||||
## Альтернативы
|
||||
- **Удалить `<text>` с `{{subtitle}}` из шаблона**: отвергнуто — ломает `render.optional.test.ts` / `e2e.optional.test.ts` (PR#144), которые проверяют, что пустой subtitle → нет `<text>` элемента через conditional-regex. Удаление слота из шаблона делает эти тесты бессмысленными (regex нечего удалять).
|
||||
- **Уменьшить icon вместо увеличения**: отвергнуто — мелкий логотип (400×400) терялся на 1024-канвасе, визуально слабый для showcase-карточки.
|
||||
- **Title Case заголовок (`Opencode Config`)**: отвергнуто — lowercase выглядит чище и современнее для dev-tooling репозитория, соответствует brand-стилю slaid098.
|
||||
24
docs/handoff/pr-195-update-cover-without-subtitle.md
Normal file
24
docs/handoff/pr-195-update-cover-without-subtitle.md
Normal file
|
|
@ -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. **Опциональные слоты движка сохранены** — `<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 начнёт налезать.
|
||||
Loading…
Add table
Reference in a new issue