Загрузка данных
Работаем в project-manager-tools.
Контекст:
Финальная версия SberTrack-интеграции уже проверена на реальных API.
Подтверждено:
1. API доступен:
- GET current-info: HTTP 200
- GET space TST123456: HTTP 200
2. Create работает:
- release
- epic
- story
- task
- bug
3. Links работают:
- POST /rest/api/unit/v1/link
- type=release
- type=decomposition
- type=containsbug
- HTTP 201
- HTTP 570 "already exists" корректно обрабатывается как нефатальная ситуация
4. PATCH/update работает:
- PATCH /rest/api/unit/v2/update/{code}
- проверено на TST123456-82
- HTTP 200
5. Remote search без cache работает:
- POST /rest/api/unit/v2/find
- через sbertrack_python_api.client.unit.find
- cache miss был подтвержден
- поиск по summary нашел существующий release
- запись вернулась в .sbertrack_cache/units_TST123456.json
6. Ensure без дублей работает:
- cache -> remote search -> create/update
- повторный ensure возвращает существующий code, duplicate не создается
Теперь нужно разобраться с blocker.
ВАЖНО:
Ничего не создавать и не менять.
Строго read-only / dry-run.
Запрещено:
- НЕ делать реальный POST
- НЕ делать PATCH
- НЕ делать PUT
- НЕ делать DELETE
- НЕ создавать blocker
- НЕ создавать release/epic/story/task/bug
- НЕ создавать links
- НЕ менять .env
- НЕ делать git push
- НЕ выводить секреты
- НЕ выводить полный .env
- НЕ менять рабочую create/update/search/link логику
- sbertrack_write_enabled должен остаться false
Цель:
Понять, как в SberTrack правильно реализуется blocker.
Нужно определить, blocker — это:
Вариант A: отдельный unit type, например blocker
Вариант B: bug/defect с priority=blocker
Вариант C: task с priority=blocker
Вариант D: link type между задачами, например blocks / blocked by / blocker
Вариант E: поле/атрибут внутри release/story/task/bug
Вариант F: комбинация priority + link type
Задача 1. Проверить текущий проект
Найди в project-manager-tools все места, связанные с blocker:
- blocker
- create_blocker
- build_blocker_payload
- map_blocker_yaml_to_sbertrack_payload
- blocker/create
- /rest/api/unit/v2/blocker/create
- blocks
- blocked
- blockedby
- blocker
- priority
- defect
- bug
- containsbug
Проверить файлы:
- src/sbertrack_api.py
- src/sbertrack_planner.py
- src/yaml_reader.py
- src/main.py
- src/unit_cache.py
- projects/**/*.yaml
- README / docs, если есть
Нужно понять:
- есть ли уже код blocker
- какой endpoint он предполагает
- какой payload строит
- почему раньше /rest/api/unit/v2/blocker/create мог возвращать HTTP 500
- можно ли оставить этот код только как dry-run до подтверждения модели
Задача 2. Проверить sbertrack_python_api
Найди установленный пакет:
python -c "import sbertrack_python_api; print(sbertrack_python_api.__file__)"
Затем найди директорию пакета:
python -c "import sbertrack_python_api, os; print(os.path.dirname(sbertrack_python_api.__file__))"
В исходниках пакета безопасно поискать:
- blocker
- block
- blocks
- blocked
- blockedBy
- blocked_by
- defect
- bug
- issue
- priority
- link
- link.types
- findSuits
- suits
- unit types
- taxonomy
- task_categories
- priorities
- /rest/api/unit/v2/blocker
- /rest/api/unit/v2/bug
- /rest/api/unit/v2/task
- /rest/api/unit/v1/link
- /rest/api/unit/v2/find
- /rest/api/unit/v2/update
- /rest/api/taxonomy
- /rest/api/workflow
Важно:
Поиск только по коду и документации пакета.
Не выполнять мутирующие методы.
Задача 3. Проверить доступные типы unit в TST123456
Использовать только read-only методы.
Попробовать найти безопасные методы для получения suit/unit types:
- issue.findSuits
- unit.findSuits
- client.get(...)
- sbertrack_python_api методы, которые только читают данные
- методы space/suit/taxonomy/workflow, если они есть
Нужно получить список доступных типов задач/юнитов в space TST123456.
Особенно проверить наличие:
- release
- epic
- story
- task
- bug
- defect
- blocker
- impediment
- dependency
- issue
Если отдельного типа blocker нет — это важно зафиксировать.
Задача 4. Проверить доступные link types
Использовать только read-only методы.
Найти способ получить типы связей:
- link.types
- client.get(...)
- sbertrack_python_api link methods
- документация пакета
- исходники generated API
Нужно проверить наличие типов:
- release
- decomposition
- containsbug
- blocks
- blocked
- blocked by
- blockedby
- dependency
- depends on
- is blocked by
- blocker
- relates
- parent
- child
Если есть только release/decomposition/containsbug — зафиксировать.
Задача 5. Проверить priority values
Использовать только read-only методы или исходники/документацию.
Нужно понять, какие значения priority допустимы в SberTrack:
- low
- mid
- high
- critical
- blocker
- blocking
- major
- minor
- trivial
Особенно важно:
- есть ли priority=blocker
- как оно пишется в payload: blocker / blocking / Блокирующий / code справочника
Задача 6. Проверить модель bug/defect
Так как bug уже создается через:
POST /rest/api/unit/v2/bug/create
нужно понять:
- bug и defect — одно и то же или разные unit types
- можно ли создать bug с priority=blocker
- есть ли поле defect в API/models
- есть ли отдельный endpoint defect/create
- есть ли в документации "Дефект" как SberTrack unit type
Ничего не создавать. Только анализ кода, моделей, документации и read-only справочников.
Задача 7. Добавить read-only диагностический action, если его еще нет
Можно добавить action:
sbertrack_inspect_blocker_model
Он должен быть строго read-only.
Что должен делать action:
1. Показать sbertrack_write_enabled.
2. Показать доступность API current-info и space.
3. Показать найденные unit/suit types.
4. Показать найденные link types.
5. Показать priority values, если удалось получить.
6. Показать blocker-related методы из sbertrack_python_api.
7. Показать текущий blocker-код в проекте.
8. НЕ выполнять POST/PATCH/PUT/DELETE.
9. НЕ создавать сущности.
10. НЕ создавать links.
11. НЕ менять cache, кроме возможного read-only просмотра.
Если для получения типов доступен только POST-поисковый read-only endpoint, например find, его можно использовать только если он не создает/не изменяет данные. В отчете явно написать, что это read-only search.
Задача 8. Ничего не ломать
Не менять:
- create_release
- create_epic
- create_story
- create_task
- create_bug
- create_link
- ensure_unit_by_summary
- find_unit_by_summary
- update_unit_by_code
- UnitCache
- YAML reader
Если нужно добавить код — только отдельная диагностика blocker, без влияния на основную логику.
Перед любыми изменениями создать backup изменяемых файлов:
- src/sbertrack_api.py
- src/sbertrack_planner.py
- src/main.py
- src/unit_cache.py
Задача 9. Выполнить безопасные проверки
Выполнить:
python -m py_compile src/sbertrack_api.py src/sbertrack_planner.py src/unit_cache.py src/main.py src/yaml_reader.py
Если добавлен action, выполнить его только в read-only режиме:
python src/main.py --tracker sbertrack --action sbertrack_inspect_blocker_model --project luch --service luch-pprb
Если для action нужны другие параметры space/project_key — использовать TST123456 из .env, но не выводить секреты.
Задача 10. Финальный отчет
Сделать отчет в таком формате:
## 1. Что найдено в текущем проекте
Таблица:
Файл | Метод/фрагмент | Что делает | Это реальная реализация или dry-run | Нужно менять?
## 2. Что найдено в sbertrack_python_api
Таблица:
Метод/класс | Назначение | Endpoint если найден | Подходит для blocker?
## 3. Доступные unit types / suits
Список:
- type/code
- display name, если есть
- найден ли blocker
- найден ли defect
- найден ли bug
- найден ли task
## 4. Доступные link types
Список:
- type/code
- display name, если есть
- есть ли blocks/blocked/dependency
- есть ли release/decomposition/containsbug
## 5. Priority values
Список:
- code/value
- display name
- есть ли blocker/blocking/Блокирующий
## 6. Какая модель blocker наиболее вероятна
Выбрать один вариант:
A. отдельный unit type
B. bug/defect с priority=blocker
C. task с priority=blocker
D. link type blocks/blocked
E. поле/атрибут внутри unit
F. комбинация priority + link type
Если точного подтверждения нет — честно написать "не подтверждено".
## 7. Что можно реализовать безопасно сейчас
Например:
- blocker dry-run payload
- валидация blocker YAML
- проверка наличия priority=blocker
- проверка наличия link type blocks
- запрет реального POST blocker до подтверждения endpoint/model
## 8. Что нельзя делать без наставника
Обязательно указать:
- нельзя делать POST /rest/api/unit/v2/blocker/create без подтверждения
- нельзя создавать blocker наугад
- нельзя считать blocker отдельным unit type без подтверждения
- нельзя использовать priority=blocker без подтверждения допустимого значения
- нельзя создавать link type blocks, если такого типа нет в справочнике
## 9. Безопасность
Подтвердить:
- sbertrack_write_enabled=false
- POST не выполнялся, кроме read-only search/find если он нужен и точно не мутирует
- PATCH не выполнялся
- PUT не выполнялся
- DELETE не выполнялся
- release/epic/story/task/bug не создавались
- links не создавались
- blocker не создавался
- git push не выполнялся
- секреты не выводились
- полный .env не выводился
## 10. Итог
Ответить:
- можно ли реализовать blocker прямо сейчас
- что точно известно
- что требует уточнения у наставника
- какой следующий минимальный безопасный шаг