RAGRAF Core¶
Навык работы с ядром RAGRAF: как получить факт из индекса, как понять, что факту
нельзя верить, и что делать, когда индекс сломан. Всё опирается на файлы проекта
C:\AutoClaw\RAGRAF; где стоит файл:строка — это проверено чтением, а не памятью.
Правила проекта лежат в AGENTS.md в корне проекта (читается автоматически),
глубокий паспорт — docs/AGENTS-context.md, чекер конвенций —
tools/Invoke-ProjectDoctrine.ps1.
1. Когда этот навык применяется¶
- Нужен ответ о коде проекта вместо чтения файлов: где определено, кто вызывает, что сломается, что в таблице, где запись в таблицу, где применяется класс.
- Индекс и код разошлись: результат выглядит устаревшим, ревизия старая, сторож сообщает о расхождении.
- Корпус не отвечает:
capability=degraded, операция отказывает, срез недоступен. - Меняются исключения, список языков или настройки корпуса.
- Реестр разработок показывает пустую ревизию или нули при живом индексе.
2. Первый шаг любой задачи — актуализировать корпус¶
Факты берутся из индекса, поэтому устаревший индекс запрещён:
python tools/ragraf.py ensure <каталог проекта> # найти, пересобрать, создать
python tools/ragraf.py -p config/ragraf.yaml check # только сверка суммы
ensure отвечает полем status: actual — индекс актуален, reindexed —
пересобран только что, created — корпуса не было и он создан, not_a_project —
каталог не похож на проект, error — причина в поле reason.
Признак stale в ответе любой операции означает, что код ушёл вперёд и факты
индекса неверны. Работать по ним нельзя.
3. Выбор операции вместо чтения файлов¶
| Вопрос | Операция |
|---|---|
| «Какой корпус выбран и на каком основании» (работает и без выбора) | context |
| «Где определена функция или класс» | symbol |
| «Где описано, как устроено» | search |
| «Кто вызывает» / «что вызывает» | callers / callees |
| «Что затронет правка» | impact |
| «Тело функции» (только когда нужен текст) | code |
| «Что в таблице» / «кто читает и пишет» | schema / table_usage |
| «Можно ли так записать» — до написания SQL | write_check |
| «Кто и по какому условию получает право» | policy_trace |
| «Есть ли правило в стилях и где класс применён» | class_usage |
| «Актуален ли индекс» | freshness, index_status |
| «Общая структура» | repo_map |
| «Что заведено в реестре» | catalog |
| «Актуальное содержимое файла с пометкой отличий» | live_read |
| «Что в ЖИВОЙ базе: базы, таблицы, колонки, типы» | db_schema |
| «Устройство одной таблицы» | db_table |
| «Связи таблицы: факт и вывод» | db_relations |
| «Как выглядят данные» (сборный пример) | db_sample |
| «Что изменилось в структуре баз» | db_drift |
| «Чего нет в базе из того, что код использует» | db_cross |
Через оболочку это python tools/ragraf.py -p <конфиг> query <операция> …,
через инструменты агента — ragraf_<операция>. Подробный разбор выбора —
reference/operations.md.
Чего операция не заменяет: полнотекстового чтения там, где нужны детали. symbol
и code возвращают диапазон строк, а не файл целиком.
4. Жёсткие правила¶
Слой живых баз: четыре границы, которые нельзя переступать.
db_relationsделит связи по происхождению.stated— внешний ключ, это ФАКТ (достоверность 1.0).derived— вывод по имени колонки (user_id→users), это ПРЕДПОЛОЖЕНИЕ (0.4). Ссылаться на вывод как на структуру нельзя: в живых базах внешние ключи часто не объявлены (измерено: 0 связей из FK на 86 таблиц), поэтому вывод — единственный способ увидеть связи, но он бывает неверным.db_sample— снимок, а не текущее состояние. Строки меняются, структура нет. Не пересказывать пример как факт о данных.- «Скрыто: персональные данные» — не пустое поле. Значения персональных колонок не собираются вовсе. Колонка присутствует, значение закрыто.
-
Схема из миграций и живая база — РАЗНЫЕ источники.
schemaчитает миграции («как задумано»),db_schema— живую базу («как есть»). Расхождение между ними — находка. -
Факт без ссылки
файл:строка— догадка. Каждый значимый вывод подкреплять ссылкой на код. - Число из документа проверять по коду. Проект уже расходился с собственной
документацией: на разных этапах код объявлял больше, чем называли документы
(аудит 12.10.2026: 22 операции фасада и 23 инструмента против 17, 18, 16 и 21
в документах — дефект B-01 в реестре). Действующие числа на 16.10.2026 —
40 инструментов и 38 операций фасада (
src/ragraf/mcp_server.py,src/ragraf/facade.py) плюс 39 имён в CLI (OPSвsrc/ragraf/cli.py). Числа проверяются подсчётом"name": "ragraf_*",def op_*иOPS, а не памятью. - Не читать секретоносные имена (перечень —
AGENTS.md, раздел 6): только имя, размер и правило. Реестра git в проекте нет — единственная защита в том, чтобы не открывать их. - Не запускать чужой код во время разведки. Проект исполняется только тогда, когда задача именно об этом.
- Не считать
selftestгейтом: он всегда возвращает код 0 (src/ragraf/cli.py:906). empty result— это код 0 сfound=false, а не ошибка; код 3 означает «операция невыполнима сейчас», например срез приcapability != "full"(src/ragraf/cli.py:336-356).
5. Что ломается чаще всего¶
- Реестр расходится с индексом после
ensure.src/ragraf/ensure.py:308-312регистрирует корпус до индексации и не записывает результат прогона. Измерено: запись с триггеромregisterимеет пустыеrev_id/capabilityиnode_count=0, тогда как в индексе 1855 узлов. Лечение — рецепт вreference/repair.md. - Правка исключений молча выбрасывает рабочий код. Сопоставление
регистрозависимо (
src/ragraf/util.py:72-158);**/cache/**не ловитsrc/Cache/. Перед расширением списка —python tools/measure_safe_excludes.py. - Схлопывание дублей включают, не понимая цены. Включение меняет контрольную
сумму корпуса: сторож свежести один раз переиндексирует корпус. Выбор главной
копии обязан быть детерминированным (
src/ragraf/dedupe.py:165-223), иначе переиндексация не остановится. capability=degradedпринимают за поломку. Это честная пометка: CPG не построен, срез недоступен, остальное работает. Причина всегда записана вindex_status.- Видеокарта считается гарантией. Путь вычислений на карте требует
sentence-transformersиtorch, не объявленных в описании пакета (src/ragraf/compute.py:141-146); порог окупаемости — 1800 текстов для векторов и около 5000 вершин для графа.
6. Порядок работы¶
- Актуализировать корпус (
ensure). - Сформулировать вопрос в терминах операции, а не файла.
- Получить факты со ссылками и убедиться, что индекс не помечен устаревшим.
- Читать файл целиком только там, где операция не отвечает на вопрос.
- После правки ядра:
python tools/ragraf.py -p config/ragraf.yaml reindex
python tools/ragraf.py -p config/ragraf.yaml check
pwsh -NoLogo -NoProfile -NonInteractive -File tools/Invoke-ProjectDoctrine.ps1
- Чекер знает свой baseline: 0 ошибок, 0 предупреждений (
checks: 19), ошибок нет с 9 октября 2026 (AGENTS.md, раздел 10). Ошибка или новое предупреждение — находка.
7. Файлы навыка¶
reference/operations.md— как выбрать операцию и чего она не показывает.reference/repair.md— рецепты: устаревший индекс, пустой реестр,degraded, зацикливание сторожа, ошибка в исключениях, откат к процессорному вычислителю.