Путь и влияние: path, impact
Что это
Две операции графа кода, которые отвечают на структурные вопросы «как связаны две сущности» и «что сломается, если я это трону»:
graph path— детерминированный кратчайший путь между двумя узлами. Обход идёт в ширину (BFS) по рёбрам в обоих направлениях, а среди нескольких рёбер между соседями предпочитаются достоверные, а не выведенные или неоднозначные (src/raytsystem/codegraph/querying.py).graph impact— обратные зависимости: кто ссылается на файл или узел. Операция идёт по рёбрам в обратную сторону и показывает, что затрагивает предлагаемое изменение.
Обе операции только читают текущий снимок графа и никогда не пишут в него.
Когда использовать
- Нужно понять, через какие модули связаны два компонента, —
graph path. - Планируется правка файла или функции, и нужно заранее увидеть затронутых потребителей —
graph impact. - Готовится ревью или оценка риска изменения.
Предварительные условия
- Флаги
code_graph_enabledиgraph_first_query_enabledвключены (значения по умолчанию). - Граф в состоянии
current. Если исходники, конфигурация или экстрактор менялись, граф считается устаревшим и операции завершаются с ошибкой (fail-closed), пока не выполненаgraph updateилиgraph rebuild. См. обновление и пересборку.
Пошагово
- Убедитесь, что граф свежий:
uv run raytsystem graph status --json. - Для пути укажите два узла (типизированный ID, символ или относительный путь):
uv run raytsystem graph path <a> <b> --json. - Для оценки влияния укажите файл или узел:
uv run raytsystem graph impact <file-or-node> --json. Глубина обхода задаётся флагом--depth(1..3, по умолчанию 3).
Пример
uv run raytsystem graph path TaskService ControlDB --json
uv run raytsystem graph impact src/raytsystem/tasking.py --depth 3 --json
Ожидаемый результат
pathвозвращает упорядоченную цепочку узлов от источника к цели и рёбра между ними. Если пути нет, операция сообщает об этом явной ошибкой.impactвозвращает множество узлов-потребителей с их глубиной (на каком расстоянии от изменения они находятся). Учитываются рёбра типовcalls,configured_by,depends_on,implements,imports,inherits,references,tests,verifies(src/raytsystem/codegraph/querying.py).- Оба результата снабжены идентификатором и отпечатком снимка, а также оценкой размера контекста.
Ограничения и безопасность
- Результат ограничен настроенным бюджетом узлов и байт. Если кратчайший путь не помещается в бюджет узлов, операция завершается ошибкой, а не выдаёт усечённый путь. Для
impactобход останавливается при достижении лимита узлов. - API и CLI принимают только типизированные ссылки на узлы, символы или относительные пути — никогда не абсолютный путь, cwd, argv или команду.
- Неоднозначная ссылка (одинаковая метка у разных файлов) отклоняется с ошибкой — уточните узел точным ID.
- Граф — производное состояние. Он не заменяет канонический реестр
ledger/CURRENTи не является источником истины о фактах.
Частые ошибки
- «Граф не current» — сначала
graph update/graph rebuild, затем повторите запрос. См. устаревший граф. - «Узел не найден» или «ссылка неоднозначна» — задайте точный ID узла или относительный путь файла.
- «Путь не помещается в бюджет» — сузьте задачу: используйте
impactот конкретного узла вместо длинного сквозного пути.
Связанные страницы
Источники истины
src/raytsystem/codegraph/querying.pysrc/raytsystem/cli.pydocs/11-code-graph-and-execution-plane.md