Загрузка данных
Работаем с двумя копиями skill project_manager:
Исходная копия:
/Users/23865613/IdeaProjects/untitled/project-manager-tools/zadanie1/project_manager
Установленная копия:
/Users/23865613/.gigacode/skills/project_manager
Контекст:
Реальный интеграционный тест установленного skill успешно завершён.
Подтверждены:
- Release create — HTTP 200
- Epic create — HTTP 200
- Story create — HTTP 200
- Task create — HTTP 200
- Bug create — HTTP 200
- Blocker create — HTTP 200
- Links — HTTP 201
- Remote search — HTTP 200
- PATCH/update — HTTP 200
- Ensure без дублей — работает
Во время теста обнаружена одна проблема:
При первом создании Story SberTrack потребовал явно передать:
reporter
workflow_status:
command: NEW
После добавления этих полей Story успешно создалась как TST123456-108.
Задача:
Зафиксировать это исправление постоянно в исходной и установленной версиях skill.
Важно:
- не выполнять реальные POST/PATCH/PUT/DELETE;
- не создавать сущности;
- не создавать links;
- не менять рабочий .env;
- не выводить секреты;
- не выводить полный .env;
- не делать git push;
- sbertrack_write_enabled должен оставаться false;
- сначала создать backup изменяемых файлов.
==================================================
1. НАЙТИ ПРИЧИНУ
==================================================
Проверь в обеих копиях:
- build_story_payload
- map_story_yaml_to_sbertrack_payload
- create_story
- ensure_unit_by_summary
- обработку Story в create_full_release_from_yaml
- Story в примерах YAML
- тесты payload builders
Определи, почему reporter и workflow_status не были переданы в первоначальном Story payload.
Проверь также аналогичные payload для:
- epic;
- task;
- bug;
- blocker.
Убедись, что обязательные общие поля не теряются при переходе:
YAML
→ map_*_yaml_to_sbertrack_payload
→ ensure_unit_by_summary
→ create_<type>
→ HTTP payload
==================================================
2. ИСПРАВИТЬ STORY PAYLOAD
==================================================
Story payload должен всегда поддерживать:
{
"summary": "...",
"description": "...",
"space": "TST123456",
"attributes": {
"priority": "low",
"workflow_status": {
"command": "NEW"
},
"reporter": "23865613"
}
}
Правила:
- workflow_status по умолчанию:
{"command": "NEW"}
- reporter:
брать из явно переданного YAML;
если его нет — использовать настроенного SberTrack-пользователя;
не хардкодить значение 23865613 непосредственно в библиотечном коде;
не выводить credentials.
- существующие дополнительные attributes не удалять;
- sber_configuration_item и другие поля передавать, если они присутствуют в YAML;
- не переписывать проект с нуля.
==================================================
3. ПРОВЕРИТЬ ОСТАЛЬНЫЕ UNIT TYPES
==================================================
Проверь, что create payload для каждого типа сохраняет обязательные поля:
release:
- summary
- space
- workflow_status
- reporter, если требуется
- release-specific attributes
epic:
- summary
- space
- workflow_status
- reporter
story:
- summary
- space
- workflow_status
- reporter
task:
- summary
- space
- workflow_status
- reporter
bug:
- summary
- space
- workflow_status
- reporter
- sber_configuration_item, если передан
blocker:
- summary
- space
- workflow_status
- reporter
- reason_for_blocking
- sber_configuration_item, если передан
Не добавляй неподтверждённые обязательные поля. Сохрани текущие рабочие payload.
==================================================
4. ОБНОВИТЬ ПРИМЕРЫ
==================================================
Обнови в исходной копии:
examples/full_release_example.yaml
examples/create_release_example.yaml
examples/create_blocker_example.yaml
templates/release.yaml
docs/YAML_FORMAT.md
docs/SBERTRACK_API.md
В Story, Epic, Task, Bug и Blocker явно покажи:
workflow_status:
command: NEW
reporter должен быть описан как:
- необязательное поле YAML;
- при отсутствии берётся из конфигурации текущего пользователя.
Не помещай реальные credentials или пароль в примеры.
==================================================
5. ДОБАВИТЬ ТЕСТЫ
==================================================
Добавь тесты, которые проверяют:
1. Story payload содержит workflow_status.
2. Story payload содержит reporter.
3. Reporter берётся из YAML, если указан.
4. Reporter берётся из конфигурации, если в YAML отсутствует.
5. ensure_unit_by_summary не теряет reporter и workflow_status.
6. Дополнительные attributes Story сохраняются.
7. Bug сохраняет sber_configuration_item.
8. Blocker сохраняет reason_for_blocking как:
{"code": "external_wait"}
9. Все create-методы при write_enabled=false не выполняют HTTP POST.
Используй mocks/fakes. Реальные сетевые запросы запрещены.
==================================================
6. СИНХРОНИЗИРОВАТЬ КОПИИ
==================================================
Сначала исправь исходную копию:
/Users/23865613/IdeaProjects/untitled/project-manager-tools/zadanie1/project_manager
После успешных тестов синхронизируй её в:
/Users/23865613/.gigacode/skills/project_manager
При синхронизации исключить:
- .env
- credentials
- .sbertrack_cache
- __pycache__
- *.pyc
- *.backup
- *.bak
- .pytest_cache
- .DS_Store
Не копировать рабочий `.env`.
==================================================
7. ПРОВЕРКИ
==================================================
В обеих копиях выполнить:
python -m py_compile src/main.py src/sbertrack_api.py src/sbertrack_planner.py src/unit_cache.py src/yaml_reader.py
pytest -q
Дополнительно выполнить локальный dry-run тест Story payload и показать sanitized payload.
Ожидаемый фрагмент:
{
"summary": "story-payload-regression-test",
"space": "TST123456",
"attributes": {
"workflow_status": {
"command": "NEW"
},
"reporter": "<текущий настроенный пользователь>"
}
}
Не показывать пароль или Authorization.
==================================================
8. ФИНАЛЬНЫЙ ОТЧЁТ
==================================================
Выведи:
## Какие файлы изменены
Таблица:
Копия | Файл | Изменение | Backup
## Причина ошибки Story
Показать точную цепочку, где терялись reporter и workflow_status.
## Исправленный payload
Показать sanitized Story payload.
## Регрессионная проверка остальных сущностей
Таблица:
Unit type | workflow_status | reporter | специальные поля | Результат
## Тесты
Показать:
- py_compile;
- количество pytest;
- passed;
- failed.
## Синхронизация
Подтвердить, что исходная и установленная копии содержат одинаковую исправленную реализацию.
## Безопасность
Подтвердить:
- sbertrack_write_enabled=false;
- POST не выполнялся;
- PATCH не выполнялся;
- PUT не выполнялся;
- DELETE не выполнялся;
- links не создавались;
- сущности не создавались;
- git push не выполнялся;
- credentials не выводились;
- полный .env не выводился;
- Authorization не выводился.
## Итог
Подтвердить, что исправление Story сохранено постоянно и skill готов к размещению в репозитории.