Коротко
Статья предлагает систему код-ревью с долговременной памятью: семантический поиск находит похожие прошлые замечания, а SQLite точно считает повторы. Это помогает не терять командные уроки и одновременно сохранять проверяемость статистики и работоспособность при сбое сервиса памяти.
Контекст
Автор описывает проектирование системы код-ревью с двумя экранами: для разработчика и менеджера. Исходная проблема — линтеры и автоматические ревьюеры начинают каждый запуск с нуля, поэтому повторяются одни и те же замечания, например отсутствие таймаута в HTTP-вызове. Имя, роль или компания автора не указаны.
Главное
- Система задумана с экраном разработчика для ревью и экраном менеджера для наблюдения за повторяющимися проблемами.
- Конвейер состоит из Recall, Decide и Save or reuse: найти похожее знание, проверить повтор и сохранить новый случай либо использовать прежнее решение.
- Семантическую память ведёт Hindsight через
retainиrecall; точные числа хранит отдельный SQLite-журнал. - Память предлагается изолировать по командам, а не делать общей для всех или отдельной для каждого разработчика.
- Для поиска используются имя файла и короткое описание ошибки; сырой код из запроса исключён как потенциальный шум.
- Для подсчётов автор предлагает SHA-256-отпечаток из команды, файла, кода и описания ошибки; SQLite-таблица
incidentsсодержитfingerprint,team,file_name,repeatsиfirst_seen. - Сводка менеджера группирует инциденты по файлу и суммирует
repeatsдля заданной команды. - При недоступности сетевого сервиса памяти ревью должно продолжаться, а инцидент — сохраняться локально.
- Автор рекомендует хранить секреты в переменных окружения и показывать пользователям выполненный запрос и число найденных воспоминаний.
Как сделано
Поток состоит из трёх шагов: найти релевантные знания, решить, встречалась ли проблема, и сохранить новую информацию либо использовать прежнее решение. Для нечеткого смыслового поиска используется Hindsight с вызовами retain и recall, а для точного учёта — отдельная локальная база SQLite.
Память разделена по командам: это не смешивает конфликтующие правила разных коллективов и не скрывает общие знания от коллег. Запрос для recall включает имя файла и краткое описание ошибки, но не исходный код, чтобы не отвлекать поиск на похожие имена переменных или форматирование.
Для статистики инцидентам присваивается SHA-256-отпечаток из нормализованных названия команды и файла, фрагмента кода и описания ошибки. Таблица incidents хранит отпечаток, команду, файл, число повторов и время первого появления. Если сетевой вызов к памяти не удаётся, ревью не должно падать: инцидент записывается в локальный журнал. Автор также советует хранить учётные данные в переменных окружения, проверять их наличие заранее и показывать пользователю выполненный поиск и число найденных воспоминаний.
Результаты
Предложенная архитектура позволяет искать похожие замечания по смыслу, вести отдельный точный журнал повторов и строить сводку для менеджера по файлам и командам. В статье приведены фрагменты Python и SQL, но нет измерений качества поиска, экономии времени или результатов внедрения.
Ограничения
Это описание проектных решений, а не отчёт о проверенном внедрении: метрики точности, производительности и влияния на процесс не приведены. Не объяснено, как именно система определяет, что проблема уже встречалась, и отпечаток включает точный текст кода и ошибки, поэтому разные формулировки могут дать разные записи. Подробности интеграции и поведения Hindsight при сбоях не раскрыты.
Что взять себе
- Разделяйте семантический поиск похожих случаев и точный учёт статистики: это разные задачи.
- Выбирайте границу памяти по тому, кто совместно устанавливает правила; в описанном сценарии это команда.
- Сделайте внешнюю память необязательной зависимостью для завершения ревью и предусмотрите локальный путь при сбое.
- Показывайте, что именно система искала и какие воспоминания нашла, чтобы результат можно было проверить.
Читать оригинал, если…
Откройте оригинал, если нужны приведённые фрагменты Python/SQL, детали вызовов Hindsight или исходный репозиторий для реализации.