process_text 207 строк, call_mac 104 строки, 40 копий sqlite-коннекта, 2 bare except: pass, мёртвая context_total_chars, дубль progress_loop, aiohttp.ClientSession() 4 раза без переиспользования, скрытый use-before-decl бага _task_heartbeats, 20 копий guard._db_conn, 4 копии _dispatch_action, разные response shape, кеш только в weather./root/jarvis_research_r1..r5.md на VPS, синтез: /root/jarvis_overnight_research.md.answer поле, enum [mac, sonnet_fallback, api-fallback-direct]AstroPointName enum со всеми планетами + Asc/Desc/MC/IC/Chiron/lunar nodesservices_log.service.enum + ServiceStatus.name обновлены/root/jarvis/services/_text_search.py — 161 строкаtokenize, split_sections, score_section, truncate, STOPWORDS, класс MarkdownIndex с кешем по mtime_db_conn(timeout), _cache_get/set/clear(key, ttl_s), _get_session(), _close_session()service_cache создана: key, value, expires_at, индексapp.on_shutdowncontext_total_charsexcept: pass заменены на except Exception as e: log.warning_task_heartbeats поднят в начало модуля (use-before-decl фикс)aiohttp.ClientSession singleton — все 4 места переключены@auth_required применён к 14 хендлерам (вместо 17 копий guard)cache_hit: true/false явно в response/root/jarvis/services/astro/templates/synastry.html.j2 — 12.5KBkiryl-sasha-brest.html, score-bars, цветовая шкала, секцииrender_synastry добавлен в astro_service.py — принимает заполненные данные, возвращает HTMLnatal и synastry не тронуты| Что покрыто | Тестов |
|---|---|
| decisions service (CRUD all 7 actions + edge cases) | 10 |
| pipeline tracking (task_queue columns, indexes, no orphans) | 6 |
| cache helpers (set/get/expire/clear/namespaces/JSON) | 6 |
| text_search module (tokenize, sections, score, MarkdownIndex) | 11 |
| jarvis.py helpers (импорт, константы, no bare except, auth_required) | 4 |
| OpenAPI validity (YAML, decisions, method enum) | 4 |
| До F7 | 79 |
| Стало | 148 (+69) |
| Запуск | 146 passed, 1 skipped, 1 xfailed |
cd /root/jarvis && source venv/bin/activate && python3 -m pytest tests/ · 21 секунда_fetch_chats делает 3 SELECT на каждый чат вместо JOIN_fetch_chats → один JOIN-запрос| Проверка | Результат |
|---|---|
| 13 systemd сервисов | все active |
| pytest полный | 146/148 (1 skip, 1 xfail, 0 fail) |
| Mini-app /api/status | 9 сервисов OK |
| Cleanup застрявших | 0 удалено (чисто) |
| Cron cleanup | /etc/cron.d/jarvis-cleanup активен (15 мин) |
/queue list в Telegram — должны показаться 5 решений (#1-4 + сегодняшний overnight)cache_hit: true при повтореrender_synastry доступен опциональноtest_openapi.py::test_openapi_components ожидает схему ServiceError в openapi.yaml — не правил, не моя задача./root/jarvis/jarvis.py.bak.1777774157/root/jarvis/service_base.py.bak.1777774130/root/jarvis/services/wiki_service.py.bak.1777774100/root/jarvis/services/city_service.py.bak.1777774100/root/jarvis/services/weather_service.py.bak.1777774181/root/jarvis/services/astro_service.py.bak.1777774254cp X.bak.N X && systemctl restart jarvis-Y