Предусловие ко всему этапу 0.9. Пока сборка основной ветки красная, ни одно
последующее изменение не проверяемо.

Репозиторий: https://github.com/ochenstarik-ui/kagent (локально C:\Users\Ochenstarik\kagent)
Контекст решений: PR #2 — ADR-0004..0016 и разделы ТЗ 35-41.

## Что сломано сейчас

1. Node-job CI падает на шаге setup-node: в репозитории нет pnpm-lock.yaml.
   Следствие: pnpm typecheck / test / build никогда не выполнялись.
2. services/gateway/src/main.rs:184 — get_request_id() вызывает .or_else() на
   String. У String такого метода нет, это ошибка компиляции E0599.
   CI до неё не доходит: раньше падает cargo fmt --check.
3. Там же: структура RateLimiter объявлена (строки ~37-75), но нигде не
   создаётся, и в обработчике live() не используется параметр State(state).
   При clippy -D warnings это dead_code и unused_variables.
4. services/control-plane/src/main.ts:9 — logger.transport.target "pino-pretty",
   пакета нет в зависимостях, сервис падает при старте.
5. services/control-plane/src/auth.ts:65 — внутри ESM-модуля вызывается
   require("node:crypto"). В ESM require не определён, регистрация и логин
   падают в рантайме.
6. services/control-plane объявляет "test": "vitest run", но тестовых файлов
   там нет, vitest выходит с кодом 1.
7. Пять Python-сервисов (~1700 строк) не покрыты CI вообще: Python-job в
   .github/workflows/ci.yml отсутствует.
8. scripts/validate_repository.py существует, но не вызывается из CI.
9. В индексе лежит бинарник
   services/reasoning-engine/src/__pycache__/engine.cpython-311.pyc.

## Что сделать

- закоммитить pnpm-lock.yaml;
- починить get_request_id, привести код к cargo fmt, подключить RateLimiter к
  роутеру как middleware либо удалить его вместе с упоминанием в CHANGELOG;
- добавить pino-pretty в зависимости control-plane либо убрать transport;
- заменить require на статический импорт pbkdf2 из node:crypto;
- добавить unit-тесты control-plane (минимум: переходы статусов задачи,
  hashPassword/verifyPassword round-trip, 401 без токена) — vitest должен
  находить тесты;
- добавить в CI job python: ruff + pytest, и шаг запуска
  scripts/validate_repository.py;
- git rm --cached удалить .pyc из индекса.

## Критерий приёмки

- зелёный CI на ветке и на main: node, rust, python;
- cargo clippy --all-targets -- -D warnings проходит без правок warning-уровня;
- docker compose up -d поднимается, control-plane отвечает 200 на /health/live,
  POST /v1/auth/register и POST /v1/auth/login работают против PostgreSQL;
- в PR перечислено, что именно было сломано и чем это подтверждено.

## Ограничения

- не отмечать пункты roadmap выполненными без доказательства (ADR-0016);
- существующие тесты не изменять без явного согласования (ADR-0005);
- секреты в трекаемые файлы не помещать.
