opencode-config/docs/handoff/pr-151-bilingual-tagline.md
Sergey 6c80eb8458
feat(create-readme): add bilingual tagline and repo_name validation (#151)
* 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>
2026-07-30 04:50:50 +03:00

3.9 KiB
Raw Blame History


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 лучше молчаливого дуализма).