opencode-config/docs/decisions/065-pr-153-block-license-align-readme.md
Sergey 7330f05055
feat(create-readme): block manual License section and align repo README tagline (#153)
* 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>
2026-07-30 18:06:15 +03:00

3.1 KiB
Raw Permalink Blame History

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).