# RazorConsole — Контрибьюция

## Начало работы

- **Для крупных PR, рефакторингов, новых фич** — сначала создай Issue для обсуждения
- **Discord:** https://discord.gg/DphHAnJxCM — мейнтейнеры активны там

## Настройка окружения разработки

### Требования

- .NET 8.0 или 9.0 SDK
- Git LFS (для крупных медиафайлов)

### Клонирование

```bash
git lfs install
git clone https://github.com/RazorConsole/RazorConsole.git
cd RazorConsole
dotnet build RazorConsole.slnx
dotnet test RazorConsole.slnx
```

## Стандарты кода

- Следовать правилам `.editorconfig` (4 пробела, file-scoped namespaces, System usings первые)
- Предпочитать `async/await` с `ConfigureAwait(false)` в библиотечном коде
- Public API: nullable-enabled, документировать исключения и edge cases
- Spectre.Console renderables — immutable вне rendering loops

## Перед отправкой PR

```bash
dotnet format RazorConsole.slnx   # форматирование
dotnet test RazorConsole.slnx     # тесты (должны пройти на Linux и Windows)
```

При изменениях в focus/keyboard handling — добавить/обновить тесты в `FocusManagerTests` или `KeyboardEventManagerTests`.

## Процесс PR

1. Создать Issue для крупных изменений
2. Форкнуть репозиторий, создать ветку от `main`
3. Сделать изменения, соблюдая стандарты кода
4. Написать/обновить тесты
5. Запустить `dotnet format` и `dotnet test`
6. Отправить PR с описанием изменений

## Структура тестов

- Тесты находятся в `src/RazorConsole.Tests`
- CI требует чистого прохождения на Linux и Windows
- Покрытие: Codecov (Cobertura format)

## Документация

- `README.md` — обновлять при user-facing изменениях
- XML doc-комментарии для public API
- `examples/` — добавлять примеры для новых фич
- `design-doc/` — архитектурные заметки

## Git LFS

Отслеживаемые типы файлов: `*.gif`, `*.png`, `*.jpg`, `*.jpeg`, `*.mp4`, `*.mov`, `*.avi`, `*.zip`, `*.tar.gz`, `*.pdf`.

## Релизный процесс

Создание GitHub Release запускает `.github/workflows/release.yml` — сборка, тесты, паковка и публикация. Версии следуют семантическому версионированию.
