* 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>
3.8 KiB
| pr | title |
|---|---|
| 195 | chore(assets): update cover without subtitle |
Что сделано
Обновил обложку репозитория (issue #194) — три правки в существующих файлах, без структурных изменений:
cover.svg— увеличен icon-слот —.opencode/draw-image/templates/cover.svg: слотicon400×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 не налезал на логотип).- Опциональные слоты движка сохранены —
<text>с{{subtitle}}и слотыsub-icon/badgeоставлены в шаблоне. Удаление<text>сломало бы тестыrender.optional.test.ts/e2e.optional.test.ts(PR#144), которые проверяют, что пустой subtitle → нет<text>элемента. Финальныйassets/cover.pngотренерен БЕЗ subtitle-аргумента —render.tsconditional-regex (PR#144) удаляет<text>строку с{{subtitle}}при falsyargs.subtitle. - Регенерация
assets/cover.png+cover.meta.json— перерендерено черезdraw-imageCLI (template=cover, icon=opencode, title="opencode config", без subtitle). Новый хеш646197c4…(былde803675…),generatedAt2026-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 начнёт налезать.