Перейти к основному содержимому

Сценарий 10: межрепозиторное влияние

Найдите зависимости и повторяющиеся реализации в нескольких репозиториях. Соберите результаты для оценки влияния изменения и плана консолидации.

Руководства

Используйте этот сценарий, если изменение в одном репозитории может затронуть код, зависимости или похожие реализации в других. Результат — список затронутых репозиториев, зависимостей и похожих реализаций со свидетельствами для ревью.

Когда применять

Сценарий подходит для ограниченного рабочего каталога с несколькими репозиториями и одним конкретным вопросом:

  • какие репозитории вызывают или дублируют изменяемый интерфейс;
  • где общая зависимость создаёт цикл или сильную связанность;
  • какие кандидаты на консолидацию требуют ручной проверки.

Для структуры внутри одного репозитория используйте сценарий 11, для массовой миграции кода — сценарий 13.

Предварительные условия и область

Подготовьте окружение Python и локальную конфигурацию по руководству CLI и программному интерфейсу. Нужны принятая задача рецензента, актуальный CPG проекта, необходимые сервисы графа и настроенная LLM. До запуска зафиксируйте список репозиториев и ревизию каждого из них.

Запускайте файл Python из рабочего каталога, содержащего нужные репозитории. Для приведённого ниже вызова сценарий ищет Git-репозитории в непосредственных подкаталогах этого каталога. Например, если рабочий каталог содержит billing-service и billing-client, оба репозитория входят в поиск. Зафиксируйте рабочий каталог и сверяйте найденный список с выбранной областью анализа.

Сначала импортируйте нужные репозитории. Для каждого найденного репозитория сценарий собирает число методов и строк из существующего графа. Он сопоставляет имя репозитория с началом пути файла в CPG. Если число методов равно нулю, сравните пути в графе с путями репозитория и проверьте результат импорта.

Запуск типизированного сценария

Сохраните пример в файл Python в настроенном окружении и выполните его из выбранного рабочего каталога. Пакет src должен быть доступен в этом окружении, как описано в руководстве программного вызова. Замените обозначения в контексте на принятую задачу, проект, namespace, ссылки на свидетельства и пути исходников. Уточните вопрос для реального интерфейса.

from src.digital_employees.runtime.scenarios import (
    RoleBoundScenarioInvocationRequest,
    invoke_role_bound_scenario_request,
)

request = RoleBoundScenarioInvocationRequest(
    query="Найди межрепозиторные зависимости, затронутые изменением BillingClient.",
    employee_id="codegraph_reviewer",
    scenario_id="scenario_10",
    event_type="review_start",
    context={
        "project_key": "codegraph",
        "namespace": "default",
        "task_id": "<task-id>",
        "source_refs": ["<revision-manifest-ref>"],
        "file_paths": ["<bounded-source-path>"],
    },
)
result = invoke_role_bound_scenario_request(request)
if result.get("error"):
    raise RuntimeError(result["error"])
if not result.get("scenario_id") or not result.get("answer"):
    raise RuntimeError("Scenario returned no scenario identity or answer")
print(result["answer"])

Сценарий 10 запускается через типизированный ролевой вызов. Запрос передаёт сотрудника, событие и свидетельства привязки к задаче вместе с вопросом о межрепозиторных зависимостях.

Как читать результат

Сохраните вместе с результатом:

  • answer — сводное объяснение;
  • evidence — сведения о зависимостях, дубликатах и циклах;
  • metadata.role_bound_scenario_invocation — сотрудника, событие, workflow и результат preflight;
  • исходный список репозиториев и их ревизии.

Проверяйте важные утверждения в названном репозитории и ревизии. Сходство или зависимость создают повод для ревью; взаимозаменяемость двух реализаций подтверждается сравнением и решением владельца.

План консолидации

Используйте найденные зависимости и похожие реализации, чтобы выбрать кандидатов на консолидацию. Сравните их интерфейсы, поведение и тесты. Согласуйте изменения с владельцами затронутых репозиториев и сохраните план вместе с результатом анализа.

Ошибки и восстановление

  • В списке только текущий каталог .: проверьте, что нужные Git-репозитории находятся в непосредственных подкаталогах рабочего каталога. Запустите файл примера из этого каталога и сверяйте полученный список с выбранной областью.
  • Результаты устарели или смешались: обновите только нужные репозитории и повторите анализ на тех же ревизиях.
  • Ошибка при запуске: прочитайте сообщение в error, проверьте доступность CPG и сохраните сведения о недоступном источнике. После восстановления повторите запрос на той же области.
  • Найдены посторонние репозитории: сохраните полученный список, исправьте границу рабочего каталога и повторите анализ.

Связанные материалы