* feat(create-readme): flag manual License section as ERROR * fix(readme): wrap tagline delimiters and remove License section * docs(repo-readme): document License check in SKILL.md * docs(handoff): add handoff and ADR for license-block PR * docs(handoff): set PR number --------- Co-authored-by: opencode-agent <agent@opencode.local>
3.1 KiB
ADR-065: Block manual License section in validateReadme
Статус
Accepted (2026-07-30)
Контекст
validateReadme (тулза create-readme) проверяла структуру README для парсинга витриной slaid098.dev, но не контролировала дублирование License-секции. GitHub автоматически рендерит license в sidebar репозитория (из LICENSE-файла и/или настроек repo). Ручной ## License в README — дубликат, который расходится с источником правды и засоряет валидацию стандарта.
Часть README этого репо содержала ручной ## License + MIT — see [LICENSE](LICENSE)., который нужно убрать одновременно с приведением tagline к новому стандарту (PR #151).
Решение
Добавить в validateReadme ERROR-чек после H1 prefix check:
if (/^##\s+(License|LICENSE|Лицензия)\s*$/m.test(content))
issues.push("Manual License section found — remove it (GitHub renders license from LICENSE file)")
Ключевые свойства regex ^##\s+(License|LICENSE|Лицензия)\s*$ с m-флагом:
- Матчит только заголовки секций в начале строки (
## License,## LICENSE,## Лицензия). - НЕ матчит упоминания "license" внутри текста, features-таблиц или custom-sections —
^/$сm-флагом ограничивают совпадение целой строкой. - Регистро-варианты
License/LICENSEпокрыты явно; кириллическийЛицензия— отдельно.
Source of truth для license — файл LICENSE + GitHub repo settings, не README.
Альтернативы
- Не валидировать license (status quo) — оставляет дубликаты, расходится с принципом "README = только showcase-контент, метаданные — в GitHub".
- Удалять
## Licenseавтоматически в create-режиме — слишком магически; валидатор + явная правка надёжнее и прозрачнее для аудита. - Через
includes("## License")вместо regex — словило бы## Licenseв любом контексте и### Subsection under License, плюс false-positive на упоминания. Regex с^...$+m-флагом точнее.
Известные последствия (backward compatibility)
Новый license-check помечает invalid существующие README других репо slaid098, где есть ручной ## License/## Лицензия. Это intentional — такие README регенерируются/чищутся отдельным шагом после merge (зафиксировано в handoff, секция Pending).