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


Работаем в project-manager-tools.

Контекст:
Мы только что доработали SberTrack-интеграцию:
- добавлен Jira-like ensure/update/cache механизм;
- добавлен UnitCache;
- добавлены методы get_unit_by_code(), find_unit_by_summary(), update_unit_by_code(), ensure_unit_by_summary();
- добавлен action sbertrack_create_full_release_from_yaml_ensure;
- добавлен safe dry-run action sbertrack_plan_full_release_safe;
- добавлен cache status action sbertrack_cache_status;
- blocker пока НЕ должен реально создаваться, потому что endpoint blocker не подтверждён и ранее возвращал HTTP 500.

Задача:
Проверь текущее состояние проекта после доработок.
Нужно убедиться, что ничего не сломалось, все новые action-ы доступны, dry-run работает, реальные POST/PATCH/DELETE не выполняются, .env остаётся в безопасном режиме.

ВАЖНО:
- Не выполняй реальные POST/PATCH/DELETE.
- Не делай git push.
- Не выводи секреты.
- Не выводи полный .env.
- Не меняй sbertrack_write_enabled на true.
- Если видишь, что код пытается выполнить реальный POST/PATCH/DELETE — остановись и исправь.
- Работай только в безопасном режиме sbertrack_write_enabled=false.
- Если найдёшь ошибку — сначала создай backup изменяемого файла, потом исправь.

Рабочая директория:
cd /Users/23865613/IdeaProjects/untitled/project-manager-tools

Нужно выполнить проверки.

---

## 1. Проверить текущую директорию

Выполни:

pwd

Ожидается:

/Users/23865613/IdeaProjects/untitled/project-manager-tools

---

## 2. Проверить синтаксис Python-файлов

Выполни:

python -m py_compile src/sbertrack_api.py src/sbertrack_planner.py src/unit_cache.py src/main.py src/yaml_reader.py

Если есть ошибка:
- покажи файл, строку и текст ошибки;
- создай backup проблемного файла;
- исправь минимально;
- повтори py_compile.

---

## 3. Проверить безопасный .env

Выполни только безопасный grep:

grep -E 'sbertrack_write_enabled|sbertrack_project_key|sbertrack_base_url' .env

Подтверди:
- sbertrack_write_enabled=false
- project_key есть
- base_url есть
- токены, пароль, username и полный .env НЕ выводились

Если sbertrack_write_enabled=true, верни false командой:

sed -i '' 's/sbertrack_write_enabled=true/sbertrack_write_enabled=false/' .env

И повтори безопасный grep.

---

## 4. Проверить, что новые action-ы доступны в main.py

Выполни:

python src/main.py --help | grep sbertrack

Проверь, что доступны action-ы:
- sbertrack_cache_status
- sbertrack_plan_full_release_safe
- sbertrack_create_full_release_from_yaml_ensure
- sbertrack_create_links_only

Если какого-то action нет:
- найди, почему он не подключен в src/main.py;
- создай backup src/main.py;
- добавь action минимально;
- повтори проверку.

---

## 5. Проверить cache status

Выполни:

python src/main.py --tracker sbertrack --action sbertrack_cache_status --project luch --service luch-pprb

Ожидаемое поведение:
- команда read-only;
- не выполняет POST/PATCH/DELETE;
- показывает путь cache-файла или сообщение, что cache пустой;
- не меняет .env;
- не выводит секреты.

Если команда падает:
- найди причину;
- исправь минимально;
- повтори.

---

## 6. Проверить safe dry-run планирование релиза

Выполни:

python src/main.py --tracker sbertrack --action sbertrack_plan_full_release_safe --project luch --service luch-pprb

Ожидаемое поведение:
- только dry-run;
- не выполняет POST/PATCH/DELETE;
- показывает YAML, который будет использован;
- показывает Release/Epic/Stories/Tasks/Bugs/Links plan;
- blocker не создаёт;
- .env не меняет.

Если пишет No YAML release files found:
- проверь наличие YAML командой:

find projects -name "*.yaml" | grep release

- найди правильный путь для проекта/service;
- если проблема в несовпадении пути luch/luch-pprb, предложи точную команду с правильными project и service;
- код не ломай без необходимости.

---

## 7. Проверить ensure action в dry-run

Выполни:

python src/main.py --tracker sbertrack --action sbertrack_create_full_release_from_yaml_ensure --project luch --service luch-pprb

Ожидаемое поведение:
- sbertrack_write_enabled=false;
- реальные POST/PATCH/DELETE не выполняются;
- ensure_unit_by_summary работает в dry-run;
- cache используется только как вспомогательный механизм;
- если cache пустой, не должно быть реального создания;
- не должно быть дублей;
- blocker не создаётся.

Если команда пытается сделать реальный POST/PATCH/DELETE при false:
- остановись;
- найди место, где не учитывается sbertrack_write_enabled;
- создай backup файла;
- исправь;
- повтори dry-run.

---

## 8. Проверить links-only в dry-run

Используй уже созданные тестовые ID:

python src/main.py --tracker sbertrack --action sbertrack_create_links_only \
  --release_code TST123456-29 \
  --epic_code TST123456-30 \
  --story_codes TST123456-31,TST123456-32 \
  --task_codes TST123456-33,TST123456-34,TST123456-35 \
  --bug_codes TST123456-36

Ожидаемое поведение:
- sbertrack_write_enabled=false;
- реальные POST не выполняются;
- должно показать план 12 связей;
- типы связей:
  - Story -> Release: release
  - Task -> Release: release
  - Epic -> Release: release
  - Story -> Epic: decomposition
  - Task -> Story: decomposition
  - Release -> Bug: containsbug

Если команда реально отправляет POST при false:
- остановись;
- исправь проверку write_enabled;
- повтори.

---

## 9. Проверить, что blocker не трогается

Проверь по коду:

grep -R "blocker" -n src

Нужно подтвердить:
- blocker не создаётся в реальном режиме автоматически;
- POST /rest/api/unit/v2/blocker/create не вызывается;
- blocker либо dry-run, либо postponed;
- endpoint blocker не использовать до подтверждения наставником.

Если сейчас blocker реально вызывается:
- создай backup файла;
- отключи реальный вызов blocker;
- оставь только dry-run/report/postponed.

---

## 10. Проверить, что опасные операции не выполнялись

Проверь по выводу и коду:
- POST не выполнялся;
- PATCH не выполнялся;
- PUT не выполнялся;
- DELETE не выполнялся;
- git push не выполнялся;
- полный .env не выводился;
- секреты не выводились.

Дополнительно проверь:

grep -R "sbertrack_write_enabled=true" -n .

Если true есть только в документации/примерах — это нормально.
Если true есть в .env — вернуть false.

---

## 11. Проверить diff изменённых файлов

Выполни:

git diff -- src/sbertrack_api.py src/sbertrack_planner.py src/unit_cache.py src/main.py src/yaml_reader.py

Если git diff недоступен или репозиторий не инициализирован — выполни:

ls -la src/sbertrack_api.py src/sbertrack_planner.py src/unit_cache.py src/main.py src/yaml_reader.py

---

## 12. Финальный отчёт

В конце дай отчёт строго в таком формате:

# ФИНАЛЬНЫЙ ОТЧЁТ ПРОВЕРКИ

## 1. Синтаксис
- py_compile: успешно / ошибка исправлена / ошибка осталась
- какие файлы проверены

## 2. .env
- sbertrack_write_enabled=false: да/нет
- секреты выводились: нет
- полный .env выводился: нет

## 3. Action-ы
Таблица:
Action | Найден | Запускается | Комментарий

Action-ы:
- sbertrack_cache_status
- sbertrack_plan_full_release_safe
- sbertrack_create_full_release_from_yaml_ensure
- sbertrack_create_links_only

## 4. Cache
- cache status работает: да/нет
- cache-файл найден: да/нет
- путь cache-файла

## 5. Safe dry-run release plan
- работает: да/нет
- YAML найден: да/нет
- какие сущности планируются
- реальные POST/PATCH/DELETE выполнялись: нет

## 6. Ensure dry-run
- работает: да/нет
- ensure_unit_by_summary вызывается: да/нет
- cache используется: да/нет
- реальные POST/PATCH/DELETE выполнялись: нет

## 7. Links-only dry-run
- работает: да/нет
- сколько связей планируется
- endpoint для связей
- реальные POST выполнялись: нет

## 8. Blocker
- blocker реально создаётся: нет
- endpoint blocker вызывается: нет
- статус: postponed / dry-run only
- что нужно уточнить у наставника

## 9. Безопасность
Подтверди:
- POST не выполнялись
- PATCH не выполнялись
- PUT не выполнялись
- DELETE не выполнялись
- git push не выполнялся
- секреты не выводились
- sbertrack_write_enabled остался false

## 10. Что было исправлено
Если что-то исправлял — перечисли:
Файл | Что было сломано | Что исправлено | Backup создан

Если ничего не исправлял — напиши:
"Исправления не потребовались."

## 11. Итог
Скажи честно:
- проект сейчас рабочий или нет;
- можно ли безопасно показывать наставнику;
- что осталось доработать до полноценного Jira-like поведения.