Загрузка данных
Работаем в project-manager-tools.
Задача:
Сформировать отдельную папку zadanie1 с описанием выполненного задания №1 по интеграции SberTrack в project-manager-tools.
Важно:
- НЕ менять рабочий код проекта.
- НЕ выполнять POST/PATCH/PUT/DELETE.
- НЕ менять .env.
- НЕ выводить секреты.
- НЕ делать git push.
- Нужно только создать документацию/skill-файлы в отдельной папке zadanie1.
Контекст:
В проекте реализована и проверена SberTrack-интеграция как аналог Jira release planner.
Подтверждено на реальных API:
1. Create работает:
- release
- epic
- story
- task
- bug
- blocker
2. Links работают:
- POST /rest/api/unit/v1/link
- type=release
- type=decomposition
- type=containsbug
- link type blocks существует, но автоматическое создание blocks пока не включено, потому что нужно отдельно подтвердить направление source/destination.
3. PATCH/update работает:
- PATCH /rest/api/unit/v2/update/{code}
- HTTP 200
- update_unit_by_code подтверждён.
4. Remote search без cache работает:
- POST /rest/api/unit/v2/find
- через sbertrack_python_api.client.unit.find
- поиск по summary работает.
- cache miss → API search → cache save подтверждено.
5. Ensure pattern работает:
- cache
- verify by code
- remote search by summary
- create only if write_enabled=true
- duplicate protection подтверждена.
6. Blocker подтверждён:
- blocker — отдельный unit type / suit code: blocker
- endpoint: POST /rest/api/unit/v2/blocker/create
- real POST blocker вернул HTTP 200
- обязательные поля: summary, space, attributes
- reason_for_blocking должен быть объектом {"code": "..."}
- workflow_status формат: {"command": "NEW"}
- sber_configuration_item формат: [{"code": "..."}]
Рабочий payload blocker:
{
"summary": "TEST blocker summary",
"description": "Optional description",
"space": "TST123456",
"attributes": {
"priority": "low",
"workflow_status": {
"command": "NEW"
},
"reporter": "23865613",
"reason_for_blocking": {
"code": "external_wait"
},
"sber_configuration_item": [
{
"code": "CI02298102"
}
]
}
}
Нужно создать структуру:
zadanie1/
README.md
SKILL.md
SBERTRACK_IMPLEMENTATION_REPORT.md
SBERTRACK_API_KNOWLEDGE.md
SBERTRACK_YAML_FORMAT.md
SBERTRACK_TEST_CHECKLIST.md
examples/
release-full-example.yaml
blocker-example.yaml
commands.md
Содержимое файлов:
## zadanie1/README.md
Должен кратко объяснять:
- что это материалы по заданию №1;
- проект: project-manager-tools;
- цель: добавить поддержку SberTrack вместо/рядом с Jira;
- что реализовано;
- какие ограничения безопасности соблюдены;
- какие файлы читать в каком порядке.
Обязательно добавить раздел:
Что реализовано:
- create release/epic/story/task/bug/blocker;
- links;
- update/PATCH;
- remote search;
- ensure/update/cache;
- dry-run safety;
- YAML planner.
Что осталось:
- подтвердить направление связи blocks для blocker;
- после подтверждения можно добавить автоматическое создание blocker links.
## zadanie1/SKILL.md
Сформировать как skill-инструкцию для GigaCode.
Название:
SberTrack Release Planner Skill
Описание:
Этот skill помогает работать с SberTrack-интеграцией в project-manager-tools: создавать release structure из YAML, выполнять safe dry-run, использовать Jira-like ensure/update/cache, искать сущности по summary, обновлять сущности через PATCH, создавать связи и blocker.
Обязательные правила безопасности:
- по умолчанию sbertrack_write_enabled=false;
- real POST/PATCH/PUT/DELETE только после явного подтверждения пользователя;
- не выводить секреты;
- не выводить полный .env;
- не делать git push без отдельного запроса;
- перед изменением файлов делать backup;
- после real write возвращать sbertrack_write_enabled=false.
Описать основные команды:
1. Проверка синтаксиса:
python -m py_compile src/sbertrack_api.py src/sbertrack_planner.py src/unit_cache.py src/main.py src/yaml_reader.py
2. Cache status:
python src/main.py --tracker sbertrack --action sbertrack_cache_status --project luch --service luch-pprb
3. Safe full release plan:
python src/main.py --tracker sbertrack --action sbertrack_plan_full_release_safe --project luch --service luch-pprb
4. Ensure full release from YAML:
python src/main.py --tracker sbertrack --action sbertrack_create_full_release_from_yaml_ensure --project luch --service luch-pprb
5. Find by summary:
python src/main.py --tracker sbertrack --action sbertrack_find_unit_by_summary --project luch --service luch-pprb --unit-type release --search-summary testic --space TST123456
6. Links only:
python src/main.py --tracker sbertrack --action sbertrack_create_links_only --release_code TST123456-41 --epic_code TST123456-42 --story_codes TST123456-43,TST123456-44 --task_codes TST123456-45,TST123456-46,TST123456-47 --bug_codes TST123456-49
Указать, что команды с write_enabled=false должны быть dry-run/read-only.
## zadanie1/SBERTRACK_IMPLEMENTATION_REPORT.md
Сделать подробный отчёт.
Структура:
# SberTrack implementation report
## 1. Цель
Добавить поддержку SberTrack в project-manager-tools как Jira-like release planner.
## 2. Что было реализовано
Таблица:
Функция | Статус | Endpoint | Комментарий
Заполнить:
release create | подтверждено | POST /rest/api/unit/v2/release/create | HTTP 200
epic create | подтверждено | POST /rest/api/unit/v2/epic/create | HTTP 200
story create | подтверждено | POST /rest/api/unit/v2/story/create | HTTP 200
task create | подтверждено | POST /rest/api/unit/v2/task/create | HTTP 200
bug create | подтверждено | POST /rest/api/unit/v2/bug/create | HTTP 200
blocker create | подтверждено | POST /rest/api/unit/v2/blocker/create | HTTP 200
links create | подтверждено | POST /rest/api/unit/v1/link | HTTP 201, HTTP 570 если связь уже существует
update | подтверждено | PATCH /rest/api/unit/v2/update/{code} | HTTP 200
remote search | подтверждено | POST /rest/api/unit/v2/find | HTTP 200
## 3. Jira-like ensure/update/cache
Описать алгоритм:
ensure_unit_by_summary():
1. Check cache.
2. If cache hit:
- get_unit_by_code(code)
- if exists: update_unit_by_code(code, payload) or return code
- if stale: remove cache and continue.
3. If cache miss:
- remote search by summary.
4. If found:
- save to cache;
- update if needed;
- return code.
5. If not found:
- create only when sbertrack_write_enabled=true.
6. If write_enabled=false:
- only dry-run.
## 4. Safety
Описать:
- sbertrack_write_enabled=false by default;
- no secrets in output;
- sanitized payload;
- no git push;
- backups before changes;
- write flag returned to false after tests.
## 5. Подтверждённые реальные тесты
Указать:
- API доступен;
- current-info HTTP 200;
- space TST123456 HTTP 200;
- release/epic/story/task/bug/blocker создавались в тестовом пространстве;
- PATCH проверен;
- remote search проверен;
- links проверены.
## 6. Что осталось
Добавить:
- автоматическая связь blocker через link type blocks пока не включена;
- нужно уточнить направление source/destination:
- blocker -> blocked unit
- или blocked unit -> blocker.
## zadanie1/SBERTRACK_API_KNOWLEDGE.md
Описать всё, что известно по API.
Разделы:
# SberTrack API knowledge
## 1. Python API
Библиотека:
sber-devops-zis-sbertrack-python-api
Импорт:
from sbertrack_python_api import SbertrackClient
Клиент:
SbertrackClient
HTTP методы:
client.get(path, **kwargs)
client.post(path, json_data=data)
client.put(path, json_data=data)
client.patch(path, json_data=data)
client.delete(path, **kwargs)
## 2. Unit create endpoints
Таблица:
Unit type | Endpoint
release | /rest/api/unit/v2/release/create
epic | /rest/api/unit/v2/epic/create
story | /rest/api/unit/v2/story/create
task | /rest/api/unit/v2/task/create
bug | /rest/api/unit/v2/bug/create
blocker | /rest/api/unit/v2/blocker/create
## 3. Read/update/search endpoints
get by code:
GET /rest/api/unit/v2/{unit_code}
update:
PATCH /rest/api/unit/v2/update/{code}
search:
POST /rest/api/unit/v2/find
links:
POST /rest/api/unit/v1/link
link types:
POST /rest/api/unit/v2/link/types
## 4. Blocker
Подтверждено:
- blocker отдельный suit/unit type;
- GET /rest/api/suit/v1/blocker возвращает HTTP 200;
- POST /rest/api/unit/v2/blocker/create работает;
- blocker_plugin health-check существует;
- reason_for_blocking mandatory;
- reason_for_blocking format: {"code": "..."}.
## 5. Link types
Добавить:
- release;
- decomposition;
- containsbug;
- blocks;
- dependend;
- workplan;
- plain_connection.
Обязательно указать:
blocks существует, но направление связи нужно подтвердить отдельно.
## zadanie1/SBERTRACK_YAML_FORMAT.md
Описать YAML формат.
Добавить полный пример:
release:
summary: "final-check-20260710-003"
description: "Final release check from project-manager-tools"
space: "TST123456"
ci_code: "CI02298102"
priority: "low"
workflow_status:
command: "NEW"
release_kind: "planned"
uat_ground: "hotfix"
conditions_itservice: "dontChange"
without_integration: false
omni: false
uat_start_date: "2026-06-10T00:00:00+03:00"
introduction_start_date: "2026-06-16T09:00:00+03:00"
epic:
summary: "final-check-20260710-003 epic"
description: "Epic for final check"
team: "Команда"
stories:
- summary: "final-check-20260710-003 story 1"
description: "Story 1 for final check"
- summary: "final-check-20260710-003 story 2"
description: "Story 2 for final check"
tasks:
- summary: "final-check-20260710-003 task 1"
description: "Task 1 for final check"
- summary: "final-check-20260710-003 task 2"
description: "Task 2 for final check"
- summary: "final-check-20260710-003 task 3"
description: "Task 3 for final check"
bugs:
- summary: "final-check-20260710-003 bug 1"
description: "Bug 1 for final check"
ci_code: "CI02298102"
blockers:
- summary: "final-check-20260710-003 blocker 1"
description: "Blocker 1 for final check"
reason_for_blocking: "external_wait"
priority: "low"
reporter: "23865613"
ci_code: "CI02298102"
Пояснить:
- root release.ci_code должен прокидываться в дочерние сущности, если у них нет своего ci_code;
- blocker reason_for_blocking в YAML может быть строкой, но в API уходит объектом;
- links для release/epic/story/task/bug создаются автоматически;
- blocks links для blocker пока не создаются автоматически.
## zadanie1/SBERTRACK_TEST_CHECKLIST.md
Сделать checklist.
Разделы:
# SberTrack test checklist
## 1. Before test
- Проверить текущую директорию.
- Проверить .env без вывода секретов:
grep -E 'sbertrack_write_enabled|sbertrack_project_key|sbertrack_base_url' .env
- Убедиться, что sbertrack_write_enabled=false.
- Проверить py_compile.
## 2. Dry-run tests
Команды:
python src/main.py --tracker sbertrack --action sbertrack_cache_status --project luch --service luch-pprb
python src/main.py --tracker sbertrack --action sbertrack_plan_full_release_safe --project luch --service luch-pprb
python src/main.py --tracker sbertrack --action sbertrack_create_full_release_from_yaml_ensure --project luch --service luch-pprb
Ожидается:
- POST не выполняется;
- payload отображается sanitized;
- blockers отображаются;
- links не создаются при write_enabled=false.
## 3. Real write tests
Написать:
Выполнять только после явного подтверждения наставника/пользователя.
Проверять:
- create release;
- create epic;
- create story;
- create task;
- create bug;
- create blocker;
- create links;
- PATCH update;
- remote search;
- ensure without duplicate.
## 4. After write
- Вернуть sbertrack_write_enabled=false.
- Проверить cache.
- Не делать git push без отдельного запроса.
## zadanie1/examples/release-full-example.yaml
Создать полный YAML из раздела SBERTRACK_YAML_FORMAT.md.
## zadanie1/examples/blocker-example.yaml
Создать только пример blocker:
blockers:
- summary: "TEST blocker summary"
description: "Optional description"
space: "TST123456"
priority: "low"
workflow_status:
command: "NEW"
reporter: "23865613"
reason_for_blocking: "external_wait"
ci_code: "CI02298102"
И рядом добавить комментарий в markdown или YAML comment:
reason_for_blocking уходит в API как {"code": "external_wait"}.
## zadanie1/examples/commands.md
Добавить команды:
# Commands
## Syntax check
python -m py_compile src/sbertrack_api.py src/sbertrack_planner.py src/unit_cache.py src/main.py src/yaml_reader.py
## Safe plan
python src/main.py --tracker sbertrack --action sbertrack_plan_full_release_safe --project luch --service luch-pprb
## Ensure dry-run
python src/main.py --tracker sbertrack --action sbertrack_create_full_release_from_yaml_ensure --project luch --service luch-pprb
## Cache status
python src/main.py --tracker sbertrack --action sbertrack_cache_status --project luch --service luch-pprb
## Find release by summary
python src/main.py --tracker sbertrack --action sbertrack_find_unit_by_summary --project luch --service luch-pprb --unit-type release --search-summary final-check-20260710-003 --space TST123456
## Links only example
python src/main.py --tracker sbertrack --action sbertrack_create_links_only --release_code TST123456-82 --epic_code TST123456-83 --story_codes TST123456-85,TST123456-86 --task_codes TST123456-87,TST123456-88,TST123456-89 --bug_codes TST123456-81
## Правила безопасности
Перед real write:
- явно подтвердить действие;
- включить sbertrack_write_enabled=true;
- выполнить только один тест;
- сразу вернуть sbertrack_write_enabled=false.
Финально:
После создания файлов вывести отчет:
1. Какие файлы созданы.
2. Кратко что внутри каждого файла.
3. Подтвердить:
- рабочий код проекта не менялся;
- POST/PATCH/PUT/DELETE не выполнялись;
- .env не менялся;
- секреты не выводились;
- git push не выполнялся.