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

37 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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:
```ts
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).