Навигация
Знание команды и указатель по коду
Как память команды о коде живёт в репозитории, что показывает вкладка «Знание», как разбирается мёртвая память и что отвечает указатель по коду
Появилось в 1.1.0. В версии 1.0.0 этой возможности нет — что меняется при переходе.
Знание - память команды о коде: что выяснили, почему сделали так и что проверять в следующий раз. Нужна она прежде всего ИИ-агенту, который иначе каждый раз начинает с чистого листа, но человеку видна тем же экраном - вкладка «Знание» в репозитории.
Записи и черновики работают в любой редакции. Платно только сведение счётчиков по команде и разбор мёртвой памяти (Pro) и предел черновиков (Max).
Что видно на вкладке
- Указатель - всё знание репозитория: фрагмент записи, объявленные механизмы всплытия и пометка «не всплывёт» у записи, механизм которой эта версия сервера не умеет. Такая запись оживёт сама после обновления, пересобирать ничего не нужно.
- Черновики - незрелые записи. Черновик виден всей команде сразу, ещё до слияния ветки: иначе находка одной ветки не дошла бы до соседней. Оттуда же пачка отправляется наружу - файлами в ту самую ветку, из которой записана.
- Мои счётчики - сколько раз запись показали лично вам и сколько раз вы её открыли: «показали двенадцать раз, не открыл ни разу». Это доказательство, что память работает, и первый признак, что она мертва.
Как знание попадает в репозиторий
Долговечная запись живёт файлом в .gitriver/knowledge/, а счётчики и черновики - в базе: счётчик в git класть нельзя, каждое чтение порождало бы коммит.
Наружу знание выходит пачкой и обычным пулл-реквестом - своего потока одобрения у него нет. Защита ветки, CODEOWNERS и проверки слияния действуют на него как на любой другой запрос. Запись проверяется на секреты при приёме.
Что записывать. То, что сэкономит время в следующий раз: причина неочевидного решения, грабли окружения, порядок действий, который не выводится из кода. Не годится пересказ кода - он и так виден, а память, которую не открывают, только мешает искать нужное.
Разбор мёртвой памяти (Pro)
Сведение по команде показывает каждую запись указателя, в том числе ту, которую не показывали ни разу, - нулевой строкой. Иначе главную болезнь памяти не увидеть: запись, которая никогда не всплывала, в счётчиках показов просто отсутствует.
Мёртвая память - записи, которые не работают. Разбор на вкладке «По команде» называет не только их, но и причину:
| Причина | Что это значит | Чем лечится |
|---|---|---|
| Показывают, не открывают | Условие всплытия срабатывает не там, где запись нужна. Самая дорогая болезнь: такая запись тратит внимание агента на каждом шаге | Переписать условие всплытия либо снять запись |
| Всплыть не может | Ни одного объявленного механизма эта версия сервера не умеет; отчёт называет, каких именно не хватает | Обновить узел - запись оживает сама |
| Не всплывала ни разу | Механизм поддержан, но его условие не наступало | Расширить условие либо снять запись |
Пороги названы прямо в отчёте: запись считается больной, если её показали не меньше трёх раз без единого открытия либо она не всплыла ни разу за неделю. Свои пороги задаются параметрами min_shown и min_age_days.
Указатель по коду (Pro)
Вкладка «Символы» отвечает на три вопроса о коде репозитория: где символ, что он зовёт и кто зовёт его. Общую карту имён сервер строит один раз для всей команды, и она доступна без клона репозитория.
Это не поиск по коду. Поиск отвечает «где встречается строка» и одинаково показывает объявление, вызов и слово в комментарии. Указатель отвечает о связях - «кого сломает правка этой функции», и такого ответа поиск дать не может.
И не замена среде разработки. Связь вызова хранится по имени, без вывода типов: «кто зовёт push» покажет вызовы одноимённых методов разных типов. Для уникальных имён ответ точен, для коротких - шумен. Указатель ценен там, где среды разработки нет: в вебе, при разборе чужого репозитория и у ИИ-агента, который видит репозиторий через API.
Что показывает вкладка
Начните вводить имя - поиск идёт по началу имени. У найденного символа видно вид (функция, метод, структура, трейт), родительский блок и путь со строкой: ссылка ведёт прямо в код. Выберите символ - рядом появятся два списка: что он зовёт (с числом повторов: цикл из полусотни вызовов - одна строка со счётчиком) и кто зовёт его.
Когда ответ помечен оговоркой
Указатель догоняет дерево сам: он сверяется с репозиторием при чтении и досчитывает разницу. Если досчёт не успел, ответ помечается «указатель догоняет дерево» - и это важное отличие от «ничего не найдено»: тот же вопрос, заданный снова, ответит полнее. Отдельная пометка «указатель неполон» означает, что репозиторий упёрся в предел размера указателя и часть кода в него не вошла.
Разбираются Rust, Python, JavaScript и TypeScript. Файлы прочих языков в указатель не попадают.