* 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>
37 lines
3.1 KiB
Markdown
37 lines
3.1 KiB
Markdown
# 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).
|