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¶
-- Nodes without owning microDAO
SELECT node_id, name, kind, microdao_id
FROM nodes
WHERE microdao_id IS NULL;
Очікування: * 0 рядків (якщо є винятки — зафіксувати явно в коментарях до таблиці/коду).
2.2. Ноди без відповідального агента (node guardian/steward)¶
-- 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-агентів)¶
-- 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-ідентичності¶
-- 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 без оркестратора¶
-- 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¶
-- 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¶
-- 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¶
-- 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" записів¶
Якщо будь-який із запитів повертає рядки:
- Зробити snapshot результату (зберегти у
docs/debug/orphans_YYYYMMDD.md). - Для кожного типу:
- визначити правильного owner або agent,
- або вирішити, що запис зайвий → видалити.
- Створити окрему міграцію:
migrations/0xx_fix_orphans_YYYYMMDD.sql- тільки
UPDATE/DELETE, без зміни схеми.
Після застосування міграції — повторно виконати всі запити з цього таску.
7. Умова завершення фази¶
Фаза вважається виконаною, якщо:
- всі SQL-запити з розділів 2–5 повертають 0 рядків (або винятки чітко описані й задокументовані),
- є короткий звіт у
docs/debug/orphans_YYYYMMDD.md, - UI:
/nodes+ detail-сторінка ноди працюють,/agents+ кабінети агентів працюють,/microdaoпрацює без помилок.