feat: TASK 037A/B - MicroDAO Multi-Room Cleanup & UI Polish

TASK 037A: Backend Consistency
- Added db/sql/037_microdao_agent_audit.sql
- Added services/city-service/tools/fix_microdao_agent_consistency.py
- Updated repo_city.get_public_citizens with stricter filtering (node_id, microdao_membership)
- Updated PublicCitizenSummary model to include home_microdao and primary_city_room
- Updated NodeProfile model and get_node_by_id to include microdaos list

TASK 037B: UI Polish
- Updated MicrodaoRoomsSection with role-based colors/icons and mini-map
- Updated /microdao/[slug] with new Hero Block (badges, stats, orchestrator)
- Updated /citizens/[slug] with MicroDAO cross-link in DAIS profile
- Updated /nodes/[nodeId] with MicroDAO Presence section
This commit is contained in:
Apple
2025-11-29 01:35:54 -08:00
parent 86f5b58de5
commit 3ccc0e2d43
11 changed files with 862 additions and 360 deletions

View File

@@ -0,0 +1,80 @@
# MicroDAO & Agent Consistency Cleanup (Task 037A)
**Дата:** 29 листопада 2025
**Статус:** Реалізовано (інструменти готові)
Цей документ описує процедуру очистки та вирівнювання даних між агентами, MicroDAO та Citizens Layer.
---
## 1. Проблематика
У системі накопичилися:
* Агенти без привʼязки до MicroDAO (orphans).
* Публічні агенти без `public_slug` або `node_id`.
* MicroDAO без кімнат або без `primary` кімнати.
* Це призводить до некоректного відображення у `/citizens`, `/microdao` та `/nodes`.
## 2. Інструменти аудиту
### SQL Аудит (`db/sql/037_microdao_agent_audit.sql`)
Цей SQL-файл містить запити для ручної перевірки стану бази даних:
* Пошук публічних агентів без membership.
* Пошук агентів без `node_id`.
* Пошук MicroDAO без кімнат.
* Пошук MicroDAO з дубльованими primary-кімнатами.
Запуск (приклад):
```bash
cat db/sql/037_microdao_agent_audit.sql | docker exec -i dagi-postgres psql -U postgres -d daarion
```
### Автоматичний скрипт (`services/city-service/tools/fix_microdao_agent_consistency.py`)
Скрипт для автоматичного виправлення типових помилок.
**Що він робить:**
1. **Агенти:**
* Якщо `public_slug` відсутній → встановлює `public_slug = id`.
* Логує агентів без `node_id` та MicroDAO membership.
2. **MicroDAO:**
* Перевіряє наявність кімнат.
* Якщо є кімнати, але немає `primary` → призначає кімнату з найменшим `sort_order` як primary.
* Якщо є кілька `primary` → залишає одну, інші робить `team`.
**Запуск:**
1. Зайти в контейнер `city-service` (або локально з налаштованим venv).
2. Запустити в режимі Dry Run (тільки логування):
```bash
python tools/fix_microdao_agent_consistency.py
```
3. Застосувати зміни:
```bash
python tools/fix_microdao_agent_consistency.py --apply
```
---
## 3. Зміни в API (Citizens Layer)
Впроваджено суворішу фільтрацію для публічних громадян (`/public/citizens`):
* Агент повинен мати `is_public = true`.
* `public_slug` не NULL.
* **`node_id` не NULL.**
* **Має хоча б одне MicroDAO membership** (`EXISTS (SELECT 1 FROM microdao_agents ...)`).
Це гарантує, що "сміттєві" тестові агенти не потрапляють у публічні списки.
Також API тепер повертає розширену інформацію:
* `home_microdao_slug`, `home_microdao_name`
* `primary_city_room` (об'єкт з деталями кімнати)
---
## 4. Рекомендації для Operations
1. Регулярно запускати `audit.sql` для моніторингу здоров'я даних.
2. При створенні нових агентів вручну через SQL — обов'язково додавати їх у `microdao_agents` та прописувати `node_id`.
3. При створенні MicroDAO — обов'язково створювати хоча б одну кімнату і робити її `primary`.

View File

@@ -0,0 +1,57 @@
# MicroDAO UI & Multi-Room Experience (Task 037B)
**Дата:** 29 листопада 2025
**Статус:** Реалізовано
Цей документ описує оновлений інтерфейс MicroDAO, систему кімнат та інтеграцію з Citizens/Nodes.
---
## 1. MicroDAO Dashboard (`/microdao/[slug]`)
Сторінка MicroDAO отримала значне оновлення ("Hero Block"):
* **Візуальний стиль:** Великий заголовок, бейджі типу (Platform/MicroDAO), District, Parent DAO.
* **Статистика:** Кількість громадян, кімнат, посилання на Оркестратора.
* **Навігація:** Чіткий поділ на дочірні DAO, агентів, громадян, канали.
### Multi-Room Section
Секція кімнат тепер підтримує рольову модель:
* **Primary Room:** Завжди відображається розгорнутою з вбудованим чатом. Має особливий стиль.
* **Other Rooms:** Відображаються компактними картками.
* **Mini-Map:** Кольорові індикатори показують структуру кімнат за ролями (Governance, Research, Team, etc.).
---
## 2. Ролі Кімнат
Кожна кімната в MicroDAO має роль, яка визначає її колір та іконку:
| Роль | Колір | Іконка | Призначення |
|---|---|---|---|
| `primary` | Emerald (Зелений) | Home | Головна кімната, лобі, загальний чат |
| `lobby` | Sky (Блакитний) | Message | Привітання, флуд |
| `team` | Indigo (Синій) | Users | Внутрішня робота команди |
| `research` | Violet (Фіолетовий) | Flask | Дослідження, R&D |
| `security` | Rose (Червоний) | Shield | Безпека, алерти |
| `governance` | Amber (Жовтий) | Gavel | Голосування, рішення |
Оркестратор може змінювати ролі через **Admin Panel** на сторінці MicroDAO.
---
## 3. Інтеграція Citizens ↔ MicroDAO
* **Citizen Profile:** У паспорті громадянина (`/citizens/[slug]`) тепер є пряме посилання на його Home MicroDAO.
* **Hero Badge:** У шапці профілю громадянина відображається бейдж MicroDAO.
---
## 4. Інтеграція Nodes ↔ MicroDAO
На сторінці Ноди (`/nodes/[nodeId]`):
* Додано секцію **MicroDAO Presence**.
* Вона показує список MicroDAO, чий Оркестратор працює на цій ноді.
* Відображається кількість кімнат кожного DAO.
Це дозволяє бачити фізичне/логічне розміщення спільнот по інфраструктурі мережі.