Актуальность графа: status, update, rebuild
Что это
Три команды управляют жизненным циклом графа кода: status проверяет свежесть, update обновляет граф инкрементально, rebuild строит полную новую проекцию. status и запросы — операции только для чтения; update и rebuild — явные записи (docs/11-code-graph-and-execution-plane.md, «Code-graph lifecycle»).
Когда использовать
graph status— когда нужно понять, актуален ли граф, и что именно изменилось.graph update— после локальных правок: изменённых, новых, удалённых или переименованных файлов.graph rebuild— когда нужно построить проекцию с нуля, игнорируя кэш (например, при сбросе плоскости графа).
Предварительные условия
Флаг code_graph_enabled должен быть включён (по умолчанию true в config/raytsystem.toml). При выключенном флаге status вернёт состояние MISSING с причиной disabled, а сборка завершится ошибкой «disabled by project policy» (src/raytsystem/codegraph/projection.py).
Как это работает
graph status (только чтение)
status выполняет проверку свежести по content hash: сравнивает хеши содержимого файлов текущего снимка с наблюдаемыми в рабочей копии и возвращает ограниченные списки изменённых и удалённых относительных путей (projection.py, метод status). Возможные состояния: CURRENT, STALE, BUILDING, MISSING, ERROR, UNCHECKED. Граф считается устаревшим (STALE), если изменились или удалились файлы, поменялся отпечаток конфигурации/экстрактора, сменился Git-коммит/ветка или предыдущее обновление было брошено (projection.py). Списки путей ограничены (до 500) с флагом paths_truncated.
graph update (инкрементально)
update переиспользует только семантически проверенные записи кэша по каждому файлу и заново извлекает лишь изменившиеся. Он учитывает изменённые, новые и удалённые файлы (переименование — это удаление плюс добавление). Результат содержит счётчики processed_files, skipped_files, deleted_files, cache_hits, число нод и рёбер (projection.py, _build).
graph rebuild (полная проекция)
rebuild игнорирует кэш и извлекает все файлы заново, строя полную новую проекцию (projection.py; docs/11-...). Используйте его для чистого пересоздания.
Атомарная установка
И update, и rebuild записывают неизменяемые объекты снимка/манифеста, а затем атомарно переключают указатель .raytsystem/graph/CURRENT под обновлённой ограждённой (fenced) арендой. Брошенный или подготовленный WAL никогда не выдаёт себя за текущую сборку (docs/11-..., projection.py). Если логический отпечаток, коммит и ветка совпадают с прежним снимком, операция завершается как no_op.
Пошагово
# 1. Проверить свежесть (только чтение)
uv run raytsystem graph status --json
# 2. Обновить инкрементально после правок
uv run raytsystem graph update --json
# 3. Или собрать полную проекцию заново
uv run raytsystem graph rebuild --json
Ожидаемый результат
status --json вернёт состояние и, при устаревании, списки изменённых/удалённых путей. update/rebuild --json вернут идентификатор снимка, отпечаток, счётчики обработанных/пропущенных/удалённых файлов и длительность.
Из интерфейса
Те же операции доступны во «Вселенной» в линзе Код: Inspector предоставляет ограниченные действия обновления/пересборки. Браузер запрашивает только типизированную операцию update/rebuild, привязанную к ожидаемому снимку, под защитой сессии/Origin/CSRF/идемпотентности; UI никогда не собирает и не выполняет команды оболочки (docs/11-..., ADR-016).
Ограничения и безопасность
- Изменение исходников/конфигурации/экстрактора делает граф устаревшим; при graph-first подготовке рабочего пространства это приводит к безопасному отказу (fail closed) до успешного
updateилиrebuild(docs/11-...). - Снимки под
.raytsystem/graph/одноразовы. Не редактируйте и не коммитьте их; не создавайтеgraphify-out/. - Для сброса плоскости остановите локальный UI, удалите только
.raytsystem/graph/, восстановите флаги и выполнитеgraph rebuild. Никогда не удаляйте и не переписывайте канонические объекты реестра ради сброса графа (docs/11-...).
Частые ошибки
- Граф отстаёт от кода — обычная причина в том, что после правок не запущен
update. Запуститеgraph status, затемgraph update. - Ожидание, что
updateподхватит смену ветки — смена Git-коммита/ветки помечает граф устаревшим; выполнитеupdateилиrebuild.
Связанные страницы
- Граф проекта: обзор
- Запросы к графу: query, explain, neighbors
- Вселенная и линза «Код»
- Граф отсутствует или устарел
Источники истины
docs/11-code-graph-and-execution-plane.mdsrc/raytsystem/codegraph/projection.pyops/decisions/ADR-016-native-derived-code-graph.md