---
pr: 151
title: feat(create-readme): add bilingual tagline and repo_name validation
---

## Что сделано

В `.opencode/tools/create-readme.ts` (mode `create`): параметр `tagline`
переименован в `tagline_en` + добавлен `tagline_ru` (оба required). Рендер
top-блока теперь обёрнут в delimiter-теги `<!-- tagline-en:start/end -->` и
`<!-- tagline-ru:start/end -->` (для парсера slaid098.dev). Добавлена
content-валидация в `execute()` ПОСЛЕ presence-чеков, ДО Quick Start guard:
`repo_name` — lowercase kebab-case regex `^[a-z0-9]+(-[a-z0-9]+)*$`;
`tagline_en` — no Cyrillic (`/[ЁА-яё]/`); `tagline_ru` — require Cyrillic.
`validateReadme`: +4 delimiter'а (tagline-en/ru start/end, итого 12),
+2 пары (EN/RU tagline), +check H1 prefix `# 🚀 `. Schema обновлена
(`tagline_en`/`tagline_ru` с обновлёнными `.describe()`). SKILL.md обновлён:
разделители tagline в список, шаблон top-блока, таблица параметров, пример
вызова, новый раздел 9 «Breaking change: tagline → tagline_en + tagline_ru».
Smoke-тест: 7 сценариев, 16 assertion'ов, все PASS (happy path + validate ok,
repo_name uppercase, repo_name underscore, tagline_en Cyrillic, tagline_ru no
Cyrillic, old tagline breaking, validateReadme на старом README без tagline
delimiterов).

## Почему

Issue #150: slaid098.dev парсер нуждается в отдельном RU tagline (раньше был
только один английский `tagline`). Валидация гарантирует: `repo_name` —
строго английский kebab-case (lowercase, без uppercase/underscore/пробелов);
`tagline_en` — реально на английском (без кириллицы); `tagline_ru` — реально
на русском (содержит кириллицу, не копия английского). Breaking change:
параметр `tagline` удалён — миграция на `tagline_en` + `tagline_ru`.

## Pending

Регенерация существующих README в репо slaid098 через `create-readme` с
новыми параметрами (`tagline_en`/`tagline_ru`) — отдельный шаг после merge
(PR/issue вне scope #150). Существующие README без tagline delimiter-тегов
станут invalid при `validate` (ожидаемо).

## Watch out

**BREAKING CHANGE**: параметр `tagline` удалён из `create-readme` (mode
`create`). Старые вызовы с `tagline` падают с `❌ tagline_en is required for
create mode`. Миграция: заменить `tagline` на `tagline_en` + добавить
`tagline_ru`. Существующие README без tagline delimiter-тегов станут
invalid при `validate` (`Missing <!-- tagline-en:start --> delimiter`) —
регенерация отдельный шаг (см. Pending).

Порядок валидации в `execute()` (create mode): presence-чеки (required
Record) → content-чеки (regex: repo_name, tagline_en, tagline_ru) → Quick
Start guard (PR #149). Content-чеки используют non-null assertion `args.x!`
— безопасно, т.к. presence-чеки уже прошли. `validateReadme` НЕ проверяет
repo_name regex — только create mode (legacy README с uppercase repo_name не
должны ломаться). H1 prefix check `# 🚀 ` — substring-чек, не строгий (ищет
presence префикса, не валидирует что после него). ADR-064 отмечает
backward-compat альтернативу «оставить tagline alias» — отвергнута (явный
breaking лучше молчаливого дуализма).