Один артефакт-агрегатор: метрики до/после, грабли, отложенное, ссылки на все промежуточные decisions/snippets. Чтобы не прыгать по разным файлам — единая точка входа для повторного чтения. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8.8 KiB
date, type, tags, status
| date | type | tags | status | ||||||
|---|---|---|---|---|---|---|---|---|---|
| 2026-05-06 | decision |
|
applied |
Перестройка KB-поиска и синхронизации (8 фаз за один день)
Что было до
Запрос «OpenWRT Липки» Максимке возвращал netbird-inventory.md, потому что:
- слова «Липки» во всём vault'е была одна строка в табличке инвентаря,
- слово «OpenWRT» статистически перевешивали НИИКН-документы (
govru-quickfix,niikn-openwrt-awg-fix), - кросс-ссылок и aliases не было, embeddings не было,
- лаг push→бот доходил до 16 минут (cron
*/5Mac→Gitea + cron*/15Gitea→openclaw).
Пользователь жаловался: «бот путает, я ему про Липки, он мне про НИИКН».
Что сделано
| Фаза | Эффект |
|---|---|
| 1. Embeddings (ollama+bge-m3) | ⛔ откачено — openclaw 2026.5.2 при provider: ollama шлёт inputs целиком, ollama тратит >5 мин/запрос, undici fetch валится по headers timeout. ollama на LXC 132 готова (uptime, bge-m3 1024d), но сторона openclaw нуждается в фиксе chunking |
| 2. Webhook + auto-reindex | Gitea push→listener (HMAC SHA-256)→kb-pull.sh→openclaw memory index. push→FTS: 15 мин → 50 c. См. ../snippets/openclaw-kb-webhook и 2026-05-06-openclaw-kb-webhook-deployment |
| 3. objects-map.json + _index.md | Скрипт scripts/kb-objects-map.py парсит netbird-inventory + frontmatter и пишет JSON для бота + human-readable ../projects/_index. Базовый структурный слой |
| 4. Stubs + frontmatter | Создано 6 README (znamenskoye, mmfb, lipki уже был, + 4 stub'а клиентских OpenWrt). Обогащён frontmatter в niikn, dttb, glavtorg, krasnogorsk, zelenograd с aliases для netbird-имён. 38 → 14 orphan-пиров |
| 5.1. Слить дубли видео | Удалён dttb/video-surveillance-report.md (297 строк, неполная копия), canonical videonablyudenie-znam.md обогащён aliases |
| 5.2. Архив audit/ | 18 устаревших drift-отчётов 2026-04-* перенесены в audit/archive/, в active остались 7 свежих |
| 6. Recall + dreaming | openclaw memory promote --apply: 17/39 коротких воспоминаний переехали в долгую. dreaming.enabled=true (cron 0 3 * * *). Weekly cron на promote |
| 7. Расширенный kb-audit | Скрипт scripts/kb-objects-audit.py пишет еженедельный отчёт с score: проверяет frontmatter, online-orphans, битые wiki-ссылки. Первый запуск — score=84 (12/12 frontmatter ✓, 3 online orphan, 26 битых wiki) |
| 8. UX бота | memorySearch.query.minScore=0.4, IDENTITY.md разводит двух Максимок (homelab vs НИИКН), INFRASTRUCTURE.md переписан как навигатор по vault'у |
Метрики до / после
| Параметр | До | После |
|---|---|---|
| «OpenWRT Липки» top-1 | netbird-inventory.md ❌ |
projects/lipki/README.md ✅ |
| «Антон клиент Звенигород» top-1 | ничего | projects/lipki/README.md ✅ |
| «AgentDVR ЧОП Знаменское» top-1 | три дубля | videonablyudenie-znam.md ✅ |
| «Константин Вишневый сад» top-1 | netbird-inventory.md |
projects/vishnevyy-sad/README.md ✅ |
| Лаг push → видно боту | 5–16 мин | ~50 секунд |
| Проектов с netbird-привязкой | 0 | 9 |
| Структурный объект-граф | нет | objects-map.json (34 entries) |
| Online orphan-пиров | ~30+ | 3 |
| Auto-reindex после pull | нет | есть |
| Recall promoted | 0 (mёртв 16 дней) | 17 + weekly cron |
| Dreaming | off | on (ночной cron) |
| FTS-шум audit/ | 24 файла | 7 active + 18 в archive |
Грабли (для будущей памяти)
-
Gitea SSRF-protection. Без
webhook.ALLOWED_HOST_LISTвapp.iniGitea silently отказывает доставлять webhook на private IP. В docker-логах:webhook can only call allowed HTTP servers, deny '10.0.0.239'. Listener при этом получает 0 запросов, journal пустой. -
flock -nтеряет двойные push. Если webhook прилетел во время pull/reindex — non-blocking lock молча выходит. Заменить наflock -w 180. -
openclaw 2026.5.2 ollama-провайдер игнорирует chunking. При
provider: ollamaшлёт файлы целиком в/api/embed, ollama buffer растёт до 700 MB, обработка >5 мин, fetch валится. Не лечитсяchunking.tokens=512,nonBatchConcurrency=1,batch.enabled=false. Bug либо в openclaw, либо неочевидный конфиг-флаг. -
substring matching → false positives. Alias
cloudподхватывалCloud-NIIKN New niikn.com. Перешли на exact-match с нормализациейye→e. Aliases теперь должны содержать полные имена пиров как в netbird-inventory. -
Heredoc через ssh с backticks — bash интерпретирует backticks как command-substitution внутри пути файла. Для записи структурных markdown'ов с inline-кодом — пушить через base64 или scp/pct push, не heredoc.
-
git commitбез-aили явногоgit addзабирает только staged. Удаление черезgit rmпомечается автоматом, а modify — нет. Один коммит может оставить часть правок несинхронизированными — дополнительный коммит лечит.
Что отложено
| Задача | Причина | Когда возвращаться |
|---|---|---|
| Векторный поиск через ollama | bug в openclaw 2026.5.2 ollama-провайдере | при апгрейде openclaw, или попробовать provider: local (transformers.js встроен в openclaw) |
| 14 orphan-пиров (Денис Тихая, DESKTOP-2IOQS54 Saransk, KOMPUTER, MastaNotebook, …) | нужны факты от Олега чьи это машины | по мере выяснения — добавлять в aliases подходящих проектов |
| 26 битых wiki-ссылок | автоматический фикс не всегда возможен (некоторые цели реально удалены) | semi-auto проход: показать список, для очевидных — починить, остальное — оставить TODO |
Singleton-проекты (projects/*.md) без frontmatter |
не критично — они top-level note'ы | при касании |
Артефакты в vault
- ../projects/lipki/README, ../projects/znamenskoye/README, ../projects/mmfb/README
- ../projects/sergey/README, ../projects/benilux/README, ../projects/vishnevyy-sad/README, ../projects/openwrt-4/README
- ../projects/_index — авто-генерированный реестр
audit/objects-map.json— машинно-читаемый граф- ../audit/2026-05-06-objects-audit — первый health-check
scripts/kb-objects-map.py,scripts/kb-objects-audit.py- ../snippets/openclaw-kb-webhook
- 2026-05-06-openclaw-kb-webhook-deployment
- frontmatter добавлен в
projects/{niikn,dttb,glavtorg,krasnogorsk,zelenograd}/README.md
Артефакты вне vault
LXC 137 (openclaw):
/usr/local/bin/kb-pull-webhook.py(Python listener, HMAC)/etc/systemd/system/kb-pull-webhook.service- Обновлённый
/usr/local/bin/kb-pull.sh(flock -w 180, hash-diff, auto-reindex) - Cron
0 4 * * 1weekly memory promote - Config:
memorySearch.query.minScore=0.4,dreaming.enabled=true, ollama-провайдер откачен (бэкап/root/.openclaw/openclaw.json.bak.embed-2026-05-06-112441) - Переписаны
/root/clawd/IDENTITY.md,INFRASTRUCTURE.md
LXC 136 (Gitea):
webhook.ALLOWED_HOST_LIST = 10.0.0.0/24,*.dttb.ru,privateв/opt/gitea/data/gitea/conf/app.ini- Webhook id=1 на репо
oleg/knowledge-base
LXC 132 (code-server):
- ollama systemd override
OLLAMA_HOST=0.0.0.0:11434, KEEP_ALIVE=24h(для будущего возврата к embeddings)