Files
microdao-daarion/docs/tasks/TASK_PHASE_NODE_RUNTIME_AUDIT_NODE1_NODE2.md
Apple 644edd3f30 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
2025-11-30 08:45:07 -08:00

7.3 KiB
Raw Blame History

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. Список нод

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 вже додана:

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 виконати:

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 та скриптів:

  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 з описом фактів і пропозицією дій (зупинити/додати сервіс, створити таск на майбутнє).