0.134.68
Fixed
- Consolidator зависал навечно после ~22 мая:
GetMessages(agentID, limit)делалORDER BY id ASC LIMIT 500— возвращал самые старые 500 сообщений. Consolidator с курсором (напримерconsolidator_cursor:1:shared = 1537) фильтровалid > cursor, но все 500 загруженных сообщений были ≤ курсора →facts_extracted: 0каждый прогон, курсор не двигался. Добавлен новый методGetMessagesAfterID(agentID, afterID, limit)—WHERE id > $afterID ORDER BY id ASC LIMIT $limit, теперь Consolidator грузит только непрочитанные. В production: ~2 недели отсутствовали новые факты → Dream не запускался → soul_evolved не обновлялся → “самопознание” агента остановилось.
Added
- Stall-детектор в ConsolidatorService: при 6+ подряд пустых прогонах Consolidator (24 часа при интервале 4ч) логирует
ERROR consolidator stall detectedс деталями (cursor, max_message_id, unprocessed_messages) и сбрасывает счётчик. Следующий подобный баг не проживёт незамеченным. - Логирование Dream при пропуске: когда Dream не находит новых фактов после курсора, теперь пишет
DEBUG dream skipped: no new facts after cursorс деталями (total_facts, cursor). Раньше полностью молчал — невозможно было отличить «нечего обрабатывать» от «система сломалась». - Health-check с memory статусом:
GET /readyz?memory=trueиGET /api/v1/health?memory=trueтеперь возвращают секциюmemoryс per-agent статусом: last_dream_run, dream_action_count, active_facts_count, consolidator_cursor, max_message_id, unprocessed_messages. даёт видимую индикацию в API/WebUI. - Новые Store-методы:
GetMessagesAfterID,CountMessagesAfterID,GetMaxMessageID,GetLastDreamRun(SQLite + PostgreSQL + DualStore).
Tests
TestGetMessagesAfterID_BasicFiltering,TestGetMessagesAfterID_Limit,TestGetMessagesAfterID_EmptyResult,TestGetMessagesAfterID_ZeroCursor,TestGetMessagesAfterID_NonExistentAgent,TestGetMessagesAfterID_IsolatedPerAgent— покрытие нового Store-метода.TestCountMessagesAfterID,TestGetMaxMessageID— покрытие вспомогательных методов.TestConsolidator_SeesMessagesAfterCursor— репродукция баги (факты извлекаются из сообщений после курсора).TestConsolidator_LargeDatasetCursorReach— 600 сообщений + курсор + 100 новых → факт извлекается (та самая production-ситуация).TestConsolidator_CursorDoesNotStuckOnLargeDataset— интеграционный тест без застревания.TestConsolidatorService_StallDetector,TestConsolidatorService_StallDetectorNoMessages— stall-детектор корректно сбрасывает/не сбрасывает счётчик.TestDream_SkippedLogsCursor— Dream корректно логирует пропуск.