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

886 lines
35 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 Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Получить evidence по экономии input-tokens Graphify на репо Лидерры (5 baseline-задач A/B), принять решение GREEN/YELLOW/RED по формализации в Tooling-канон.
**Architecture:** Worktree `worktree-graphify-spike` (от текущего HEAD) → Ollama+qwen2.5:7b сервис → Graphify CLI → индексация `app/`+`docs/`+`.claude/` (исключая секреты/телеметрию/handoff) → A/B замеры 5 задач → отчёт в `docs/discovery/` → branch-handling по exit-ветке.
**Tech Stack:** Ollama (Windows installer), qwen2.5:7b (4.7 ГБ), Python 3.10+, uv, Graphify v0.8.20.
**Spec:** [docs/superpowers/specs/2026-05-27-graphify-spike-design.md](../specs/2026-05-27-graphify-spike-design.md)
---
## Файловая структура (что создаётся/меняется)
- **Create:** `.claude/worktrees/graphify-spike/` — worktree
- **Modify (worktree):** `.gitignore` (+строка `.graphify/`)
- **Create (worktree):** `.graphify/` (содержимое — в gitignore)
- **Create (worktree):** `.graphify/config.toml` (или эквивалент, конфиг ignore-списка)
- **Create (worktree):** `docs/discovery/2026-05-27-graphify-spike.md` — отчёт
- **Create (worktree):** `docs/discovery/2026-05-27-graphify-spike-baseline-A/` — транскрипты A-варианта 5 задач (опционально)
- **Create (worktree):** `docs/discovery/2026-05-27-graphify-spike-baseline-B/` — транскрипты B-варианта
**Машинные изменения (вне репо):**
- Установка Ollama сервиса (Windows)
- Скачивание `qwen2.5:7b` в `%USERPROFILE%\.ollama\models\`
- Установка `graphifyy` через `uv tool install`
---
## Task 0: Worktree setup (обязательно через superpowers:using-git-worktrees)
**Files:**
- Create: `.claude/worktrees/graphify-spike/` (полная копия репо)
- Branch: `spike/graphify-2026-05-27`
- [ ] **Step 1: Invoke using-git-worktrees skill**
Skill сам делает: `git worktree add .claude/worktrees/graphify-spike -b spike/graphify-2026-05-27` (от текущего HEAD). NTFS-junction для `node_modules` если потребуется (квирк #108).
- [ ] **Step 2: Verify worktree**
Run from main checkout: `git worktree list`
Expected output contains: `.claude/worktrees/graphify-spike <sha> [spike/graphify-2026-05-27]`
- [ ] **Step 3: cd to worktree for subsequent tasks**
Все последующие команды выполняются из `.claude/worktrees/graphify-spike/` (worktree-path). Использовать absolute paths в Bash-командах, чтобы не путать checkout'ы (Pravila §15.1 prudence).
---
## Task 1: .gitignore — добавить `.graphify/`
**Files:**
- Modify: `.gitignore` (worktree)
- [ ] **Step 1: Read current .gitignore**
Read worktree `.gitignore` чтобы найти подходящую секцию (обычно есть блок «Tools» или «Cache»).
- [ ] **Step 2: Add .graphify/ entry**
Edit `.gitignore`, добавить:
```
# Graphify spike (2026-05-27)
.graphify/
```
В конец файла или в существующий «Cache» блок.
- [ ] **Step 3: Verify gitignore matches**
Run: `git check-ignore -v .graphify/test`
Expected: вывод указывает на новую строку в `.gitignore`.
- [ ] **Step 4: Commit**
```bash
git -C .claude/worktrees/graphify-spike add .gitignore
git -C .claude/worktrees/graphify-spike commit -m "chore(spike): gitignore .graphify/ before install"
```
---
## Task 2: Установить Ollama (Windows сервис)
**Files:** машинные изменения, не репо.
- [ ] **Step 1: Check if Ollama already installed**
Run: `where ollama` (PowerShell) или `which ollama` (Bash)
Expected (если установлен): путь к `ollama.exe`. Если выводит «not found» — переход к Step 2.
- [ ] **Step 2: Install via winget**
Run: `winget install --id Ollama.Ollama -e --accept-source-agreements --accept-package-agreements`
Expected: «Successfully installed».
**Если winget недоступен** (квирк #56 на старых Windows): скачать installer вручную с `https://ollama.com/download/windows`, запустить `OllamaSetup.exe`.
- [ ] **Step 3: Verify Ollama service running**
Run (PowerShell): `Get-Service -Name Ollama | Select-Object Status, Name`
Expected: `Status: Running, Name: Ollama`.
Если `Stopped`: `Start-Service Ollama`.
- [ ] **Step 4: Verify HTTP endpoint**
Run: `curl http://localhost:11434/api/tags`
Expected: JSON `{"models":[]}` (модели ещё нет).
- [ ] **Step 5: Verify CLI**
Run: `ollama --version`
Expected: версия вида `ollama version 0.X.Y`.
---
## Task 3: Скачать модель qwen2.5:7b + проверить русский
**Files:** машинные изменения.
- [ ] **Step 1: Pull model**
Run: `ollama pull qwen2.5:7b`
Expected: progress-bar, в конце «success». Размер ~4.7 ГБ. **Это занимает 5-20 мин зависит от канала.**
- [ ] **Step 2: Verify model registered**
Run: `ollama list`
Expected: строка `qwen2.5:7b ... 4.7 GB`.
- [ ] **Step 3: Smoke-test русским**
Run: `ollama run qwen2.5:7b "Извлеки главную концепцию из абзаца: 'Pravila §15.2 — pre-flight sync обязателен перед правкой нормативных файлов чтобы избежать collision параллельных Claude-сессий'. Ответь одной фразой по-русски."`
Expected: осмысленный русский ответ, упоминающий «pre-flight sync», «параллельные сессии», или «нормативные файлы». **Если ответ — мусор/английский/хайку — это ранний RED-сигнал**, фиксируем для отчёта.
- [ ] **Step 4: Записать время и RAM первого запроса**
Run (после Step 3, в отдельном окне): `Get-Process ollama* | Select-Object Name, WorkingSet64`
Expected: WorkingSet64 ~5-7 ГБ.
Зафиксировать в черновике отчёта: «модель загружена, smoke-test русского: PASS/FAIL, RAM при запросе: X ГБ».
---
## Task 4: Установить uv + Graphify
**Files:** машинные изменения.
- [ ] **Step 1: Check uv installed**
Run: `uv --version`
Expected (если установлен): `uv X.Y.Z`. Если «not found» — переход к Step 2.
- [ ] **Step 2: Install uv**
Run (PowerShell): `powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"`
Expected: «uv installed successfully». Перезапустить shell для PATH update.
- [ ] **Step 3: Install graphifyy package**
Run: `uv tool install graphifyy`
Expected: «Installed: graphify». Note: **package name `graphifyy` с двумя y** (per разведка).
- [ ] **Step 4: Verify graphify CLI**
Run: `graphify --version`
Expected: версия `0.8.20` (или новее).
- [ ] **Step 5: Register as Claude Code skill**
Run: `graphify install`
Expected: создаётся `.claude/skills/graphify/` или эквивалент. **NB:** в spike-worktree это нормально; в main checkout — не делать (out-of-scope spike).
- [ ] **Step 6: Verify skill registered (worktree-local)**
Run: `ls .claude/skills/ | grep -i graphify`
Expected: запись `graphify` присутствует.
- [ ] **Step 7: Verify Ollama backend configured**
Run: `graphify config show` (или эквивалент, см. `graphify --help`)
Expected: backend = `ollama`, model = `qwen2.5:7b`.
Если backend другой: `graphify config set backend ollama` + `graphify config set model qwen2.5:7b`.
---
## Task 5: Сконфигурировать ignore-список Graphify
**Files:**
- Create (worktree): `.graphify/config.toml` (или эквивалент per Graphify docs)
- [ ] **Step 1: Узнать формат конфига**
Run: `graphify config init` (если поддерживается) или `graphify --help` для документации.
Expected: создаётся файл-шаблон конфигурации (`.graphify/config.toml` или `.graphifyignore` или эквивалент).
- [ ] **Step 2: Add ignore patterns**
В конфиг (формат зависит от Graphify — `.graphifyignore` gitignore-style или `[ignore]` секция в TOML):
```
# Out-of-scope spike (per spec §4.2)
node_modules/
vendor/
bin/
liderra_v8_handoff/
web/
db/schema.sql
db/00_create_roles.sql
.env
.env.*
docs/observer/episodes-*.jsonl
docs/superpowers/audits/
docs/discovery/
```
- [ ] **Step 3: Verify ignore работает**
Run: `graphify scan --dry-run .` (или эквивалент, dry-run/preview команда)
Expected: список файлов для индексации **не содержит** ни одного из ignore-паттернов выше. **Особенно важно: episodes-*.jsonl отсутствует** (PII-риск).
- [ ] **Step 4: Sanity check scope**
Manually grep dry-run output: должны быть `app/`, `docs/Pravila_*.md`, `.claude/skills/*.md`. НЕ должно быть `liderra_v8_handoff/`, `node_modules/`.
- [ ] **Step 5: Commit конфига**
```bash
git -C .claude/worktrees/graphify-spike add .graphify/config.toml # или .graphifyignore — что Graphify создал
git -C .claude/worktrees/graphify-spike commit -m "chore(spike): graphify ignore-config (scope app+docs+.claude, exclude secrets/PII/handoff)"
```
NB: сам `.graphify/` директорий в `.gitignore` per Task 1, но config-файл коммитим явно (опция `git add -f` если потребуется).
---
## Task 6: Первая сборка графа + измерения
**Files:**
- Create (worktree, gitignored): `.graphify/graph.*` (формат — Graphify-internal)
- [ ] **Step 1: Засечь start time**
Run: `Get-Date -Format "yyyy-MM-dd HH:mm:ss"` → сохранить в черновик отчёта как `BUILD_START`.
- [ ] **Step 2: Запустить полную сборку**
Run: `graphify build .` (или `graphify index .` — точная команда per CLI)
Expected: progress-bar по фазам (Tree-sitter parse → Ollama semantic). **Tree-sitter — быстро (~1-2 мин), Ollama — главное ожидание (1-3ч).**
**Если процесс падает / висит >3ч / RAM >12 ГБ:** kill, фиксировать как ранний RED, переход к Task 12 RED-протокол.
- [ ] **Step 3: Засечь end time**
После завершения: `Get-Date -Format "yyyy-MM-dd HH:mm:ss"``BUILD_END`. Дельта = время первой сборки.
- [ ] **Step 4: Измерить размер графа**
Run: `(Get-ChildItem -Recurse .graphify | Measure-Object -Property Length -Sum).Sum / 1MB`
Expected (прогноз): 50-200 МБ. **Зафиксировать фактическое.**
- [ ] **Step 5: Измерить количество узлов/рёбер**
Run: `graphify stats` (или эквивалент)
Expected: `Nodes: NNNN, Edges: MMMM`. Прогноз 3-4k nodes. **Зафиксировать.**
- [ ] **Step 6: Измерить покрытие docs/**
Run: `graphify stats --filter "docs/**/*.md"` (если поддерживается) или manually считать из логов сборки сколько MD-файлов успешно обработано.
Expected: процент успешно обработанных Ollama файлов. **Если <70% — ранний YELLOW-сигнал.**
- [ ] **Step 7: Измерить RAM Ollama в idle (после сборки)**
Подождать 5 мин после сборки. Run: `Get-Process ollama* | Select-Object Name, @{N='RAM_GB';E={$_.WorkingSet64/1GB}}`
Expected (порог GREEN): <8 ГБ. **Зафиксировать.**
- [ ] **Step 8: Записать все метрики в черновик отчёта**
Edit `docs/discovery/2026-05-27-graphify-spike.md` (создан в Task 11) заполнить секцию «Базовые метрики» (даже если файл ещё не создан — держать черновик в памяти/scratch).
---
## Task 7: Baseline-задача 1 — «tenant_id в SetTenantContext»
**Files:**
- Create (опционально, для prosperity): `docs/discovery/2026-05-27-graphify-spike-baseline-A/task1-transcript.md`
- [ ] **Step 1: A-вариант (baseline без графа) — открыть свежую Claude-сессию**
В новой сессии Claude Code (или в текущей, перед загрузкой `/graphify`), задать промпт:
> «Где обрабатывается tenant_id в SetTenantContext? Покажи файл, метод, и как middleware устанавливает app.current_tenant_id в PostgreSQL.»
Дать Claude отработать классически (Read/Grep/Glob).
- [ ] **Step 2: Зафиксировать A-метрики**
Записать в черновик:
- Кол-во tool-calls (Read+Grep+Glob): N_A
- Суммарный размер прочитанных файлов в KB: SIZE_A
- Время до финального ответа: T_A (грубо)
- Качество ответа (1-5 субъективно)
Источник tool-calls — посчитать вручную по UI или из episodes JSONL (если включена observer).
- [ ] **Step 3: B-вариант (с графом) — загрузить Graphify в той же или новой сессии**
В Claude Code: `/graphify .` (активация skill). Дождаться подтверждения «граф загружен».
- [ ] **Step 4: Задать тот же промпт**
Тот же текст вопроса. Claude должен сначала запросить граф через graphify-команды, потом отвечать.
- [ ] **Step 5: Зафиксировать B-метрики**
- Кол-во tool-calls: N_B
- Суммарный размер запросов к графу + последующих Read: SIZE_B
- Время: T_B
- Качество (1-5)
- [ ] **Step 6: Вычислить дельту**
Экономия токенов task1: `(SIZE_A - SIZE_B) / SIZE_A * 100%`
Экономия tool-calls task1: `(N_A - N_B) / N_A * 100%`
Записать в черновик отчёта строкой задачи 1.
- [ ] **Step 7: Commit транскрипта (опционально)**
```bash
git -C .claude/worktrees/graphify-spike add docs/discovery/2026-05-27-graphify-spike-baseline-A/task1-transcript.md
git -C .claude/worktrees/graphify-spike commit -m "spike: baseline task 1 A-transcript (tenant_id setter)"
```
---
## Task 8: Baseline-задача 2 — «Pravila про параллельные сессии»
**Files:** аналогично Task 7.
- [ ] **Step 1: A-вариант — свежая сессия, без `/graphify`**
Промпт:
> «Что говорит Pravila про параллельные Claude-сессии? Перечисли подсекции §15 с кратким смыслом каждой.»
- [ ] **Step 2: A-метрики (N_A, SIZE_A, T_A, quality_A)**
- [ ] **Step 3: B-вариант — `/graphify .`**
- [ ] **Step 4: Тот же промпт**
- [ ] **Step 5: B-метрики (N_B, SIZE_B, T_B, quality_B)**
- [ ] **Step 6: Дельта task 2**
- [ ] **Step 7: Commit транскрипта (опционально)**
```bash
git -C .claude/worktrees/graphify-spike add docs/discovery/2026-05-27-graphify-spike-baseline-A/task2-transcript.md
git -C .claude/worktrees/graphify-spike commit -m "spike: baseline task 2 A-transcript (Pravila §15 parallel sessions)"
```
---
## Task 9: Baseline-задача 3 — «Job-классы, трогающие LedgerService»
**Files:** аналогично.
- [ ] **Step 1: A-вариант**
Промпт:
> «Покажи все Job-классы (`app/Jobs/`), которые вызывают методы `LedgerService`. Перечисли имя джоба и какой метод сервиса зовётся.»
- [ ] **Step 2-7: повтор паттерна Task 7-8**
Code-graph навигация — здесь Graphify должен сиять (function-call graph). Если экономии нет здесь — это серьёзный RED-сигнал.
- [ ] **Step 8: Commit транскрипта**
---
## Task 10: Baseline-задача 4 — «ADR Universal Icons MCP граница»
- [ ] **Step 1: A-вариант**
Промпт:
> «В каком ADR решение про границу Universal Icons MCP против Lucide icons? Покажи Decision-item и Consequences.»
- [ ] **Step 2-7: повтор паттерна**
Кросс-доковая навигация. Graphify должен найти ADR-006 Decision-4 без чтения 12 ADR-файлов.
- [ ] **Step 8: Commit**
---
## Task 11: Baseline-задача 5 — «DEFERRED узлы Tooling»
- [ ] **Step 1: A-вариант**
Промпт:
> «Какие узлы в Tooling Прил.Н помечены как DEFERRED (статус pending install / pending Б-1 / нет нужного окружения)? Перечисли номера и причину defer.»
- [ ] **Step 2-7: повтор**
Структурный запрос по нормативке. Если Graphify не извлёк attribute-блоки из Tooling — это YELLOW-сигнал для русско-язычной семантики.
- [ ] **Step 8: Commit**
---
## Task 12: Инкрементальная пере-сборка — измерить время
**Files:**
- Modify (worktree, throwaway): любой markdown в `docs/` (вернуть после)
- [ ] **Step 1: Сделать throwaway-правку**
Edit `docs/Pravila_raboty_Claude_v1_1.md` — добавить в конец строку `<!-- spike-test 2026-05-27 -->`. Сохранить.
- [ ] **Step 2: Засечь время инкремента**
Run: `Get-Date -Format "HH:mm:ss"` → start.
Run: `graphify update .` (или эквивалент инкрементальной команды).
Run: `Get-Date -Format "HH:mm:ss"` → end. Дельта = время инкремента.
Expected (порог GREEN): <2 мин. **Зафиксировать фактическое.**
- [ ] **Step 3: Откатить правку**
Run (worktree): `git checkout docs/Pravila_raboty_Claude_v1_1.md`
Verify: правка ушла, файл чистый.
- [ ] **Step 4: Записать метрику инкремента в отчёт**
---
## Task 13: Написать отчёт `docs/discovery/2026-05-27-graphify-spike.md`
**Files:**
- Create (worktree): `docs/discovery/2026-05-27-graphify-spike.md`
- [ ] **Step 1: Создать файл по шаблону**
```markdown
# Graphify Spike — Results Report
**Дата:** 2026-05-27
**Spec:** [../superpowers/specs/2026-05-27-graphify-spike-design.md](../superpowers/specs/2026-05-27-graphify-spike-design.md)
**Plan:** [../superpowers/plans/2026-05-27-graphify-spike.md](../superpowers/plans/2026-05-27-graphify-spike.md)
**Вердикт:** GREEN / YELLOW / RED (заполнить по итогам)
## 1. Окружение
- Ollama: vX.Y.Z, qwen2.5:7b (4.7 ГБ)
- Graphify: vX.Y.Z
- Worktree: `.claude/worktrees/graphify-spike`
- OS: Windows Server 2022
## 2. Базовые метрики
| Метрика | Значение | Порог GREEN |
|---|---|---|
| Время первой сборки | XX мин | <3ч |
| Размер `.graphify/` | XX МБ | (прогноз 50-200) |
| Узлов графа | XXXX | (прогноз 3-4k) |
| Покрытие docs/ (% MD успешно обработано) | XX% | ≥70% |
| RAM Ollama idle (после сборки, 5 мин позже) | X.X ГБ | <8 ГБ |
| Время инкрементальной пере-сборки 1 файла | X мин | <2 мин |
## 3. Smoke-test русского
Запрос: «Извлеки концепцию из абзаца про Pravila §15.2».
Ответ Ollama qwen2.5:7b: [вставить дословно]
Оценка: PASS / FAIL.
## 4. A/B замеры 5 задач
| # | Задача | N_A | SIZE_A KB | T_A | qual_A | N_B | SIZE_B KB | T_B | qual_B | Экономия KB | Экономия calls |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | tenant_id setter | | | | | | | | | XX% | XX% |
| 2 | Pravila §15 | | | | | | | | | XX% | XX% |
| 3 | LedgerService jobs | | | | | | | | | XX% | XX% |
| 4 | ADR Universal Icons | | | | | | | | | XX% | XX% |
| 5 | DEFERRED Tooling | | | | | | | | | XX% | XX% |
| **Среднее** | | | | | | | | | | **XX%** | **XX%** |
## 5. Qualitative observations
- Качество русского markdown семантики: (описание)
- Поведение Graphify на code-graph задачах: (описание)
- Поведение на кросс-доковых задачах: (описание)
- Stability / crashes / quirks Windows: (описание)
## 6. Exit decision
Применяя exit criteria spec §6:
- [ ] GREEN: все 4 условия GREEN → формализация Approach B следующей задачей
- [ ] YELLOW: одно из YELLOW-условий → личный инструмент контроллера, без Tooling-канона
- [ ] RED: одно из RED-условий → полный откат
**Вердикт:** ...
**Обоснование:** ...
## 7. Next steps (по вердикту)
(заполнить из spec §6 для выбранной ветки)
```
- [ ] **Step 2: Заполнить метрики собранные в Tasks 6-12**
Все числовые ячейки таблиц заполнить фактическими.
- [ ] **Step 3: Заполнить qualitative observations**
Чёрные субъективные впечатления — особенно про русский Ollama и поведение на нашем markdown-стиле.
- [ ] **Step 4: Commit отчёта (без вердикта)**
```bash
git -C .claude/worktrees/graphify-spike add docs/discovery/2026-05-27-graphify-spike.md
git -C .claude/worktrees/graphify-spike commit -m "docs(spike): graphify spike metrics report (pre-verdict)"
```
---
## Task 14: Принять решение GREEN/YELLOW/RED
**Files:**
- Modify (worktree): `docs/discovery/2026-05-27-graphify-spike.md` (заполнить вердикт)
- [ ] **Step 1: Применить exit criteria spec §6**
Проверить по таблице:
```
GREEN (все 4):
avg_savings >= 30% AND
min 3 of 5 tasks >= 20% AND
incremental_time < 2min AND
ram_idle < 8GB
YELLOW (хотя бы одно):
avg_savings 15-30% OR
works only on code (not markdown) OR
ram 8-12 GB
RED (хотя бы одно):
avg_savings < 15% OR
Russian semantics = mess OR
build_time > 3h OR
ram > 12GB OR
Windows crashes
```
- [ ] **Step 2: Заполнить §6 «Exit decision» в отчёте**
Поставить чекбокс на выбранной ветке. Обоснование с цифрами.
- [ ] **Step 3: Заполнить §7 «Next steps»**
Скопировать соответствующие действия из spec §6 для выбранной ветки.
- [ ] **Step 4: Commit вердикта**
```bash
git -C .claude/worktrees/graphify-spike add docs/discovery/2026-05-27-graphify-spike.md
git -C .claude/worktrees/graphify-spike commit -m "docs(spike): graphify spike verdict <GREEN|YELLOW|RED> + next steps"
```
- [ ] **Step 5: Show user the verdict + ask for next-step confirmation**
Пользователю — короткое summary вердикта + предложить переход к Task 15 (один из 15-GREEN / 15-YELLOW / 15-RED).
---
## Task 15-GREEN: Branch handling — merge to main, оставить Graphify установленным
**Только если verdict = GREEN.**
**Files:**
- Modify: `.gitignore` (main)
- Add: `docs/discovery/2026-05-27-graphify-spike.md` (main)
- [ ] **Step 1: cd to main checkout**
`cd c:/моя/проекты/портал crm/Документация`
- [ ] **Step 2: Pre-flight sync per Pravila §15.2**
Хотя spike не трогал 8 нормативных файлов, перед merge — стандартный sync:
```bash
git fetch origin
git log HEAD..origin/main --oneline
```
Если есть unmerged commits на origin/main — rebase спайк-ветки.
- [ ] **Step 3: Merge spike branch**
```bash
git merge --no-ff spike/graphify-2026-05-27 -m "merge: graphify spike GREEN — verdict + .gitignore"
```
Expected: merge без конфликтов (только `.gitignore` +отчёт), оба файла новые/не пересекаются с main.
- [ ] **Step 4: Push**
```bash
git push origin main
```
- [ ] **Step 5: Memory entry**
Создать `memory/project_graphify_spike_green.md`:
```markdown
---
name: project-graphify-spike-green
description: Graphify spike 2026-05-27 — GREEN verdict, awaiting Approach B (full integration as 19th off-phase)
metadata:
type: project
---
Graphify spike (2026-05-27) показал GREEN: avg экономия XX%, RAM XX ГБ, build XX мин.
**Why:** evidence-driven решение перед формализацией; spec [[../specs/2026-05-27-graphify-spike-design.md]] выбрал spike-first.
**How to apply:** при следующей сессии — предложить Approach B (ADR-017 + #89 Tooling + 19-я off-phase подкатегория `knowledge-graph-tooling` + IS9 vet + lefthook + observer integration). До тех пор Graphify установлен и работает локально, но не в Tooling-каноне.
См. отчёт `docs/discovery/2026-05-27-graphify-spike.md`.
```
Добавить запись в `MEMORY.md` index:
```
- [Graphify spike GREEN](project_graphify_spike_green.md) — verdict GREEN 2026-05-27, awaiting Approach B
```
- [ ] **Step 6: Worktree cleanup**
Worktree оставить активным (можно использовать дальше) ИЛИ удалить если уже не нужен:
```bash
git worktree remove .claude/worktrees/graphify-spike # optional
```
Branch не удаляем — merge зафиксирован в истории main.
- [ ] **Step 7: Доложить пользователю**
«GREEN — мерж в main `<commit-sha>`, push'нуто. Approach B (формализация) — отдельной задачей. Memory обновлён.»
---
## Task 15-YELLOW: Branch handling — merge to main, личный инструмент без формализации
**Только если verdict = YELLOW.**
**Files:**
- Same as 15-GREEN (`.gitignore` + отчёт)
- Memory: `memory/feedback_graphify_yellow.md`
- [ ] **Step 1-4: same as 15-GREEN** (cd main, pre-flight, merge, push)
- [ ] **Step 5: Memory entry с правилами использования**
Создать `memory/feedback_graphify_yellow.md`:
```markdown
---
name: feedback-graphify-yellow
description: Graphify spike 2026-05-27 — YELLOW verdict, личный инструмент контроллера без формализации в Tooling
metadata:
type: feedback
---
Graphify работает частично (avg экономия XX%, [причина частичной]).
**Why:** spike 2026-05-27 показал YELLOW per exit criteria spec §6.
**How to apply:**
- Звать Graphify на: [конкретные классы задач где экономия была — например только код-граф, не markdown]
- НЕ звать на: [классы где экономии не было — например русский markdown семантика]
- Graphify установлен локально, в Tooling-каноне НЕ зарегистрирован (без #89, без ADR, без §3.3 row).
- Пересмотр при выходе Graphify v1.0 ИЛИ если появится более качественная локальная LLM для русского.
См. отчёт `docs/discovery/2026-05-27-graphify-spike.md`.
```
Добавить в `MEMORY.md` index аналогично GREEN.
- [ ] **Step 6: Worktree остаётся (для дальнейших вызовов graphify)**
- [ ] **Step 7: Доложить пользователю**
«YELLOW — мерж в main, Graphify работает частично, правила использования зафиксированы в memory.»
---
## Task 15-RED: Branch handling — cherry-pick report, полный откат всего
**Только если verdict = RED.**
**Files:**
- Cherry-pick to main: `docs/discovery/2026-05-27-graphify-spike.md`
- Memory: `memory/project_graphify_spike_negative.md`
- [ ] **Step 1: cd to main checkout**
`cd c:/моя/проекты/портал crm/Документация`
- [ ] **Step 2: Pre-flight sync per Pravila §15.2**
```bash
git fetch origin
git log HEAD..origin/main --oneline
```
- [ ] **Step 3: Cherry-pick только отчёт (без .gitignore)**
Найти SHA коммита отчёта (Task 13 Step 4 + Task 14 Step 4):
```bash
git log spike/graphify-2026-05-27 --oneline | grep "spike): graphify"
```
Cherry-pick последний (с вердиктом):
```bash
git cherry-pick <verdict-commit-sha>
```
Если конфликт (например файл `docs/discovery/` оба ветки трогали) — `git checkout --theirs <file>` для версии из спайк-ветки.
- [ ] **Step 4: Push отчёт**
```bash
git push origin main
```
- [ ] **Step 5: Memory entry (negative result)**
Создать `memory/project_graphify_spike_negative.md`:
```markdown
---
name: project-graphify-spike-negative
description: Graphify spike 2026-05-27 — RED verdict, полный откат; не пробовать снова без [условие]
metadata:
type: project
---
Graphify v0.8.20 + Ollama qwen2.5:7b на Лидерре — RED.
**Why:** [конкретная RED-причина из вердикта — экономия <15% / Ollama-семантика мусор / RAM >12GB / crashes].
**How to apply:**
- НЕ предлагать Graphify-аналогичные инструменты до тех пор пока не изменилось [условие — например выйдет v1.0, или появится локальная LLM лучше qwen2.5:7b на русском].
- Альтернатива codegraph (colbymchenry) — не пробована, может быть пересмотрена отдельно если RED-причина была не в semantic-качестве.
См. отчёт `docs/discovery/2026-05-27-graphify-spike.md` (cherry-pick'нутый на main).
```
Добавить в `MEMORY.md` index.
- [ ] **Step 6: Удалить worktree**
```bash
git worktree remove --force .claude/worktrees/graphify-spike
```
Expected: директория удалена.
- [ ] **Step 7: Удалить branch**
```bash
git branch -D spike/graphify-2026-05-27
```
- [ ] **Step 8: Uninstall Graphify**
```bash
uv tool uninstall graphifyy
```
- [ ] **Step 9: Удалить Ollama-модель**
```bash
ollama rm qwen2.5:7b
```
Expected: освобождено ~4.7 ГБ диска.
- [ ] **Step 10: Uninstall Ollama сервис**
Run (PowerShell): `winget uninstall Ollama.Ollama -e`
Expected: «Successfully uninstalled».
Альтернативно — через Control Panel → Programs.
- [ ] **Step 11: Verify cleanup**
```bash
where ollama # should fail with "not found"
where graphify # should fail with "not found"
Get-ChildItem $env:USERPROFILE\.ollama # should not exist or be empty
```
- [ ] **Step 12: Доложить пользователю**
«RED — откат завершён. Worktree/branch удалены, Graphify+Ollama+model снесены, отчёт cherry-pick'нут на main `<sha>`. Memory обновлён negative result. Освобождено ~5 ГБ диска.»
---
## Self-Review (выполнено)
**Spec coverage:**
- §1 Контекст → Tasks выполняют spike с реальными измерениями. ✅
- §2 Цель → Task 14 принимает решение по данным Tasks 7-12. ✅
- §3 Решения (7 штук) → Task 2 (Ollama), 3 (qwen2.5:7b), 4 (Graphify+install), 5 (ignore+scope), 6 (build). ✅
- §4.1 Окружение → Tasks 0+2+3+4. ✅
- §4.2 Scope → Task 5 ignore-конфиг. ✅
- §4.3 Хранение артефактов → Task 1 (.gitignore) + Task 13 (отчёт). ✅
- §5.1 Базовые метрики → Task 6 Steps 3-7 + Task 12. ✅
- §5.2 5 baseline-задач → Tasks 7-11. ✅
- §5.3 Не меряем → не нужны task'и (negative scope). ✅
- §6 Exit criteria → Task 14 + Tasks 15-GREEN/YELLOW/RED. ✅
- §7 Timeline → распределено по task'ам. ✅
- §8 Out-of-scope → не делается ни в одном task'е (явные пропуски нормативки/lefthook/observer). ✅
- §9 Что коммитим → .gitignore (Task 1) + отчёт (Tasks 13, 14) + опционально config (Task 5) + опционально транскрипты A (Tasks 7-11). ✅
- §10 Отложенное до Approach B → не делается. ✅
- §11 Связанные артефакты → ссылки в отчёте. ✅
**Placeholder scan:**
- ✅ Все «Step N» содержат конкретные команды.
- ⚠️ Качество ответа A/B — субъективная оценка (1-5), это OK для спайка но не «implement later».
- ✅ Нет «TODO», «TBD», «implement later».
- ⚠️ Точные команды Graphify CLI могут отличаться от реальных — fallback через `graphify --help` явно указан в Tasks 5+6.
**Type consistency:**
- `qwen2.5:7b` — везде с двоеточием. ✅
- `graphifyy` (double y) — npm-name, везде одинаково. ✅
- `spike/graphify-2026-05-27` ветка — везде одинаково. ✅
- `.claude/worktrees/graphify-spike` путь — везде одинаково. ✅
Self-review закрыт. Issues найденные — fix'ить inline по ходу исполнения если реальная CLI отличается.
---
## Execution Handoff
**Plan complete and saved to** `docs/superpowers/plans/2026-05-27-graphify-spike.md`.
**Two execution options:**
**1. Subagent-Driven (recommended)** — я диспатчу свежий subagent на каждую task, ревьюю между задачами, быстрая итерация. Особенно подходит здесь — Task 6 (сборка графа 1-3ч) и Tasks 7-11 (по 30 мин каждая) — естественные точки чекпойнтов.
**2. Inline Execution** — выполняю tasks в этой сессии через executing-plans, batch-исполнение с чекпойнтами для ревью.
Какой подход?