Проблема изменилась. .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 после моего отдельного подтверждения.