Загрузка данных


Проблема изменилась. .env читается корректно:

- sbertrack_url: set
- sbertrack_login: set
- sbertrack_password: set
- sbertrack_project_key: set
- sbertrack_write_enabled: set
- write_enabled: false

Значит .env работает и POST сейчас не должен отправляться.

Но dry-run падает на инициализации shared.api.sbertrack.py, потому что он использует get_config(), который тянет pydantic_settings, а pydantic_settings конфликтует с локальным dotenv-модулем проекта.

Нужно исправить именно архитектуру short-circuit для action sbertrack_test_create_release.

Важно:
- Не делать POST.
- Не создавать задачи.
- Не запускать plan_releases.
- Не использовать Jira.
- Не делать commit.
- Не делать push.
- Не выводить .env.
- Не выводить логин, пароль или токены.
- Не делать cat/grep .env с выводом значений.
- Не устанавливать зависимости.
- Не трогать реальные секреты.

Задача:

1. Для action:
   --tracker sbertrack --action sbertrack_test_create_release

   main.py должен идти по отдельному short-circuit пути:
   - загрузить .env через существующий безопасный load_env;
   - не создавать BacklogPlanning;
   - не вызывать get_field_mapping;
   - не импортировать Jira;
   - не импортировать общий get_config;
   - не импортировать pydantic_settings;
   - не импортировать shared.api.sbertrack.py, если он тянет get_config.

2. Сделать отдельную безопасную фабрику именно для тестового SberTrack action, например:
   - либо прямо в main.py;
   - либо в src/shared/api/sbertrack.py, но без get_config;
   - либо в отдельном helper-файле.

   Она должна читать только env-переменные:
   - sbertrack_url
   - sbertrack_login
   - sbertrack_password
   - sbertrack_project_key
   - sbertrack_filter
   - sbertrack_write_enabled
   - sbertrack_test_issue_type
   - sbertrack_test_summary

3. Эта фабрика должна создать SberTrackConfig и SberTrackAPI напрямую, без Settings/get_config/pydantic_settings.

4. Для dry-run, если sbertrack_write_enabled=false:
   - POST не отправлять;
   - показать sanitized payload;
   - подтвердить project.key;
   - подтвердить write_enabled=false;
   - подтвердить, что BacklogPlanning не создавался;
   - подтвердить, что get_field_mapping не вызывался;
   - подтвердить, что Jira не импортировалась;
   - подтвердить, что pydantic_settings/get_config не использовались в этом short-circuit.

5. Payload должен быть:

{
  "fields": {
    "project": {
      "key": "1231TST1231"
    },
    "summary": "TEST project-manager-tools SberTrack release integration",
    "issuetype": {
      "name": "Релиз"
    },
    "description": "Test task created by project-manager-tools SberTrack integration. Safe to delete."
  }
}

6. Обязательно проверь, что project.key строго равен:
   1231TST1231

   Не должно быть:
   - SNL
   - 1231TST1231SNL
   - пустого значения.

7. После изменений выполнить:

python -m compileall src

Если pytest доступен:
python -m pytest src/shared/lib/sbertrack/tests/test_sbertrack_api.py

Потом dry-run:

PYTHONPATH=src python src/main.py --tracker sbertrack --action sbertrack_test_create_release

Ожидаемый результат dry-run:
- ошибок pydantic_settings/dotenv нет;
- POST не отправлен;
- показан sanitized payload;
- project.key = 1231TST1231;
- write_enabled=false;
- BacklogPlanning не создавался;
- Jira не использовалась.

8. Реальный POST не выполнять. После dry-run остановиться и показать отчёт:
   - какие файлы изменены;
   - почему падало;
   - как исправлено;
   - результат compileall;
   - результат тестов;
   - результат dry-run;
   - готово ли к одному реальному POST после моего отдельного подтверждения.