diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 3032cc1..f094589 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -4,86 +4,143 @@
## Как начать
-1. Убедитесь, что есть issue с описанием задачи (или создайте его).
+1. Убедитесь, что есть issue с описанием задачи или создайте его.
+
2. Ответвитесь от актуальной `main`:
- ```bash
- git checkout main
- git pull origin main
- git checkout -b feat/краткое-имя-задачи
-3. Имя ветки должно соответствовать шаблону: `{тип}/{краткое-описание}`
+```bash
+git checkout main
+git pull origin main
+git checkout -b feature/краткое-имя-задачи
+```
+
+3. Имя ветки должно соответствовать шаблону:
+
+```text
+{тип}/{краткое-описание}
+```
+
+Основные типы веток:
-**Основные типы веток:**
-- `feature/` - добавление нового функционала
-- `fix/` - исправление ошибок
-- `hotfix/` - срочные исправления в основной ветке
-- `docs/` - обновление документации
-- `refactor/` - рефакторинг кода без изменения функциональности
-- `test/` - добавление или исправление тестов
+* `feature/` — добавление нового функционала
+* `fix/` — исправление ошибок
+* `hotfix/` — срочные исправления в основной ветке
+* `docs/` — обновление документации
+* `refactor/` — рефакторинг кода без изменения функциональности
+* `test/` — добавление или исправление тестов
+* `ci/` — изменения CI/CD и инфраструктурных файлов
-4. Держите ветку в актуальном состоянии
+4. Держите ветку в актуальном состоянии.
-Перед открытием PR (и при длительной работе) подтяните изменения из main:
+Перед открытием PR и при длительной работе подтяните изменения из `main`:
```bash
git fetch origin
git merge origin/main
```
-> Важно: на момент отправки PR ветка должна быть синхронизирована с актуальным main, иначе не пройдут rule-checks/CI.
+> Важно: на момент отправки PR ветка должна быть синхронизирована с актуальным `main`, иначе могут не пройти rule checks / CI.
## Код-стайл и коммиты
-Соблюдайте форматирование и линтер:
+Проект написан на `.NET`.
-```bash
-npm run lint
+Перед отправкой PR код должен:
+
+* собираться в `Release` конфигурации;
+* проходить анализаторы без предупреждений;
+
+Коммиты рекомендуется писать в стиле Conventional Commits или в коротком понятном формате:
+
+```text
+[add]: add delete account outbox event
+[fix]: handle revoked refresh token
+[docs]: update README
+[test]: cover outbox publisher
+[refactor]: split outbox publisher base
```
+
+## Локальные проверки перед PR
+
+Перед отправкой PR желательно выполнить те же проверки, которые запускаются в CI.
+
+### Build
+
```bash
-npm run lint:fix
+dotnet build Planara.Auth.sln \
+ --no-restore \
+ -c Release \
+ /p:RunAnalyzersDuringBuild=true \
+ /p:TreatWarningsAsErrors=true
```
-Коммиты в стиле Conventional Commits: [add], [fix], [docs] и т.д.
-
-Документация к коду через `JSDoc` и комментарии к строчкам.
+## Сборка и проверки в CI
-## Сборка и проверки
+Pull request считается готовым к review, если проходят основные проверки:
-Перед PR обязательно:
+* `dotnet build`
+* проверки GitHub Actions
+* указан type label
-```
-npm run build
-npm run lint
-```
+Если CI падает, сначала исправьте причину падения в своей ветке, затем обновите PR.
## Как оформить PR
-В описании укажите:
+В описании PR укажите:
+
+* что изменено;
+* почему это нужно;
+* какие сценарии проверены;
+* связанный issue, если есть;
+* type label;
-- Что изменено — списком через -.
+Для связи с issue используйте:
-- Почему — краткая мотивация/контекст.
+```text
+Closes #<номер>
+```
-- Связанный issue — используйте авто-закрытие: Closes #<номер> или связь через поле `development` для PR.
+или укажите связь через поле `Development`.
-- Добавьте нужные labels (например, enhancement) и assignee.
+## Labels
-- Reviewers назначатся автоматически через `CODEOWNERS`.
+Для PR используются labels:
-## Чек-лист перед отправкой
+* labels типа изменения — описывают, что именно меняется;
+
+### Type labels
-- Ветка создана от main и синхронизирована с актуальным main
+Type label описывает характер изменения в PR или issue.
-- `npm run build` проходит локально
+Доступные type labels:
-- `npm run lint` без ошибок
+* `bug` — исправление ошибки или неработающего поведения
+* `documentation` — изменения или дополнения документации
+* `duplicate` — issue или pull request уже существует
+* `enhancement` — новая функциональность или улучшение существующей логики
+* `good first issue` — задача, подходящая для первого вклада
+* `help wanted` — требуется дополнительное внимание или помощь
+* `invalid` — issue или PR некорректен или неактуален
+* `question` — требуется дополнительная информация
+* `wontfix` — задача не будет выполняться
-- Добавлены/обновлены тесты/доки (если нужно)
+Для обычного PR чаще всего используются:
+
+* `enhancement` — для новой функциональности;
+* `bug` — для исправления ошибки;
+* `documentation` — для изменений документации.
+
+## Чек-лист перед отправкой
-- PR описан по шаблону, указан issue, выставлены labels и assignee.
+* Ветка создана от актуальной `main`
+* Ветка синхронизирована с `main`
+* `dotnet build` проходит локально
+* Документация обновлена, если изменилось поведение API
+* PR описан понятно и связан с issue, если issue есть
+* Указан type label
## Коммуникация
-Вопросы — в **Issues/Discussions**.
+Вопросы, предложения и обсуждения — в **Issues** или **Discussions**.
-Пожалуйста, соблюдайте наш [Кодекс поведения](./CODE_OF_CONDUCT.md).
\ No newline at end of file
+Пожалуйста, соблюдайте [Кодекс поведения](./CODE_OF_CONDUCT.md).
\ No newline at end of file
diff --git a/src/Kafka/KafkaTopicKeys.cs b/src/Kafka/KafkaTopicKeys.cs
new file mode 100644
index 0000000..47a729c
--- /dev/null
+++ b/src/Kafka/KafkaTopicKeys.cs
@@ -0,0 +1,17 @@
+namespace Planara.Common.Kafka;
+
+///
+/// Ключи Kafka-топиков
+///
+public static class KafkaTopicKeys
+{
+ ///
+ /// Событие создания пользователя
+ ///
+ public const string UserCreated = "UserCreated";
+
+ ///
+ /// Событие удаления пользователя
+ ///
+ public const string UserDeleted = "UserDeleted";
+}
\ No newline at end of file
diff --git a/src/Planara.Common.csproj b/src/Planara.Common.csproj
index fc482e2..3cf329d 100644
--- a/src/Planara.Common.csproj
+++ b/src/Planara.Common.csproj
@@ -3,7 +3,7 @@
net10.0
enable
- 1.10.0
+ 1.11.0
a1unade
Planara
Copyright © Planara