# Contributing

## Code Style

- Go: `go fmt`, `go vet`, `staticcheck`
- Svelte/JS: стандартный формат Prettier

Перед коммитом:

```bash
make fmt
make lint
make test
```

## Как добавить новый эндпоинт

1. Определить модель в `internal/models/types.go`
2. Реализовать хендлер в `internal/api/<name>.go`
3. Зарегистрировать маршрут в `internal/api/router.go` с нужными middleware (auth, admin)
4. Добавить тесты в `internal/engine/engine_test.go` если затрагивается scoring

## Commit Messages

Формат — [Conventional Commits](https://www.conventionalcommits.org/):

```
feat: add support for custom scoring weights
fix: handle nil ESL client in route handler
docs: add API reference table to README
refactor: extract scoring logic into separate method
test: add lethal condition tests for stale nodes
chore: update Go dependencies
```

## PR Process

1. Ветка от `main`, название `feature/`, `fix/` или `docs/`
2. Один PR — одно логическое изменение
3. Все тесты проходят (`make test`)
4. Код проходит `make lint`
5. Если меняется API — обновить README.md

## Тестирование

```bash
make test          # юнит-тесты
make test-race     # с race detector
make emulate-normal # интеграционная проверка
```
