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


Работаем с двумя копиями 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 готов к размещению в репозитории.