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
7.3 KiB
TASK PHASE — NODE RUNTIME AUDIT (NODE1 & NODE2)
Version: 1.0
Target: NODE1 (production), NODE2 (development)
1. Мета
Гарантувати, що:
- У БД рівно дві реальні ноди (NODE1, NODE2) з коректними полями.
- DAGI-стек на NODE1 відповідає документації (ті сервіси, які мають працювати в проді).
- NODE2 позначений як development-нода з правильними тегами.
- UI Node Directory та Node Profile показують саме ці дані.
2. Перевірка БД (nodes + агенти на ноді)
2.1. Список нод
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).
- NODE1 —
2.2. Агенти, прив’язані до нод
Якщо колонка home_node_id вже додана:
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-postgresdagi-natsdaarion-city-servicedaarion-webdagi-stt-servicedagi-ocr-servicedagi-web-search-servicedagi-rag-servicedagi-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 виконати:
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:
#!/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 виконати:
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 та скриптів:
- Відкрити
https://daarion.space/nodes— має бути рівно 2 ноди з правильними даними. - Перевірити сторінки:
https://daarion.space/nodes/node-1-hetzner-gex44https://daarion.space/nodes/node-2-macbook-m4max
Переконатися, що:
- сторінки рендеряться без
Failed to fetch; - якщо dashboard ще WIP — показано попереджувальний банер, але базовий профіль працює.
6. Критерії завершення
- У
nodes— рівно дві ноди з коректними полями. - Контейнери DAGI на NODE1 відповідають очікуваному стеку.
- NODE2 позначений як development-нода без лишніх прод-сервісів.
- У
docs/debug/збережені файли:node1_containers_<DATE>.txtnode1_health_<DATE>.txtnode2_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з описом фактів і пропозицією дій (зупинити/додати сервіс, створити таск на майбутнє).