Files
portal/docs/superpowers/specs/2026-05-27-graphify-spike-design.md
T

205 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Graphify Spike — Design Spec
**Дата:** 27.05.2026
**Тип:** Spike (evidence-first), не полная интеграция
**Статус:** Draft → User review
**Происхождение:** заказчик увидел упоминание Graphify, спросил «снижает ли расход токенов» → разведка показала 35-70x потенциал на больших репо → spike-first решение вместо немедленной формализации
**Цепочка:** brainstorming (this) → writing-plans → executing-plans (spike) → решение GREEN/YELLOW/RED → опционально Approach B (полная интеграция как 19-я off-phase подкатегория) отдельной задачей
## 1. Контекст и проблема
CLAUDE.md грузится в каждое сообщение целиком (~800 строк). Pravila — ещё ~1500 строк. Specs / plans / observer episodes — сотни файлов. Текущий поток работы Claude по репо Лидерры — grep по 5-20 файлам подряд, частые `Read` 100+ KB файлов целиком. Это сжигает input-токены.
Graphify (open-source skill, MIT, 54.4k ⭐, v0.8.20 от 26.05.2026) обещает решение через граф знаний: один раз парсит репо (Tree-sitter для AST + LLM для семантики прозы), потом ассистент бьёт точечные запросы по графу вместо чтения файлов целиком.
Бенчмарки на чужих репо: 35-70% экономия input-токенов, до 70x на 500+ файлов. Но цифры — для других кодовых баз, не для русско-язычного markdown-стены Лидерры.
**Главный неизвестный:** работает ли семантика Ollama на русском markdown с проектной терминологией Лидерры.
## 2. Цель спайка
Получить **данные** для решения «формализовать ли Graphify как 19-ю off-phase подкатегорию `knowledge-graph-tooling` (#89)» — на основе замеров экономии на нашем конкретном репо, не на бенчмарках чужих.
**Не цель:** реальная интеграция, нормативный долг, lefthook, observer-хуки, ADR, IS9-вет. Всё это — следующая задача при GREEN.
## 3. Зафиксированные решения (из brainstorming)
| # | Решение | Выбор |
|---|---|---|
| 1 | Backend для семантики | Ollama локально |
| 2 | Multimodal scope | Всё как из коробки (включая yt-dlp/whisper зависимости) |
| 3 | Инструмент | Graphify (не codegraph) |
| 4 | Timing | Сейчас параллельно A10 BI-tooling |
| 5 | Scope индексации | `app/` + `docs/` + `.claude/` (без `db/schema.sql`) |
| 6 | Модель Ollama | `qwen2.5:7b` |
| 7 | Хранение графа | `.graphify/` в `.gitignore`, не коммитим |
## 4. Архитектура спайка
### 4.1. Окружение
- **Worktree:** `worktree-graphify-spike` от `origin/main` (или текущего HEAD на момент исполнения)
- **Ветка:** `spike/graphify-2026-05-27`
- **Машина:** dev Windows Server 2022 (не на боевом `liderra.ru`)
- **Python:** 3.10+ (есть, поставлен для D3 #40 Security Guidance)
- **Ollama:** новая установка, Windows installer с ollama.com, сервис на `localhost:11434`
- **Модель:** `qwen2.5:7b` (4.7 ГБ диск, ~6 ГБ RAM в idle)
- **Graphify:** `uv tool install graphifyy` + `graphify install`
### 4.2. Scope индексации
**Включаем:**
- `app/` — Laravel + Vue (PHP, .vue, .ts, миграции, конфиги). Tree-sitter, без Ollama-расхода.
- `docs/` — markdown-стена (Pravila, CLAUDE.md, ТЗ, specs, plans, ADR). Главный consumer Ollama-семантики.
- `.claude/` — skills/agents/settings markdown.
**Исключаем (явно через Graphify ignore-конфиг):**
- `node_modules/`, `vendor/`, `bin/`, `liderra_v8_handoff/`
- `docs/observer/episodes-*.jsonl` (PII-риск, телеметрия)
- `docs/superpowers/audits/`, `docs/discovery/` (одноразовые snapshot'ы)
- `web/` (HTML-прототипы фазы 0)
- `db/schema.sql` (один файл, мини-польза)
- `.env`, `.env.*`, `db/00_create_roles.sql` (секреты)
### 4.3. Хранение артефактов
- **Граф:** `.graphify/` в корне worktree, **в `.gitignore`** (добавляем строкой `.graphify/`)
- **Ollama-модель:** `%USERPROFILE%\.ollama\models\`
- **Отчёт спайка:** `docs/discovery/2026-05-27-graphify-spike.md` (commit'нуть в ветку спайка)
## 5. Метрики
### 5.1. Базовые (автоматом)
| Метрика | Цель замера |
|---|---|
| Время первой сборки графа (Tree-sitter + Ollama) | Понять, сколько ждать в новом worktree |
| Размер `.graphify/` (МБ) | Сверить с прогнозом 50-200 МБ |
| Кол-во узлов / рёбер графа | Сверить с прогнозом 3-4k nodes |
| RAM Ollama в idle | Сверить с порогом <8 ГБ |
| RAM Ollama при запросе | Сверить с порогом <12 ГБ peak |
| Покрытие docs/ (успешно обработано / всего MD) | Понять качество русско-язычной семантики |
### 5.2. Экономия на 5 baseline-задачах
Для каждой задачи — A/B замер:
- **A (baseline):** Claude отвечает классическим путём (Read/Grep/Glob), считаем input-токены и tool-calls.
- **B (с графом):** Claude использует `/graphify query "..."`, получает компактный подграф, отвечает. Считаем токены Graphify-ответа + последующий ответ.
**5 baseline-задач:**
1. «Где обрабатывается tenant_id в SetTenantContext» — поиск по коду.
2. «Что говорит Pravila про параллельные сессии» — поиск по markdown.
3. «Покажи все Job-классы, которые трогают LedgerService» — code-graph навигация.
4. «В каком ADR решение про Universal Icons MCP границу» — кросс-доковая навигация.
5. «Какие узлы реестра помечены DEFERRED в Tooling Прил.Н» — структурный запрос по нормативке.
**Покрытие паттернов:** код, markdown, кросс-связи.
### 5.3. Не меряем
- Качество финального кода / правильность ответов Claude — спайк про экономию токенов, не про accuracy.
- Влияние на Pest / CI — спайк в worktree, не трогает основной checkout.
- Экономию output-tokens — Graphify влияет в основном на input.
## 6. Exit criteria
### GREEN — формализуем (Approach B следующим заходом)
Все четыре условия:
- Средняя экономия input-tokens ≥30% по 5 задачам.
- Минимум 3 из 5 задач показывают ≥20%.
- Время инкрементальной пере-сборки после правки файла <2 мин.
- Ollama в idle <8 ГБ RAM.
**Действие:** мерж спайк-ветки в main (приносит `.gitignore` +`.graphify/` и отчёт), worktree+Ollama+Graphify остаются установленными. Approach B (полная интеграция как 19-я off-phase) — отдельная задача с собственным brainstorming → writing-plans → executing-plans.
### YELLOW — частичная победа, без формализации
Хотя бы одно из:
- Экономия 15-30% средняя.
- Работает только на коде, не на markdown (Ollama споткнулась о русский).
- RAM 8-12 ГБ (граничит с другими сервисами).
**Действие:** мерж спайк-ветки в main (отчёт + `.gitignore`), Graphify+Ollama остаются установленными как личный инструмент контроллера, **не** в Tooling-каноне (без #89, без ADR, без §3.3 row). Memory-entry `feedback_graphify_yellow.md` с честной оценкой «работает частично, не формализован» + правилами когда зовём (например только на код-задачах). Пересмотр при выходе Graphify v1.0 или другой модели.
### RED — откат
Хотя бы одно из:
- Экономия <15% средняя.
- Качество семантики на русском markdown — мусор.
- Время первой сборки >3ч.
- RAM >12 ГБ.
- Crash'и Graphify на Windows.
**Действие:** (1) cherry-pick `docs/discovery/2026-05-27-graphify-spike.md` в отдельный коммит на main с пометкой «negative result», (2) `graphify uninstall`, `ollama rm qwen2.5:7b`, удалить Ollama, (3) удалить worktree, удалить ветку `spike/graphify-2026-05-27`, (4) memory-entry `project_graphify_spike_negative.md` со ссылкой на cherry-pick'нутый отчёт. Порядок важен — отчёт сначала сохранить, потом удалять.
## 7. Timeline
- Установка Ollama + модели + Graphify: 30-60 мин.
- Первая сборка графа: 1-3ч (главный неизвестный).
- 5 baseline-задач (A/B): 1-2ч.
- Отчёт + решение: 30 мин.
- **Итого активной работы: 3-7ч + ожидание сборки.**
**Дефолт по итогам:** решение принимается в тот же день. RED-протокол — в тот же час, чтобы Ollama не съела диск впустую.
## 8. Out-of-scope
### Не делаем в спайке (откладываем до Approach B при GREEN)
- Любая правка нормативки (Tooling Прил.Н, CLAUDE.md §3.3, PSR_v1 R10.1/R15.6, Pravila §13.2, nodes.yaml, routing-off-phase.md, automation-graph.html).
- ADR-017 (boundary rules KGT1-KGTN).
- IS9 provenance vet (`docs/security/graphify-vet.md`).
- Lefthook pre-commit auto-update job.
- Observer хуки (`tools/graphify-*.mjs`).
- Conflict map с context7 / Boost / openapi-mcp-server.
- Pravila §15.2 pre-flight sync (спайк в worktree, не трогает 8 нормативных файлов).
- Eval'ы и тесты Graphify-интеграции.
### Не делаем никогда
- Права на коммит из Graphify (read-only консультант).
- Индексация `docs/observer/episodes-*.jsonl` (PII-риск, sanitized phone-numbers в логах, квирки 23.05.2026).
- Индексация `.env`, `bin/`, `db/00_create_roles.sql`.
- Запуск Ollama на боевом `liderra.ru` (dev-only).
## 9. Что коммитим в спайк-ветку
- `.gitignore` +строка `.graphify/`.
- `docs/discovery/2026-05-27-graphify-spike.md` — отчёт с таблицей метрик.
- Опционально — конфиг Graphify ignore (если работает через файл).
**Ничего больше.** Никакой нормативки, никаких ADR, никаких узлов карты, никаких изменений lefthook/settings.json.
## 10. Решения отложенные до Approach B (при GREEN)
Не закрываем в спайке, но фиксируем для следующего захода:
- Где живёт узел Graphify на карте: A2 «Программирование — общее» или A6 «Архитектура»?
- Conflict map: точные границы с #60 context7 (внешние доки) и Boost (Roster intra-AST) и #47 openapi-mcp-server (OpenAPI-спека).
- Стратегия инкремента в production-режиме: git hook auto-update vs ручной `/graphify --update`.
- Observer integration: распознавание `graph-query` классификации в router-classifier.
- Каноническая ссылка в memory + Tooling Прил.Н 9-attribute block.
## 11. Связанные артефакты
- CLAUDE.md §3.3 (реестр инструментов) — спайк не правит, но при GREEN добавится #89.
- Tooling Прил.Н §0 — счётчик 83→84 (или 88→89 если A10 закрылся раньше).
- ADR серия — следующий свободный ADR-017.
- `docs/discovery/` — home для отчёта спайка (одноразовый snapshot).
- A10 BI-tooling worktree `feat/a10-bi-tooling` — параллельная ветка, не блокирует.
## 12. Ссылки
- [GitHub: safishamsi/graphify](https://github.com/safishamsi/graphify)
- [Graphify website](https://graphify.net/)
- [MindStudio benchmark: 70x cost reduction](https://www.mindstudio.ai/blog/graphify-claude-code-knowledge-graph-large-codebase-70x)
- [Альтернатива: colbymchenry/codegraph](https://github.com/colbymchenry/codegraph) (не выбрана)