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:
110
docs/tasks/TASK_PHASE_MVP_DAGI_INTEGRATION_AUDIT.md
Normal file
110
docs/tasks/TASK_PHASE_MVP_DAGI_INTEGRATION_AUDIT.md
Normal file
@@ -0,0 +1,110 @@
|
||||
# TASK PHASE — MVP DAGI INTEGRATION AUDIT
|
||||
|
||||
Version: 1.0
|
||||
Target: NODE1 (DAARION.space + daarion-city-service)
|
||||
|
||||
---
|
||||
|
||||
## 1. Мета
|
||||
|
||||
Замкнути ланцюг **“документи → код → деплой → UI”** для ключових сутностей MVP (agents, microdao, nodes) і підтвердити, що реалізація відповідає DAGI-онтології.
|
||||
|
||||
Вихід: `docs/debug/mvp_dagi_integration_report_<DATE>.md` з фактами та прогалинами.
|
||||
|
||||
---
|
||||
|
||||
## 2. Agents
|
||||
|
||||
### 2.1. Документи
|
||||
- `docs/foundation/DAARION_Ontology_Core_v1.md`
|
||||
- `docs/foundation/Agent_Governance_Protocol_v1.md`
|
||||
- `docs/foundation/DAARION_Identity_And_Access_Draft_v1.md`
|
||||
|
||||
Виписати вимоги щодо gov_level, DAIS identity, microDAO membership, видимості.
|
||||
|
||||
### 2.2. Backend / DAGI
|
||||
- API: `/city/agents/*`, `/api/v1/agents/*`, governance ендпоїнти.
|
||||
- Перевірити джерела даних (`agents`, `microdao_members`, `dais_*`) та інтеграції з DAGI/NATS (статуси агентів, інциденти).
|
||||
|
||||
### 2.3. Frontend (Next.js)
|
||||
- Сторінки `/agents`, `/agents/[agentId]`.
|
||||
- Переконатися, що через rewrites йдуть на прод-бекенд, а в UI видно gov-level, DAIS, microDAO-поля.
|
||||
|
||||
### 2.4. Висновок
|
||||
- Зафіксувати реалізовані/відсутні елементи.
|
||||
|
||||
---
|
||||
|
||||
## 3. MicroDAO
|
||||
|
||||
### 3.1. Документи
|
||||
- `docs/foundation/Technical_Description_microdao_PATCH_Ontology.md`
|
||||
- `docs/foundation/microdao_Data_Model_UPDATE_v1.md`
|
||||
- `docs/foundation/microdao_Event_Catalog_EXTENDED_v1.md`
|
||||
- `docs/foundation/MicroDAO_Interface_Architecture_v1.md`
|
||||
|
||||
### 3.2. Backend / DAGI
|
||||
- Ендпоїнти `/city/microdao/*`, `/api/v1/microdao/*`.
|
||||
- Перевірити зв’язки з агентами, кімнатами, event outbox.
|
||||
|
||||
### 3.3. Frontend
|
||||
- Сторінки `/microdao`, `/microdao/[slug]`, `/governance`.
|
||||
- Перевірити відображення orchestrator, каналів, кімнат, citizens.
|
||||
|
||||
### 3.4. Висновок
|
||||
- Занотувати реалізовані та відсутні функції.
|
||||
|
||||
---
|
||||
|
||||
## 4. Nodes
|
||||
|
||||
### 4.1. Документи
|
||||
- `docs/foundation/Nodes_Interface_Architecture_UPDATE_v1.md`
|
||||
- `docs/foundation/patches/Nodes_Profile_Core_Invariant_PATCH_v1.md`
|
||||
- `docs/tasks/TASK_PHASE_NODE_RUNTIME_AUDIT_NODE1_NODE2.md`
|
||||
|
||||
### 4.2. Backend / DAGI
|
||||
- API: `/public/nodes`, `/api/nodes/*`, `/city/agents/{id}/dashboard`.
|
||||
- Перевірити, що Node Core Agents, метрики, власники відображаються з `node_cache`/agent summary.
|
||||
|
||||
### 4.3. Frontend
|
||||
- Сторінки `/nodes`, `/nodes/[nodeId]`.
|
||||
- Переконатися, що відображаються всі 4 шари (metrics, ownership, models, orchestration).
|
||||
|
||||
### 4.4. Висновок
|
||||
- Описати відповідність та прогалини.
|
||||
|
||||
---
|
||||
|
||||
## 5. Звіт
|
||||
|
||||
Створити `docs/debug/mvp_dagi_integration_report_<DATE>.md` з розділами:
|
||||
|
||||
```md
|
||||
## Agents
|
||||
- Documents ↔ Code ↔ Deploy ↔ UI
|
||||
- Findings / Gaps
|
||||
|
||||
## MicroDAO
|
||||
- ...
|
||||
|
||||
## Nodes
|
||||
- ...
|
||||
|
||||
## Summary
|
||||
- Що вже відповідає онтології
|
||||
- TODO / наступні кроки
|
||||
```
|
||||
|
||||
За потреби підготувати follow-up таск `TASK_PHASE_MVP_DAGI_INTEGRATION_FIX_<DATE>.md`.
|
||||
|
||||
---
|
||||
|
||||
## 6. Команда для Cursor
|
||||
|
||||
```
|
||||
Виконай, будь ласка, `docs/tasks/TASK_PHASE_MVP_DAGI_INTEGRATION_AUDIT.md`.
|
||||
Зроби висновок у `docs/debug/mvp_dagi_integration_report_<DATE>.md`,
|
||||
що реалізовано (док → код → деплой → UI) і де залишились прогалини.
|
||||
```
|
||||
|
||||
205
docs/tasks/TASK_PHASE_MVP_DAGI_INTEGRATION_FIX_20251201.md
Normal file
205
docs/tasks/TASK_PHASE_MVP_DAGI_INTEGRATION_FIX_20251201.md
Normal file
@@ -0,0 +1,205 @@
|
||||
# TASK_PHASE_MVP_DAGI_INTEGRATION_FIX_20251201.md
|
||||
|
||||
Version: 1.0
|
||||
Status: ACTIVE
|
||||
Target: DAARION.space (NODE1)
|
||||
Scope: Backend (city-service), Next.js Frontend, DB migrations, Node Profile UI
|
||||
|
||||
---
|
||||
|
||||
# 1. МЕТА
|
||||
|
||||
Замкнути ланцюг **"документи → код → деплой → UI"** для MVP так, щоб:
|
||||
|
||||
* всі інваріанти онтології (agents, microDAO, nodes) були відображені в коді й UI;
|
||||
* DAIS/Agents/MicroDAO/Nodes працювали відповідно до foundation-доків;
|
||||
* DAGI ↔ MVP працювали узгоджено на NODE1;
|
||||
* UI не приховував важливу інформацію про агента, microDAO або ноду;
|
||||
* було ліквідовано всі зафіксовані розриви з `mvp_dagi_integration_report_20251130.md`.
|
||||
|
||||
---
|
||||
|
||||
# 2. ПЕРЕЛІК НЕОБХІДНИХ ВИПРАВЛЕНЬ (TODO)
|
||||
|
||||
---
|
||||
|
||||
## A) Agents Layer: поглибити UI відповідно до онтології
|
||||
|
||||
### ❗ A1. Додати gov-level у UI (Next.js)
|
||||
|
||||
* У списку агентів (`/agents`)
|
||||
* У профілі агента (`/agents/:agentId`)
|
||||
* На governance-сторінці (`/governance`)
|
||||
|
||||
Поля з БД:
|
||||
|
||||
* `gov_level`
|
||||
* `governance_rank` (якщо є)
|
||||
* бейджі з документа Agent_Governance_Protocol_v1.md
|
||||
|
||||
### ❗ A2. Додати DAIS ID у всі представлення агентів
|
||||
|
||||
* DAIS identity (`dais_identities.id`)
|
||||
* DAIS email(s)
|
||||
* DAIS wallet(s)
|
||||
|
||||
### ❗ A3. Додати microDAO membership для агента
|
||||
|
||||
У UI агента показувати:
|
||||
|
||||
* "agent belongs to microDAO: <slug>"
|
||||
* клік → кімнати microDAO
|
||||
* бейдж microdao_type (regular/district/root)
|
||||
|
||||
---
|
||||
|
||||
## B) MicroDAO Layer: привести UI до документації
|
||||
|
||||
### ❗ B1. Розширити "MicroDAO Dashboard"
|
||||
|
||||
На основі:
|
||||
|
||||
* MicroDAO_Interface_Architecture_v1.md
|
||||
* microdao_Data_Model_UPDATE_v1.md
|
||||
* Rooms_Layer_Architecture_v1.md
|
||||
|
||||
Додати:
|
||||
|
||||
* список агентів microDAO
|
||||
* список кімнат microDAO
|
||||
* список громадян microDAO (напр. microdao_members / agent_assignments)
|
||||
* бейджі microdao_type (root / district / org / clan / platform)
|
||||
* кімната microDAO "lobby / help / governance"
|
||||
|
||||
### ❗ B2. Показати District-level microDAO як окремий тип
|
||||
|
||||
* GREENFOOD
|
||||
* ENERGYUNION
|
||||
* SOUL
|
||||
* CLAN (коли буде протокол)
|
||||
|
||||
---
|
||||
|
||||
## C) Nodes Layer: вирівняти з онтологією та документами
|
||||
|
||||
### ❗ C1. Реалізувати "Node Dashboard (MVP full)"
|
||||
|
||||
Згідно:
|
||||
|
||||
* Nodes_Profile_Core_Invariant_PATCH_v1.md
|
||||
* Nodes_Interface_Architecture_UPDATE_v1.md
|
||||
|
||||
Додати в `/nodes/:nodeId`:
|
||||
|
||||
**Metrics Layer:**
|
||||
|
||||
* CPU load
|
||||
* CPU cores
|
||||
* RAM total/used
|
||||
* GPU count
|
||||
* VRAM total/used
|
||||
* Disk sizes
|
||||
|
||||
**Ownership Layer:**
|
||||
|
||||
* owner_microdao
|
||||
* district_slug
|
||||
* DAIS-агенти ноди
|
||||
|
||||
**Models Layer:**
|
||||
|
||||
* Swapper status
|
||||
* Перелік моделей (стек) у JSON
|
||||
* Відображення ролей моделей (LLM/coder/vision/etc.)
|
||||
|
||||
**Orchestration Layer:**
|
||||
|
||||
* Node Core Agents (GuardianOS/Pulse/Atomis)
|
||||
* agent-count (local_agents)
|
||||
* health DAGI router
|
||||
|
||||
### ❗ C2. Створити міграцію nodes
|
||||
|
||||
Додати таблицю `nodes` у PG, щоб перестати залежати від `node_cache`.
|
||||
|
||||
Мінімальні поля:
|
||||
|
||||
```sql
|
||||
CREATE TABLE nodes (
|
||||
id TEXT PRIMARY KEY, -- slug, e.g. node-1-hetzner-gex44
|
||||
display_name TEXT NOT NULL,
|
||||
owner_microdao_id TEXT REFERENCES microdaos(id),
|
||||
node_type TEXT, -- energy, compute, hybrid, iot_gateway
|
||||
env TEXT, -- production, development, staging
|
||||
cpu_cores INTEGER,
|
||||
ram_gb INTEGER,
|
||||
gpu_count INTEGER DEFAULT 0,
|
||||
disk_gb INTEGER,
|
||||
status TEXT DEFAULT 'unknown',
|
||||
created_at TIMESTAMPTZ DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
```
|
||||
|
||||
### ❗ C3. Записати NODE1 / NODE2 у `nodes`
|
||||
|
||||
* проставити:
|
||||
- `owner_microdao_id = dao_daarion`
|
||||
- `home_node_id` для GuardianOS, Pulse, Atomis
|
||||
|
||||
---
|
||||
|
||||
# D) Backend Fixes
|
||||
|
||||
### ❗ D1. Виправити /api/agents/* відповідно до DAIS-шару
|
||||
|
||||
Формалізувати:
|
||||
|
||||
* dais_identity
|
||||
* dais_emails[]
|
||||
* dais_wallets[]
|
||||
* home_node_id
|
||||
* owner_microdao_id
|
||||
|
||||
### ❗ D2. Додати `/api/microdao/:id/rooms`
|
||||
|
||||
Для MicroDAO Dashboard.
|
||||
|
||||
### ❗ D3. Виправити `/api/nodes/:id/dashboard`
|
||||
|
||||
Зробити відповідно до Nodes Profile (див. C1).
|
||||
|
||||
---
|
||||
|
||||
# 3. ВИХІДНІ АРТЕФАКТИ
|
||||
|
||||
Cursor має створити:
|
||||
|
||||
* `docs/debug/mvp_dagi_integration_fix_report_<DATE>.md`
|
||||
(результати перевірки після фіксів)
|
||||
|
||||
* (опціонально) `frontend-diff/` & `backend-diff/`
|
||||
(всі зміни по UI та API)
|
||||
|
||||
---
|
||||
|
||||
# 4. КОМАНДА ДЛЯ CURSOR
|
||||
|
||||
Після додавання цього файла у репо:
|
||||
|
||||
> Виконай, будь ласка,
|
||||
> `docs/tasks/TASK_PHASE_MVP_DAGI_INTEGRATION_FIX_20251201.md`
|
||||
> у повному обсязі.
|
||||
> Створи `docs/debug/mvp_dagi_integration_fix_report_<DATE>.md`,
|
||||
> і підготуй дифи для backend (FastAPI) та frontend (Next.js).
|
||||
|
||||
---
|
||||
|
||||
# 5. КРИТЕРІЇ ЗАВЕРШЕННЯ
|
||||
|
||||
- [ ] A1-A3: gov-level, DAIS ID, microDAO membership відображаються на сторінках агентів
|
||||
- [ ] B1-B2: MicroDAO Dashboard показує agents, rooms, citizens, district badge
|
||||
- [ ] C1-C3: Node Dashboard показує 4 шари (Metrics, Ownership, Models, Orchestration), таблиця `nodes` існує, NODE1/NODE2 записані
|
||||
- [ ] D1-D3: API повертають повні дані (DAIS, rooms, node dashboard)
|
||||
- [ ] Звіт `mvp_dagi_integration_fix_report_<DATE>.md` підтверджує, що всі пункти закриті
|
||||
|
||||
110
docs/tasks/TASK_PHASE_NODE2_CONFIG_AUDIT.md
Normal file
110
docs/tasks/TASK_PHASE_NODE2_CONFIG_AUDIT.md
Normal file
@@ -0,0 +1,110 @@
|
||||
# TASK PHASE — NODE2 CONFIG & ISOLATION AUDIT
|
||||
|
||||
Version: 1.0
|
||||
Target: NODE2 (core-team / dev node)
|
||||
|
||||
---
|
||||
|
||||
## 1. Мета
|
||||
|
||||
Переконатися, що dev-нода (NODE2) має **власні конфіги** та не підміняє прод-сервіси NODE1:
|
||||
|
||||
- інші `DATABASE_URL`, `NATS_URL`, `MATRIX_GATEWAY_URL`, токени;
|
||||
- відсутній доступ до прод-БД `daarion` та прод NATS;
|
||||
- чітке розділення ключів Telegram/Matrix/Email gateway;
|
||||
- зафіксована політика доступу до DAIS/secretів.
|
||||
|
||||
---
|
||||
|
||||
## 2. Перевірка контейнерів та змінних середовища
|
||||
|
||||
1. На NODE2 виконати:
|
||||
|
||||
```bash
|
||||
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"
|
||||
```
|
||||
|
||||
2. Для кожного контейнера DAGI-стеку (`dagi-router`, `dagi-postgres`, `dagi-nats`, `daarion-city-service`, `gateway`, `stt`, `ocr`, `rag`, `vector-db`, `swapper`, тощо) виконати:
|
||||
|
||||
```bash
|
||||
docker inspect <container> \
|
||||
--format='{{json .Config.Env}}' | jq
|
||||
```
|
||||
|
||||
3. Особливу увагу звернути на ENV:
|
||||
- `DATABASE_URL`
|
||||
- `REDIS_URL`
|
||||
- `NATS_URL`
|
||||
- `MATRIX_GATEWAY_URL`
|
||||
- `INTERNAL_API_URL`
|
||||
- API ключі/токени (Telegram, Discord, Matrix, OAuth)
|
||||
|
||||
4. Якщо контейнер використовує `.env` файл — зчитати його (через `docker inspect ... Mounts`).
|
||||
|
||||
---
|
||||
|
||||
## 3. Виявлення перетинів з PROD
|
||||
|
||||
### 3.1. База даних
|
||||
|
||||
- Перевірити, що `DATABASE_URL` **не вказує** на `postgres://postgres:postgres@dagi-postgres:5432/daarion`.
|
||||
- Dev-нода повинна використовувати окрему БД (інший хост/порт або іншу назву БД).
|
||||
- Якщо все ж використовує прод-БД — зафіксувати це як критичне відхилення.
|
||||
|
||||
### 3.2. NATS
|
||||
|
||||
- `NATS_URL` має вказувати на локальний/Dev NATS.
|
||||
- Заборонено використовувати `nats://dagi-nats:4222` з прод-мережі (NODE1).
|
||||
|
||||
### 3.3. Gateway / Matrix / Telegram
|
||||
|
||||
- Перевірити токени (`TELEGRAM_BOT_TOKEN`, Matrix creds, Discord tokens, тощо).
|
||||
- Якщо використовуються прод ключі — зафіксувати.
|
||||
|
||||
### 3.4. Secrets
|
||||
|
||||
- Переконатися, що `daarion-city-service` на NODE2 має **інший** `JWT_SECRET`, `INTERNAL_SECRET`, `AUTH_SERVICE_URL`.
|
||||
- Перевірити відсутність `.secrets` файлів, спільних із NODE1.
|
||||
|
||||
---
|
||||
|
||||
## 4. Висновок і логування
|
||||
|
||||
1. Створити файл `docs/debug/node2_config_audit_<DATE>.md` з такими секціями:
|
||||
- `Database`
|
||||
- `NATS`
|
||||
- `Gateway/Matrix`
|
||||
- `Other secrets`
|
||||
- `Summary`
|
||||
|
||||
2. У кожній секції вказати:
|
||||
- реальні значення (без публікації секретів, лише хости/порти/назви БД);
|
||||
- чи збігаються вони з прод-конфігом;
|
||||
- рекомендації (змінити URL/ключ, перенаправити на dev-екземпляр, прибрати контейнер тощо).
|
||||
|
||||
3. Якщо знайдені перетини, запропонувати конкретні кроки:
|
||||
- створити dev БД;
|
||||
- змінити docker-compose;
|
||||
- оновити токени в secret manager;
|
||||
- додати firewall між NODE1/NODE2.
|
||||
|
||||
---
|
||||
|
||||
## 5. Критерії завершення
|
||||
|
||||
- `docs/debug/node2_config_audit_<DATE>.md` заповнений фактами та рекомендаціями;
|
||||
- Виявлені всі місця, де dev-нода використовує прод-конфіги (якщо є);
|
||||
- Зроблені пропозиції, як рознести конфіги;
|
||||
- При необхідності створено follow-up таск (наприклад, `TASK_PHASE_NODE2_CONFIG_FIX.md`).
|
||||
|
||||
---
|
||||
|
||||
## 6. Команда для Cursor
|
||||
|
||||
```
|
||||
Прошу виконати `docs/tasks/TASK_PHASE_NODE2_CONFIG_AUDIT.md`.
|
||||
Мета: зібрати docker inspect/env на NODE2, перевірити DATABASE/NATS/Gateway/Secrets,
|
||||
зробити висновок у `docs/debug/node2_config_audit_<DATE>.md`.
|
||||
```
|
||||
|
||||
|
||||
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