feat(mvp): DAGI Integration Fix - gov_level, DAIS, nodes table
TASK_PHASE_MVP_DAGI_INTEGRATION_FIX_20251201 A) Agents Layer: - A1: Added gov_level to API and UI (list + profile) - A2: Added dais_identity_id to API and UI - A3: Added home_microdao_id/name/slug for ownership display B) MicroDAO Layer: - B1/B2: Already implemented (agents, rooms, citizens, district badge) C) Nodes Layer: - C1: Node Dashboard already implemented - C2: Created nodes table migration with owner_microdao_id - C3: INSERT NODE1/NODE2 with dao_daarion ownership D) Backend Fixes: - D1: Extended /api/agents/* with DAIS/governance fields - D2/D3: Already implemented Files changed: - services/city-service/repo_city.py - services/city-service/models_city.py - services/city-service/routes_city.py - services/city-service/migrations.py - apps/web/src/lib/types/agents.ts - apps/web/src/lib/agent-dashboard.ts - apps/web/src/app/agents/page.tsx - apps/web/src/components/agent-dashboard/AgentSummaryCard.tsx Reports: - docs/debug/mvp_dagi_integration_fix_report_20251201.md - docs/tasks/TASK_PHASE_MVP_DAGI_INTEGRATION_FIX_20251201.md
This commit is contained in:
199
docs/tasks/TASK_PHASE_NODE_RUNTIME_AUDIT_NODE1_NODE2.md
Normal file
199
docs/tasks/TASK_PHASE_NODE_RUNTIME_AUDIT_NODE1_NODE2.md
Normal file
@@ -0,0 +1,199 @@
|
||||
# TASK PHASE — NODE RUNTIME AUDIT (NODE1 & NODE2)
|
||||
|
||||
Version: 1.0
|
||||
Target: NODE1 (production), NODE2 (development)
|
||||
|
||||
---
|
||||
|
||||
## 1. Мета
|
||||
|
||||
Гарантувати, що:
|
||||
|
||||
1. У БД рівно дві реальні ноди (NODE1, NODE2) з коректними полями.
|
||||
2. DAGI-стек на NODE1 відповідає документації (ті сервіси, які мають працювати в проді).
|
||||
3. NODE2 позначений як development-нода з правильними тегами.
|
||||
4. UI Node Directory та Node Profile показують саме ці дані.
|
||||
|
||||
---
|
||||
|
||||
## 2. Перевірка БД (nodes + агенти на ноді)
|
||||
|
||||
### 2.1. Список нод
|
||||
|
||||
```sql
|
||||
SELECT id, slug, name, kind, environment, hostname, owner_microdao_id, guardian_agent_id, steward_agent_id
|
||||
FROM nodes
|
||||
ORDER BY id;
|
||||
```
|
||||
|
||||
Очікування:
|
||||
|
||||
- рівно 2 рядки:
|
||||
- NODE1 — `Hetzner GEX44 Production` (environment = `production`);
|
||||
- NODE2 — `MacBook Pro M4 Max` (environment = `development`).
|
||||
|
||||
### 2.2. Агенти, прив’язані до нод
|
||||
|
||||
Якщо колонка `home_node_id` вже додана:
|
||||
|
||||
```sql
|
||||
SELECT id, slug, display_name, home_node_id, primary_microdao_id
|
||||
FROM agents
|
||||
WHERE home_node_id IS NOT NULL AND deleted_at IS NULL
|
||||
ORDER BY home_node_id, id;
|
||||
```
|
||||
|
||||
Очікування:
|
||||
|
||||
- NODE1: інфраструктурні/прод-агенти (router, gateway, guardians);
|
||||
- NODE2: core-team / AI-runtime агенти (якщо вже зареєстровані).
|
||||
|
||||
> Якщо `home_node_id` поки немає — додати TODO у звіт і зафіксувати актуальний стан у README.
|
||||
|
||||
---
|
||||
|
||||
## 3. Перевірка DAGI-стека на NODE1
|
||||
|
||||
### 3.0. Node Profiles (expected DAGI stack)
|
||||
|
||||
#### NODE1 — `node-1-hetzner-gex44`
|
||||
|
||||
Role: infra / city / production.
|
||||
|
||||
Expected services (name mask):
|
||||
- `dagi-router*`
|
||||
- `gateway` / `dagi-gateway*`
|
||||
- `dagi-postgres`
|
||||
- `dagi-nats`
|
||||
- `daarion-city-service`
|
||||
- `daarion-web`
|
||||
- `dagi-stt-service`
|
||||
- `dagi-ocr-service`
|
||||
- `dagi-web-search-service`
|
||||
- `dagi-rag-service`
|
||||
- `dagi-vector-db-service`
|
||||
- інші prod-інтеграції (Matrix gateway, telegram bots, crew router, etc.)
|
||||
|
||||
Forbidden / unexpected на NODE1:
|
||||
- важкі dev/LLM контейнери (ollama, vllm, test models),
|
||||
- експериментальні сервіси core-team (якщо це не задокументовані прод-сервіси).
|
||||
|
||||
#### NODE2 — `node-2-macbook-m4max`
|
||||
|
||||
Role: development / models / ai-runtime.
|
||||
|
||||
Expected services:
|
||||
- `ollama`, `vllm`, `text-gen` або інші LLM runtime контейнери,
|
||||
- dev/test RAG, vision, STT модулі,
|
||||
- core-team agents / experimental gateways.
|
||||
|
||||
Forbidden / unexpected на NODE2:
|
||||
- продакшн-сервіси міста (`daarion-city-service`, `dagi-router`, `dagi-postgres`, `dagi-nats`, тощо),
|
||||
- будь-які критичні інфра-компоненти, які повинні жити лише на NODE1.
|
||||
|
||||
### 3.1. Список контейнерів
|
||||
|
||||
На NODE1 виконати:
|
||||
|
||||
```bash
|
||||
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" | grep -E "(dagi-|daarion-|gateway)"
|
||||
```
|
||||
|
||||
Результат зберегти у файл `docs/debug/node1_containers_<DATE>.txt`.
|
||||
|
||||
Очікуваний перелік (орієнтовно, залежно від compose):
|
||||
|
||||
- `dagi-router`, `dagi-gateway`, `dagi-postgres`, `dagi-nats`;
|
||||
- сервісні контейнери (`dagı-ocr-service`, `dagı-stt-service`, `dagı-web-search-service`, `dagı-rag-service`, `dagı-vector-db-service`, тощо за актуальним `docker-compose` файлом);
|
||||
- `daarion-city-service`;
|
||||
- `daarion-web` (якщо працює через docker run).
|
||||
|
||||
### 3.2. Healthcheck основних сервісів
|
||||
|
||||
Створити скрипт `scripts/node1_healthcheck.sh`:
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
echo "== NODE1 HEALTHCHECK ==" > /tmp/node1_health_status.txt
|
||||
|
||||
{
|
||||
curl -sf http://daarion-city-service:7001/health && echo "city-service OK"
|
||||
} || echo "city-service FAILED" >> /tmp/node1_health_status.txt
|
||||
|
||||
{
|
||||
curl -sf http://gateway:9300/health && echo "gateway OK"
|
||||
} || echo "gateway FAILED" >> /tmp/node1_health_status.txt
|
||||
|
||||
{
|
||||
nc -z dagi-nats 4222 && echo "NATS OK"
|
||||
} || echo "NATS FAILED" >> /tmp/node1_health_status.txt
|
||||
|
||||
{
|
||||
PGPASSWORD=postgres psql -h dagi-postgres -U postgres -d daarion -c "SELECT 1" && echo "postgres OK"
|
||||
} || echo "postgres FAILED" >> /tmp/node1_health_status.txt
|
||||
```
|
||||
|
||||
Перенести файл `/tmp/node1_health_status.txt` до `docs/debug/node1_health_<DATE>.txt`.
|
||||
|
||||
---
|
||||
|
||||
## 4. Перевірка NODE2 (development)
|
||||
|
||||
На NODE2 виконати:
|
||||
|
||||
```bash
|
||||
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" | grep -E "(dagi-|daarion-|ollama|models)"
|
||||
```
|
||||
|
||||
Зберегти результат у `docs/debug/node2_containers_<DATE>.txt`.
|
||||
|
||||
Очікування:
|
||||
|
||||
- NODE2 не має зайвих прод-сервісів (тільки dev/runtime контейнери);
|
||||
- у таблиці `nodes` для NODE2 стоять теги `development`, `gpu`, `ai_runtime` (або аналогічні).
|
||||
|
||||
---
|
||||
|
||||
## 5. Перевірка відповідності UI
|
||||
|
||||
Після SQL та скриптів:
|
||||
|
||||
1. Відкрити `https://daarion.space/nodes` — має бути рівно 2 ноди з правильними даними.
|
||||
2. Перевірити сторінки:
|
||||
- `https://daarion.space/nodes/node-1-hetzner-gex44`
|
||||
- `https://daarion.space/nodes/node-2-macbook-m4max`
|
||||
|
||||
Переконатися, що:
|
||||
|
||||
- сторінки рендеряться без `Failed to fetch`;
|
||||
- якщо dashboard ще WIP — показано попереджувальний банер, але базовий профіль працює.
|
||||
|
||||
---
|
||||
|
||||
## 6. Критерії завершення
|
||||
|
||||
- У `nodes` — рівно дві ноди з коректними полями.
|
||||
- Контейнери DAGI на NODE1 відповідають очікуваному стеку.
|
||||
- NODE2 позначений як development-нода без лишніх прод-сервісів.
|
||||
- У `docs/debug/` збережені файли:
|
||||
- `node1_containers_<DATE>.txt`
|
||||
- `node1_health_<DATE>.txt`
|
||||
- `node2_containers_<DATE>.txt`
|
||||
- UI `/nodes` та сторінки нод працюють без помилок і показують актуальні дані.
|
||||
|
||||
---
|
||||
|
||||
## 7. Запуск таска в Cursor
|
||||
|
||||
В чаті Cursor (репозиторій `microdao-daarion`) надіслати:
|
||||
|
||||
> Виконай, будь ласка,
|
||||
> `docs/tasks/TASK_PHASE_NODE_RUNTIME_AUDIT_NODE1_NODE2.md`
|
||||
> по кроках, як описано в документі.
|
||||
> Мета: підтвердити, що в БД рівно дві ноди, DAGI-стек на NODE1 відповідає очікуваному, NODE2 відмічений як development, і UI `/nodes` та сторінки нод показують ці дані.
|
||||
|
||||
> Особливий акцент: порівняй реальний список контейнерів з розділом **Node Profiles**. Якщо є розбіжності (відсутній обов’язковий сервіс або запущено заборонений), створи файл `docs/debug/node_stack_mismatch_<DATE>.md` з описом фактів і пропозицією дій (зупинити/додати сервіс, створити таск на майбутнє).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user