Graph Memory Bank
Цель
Сформировать и поддерживать графовую память проекта (как в Obsidian), чтобы ИИ-агенты быстро собирали точный минимальный контекст:
- много маленьких файлов, каждый про одну сущность/идею;
- связи через обычные markdown-ссылки;
- у каждого узла есть краткий YAML frontmatter (машиночитаемый);
- есть обратные ссылки (backlinks), чтобы граф был двунаправленным.
Результат (что должно получиться)
Обычно:
в репозитории, где есть 3 слоя:
- (история изменений: релизы/задачи/коммиты, “что менялось”)
- (семантика: архитектура, ключевые сущности, контракты, API, БД, интеграции, “куда смотреть в коде”)
- или (процессы: правила ведения графа, как обновлять, как читать, качество, генераторы)
Важно: если в репозитории уже есть один из вариантов (
или
) или другая устоявшаяся структура, не переименовывай “ради красоты”. Подстраивайся под текущую структуру, а в индексах дай явные ссылки.
Если слой процессов пока не нужен, начинай с первых двух, но держи место под третий слой.
Инварианты (жесткие правила)
- Дроби информацию: один файл = одна сущность/идея/контракт.
- Держи узлы короткими: как правило, до 200-300 строк; если разрастается, выноси подузлы.
- У каждого узла есть YAML frontmatter (минимум: , , , , , ).
- Всегда добавляй связи:
- outbound links: “см. также”, “используется в”, “зависит от”
- backlinks: “где используется” (явные ссылки обратно на индексы/хабы)
- Если в проекте есть или другие generated-секции: не редактируй руками, правь генератор или исходный узел.
- Если есть сомнения/риски: подсвечивай и задавай вопросы (лучше уточнить, чем зацементировать неверную семантику).
Рекомендованная схема frontmatter (минимум)
Делай frontmatter максимально стабильным (для индексирования агентами):
- : глобально уникальный идентификатор узла
- : тип узла (, , , , , , ...)
- : человекочитаемое имя
- : 1 предложение “зачем этот узел”
- :
stub | curated | generated
- : плоский список тегов (короткие)
Опционально (если реально помогает):
,
,
,
.
Как оформлять индексы (важно)
В индексах пиши не только ссылки, но и микро-аннотацию, чтобы не открывать каждый файл:
- [DEV-12345](...): 6-10 слов, что внутри
.
Что НЕ делать
- Не тащи секреты/токены/пароли в (максимум: “ищется в переменных окружения X/Y”).
- Не дублируй большие куски кода/SQL: вместо этого “якоря” + короткая выжимка + ссылка на файл.
Быстрый workflow (универсальный)
0) Подготовка
- Создай отдельную ветку (например ).
- Уточни ограничение записи:
- по умолчанию пиши только в (или другой явно согласованный каталог).
- Найди, есть ли уже документация/конвенции (, , , ).
1) Сбор каркаса (bootstrap)
- Создай (входная точка).
- Создай индексы:
docs/graph/tasks/index.md
docs/graph/project/index.md
docs/graph/processes/index.md
или docs/graph/process/index.md
(в зависимости от структуры репозитория)
- Зафиксируй соглашения:
- схема (обычно префикс + путь, например )
- статусы:
stub | curated | generated
- теги: короткие, стабильные (не плодить)
Шаблоны и чек-листы: см.
и
references/quality-bar.md
.
2) Проход по релизам/тегам (release-driven)
Цель: быстро нащупать “важные сущности”, которые реально менялись.
Для каждого релиза:
- Найди артефакт релиза: release note / tag / changelog / merge commit.
- Вычисли git range (обычно между коммитами релиз-нот или тэгами).
- Сними “список сущностей”:
- задачи/тикеты
- измененные пути (модули/подсистемы)
- новые/измененные экранные формы/контракты/DB миграции
- Создай узел ревью релиза (type ) и список сущностей.
- Для каждой DEV-задачи:
- создай/обнови узел
- добавь (минимальный список якорей)
- свяжи с семантическими узлами ()
- Обнови индексы и backlinks.
3) Проход по сущностям (entity-driven)
Цель: закрыть белые пятна “по всем ключевым сущностям”, а не только по тем, что попали в релизы.
Важно: “сущности” должны быть универсальными. В WMS это могут быть
, а в вебсайте
, в CRM
, в шине данных
.
Алгоритм:
- Выдели 5-12 категорий сущностей, которые реально важны для проекта.
- Для каждой категории собери каталог (index/hub) и дальше добирай узлы по одному.
- Для каждой сущности обеспечь “кросс-связность”: UI/операции/данные/интеграции/конфиги.
Рекомендованные категории (выбирай релевантные, не все):
- Поверхности взаимодействия (entrypoints):
- Web/UI: страницы, роуты, ключевые компоненты, формы.
- API: endpoints, controllers/handlers, публичные контракты.
- CLI/Jobs: команды, cron/quartz, воркеры, фоновые задачи.
- Events/Streams: топики, события, consumers/producers.
- Операции/команды/сценарии (actions):
- “что система делает”: use-cases, сервисные методы, команды, workflow-степы.
- Данные и контракты (data/contracts):
- DB таблицы/модели, миграции, схемы сообщений, DTO, OpenAPI/AsyncAPI, JSON schema.
- Интеграции (integrations):
- внешние системы, протоколы (HTTP/JMS/Kafka/SFTP), ретраи, таймауты, idempotency.
- Конфиги и флаги (config/feature flags):
- runtime настройки, feature flags, параметры окружений, секреты (только “где берется”, не значения).
- Безопасность и доступ (security):
- authn/authz, роли/права, SSO, аудит.
- Надежность и эксплуатация (ops):
- метрики/логи/трейсинг, алерты, SLO, деградации, recovery-процессы.
Главное правило: не пытайся “описать всё вручную”. Делай:
- каталоги + хабы (семейства/модули/домены);
- атомарные узлы с evidence;
- связи между категориями (например: страница -> API -> сервис -> таблицы -> события).
4) Поддержка по мере изменений (incremental maintenance)
На каждый новый коммит в
:
- Определи затронутые сущности (по diff/путям/ключевым словам).
- Обнови соответствующие узлы, не расширяя лишний контекст:
- добавь 1-3 предложения “что изменилось”
- добавь ссылки на контракт/код/DB
- обнови backlinks/индексы
- Прогони быстрые проверки:
- дубликаты
- отсутствие frontmatter
- битые ссылки между узлами
- orphan nodes (узлы без входящих ссылок внутри )
- сломанные относительные ссылки (если есть время)
Для базовой проверки можно использовать
scripts/graph_memory_lint.py
.
Пример:
bash
python3 scripts/graph_memory_lint.py --root docs/graph
Опционально можно отключать части проверок:
bash
python3 scripts/graph_memory_lint.py --root docs/graph --no-check-links
python3 scripts/graph_memory_lint.py --root docs/graph --no-check-orphans
Ресурсы в skill
- : тонкие шаблоны узлов.
references/quality-bar.md
: качество и “красные флаги”.
scripts/graph_memory_lint.py
: быстрый линтер (frontmatter + дубликаты ).
Appropriate for: Templates, boilerplate code, document templates, images, icons, fonts, or any files meant to be copied or used in the final output.
Not every skill requires all three types of resources.