Files
microdao-daarion/docs/incident/incident_log.md
Apple 67225a39fa docs(platform): add policy configs, runbooks, ops scripts and platform documentation
Config policies (16 files): alert_routing, architecture_pressure, backlog,
cost_weights, data_governance, incident_escalation, incident_intelligence,
network_allowlist, nodes_registry, observability_sources, rbac_tools_matrix,
release_gate, risk_attribution, risk_policy, slo_policy, tool_limits, tools_rollout

Ops (22 files): Caddyfile, calendar compose, grafana voice dashboard,
deployments/incidents logs, runbooks for alerts/audit/backlog/incidents/sofiia/voice,
cron jobs, scripts (alert_triage, audit_cleanup, migrate_*, governance, schedule),
task_registry, voice alerts/ha/latency/policy

Docs (30+ files): HUMANIZED_STEPAN v2.7-v3 changelogs and runbooks,
NODA1/NODA2 status and setup, audit index and traces, backlog, incident,
supervisor, tools, voice, opencode, release, risk, aistalk, spacebot

Made-with: Cursor
2026-03-03 07:14:53 -08:00

5.5 KiB
Raw Blame History

NODA1 Incident Log


INC-2026-002 | 2026-02-27 | Gateway Workers + SenpAI + facts/upsert

Severity: SEV-1 (всі агенти не відповідали користувачам) Status: RESOLVED Duration: ~3 дні (з 2026-02-21 09:55 по 2026-02-27 23:15)

Summary

Після апгрейду Redis до 8.6.1 та ряду змін у коді gateway два воркери зависли, SenpAI повертав 500, а facts/upsert падав з InvalidColumnReferenceError. В сукупності агенти не відповідали у Telegram.

Root Causes (3 незалежні)

# Компонент Причина
1 dagi-gateway-worker-node1 Після Redis 8.6.1 upgrade старі TCP-сокети async-клієнта → ReadOnlyError у brpop()
2 dagi-gateway-reminder-worker-node1 Та сама проблема застарілих з'єднань після Redis upgrade
3 SenpAI webhook → Router .env: ROUTER_URL=http://dagi-staging-router:8000 (staging!) замість http://router:8000
4 memory-service /facts/upsert ensure_facts_table() DDL застарілий: UNIQUE(user_id, team_id, fact_key) → asyncpg кешував старий prepared statement без agent_id; ON CONFLICT не знаходив matching constraint
5 get_doc_context() Підпис функції не мав agent_id=None параметра, хоча http_api.py передавав його

Timeline

Час (UTC+1) Подія
2026-02-21 09:55 Остання успішна обробка (agromatrix)
2026-02-26 13:09 Початок ReadOnlyError у gateway-worker (Redis upgrade)
2026-02-27 17:02 Поновлення помилок worker після перезапусків
2026-02-27 19:49 Повна блокада gateway-worker (останній restart)
2026-02-27 22:46 Перезапуск dagi-gateway-worker-node1 → стабільний
2026-02-27 22:47 Перезапуск dagi-gateway-reminder-worker-node1 → стабільний
2026-02-28 00:01 Виправлено ensure_facts_table() → memory-service rebuilt
2026-02-28 00:05 Виправлено ROUTER_URL, get_doc_context() → gateway rebuilt
2026-02-28 00:15 Всі 14 агентів HTTP 200 ✓

Fixes Applied (на сервері /opt/microdao-daarion)

1. docker restart dagi-gateway-worker-node1 dagi-gateway-reminder-worker-node1
2. services/memory-service/app/database.py:
   - ensure_facts_table() замінено на noop (таблиця управляється міграціями)
   - Скопійовано відсутні файли: integration_endpoints.py, integrations.py, voice_endpoints.py
3. gateway-bot/services/doc_service.py:
   - get_doc_context(session_id: str) → get_doc_context(session_id: str, agent_id: str = None)
4. .env:
   - ROUTER_URL=http://dagi-staging-router:8000 → ROUTER_URL=http://router:8000
5. Rebuild + restart: memory-service, gateway, gateway-worker, gateway-reminder-worker

Verification

All 14 agents HTTP 200:
✓ senpai  ✓ helion  ✓ nutra  ✓ daarwizz  ✓ greenfood  ✓ agromatrix
✓ alateya ✓ druid   ✓ clan   ✓ eonarch   ✓ oneok      ✓ soul
✓ yaromir ✓ sofiia
facts/upsert: {"status":"ok"}
Gateway: healthy, 14 agents

Action Items (TODO)

  • Після Redis upgrade — завжди перезапускати workers (додати в runbook)
  • Виправити ensure_facts_table() в коді репозиторію (локально)
  • Виправити get_doc_context() сигнатуру в локальному репо
  • Виправити .env в репозиторії (або .env.example) — прибрати staging router URL
  • Додати liveness probe для workers: exit(1) при повторних ReadOnlyError
  • Алерт: "No messages processed for X minutes"


INC-2026-003 | 2026-02-28 | Ollama resource crash → всі агенти 503

Severity: SEV-1 (всі агенти не відповідали у Telegram) Status: RESOLVED Duration: ~8 годин (з 07:53 по ~16:00 UTC+1)

Root Cause

Ollama впала з помилкою model runner has unexpectedly stopped, this may be due to resource limitations. Модель qwen3:8b (27.8B params, ~17GB) перевищила ресурси сервера під навантаженням → Router отримував 500 від Ollama → повертав 503 клієнту. Всі агенти були налаштовані на provider: ollama.

Fix Applied

Переключено всі агенти в router-config.yml з qwen3_*_8b профілів → cloud_deepseek:

  • 14 агентів тепер використовують deepseek-chat через DeepSeek API
  • Router перезапущено для підхвачення нового конфігу

Verification

helion: 🌐 Trying DEEPSEEK API → HTTP 200, 15222 tokens
All 14 agents: ✓ HTTP 200

Action Items

  • Backup router-config.yml.bak_20260228 → зберегти в репо
  • Розглянути переведення Ollama на меншу модель (smollm2:135m або qwen3-vl:8b) для vision-задач
  • Додати fallback в Router: якщо Ollama 500 → автоматично cloud_deepseek

INC-2026-001 | (попередні інциденти)

(додати при потребі)