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

113 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 | (попередні інциденти)
_(додати при потребі)_