* feat(create-readme): add bilingual tagline and repo_name validation * docs(repo-readme): bilingual tagline + repo_name validation rules * docs(handoff): add handoff and ADR-064 for bilingual tagline * docs(handoff): set PR number * docs(project-map): update after PR#151 bilingual tagline changes --------- Co-authored-by: opencode-agent <agent@opencode.local>
3.9 KiB
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 лучше молчаливого дуализма).