diff --git a/personal/projects/personal-os/obsidian-vault-strategy.md b/personal/projects/personal-os/obsidian-vault-strategy.md index 0768a4f2..54b2d342 100644 --- a/personal/projects/personal-os/obsidian-vault-strategy.md +++ b/personal/projects/personal-os/obsidian-vault-strategy.md @@ -1,13 +1,13 @@ --- created: '2026-05-15' -updated: '2026-05-15' +updated: '2026-05-16' tags: - personal-os - obsidian - vault - strategy - llm-wiki -status: research-complete +status: active --- # Obsidian Vault Strategy & LLM Wiki Plan @@ -417,13 +417,104 @@ Wishlist мест + даты отпуска (если есть) + текущий --- +### Проект 5: Memory Organizer + +**Цель:** память агента актуальна, не переполнена, детальные факты живут в vault а не в MEMORY.md. + +#### Контекст + +Hermes хранит память в двух файлах (`~/.hermes/memories/`): + +| Файл | Назначение | Лимит | +|---|---|---| +| `MEMORY.md` | Факты об окружении, проектах, инструментах | ~3000 chars | +| `USER.md` | Профиль пользователя — предпочтения, стиль | ~1375 chars | + +Оба инжектируются в system prompt **как frozen snapshot** при старте сессии. Агент видит их как часть контекста. + +**Три уровня памяти** (по когнитивной науке, arXiv 2603.07670): +- **Episodic** — сессионные логи (SQLite, session_search). Уже работает. +- **Semantic** — факты/предпочтения (MEMORY.md + USER.md). Нужна curation. +- **Procedural** — навыки и workflows (skills/). Уже работает. + +**Текущие проблемы (2026-05-16):** +- MEMORY.md переполнен — 3164 chars при лимите ~3000 +- 8 записей про media-pipeline баги/§9.x/транслит — это детальные технические заметки, а не факты для быстрого доступа. Должны жить в `wiki/tech/` или в project notes. +- Нет механизма устаревания — записи про баги давно пофикшенные продолжают занимать место +- Нет связи memory ↔ vault: детальный контекст дублируется, не синергирует + +#### Правило разграничения (что куда) + +``` +MEMORY.md → короткие стабильные факты: SSH хосты, namespace rules, + активные токены, конфиги. Макс ~150 chars на запись. +USER.md → предпочтения, стиль, ожидания. Не меняется часто. +wiki/tech/ → детальные технические заметки: питфолы, баг-паттерны, + разборы архитектур. Длинные, с контекстом. +personal/projects/ → статус проектов, решения, дебаггинг-логи +skills/ → процедуры и workflows пошагово +``` + +**Overflow pattern:** если запись в MEMORY.md > 150 chars или содержит пошаговые инструкции → переносим в vault, в MEMORY.md оставляем pointer: `media-pipeline питфолы → wiki/tech/media-pipeline.md` + +#### Шаги + +**Шаг 0 — One-time audit & purge (сейчас)** +1. Пройти по всем записям MEMORY.md +2. Записи про media-pipeline (bugs, §9.x, транслит, KP rate limit, Docker cmd) → создать `wiki/tech/media-pipeline-pitfalls.md`, в MEMORY.md оставить короткий pointer +3. Удалить записи про пофикшенные баги (они уже в истории сессий) +4. Проверить USER.md — убрать устаревшее +5. После: MEMORY.md < 2000 chars, USER.md < 1100 chars (оставить запас для новых фактов) + +**Шаг 1 — Создать `wiki/tech/` как хранилище детальных техфактов** +- `wiki/tech/media-pipeline-pitfalls.md` — все §9.x, транслит, баги +- `wiki/tech/kraken-infra.md` — SSH, WireGuard, Docker deploy паттерны +- `wiki/tech/gitea.md` — токены, repos, API endpoints +- Эти страницы живут в wiki (curation воркер их maintainит) + +**Шаг 2 — Memory curation cron (еженедельно, воскресенье 04:00)** + +``` +Читает ~/.hermes/memories/MEMORY.md и USER.md + ↓ +Для каждой записи: + - Старше 60 дней И не изменялась → кандидат на архивацию + - > 150 chars → кандидат на перенос в vault + - Противоречит другой записи → флажок для review + ↓ +Детальные записи → переносит в wiki/tech/ (создаёт/обновляет страницы) +В MEMORY.md → заменяет на pointer (1 строка) +Совсем устаревшие (проект завершён) → удаляет + ↓ +Репортирует: что удалено, что перенесено, текущий % заполненности +``` + +**Стек:** Hermes cron + terminal + obsidian MCP + +**Оценка:** Шаг 0 — 30 мин сейчас. Шаг 1-2 — 1 день. + +--- + +## Статус проектов (2026-05-16) + +| Проект | Статус | Следующий шаг | +|---|---|---| +| Проект 1: Vault Enrichment | ✅ Запущен | enrichment воркер отрабатывает первый прогон | +| Проект 2: LLM Wiki Accumulation | 🟡 Частично | wiki-curation работает, wiki-capture/synthesize не реализованы | +| Проект 3: Proactive Research | ⬜ Не начат | После наполнения wiki | +| Проект 4: Cross-domain Enrichment | ⬜ Не начат | Архитектура готова, воркер не создан | +| Проект 5: Memory Organizer | 🔴 Нужен аудит | Шаг 0 — срочно (MEMORY.md переполнен) | + +--- + ## Что НЕ нужно делать -- ❌ Task 3b в wiki-curation (убрать) +- ❌ Task 3b в wiki-curation (убрать) ✅ сделано 2026-05-16 - ❌ Переименовывать файлы с кириллицей/эмодзи - ❌ Применять Karpathy-wiki к личным спискам (разные задачи) - ❌ Глубже вкладывать папки - ❌ Внешние сервисы (LifeOS plugin, Todoist) — у нас есть Asana + Hermes +- ❌ Хранить в MEMORY.md записи > 150 chars — детали → в vault --- diff --git a/wiki/tech/media-pipeline-pitfalls.md b/wiki/tech/media-pipeline-pitfalls.md new file mode 100644 index 00000000..d6fb11a6 --- /dev/null +++ b/wiki/tech/media-pipeline-pitfalls.md @@ -0,0 +1,72 @@ +--- +title: Media Pipeline — Pitfalls & Debug Notes +created: '2026-05-16' +updated: '2026-05-16' +type: entity +tags: + - media-pipeline + - swift + - pitfalls + - debugging +confidence: high +--- +# Media Pipeline — Pitfalls & Debug Notes + +Операционные заметки по Swift media-pipeline (media_files_db / media-toolbox) на Крякне. +Связано: [[personal-os-architecture]], [[wiki/tech/kraken-infra]] + +## §9.x Score Engine — Критические питфолы + +**§9.9 Year tiebreak:** +- `if count > 1` only — НИКОГДА не штрафовать единственного кандидата +- Если кандидат один — year mismatch не является причиной для снижения score + +**§9.6 Subset floor:** +- Floor 0.35 когда queryToks ⊆ candidateToks (запрос является подмножеством кандидата) +- Это нормально — не считать subset-матч за слабый результат + +**False resolves:** +- Проверять поле `title:` — если в title шум из имени файла = `hasBestEffortResult` junk, не настоящий resolve +- Пример: `2001 Космическая одиссея.mkv` → title: `2001 Космическая одиссея.mkv` = junk + +## Транслитерация + +- `transliteratedToLatin` для кириллических названий генерирует мусорные запросы — TMDb не находит `Migratsiya` +- **Решение:** не эмитить lat-запросы когда источник уже кириллица +- `transliteratedToCyrillic` из латинских имён — полезен (`Osnovnoi` → `Основной Инстинкт` → TMDb находит) + +## KP (Кинопоиск) Rate Limit + +- KP — настоящий fallback, дёргается только если TMDb не дал winner +- 40 KP-запросов vs 8428 TMDb в типичном прогоне +- Лимит исчерпывается только после очистки кеша когда весь TMDb идёт заново +- Проблема не в архитектуре — это нормально + +## Docker Run — Kraken + +Всегда монтировать `unresolved.json` явно: +```bash +docker run \ + -v "$(pwd)/config.json:/config/config.json:ro" \ + -v "/media:/media" \ + -v "$(pwd)/cache:/cache" \ + -v "$(pwd)/unresolved.json:/config/unresolved.json" \ + media-pipeline +``` +Без явного маунта `unresolved.json` пишется внутри контейнера и теряется. + +## Пофикшенные баги (сессии 2026-05) + +- `Code=516 EEXIST` в ApplyPhase — исправлен +- Episode regex `\b` boundary — исправлен +- BBC prefix strip + trim — исправлен +- Yoficator Linux path — исправлен +- Backtick в TitleParser (`/[^'\p{L}\p{N}]+/` → strip apostrophes first) — исправлен +- §9.6 subset floor 0.35 — добавлен +- §9.9 year tiebreak `count>1` only — исправлен +- Year-miss retry в TMDb/KP providers — добавлен + +## Связанные заметки + +- [[personal-os-architecture]] +- [[wiki/tech/kraken-infra]]