# ADR-088: /cover command — hardcoded Lime standard + VERCEL_TOKEN placeholder (PR#199)

## Статус
Accepted (2026-07-31)

## Контекст
Генерация брендового кавера 1024×1024 для репозиториев slaid098 ранее требовала повторного объяснения Lime-стиля (палитра, lowercase-заголовок, отсутствие subtitle) в каждом новом чате — детерминированного способа одной командой не было (issue #198). `draw-image` tool (PR#133) и `repo-readme` skill (PR#158) уже формируют cover-pipeline, но стиль оставался на усмотрение агента/пользователя, что рисковало сломать единый вид витрины slaid098.dev кастомной палитрой или путём вывода.

Дополнительно: будущая интеграция с Vercel потребует токен `VERCEL_TOKEN`, но код ещё не готов — нужен placeholder в `.env.example`, чтобы переменную не забыть при подключении (доп. scope, одобренный пользователем в issue #198).

Рассматривались варианты:
- Сделать `/cover` параметризуемой командой (палитра/шаблон/subtitle — на выбор пользователя): ломает единый бренд-стандарт витрины, пользователь может вывести не-Lime кавер.
- Вынести стиль в отдельный skill `cover`: issue #198 явно выводит skill вне scope — команда должна быть самодостаточной.
- Не добавлять `VERCEL_TOKEN` пока код не готов: риск забыть переменную при будущей интеграции.

## Решение
1. **Команда `/cover`** (`.opencode/commands/cover.md`, frontmatter `agent: build`) — самодостаточная, без отдельного skill. Стиль **захардкожен** и НЕ спрашивается/НЕ переопределяется:
   - `template` = `cover` (единственный шаблон в `draw-image/templates/cover.svg`).
   - Палитра = Lime из `draw-image/brand.json` (base `#0a0a0a`, accent `#ccff00`, fg `#ededed`).
   - `title`: ровно ОДИН заголовок, lowercase English, авто-деривация из имени репо (`opencode-voice-dictation` → `opencode voice dictation`).
   - `subtitle`: **запрещён** стандартом — передача = ошибка команды.
   - `out` = `assets/cover.png` (глобальный путь для витрины, без исключений).
2. **Слоты**: `icon` (обязательный — Lucide из `icons/lucide/` или brand-logo из `brand-logos/`), `sub-icon` (опц.), `badge` (опц.).
3. **Flow**: read repo → infer title/icon/sub-icon → ask user 2-3 content-вопроса (НЕ по стилю) → `draw-image` tool → validate README `![Cover](assets/cover.png)`.
4. **Extension-механизм**: команда НЕ хардкодит бренды — OpenCode упомянут только как пример. Расширение = добавление brand-logo SVG в `draw-image/brand-logos/`, а не изменение команды.
5. **`VERCEL_TOKEN` в `.env.example`** — optional-плейсхолдер `VERCEL_TOKEN=` после секции Cloudflare Tunnel, в стиле соседних optional-секций. В коде пока не задействован — placeholder-пример. Существующие записи и тесты `tests/test_permissions.py` не затронуты.

## Альтернативы
- **Параметризуемая команда (палитра/шаблон/subtitle на выбор)**: отвергнуто — ломает единый бренд-стандарт витрины slaid098.dev, пользователь может вывести не-Lime кавер или добавить subtitle. Захардкоженный стандарт гарантирует консистентность.
- **Отдельный skill `cover`**: отвергнуто — issue #198 явно выводит skill вне scope. Команда самодостаточна (frontmatter + инструкции в одном файле), skill избыточен.
- **Не добавлять `VERCEL_TOKEN` до готовности кода**: отвергнуто — placeholder фиксирует намерение и стиль (optional-секция), чтобы переменную не забыть при будущей интеграции. Добавление пустого плейсхолдера не ломает существующие тесты и записи.
