Перейти к содержанию

Журнал работ 28-29 апреля 2026

Два дня перед основной миграцией 2-3 мая. Основные векторы: чистка базы, инфраструктурный пилот на AX41, крупный апгрейд Пушкина.

28 апреля — cleanup базы + обнаружен баг archive_extract

Cleanup ChromaDB — 4 sweep'а

Старт:                                      167,332 чанков
Sweep 1: короткие <200 chars                   −0,869  (footnotes, headers, footers)
Sweep 2: точные дубликаты по hash text         −1,716  (повторные загрузки)
Sweep 3: тематический мусор                     −0,251  (мамонты Colossal, B2B-маркетинг Bioacoustics, ABC Survey)
Sweep 4: GetSmarter/Wikipedia patterns          0      (отменён — зацепил Cambridge CISL)
Итого:                                      164,496 чанков (−2,836, −1.7%)

KZ corporate cleanup

Снесены 638 корпоративных KZ-чанков (Самрук-Казына/ТШО/ENRC/КМГ/КазТрансОйл). База 167,970 → 167,332. 3 итерации dry-run чтобы избежать false positives на DuPont/IOGP/HazMat. Промпты 5 structured-модулей (TBT/JSA/PTW/Checklist/MS) обновлены с расширенным blacklist.

Главная находка — баг archive_extract.py

12,612 чанков под title «Приложение 14» — на самом деле РАЗНЫЕ приказы МЗ РК слились. Всего ~25K чанков (15% базы) имеют битые titles (Version Changes, Building a stronger, обрывки, телефоны). Контент в этих чанках полезный — реальные НПА РК, Cambridge CISL курсы, IOGP документы. Решение: фикс archive_extract.py (брать title из имени файла, не из первой строки) + полный re-extract в субботу.

Ключевой инсайт

База собрана хорошо — обёртка плохая. Контент тематически правильный (90%+). Ломали retrieval битые titles, дубликаты, старая embedding-модель без HSE-fine-tune. При таких проблемах Люми всё равно даёт 80% positive feedback — значит контент действительно хороший.

Прогноз после субботы (re-extract + bge-m3 fine-tune + multi-mode): - Recall@5: +15-25% - Precision: +5-15% - Feedback: 80% → 90%+ ожидаемо

Что отложено на субботу

Категория Чанков Решение
«Приложение 14» (битый title МЗ РК) 12,612 re-extract с фиксом title
Version Changes / Building a stronger / Hope for the future ~13,000 re-extract
This page intentionally left blank 1,339 re-extract
Источник: ИС ПАРАГРАФ 440 re-extract
Wikipedia ICS / ISO 22301 49 оставить (обзорный материал)
CISL Cambridge sustainability course 317 re-extract — полезный курс

29 апреля — марафон на 9.5 часов

Утро — инфраструктура

OAuth persistence patch (AX41 wiki-mcp): oauth_provider.py пишет registered_clients + access_tokens в /opt/wiki-mcp/.cache/oauth_state.json через atomic write (tempfile + os.replace, chmod 0o600, threading.Lock). 4 точки save (oauth_register, oauth_token, validate_bearer_token expiry, _cleanup_expired). E2E: после двух systemctl restart Cowork держит сессию. На CPX62 НЕ деплоили — warm fallback до 5 мая.

WireGuard миграция: 3 устройства (iphone/ipad/mac) переведены на 65.108.5.40:51820. Ключи и PSK сохранены — клиенты только поменяли Endpoint.

B2 backup phase 1: Backblaze B2 EU Central + rclone + systemd timer (03:00 CEST, RandomizedDelaySec=300, Persistent). Bucket lyumi-backups, application key Read+Write только на bucket. SSE-B2 включен. Бэкапятся wiki + chroma_data + oauth_state.json (~9 MB tar.gz). Retention 14 дней.

Nightly logs backup: Ежедневный sync /opt/lyumi/logs с CPX62 на b2:lyumi-backups/cpx62/logs/. Retention 90 дней, cron 0 3 * * *. Суббота — день разбора логов.

Lyumi-chroma snapshot в B2 (ad-hoc): docker run --rm -v lyumi-chroma:/data alpine tar -czf - /data | rclone rcat b2:lyumi-backups/cpx62/lyumi-chroma_apr29.tar.gz. Rollback point перед субботним re-extract'ом.

День — промпт caching + cleanup_titles

Caching Sprint 2 (verify + deploy): - Миф «tokens_cached=0 везде» опровергнут — caching РАБОТАЕТ на Lyumi-боте (hit rate 39.2% за 24 апр, 32/58 records с cache hit, 417K cached из 1.06M prompt). Артефакт OpenRouter UI. - extra_system переведён из system_prompt в user_message (cache key stability) - cache_control: ephemeral добавлен в 5 structured pipelines (tbt/jsa/checklist/ms/ptw_structured.py) - Smoke test: Sonnet 34% → 70% hit, TBT 0% → 65.7% - Run rate: $38 → $30-32/мес projected

cleanup_titles.py (новый скрипт): обновляет только metadata.document_title в ChromaDB без re-embed (embeddings не зависят от title). 3-tier logic: clean (BOM/spaces) → fname normalize → skip. Обновил 69,292/164,496 чанков (42%) за 5 минут вместо часов re-embedding'а.

Lyumi Weekly Review артифакт: HTML dashboard с Chart.js + Grid.js. 8 KPI cards, line/bar/donut charts, top 1% best/worst tables, OpenRouter CSV cost data подвязана. Табы 7 days / 30 days / all-time. Для субботних разборов.

Вечер — Пушкин apgrade

Phase 0 — Sonar upgrade (digest_bot.py): - SONAR_MODEL: perplexity/sonarperplexity/sonar-pro - Sub-queries: 8 → 5 (меньше count, выше качество источников) - Stack для /topic /trends /analytics: 5× sonar-pro + 1× sonar-reasoning-pro

Phase 0.5 — Cross-language: - Promt: «MINIMUM 2 EN queries focusing on OSHA/IOGP/NIOSH/CSB» - Post-processing: _is_en() детектирует EN-запросы по ascii-letters ≥ 60% - Финальные top-5 гарантированно содержат ≥2 EN

Phase 1 — thinking + cache_control (call_openrouter): - Принимает thinking_budget (default 0) - Если >0 и Claude → reasoning block + temp=1.0 + max_tokens расширяется + timeout 240s - cache_control: ephemeral на system prompt (Claude only) → ~30-46% input savings - thinking_budget по типам: analytics/case/topic = 32K, trends = 16K, npa/easter = 0

URL fix (DIGEST_SYSTEM_PROMPT): - Разграничение:  «в основном тексте — БЕЗ URL inline, в блоке Источники — обязательно 2-3 URL из [SOURCES]» - Решило проблему «Opus писал «уточните на Әділет» вообще без ссылок»

Phase 2 — Multi-stage writing (multi_stage_writing): - 4-stage editorial pipeline для /case и /analytics: 1. Outline → Gemini 2.5 Flash (1M контекст, без reasoning) 2. Draft → Opus 4.7 + thinking 32K 3. Edit → Sonnet 4 (cuts AI-isms) 4. Polish → Opus 4.7 + thinking 4K (восстанавливает голос Люми) - Fallback: если Outline вернул < 200 chars → single-stage Opus (защита от Gemini Pro reasoning trace bug) - Цена за тяжёлый пост: ~$0.45 → ~$0.60 (+33%) - Время: 2 мин → 3-4 мин

Среда — ручной день: Среда убрана из SCHEDULE. Камал публикует картинку + Telegram poll руками. Разгрузка ритма аудитории между длинными постами + engagement через poll.

Anti-фантом-тема — 3 линии защиты (триггер — Пушкин писал «Приказ МТСЗН №267 — обучение по БиОТ», хотя №267 о декларировании): - Линия 1 (Writer) — DIGEST_SYSTEM_PROMPT новое правило «Не выдумывай ТЕМУ приказа по его номеру» - Линия 2 (Reflection) — добавлен пункт 10 «ФАНТОМНАЯ ТЕМАТИЧЕСКАЯ АТРИБУЦИЯ» в REFLECTION_SYSTEM_PROMPT - Линия 3 (Pre-flight KB+Haiku)detect_phantom_npa_themes(post): - Regex _NPA_WITH_THEME_PATTERN извлекает «Приказ X № N от DD.MM.YYYY — тема» - kb_api /npa_lookup?q=<номер> → реальные titles из ChromaDB Lyumi - Haiku-сравнение _haiku_theme_match(): JSON {mismatch, confidence} - Если mismatch ≥ 0.7 → hint в raw_content для Haiku+Gemini reflection - Цена: $0.002/пост, fallback при недоступности kb_api

International standards whitelist (detect_phantom_npa_numbers): - _INTERNATIONAL_STANDARDS_WHITELIST regex: NFPA, ISO, IEC, EN, OSHA, ANSI, IOGP, NIOSH, ACGIH, NEBOSH, IOSH, ILO, WHO, CSB, HSE UK, OHSAS, GRI, IPIECA - _is_whitelisted_intl_standard() пропускает до kb_api lookup (в Люми ChromaDB их нет, KZ-фокус) - Раньше: «NFPA 652» фантом → scrub_fallback вырезал → «по методологии  » с пустым местом - Теперь: международные стандарты проходят без false-positive

Tone variations в POST_TYPE_PROMPTS: - Мягкие интонационные блоки  «ТОН ДЛЯ ЭТОГО ФОРМАТА» для /npa, /trends, /case, /easter - Не разбивают голос Люми на 5 личностей — единый персонаж, разная интонация под формат - npa = деловой/конкретный, trends = аналитический, case = драматургия+уроки, easter = тёплый+юмор

Поздно-вечерние хотфиксы: 1. Әділет SSL fixhttpx.AsyncClient(verify=False) в fetch_adilet_updates(). Раньше падало с CERTIFICATE_VERIFY_FAILED после rebuild Docker (CA-bundle issue). Теперь парсер реально ходит, дополняет Sonar Pro. 2. Reflection на /npa — добавлено в обоих местах (cmd_npa ad-hoc + scheduled mode). Раньше /npa был «голый» без проверок. Теперь все 3 линии защиты работают и на NPA-постах (концентрация цитат приказов максимальная). 3. OpenRouter top-up — Камал залил $15. До этого падало 402 Payment Required: thinking_budget=32K + max_tokens=2000 = 34K зарезервировано, баланс не тянул.

Боевая проверка (вечер 29 апр)

/npa — №267: ДО апгрейда Пушкин писал «Приказ МТСЗН №267 от 10.09.2025 — обновление требований к обучению по БиОТ» (ФАНТОМ). ПОСЛЕ: «Приказ МТСЗН №267 от 10.09.2025. Упоминается в поисковой выдаче по теме охраны труда. Точное содержание рекомендую смотреть непосредственно в карточке документа на Әділет». Идеальное брендовое поведение.

/case NFPA 652 — пылевые взрывы: - Multi-stage все 4 ступени: outline 2326 → draft 5919 → edit 5793 → polish 5791 - thinking 32K на draft, thinking 4K на polish - cached_tokens: 5172 на полирующем Opus → cache_control работает - Whitelist: «NFPA 652» прошёл без false-positive flag - verify_urls: вычистил 1 битый URL (404 NFPA News), оставил 2 рабочих - Пост: Washburn A Mill 1878 → корневые причины в 4 слоя → 5 уроков (DHA, 1/32 inch rule, vacuum vs compressed air) → переход на КЗ-индустрии → вопрос читателю → express checklist

Известные открытые баги (не закрыты сегодня)

  • Markdown __url__ иногда проскакивает в финальном тексте (__https://...__) — старый баг _safe_telegram_html
  • ASCII-таблицы в /case иногда обрываются (HTML escape)
  • Reflection conf=1.00 + applied=False иногда (порог should_apply_correction)
  • Әділет search endpoint 404 (сайт поменял URL structure, Sonar компенсирует)

Что дальше — суббота-воскресенье 2-3 мая

  • Lyumi-бот миграция CPX62 → AX41 (rsync lyumi-chroma volume + /opt/lyumi/, cutover)
  • Pushkin миграция (та же схема)
  • archive_extract.py фикс + полный re-extract 167K чанков в *_v2 коллекции
  • bge-m3 fine-tune на vast.ai H100 ($1-2, 25-40 мин)
  • B2 backup phase 2 (добавить lyumi-chroma + cards + Pushkin paths)

Why

29 апреля — последний рабочий день перед окном миграции. Цель — выйти на субботу с «чистыми руками»: база почищена, баг экстрактора зафиксирован, Пушкин из 80%-рабочего стал 95%-рабочим, OAuth и бэкапы работают без потерь сессии. В субботу остаётся только перевезти и файн-тюнить.