# TASK PHASE — MVP VERIFY NO ORPHANS Version: 1.0 Target DB: daarion (NODE1) Goal: гарантувати, що в системі немає "безхозних" нод, агентів і microDAO. ## 1. Контекст Після FOUNDATION_UPDATE, нових District Protocols і seed-міграцій: - додано нові таблиці (`agents`, `microdaos`, `nodes`, `agent_assignments`, `permissions`, `rooms`, `dais_*`, …), - оновлено онтологію: **не може існувати**: - нода без microDAO/агента-відповідального, - агент без прив'язки до microDAO (окрім city-агентів), - microDAO без оркестратора. Цей таск — **чистий аудит БД** через SQL. --- ## 2. Перевірка нод (nodes) ### 2.1. Ноди без owner_microdao ```sql -- Nodes without owning microDAO SELECT node_id, name, kind, microdao_id FROM nodes WHERE microdao_id IS NULL; ``` Очікування: * 0 рядків (якщо є винятки — зафіксувати явно в коментарях до таблиці/коду). ### 2.2. Ноди без відповідального агента (node guardian/steward) ```sql -- Nodes without guardian agent (based on current schema) SELECT n.node_id, n.name FROM nodes n LEFT JOIN agents a ON a.node_id = n.node_id AND a.is_node_guardian = true WHERE a.id IS NULL; ``` Очікування: * 0 рядків або явний список нод, де керує сам root-microDAO. --- ## 3. Перевірка агентів (agents) ### 3.1. Агенти без microDAO (крім city-агентів) ```sql -- Agents without owning microDAO (excluding city-level agents) SELECT id, display_name, kind, home_microdao_id, gov_level FROM agents WHERE home_microdao_id IS NULL AND gov_level NOT IN ('city_governance') AND id NOT IN ('daarwizz', 'dario', 'daria', 'spirit', 'logic', 'energia'); ``` Очікування: * 0 рядків (усі агенти, окрім city-level, повинні мати home_microdao_id). ### 3.2. Агенти без DAIS-ідентичності ```sql -- Agents without DAIS identity SELECT a.id, a.display_name FROM agents a WHERE a.dais_identity_id IS NULL AND a.gov_level IN ('city_governance', 'district_lead', 'orchestrator', 'core_team'); ``` Очікування: * 0 рядків для governance/lead агентів. --- ## 4. Перевірка microDAO (microdaos) ### 4.1. microDAO без оркестратора ```sql -- MicroDAO without orchestrator agent SELECT id, slug, name, dao_type, orchestrator_agent_id FROM microdaos WHERE orchestrator_agent_id IS NULL; ``` Очікування: * 0 рядків (кожне microDAO має мати orchestrator_agent_id). ### 4.2. Orchestrator не існує в agents ```sql -- Orchestrator agent must exist in agents table SELECT m.id, m.slug, m.name, m.orchestrator_agent_id FROM microdaos m LEFT JOIN agents a ON m.orchestrator_agent_id = a.id WHERE a.id IS NULL AND m.orchestrator_agent_id IS NOT NULL; ``` Очікування: * 0 рядків. --- ## 5. Перевірка rooms (кімнат) ### 5.1. Кімнати без owner ```sql -- Rooms without any owner SELECT id, name, owner_type, owner_id, type FROM rooms WHERE owner_id IS NULL OR owner_id = ''; ``` Очікування: * 0 рядків (усі кімнати мають належати city, microDAO, district, або агенту). ### 5.2. Кімнати без primary_agent ```sql -- District/City rooms without primary agent SELECT id, name, type, space_scope, primary_agent_id FROM rooms WHERE type IN ('city-room', 'district-room', 'front-room') AND (primary_agent_id IS NULL OR primary_agent_id = ''); ``` Очікування: * 0 рядків. --- ## 6. Дії при виявленні "orphan" записів Якщо будь-який із запитів повертає рядки: 1. **Зробити snapshot результату** (зберегти у `docs/debug/orphans_YYYYMMDD.md`). 2. Для кожного типу: * визначити правильного owner або agent, * або вирішити, що запис зайвий → видалити. 3. Створити окрему міграцію: * `migrations/0xx_fix_orphans_YYYYMMDD.sql` * тільки `UPDATE`/`DELETE`, без зміни схеми. Після застосування міграції — повторно виконати всі запити з цього таску. --- ## 7. Умова завершення фази Фаза вважається виконаною, якщо: * всі SQL-запити з розділів 2–5 повертають 0 рядків (або винятки чітко описані й задокументовані), * є короткий звіт у `docs/debug/orphans_YYYYMMDD.md`, * UI: * `/nodes` + detail-сторінка ноди працюють, * `/agents` + кабінети агентів працюють, * `/microdao` працює без помилок.