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


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

project_manager

Skill расположен здесь:

/Users/23865613/.gigacode/skills/project_manager

Работаем в проекте:

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

Цель:
Провести контролируемую проверку установленного skill project_manager на реальном SberTrack API.

Важно:
Это проверка именно установленной копии skill из каталога GigaCode, а не исходной папки zadanie1/project_manager.

Не изменяй исходный skill.
Не копируй в него .env.
Для credentials используй конфигурацию рабочего проекта project-manager-tools.
Не выводи логин и пароль.
Не выводи полный .env.
Не печатай заголовок Authorization.
Не делай git push.

Проверку выполнить строго по этапам.

==================================================
ЭТАП 1. ПРОВЕРКА ИСТОЧНИКА SKILL
==================================================

Подтверди, что используется установленный skill:

/Users/23865613/.gigacode/skills/project_manager

Покажи:

- путь к загруженному SKILL.md;
- путь к src/main.py;
- путь к src/sbertrack_api.py;
- имя skill из frontmatter;
- что GigaCode распознал skill project_manager.

Не изменяй файлы установленного skill.

==================================================
ЭТАП 2. ПРОВЕРКА КОНФИГУРАЦИИ БЕЗ СЕКРЕТОВ
==================================================

Проверь в рабочем проекте только наличие публичных настроек:

- sbertrack_base_url;
- sbertrack_project_key;
- sbertrack_write_enabled.

Не выводи:

- username;
- password;
- токены;
- Authorization;
- полный .env.

Ожидаемое состояние перед тестом:

sbertrack_project_key=TST123456
sbertrack_write_enabled=false

Если значение write_enabled другое, вернуть его в false до начала теста.

==================================================
ЭТАП 3. READ-ONLY API CHECK
==================================================

Выполни безопасные реальные запросы чтения:

1. GET /rest/api/user/v1/current-info
2. GET /rest/api/space/v3/TST123456

Нужно получить:

- HTTP status;
- имя текущего пользователя без credentials;
- код пространства;
- подтверждение доступности API.

Если любой запрос вернул не 200:

- прекратить тест;
- не выполнять POST/PATCH;
- вернуть sbertrack_write_enabled=false;
- вывести причину.

==================================================
ЭТАП 4. DRY-RUN ЧЕРЕЗ УСТАНОВЛЕННЫЙ SKILL
==================================================

Подготовить отдельный тестовый YAML в рабочем проекте.

Путь:

projects/luch/services/luch-pprb/releases/release-skill-api-test.yaml

Использовать уникальный префикс:

skill-api-test-20260713-001

YAML должен содержать:

- 1 release;
- 1 epic;
- 1 story;
- 1 task;
- 1 bug;
- 1 blocker;
- связи между ними.

Все поля должны быть заполнены рабочими значениями.

Для release использовать подтвержденные поля:

summary: skill-api-test-20260713-001
description: Controlled API test created by installed GigaCode project_manager skill. Safe to delete.
space: TST123456
cl_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-07-20T10:00:00+03:00"
introduction_start_date: "2026-07-21T09:00:00+03:00"

Для дочерних сущностей использовать уникальные summary:

- skill-api-test-20260713-001 epic
- skill-api-test-20260713-001 story
- skill-api-test-20260713-001 task
- skill-api-test-20260713-001 bug
- skill-api-test-20260713-001 blocker

Для blocker использовать подтвержденный формат:

summary: skill-api-test-20260713-001 blocker
description: Controlled blocker test from installed project_manager skill. Safe to delete.
space: TST123456
priority: low
workflow_status:
  command: NEW
reporter: текущий пользователь
reason_for_blocking:
  code: external_wait
sber_configuration_item:
  - code: CI02298102

На этапе dry-run:

- sbertrack_write_enabled=false;
- показать все payload;
- не выводить credentials;
- не выполнять POST;
- не выполнять PATCH;
- не создавать links.

Проверить, что skill распознал:

- release;
- epic;
- story;
- task;
- bug;
- blocker;
- links.

==================================================
ЭТАП 5. ENSURE/REMOTE SEARCH ПЕРЕД CREATE
==================================================

Перед реальным созданием выполнить поиск по exact summary для каждой сущности:

- skill-api-test-20260713-001
- skill-api-test-20260713-001 epic
- skill-api-test-20260713-001 story
- skill-api-test-20260713-001 task
- skill-api-test-20260713-001 bug
- skill-api-test-20260713-001 blocker

Использовать:

POST /rest/api/unit/v2/find

Поиск должен идти через установленный skill и его:

find_unit_by_summary()
ensure_unit_by_summary()

Если сущность уже существует:

- не создавать дубликат;
- вернуть существующий code;
- использовать найденный code для связей.

Если сущности не найдены, перейти к следующему этапу.

==================================================
ЭТАП 6. ОДИН КОНТРОЛИРУЕМЫЙ REAL CREATE
==================================================

Сначала выполнить только создание release.

Перед запросом:

1. временно установить sbertrack_write_enabled=true;
2. выполнить ровно один POST:
   POST /rest/api/unit/v2/release/create
3. зафиксировать:
   - HTTP status;
   - созданный code;
   - summary;
4. немедленно вернуть:
   sbertrack_write_enabled=false

Если release не создан:

- не создавать остальные сущности;
- не создавать links;
- вывести response body без секретов;
- завершить тест.

Если release создан успешно, перейти к этапу 7.

==================================================
ЭТАП 7. СОЗДАНИЕ ОСТАЛЬНЫХ СУЩНОСТЕЙ
==================================================

После отдельного успешного создания release разрешено создать:

- epic;
- story;
- task;
- bug;
- blocker.

Перед серией запросов:

sbertrack_write_enabled=true

Использовать только подтвержденные endpoint:

POST /rest/api/unit/v2/epic/create
POST /rest/api/unit/v2/story/create
POST /rest/api/unit/v2/task/create
POST /rest/api/unit/v2/bug/create
POST /rest/api/unit/v2/blocker/create

После каждого запроса:

- проверить HTTP status;
- сохранить созданный code;
- записать code в UnitCache;
- при ошибке остановить создание последующих сущностей;
- не повторять POST автоматически.

После завершения немедленно вернуть:

sbertrack_write_enabled=false

==================================================
ЭТАП 8. СОЗДАНИЕ СВЯЗЕЙ
==================================================

Создавать links только если необходимые сущности успешно созданы или найдены через ensure.

Использовать:

POST /rest/api/unit/v1/link

Создать следующие связи:

1. story → release
   type=release

2. task → release
   type=release

3. epic → release
   type=release

4. story → epic
   type=decomposition

5. task → story
   type=decomposition

6. release → bug
   type=containsbug

7. blocker и блокируемая сущность
   type=blocks

Для blocks перед реальным запросом:

- получить описание link type через link/types;
- определить правильное направление source/destination;
- не угадывать направление;
- использовать описание:
  source = «Заблокирован»
  destination = «Блокирует»

Перед созданием links:

sbertrack_write_enabled=true

После выполнения всех link-запросов немедленно вернуть:

sbertrack_write_enabled=false

HTTP 570 с текстом «связь уже существует» считать идемпотентным результатом, а не падением всего теста.

==================================================
ЭТАП 9. REMOTE SEARCH БЕЗ CACHE
==================================================

Проверить реальный remote search для созданного release:

1. создать backup cache-файла;
2. удалить только запись:
   skill-api-test-20260713-001
3. убедиться, что cache miss подтвержден;
4. выполнить поиск через:
   POST /rest/api/unit/v2/find
5. найти созданный release;
6. проверить, что его code снова сохранён в cache.

Не удалять остальные cache-записи.

==================================================
ЭТАП 10. PATCH/UPDATE
==================================================

Выполнить PATCH только для созданного тестового release.

Новое description:

Controlled PATCH test from installed GigaCode project_manager skill. Existing test release updated successfully. Safe to delete.

Перед PATCH:

sbertrack_write_enabled=true

Endpoint:

PATCH /rest/api/unit/v2/update/{created_release_code}

После одного PATCH немедленно вернуть:

sbertrack_write_enabled=false

Затем выполнить GET по code и подтвердить, что description обновилось.

Не менять summary.

==================================================
ЭТАП 11. ENSURE БЕЗ ДУБЛЕЙ
==================================================

Повторно запустить ensure для того же summary:

skill-api-test-20260713-001

Ожидаемый результат:

- возвращается тот же code;
- новый release не создаётся;
- дополнительный POST create не выполняется.

==================================================
ЭТАП 12. ФИНАЛЬНАЯ БЕЗОПАСНОСТЬ
==================================================

В конце обязательно проверить:

sbertrack_write_enabled=false

Не выполнять:

- DELETE;
- PUT;
- git push.

Не удалять созданные сущности.

Созданные сущности тестовые и могут быть удалены вручную позже.

==================================================
ФИНАЛЬНЫЙ ОТЧЁТ
==================================================

Выведи:

## 1. Использованный skill

- путь к установленному skill;
- подтверждение, что использовалась установленная копия;
- версия или hash файлов, если возможно без изменения репозитория.

## 2. Read-only API

Таблица:

Запрос | HTTP | Результат

## 3. Dry-run

Перечислить:

- release;
- epic;
- story;
- task;
- bug;
- blocker;
- links.

## 4. Remote search перед create

Таблица:

Unit type | Summary | Найден до create? | Code

## 5. Created units

Таблица:

Unit type | Summary | Endpoint | HTTP | Code

## 6. Links

Таблица:

Source | Destination | Type | HTTP | Результат

## 7. Blocker

Показать:

- blocker code;
- reason_for_blocking;
- priority;
- reporter;
- sber_configuration_item;
- endpoint;
- HTTP status;
- blocks link direction.

## 8. Remote search без cache

Показать:

- cache miss;
- endpoint;
- HTTP;
- найденный code;
- восстановление cache.

## 9. PATCH/update

Показать:

- code;
- endpoint;
- HTTP;
- старое description;
- новое description;
- результат GET после PATCH.

## 10. Ensure без дублей

Показать:

- исходный code;
- code после повторного ensure;
- количество дополнительных create POST;
- подтверждение отсутствия дубля.

## 11. Безопасность

Подтвердить:

- sbertrack_write_enabled=false в конце;
- DELETE не выполнялся;
- PUT не выполнялся;
- git push не выполнялся;
- credentials не выводились;
- полный .env не выводился;
- Authorization не выводился;
- запросы выполнялись только для тестового YAML.

## 12. Итог

Написать честно:

- установленный skill реально работает с SberTrack API или нет;
- какие операции подтверждены;
- какие сущности и links созданы;
- были ли ошибки;
- можно ли использовать skill для штатной работы.