Перейти к содержимому
GitRiverGitRiver
EN
Навигация

Знание команды и указатель по коду

Как память команды о коде живёт в репозитории, что показывает вкладка «Знание», как разбирается мёртвая память и что отвечает указатель по коду

Появилось в 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. Файлы прочих языков в указатель не попадают.